gsd-pi 2.77.0-dev.c9c8932c6 → 2.77.0-dev.eaa4973bc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-web-branch.d.ts +1 -0
- package/dist/cli-web-branch.js +3 -0
- package/dist/cli.js +24 -2
- package/dist/provider-migrations.d.ts +18 -0
- package/dist/provider-migrations.js +14 -0
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +14 -10
- package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
- package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +10 -2
- package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +24 -0
- package/dist/resources/extensions/gsd/auto-loop.js +1 -1
- package/dist/resources/extensions/gsd/auto-post-unit.js +31 -0
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +58 -8
- package/dist/resources/extensions/gsd/auto.js +4 -0
- package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +4 -2
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
- package/dist/resources/extensions/gsd/file-lock.js +49 -9
- package/dist/resources/extensions/gsd/git-service.js +1 -0
- package/dist/resources/extensions/gsd/gitignore.js +1 -0
- package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
- package/dist/resources/extensions/gsd/journal.js +17 -2
- package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
- package/dist/resources/extensions/gsd/reports.js +5 -4
- package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
- package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
- package/dist/resources/extensions/gsd/uok/audit.js +18 -2
- package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +1 -0
- package/dist/resources/extensions/mcp-client/auth.js +10 -1
- package/dist/resources/extensions/mcp-client/index.js +118 -9
- package/dist/resources/skills/create-skill/SKILL.md +2 -2
- package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
- package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
- package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
- package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
- package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-1832629448831fdc.js → webpack-2e68521d7c82f7c2.js} +1 -1
- package/package.json +3 -3
- package/packages/mcp-server/README.md +3 -3
- package/packages/mcp-server/dist/env-writer.d.ts +1 -0
- package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
- package/packages/mcp-server/dist/env-writer.js +74 -6
- package/packages/mcp-server/dist/env-writer.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +25 -2
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/src/env-writer.test.ts +79 -1
- package/packages/mcp-server/src/env-writer.ts +76 -6
- package/packages/mcp-server/src/server.ts +29 -2
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +21 -16
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +24 -17
- package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +19 -0
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
- package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.js +20 -0
- package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
- package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +25 -0
- package/packages/pi-tui/src/stdin-buffer.ts +26 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +14 -10
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +22 -16
- package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
- package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
- package/src/resources/extensions/gsd/auto/run-unit.ts +16 -2
- package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +20 -0
- package/src/resources/extensions/gsd/auto-loop.ts +1 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +30 -0
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +60 -5
- package/src/resources/extensions/gsd/auto.ts +5 -0
- package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -2
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
- package/src/resources/extensions/gsd/file-lock.ts +84 -11
- package/src/resources/extensions/gsd/git-service.ts +1 -0
- package/src/resources/extensions/gsd/gitignore.ts +1 -0
- package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
- package/src/resources/extensions/gsd/journal.ts +27 -2
- package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
- package/src/resources/extensions/gsd/reports.ts +5 -4
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +39 -25
- package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +181 -0
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
- package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
- package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
- package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
- package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
- package/src/resources/extensions/gsd/uok/audit.ts +20 -2
- package/src/resources/extensions/gsd/workflow-logger.ts +22 -3
- package/src/resources/extensions/gsd/worktree-manager.ts +1 -0
- package/src/resources/extensions/mcp-client/auth.ts +12 -1
- package/src/resources/extensions/mcp-client/index.ts +129 -10
- package/src/resources/skills/create-skill/SKILL.md +2 -2
- package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
- package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
- package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
- package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +0 -9
- /package/dist/web/standalone/.next/static/{H51SzzS_EEgdBsDVhrLBv → 5wbu35_C2_MQ3Jj1lEVDx}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{H51SzzS_EEgdBsDVhrLBv → 5wbu35_C2_MQ3Jj1lEVDx}/_ssgManifest.js +0 -0
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"/_not-found/page": "app/_not-found/page.js",
|
|
3
3
|
"/_global-error/page": "app/_global-error/page.js",
|
|
4
|
-
"/api/bridge-terminal/input/route": "app/api/bridge-terminal/input/route.js",
|
|
5
|
-
"/api/boot/route": "app/api/boot/route.js",
|
|
6
4
|
"/api/bridge-terminal/resize/route": "app/api/bridge-terminal/resize/route.js",
|
|
5
|
+
"/api/boot/route": "app/api/boot/route.js",
|
|
6
|
+
"/api/bridge-terminal/input/route": "app/api/bridge-terminal/input/route.js",
|
|
7
7
|
"/api/bridge-terminal/stream/route": "app/api/bridge-terminal/stream/route.js",
|
|
8
|
-
"/api/cleanup/route": "app/api/cleanup/route.js",
|
|
9
8
|
"/api/dev-mode/route": "app/api/dev-mode/route.js",
|
|
10
|
-
"/api/
|
|
9
|
+
"/api/cleanup/route": "app/api/cleanup/route.js",
|
|
11
10
|
"/api/doctor/route": "app/api/doctor/route.js",
|
|
12
|
-
"/api/captures/route": "app/api/captures/route.js",
|
|
13
11
|
"/api/export-data/route": "app/api/export-data/route.js",
|
|
14
|
-
"/api/
|
|
12
|
+
"/api/captures/route": "app/api/captures/route.js",
|
|
15
13
|
"/api/forensics/route": "app/api/forensics/route.js",
|
|
14
|
+
"/api/browse-directories/route": "app/api/browse-directories/route.js",
|
|
15
|
+
"/api/git/route": "app/api/git/route.js",
|
|
16
16
|
"/api/history/route": "app/api/history/route.js",
|
|
17
17
|
"/api/hooks/route": "app/api/hooks/route.js",
|
|
18
18
|
"/api/inspect/route": "app/api/inspect/route.js",
|
|
19
19
|
"/api/knowledge/route": "app/api/knowledge/route.js",
|
|
20
|
-
"/api/live-state/route": "app/api/live-state/route.js",
|
|
21
20
|
"/api/experimental/route": "app/api/experimental/route.js",
|
|
22
21
|
"/api/notifications/route": "app/api/notifications/route.js",
|
|
22
|
+
"/api/live-state/route": "app/api/live-state/route.js",
|
|
23
23
|
"/api/preferences/route": "app/api/preferences/route.js",
|
|
24
|
-
"/api/onboarding/route": "app/api/onboarding/route.js",
|
|
25
24
|
"/api/recovery/route": "app/api/recovery/route.js",
|
|
26
25
|
"/api/projects/route": "app/api/projects/route.js",
|
|
26
|
+
"/api/onboarding/route": "app/api/onboarding/route.js",
|
|
27
27
|
"/api/session/browser/route": "app/api/session/browser/route.js",
|
|
28
28
|
"/api/session/command/route": "app/api/session/command/route.js",
|
|
29
29
|
"/api/session/events/route": "app/api/session/events/route.js",
|
|
30
30
|
"/api/settings-data/route": "app/api/settings-data/route.js",
|
|
31
|
-
"/api/session/manage/route": "app/api/session/manage/route.js",
|
|
32
31
|
"/api/shutdown/route": "app/api/shutdown/route.js",
|
|
33
32
|
"/api/skill-health/route": "app/api/skill-health/route.js",
|
|
33
|
+
"/api/session/manage/route": "app/api/session/manage/route.js",
|
|
34
34
|
"/api/steer/route": "app/api/steer/route.js",
|
|
35
35
|
"/api/terminal/input/route": "app/api/terminal/input/route.js",
|
|
36
|
-
"/api/switch-root/route": "app/api/switch-root/route.js",
|
|
37
36
|
"/api/files/route": "app/api/files/route.js",
|
|
38
37
|
"/api/terminal/resize/route": "app/api/terminal/resize/route.js",
|
|
38
|
+
"/api/switch-root/route": "app/api/switch-root/route.js",
|
|
39
39
|
"/api/terminal/sessions/route": "app/api/terminal/sessions/route.js",
|
|
40
|
-
"/api/remote-questions/route": "app/api/remote-questions/route.js",
|
|
41
40
|
"/api/undo/route": "app/api/undo/route.js",
|
|
41
|
+
"/api/terminal/upload/route": "app/api/terminal/upload/route.js",
|
|
42
42
|
"/api/terminal/stream/route": "app/api/terminal/stream/route.js",
|
|
43
43
|
"/api/visualizer/route": "app/api/visualizer/route.js",
|
|
44
|
-
"/api/terminal/upload/route": "app/api/terminal/upload/route.js",
|
|
45
44
|
"/api/update/route": "app/api/update/route.js",
|
|
46
|
-
"/page": "app/page.js"
|
|
45
|
+
"/page": "app/page.js",
|
|
46
|
+
"/api/remote-questions/route": "app/api/remote-questions/route.js"
|
|
47
47
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports.id=1926,exports.ids=[1926],exports.modules={1926:(a,b,c)=>{"use strict";c.d(b,{isOnboardingComplete:()=>l,readOnboardingRecord:()=>k});var d=c(3024),e=c(8161),f=c(6760);c(7598);var g=c(6698);c(1421),process.env.GSD_ENABLE_NATIVE_GSD_PARSER,Symbol("native-unavailable"),new g.AsyncLocalStorage,c(9134),Object.values({Q3:{id:"Q3",scope:"slice",ownerTurn:"gate-evaluate",question:"How can this be exploited?",guidance:"Identify abuse scenarios: parameter tampering, replay attacks, privilege escalation.\nMap data exposure risks: PII, tokens, secrets accessible through this slice.\nDefine input trust boundaries: untrusted user input reaching DB, API, or filesystem.\nIf none apply, return verdict 'omitted' with rationale explaining why.",promptSection:"Abuse Surface"},Q4:{id:"Q4",scope:"slice",ownerTurn:"gate-evaluate",question:"What existing promises does this break?",guidance:"List which existing requirements (R001, R003, etc.) are touched by this slice.\nIdentify what must be re-tested after shipping.\nFlag decisions that should be revisited given the new scope.\nIf no existing requirements are affected, return verdict 'omitted'.",promptSection:"Broken Promises"},Q5:{id:"Q5",scope:"task",ownerTurn:"execute-task",question:"What breaks when dependencies fail?",guidance:"Enumerate the task's external dependencies (APIs, filesystem, network, subprocesses).\nDescribe the failure path for each: timeout, malformed response, connection loss.\nVerify the implementation handles each failure or explicitly bubbles the error.\nReturn verdict 'omitted' only if the task has no external dependencies.",promptSection:"Failure Modes"},Q6:{id:"Q6",scope:"task",ownerTurn:"execute-task",question:"What is the 10x load breakpoint?",guidance:"Identify the resource that saturates first at 10x the expected load.\nDescribe the protection applied (pool sizing, rate limiting, pagination, caching).\nReturn verdict 'omitted' if the task has no runtime load dimension.",promptSection:"Load Profile"},Q7:{id:"Q7",scope:"task",ownerTurn:"execute-task",question:"What negative tests protect this task?",guidance:"List malformed inputs, error paths, and boundary conditions the tests cover.\nPoint to the specific test files or cases that assert each negative scenario.\nReturn verdict 'omitted' only if the task has no meaningful negative surface.",promptSection:"Negative Tests"},Q8:{id:"Q8",scope:"slice",ownerTurn:"complete-slice",question:"How will ops know this slice is healthy or broken?",guidance:"Describe the health signal (metric, log line, dashboard) that proves the slice works.\nDescribe the failure signal that triggers an alert or paging.\nDocument the recovery procedure and any monitoring gaps.\nReturn verdict 'omitted' only for slices with no runtime behavior at all.",promptSection:"Operational Readiness"},MV01:{id:"MV01",scope:"milestone",ownerTurn:"validate-milestone",question:"Is every success criterion in the milestone roadmap satisfied?",guidance:"Walk the success-criteria checklist from the milestone roadmap.\nFor each criterion, point to the slice / assessment / verification evidence that proves it.\nReturn verdict 'flag' if any criterion is unmet or unverifiable.",promptSection:"Success Criteria Checklist"},MV02:{id:"MV02",scope:"milestone",ownerTurn:"validate-milestone",question:"Does every slice have a SUMMARY.md and a passing assessment?",guidance:"Confirm every slice listed in the roadmap has a SUMMARY.md.\nConfirm each slice has an ASSESSMENT verdict of 'pass' (or justified 'omitted').\nFlag missing artifacts and slices with outstanding follow-ups or known limitations.",promptSection:"Slice Delivery Audit"},MV03:{id:"MV03",scope:"milestone",ownerTurn:"validate-milestone",question:"Do the slices integrate end-to-end?",guidance:"Trace at least one cross-slice flow proving the pieces compose.\nFlag gaps where two slices were built in isolation with no integration evidence.",promptSection:"Cross-Slice Integration"},MV04:{id:"MV04",scope:"milestone",ownerTurn:"validate-milestone",question:"Are all touched requirements covered and still coherent?",guidance:"For each requirement advanced, validated, surfaced, or invalidated across the milestone's slices, confirm the milestone-level evidence matches.\nFlag requirements that slices claim to advance but no artifact proves.",promptSection:"Requirement Coverage"}});let h=process.env.GSD_CODING_AGENT_DIR||(0,f.join)(process.env.GSD_HOME||(0,f.join)((0,e.homedir)(),".gsd"),"agent"),i=(0,f.join)(h,"onboarding.json"),j={version:1,flowVersion:1,completedAt:null,completedSteps:[],skippedSteps:[],lastResumePoint:null};function k(){if(!(0,d.existsSync)(i))return{...j};try{let a=JSON.parse((0,d.readFileSync)(i,"utf-8"));return{version:"number"==typeof a.version?a.version:1,flowVersion:"number"==typeof a.flowVersion?a.flowVersion:0,completedAt:"string"==typeof a.completedAt?a.completedAt:null,completedSteps:Array.isArray(a.completedSteps)?a.completedSteps.filter(a=>"string"==typeof a):[],skippedSteps:Array.isArray(a.skippedSteps)?a.skippedSteps.filter(a=>"string"==typeof a):[],lastResumePoint:"string"==typeof a.lastResumePoint?a.lastResumePoint:null}}catch{return{...j}}}function l(){let a=k();return null!==a.completedAt&&1===a.flowVersion}},5168:a=>{function b(a){var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b}b.keys=()=>[],b.resolve=b,b.id=5168,a.exports=b},9134:(a,b,c)=>{"use strict";c.d(b,{DZ:()=>e,rs:()=>d});let d="GSD_GIT_ERROR";class e extends Error{constructor(a,b,c){super(b,c),this.name="GSDError",this.code=a}}}};
|
|
@@ -8,5 +8,5 @@ exports.id=6897,exports.ids=[6897],exports.modules={2280:(a,b,c)=>{"use strict";
|
|
|
8
8
|
<body>
|
|
9
9
|
<p>Authentication successful. Return to your terminal to continue.</p>
|
|
10
10
|
</body>
|
|
11
|
-
</html>`;function ag(a){let b=a.trim();if(!b)return{};try{let a=new URL(b);return{code:a.searchParams.get("code")??void 0,state:a.searchParams.get("state")??void 0}}catch{}if(b.includes("#")){let[a,c]=b.split("#",2);return{code:a,state:c}}if(b.includes("code=")){let a=new URLSearchParams(b);return{code:a.get("code")??void 0,state:a.get("state")??void 0}}return{code:b}}async function ah(a,b,c=ad){let d=await fetch(ac,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:ab,code:a,code_verifier:b,redirect_uri:c}),signal:AbortSignal.timeout(3e4)});if(!d.ok){let a=await d.text().catch(()=>"");return console.error("[openai-codex] code->token failed:",d.status,a),{type:"failed"}}let e=await d.json();return e.access_token&&e.refresh_token&&"number"==typeof e.expires_in?{type:"success",access:e.access_token,refresh:e.refresh_token,expires:Date.now()+1e3*e.expires_in}:(console.error("[openai-codex] token response missing fields:",e),{type:"failed"})}async function ai(a){try{let b=await fetch(ac,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:ab}),signal:AbortSignal.timeout(3e4)});if(!b.ok){let a=await b.text().catch(()=>"");return console.error("[openai-codex] Token refresh failed:",b.status,a),{type:"failed"}}let c=await b.json();if(!c.access_token||!c.refresh_token||"number"!=typeof c.expires_in)return console.error("[openai-codex] Token refresh response missing fields:",c),{type:"failed"};return{type:"success",access:c.access_token,refresh:c.refresh_token,expires:Date.now()+1e3*c.expires_in}}catch(a){return console.error("[openai-codex] Token refresh error:",a),{type:"failed"}}}async function aj(a="pi"){let{verifier:b,challenge:c}=await I(),d=function(){if(!_)throw Error("OpenAI Codex OAuth is only available in Node.js environments");return _(16).toString("hex")}(),e=new URL("https://auth.openai.com/oauth/authorize");return e.searchParams.set("response_type","code"),e.searchParams.set("client_id",ab),e.searchParams.set("redirect_uri",ad),e.searchParams.set("scope","openid profile email offline_access"),e.searchParams.set("code_challenge",c),e.searchParams.set("code_challenge_method","S256"),e.searchParams.set("state",d),e.searchParams.set("id_token_add_organizations","true"),e.searchParams.set("codex_cli_simplified_flow","true"),e.searchParams.set("originator",a),{verifier:b,state:d,url:e.toString()}}function ak(a){let b=function(a){try{let b=a.split(".");if(3!==b.length)return null;let c=b[1]??"",d=atob(c);return JSON.parse(d)}catch{return null}}(a),c=b?.["https://api.openai.com/auth"],d=c?.chatgpt_account_id;return"string"==typeof d&&d.length>0?d:null}async function al(a){let b,{verifier:c,state:d,url:e}=await aj(a.originator),f=await function(a){if(!aa)throw Error("OpenAI Codex OAuth is only available in Node.js environments");let b=null,c=!1,d=aa.createServer((c,d)=>{try{let e=new URL(c.url||"","http://localhost");if("/auth/callback"!==e.pathname){d.statusCode=404,d.end("Not found");return}if(e.searchParams.get("state")!==a){d.statusCode=400,d.end("State mismatch");return}let f=e.searchParams.get("code");if(!f){d.statusCode=400,d.end("Missing authorization code");return}d.statusCode=200,d.setHeader("Content-Type","text/html; charset=utf-8"),d.end(af),b=f}catch{d.statusCode=500,d.end("Internal error")}});return new Promise(a=>{d.listen(1455,"127.0.0.1",()=>{a({close:()=>d.close(),cancelWait:()=>{c=!0},waitForCode:async()=>{let a=()=>new Promise(a=>setTimeout(a,100));for(let d=0;d<600;d+=1){if(b)return{code:b};if(c)break;await a()}return null}})}).on("error",b=>{console.error("[openai-codex] Failed to bind http://127.0.0.1:1455 (",b.code,") Falling back to manual paste."),a({close:()=>{try{d.close()}catch{}},cancelWait:()=>{},waitForCode:async()=>null})})})}(d);a.onAuth({url:e,instructions:"A browser window should open. Complete login to finish."});try{if(a.onManualCodeInput){let c,e,g=a.onManualCodeInput().then(a=>{c=a,f.cancelWait()}).catch(a=>{e=a instanceof Error?a:Error(String(a)),f.cancelWait()}),h=await f.waitForCode();if(e)throw e;if(h?.code)b=h.code;else if(c){let a=ag(c);if(a.state&&a.state!==d)throw Error("State mismatch");b=a.code}if(!b){if(await g,e)throw e;if(c){let a=ag(c);if(a.state&&a.state!==d)throw Error("State mismatch");b=a.code}}}else{let a=await f.waitForCode();a?.code&&(b=a.code)}if(!b){let c=await a.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),e=ag(c);if(e.state&&e.state!==d)throw Error("State mismatch");b=e.code}if(!b)throw Error("Missing authorization code");let e=await ah(b,c);if("success"!==e.type)throw Error("Token exchange failed");let g=ak(e.access);if(!g)throw Error("Failed to extract accountId from token");return{access:e.access,refresh:e.refresh,expires:e.expires,accountId:g}}finally{f.close()}}async function am(a){let b=await ai(a);if("success"!==b.type)throw Error("Failed to refresh OpenAI Codex token");let c=ak(b.access);if(!c)throw Error("Failed to extract accountId from token");return{access:b.access,refresh:b.refresh,expires:b.expires,accountId:c}}let an=new Map([{id:"github-copilot",name:"GitHub Copilot",login:async a=>z({onAuth:(b,c)=>a.onAuth({url:b,instructions:c}),onPrompt:a.onPrompt,onProgress:a.onProgress,signal:a.signal}),async refreshToken(a){let b=await v(a.refresh,a.enterpriseUrl);try{let c=await y(b.access,a.enterpriseUrl);Object.keys(c).length>0&&(b.modelLimits=c)}catch{}return b},getApiKey:a=>a.access,modifyModels(a,b){let c=b.enterpriseUrl?o(b.enterpriseUrl)??void 0:void 0,d=q(b.access,c),e=b.modelLimits,f=e?new Set(Object.keys(e)):null,g=!!f&&f.size>0;return a.flatMap(a=>{if("github-copilot"!==a.provider)return a;if(g&&!f.has(a.id))return[];let b=e?.[a.id];return{...a,baseUrl:d,...b&&{contextWindow:b.contextWindow,maxTokens:b.maxTokens}}})}},{id:"google-gemini-cli",name:"Google Cloud Code Assist (Gemini CLI)",usesCallbackServer:!0,login:async a=>$(a.onAuth,a.onProgress,a.onManualCodeInput),async refreshToken(a){if(!a.projectId)throw Error("Google Cloud credentials missing projectId");return Z(a.refresh,a.projectId)},getApiKey:a=>JSON.stringify({token:a.access,projectId:a.projectId})},{id:"google-antigravity",name:"Antigravity (Gemini 3, Claude, GPT-OSS)",usesCallbackServer:!0,login:async a=>P(a.onAuth,a.onProgress,a.onManualCodeInput),async refreshToken(a){if(!a.projectId)throw Error("Antigravity credentials missing projectId");return O(a.refresh,a.projectId)},getApiKey:a=>JSON.stringify({token:a.access,projectId:a.projectId})},{id:"openai-codex",name:"ChatGPT Plus/Pro (Codex Subscription)",usesCallbackServer:!0,login:async a=>al({onAuth:a.onAuth,onPrompt:a.onPrompt,onProgress:a.onProgress,onManualCodeInput:a.onManualCodeInput}),refreshToken:async a=>am(a.refresh),getApiKey:a=>a.access,modifyModels:a=>a.filter(a=>"openai-codex"!==a.provider||!ae.has(a.id))}].map(a=>[a.id,a]));class ao{constructor(a){this.data={},this.authPath=a,this.reload()}reload(){var a;let b;a=this.authPath,b=(0,g.dirname)(a),(0,e.existsSync)(b)||(0,e.mkdirSync)(b,{recursive:!0,mode:448}),(0,e.existsSync)(a)||((0,e.writeFileSync)(a,"{}","utf-8"),(0,e.chmodSync)(a,384)),this.data=function(a){if(!a||!a.trim())return{};try{let b=JSON.parse(a);return"object"==typeof b&&null!==b?b:{}}catch{return{}}}((0,e.readFileSync)(this.authPath,"utf-8"))}getCredentialsForProvider(a){let b=this.data[a];return b?Array.isArray(b)?b:[b]:[]}set(a,b){let c=this.getCredentialsForProvider(a),d="api_key"===b.type?this.mergeApiKeyCredentials(c,b):this.mergeOAuthCredential(c,b);this.data[a]=1===d.length?d[0]:d,(0,e.writeFileSync)(this.authPath,JSON.stringify(this.data,null,2),"utf-8"),(0,e.chmodSync)(this.authPath,384)}hasAuth(a){return this.getCredentialsForProvider(a).length>0||!!i(a)}getOAuthProviders(){return Array.from(an.values())}async login(a,b){let c=an.get(a);if(!c)throw Error(`Unknown OAuth provider: ${a}`);let d=await c.login(b);this.set(a,{type:"oauth",...d})}logout(a){delete this.data[a],(0,e.writeFileSync)(this.authPath,JSON.stringify(this.data,null,2),"utf-8"),(0,e.chmodSync)(this.authPath,384)}mergeApiKeyCredentials(a,b){return a.some(a=>"api_key"===a.type&&a.key===b.key)?a:[...a,b]}mergeOAuthCredential(a,b){return[...a.filter(a=>"api_key"===a.type),b]}}let ap=null,aq=[{id:"anthropic",label:"Anthropic (Claude)",supportsApiKey:!0,supportsOAuth:!1,recommended:!0},{id:"openai",label:"OpenAI",supportsApiKey:!0,supportsOAuth:!1},{id:"github-copilot",label:"GitHub Copilot",supportsApiKey:!1,supportsOAuth:!0},{id:"openai-codex",label:"ChatGPT Plus/Pro (Codex Subscription)",supportsApiKey:!1,supportsOAuth:!0},{id:"google-gemini-cli",label:"Google Cloud Code Assist (Gemini CLI)",supportsApiKey:!1,supportsOAuth:!0},{id:"google-antigravity",label:"Antigravity (Gemini 3, Claude, GPT-OSS)",supportsApiKey:!1,supportsOAuth:!0},{id:"google",label:"Google (Gemini API)",supportsApiKey:!0,supportsOAuth:!1},{id:"groq",label:"Groq",supportsApiKey:!0,supportsOAuth:!1},{id:"xai",label:"xAI (Grok)",supportsApiKey:!0,supportsOAuth:!1},{id:"openrouter",label:"OpenRouter",supportsApiKey:!0,supportsOAuth:!1},{id:"mistral",label:"Mistral",supportsApiKey:!0,supportsOAuth:!1},{id:"minimax",label:"MiniMax",supportsApiKey:!0,supportsOAuth:!1},{id:"minimax-cn",label:"MiniMax CN",supportsApiKey:!0,supportsOAuth:!1},{id:"ollama-cloud",label:"Ollama Cloud",supportsApiKey:!1,supportsOAuth:!1},{id:"custom-openai",label:"Custom (OpenAI-compatible)",supportsApiKey:!1,supportsOAuth:!1},{id:"cerebras",label:"Cerebras",supportsApiKey:!1,supportsOAuth:!1},{id:"azure-openai-responses",label:"Azure OpenAI",supportsApiKey:!1,supportsOAuth:!1},{id:"alibaba-coding-plan",label:"Alibaba Coding Plan",supportsApiKey:!1,supportsOAuth:!1},{id:"alibaba-dashscope",label:"Alibaba DashScope",supportsApiKey:!1,supportsOAuth:!1},{id:"claude-code",label:"Claude Code (Local CLI)",supportsApiKey:!1,supportsOAuth:!1,supportsExternalCli:!0,recommended:!0}],ar=[{id:"web_search",label:"Web search",providers:[{id:"brave",label:"Brave Search",envVar:"BRAVE_API_KEY"},{id:"tavily",label:"Tavily",envVar:"TAVILY_API_KEY"}]},{id:"tool_keys",label:"Tool API keys",providers:[{id:"context7",label:"Context7",envVar:"CONTEXT7_API_KEY"},{id:"jina",label:"Jina AI",envVar:"JINA_API_KEY"},{id:"groq",label:"Groq",envVar:"GROQ_API_KEY"}]},{id:"remote_questions",label:"Remote questions",providers:[{id:"discord_bot",label:"Discord",envVar:"DISCORD_BOT_TOKEN"},{id:"slack_bot",label:"Slack",envVar:"SLACK_BOT_TOKEN"},{id:"telegram_bot",label:"Telegram",envVar:"TELEGRAM_BOT_TOKEN"}]}],as=new Set(["claude-code"]);function at(a){return as.has(a)}let au=null;function av(a){return a().toISOString()}function aw(a){return(a instanceof Error?a.message:String(a)).replace(/sk-[A-Za-z0-9_-]{6,}/g,"[redacted]").replace(/xox[baprs]-[A-Za-z0-9-]+/g,"[redacted]").replace(/Bearer\s+[^\s]+/gi,"Bearer [redacted]").replace(/([A-Z0-9_]*(?:API[_-]?KEY|TOKEN|SECRET)["'=:\s]+)([^\s,;"']+)/gi,"$1[redacted]").replace(/\s+/g," ").trim()}function ax(){return{phase:"idle",strategy:null,startedAt:null,completedAt:null,error:null}}function ay(a,b){return a.getCredentialsForProvider(b).some(a=>"oauth"===a.type?"string"==typeof a.access&&a.access.trim().length>0:"string"==typeof a.key&&a.key.trim().length>0)}async function az(a,b){let c="";try{if((b.headers.get("content-type")||"").includes("application/json")){let a=await b.json();c=function a(b){if(!b)return null;if("string"==typeof b)return b;if("object"!=typeof b)return null;for(let c of[b.message,b.error,b.detail,b.error_description]){if("string"==typeof c&&c.trim().length>0)return c;let b=a(c);if(b)return b}return null}(a)??JSON.stringify(a)}else c=await b.text()}catch{c=""}let d=aw(c);return d?`${a} validation failed (${b.status}): ${d}`:`${a} validation failed (${b.status})`}async function aA(a,b,c,d,e={}){try{let f=await a(c,{headers:{Authorization:`Bearer ${d}`,...e},signal:AbortSignal.timeout(15e3)});if(!f.ok)return{ok:!1,message:await az(b,f)};return{ok:!0,message:`${b} credentials validated`}}catch(a){return{ok:!1,message:`${b} validation failed: ${aw(a)}`}}}async function aB(a,b){try{let c=new URL("https://generativelanguage.googleapis.com/v1beta/models");c.searchParams.set("key",b);let d=await a(c,{signal:AbortSignal.timeout(15e3)});if(!d.ok)return{ok:!1,message:await az("google",d)};return{ok:!0,message:"google credentials validated"}}catch(a){return{ok:!1,message:`google validation failed: ${aw(a)}`}}}async function aC(a,b){try{let c=await a("https://api.anthropic.com/v1/models",{headers:{"x-api-key":b,"anthropic-version":"2023-06-01"},signal:AbortSignal.timeout(15e3)});if(!c.ok)return{ok:!1,message:await az("anthropic",c)};return{ok:!0,message:"anthropic credentials validated"}}catch(a){return{ok:!1,message:`anthropic validation failed: ${aw(a)}`}}}async function aD(a,b,c,d,e){try{let f=await a(`${d}/v1/messages`,{method:"POST",headers:{"x-api-key":c,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:e,max_tokens:1,messages:[{role:"user",content:"hi"}]}),signal:AbortSignal.timeout(15e3)});if(!f.ok)return{ok:!1,message:await az(b,f)};return{ok:!0,message:`${b} credentials validated`}}catch(a){return{ok:!1,message:`${b} validation failed: ${aw(a)}`}}}async function aE(a,b,c){switch(a){case"anthropic":return await aC(c,b);case"openai":return await aA(c,a,"https://api.openai.com/v1/models",b);case"google":return await aB(c,b);case"groq":return await aA(c,a,"https://api.groq.com/openai/v1/models",b);case"xai":return await aA(c,a,"https://api.x.ai/v1/models",b);case"openrouter":return await aA(c,a,"https://openrouter.ai/api/v1/models",b,{"HTTP-Referer":"https://localhost","X-Title":"GSD onboarding"});case"mistral":return await aA(c,a,"https://api.mistral.ai/v1/models",b);case"minimax":return await aD(c,a,b,"https://api.minimax.io/anthropic","MiniMax-M2.7");case"minimax-cn":return await aD(c,a,b,"https://api.minimaxi.com/anthropic","MiniMax-M2.7");default:return{ok:!1,message:`${a} does not support API-key validation via onboarding`}}}class aF{constructor(a){this.authStorage=null,this.lastValidation=null,this.activeFlow=null,this.bridgeAuthRefresh=ax(),this.deps=a}async getState(){return this.buildState()}async validateAndSaveApiKey(a,b){let c=aq.find(b=>b.id===a);if(!c)throw Error(`Unknown onboarding provider: ${a}`);if(!c.supportsApiKey)throw Error(`${a} must be configured with browser sign-in`);let d=b.trim();if(!d)throw Error("API key is required");let e=this.deps.validateApiKey??(async(a,b)=>await aE(a,b,this.deps.fetch??fetch)),f=await e(a,d),g=av(this.deps.now??(()=>new Date));if(!f.ok)return this.lastValidation={status:"failed",providerId:a,method:"api_key",checkedAt:g,message:aw(f.message),persisted:!1},await this.buildState();let h=await this.getAuthStorage();return h.reload(),h.set(a,{type:"api_key",key:d}),this.lastValidation={status:"succeeded",providerId:a,method:"api_key",checkedAt:g,message:aw(f.message||`${a} credentials validated`),persisted:!0},await this.refreshBridgeAuth(),await this.buildState()}async startProviderFlow(a){let b=await this.getAuthStorage();b.reload();let c=b.getOAuthProviders().find(b=>b.id===a);if(!c)throw Error(`OAuth provider not available for onboarding: ${a}`);this.activeFlow&&["running","awaiting_browser_auth","awaiting_input"].includes(this.activeFlow.state.status)&&this.cancelActiveFlow();let e={state:{flowId:(this.deps.createFlowId??(()=>(0,d.randomUUID)()))(),providerId:a,providerLabel:c.name,status:"running",updatedAt:av(this.deps.now??(()=>new Date)),auth:null,prompt:null,progress:[],error:null},awaitingInput:null,abortController:new AbortController};return this.activeFlow=e,this.runOAuthFlow(e,c,b),await this.buildState()}async submitProviderFlowInput(a,b){let c=this.activeFlow;if(!c||c.state.flowId!==a)throw Error(`Unknown onboarding flow: ${a}`);if(!c.awaitingInput)throw Error(`Onboarding flow ${a} is not waiting for input`);let d=c.awaitingInput;return c.awaitingInput=null,c.state.prompt=null,c.state.status="running",c.state.updatedAt=av(this.deps.now??(()=>new Date)),d(b),await this.buildState()}async cancelProviderFlow(a){let b=this.activeFlow;if(!b||b.state.flowId!==a)throw Error(`Unknown onboarding flow: ${a}`);return this.cancelActiveFlow(),await this.buildState()}async logoutProvider(a){let b=await this.getAuthStorage();b.reload();let c=await this.buildState(),d=a.trim()||c.required.satisfiedBy?.providerId||c.required.providers.find(a=>a.configured)?.id;if(!d)throw Error("No configured provider is available to log out");let e=c.required.providers.find(a=>a.id===d),f=e?.label??d;if(!e?.configured)throw Error(`${f} is not configured in this workspace`);if("auth_file"!==e.configuredVia)throw Error(`${f} is configured via ${e.configuredVia} and cannot be logged out from the browser surface`);return this.activeFlow&&this.activeFlow.state.providerId===d&&["running","awaiting_browser_auth","awaiting_input"].includes(this.activeFlow.state.status)&&this.cancelActiveFlow(),b.logout(d),this.lastValidation=null,await this.refreshBridgeAuth(),await this.buildState()}async refreshBridgeAuth(){let a=this.deps.refreshBridgeAuth;if(!a){this.bridgeAuthRefresh=ax();return}let b=av(this.deps.now??(()=>new Date));this.bridgeAuthRefresh={phase:"pending",strategy:"restart",startedAt:b,completedAt:null,error:null};try{await a(),this.bridgeAuthRefresh={phase:"succeeded",strategy:"restart",startedAt:b,completedAt:av(this.deps.now??(()=>new Date)),error:null}}catch(a){this.bridgeAuthRefresh={phase:"failed",strategy:"restart",startedAt:b,completedAt:av(this.deps.now??(()=>new Date)),error:aw(a)}}}async getAuthStorage(){return this.authStorage||(this.deps.authStorage?this.authStorage=this.deps.authStorage:this.deps.createAuthStorage?this.authStorage=await this.deps.createAuthStorage(this.deps.authPath??j.sI):this.authStorage=new ao(this.deps.authPath??j.sI)),this.authStorage}buildOptionalSectionState(a){let b=this.deps.env??process.env;return ar.map(c=>{let d=c.providers.filter(c=>{let d=!!c.envVar&&"string"==typeof b[c.envVar]&&b[c.envVar].trim().length>0,e=ay(a,c.id);return d||e}).map(a=>a.label);return{id:c.id,label:c.label,blocking:!1,skippable:!0,configured:d.length>0,configuredItems:d}})}buildProviderState(a,b){let c=new Map(a.getOAuthProviders().map(a=>[a.id,a])),d=this.deps.isExternalCliProvider??at;return aq.map(e=>{var f;let g=c.get(e.id),h=(f=e.id,d(f)?"external_cli":ay(a,f)?"auth_file":b(f)?"environment":null);return{id:e.id,label:g?.name??e.label,required:!0,recommended:!!e.recommended,configured:null!==h,configuredVia:h,supports:{apiKey:e.supportsApiKey,oauth:e.supportsOAuth,oauthAvailable:!!e.supportsOAuth&&!!g,usesCallbackServer:!!g?.usesCallbackServer,externalCli:!!e.supportsExternalCli}}})}async buildState(){var a,b;let d=await this.getAuthStorage(),e=this.deps.getEnvApiKey??i;d.reload();let f=this.buildProviderState(d,e),g=f.find(a=>a.configured)??null,h=this.buildOptionalSectionState(d),j=(a=!!g,b=this.bridgeAuthRefresh,a?"pending"===b.phase?"bridge_refresh_pending":"failed"===b.phase?"bridge_refresh_failed":null:"required_setup"),k=null;try{let{readOnboardingRecord:a,isOnboardingComplete:b}=await c.e(7461).then(c.bind(c,7461)),d=a();k={completedAt:b()?d.completedAt:null,completedSteps:d.completedSteps,skippedSteps:d.skippedSteps,lastResumePoint:d.lastResumePoint,flowVersion:d.flowVersion}}catch{k=null}return{status:j?"blocked":"ready",locked:null!==j,lockReason:j,required:{blocking:!0,skippable:!1,satisfied:!!g,satisfiedBy:g?{providerId:g.id,source:g.configuredVia??"runtime"}:null,providers:f},optional:{blocking:!1,skippable:!0,sections:h},lastValidation:this.lastValidation?{...this.lastValidation}:null,activeFlow:this.activeFlow?structuredClone(this.activeFlow.state):null,bridgeAuthRefresh:{...this.bridgeAuthRefresh},completionRecord:k}}cancelActiveFlow(){this.activeFlow&&(this.activeFlow.abortController.abort(),this.activeFlow.awaitingInput&&(this.activeFlow.awaitingInput(""),this.activeFlow.awaitingInput=null),this.activeFlow.state.status="cancelled",this.activeFlow.state.prompt=null,this.activeFlow.state.error=null,this.activeFlow.state.updatedAt=av(this.deps.now??(()=>new Date)))}async runOAuthFlow(a,b,c){try{await c.login(b.id,{onAuth:b=>{a.state.auth=b,a.state.status="awaiting_browser_auth",a.state.updatedAt=av(this.deps.now??(()=>new Date))},onPrompt:async b=>await this.waitForFlowInput(a,"text",b),onProgress:b=>{a.state.progress=[...a.state.progress,aw(b)].slice(-20),"awaiting_input"!==a.state.status&&(a.state.status="running"),a.state.updatedAt=av(this.deps.now??(()=>new Date))},onManualCodeInput:async()=>await this.waitForFlowInput(a,"manual_code",{message:"Paste the redirect URL from your browser:",placeholder:"http://localhost:..."}),signal:a.abortController.signal}),a.state.status="succeeded",a.state.prompt=null,a.state.error=null,a.state.updatedAt=av(this.deps.now??(()=>new Date)),this.lastValidation={status:"succeeded",providerId:b.id,method:"oauth",checkedAt:a.state.updatedAt,message:`${b.id} sign-in complete`,persisted:!0},await this.refreshBridgeAuth()}catch(d){let c=a.abortController.signal.aborted;a.state.status=c?"cancelled":"failed",a.state.prompt=null,a.state.error=c?null:aw(d),a.state.updatedAt=av(this.deps.now??(()=>new Date)),c||(this.lastValidation={status:"failed",providerId:b.id,method:"oauth",checkedAt:a.state.updatedAt,message:a.state.error||`${b.id} sign-in failed`,persisted:!1})}}async waitForFlowInput(a,b,c){return a.state.status="awaiting_input",a.state.prompt={kind:b,message:c.message,placeholder:c.placeholder,allowEmpty:c.allowEmpty},a.state.updatedAt=av(this.deps.now??(()=>new Date)),await new Promise(b=>{a.awaitingInput=b})}}function aG(){return au||(au=new aF({env:process.env,authPath:j.sI,fetch,now:()=>new Date,createFlowId:()=>(0,d.randomUUID)(),validateApiKey:function(a){if("1"===a.GSD_WEB_TEST_FAKE_API_KEY_VALIDATION)return async(a,b)=>{let c=aq.find(b=>b.id===a)?.label??a,d=b.trim().toLowerCase();return!d||d.includes("invalid")||d.includes("reject")||d.includes("fail")?{ok:!1,message:`${c} rejected the supplied key`}:{ok:!0,message:`${c} credentials validated`}}}(process.env),isExternalCliProvider:function(a){if("1"===a.GSD_WEB_TEST_DISABLE_EXTERNAL_CLI)return()=>!1}(process.env),refreshBridgeAuth:ap??void 0,...{}})),au}async function aH(){return await aG().getState()}function aI(a){ap=a,au=null}},4431:(a,b,c)=>{"use strict";c.d(b,{KW:()=>h,hg:()=>f,vB:()=>i});var d=c(3024),e=c(6760);function f(a){return g(a)&&function(){let[a,b]=process.versions.node.split(".").map(Number);return a>22||22===a&&b>=7}()?"--experimental-transform-types":"--experimental-strip-types"}function g(a){return a.replace(/\\/g,"/").includes("/node_modules/")}function h(a,b,c=d.existsSync){if(g(a)){let d=b.replace(/\.ts$/,".js"),f=(0,e.join)(a,"dist",d);if(c(f))return{modulePath:f,useCompiledJs:!0}}return{modulePath:(0,e.join)(a,"src",b),useCompiledJs:!1}}function i(a,b,c){return b.useCompiledJs?["--input-type=module"]:["--import",c,f(a),"--input-type=module"]}},6460:(a,b,c)=>{"use strict";c.d(b,{AL:()=>i,PO:()=>d,_B:()=>j,on:()=>k,ql:()=>h});let d="current_project",e=["threaded","recent","relevance"],f=["all","named"],g=["rename"];function h(a){return e.includes(a??"")}function i(a){return f.includes(a??"")}function j(a){return g.includes(a??"")}function k(a){return{query:a?.query?.trim()??"",sortMode:a?.sortMode??"threaded",nameFilter:a?.nameFilter??"all"}}},6487:()=>{},7712:(a,b,c)=>{"use strict";let d;c.d(b,{xD:()=>aa,Fs:()=>_,tL:()=>Z,yd:()=>$,tS:()=>W,pA:()=>v,tl:()=>P,Os:()=>X,jL:()=>R,eG:()=>L,O5:()=>Q,sM:()=>ac});var e=c(1421),f=c(3024),g=c(6193),h=c(6760),i=c(3136),j=c(4431),k=c(6460),l=c(7849),m=c(3576);let n="GSD_AUTO_DASHBOARD_MODULE";function o(){return{active:!1,paused:!1,stepMode:!1,startTime:0,elapsed:0,currentUnit:null,completedUnits:[],basePath:"",totalCost:0,totalTokens:0,rtkSavings:null,rtkEnabled:!1}}async function p(a,b={}){let c=b.env??process.env;if("1"===c.GSD_WEB_TEST_USE_FALLBACK_AUTO_DASHBOARD)return o();let d=b.existsSync??f.existsSync,g=(0,h.join)(a,"src","resources","extensions","gsd","tests","resolve-ts.mjs"),k=c.GSD_WEB_TEST_AUTO_DASHBOARD_MODULE,l=k?{modulePath:k,useCompiledJs:!1}:(0,j.KW)(a,"resources/extensions/gsd/auto.ts",d),m=l.modulePath;if(!l.useCompiledJs&&(!d(g)||!d(m)))throw Error(`authoritative auto dashboard provider not found; checked=${g},${m}`);if(l.useCompiledJs&&!d(m))throw Error(`authoritative auto dashboard provider not found; checked=${m}`);let q=`const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.${n}).href); const result = await mod.getAutoDashboardData(); process.stdout.write(JSON.stringify(result));`,r=(0,j.vB)(a,l,(0,i.pathToFileURL)(g).href);return await new Promise((g,i)=>{(0,e.execFile)(b.execPath??process.execPath,[...r,"--eval",q],{cwd:a,env:{...c,[n]:m},maxBuffer:1048576,windowsHide:!0},(a,b,e)=>{if(a)return void i(Error(`authoritative auto dashboard subprocess failed: ${e||a.message}`));try{let a=JSON.parse(b),e=c.GSD_WEB_PROJECT_CWD||"",i=e?function(a,b,c){if(a.active||a.paused)return a;let d=(0,h.join)(b,".gsd","runtime","paused-session.json");if(c(d))try{return JSON.parse((0,f.readFileSync)(d,"utf-8")),{...a,paused:!0}}catch{}let e=(0,h.join)(b,".gsd","auto.lock");if(c(e))try{let b=JSON.parse((0,f.readFileSync)(e,"utf-8"));if("number"==typeof b.pid&&function(a){try{return process.kill(a,0),!0}catch{return!1}}(b.pid))return{...a,active:!0}}catch{}return a}(a,e,d):a;g(i)}catch(a){i(Error(`authoritative auto dashboard subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}var q=c(2813);let r=new Set(["get_state","get_available_models","get_session_stats","get_messages","get_last_assistant_text","get_fork_messages","get_commands"]);function s(a){return a.toLowerCase().replace(/\s+/g," ").trim()}function t(a){return!!a.name?.trim()}function u(a,b){let c=`${a.id} ${a.name??""} ${a.allMessagesText} ${a.cwd}`;if("regex"===b.mode){if(!b.regex)return{matches:!1,score:0};let a=c.search(b.regex);return a<0?{matches:!1,score:0}:{matches:!0,score:.1*a}}if(0===b.tokens.length)return{matches:!0,score:0};let d=0,e=null;for(let a of b.tokens){if("phrase"===a.kind){null===e&&(e=s(c));let b=s(a.value);if(!b)continue;let f=e.indexOf(b);if(f<0)return{matches:!1,score:0};d+=.1*f;continue}let b=function(a,b){let c=a.toLowerCase(),d=b.toLowerCase(),e=a=>{if(0===a.length)return{matches:!0,score:0};if(a.length>d.length)return{matches:!1,score:0};let b=0,c=0,e=-1,f=0;for(let g=0;g<d.length&&b<a.length;g++){if(d[g]!==a[b])continue;let h=0===g||/[\s\-_./:]/.test(d[g-1]);e===g-1?c-=5*++f:(f=0,e>=0&&(c+=(g-e-1)*2)),h&&(c-=10),c+=.1*g,e=g,b++}return b<a.length?{matches:!1,score:0}:{matches:!0,score:c}},f=e(c);if(f.matches)return f;let g=c.match(/^(?<letters>[a-z]+)(?<digits>[0-9]+)$/),h=c.match(/^(?<digits>[0-9]+)(?<letters>[a-z]+)$/),i=g?`${g.groups?.digits??""}${g.groups?.letters??""}`:h?`${h.groups?.letters??""}${h.groups?.digits??""}`:"";if(!i)return f;let j=e(i);return j.matches?{matches:!0,score:j.score+5}:f}(a.value,c);if(!b.matches)return{matches:!1,score:0};d+=b.score}return{matches:!0,score:d}}function v(a){let b,c=F().existsSync??f.existsSync,d=c((0,h.join)(a,".gsd")),e=c((0,h.join)(a,".planning")),g=c((0,h.join)(a,".git")),i=c((0,h.join)(a,"package.json")),j=c((0,h.join)(a,"Cargo.toml")),k=c((0,h.join)(a,"go.mod")),l=c((0,h.join)(a,"pyproject.toml")),m=function(a,b){let c=b??F().existsSync??f.existsSync;if(c((0,h.join)(a,"pnpm-workspace.yaml"))||c((0,h.join)(a,"lerna.json"))||c((0,h.join)(a,"rush.json"))||c((0,h.join)(a,"nx.json"))||c((0,h.join)(a,"turbo.json")))return!0;let d=(0,h.join)(a,"package.json");if(c(d))try{let a=(0,f.readFileSync)(d,"utf-8"),b=JSON.parse(a);if(null!=b.workspaces)return!0}catch{}return!1}(a,c),n=0;try{n=(0,f.readdirSync)(a).filter(a=>!a.startsWith(".")).length}catch{}let o={hasGsdFolder:d,hasPlanningFolder:e,hasGitRepo:g,hasPackageJson:i,hasCargo:j,hasGoMod:k,hasPyproject:l,isMonorepo:m,fileCount:n};if(d){let c=(0,h.join)(a,".gsd","milestones"),d=!1;try{d=(0,f.readdirSync)(c,{withFileTypes:!0}).some(a=>a.isDirectory())}catch{}b=d?"active-gsd":"empty-gsd"}else b=e?"v1-legacy":i||j||k||l||n>2||g&&n>0?"brownfield":"blank";return{kind:b,signals:o}}let w={spawn:(a,b,c)=>(0,e.spawn)(a,b,c),existsSync:f.existsSync,execPath:process.execPath,env:process.env,indexWorkspace:a=>K(a),getAutoDashboardData:async()=>{let a=F(),b=a.env??process.env,c=L(b);return await p(c.packageRoot,{execPath:a.execPath??process.execPath,env:b,existsSync:a.existsSync??f.existsSync})},listSessions:async a=>J(a)},x=new Map,y=new Map;async function z(a){let b=F(),c=(0,h.join)(a.packageRoot,"packages","pi-coding-agent","dist","core","session-manager.js");if(!(b.existsSync??f.existsSync)(c))throw Error(`session manager module not found; checked=${c}`);return await new Promise((d,f)=>{(0,e.execFile)(b.execPath??process.execPath,["--input-type=module","--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_SESSION_MANAGER_MODULE).href); const sessions = await mod.SessionManager.list(process.env.GSD_SESSION_BROWSER_CWD, process.env.GSD_SESSION_BROWSER_DIR); process.stdout.write(JSON.stringify(sessions.map((session) => ({ ...session, created: session.created.toISOString(), modified: session.modified.toISOString() }))));'],{cwd:a.packageRoot,env:{...b.env??process.env,GSD_SESSION_MANAGER_MODULE:c,GSD_SESSION_BROWSER_CWD:a.projectCwd,GSD_SESSION_BROWSER_DIR:a.projectSessionsDir},maxBuffer:1048576,windowsHide:!0},(a,b,c)=>{if(a)return void f(Error(`session list subprocess failed: ${c||a.message}`));try{let a=JSON.parse(b);d(a.map(a=>({...a,created:new Date(a.created),modified:new Date(a.modified)})))}catch(a){f(Error(`session list subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}async function A(a,b,c){let d=F(),g=(0,h.join)(a.packageRoot,"packages","pi-coding-agent","dist","core","session-manager.js");if(!(d.existsSync??f.existsSync)(g))throw Error(`session manager module not found; checked=${g}`);await new Promise((f,h)=>{(0,e.execFile)(d.execPath??process.execPath,["--input-type=module","--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_SESSION_MANAGER_MODULE).href); const manager = mod.SessionManager.open(process.env.GSD_TARGET_SESSION_PATH, process.env.GSD_SESSION_BROWSER_DIR); manager.appendSessionInfo(process.env.GSD_TARGET_SESSION_NAME);'],{cwd:a.packageRoot,env:{...d.env??process.env,GSD_SESSION_MANAGER_MODULE:g,GSD_SESSION_BROWSER_DIR:a.projectSessionsDir,GSD_TARGET_SESSION_PATH:b,GSD_TARGET_SESSION_NAME:c},maxBuffer:1048576,windowsHide:!0},(a,b,c)=>{a?h(Error(`session rename subprocess failed: ${c||a.message}`)):f()})})}function B(){return new Date().toISOString()}function C(a){return`${JSON.stringify(a)}
|
|
11
|
+
</html>`;function ag(a){let b=a.trim();if(!b)return{};try{let a=new URL(b);return{code:a.searchParams.get("code")??void 0,state:a.searchParams.get("state")??void 0}}catch{}if(b.includes("#")){let[a,c]=b.split("#",2);return{code:a,state:c}}if(b.includes("code=")){let a=new URLSearchParams(b);return{code:a.get("code")??void 0,state:a.get("state")??void 0}}return{code:b}}async function ah(a,b,c=ad){let d=await fetch(ac,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:ab,code:a,code_verifier:b,redirect_uri:c}),signal:AbortSignal.timeout(3e4)});if(!d.ok){let a=await d.text().catch(()=>"");return console.error("[openai-codex] code->token failed:",d.status,a),{type:"failed"}}let e=await d.json();return e.access_token&&e.refresh_token&&"number"==typeof e.expires_in?{type:"success",access:e.access_token,refresh:e.refresh_token,expires:Date.now()+1e3*e.expires_in}:(console.error("[openai-codex] token response missing fields:",e),{type:"failed"})}async function ai(a){try{let b=await fetch(ac,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:a,client_id:ab}),signal:AbortSignal.timeout(3e4)});if(!b.ok){let a=await b.text().catch(()=>"");return console.error("[openai-codex] Token refresh failed:",b.status,a),{type:"failed"}}let c=await b.json();if(!c.access_token||!c.refresh_token||"number"!=typeof c.expires_in)return console.error("[openai-codex] Token refresh response missing fields:",c),{type:"failed"};return{type:"success",access:c.access_token,refresh:c.refresh_token,expires:Date.now()+1e3*c.expires_in}}catch(a){return console.error("[openai-codex] Token refresh error:",a),{type:"failed"}}}async function aj(a="pi"){let{verifier:b,challenge:c}=await I(),d=function(){if(!_)throw Error("OpenAI Codex OAuth is only available in Node.js environments");return _(16).toString("hex")}(),e=new URL("https://auth.openai.com/oauth/authorize");return e.searchParams.set("response_type","code"),e.searchParams.set("client_id",ab),e.searchParams.set("redirect_uri",ad),e.searchParams.set("scope","openid profile email offline_access"),e.searchParams.set("code_challenge",c),e.searchParams.set("code_challenge_method","S256"),e.searchParams.set("state",d),e.searchParams.set("id_token_add_organizations","true"),e.searchParams.set("codex_cli_simplified_flow","true"),e.searchParams.set("originator",a),{verifier:b,state:d,url:e.toString()}}function ak(a){let b=function(a){try{let b=a.split(".");if(3!==b.length)return null;let c=b[1]??"",d=atob(c);return JSON.parse(d)}catch{return null}}(a),c=b?.["https://api.openai.com/auth"],d=c?.chatgpt_account_id;return"string"==typeof d&&d.length>0?d:null}async function al(a){let b,{verifier:c,state:d,url:e}=await aj(a.originator),f=await function(a){if(!aa)throw Error("OpenAI Codex OAuth is only available in Node.js environments");let b=null,c=!1,d=aa.createServer((c,d)=>{try{let e=new URL(c.url||"","http://localhost");if("/auth/callback"!==e.pathname){d.statusCode=404,d.end("Not found");return}if(e.searchParams.get("state")!==a){d.statusCode=400,d.end("State mismatch");return}let f=e.searchParams.get("code");if(!f){d.statusCode=400,d.end("Missing authorization code");return}d.statusCode=200,d.setHeader("Content-Type","text/html; charset=utf-8"),d.end(af),b=f}catch{d.statusCode=500,d.end("Internal error")}});return new Promise(a=>{d.listen(1455,"127.0.0.1",()=>{a({close:()=>d.close(),cancelWait:()=>{c=!0},waitForCode:async()=>{let a=()=>new Promise(a=>setTimeout(a,100));for(let d=0;d<600;d+=1){if(b)return{code:b};if(c)break;await a()}return null}})}).on("error",b=>{console.error("[openai-codex] Failed to bind http://127.0.0.1:1455 (",b.code,") Falling back to manual paste."),a({close:()=>{try{d.close()}catch{}},cancelWait:()=>{},waitForCode:async()=>null})})})}(d);a.onAuth({url:e,instructions:"A browser window should open. Complete login to finish."});try{if(a.onManualCodeInput){let c,e,g=a.onManualCodeInput().then(a=>{c=a,f.cancelWait()}).catch(a=>{e=a instanceof Error?a:Error(String(a)),f.cancelWait()}),h=await f.waitForCode();if(e)throw e;if(h?.code)b=h.code;else if(c){let a=ag(c);if(a.state&&a.state!==d)throw Error("State mismatch");b=a.code}if(!b){if(await g,e)throw e;if(c){let a=ag(c);if(a.state&&a.state!==d)throw Error("State mismatch");b=a.code}}}else{let a=await f.waitForCode();a?.code&&(b=a.code)}if(!b){let c=await a.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),e=ag(c);if(e.state&&e.state!==d)throw Error("State mismatch");b=e.code}if(!b)throw Error("Missing authorization code");let e=await ah(b,c);if("success"!==e.type)throw Error("Token exchange failed");let g=ak(e.access);if(!g)throw Error("Failed to extract accountId from token");return{access:e.access,refresh:e.refresh,expires:e.expires,accountId:g}}finally{f.close()}}async function am(a){let b=await ai(a);if("success"!==b.type)throw Error("Failed to refresh OpenAI Codex token");let c=ak(b.access);if(!c)throw Error("Failed to extract accountId from token");return{access:b.access,refresh:b.refresh,expires:b.expires,accountId:c}}let an=new Map([{id:"github-copilot",name:"GitHub Copilot",login:async a=>z({onAuth:(b,c)=>a.onAuth({url:b,instructions:c}),onPrompt:a.onPrompt,onProgress:a.onProgress,signal:a.signal}),async refreshToken(a){let b=await v(a.refresh,a.enterpriseUrl);try{let c=await y(b.access,a.enterpriseUrl);Object.keys(c).length>0&&(b.modelLimits=c)}catch{}return b},getApiKey:a=>a.access,modifyModels(a,b){let c=b.enterpriseUrl?o(b.enterpriseUrl)??void 0:void 0,d=q(b.access,c),e=b.modelLimits,f=e?new Set(Object.keys(e)):null,g=!!f&&f.size>0;return a.flatMap(a=>{if("github-copilot"!==a.provider)return a;if(g&&!f.has(a.id))return[];let b=e?.[a.id];return{...a,baseUrl:d,...b&&{contextWindow:b.contextWindow,maxTokens:b.maxTokens}}})}},{id:"google-gemini-cli",name:"Google Cloud Code Assist (Gemini CLI)",usesCallbackServer:!0,login:async a=>$(a.onAuth,a.onProgress,a.onManualCodeInput),async refreshToken(a){if(!a.projectId)throw Error("Google Cloud credentials missing projectId");return Z(a.refresh,a.projectId)},getApiKey:a=>JSON.stringify({token:a.access,projectId:a.projectId})},{id:"google-antigravity",name:"Antigravity (Gemini 3, Claude, GPT-OSS)",usesCallbackServer:!0,login:async a=>P(a.onAuth,a.onProgress,a.onManualCodeInput),async refreshToken(a){if(!a.projectId)throw Error("Antigravity credentials missing projectId");return O(a.refresh,a.projectId)},getApiKey:a=>JSON.stringify({token:a.access,projectId:a.projectId})},{id:"openai-codex",name:"ChatGPT Plus/Pro (Codex Subscription)",usesCallbackServer:!0,login:async a=>al({onAuth:a.onAuth,onPrompt:a.onPrompt,onProgress:a.onProgress,onManualCodeInput:a.onManualCodeInput}),refreshToken:async a=>am(a.refresh),getApiKey:a=>a.access,modifyModels:a=>a.filter(a=>"openai-codex"!==a.provider||!ae.has(a.id))}].map(a=>[a.id,a]));class ao{constructor(a){this.data={},this.authPath=a,this.reload()}reload(){var a;let b;a=this.authPath,b=(0,g.dirname)(a),(0,e.existsSync)(b)||(0,e.mkdirSync)(b,{recursive:!0,mode:448}),(0,e.existsSync)(a)||((0,e.writeFileSync)(a,"{}","utf-8"),(0,e.chmodSync)(a,384)),this.data=function(a){if(!a||!a.trim())return{};try{let b=JSON.parse(a);return"object"==typeof b&&null!==b?b:{}}catch{return{}}}((0,e.readFileSync)(this.authPath,"utf-8"))}getCredentialsForProvider(a){let b=this.data[a];return b?Array.isArray(b)?b:[b]:[]}set(a,b){let c=this.getCredentialsForProvider(a),d="api_key"===b.type?this.mergeApiKeyCredentials(c,b):this.mergeOAuthCredential(c,b);this.data[a]=1===d.length?d[0]:d,(0,e.writeFileSync)(this.authPath,JSON.stringify(this.data,null,2),"utf-8"),(0,e.chmodSync)(this.authPath,384)}hasAuth(a){return this.getCredentialsForProvider(a).length>0||!!i(a)}getOAuthProviders(){return Array.from(an.values())}async login(a,b){let c=an.get(a);if(!c)throw Error(`Unknown OAuth provider: ${a}`);let d=await c.login(b);this.set(a,{type:"oauth",...d})}logout(a){delete this.data[a],(0,e.writeFileSync)(this.authPath,JSON.stringify(this.data,null,2),"utf-8"),(0,e.chmodSync)(this.authPath,384)}mergeApiKeyCredentials(a,b){return a.some(a=>"api_key"===a.type&&a.key===b.key)?a:[...a,b]}mergeOAuthCredential(a,b){return[...a.filter(a=>"api_key"===a.type),b]}}let ap=null,aq=[{id:"anthropic",label:"Anthropic (Claude)",supportsApiKey:!0,supportsOAuth:!1,recommended:!0},{id:"openai",label:"OpenAI",supportsApiKey:!0,supportsOAuth:!1},{id:"github-copilot",label:"GitHub Copilot",supportsApiKey:!1,supportsOAuth:!0},{id:"openai-codex",label:"ChatGPT Plus/Pro (Codex Subscription)",supportsApiKey:!1,supportsOAuth:!0},{id:"google-gemini-cli",label:"Google Cloud Code Assist (Gemini CLI)",supportsApiKey:!1,supportsOAuth:!0},{id:"google-antigravity",label:"Antigravity (Gemini 3, Claude, GPT-OSS)",supportsApiKey:!1,supportsOAuth:!0},{id:"google",label:"Google (Gemini API)",supportsApiKey:!0,supportsOAuth:!1},{id:"groq",label:"Groq",supportsApiKey:!0,supportsOAuth:!1},{id:"xai",label:"xAI (Grok)",supportsApiKey:!0,supportsOAuth:!1},{id:"openrouter",label:"OpenRouter",supportsApiKey:!0,supportsOAuth:!1},{id:"mistral",label:"Mistral",supportsApiKey:!0,supportsOAuth:!1},{id:"minimax",label:"MiniMax",supportsApiKey:!0,supportsOAuth:!1},{id:"minimax-cn",label:"MiniMax CN",supportsApiKey:!0,supportsOAuth:!1},{id:"ollama-cloud",label:"Ollama Cloud",supportsApiKey:!1,supportsOAuth:!1},{id:"custom-openai",label:"Custom (OpenAI-compatible)",supportsApiKey:!1,supportsOAuth:!1},{id:"cerebras",label:"Cerebras",supportsApiKey:!1,supportsOAuth:!1},{id:"azure-openai-responses",label:"Azure OpenAI",supportsApiKey:!1,supportsOAuth:!1},{id:"alibaba-coding-plan",label:"Alibaba Coding Plan",supportsApiKey:!1,supportsOAuth:!1},{id:"alibaba-dashscope",label:"Alibaba DashScope",supportsApiKey:!1,supportsOAuth:!1},{id:"claude-code",label:"Claude Code (Local CLI)",supportsApiKey:!1,supportsOAuth:!1,supportsExternalCli:!0,recommended:!0}],ar=[{id:"web_search",label:"Web search",providers:[{id:"brave",label:"Brave Search",envVar:"BRAVE_API_KEY"},{id:"tavily",label:"Tavily",envVar:"TAVILY_API_KEY"}]},{id:"tool_keys",label:"Tool API keys",providers:[{id:"context7",label:"Context7",envVar:"CONTEXT7_API_KEY"},{id:"jina",label:"Jina AI",envVar:"JINA_API_KEY"},{id:"groq",label:"Groq",envVar:"GROQ_API_KEY"}]},{id:"remote_questions",label:"Remote questions",providers:[{id:"discord_bot",label:"Discord",envVar:"DISCORD_BOT_TOKEN"},{id:"slack_bot",label:"Slack",envVar:"SLACK_BOT_TOKEN"},{id:"telegram_bot",label:"Telegram",envVar:"TELEGRAM_BOT_TOKEN"}]}],as=new Set(["claude-code"]);function at(a){return as.has(a)}let au=null;function av(a){return a().toISOString()}function aw(a){return(a instanceof Error?a.message:String(a)).replace(/sk-[A-Za-z0-9_-]{6,}/g,"[redacted]").replace(/xox[baprs]-[A-Za-z0-9-]+/g,"[redacted]").replace(/Bearer\s+[^\s]+/gi,"Bearer [redacted]").replace(/([A-Z0-9_]*(?:API[_-]?KEY|TOKEN|SECRET)["'=:\s]+)([^\s,;"']+)/gi,"$1[redacted]").replace(/\s+/g," ").trim()}function ax(){return{phase:"idle",strategy:null,startedAt:null,completedAt:null,error:null}}function ay(a,b){return a.getCredentialsForProvider(b).some(a=>"oauth"===a.type?"string"==typeof a.access&&a.access.trim().length>0:"string"==typeof a.key&&a.key.trim().length>0)}async function az(a,b){let c="";try{if((b.headers.get("content-type")||"").includes("application/json")){let a=await b.json();c=function a(b){if(!b)return null;if("string"==typeof b)return b;if("object"!=typeof b)return null;for(let c of[b.message,b.error,b.detail,b.error_description]){if("string"==typeof c&&c.trim().length>0)return c;let b=a(c);if(b)return b}return null}(a)??JSON.stringify(a)}else c=await b.text()}catch{c=""}let d=aw(c);return d?`${a} validation failed (${b.status}): ${d}`:`${a} validation failed (${b.status})`}async function aA(a,b,c,d,e={}){try{let f=await a(c,{headers:{Authorization:`Bearer ${d}`,...e},signal:AbortSignal.timeout(15e3)});if(!f.ok)return{ok:!1,message:await az(b,f)};return{ok:!0,message:`${b} credentials validated`}}catch(a){return{ok:!1,message:`${b} validation failed: ${aw(a)}`}}}async function aB(a,b){try{let c=new URL("https://generativelanguage.googleapis.com/v1beta/models");c.searchParams.set("key",b);let d=await a(c,{signal:AbortSignal.timeout(15e3)});if(!d.ok)return{ok:!1,message:await az("google",d)};return{ok:!0,message:"google credentials validated"}}catch(a){return{ok:!1,message:`google validation failed: ${aw(a)}`}}}async function aC(a,b){try{let c=await a("https://api.anthropic.com/v1/models",{headers:{"x-api-key":b,"anthropic-version":"2023-06-01"},signal:AbortSignal.timeout(15e3)});if(!c.ok)return{ok:!1,message:await az("anthropic",c)};return{ok:!0,message:"anthropic credentials validated"}}catch(a){return{ok:!1,message:`anthropic validation failed: ${aw(a)}`}}}async function aD(a,b,c,d,e){try{let f=await a(`${d}/v1/messages`,{method:"POST",headers:{"x-api-key":c,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:e,max_tokens:1,messages:[{role:"user",content:"hi"}]}),signal:AbortSignal.timeout(15e3)});if(!f.ok)return{ok:!1,message:await az(b,f)};return{ok:!0,message:`${b} credentials validated`}}catch(a){return{ok:!1,message:`${b} validation failed: ${aw(a)}`}}}async function aE(a,b,c){switch(a){case"anthropic":return await aC(c,b);case"openai":return await aA(c,a,"https://api.openai.com/v1/models",b);case"google":return await aB(c,b);case"groq":return await aA(c,a,"https://api.groq.com/openai/v1/models",b);case"xai":return await aA(c,a,"https://api.x.ai/v1/models",b);case"openrouter":return await aA(c,a,"https://openrouter.ai/api/v1/models",b,{"HTTP-Referer":"https://localhost","X-Title":"GSD onboarding"});case"mistral":return await aA(c,a,"https://api.mistral.ai/v1/models",b);case"minimax":return await aD(c,a,b,"https://api.minimax.io/anthropic","MiniMax-M2.7");case"minimax-cn":return await aD(c,a,b,"https://api.minimaxi.com/anthropic","MiniMax-M2.7");default:return{ok:!1,message:`${a} does not support API-key validation via onboarding`}}}class aF{constructor(a){this.authStorage=null,this.lastValidation=null,this.activeFlow=null,this.bridgeAuthRefresh=ax(),this.deps=a}async getState(){return this.buildState()}async validateAndSaveApiKey(a,b){let c=aq.find(b=>b.id===a);if(!c)throw Error(`Unknown onboarding provider: ${a}`);if(!c.supportsApiKey)throw Error(`${a} must be configured with browser sign-in`);let d=b.trim();if(!d)throw Error("API key is required");let e=this.deps.validateApiKey??(async(a,b)=>await aE(a,b,this.deps.fetch??fetch)),f=await e(a,d),g=av(this.deps.now??(()=>new Date));if(!f.ok)return this.lastValidation={status:"failed",providerId:a,method:"api_key",checkedAt:g,message:aw(f.message),persisted:!1},await this.buildState();let h=await this.getAuthStorage();return h.reload(),h.set(a,{type:"api_key",key:d}),this.lastValidation={status:"succeeded",providerId:a,method:"api_key",checkedAt:g,message:aw(f.message||`${a} credentials validated`),persisted:!0},await this.refreshBridgeAuth(),await this.buildState()}async startProviderFlow(a){let b=await this.getAuthStorage();b.reload();let c=b.getOAuthProviders().find(b=>b.id===a);if(!c)throw Error(`OAuth provider not available for onboarding: ${a}`);this.activeFlow&&["running","awaiting_browser_auth","awaiting_input"].includes(this.activeFlow.state.status)&&this.cancelActiveFlow();let e={state:{flowId:(this.deps.createFlowId??(()=>(0,d.randomUUID)()))(),providerId:a,providerLabel:c.name,status:"running",updatedAt:av(this.deps.now??(()=>new Date)),auth:null,prompt:null,progress:[],error:null},awaitingInput:null,abortController:new AbortController};return this.activeFlow=e,this.runOAuthFlow(e,c,b),await this.buildState()}async submitProviderFlowInput(a,b){let c=this.activeFlow;if(!c||c.state.flowId!==a)throw Error(`Unknown onboarding flow: ${a}`);if(!c.awaitingInput)throw Error(`Onboarding flow ${a} is not waiting for input`);let d=c.awaitingInput;return c.awaitingInput=null,c.state.prompt=null,c.state.status="running",c.state.updatedAt=av(this.deps.now??(()=>new Date)),d(b),await this.buildState()}async cancelProviderFlow(a){let b=this.activeFlow;if(!b||b.state.flowId!==a)throw Error(`Unknown onboarding flow: ${a}`);return this.cancelActiveFlow(),await this.buildState()}async logoutProvider(a){let b=await this.getAuthStorage();b.reload();let c=await this.buildState(),d=a.trim()||c.required.satisfiedBy?.providerId||c.required.providers.find(a=>a.configured)?.id;if(!d)throw Error("No configured provider is available to log out");let e=c.required.providers.find(a=>a.id===d),f=e?.label??d;if(!e?.configured)throw Error(`${f} is not configured in this workspace`);if("auth_file"!==e.configuredVia)throw Error(`${f} is configured via ${e.configuredVia} and cannot be logged out from the browser surface`);return this.activeFlow&&this.activeFlow.state.providerId===d&&["running","awaiting_browser_auth","awaiting_input"].includes(this.activeFlow.state.status)&&this.cancelActiveFlow(),b.logout(d),this.lastValidation=null,await this.refreshBridgeAuth(),await this.buildState()}async refreshBridgeAuth(){let a=this.deps.refreshBridgeAuth;if(!a){this.bridgeAuthRefresh=ax();return}let b=av(this.deps.now??(()=>new Date));this.bridgeAuthRefresh={phase:"pending",strategy:"restart",startedAt:b,completedAt:null,error:null};try{await a(),this.bridgeAuthRefresh={phase:"succeeded",strategy:"restart",startedAt:b,completedAt:av(this.deps.now??(()=>new Date)),error:null}}catch(a){this.bridgeAuthRefresh={phase:"failed",strategy:"restart",startedAt:b,completedAt:av(this.deps.now??(()=>new Date)),error:aw(a)}}}async getAuthStorage(){return this.authStorage||(this.deps.authStorage?this.authStorage=this.deps.authStorage:this.deps.createAuthStorage?this.authStorage=await this.deps.createAuthStorage(this.deps.authPath??j.sI):this.authStorage=new ao(this.deps.authPath??j.sI)),this.authStorage}buildOptionalSectionState(a){let b=this.deps.env??process.env;return ar.map(c=>{let d=c.providers.filter(c=>{let d=!!c.envVar&&"string"==typeof b[c.envVar]&&b[c.envVar].trim().length>0,e=ay(a,c.id);return d||e}).map(a=>a.label);return{id:c.id,label:c.label,blocking:!1,skippable:!0,configured:d.length>0,configuredItems:d}})}buildProviderState(a,b){let c=new Map(a.getOAuthProviders().map(a=>[a.id,a])),d=this.deps.isExternalCliProvider??at;return aq.map(e=>{var f;let g=c.get(e.id),h=(f=e.id,d(f)?"external_cli":ay(a,f)?"auth_file":b(f)?"environment":null);return{id:e.id,label:g?.name??e.label,required:!0,recommended:!!e.recommended,configured:null!==h,configuredVia:h,supports:{apiKey:e.supportsApiKey,oauth:e.supportsOAuth,oauthAvailable:!!e.supportsOAuth&&!!g,usesCallbackServer:!!g?.usesCallbackServer,externalCli:!!e.supportsExternalCli}}})}async buildState(){var a,b;let d=await this.getAuthStorage(),e=this.deps.getEnvApiKey??i;d.reload();let f=this.buildProviderState(d,e),g=f.find(a=>a.configured)??null,h=this.buildOptionalSectionState(d),j=(a=!!g,b=this.bridgeAuthRefresh,a?"pending"===b.phase?"bridge_refresh_pending":"failed"===b.phase?"bridge_refresh_failed":null:"required_setup"),k=null;try{let{readOnboardingRecord:a,isOnboardingComplete:b}=await c.e(1926).then(c.bind(c,1926)),d=a();k={completedAt:b()?d.completedAt:null,completedSteps:d.completedSteps,skippedSteps:d.skippedSteps,lastResumePoint:d.lastResumePoint,flowVersion:d.flowVersion}}catch{k=null}return{status:j?"blocked":"ready",locked:null!==j,lockReason:j,required:{blocking:!0,skippable:!1,satisfied:!!g,satisfiedBy:g?{providerId:g.id,source:g.configuredVia??"runtime"}:null,providers:f},optional:{blocking:!1,skippable:!0,sections:h},lastValidation:this.lastValidation?{...this.lastValidation}:null,activeFlow:this.activeFlow?structuredClone(this.activeFlow.state):null,bridgeAuthRefresh:{...this.bridgeAuthRefresh},completionRecord:k}}cancelActiveFlow(){this.activeFlow&&(this.activeFlow.abortController.abort(),this.activeFlow.awaitingInput&&(this.activeFlow.awaitingInput(""),this.activeFlow.awaitingInput=null),this.activeFlow.state.status="cancelled",this.activeFlow.state.prompt=null,this.activeFlow.state.error=null,this.activeFlow.state.updatedAt=av(this.deps.now??(()=>new Date)))}async runOAuthFlow(a,b,c){try{await c.login(b.id,{onAuth:b=>{a.state.auth=b,a.state.status="awaiting_browser_auth",a.state.updatedAt=av(this.deps.now??(()=>new Date))},onPrompt:async b=>await this.waitForFlowInput(a,"text",b),onProgress:b=>{a.state.progress=[...a.state.progress,aw(b)].slice(-20),"awaiting_input"!==a.state.status&&(a.state.status="running"),a.state.updatedAt=av(this.deps.now??(()=>new Date))},onManualCodeInput:async()=>await this.waitForFlowInput(a,"manual_code",{message:"Paste the redirect URL from your browser:",placeholder:"http://localhost:..."}),signal:a.abortController.signal}),a.state.status="succeeded",a.state.prompt=null,a.state.error=null,a.state.updatedAt=av(this.deps.now??(()=>new Date)),this.lastValidation={status:"succeeded",providerId:b.id,method:"oauth",checkedAt:a.state.updatedAt,message:`${b.id} sign-in complete`,persisted:!0},await this.refreshBridgeAuth()}catch(d){let c=a.abortController.signal.aborted;a.state.status=c?"cancelled":"failed",a.state.prompt=null,a.state.error=c?null:aw(d),a.state.updatedAt=av(this.deps.now??(()=>new Date)),c||(this.lastValidation={status:"failed",providerId:b.id,method:"oauth",checkedAt:a.state.updatedAt,message:a.state.error||`${b.id} sign-in failed`,persisted:!1})}}async waitForFlowInput(a,b,c){return a.state.status="awaiting_input",a.state.prompt={kind:b,message:c.message,placeholder:c.placeholder,allowEmpty:c.allowEmpty},a.state.updatedAt=av(this.deps.now??(()=>new Date)),await new Promise(b=>{a.awaitingInput=b})}}function aG(){return au||(au=new aF({env:process.env,authPath:j.sI,fetch,now:()=>new Date,createFlowId:()=>(0,d.randomUUID)(),validateApiKey:function(a){if("1"===a.GSD_WEB_TEST_FAKE_API_KEY_VALIDATION)return async(a,b)=>{let c=aq.find(b=>b.id===a)?.label??a,d=b.trim().toLowerCase();return!d||d.includes("invalid")||d.includes("reject")||d.includes("fail")?{ok:!1,message:`${c} rejected the supplied key`}:{ok:!0,message:`${c} credentials validated`}}}(process.env),isExternalCliProvider:function(a){if("1"===a.GSD_WEB_TEST_DISABLE_EXTERNAL_CLI)return()=>!1}(process.env),refreshBridgeAuth:ap??void 0,...{}})),au}async function aH(){return await aG().getState()}function aI(a){ap=a,au=null}},4431:(a,b,c)=>{"use strict";c.d(b,{KW:()=>h,hg:()=>f,vB:()=>i});var d=c(3024),e=c(6760);function f(a){return g(a)&&function(){let[a,b]=process.versions.node.split(".").map(Number);return a>22||22===a&&b>=7}()?"--experimental-transform-types":"--experimental-strip-types"}function g(a){return a.replace(/\\/g,"/").includes("/node_modules/")}function h(a,b,c=d.existsSync){if(g(a)){let d=b.replace(/\.ts$/,".js"),f=(0,e.join)(a,"dist",d);if(c(f))return{modulePath:f,useCompiledJs:!0}}return{modulePath:(0,e.join)(a,"src",b),useCompiledJs:!1}}function i(a,b,c){return b.useCompiledJs?["--input-type=module"]:["--import",c,f(a),"--input-type=module"]}},6460:(a,b,c)=>{"use strict";c.d(b,{AL:()=>i,PO:()=>d,_B:()=>j,on:()=>k,ql:()=>h});let d="current_project",e=["threaded","recent","relevance"],f=["all","named"],g=["rename"];function h(a){return e.includes(a??"")}function i(a){return f.includes(a??"")}function j(a){return g.includes(a??"")}function k(a){return{query:a?.query?.trim()??"",sortMode:a?.sortMode??"threaded",nameFilter:a?.nameFilter??"all"}}},6487:()=>{},7712:(a,b,c)=>{"use strict";let d;c.d(b,{xD:()=>aa,Fs:()=>_,tL:()=>Z,yd:()=>$,tS:()=>W,pA:()=>v,tl:()=>P,Os:()=>X,jL:()=>R,eG:()=>L,O5:()=>Q,sM:()=>ac});var e=c(1421),f=c(3024),g=c(6193),h=c(6760),i=c(3136),j=c(4431),k=c(6460),l=c(7849),m=c(3576);let n="GSD_AUTO_DASHBOARD_MODULE";function o(){return{active:!1,paused:!1,stepMode:!1,startTime:0,elapsed:0,currentUnit:null,completedUnits:[],basePath:"",totalCost:0,totalTokens:0,rtkSavings:null,rtkEnabled:!1}}async function p(a,b={}){let c=b.env??process.env;if("1"===c.GSD_WEB_TEST_USE_FALLBACK_AUTO_DASHBOARD)return o();let d=b.existsSync??f.existsSync,g=(0,h.join)(a,"src","resources","extensions","gsd","tests","resolve-ts.mjs"),k=c.GSD_WEB_TEST_AUTO_DASHBOARD_MODULE,l=k?{modulePath:k,useCompiledJs:!1}:(0,j.KW)(a,"resources/extensions/gsd/auto.ts",d),m=l.modulePath;if(!l.useCompiledJs&&(!d(g)||!d(m)))throw Error(`authoritative auto dashboard provider not found; checked=${g},${m}`);if(l.useCompiledJs&&!d(m))throw Error(`authoritative auto dashboard provider not found; checked=${m}`);let q=`const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.${n}).href); const result = await mod.getAutoDashboardData(); process.stdout.write(JSON.stringify(result));`,r=(0,j.vB)(a,l,(0,i.pathToFileURL)(g).href);return await new Promise((g,i)=>{(0,e.execFile)(b.execPath??process.execPath,[...r,"--eval",q],{cwd:a,env:{...c,[n]:m},maxBuffer:1048576,windowsHide:!0},(a,b,e)=>{if(a)return void i(Error(`authoritative auto dashboard subprocess failed: ${e||a.message}`));try{let a=JSON.parse(b),e=c.GSD_WEB_PROJECT_CWD||"",i=e?function(a,b,c){if(a.active||a.paused)return a;let d=(0,h.join)(b,".gsd","runtime","paused-session.json");if(c(d))try{return JSON.parse((0,f.readFileSync)(d,"utf-8")),{...a,paused:!0}}catch{}let e=(0,h.join)(b,".gsd","auto.lock");if(c(e))try{let b=JSON.parse((0,f.readFileSync)(e,"utf-8"));if("number"==typeof b.pid&&function(a){try{return process.kill(a,0),!0}catch{return!1}}(b.pid))return{...a,active:!0}}catch{}return a}(a,e,d):a;g(i)}catch(a){i(Error(`authoritative auto dashboard subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}var q=c(2813);let r=new Set(["get_state","get_available_models","get_session_stats","get_messages","get_last_assistant_text","get_fork_messages","get_commands"]);function s(a){return a.toLowerCase().replace(/\s+/g," ").trim()}function t(a){return!!a.name?.trim()}function u(a,b){let c=`${a.id} ${a.name??""} ${a.allMessagesText} ${a.cwd}`;if("regex"===b.mode){if(!b.regex)return{matches:!1,score:0};let a=c.search(b.regex);return a<0?{matches:!1,score:0}:{matches:!0,score:.1*a}}if(0===b.tokens.length)return{matches:!0,score:0};let d=0,e=null;for(let a of b.tokens){if("phrase"===a.kind){null===e&&(e=s(c));let b=s(a.value);if(!b)continue;let f=e.indexOf(b);if(f<0)return{matches:!1,score:0};d+=.1*f;continue}let b=function(a,b){let c=a.toLowerCase(),d=b.toLowerCase(),e=a=>{if(0===a.length)return{matches:!0,score:0};if(a.length>d.length)return{matches:!1,score:0};let b=0,c=0,e=-1,f=0;for(let g=0;g<d.length&&b<a.length;g++){if(d[g]!==a[b])continue;let h=0===g||/[\s\-_./:]/.test(d[g-1]);e===g-1?c-=5*++f:(f=0,e>=0&&(c+=(g-e-1)*2)),h&&(c-=10),c+=.1*g,e=g,b++}return b<a.length?{matches:!1,score:0}:{matches:!0,score:c}},f=e(c);if(f.matches)return f;let g=c.match(/^(?<letters>[a-z]+)(?<digits>[0-9]+)$/),h=c.match(/^(?<digits>[0-9]+)(?<letters>[a-z]+)$/),i=g?`${g.groups?.digits??""}${g.groups?.letters??""}`:h?`${h.groups?.letters??""}${h.groups?.digits??""}`:"";if(!i)return f;let j=e(i);return j.matches?{matches:!0,score:j.score+5}:f}(a.value,c);if(!b.matches)return{matches:!1,score:0};d+=b.score}return{matches:!0,score:d}}function v(a){let b,c=F().existsSync??f.existsSync,d=c((0,h.join)(a,".gsd")),e=c((0,h.join)(a,".planning")),g=c((0,h.join)(a,".git")),i=c((0,h.join)(a,"package.json")),j=c((0,h.join)(a,"Cargo.toml")),k=c((0,h.join)(a,"go.mod")),l=c((0,h.join)(a,"pyproject.toml")),m=function(a,b){let c=b??F().existsSync??f.existsSync;if(c((0,h.join)(a,"pnpm-workspace.yaml"))||c((0,h.join)(a,"lerna.json"))||c((0,h.join)(a,"rush.json"))||c((0,h.join)(a,"nx.json"))||c((0,h.join)(a,"turbo.json")))return!0;let d=(0,h.join)(a,"package.json");if(c(d))try{let a=(0,f.readFileSync)(d,"utf-8"),b=JSON.parse(a);if(null!=b.workspaces)return!0}catch{}return!1}(a,c),n=0;try{n=(0,f.readdirSync)(a).filter(a=>!a.startsWith(".")).length}catch{}let o={hasGsdFolder:d,hasPlanningFolder:e,hasGitRepo:g,hasPackageJson:i,hasCargo:j,hasGoMod:k,hasPyproject:l,isMonorepo:m,fileCount:n};if(d){let c=(0,h.join)(a,".gsd","milestones"),d=!1;try{d=(0,f.readdirSync)(c,{withFileTypes:!0}).some(a=>a.isDirectory())}catch{}b=d?"active-gsd":"empty-gsd"}else b=e?"v1-legacy":i||j||k||l||n>2||g&&n>0?"brownfield":"blank";return{kind:b,signals:o}}let w={spawn:(a,b,c)=>(0,e.spawn)(a,b,c),existsSync:f.existsSync,execPath:process.execPath,env:process.env,indexWorkspace:a=>K(a),getAutoDashboardData:async()=>{let a=F(),b=a.env??process.env,c=L(b);return await p(c.packageRoot,{execPath:a.execPath??process.execPath,env:b,existsSync:a.existsSync??f.existsSync})},listSessions:async a=>J(a)},x=new Map,y=new Map;async function z(a){let b=F(),c=(0,h.join)(a.packageRoot,"packages","pi-coding-agent","dist","core","session-manager.js");if(!(b.existsSync??f.existsSync)(c))throw Error(`session manager module not found; checked=${c}`);return await new Promise((d,f)=>{(0,e.execFile)(b.execPath??process.execPath,["--input-type=module","--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_SESSION_MANAGER_MODULE).href); const sessions = await mod.SessionManager.list(process.env.GSD_SESSION_BROWSER_CWD, process.env.GSD_SESSION_BROWSER_DIR); process.stdout.write(JSON.stringify(sessions.map((session) => ({ ...session, created: session.created.toISOString(), modified: session.modified.toISOString() }))));'],{cwd:a.packageRoot,env:{...b.env??process.env,GSD_SESSION_MANAGER_MODULE:c,GSD_SESSION_BROWSER_CWD:a.projectCwd,GSD_SESSION_BROWSER_DIR:a.projectSessionsDir},maxBuffer:1048576,windowsHide:!0},(a,b,c)=>{if(a)return void f(Error(`session list subprocess failed: ${c||a.message}`));try{let a=JSON.parse(b);d(a.map(a=>({...a,created:new Date(a.created),modified:new Date(a.modified)})))}catch(a){f(Error(`session list subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}async function A(a,b,c){let d=F(),g=(0,h.join)(a.packageRoot,"packages","pi-coding-agent","dist","core","session-manager.js");if(!(d.existsSync??f.existsSync)(g))throw Error(`session manager module not found; checked=${g}`);await new Promise((f,h)=>{(0,e.execFile)(d.execPath??process.execPath,["--input-type=module","--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_SESSION_MANAGER_MODULE).href); const manager = mod.SessionManager.open(process.env.GSD_TARGET_SESSION_PATH, process.env.GSD_SESSION_BROWSER_DIR); manager.appendSessionInfo(process.env.GSD_TARGET_SESSION_NAME);'],{cwd:a.packageRoot,env:{...d.env??process.env,GSD_SESSION_MANAGER_MODULE:g,GSD_SESSION_BROWSER_DIR:a.projectSessionsDir,GSD_TARGET_SESSION_PATH:b,GSD_TARGET_SESSION_NAME:c},maxBuffer:1048576,windowsHide:!0},(a,b,c)=>{a?h(Error(`session rename subprocess failed: ${c||a.message}`)):f()})})}function B(){return new Date().toISOString()}function C(a){return`${JSON.stringify(a)}
|
|
12
12
|
`}function D(a){return a.replace(/sk-[A-Za-z0-9_-]{6,}/g,"[redacted]").replace(/xox[baprs]-[A-Za-z0-9-]+/g,"[redacted]").replace(/Bearer\s+[^\s]+/gi,"Bearer [redacted]").replace(/([A-Z0-9_]*(?:API[_-]?KEY|TOKEN|SECRET)["'=:\s]+)([^\s,;"']+)/gi,"$1[redacted]")}function E(a){return D(a instanceof Error?a.message:String(a)).replace(/\s+/g," ").trim()}function F(){return{...w}}function G(a){return structuredClone(a)}async function H(a,b){let c=y.get(a),d=Date.now();if(c?.value&&c.expiresAt>d)return G(c.value);if(c?.promise)return G(await c.promise);let e=b().then(b=>(y.set(a,{value:G(b),expiresAt:Date.now()+3e4,promise:null}),b)).catch(b=>{throw y.delete(a),b});return y.set(a,{value:c?.value??null,expiresAt:0,promise:e}),G(await e)}async function I(a,b){let c=F(),d=c.existsSync??f.existsSync,g=(0,h.join)(b,"src","resources","extensions","gsd","tests","resolve-ts.mjs"),k=(0,j.KW)(b,"resources/extensions/gsd/workspace-index.ts",d),l=k.modulePath;if(!k.useCompiledJs&&(!d(g)||!d(l)))throw Error(`workspace index loader not found; checked=${g},${l}`);if(k.useCompiledJs&&!d(l))throw Error(`workspace index module not found; checked=${l}`);let m=(0,j.vB)(b,k,(0,i.pathToFileURL)(g).href);return await new Promise((d,f)=>{(0,e.execFile)(c.execPath??process.execPath,[...m,"--eval",'const { pathToFileURL } = await import("node:url"); const mod = await import(pathToFileURL(process.env.GSD_WORKSPACE_MODULE).href); const result = await mod.indexWorkspace(process.env.GSD_WORKSPACE_BASE); process.stdout.write(JSON.stringify(result));'],{cwd:b,env:{...c.env??process.env,GSD_WORKSPACE_MODULE:l,GSD_WORKSPACE_BASE:a},maxBuffer:1048576,windowsHide:!0},(a,b,c)=>{if(a)return void f(Error(`workspace index subprocess failed: ${c||a.message}`));try{d(JSON.parse(b))}catch(a){f(Error(`workspace index subprocess returned invalid JSON: ${a instanceof Error?a.message:String(a)}`))}})})}function J(a){if(!(0,f.existsSync)(a))return[];let b=(0,f.readdirSync)(a).filter(a=>a.endsWith(".jsonl")).map(b=>(function(a){try{let b,c=(0,f.readFileSync)(a,"utf-8").split("\n").map(a=>a.trim()).filter(Boolean),d="",e="",g=(0,f.statSync)(a).birthtime,h=0;for(let a of c){let c=JSON.parse(a);"session"===c.type?(d="string"==typeof c.id?c.id:d,e="string"==typeof c.cwd?c.cwd:e,"string"==typeof c.timestamp&&(g=new Date(c.timestamp))):"session_info"===c.type&&"string"==typeof c.name?b=c.name:"message"===c.type&&(h+=1)}if(!d)return null;return{path:a,id:d,cwd:e,name:b,created:g,modified:(0,f.statSync)(a).mtime,messageCount:h}}catch{return null}})((0,h.join)(a,b))).filter(a=>null!==a);return b.sort((a,b)=>b.modified.getTime()-a.modified.getTime()),b}async function K(a){let b=L().packageRoot;return await I(a,b)}function L(a=F().env??process.env,b){let c=b||a.GSD_WEB_PROJECT_CWD||process.cwd(),e=a.GSD_WEB_PROJECT_SESSIONS_DIR||function(a,b=l.vo){let c=`--${a.replace(/^[/\\]/,"").replace(/[/\\:]/g,"-")}--`;return(0,h.join)(b,c)}(c);return{projectCwd:c,projectSessionsDir:e,packageRoot:a.GSD_WEB_PACKAGE_ROOT||(void 0!==d?d:d=function(a,b=2){try{let c=(0,h.dirname)((0,i.fileURLToPath)(a)),d=Array.from({length:b},()=>"..");return(0,h.resolve)(c,...d)}catch{return null}}("file:///__w/gsd-2/gsd-2/src/web/bridge-service.ts")??process.cwd())}}function M(a){return"extension_ui_response"===a.type}function N(a){return a.success?a:{...a,error:D(a.error)}}class O{constructor(a,b){this.subscribers=new Set,this.terminalSubscribers=new Set,this.pendingRequests=new Map,this.process=null,this.detachStdoutReader=null,this.startPromise=null,this.refreshPromise=null,this.authRefreshPromise=null,this.requestCounter=0,this.stderrBuffer="",this.config=a,this.deps=b,this.snapshot={phase:"idle",projectCwd:a.projectCwd,projectSessionsDir:a.projectSessionsDir,packageRoot:a.packageRoot,startedAt:null,updatedAt:B(),connectionCount:0,lastCommandType:null,activeSessionId:null,activeSessionFile:null,sessionState:null,lastError:null}}getSnapshot(){return structuredClone(this.snapshot)}publishLiveStateInvalidation(a){var b,c;let d=(c=a,{type:"live_state_invalidation",at:B(),reason:c.reason,source:c.source,domains:[...new Set(c.domains)],workspaceIndexCacheInvalidated:!!c.workspaceIndexCacheInvalidated});return d.workspaceIndexCacheInvalidated&&((b=this.config.projectCwd)?y.delete(b):y.clear()),this.emit(d),d}async ensureStarted(){if(!this.process||"ready"!==this.snapshot.phase){if(this.startPromise)return await this.startPromise;this.startPromise=this.startInternal();try{await this.startPromise}finally{this.startPromise=null}}}async sendInput(a){if(await this.ensureStarted(),!this.process?.stdin)throw Error(this.snapshot.lastError?.message||"RPC bridge is not connected");if(M(a))return this.process.stdin.write(C(a)),null;let b=N(await this.requestResponse(a));if(this.snapshot.lastCommandType=a.type,this.snapshot.updatedAt=B(),!b.success)return this.recordError(b.error,this.snapshot.phase,{commandType:a.type}),this.broadcastStatus(),b;if("get_state"===a.type&&b.success&&"get_state"===b.command)return this.applySessionState(b.data),this.broadcastStatus(),b;let c=function(a,b){if(!b.success)return null;switch(a.type){case"new_session":return"new_session"===b.command&&!1===b.data.cancelled?{reason:"new_session",source:"rpc_command",domains:["resumable_sessions","recovery"]}:null;case"switch_session":return"switch_session"===b.command&&!1===b.data.cancelled?{reason:"switch_session",source:"rpc_command",domains:["resumable_sessions","recovery"]}:null;case"fork":return"fork"===b.command&&!1===b.data.cancelled?{reason:"fork",source:"rpc_command",domains:["resumable_sessions","recovery"]}:null;case"set_session_name":return"set_session_name"===b.command?{reason:"set_session_name",source:"rpc_command",domains:["resumable_sessions"]}:null;default:return null}}(a,b);return c&&this.publishLiveStateInvalidation(c),this.queueStateRefresh(),this.broadcastStatus(),b}async refreshAuth(){if(this.authRefreshPromise)return await this.authRefreshPromise;this.authRefreshPromise=this.refreshAuthInternal().finally(()=>{this.authRefreshPromise=null}),await this.authRefreshPromise}async refreshAuthInternal(){this.startPromise&&await this.startPromise,this.process&&"ready"===this.snapshot.phase&&this.resetProcessForAuthRefresh(),await this.ensureStarted()}resetProcessForAuthRefresh(){let a=this.process;for(let a of(this.process=null,this.detachStdoutReader?.(),this.detachStdoutReader=null,this.stderrBuffer="",this.pendingRequests.values()))clearTimeout(a.timeout),a.reject(Error("RPC bridge restarting to reload auth"));if(this.pendingRequests.clear(),a){a.removeAllListeners("exit"),a.removeAllListeners("error"),a.kill("SIGTERM");try{a?.stdin?.destroy()}catch{}try{a?.stdout?.destroy()}catch{}try{a?.stderr?.destroy()}catch{}}this.snapshot.phase="idle",this.snapshot.updatedAt=B(),this.snapshot.lastError=null,this.broadcastStatus()}subscribe(a){return this.subscribers.add(a),this.snapshot.connectionCount=this.subscribers.size,this.snapshot.updatedAt=B(),this.broadcastStatus(),()=>{this.subscribers.delete(a),this.snapshot.connectionCount=this.subscribers.size,this.snapshot.updatedAt=B(),this.subscribers.size>0&&this.broadcastStatus()}}subscribeTerminal(a){return this.terminalSubscribers.add(a),()=>{this.terminalSubscribers.delete(a)}}async sendTerminalInput(a){await this.sendTerminalCommand({type:"terminal_input",data:a})}async resizeTerminal(a,b){await this.sendTerminalCommand({type:"terminal_resize",cols:a,rows:b})}async redrawTerminal(){await this.sendTerminalCommand({type:"terminal_redraw"})}async sendTerminalCommand(a){await this.ensureStarted();let b=N(await this.requestResponse(a));if(!b.success)throw this.recordError(b.error,this.snapshot.phase,{commandType:a.type}),this.broadcastStatus(),Error(b.error)}async dispose(){for(let a of(this.detachStdoutReader?.(),this.detachStdoutReader=null,this.terminalSubscribers.clear(),this.pendingRequests.values()))clearTimeout(a.timeout),a.reject(Error("RPC bridge disposed"));this.pendingRequests.clear(),this.process&&(this.process.removeAllListeners(),this.process.kill("SIGTERM"),this.process=null),this.snapshot.phase="idle",this.snapshot.connectionCount=0,this.snapshot.updatedAt=B()}async startInternal(){var a,b,c,d;let h,i,j,k,l,m,n;this.snapshot.phase="starting",this.snapshot.startedAt=B(),this.snapshot.updatedAt=this.snapshot.startedAt,this.snapshot.lastError=null,this.broadcastStatus();try{a=this.config,b=this.deps,h=(0,q.N)({packageRoot:a.packageRoot,cwd:a.projectCwd,execPath:b.execPath??process.execPath,hostKind:(b.env??process.env).GSD_WEB_HOST_KIND,mode:"rpc",sessionDir:a.projectSessionsDir,existsSync:b.existsSync??f.existsSync})}catch(a){throw this.snapshot.phase="failed",this.recordError(a,"starting"),a}let o=this.deps.spawn??((a,b,c)=>(0,e.spawn)(a,b,c)),p={...this.deps.env??process.env};delete p.GSD_CODING_AGENT_DIR,p.GSD_WEB_BRIDGE_TUI="1";let r=o(h.command,h.args,{cwd:h.cwd,env:p,stdio:["pipe","pipe","pipe"],windowsHide:!0});this.process=r,this.stderrBuffer="",r.stderr.on("data",a=>{var b,c;let d;this.stderrBuffer=(b=this.stderrBuffer,c=a.toString(),(d=`${b}${c}`).length<=8e3?d:d.slice(d.length-8e3))}),this.detachStdoutReader=(c=r.stdout,d=a=>this.handleStdoutLine(a),j=new g.StringDecoder("utf8"),k="",l=a=>{d(a.endsWith("\r")?a.slice(0,-1):a)},m=a=>{for(k+="string"==typeof a?a:j.write(a);;){let a=k.indexOf("\n");if(-1===a)return;l(k.slice(0,a)),k=k.slice(a+1)}},n=()=>{(k+=j.end()).length>0&&(l(k),k="")},c.on("data",m),c.on("end",n),()=>{c.off("data",m),c.off("end",n)}),r.once("exit",(a,b)=>this.handleProcessExit(a,b)),r.once("error",a=>this.handleProcessExit(null,null,a));let s=new Promise((a,b)=>{i=setTimeout(()=>b(Error("RPC bridge startup timed out after 150000ms")),15e4)});try{await Promise.race([this.refreshState(!0),s]),this.snapshot.phase="ready",this.snapshot.updatedAt=B(),this.snapshot.lastError=null,this.broadcastStatus()}catch(a){throw this.snapshot.phase="failed",this.recordError(a,"starting"),this.broadcastStatus(),a}finally{i&&clearTimeout(i)}}async queueStateRefresh(){if(this.refreshPromise)return await this.refreshPromise;this.refreshPromise=this.refreshState(!1).catch(a=>{this.recordError(a,this.snapshot.phase,{commandType:"get_state"})}).finally(()=>{this.refreshPromise=null}),await this.refreshPromise}async refreshState(a){let b=N(await this.requestResponse({type:"get_state"},a?15e4:void 0));if(!b.success)throw Error(b.error);"get_state"===b.command&&this.applySessionState(b.data),this.snapshot.updatedAt=B(),a||this.broadcastStatus()}applySessionState(a){this.snapshot.sessionState=a,this.snapshot.activeSessionId=a.sessionId,this.snapshot.activeSessionFile=a.sessionFile??null}requestResponse(a,b){if(!this.process?.stdin)return Promise.reject(Error("RPC bridge is not connected"));let c=a.id??`web_${++this.requestCounter}`,d={...a,id:c},e=b??3e4;return new Promise((a,b)=>{let f=setTimeout(()=>{this.pendingRequests.delete(c),b(Error(`Timed out waiting for RPC response to ${d.type}`))},e);this.pendingRequests.set(c,{resolve:b=>{clearTimeout(f),a(b)},reject:a=>{clearTimeout(f),b(a)},timeout:f}),this.process.stdin.write(C(d))})}handleStdoutLine(a){var b,c;let d;try{d=JSON.parse(a)}catch{return}if("object"==typeof(b=d)&&null!==b&&"type"in b&&"terminal_output"===b.type&&"string"==typeof b.data)return void this.emitTerminal(d.data);if("object"==typeof d&&null!==d&&"type"in d&&"response"===d.type){let a=N(d);if(a.id&&this.pendingRequests.has(a.id)){let b=this.pendingRequests.get(a.id);this.pendingRequests.delete(a.id),b.resolve(a);return}}let e="object"==typeof(c=d)&&null!==c&&"type"in c&&"extension_error"===c.type?{...c,error:D(c.error)}:c;if(this.emit(e),"object"==typeof e&&null!==e&&"type"in e&&"session_state_changed"===e.type&&"string"==typeof e.reason){let a=function(a){switch(a){case"new_session":return{reason:"new_session",source:"bridge_event",domains:["resumable_sessions","recovery"]};case"switch_session":return{reason:"switch_session",source:"bridge_event",domains:["resumable_sessions","recovery"]};case"fork":return{reason:"fork",source:"bridge_event",domains:["resumable_sessions","recovery"]};case"set_session_name":return{reason:"set_session_name",source:"bridge_event",domains:["resumable_sessions"]};default:return null}}(e.reason);a&&this.publishLiveStateInvalidation(a),this.queueStateRefresh();return}let f=function(a){if("object"!=typeof a||null===a||!("type"in a))return null;switch(a.type){case"agent_end":return{reason:"agent_end",source:"bridge_event",domains:["auto","workspace","recovery"],workspaceIndexCacheInvalidated:!0};case"turn_end":return{reason:"turn_end",source:"bridge_event",domains:["workspace"],workspaceIndexCacheInvalidated:!0};case"auto_retry_start":return{reason:"auto_retry_start",source:"bridge_event",domains:["auto","recovery"]};case"auto_retry_end":return{reason:"auto_retry_end",source:"bridge_event",domains:["auto","recovery"]};case"auto_compaction_start":return{reason:"auto_compaction_start",source:"bridge_event",domains:["auto","recovery"]};case"auto_compaction_end":return{reason:"auto_compaction_end",source:"bridge_event",domains:["auto","recovery"]};default:return null}}(e);if(f&&this.publishLiveStateInvalidation(f),"object"==typeof e&&null!==e&&"type"in e){let a=e.type;("agent_end"===a||"turn_end"===a||"auto_retry_start"===a||"auto_retry_end"===a||"auto_compaction_start"===a||"auto_compaction_end"===a)&&this.queueStateRefresh()}}handleProcessExit(a,b,c){var d;let e,f;this.detachStdoutReader?.(),this.detachStdoutReader=null,this.process=null;let g=Error((d=this.stderrBuffer,e=`RPC bridge exited${null!==a?` with code ${a}`:""}${b?` (${b})`:""}`,(f=D(d).trim())?`${e}. stderr=${f}`:e));for(let a of this.pendingRequests.values())clearTimeout(a.timeout),a.reject(g);this.pendingRequests.clear(),this.snapshot.phase="failed",this.snapshot.updatedAt=B(),this.recordError(c??g,this.snapshot.activeSessionId?"ready":"starting"),this.broadcastStatus()}recordError(a,b,c={}){this.snapshot.lastError={message:E(a),at:B(),phase:b,afterSessionAttachment:!!this.snapshot.activeSessionId,commandType:c.commandType},this.snapshot.updatedAt=this.snapshot.lastError.at}emit(a){for(let b of this.subscribers)try{b(a)}catch{}}emitTerminal(a){for(let b of this.terminalSubscribers)try{b(a)}catch{}}broadcastStatus(){0!==this.subscribers.size&&this.emit({type:"bridge_status",bridge:this.getSnapshot()})}}function P(a){let b=(0,h.resolve)(a),c=x.get(b);if(c)return c;let d=new O(L(void 0,b),F());return x.set(b,d),d}function Q(a){try{let b=new URL(a.url).searchParams.get("project");if(b)return decodeURIComponent(b)}catch{}return(F().env??process.env).GSD_WEB_PROJECT_CWD||null}function R(a){let b=Q(a);if(!b)throw new S;return b}class S extends Error{constructor(){super("No project selected"),this.name="NoProjectError"}}function T(){return P(L().projectCwd)}function U(a,b){return{id:a.id,path:a.path,cwd:a.cwd,name:a.name,createdAt:a.created.toISOString(),modifiedAt:a.modified.toISOString(),messageCount:a.messageCount,isActive:!!(b&&a.path===b)}}function V(a,b,c={}){return{success:!1,action:"rename",scope:k.PO,code:a,error:b,...c}}async function W(a={},b){let c=L(F().env??process.env,b),d=b?P(b):T();try{await d.ensureStarted()}catch{}let e=d.getSnapshot(),f=await z(c),g=(0,k.on)(a),i=("threaded"===g.sortMode&&!g.query?function(a){let b=[],c=(a,d,e,f)=>{b.push({session:a.session,depth:d,isLastInThread:f,ancestorHasNextSibling:e});for(let b=0;b<a.children.length;b++){let g=a.children[b];if(!g)continue;let h=b===a.children.length-1,i=d>0&&!f;c(g,d+1,[...e,i],h)}};for(let b=0;b<a.length;b++){let d=a[b];d&&c(d,0,[],b===a.length-1)}return b}(function(a){let b=new Map;for(let c of a)b.set(c.path,{session:c,children:[]});let c=[];for(let d of a){let a=b.get(d.path);if(!a)continue;let e=d.parentSessionPath;if(e&&b.has(e)){b.get(e).children.push(a);continue}c.push(a)}let d=a=>{for(let b of(a.sort((a,b)=>b.session.modified.getTime()-a.session.modified.getTime()),a))d(b.children)};return d(c),c}("named"===g.nameFilter?f.filter(a=>t(a)):f)):(function(a,b,c,d){let e="all"===d?a:a.filter(a=>t(a));if(!b.trim())return e;let f=function(a){let b=a.trim();if(!b)return{mode:"tokens",tokens:[],regex:null};if(b.startsWith("re:")){let a=b.slice(3).trim();if(!a)return{mode:"regex",tokens:[],regex:null,error:"Empty regex"};try{return{mode:"regex",tokens:[],regex:RegExp(a,"i")}}catch(a){return{mode:"regex",tokens:[],regex:null,error:a instanceof Error?a.message:String(a)}}}let c=[],d="",e=!1,f=!1,g=a=>{let b=d.trim();d="",b&&c.push({kind:a,value:b})};for(let a=0;a<b.length;a++){let c=b[a];if(c){if('"'===c){e?(g("phrase"),e=!1):(g("fuzzy"),e=!0);continue}if(!e&&/\s/.test(c)){g("fuzzy");continue}d+=c}}return(e&&(f=!0),f)?{mode:"tokens",tokens:b.split(/\s+/).map(a=>a.trim()).filter(a=>a.length>0).map(a=>({kind:"fuzzy",value:a})),regex:null}:(g(e?"phrase":"fuzzy"),{mode:"tokens",tokens:c,regex:null})}(b);if(f.error)return[];if("recent"===c){let a=[];for(let b of e)u(b,f).matches&&a.push(b);return a}let g=[];for(let a of e){let b=u(a,f);b.matches&&g.push({session:a,score:b.score})}return g.sort((a,b)=>a.score!==b.score?a.score-b.score:b.session.modified.getTime()-a.session.modified.getTime()),g.map(a=>a.session)})(f,g.query,g.sortMode,g.nameFilter).map(a=>({session:a,depth:0,isLastInThread:!0,ancestorHasNextSibling:[]}))).map(a=>(function(a,b){let{session:c}=a,d=!!(b&&(0,h.resolve)(c.path)===(0,h.resolve)(b));return{id:c.id,path:c.path,cwd:c.cwd,name:c.name,createdAt:c.created.toISOString(),modifiedAt:c.modified.toISOString(),messageCount:c.messageCount,parentSessionPath:c.parentSessionPath,firstMessage:c.firstMessage,isActive:d,depth:a.depth,isLastInThread:a.isLastInThread,ancestorHasNextSibling:[...a.ancestorHasNextSibling]}})(a,e.activeSessionFile));return{project:{scope:k.PO,cwd:c.projectCwd,sessionsDir:c.projectSessionsDir,activeSessionPath:e.activeSessionFile},query:g,totalSessions:f.length,returnedSessions:i.length,sessions:i}}async function X(a,b){var c,d;let e,f=L(F().env??process.env,b),g=a.name.trim();if(!g)return V("invalid_request","Session name cannot be empty",{sessionPath:a.sessionPath,name:a.name});let i=(c=await z(f),d=a.sessionPath,e=(0,h.resolve)(d),c.find(a=>(0,h.resolve)(a.path)===e));if(!i)return V("not_found","Session is not available in the current project browser",{sessionPath:a.sessionPath,name:g});let j=b?P(b):T();try{await j.ensureStarted()}catch(a){return V("rename_failed",E(a),{sessionPath:i.path,name:g})}let l=j.getSnapshot().activeSessionFile;if(l&&(0,h.resolve)(l)===(0,h.resolve)(i.path)){let a=await ac({type:"set_session_name",name:g},b);return null===a?V("rename_failed","Active session rename did not return a response",{sessionPath:i.path,name:g,isActiveSession:!0,mutation:"rpc"}):a.success?{success:!0,action:"rename",scope:k.PO,sessionPath:i.path,name:g,isActiveSession:!0,mutation:"rpc"}:V("onboarding_locked"===a.code?"onboarding_locked":"rename_failed",a.error,{sessionPath:i.path,name:g,isActiveSession:!0,mutation:"rpc"})}try{return await A(f,i.path,g),j.publishLiveStateInvalidation({reason:"set_session_name",source:"session_manage",domains:["resumable_sessions"]}),{success:!0,action:"rename",scope:k.PO,sessionPath:i.path,name:g,isActiveSession:!1,mutation:"session_file"}}catch(a){return V("rename_failed",E(a),{sessionPath:i.path,name:g,isActiveSession:!1,mutation:"session_file"})}}async function Y(a,b){if(a.getOnboardingState)return await a.getOnboardingState();if(a.getOnboardingNeeded){var c;return{status:(c=await a.getOnboardingNeeded(l.sI,b))?"blocked":"ready",locked:c,lockReason:c?"required_setup":null,required:{blocking:!0,skippable:!1,satisfied:!c,satisfiedBy:c?null:{providerId:"legacy",source:"runtime"},providers:[]},optional:{blocking:!1,skippable:!0,sections:[]},lastValidation:null,activeFlow:null,bridgeAuthRefresh:{phase:"idle",strategy:null,startedAt:null,completedAt:null,error:null}}}return await (0,m.r$)()}async function Z(a){let b=F(),c=b.env??process.env;return await Y(b,c)}async function $(a=["auto","workspace","resumable_sessions"],b){let c=F(),d=L(c.env??process.env,b),e=b?P(b):T();try{await e.ensureStarted()}catch{}let f=e.getSnapshot(),g=[...new Set(a)],h={bridge:f};if(g.includes("workspace")&&(h.workspace=await H(d.projectCwd,async()=>await (c.indexWorkspace??K)(d.projectCwd))),g.includes("auto")){let a=c.getAutoDashboardData??(()=>o());h.auto=await Promise.resolve(a())}return g.includes("resumable_sessions")&&(h.resumableSessions=(await (c.listSessions??(async a=>J(a)))(d.projectSessionsDir)).map(a=>U(a,f.activeSessionFile))),h}async function _(a){let b=F(),c=b.env??process.env,d=L(c,a),e=b.getAutoDashboardData??(()=>o()),f=b.listSessions??(async a=>J(a)),g=v(d.projectCwd),h=await Y(b,c);if(h.locked&&"packaged-standalone"===c.GSD_WEB_HOST_KIND)return{project:{cwd:d.projectCwd,sessionsDir:d.projectSessionsDir,packageRoot:d.packageRoot},workspace:{milestones:[],active:{phase:"pre-planning"},scopes:[{scope:"project",label:"project",kind:"project"}],validationIssues:[]},auto:o(),onboarding:h,onboardingNeeded:!0,resumableSessions:[],bridge:{phase:"idle",projectCwd:d.projectCwd,projectSessionsDir:d.projectSessionsDir,packageRoot:d.packageRoot,startedAt:null,updatedAt:new Date().toISOString(),connectionCount:0,lastCommandType:null,activeSessionId:null,activeSessionFile:null,sessionState:null,lastError:null},projectDetection:g};let i=a?P(a):T(),j=H(d.projectCwd,async()=>await (b.indexWorkspace??K)(d.projectCwd)),k=Promise.resolve(e()),l=f(d.projectSessionsDir);try{await i.ensureStarted()}catch{}let m=i.getSnapshot(),[n,p,q]=await Promise.all([j,k,l]);return{project:{cwd:d.projectCwd,sessionsDir:d.projectSessionsDir,packageRoot:d.packageRoot},workspace:n,auto:p,onboarding:h,onboardingNeeded:h.locked,resumableSessions:q.map(a=>U(a,m.activeSessionFile)),bridge:m,projectDetection:g}}function aa(a,b){return{type:"response",command:a,success:!1,error:E(b)}}async function ab(a){let b=a?P(a):T();await b.refreshAuth()}async function ac(a,b){if(!(!M(a)&&r.has(a.type))){let b=await (0,m.r$)();if(b.locked){let c;return c=b.lockReason??"required_setup",{type:"response",command:a.type,success:!1,error:"bridge_refresh_failed"===c?"Workspace is locked because bridge auth refresh failed after setup":"bridge_refresh_pending"===c?"Workspace is still locked while bridge auth refresh completes":"Workspace is locked until required onboarding completes",code:"onboarding_locked",details:{reason:c,onboarding:{locked:b.locked,lockReason:b.lockReason,required:b.required,lastValidation:b.lastValidation,bridgeAuthRefresh:b.bridgeAuthRefresh}}}}}let c=b?P(b):T();return await c.sendInput(a)}(0,m.Eu)(async()=>{await ab()})},7849:(a,b,c)=>{"use strict";c.d(b,{Ic:()=>j,_y:()=>f,sI:()=>i,vo:()=>h});var d=c(1820),e=c(3873);let f=process.env.GSD_HOME||(0,e.join)((0,d.homedir)(),".gsd"),g=(0,e.join)(f,"agent"),h=(0,e.join)(f,"sessions"),i=(0,e.join)(g,"auth.json");(0,e.join)(f,"web-server.pid");let j=(0,e.join)(f,"web-preferences.json")},8335:()=>{},9225:(a,b,c)=>{"use strict";a.exports=c(4870)}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/5wbu35_C2_MQ3Jj1lEVDx/_buildManifest.js","static/5wbu35_C2_MQ3Jj1lEVDx/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-2e68521d7c82f7c2.js","static/chunks/4bd1b696-e356ca5ba0218e27.js","static/chunks/3794-42fdce068d44fa4f.js","static/chunks/main-app-fdab67f7802d7832.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
"wasm": [],
|
|
19
19
|
"assets": [],
|
|
20
20
|
"env": {
|
|
21
|
-
"__NEXT_BUILD_ID": "
|
|
22
|
-
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "
|
|
23
|
-
"__NEXT_PREVIEW_MODE_ID": "
|
|
24
|
-
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "
|
|
25
|
-
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "
|
|
21
|
+
"__NEXT_BUILD_ID": "5wbu35_C2_MQ3Jj1lEVDx",
|
|
22
|
+
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "ZgetqV84X9VW5zKFSRZcIu10BFx6CcDkn1ObiFlmBJE=",
|
|
23
|
+
"__NEXT_PREVIEW_MODE_ID": "9fec053cf99e9d7f6237ef2ce5cd8af2",
|
|
24
|
+
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "fc27c177eb6a54c323965b393b8c9b94cdd86e6c2c385d5c660f876469f384a0",
|
|
25
|
+
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "b2875a67570c43cfa3cd103c1fac67f3f76ee3b8468de0c9da918663be480dcf"
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
},
|