diff --git a/.changeset/fix-agent-manager-session-disappears.md b/.changeset/fix-agent-manager-session-disappears.md new file mode 100644 index 00000000000..b02d60a95a4 --- /dev/null +++ b/.changeset/fix-agent-manager-session-disappears.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Fix Agent Manager session disappearing immediately after starting due to gitUrl race condition diff --git a/src/core/kilocode/agent-manager/AgentManagerProvider.ts b/src/core/kilocode/agent-manager/AgentManagerProvider.ts index b508c46e4c4..36ca0b82bf8 100644 --- a/src/core/kilocode/agent-manager/AgentManagerProvider.ts +++ b/src/core/kilocode/agent-manager/AgentManagerProvider.ts @@ -473,6 +473,12 @@ export class AgentManagerProvider implements vscode.Disposable { if (workspaceFolder) { try { gitUrl = normalizeGitUrl(await getRemoteUrl(workspaceFolder)) + // Update currentGitUrl to ensure consistency between session gitUrl and filter + // This fixes a race condition where initializeCurrentGitUrl() hasn't completed yet + if (gitUrl && !this.currentGitUrl) { + this.currentGitUrl = gitUrl + this.outputChannel.appendLine(`[AgentManager] Updated current git URL: ${gitUrl}`) + } } catch (error) { this.outputChannel.appendLine( `[AgentManager] Could not get git URL: ${error instanceof Error ? error.message : String(error)}`, diff --git a/src/core/kilocode/agent-manager/__tests__/AgentManagerProvider.spec.ts b/src/core/kilocode/agent-manager/__tests__/AgentManagerProvider.spec.ts index dbc4234e8fb..b3f97af87ba 100644 --- a/src/core/kilocode/agent-manager/__tests__/AgentManagerProvider.spec.ts +++ b/src/core/kilocode/agent-manager/__tests__/AgentManagerProvider.spec.ts @@ -842,6 +842,28 @@ describe("AgentManagerProvider gitUrl filtering", () => { expect(state.sessions[0].sessionId).toBe("session-2") }) + it("updates currentGitUrl when starting a session if not already set (race condition fix)", async () => { + // Simulate the race condition: currentGitUrl is undefined because initializeCurrentGitUrl hasn't completed + ;(provider as any).currentGitUrl = undefined + + // Start a session - this should update currentGitUrl + await (provider as any).startAgentSession("test prompt") + + // currentGitUrl should now be set from the session's gitUrl + expect((provider as any).currentGitUrl).toBe("https://github.com/org/repo.git") + }) + + it("does not overwrite currentGitUrl if already set", async () => { + // Set a different currentGitUrl + ;(provider as any).currentGitUrl = "https://github.com/org/other-repo.git" + + // Start a session + await (provider as any).startAgentSession("test prompt") + + // currentGitUrl should NOT be overwritten + expect((provider as any).currentGitUrl).toBe("https://github.com/org/other-repo.git") + }) + describe("filterRemoteSessionsByGitUrl", () => { it("returns only sessions with matching git_url when currentGitUrl is set", () => { const remoteSessions = [