From 5d990e0583c72fb06927665bfdf2f579308e52cf Mon Sep 17 00:00:00 2001 From: marius-kilocode Date: Fri, 9 Jan 2026 10:41:49 +0100 Subject: [PATCH] fix: agent manager session disappears due to gitUrl race condition --- .../fix-agent-manager-session-disappears.md | 5 +++++ .../agent-manager/AgentManagerProvider.ts | 6 +++++ .../__tests__/AgentManagerProvider.spec.ts | 22 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 .changeset/fix-agent-manager-session-disappears.md diff --git a/.changeset/fix-agent-manager-session-disappears.md b/.changeset/fix-agent-manager-session-disappears.md new file mode 100644 index 0000000000..b02d60a95a --- /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 b508c46e4c..36ca0b82bf 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 dbc4234e8f..b3f97af87b 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 = [