From c4281a7dd1a36e39e34d0c7f4cda174700d6f4e9 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 9 Jul 2026 11:37:07 +0200 Subject: [PATCH] fix(coding-agent): warn when session-id creates a session closes #6407 --- packages/coding-agent/CHANGELOG.md | 1 + packages/coding-agent/src/main.ts | 5 +++ .../test/session-id-readonly.test.ts | 40 +++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 1e8708c13..70a4f09d5 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -22,6 +22,7 @@ - Fixed auto-retry for Bun fetch socket-drop errors reported as `socket connection was closed`, so transient provider disconnects do not end headless runs without retrying ([#6431](https://github.com/earendil-works/pi/issues/6431)). - Fixed `models.json` `modelOverrides` to apply to extension-registered provider models ([#6367](https://github.com/earendil-works/pi/issues/6367)). - Fixed project context file discovery to use stable parent traversal on Windows so startup no longer hangs while loading AGENTS.md or CLAUDE.md ([#6369](https://github.com/earendil-works/pi/issues/6369)). +- Fixed `--session-id` startup to warn when no existing project session has that id and pi creates a new session ([#6407](https://github.com/earendil-works/pi/issues/6407)). ### Removed diff --git a/packages/coding-agent/src/main.ts b/packages/coding-agent/src/main.ts index a58e67169..11c3f120e 100644 --- a/packages/coding-agent/src/main.ts +++ b/packages/coding-agent/src/main.ts @@ -344,6 +344,11 @@ async function createSessionManager( if (existingSession) { return SessionManager.open(existingSession.path, sessionDir); } + console.error( + chalk.yellow( + `Warning: No project session found with id '${parsed.sessionId}'; creating a new session with that id.`, + ), + ); } return SessionManager.create(cwd, sessionDir, { id: parsed.sessionId }); diff --git a/packages/coding-agent/test/session-id-readonly.test.ts b/packages/coding-agent/test/session-id-readonly.test.ts index 264401b8e..726a7577f 100644 --- a/packages/coding-agent/test/session-id-readonly.test.ts +++ b/packages/coding-agent/test/session-id-readonly.test.ts @@ -122,6 +122,46 @@ describe("--session-id read-only commands", () => { expect(hasSessionWithId(join(result.agentDir, "sessions"), "read-only-models")).toBe(false); }); + it("warns when a missing --session-id creates a new session", async () => { + const result = await runCli((dirs) => [ + "--session-dir", + dirs.sessionDir, + "--session-id", + "missing-session-id", + "--model", + "missing-model", + "-p", + "hi", + ]); + + expect(result.code).toBe(1); + expect(result.stderr).toContain( + "Warning: No project session found with id 'missing-session-id'; creating a new session with that id.", + ); + }); + + it("does not warn when --session-id opens an existing session", async () => { + const result = await runCli( + (dirs) => [ + "--session-dir", + dirs.sessionDir, + "--session-id", + "existing-session-id", + "--model", + "missing-model", + "-p", + "hi", + ], + (dirs) => { + mkdirSync(dirs.sessionDir, { recursive: true }); + writeSession(dirs.sessionDir, dirs.projectDir, "existing-session-id"); + }, + ); + + expect(result.code).toBe(1); + expect(result.stderr).not.toContain("No project session found with id 'existing-session-id'"); + }); + it("rejects an existing fork target session id", async () => { const result = await runCli( (dirs) => ["--session-dir", dirs.sessionDir, "--fork", "source-id", "--session-id", "existing-id", "-p", "hi"],