diff --git a/package-lock.json b/package-lock.json index 7411c76d..9cee55aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8457,7 +8457,7 @@ }, "packages/api": { "name": "@diffity/api", - "version": "0.10.10", + "version": "0.10.11", "dependencies": { "@diffity/parser": "*" }, @@ -8468,7 +8468,7 @@ }, "packages/cli": { "name": "@naturalcycles/diffity", - "version": "0.10.10", + "version": "0.10.11", "license": "MIT", "dependencies": { "commander": "^14.0.3", @@ -8492,7 +8492,7 @@ }, "packages/git": { "name": "@diffity/git", - "version": "0.10.10", + "version": "0.10.11", "devDependencies": { "@types/node": "^25.5.0", "typescript": "^5.9.3", @@ -8501,7 +8501,7 @@ }, "packages/github": { "name": "@diffity/github", - "version": "0.10.10", + "version": "0.10.11", "dependencies": { "@diffity/api": "*", "@diffity/parser": "*" @@ -8514,7 +8514,7 @@ }, "packages/parser": { "name": "@diffity/parser", - "version": "0.10.10", + "version": "0.10.11", "devDependencies": { "typescript": "^5.9.3", "vitest": "^4.1.0" @@ -8522,7 +8522,7 @@ }, "packages/ui": { "name": "@diffity/ui", - "version": "0.10.10", + "version": "0.10.11", "dependencies": { "@diffity/api": "*", "@diffity/parser": "*", diff --git a/packages/api/package.json b/packages/api/package.json index f785f821..a3aa43d2 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@diffity/api", - "version": "0.10.10", + "version": "0.10.11", "private": true, "type": "module", "main": "./dist/index.js", diff --git a/packages/cli/package.json b/packages/cli/package.json index 0f9df398..f41730cc 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@naturalcycles/diffity", - "version": "0.10.10", + "version": "0.10.11", "description": "Agent-agnostic, GitHub-style diff viewer and code review tool with a live agent loop", "type": "module", "bin": { diff --git a/packages/cli/src/inbox/open-session.ts b/packages/cli/src/inbox/open-session.ts index 3910883f..2a4674fb 100644 --- a/packages/cli/src/inbox/open-session.ts +++ b/packages/cli/src/inbox/open-session.ts @@ -12,12 +12,21 @@ import { checkInstanceHealth, findInstanceForRepo } from '../registry.js'; export async function openPreparedSession(worktree: string, bundlePath: string, deps: OpenSessionDeps): Promise { const ref = deps.baseRefOf(bundlePath); const port = await deps.ensureServer(worktree, ref); + const url = sessionUrl(port, ref); try { deps.importBundle(worktree, bundlePath); } catch (err) { - return { url: `http://localhost:${port}/`, imported: false, importError: err instanceof Error ? err.message : String(err) }; + return { url, imported: false, importError: err instanceof Error ? err.message : String(err) }; } - return { url: `http://localhost:${port}/`, imported: true }; + return { url, imported: true }; +} + +/** + * The diff page at the session's ref. The bare root redirects to the working-tree diff, which is + * empty for a clean worktree at the pull request's head. + */ +function sessionUrl(port: number, ref: string): string { + return `http://localhost:${port}/diff?ref=${encodeURIComponent(ref)}`; } /** The base commit a bundle was built against; the session diffs the worktree against it. */ diff --git a/packages/cli/tests/inbox-open.test.ts b/packages/cli/tests/inbox-open.test.ts index 93374037..ac2b4456 100644 --- a/packages/cli/tests/inbox-open.test.ts +++ b/packages/cli/tests/inbox-open.test.ts @@ -88,7 +88,7 @@ describe('openPreparedSession', () => { const result = await openPreparedSession('/wt', '/b.json', deps); - expect(result).toEqual({ url: 'http://localhost:5599/', imported: true }); + expect(result).toEqual({ url: 'http://localhost:5599/diff?ref=basesha', imported: true }); expect(calls).toEqual(['ensure /wt basesha', 'import /wt /b.json']); }); @@ -99,7 +99,7 @@ describe('openPreparedSession', () => { importBundle: () => { throw new Error('head moved'); }, }; const result = await openPreparedSession('/wt', '/b.json', deps); - expect(result).toEqual({ url: 'http://localhost:5599/', imported: false, importError: 'head moved' }); + expect(result).toEqual({ url: 'http://localhost:5599/diff?ref=basesha', imported: false, importError: 'head moved' }); }); }); @@ -179,7 +179,7 @@ describe('the inbox server routes', () => { try { const res = await fetch(`http://127.0.0.1:${port}/open/${encodeURIComponent('o/r#4')}`, { redirect: 'manual' }); expect(res.status).toBe(302); - expect(res.headers.get('location')).toBe('http://localhost:7788/'); + expect(res.headers.get('location')).toBe('http://localhost:7788/diff?ref=basesha'); store.observe({ ...snapshot(), number: 8 }, true, 'now'); const notReady = await fetch(`http://127.0.0.1:${port}/open/${encodeURIComponent('o/r#8')}`, { redirect: 'manual' }); diff --git a/packages/git/package.json b/packages/git/package.json index 1774424e..f6f65d18 100644 --- a/packages/git/package.json +++ b/packages/git/package.json @@ -1,6 +1,6 @@ { "name": "@diffity/git", - "version": "0.10.10", + "version": "0.10.11", "private": true, "type": "module", "main": "./dist/index.js", diff --git a/packages/github/package.json b/packages/github/package.json index 917b2dd9..5ebf28c2 100644 --- a/packages/github/package.json +++ b/packages/github/package.json @@ -1,6 +1,6 @@ { "name": "@diffity/github", - "version": "0.10.10", + "version": "0.10.11", "private": true, "type": "module", "main": "./dist/index.js", diff --git a/packages/parser/package.json b/packages/parser/package.json index acff2675..53aa07c1 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@diffity/parser", - "version": "0.10.10", + "version": "0.10.11", "private": true, "type": "module", "main": "./dist/index.js", diff --git a/packages/ui/package.json b/packages/ui/package.json index 68e72558..97f3057d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@diffity/ui", - "version": "0.10.10", + "version": "0.10.11", "type": "module", "private": true, "scripts": {