gsd-pi 2.75.0-next.9c0ec0ba1 → 2.76.0
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/README.md +100 -100
- package/dist/claude-cli-check.d.ts +10 -0
- package/dist/claude-cli-check.js +13 -3
- package/dist/loader.js +0 -0
- package/dist/onboarding.d.ts +20 -1
- package/dist/onboarding.js +60 -25
- package/dist/resources/extensions/ask-user-questions.js +6 -3
- package/dist/resources/extensions/claude-code-cli/readiness.js +12 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +44 -2
- package/dist/resources/extensions/gsd/auto/phases.js +2 -0
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +37 -8
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +8 -2
- package/dist/resources/extensions/gsd/auto-dispatch.js +87 -9
- package/dist/resources/extensions/gsd/auto-model-selection.js +14 -4
- package/dist/resources/extensions/gsd/auto-post-unit.js +7 -5
- package/dist/resources/extensions/gsd/auto-prompts.js +188 -44
- package/dist/resources/extensions/gsd/auto-recovery.js +48 -0
- package/dist/resources/extensions/gsd/auto-start.js +5 -3
- package/dist/resources/extensions/gsd/auto-worktree.js +71 -2
- package/dist/resources/extensions/gsd/auto.js +25 -3
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +8 -21
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +45 -23
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +128 -0
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +17 -4
- package/dist/resources/extensions/gsd/commands/catalog.js +15 -7
- package/dist/resources/extensions/gsd/commands/handlers/core.js +58 -24
- package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
- package/dist/resources/extensions/gsd/commands/handlers/onboarding.js +159 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +10 -0
- package/dist/resources/extensions/gsd/commands-config.js +5 -0
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +233 -75
- package/dist/resources/extensions/gsd/commands-memory.js +462 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +39 -11
- package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
- package/dist/resources/extensions/gsd/db-writer.js +1 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +2 -2
- package/dist/resources/extensions/gsd/doctor-environment.js +2 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +27 -3
- package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -1
- package/dist/resources/extensions/gsd/doctor.js +7 -1
- package/dist/resources/extensions/gsd/error-classifier.js +5 -2
- package/dist/resources/extensions/gsd/escalation.js +321 -0
- package/dist/resources/extensions/gsd/graph.js +26 -0
- package/dist/resources/extensions/gsd/gsd-db.js +490 -32
- package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
- package/dist/resources/extensions/gsd/health-widget.js +7 -4
- package/dist/resources/extensions/gsd/init-wizard.js +86 -45
- package/dist/resources/extensions/gsd/markdown-renderer.js +5 -5
- package/dist/resources/extensions/gsd/memory-embeddings.js +219 -0
- package/dist/resources/extensions/gsd/memory-extractor.js +78 -27
- package/dist/resources/extensions/gsd/memory-ingest.js +218 -0
- package/dist/resources/extensions/gsd/memory-relations.js +189 -0
- package/dist/resources/extensions/gsd/memory-source-store.js +113 -0
- package/dist/resources/extensions/gsd/memory-store.js +299 -6
- package/dist/resources/extensions/gsd/metrics.js +1 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
- package/dist/resources/extensions/gsd/model-router.js +12 -5
- package/dist/resources/extensions/gsd/native-git-bridge.js +121 -5
- package/dist/resources/extensions/gsd/notification-overlay.js +7 -22
- package/dist/resources/extensions/gsd/notification-widget.js +24 -39
- package/dist/resources/extensions/gsd/onboarding-state.js +133 -0
- package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
- package/dist/resources/extensions/gsd/pre-execution-checks.js +98 -8
- package/dist/resources/extensions/gsd/preferences-models.js +1 -0
- package/dist/resources/extensions/gsd/preferences-types.js +2 -1
- package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
- package/dist/resources/extensions/gsd/prompts/add-tests.md +1 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
- package/dist/resources/extensions/gsd/prompts/execute-task.md +13 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -0
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/dist/resources/extensions/gsd/python-resolver.js +70 -0
- package/dist/resources/extensions/gsd/setup-catalog.js +75 -0
- package/dist/resources/extensions/gsd/state.js +47 -3
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +1 -1
- package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
- package/dist/resources/extensions/gsd/tools/memory-tools.js +306 -0
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
- package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
- package/dist/resources/extensions/gsd/tools/skip-slice.js +78 -0
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +14 -0
- package/dist/resources/extensions/gsd/uok/flags.js +1 -1
- package/dist/resources/extensions/gsd/verification-gate.js +2 -1
- package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +1 -0
- package/dist/resources/extensions/gsd/workflow-projections.js +17 -15
- package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
- package/dist/resources/extensions/remote-questions/manager.js +11 -1
- package/dist/resources/extensions/search-the-web/command-search-provider.js +4 -1
- package/dist/resources/extensions/search-the-web/native-search.js +13 -2
- 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 +10 -10
- package/dist/web/standalone/.next/build-manifest.json +4 -4
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
- package/dist/web/standalone/.next/required-server-files.json +4 -4
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +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/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -4
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- 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 +4 -4
- 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 +2 -2
- 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/boot/route_client-reference-manifest.js +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/input/route_client-reference-manifest.js +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/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- 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/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +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/captures/route_client-reference-manifest.js +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/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +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/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +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/export-data/route_client-reference-manifest.js +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/files/route_client-reference-manifest.js +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/forensics/route_client-reference-manifest.js +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/git/route_client-reference-manifest.js +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/history/route_client-reference-manifest.js +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/hooks/route_client-reference-manifest.js +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/inspect/route_client-reference-manifest.js +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/knowledge/route_client-reference-manifest.js +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/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +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/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +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/projects/route_client-reference-manifest.js +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/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +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/browser/route_client-reference-manifest.js +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/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- 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/events/route_client-reference-manifest.js +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/session/manage/route_client-reference-manifest.js +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/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +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/skill-health/route_client-reference-manifest.js +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/steer/route_client-reference-manifest.js +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/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- 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/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +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/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +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/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +5 -5
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
- 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 +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
- package/dist/web/standalone/.next/server/chunks/63.js +3 -3
- package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
- package/dist/web/standalone/.next/server/chunks/7461.js +1 -0
- 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/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +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.02df9631042cc18e.js → 2826.e59e8578e2e28639.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/{2008.71ee9230ad78df21.js → 3621.fc7480022c972438.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-6c7cda3e318eedb6.js → webpack-5fc74f13a25fa1bb.js} +1 -1
- package/dist/web/standalone/.next/static/css/632cd626b1731d88.css +1 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.js +48 -24
- package/package.json +1 -1
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +12 -10
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +8 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +207 -71
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/mcp-server.test.ts +40 -4
- package/packages/mcp-server/src/server.ts +12 -10
- package/packages/mcp-server/src/session-manager.ts +10 -3
- package/packages/mcp-server/src/workflow-tools.test.ts +346 -1
- package/packages/mcp-server/src/workflow-tools.ts +228 -75
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/index.d.ts +1 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/index.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.test.js +1 -0
- package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -7
- package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +19 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +25 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +18 -1
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/api-family.d.ts +27 -0
- package/packages/pi-ai/dist/providers/api-family.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/api-family.js +47 -0
- package/packages/pi-ai/dist/providers/api-family.js.map +1 -0
- package/packages/pi-ai/dist/providers/api-family.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/api-family.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/api-family.test.js +101 -0
- package/packages/pi-ai/dist/providers/api-family.test.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/scripts/generate-models.ts +12 -0
- package/packages/pi-ai/src/index.ts +1 -0
- package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
- package/packages/pi-ai/src/models.generated.test.ts +1 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -8
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +30 -1
- package/packages/pi-ai/src/providers/anthropic.ts +19 -1
- package/packages/pi-ai/src/providers/api-family.test.ts +129 -0
- package/packages/pi-ai/src/providers/api-family.ts +57 -0
- package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/cli/args.d.ts +6 -0
- package/packages/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/cli/args.js +14 -4
- package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/packages/pi-coding-agent/dist/cli/args.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/cli/args.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/cli/args.test.js +38 -0
- package/packages/pi-coding-agent/dist/cli/args.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +7 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +25 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +38 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +2 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +4 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +33 -5
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/main.js +3 -0
- package/packages/pi-coding-agent/dist/main.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +17 -7
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.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 +48 -34
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +13 -9
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/cli/args.test.ts +44 -0
- package/packages/pi-coding-agent/src/cli/args.ts +21 -6
- package/packages/pi-coding-agent/src/core/auth-storage.test.ts +42 -0
- package/packages/pi-coding-agent/src/core/auth-storage.ts +25 -0
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +4 -1
- package/packages/pi-coding-agent/src/core/extensions/types.ts +2 -2
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
- package/packages/pi-coding-agent/src/core/retry-handler.ts +4 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +48 -5
- package/packages/pi-coding-agent/src/main.ts +4 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +13 -9
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +1 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.js +1 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +13 -9
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/ask-user-questions.ts +7 -4
- package/src/resources/extensions/claude-code-cli/readiness.ts +13 -2
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +59 -1
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +66 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -10
- package/src/resources/extensions/gsd/auto/phases.ts +3 -0
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +46 -5
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +96 -4
- package/src/resources/extensions/gsd/auto-model-selection.ts +17 -4
- package/src/resources/extensions/gsd/auto-post-unit.ts +7 -5
- package/src/resources/extensions/gsd/auto-prompts.ts +225 -45
- package/src/resources/extensions/gsd/auto-recovery.ts +47 -0
- package/src/resources/extensions/gsd/auto-start.ts +8 -6
- package/src/resources/extensions/gsd/auto-worktree.ts +81 -1
- package/src/resources/extensions/gsd/auto.ts +27 -2
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +46 -24
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +158 -0
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +20 -4
- package/src/resources/extensions/gsd/commands/catalog.ts +15 -7
- package/src/resources/extensions/gsd/commands/handlers/core.ts +63 -27
- package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
- package/src/resources/extensions/gsd/commands/handlers/onboarding.ts +196 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +10 -0
- package/src/resources/extensions/gsd/commands-config.ts +10 -0
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +295 -76
- package/src/resources/extensions/gsd/commands-memory.ts +551 -0
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +48 -11
- package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
- package/src/resources/extensions/gsd/db-writer.ts +3 -0
- package/src/resources/extensions/gsd/docs/preferences-reference.md +2 -2
- package/src/resources/extensions/gsd/doctor-environment.ts +2 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +28 -3
- package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -1
- package/src/resources/extensions/gsd/doctor-types.ts +1 -0
- package/src/resources/extensions/gsd/doctor.ts +7 -1
- package/src/resources/extensions/gsd/error-classifier.ts +5 -2
- package/src/resources/extensions/gsd/escalation.ts +367 -0
- package/src/resources/extensions/gsd/graph.ts +33 -0
- package/src/resources/extensions/gsd/gsd-db.ts +578 -32
- package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
- package/src/resources/extensions/gsd/health-widget.ts +7 -3
- package/src/resources/extensions/gsd/init-wizard.ts +87 -54
- package/src/resources/extensions/gsd/markdown-renderer.ts +5 -5
- package/src/resources/extensions/gsd/memory-embeddings.ts +235 -0
- package/src/resources/extensions/gsd/memory-extractor.ts +100 -34
- package/src/resources/extensions/gsd/memory-ingest.ts +286 -0
- package/src/resources/extensions/gsd/memory-relations.ts +240 -0
- package/src/resources/extensions/gsd/memory-source-store.ts +138 -0
- package/src/resources/extensions/gsd/memory-store.ts +351 -7
- package/src/resources/extensions/gsd/metrics.ts +1 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
- package/src/resources/extensions/gsd/model-router.ts +21 -5
- package/src/resources/extensions/gsd/native-git-bridge.ts +118 -6
- package/src/resources/extensions/gsd/notification-overlay.ts +9 -19
- package/src/resources/extensions/gsd/notification-widget.ts +25 -43
- package/src/resources/extensions/gsd/onboarding-state.ts +146 -0
- package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
- package/src/resources/extensions/gsd/pre-execution-checks.ts +100 -12
- package/src/resources/extensions/gsd/preferences-models.ts +1 -0
- package/src/resources/extensions/gsd/preferences-types.ts +9 -1
- package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
- package/src/resources/extensions/gsd/prompts/add-tests.md +1 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
- package/src/resources/extensions/gsd/prompts/execute-task.md +13 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -0
- package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/src/resources/extensions/gsd/python-resolver.ts +76 -0
- package/src/resources/extensions/gsd/setup-catalog.ts +105 -0
- package/src/resources/extensions/gsd/state.ts +50 -2
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +1 -1
- package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/auto-prompts-fallback.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +333 -21
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +6 -8
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +106 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +190 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +72 -5
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-embeddings.test.ts +213 -0
- package/src/resources/extensions/gsd/tests/memory-ingest.test.ts +153 -0
- package/src/resources/extensions/gsd/tests/memory-maintenance.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/memory-relations.test.ts +175 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/memory-tools.test.ts +295 -0
- package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/model-router.test.ts +51 -1
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +56 -37
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/onboarding-state.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +317 -1
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +159 -8
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/prompts-no-gitignored-test-refs.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/python-resolver.test.ts +131 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
- package/src/resources/extensions/gsd/tests/skip-slice-cascades-tasks.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/uok-flags.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +97 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
- package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
- package/src/resources/extensions/gsd/tools/memory-tools.ts +380 -0
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
- package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
- package/src/resources/extensions/gsd/tools/skip-slice.ts +133 -0
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +14 -0
- package/src/resources/extensions/gsd/types.ts +62 -0
- package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
- package/src/resources/extensions/gsd/uok/flags.ts +1 -1
- package/src/resources/extensions/gsd/verification-gate.ts +2 -1
- package/src/resources/extensions/gsd/workflow-logger.ts +3 -1
- package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +1 -0
- package/src/resources/extensions/gsd/workflow-projections.ts +18 -16
- package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
- package/src/resources/extensions/remote-questions/manager.ts +13 -1
- package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
- package/src/resources/extensions/search-the-web/command-search-provider.ts +4 -1
- package/src/resources/extensions/search-the-web/native-search.ts +13 -3
- package/dist/web/standalone/.next/static/chunks/app/page-f1e30ab6bb269149.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
- package/dist/web/standalone/.next/static/css/3e9cdadb4d23b8a4.css +0 -1
- /package/dist/web/standalone/.next/static/{JncJywFxCugMuXGs56m-b → ssX7BLv3Dw9Fb4CtrCGeR}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{JncJywFxCugMuXGs56m-b → ssX7BLv3Dw9Fb4CtrCGeR}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -210,8 +210,8 @@ GSD v2 solves all of these because it's not a prompt framework anymore — it's
|
|
|
210
210
|
| Roadmap reassessment | Manual | Automatic after each slice completes |
|
|
211
211
|
| Skill discovery | None | Auto-detect and install relevant skills during research |
|
|
212
212
|
| Verification | Manual | Automated verification commands with auto-fix retries |
|
|
213
|
-
| Reporting | None | Self-contained HTML reports with metrics and dep graphs
|
|
214
|
-
| Parallel execution | None | Multi-worker parallel milestone orchestration
|
|
213
|
+
| Reporting | None | Self-contained HTML reports with metrics and dep graphs |
|
|
214
|
+
| Parallel execution | None | Multi-worker parallel milestone orchestration |
|
|
215
215
|
|
|
216
216
|
### Migrating from v1
|
|
217
217
|
|
|
@@ -407,47 +407,47 @@ On first run, GSD launches a branded setup wizard that walks you through LLM pro
|
|
|
407
407
|
|
|
408
408
|
### Commands
|
|
409
409
|
|
|
410
|
-
| Command | What it does
|
|
411
|
-
| ----------------------- |
|
|
412
|
-
| `/gsd` | Step mode — executes one unit at a time, pauses between each
|
|
413
|
-
| `/gsd next` | Explicit step mode (same as bare `/gsd`)
|
|
414
|
-
| `/gsd auto` | Autonomous mode — researches, plans, executes, commits, repeats
|
|
415
|
-
| `/gsd quick` | Execute a quick task with GSD guarantees, skip planning overhead
|
|
416
|
-
| `/gsd stop` | Stop auto mode gracefully
|
|
417
|
-
| `/gsd steer` | Hard-steer plan documents during execution
|
|
418
|
-
| `/gsd discuss` | Discuss architecture and decisions (works alongside auto mode)
|
|
419
|
-
| `/gsd rethink` | Conversational project reorganization
|
|
420
|
-
| `/gsd mcp` | MCP server status and connectivity
|
|
421
|
-
| `/gsd status` | Progress dashboard
|
|
422
|
-
| `/gsd queue` | Queue future milestones (safe during auto mode)
|
|
423
|
-
| `/gsd prefs` | Model selection, timeouts, budget ceiling
|
|
424
|
-
| `/gsd migrate` | Migrate a v1 `.planning` directory to `.gsd` format
|
|
425
|
-
| `/gsd help` | Categorized command reference for all GSD subcommands
|
|
426
|
-
| `/gsd mode` | Switch workflow mode (solo/team) with coordinated defaults
|
|
427
|
-
| `/gsd workflow` | Unified workflow plugins — list, run `<name>`, install, info, validate
|
|
428
|
-
| `/gsd start <template>` | Launch a bundled or custom workflow template (bugfix, release, etc.)
|
|
429
|
-
| `/gsd forensics` | Full-access GSD debugger for auto-mode failure investigation
|
|
430
|
-
| `/gsd cleanup` | Archive phase directories from completed milestones
|
|
410
|
+
| Command | What it does |
|
|
411
|
+
| ----------------------- | ----------------------------------------------------------------------------- |
|
|
412
|
+
| `/gsd` | Step mode — executes one unit at a time, pauses between each |
|
|
413
|
+
| `/gsd next` | Explicit step mode (same as bare `/gsd`) |
|
|
414
|
+
| `/gsd auto` | Autonomous mode — researches, plans, executes, commits, repeats |
|
|
415
|
+
| `/gsd quick` | Execute a quick task with GSD guarantees, skip planning overhead |
|
|
416
|
+
| `/gsd stop` | Stop auto mode gracefully |
|
|
417
|
+
| `/gsd steer` | Hard-steer plan documents during execution |
|
|
418
|
+
| `/gsd discuss` | Discuss architecture and decisions (works alongside auto mode) |
|
|
419
|
+
| `/gsd rethink` | Conversational project reorganization |
|
|
420
|
+
| `/gsd mcp` | MCP server status and connectivity |
|
|
421
|
+
| `/gsd status` | Progress dashboard |
|
|
422
|
+
| `/gsd queue` | Queue future milestones (safe during auto mode) |
|
|
423
|
+
| `/gsd prefs` | Model selection, timeouts, budget ceiling |
|
|
424
|
+
| `/gsd migrate` | Migrate a v1 `.planning` directory to `.gsd` format |
|
|
425
|
+
| `/gsd help` | Categorized command reference for all GSD subcommands |
|
|
426
|
+
| `/gsd mode` | Switch workflow mode (solo/team) with coordinated defaults |
|
|
427
|
+
| `/gsd workflow` | Unified workflow plugins — list, run `<name>`, install, info, validate |
|
|
428
|
+
| `/gsd start <template>` | Launch a bundled or custom workflow template (bugfix, release, etc.) |
|
|
429
|
+
| `/gsd forensics` | Full-access GSD debugger for auto-mode failure investigation |
|
|
430
|
+
| `/gsd cleanup` | Archive phase directories from completed milestones |
|
|
431
431
|
| `/gsd doctor` | Runtime health checks — issues surface across widget, visualizer, and reports |
|
|
432
|
-
| `/gsd keys` | API key manager — list, add, remove, test, rotate, doctor
|
|
433
|
-
| `/gsd logs` | Browse activity, debug, and metrics logs
|
|
434
|
-
| `/gsd export --html` | Generate HTML report for current or completed milestone
|
|
435
|
-
| `/worktree` (`/wt`) | Git worktree lifecycle — create, switch, merge, remove
|
|
436
|
-
| `/voice` | Toggle real-time speech-to-text (macOS, Linux)
|
|
437
|
-
| `/exit` | Graceful shutdown — saves session state before exiting
|
|
438
|
-
| `/kill` | Kill GSD process immediately
|
|
439
|
-
| `/clear` | Start a new session (alias for `/new`)
|
|
440
|
-
| `Ctrl+Alt+G` | Toggle dashboard overlay
|
|
441
|
-
| `Ctrl+Alt+V` | Toggle voice transcription
|
|
442
|
-
| `Ctrl+Alt+B` | Show background shell processes
|
|
443
|
-
| `Alt+V` | Paste clipboard image (macOS)
|
|
444
|
-
| `gsd config` | Re-run the setup wizard (LLM provider + tool keys)
|
|
445
|
-
| `gsd update` | Update GSD to the latest version
|
|
446
|
-
| `gsd headless [cmd]` | Run `/gsd` commands without TUI (CI, cron, scripts)
|
|
447
|
-
| `gsd headless query` | Instant JSON snapshot — state, next dispatch, costs (no LLM)
|
|
448
|
-
| `gsd --continue` (`-c`) | Resume the most recent session for the current directory
|
|
449
|
-
| `gsd --worktree` (`-w`) | Launch an isolated worktree session for the active milestone
|
|
450
|
-
| `gsd sessions` | Interactive session picker — browse and resume any saved session
|
|
432
|
+
| `/gsd keys` | API key manager — list, add, remove, test, rotate, doctor |
|
|
433
|
+
| `/gsd logs` | Browse activity, debug, and metrics logs |
|
|
434
|
+
| `/gsd export --html` | Generate HTML report for current or completed milestone |
|
|
435
|
+
| `/worktree` (`/wt`) | Git worktree lifecycle — create, switch, merge, remove |
|
|
436
|
+
| `/voice` | Toggle real-time speech-to-text (macOS, Linux) |
|
|
437
|
+
| `/exit` | Graceful shutdown — saves session state before exiting |
|
|
438
|
+
| `/kill` | Kill GSD process immediately |
|
|
439
|
+
| `/clear` | Start a new session (alias for `/new`) |
|
|
440
|
+
| `Ctrl+Alt+G` | Toggle dashboard overlay |
|
|
441
|
+
| `Ctrl+Alt+V` | Toggle voice transcription |
|
|
442
|
+
| `Ctrl+Alt+B` | Show background shell processes |
|
|
443
|
+
| `Alt+V` | Paste clipboard image (macOS) |
|
|
444
|
+
| `gsd config` | Re-run the setup wizard (LLM provider + tool keys) |
|
|
445
|
+
| `gsd update` | Update GSD to the latest version |
|
|
446
|
+
| `gsd headless [cmd]` | Run `/gsd` commands without TUI (CI, cron, scripts) |
|
|
447
|
+
| `gsd headless query` | Instant JSON snapshot — state, next dispatch, costs (no LLM) |
|
|
448
|
+
| `gsd --continue` (`-c`) | Resume the most recent session for the current directory |
|
|
449
|
+
| `gsd --worktree` (`-w`) | Launch an isolated worktree session for the active milestone |
|
|
450
|
+
| `gsd sessions` | Interactive session picker — browse and resume any saved session |
|
|
451
451
|
|
|
452
452
|
---
|
|
453
453
|
|
|
@@ -556,24 +556,24 @@ auto_report: true
|
|
|
556
556
|
|
|
557
557
|
**Key settings:**
|
|
558
558
|
|
|
559
|
-
| Setting
|
|
560
|
-
|
|
|
561
|
-
| `models.*`
|
|
562
|
-
| `skill_discovery`
|
|
563
|
-
| `auto_supervisor.*`
|
|
564
|
-
| `budget_ceiling`
|
|
565
|
-
| `uat_dispatch`
|
|
566
|
-
| `always_use_skills`
|
|
567
|
-
| `skill_rules`
|
|
568
|
-
| `skill_staleness_days`
|
|
569
|
-
| `unique_milestone_ids`
|
|
570
|
-
| `git.isolation`
|
|
571
|
-
| `git.manage_gitignore`
|
|
572
|
-
| `verification_commands
|
|
573
|
-
| `verification_auto_fix
|
|
574
|
-
| `verification_max_retries`
|
|
575
|
-
| `phases.require_slice_discussion` | Pause auto-mode before each slice for human discussion review
|
|
576
|
-
| `auto_report`
|
|
559
|
+
| Setting | What it controls |
|
|
560
|
+
| --------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
561
|
+
| `models.*` | Per-phase model selection — string for a single model, or `{model, fallbacks}` for automatic failover |
|
|
562
|
+
| `skill_discovery` | `auto` / `suggest` / `off` — how GSD finds and applies skills |
|
|
563
|
+
| `auto_supervisor.*` | Timeout thresholds for auto mode supervision |
|
|
564
|
+
| `budget_ceiling` | USD ceiling — auto mode pauses when reached |
|
|
565
|
+
| `uat_dispatch` | Enable automatic UAT runs after slice completion |
|
|
566
|
+
| `always_use_skills` | Skills to always load when relevant |
|
|
567
|
+
| `skill_rules` | Situational rules for skill routing |
|
|
568
|
+
| `skill_staleness_days` | Skills unused for N days get deprioritized (default: 60, 0 = disabled) |
|
|
569
|
+
| `unique_milestone_ids` | Uses unique milestone names to avoid clashes when working in teams of people |
|
|
570
|
+
| `git.isolation` | `none` (default), `worktree`, or `branch` — enable worktree or branch isolation for milestone work |
|
|
571
|
+
| `git.manage_gitignore` | Set `false` to prevent GSD from modifying `.gitignore` |
|
|
572
|
+
| `verification_commands` | Array of shell commands to run after task execution (e.g., `["npm run lint", "npm run test"]`) |
|
|
573
|
+
| `verification_auto_fix` | Auto-retry on verification failures (default: true) |
|
|
574
|
+
| `verification_max_retries` | Max retries for verification failures (default: 2) |
|
|
575
|
+
| `phases.require_slice_discussion` | Pause auto-mode before each slice for human discussion review |
|
|
576
|
+
| `auto_report` | Auto-generate HTML reports after milestone completion (default: true) |
|
|
577
577
|
|
|
578
578
|
### Agent Instructions
|
|
579
579
|
|
|
@@ -590,14 +590,14 @@ Start GSD with `gsd --debug` to enable structured JSONL diagnostic logging. Debu
|
|
|
590
590
|
GSD includes a coordinated token optimization system that reduces usage by 40-60% on cost-sensitive workloads. Set a single preference to coordinate model selection, phase skipping, and context compression:
|
|
591
591
|
|
|
592
592
|
```yaml
|
|
593
|
-
token_profile: budget
|
|
593
|
+
token_profile: budget # or balanced (default), quality
|
|
594
594
|
```
|
|
595
595
|
|
|
596
|
-
| Profile
|
|
597
|
-
|
|
598
|
-
| `budget`
|
|
599
|
-
| `balanced` | 10-20%
|
|
600
|
-
| `quality`
|
|
596
|
+
| Profile | Savings | What It Does |
|
|
597
|
+
| ---------- | ------- | -------------------------------------------------------------- |
|
|
598
|
+
| `budget` | 40-60% | Cheap models, skip research/reassess, minimal context inlining |
|
|
599
|
+
| `balanced` | 10-20% | Default models, skip slice research, standard context |
|
|
600
|
+
| `quality` | 0% | All phases, all context, full model power |
|
|
601
601
|
|
|
602
602
|
**Complexity-based routing** automatically classifies tasks as simple/standard/complex and routes to appropriate models. Simple docs tasks get Haiku; complex architectural work gets Opus. The classification is heuristic (sub-millisecond, no LLM calls) and learns from outcomes via a persistent routing history.
|
|
603
603
|
|
|
@@ -609,44 +609,44 @@ See the full [Token Optimization Guide](./docs/user-docs/token-optimization.md)
|
|
|
609
609
|
|
|
610
610
|
GSD ships with 24 extensions, all loaded automatically:
|
|
611
611
|
|
|
612
|
-
| Extension | What it provides
|
|
613
|
-
| ---------------------- |
|
|
614
|
-
| **GSD** | Core workflow engine, auto mode, commands, dashboard
|
|
612
|
+
| Extension | What it provides |
|
|
613
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
614
|
+
| **GSD** | Core workflow engine, auto mode, commands, dashboard |
|
|
615
615
|
| **Browser Tools** | Playwright-based browser with form intelligence, intent-ranked element finding, semantic actions, PDF export, session state persistence, network mocking, device emulation, structured extraction, visual diffing, region zoom, test code generation, and prompt injection detection |
|
|
616
|
-
| **Search the Web** | Brave Search, Tavily, or Jina page extraction
|
|
617
|
-
| **Google Search** | Gemini-powered web search with AI-synthesized answers
|
|
618
|
-
| **Context7** | Up-to-date library/framework documentation
|
|
619
|
-
| **Background Shell** | Long-running process management with readiness detection
|
|
620
|
-
| **Async Jobs** | Background bash commands with job tracking and cancellation
|
|
621
|
-
| **Subagent** | Delegated tasks with isolated context windows
|
|
622
|
-
| **GitHub** | Full-suite GitHub issues and PR management via `/gh` command
|
|
623
|
-
| **Mac Tools** | macOS native app automation via Accessibility APIs
|
|
624
|
-
| **MCP Client** | Native MCP server integration via @modelcontextprotocol/sdk
|
|
625
|
-
| **Voice** | Real-time speech-to-text transcription (macOS, Linux — Ubuntu 22.04+)
|
|
626
|
-
| **Slash Commands** | Custom command creation
|
|
627
|
-
| **Ask User Questions** | Structured user input with single/multi-select
|
|
628
|
-
| **Secure Env Collect** | Masked secret collection without manual .env editing
|
|
629
|
-
| **Remote Questions** | Route decisions to Slack/Discord when human input is needed in headless/CI mode
|
|
630
|
-
| **Universal Config** | Discover and import MCP servers and rules from other AI coding tools
|
|
631
|
-
| **AWS Auth** | Automatic Bedrock credential refresh for AWS-hosted models
|
|
632
|
-
| **Ollama** | First-class local LLM support via Ollama
|
|
633
|
-
| **Claude Code CLI** | External provider extension for Claude Code CLI
|
|
634
|
-
| **cmux** | Claude multiplexer integration — desktop notifications, sidebar metadata, visual subagent splits
|
|
635
|
-
| **GitHub Sync** | Auto-sync milestones to GitHub Issues, PRs, and Milestones
|
|
636
|
-
| **LSP** | Language Server Protocol — diagnostics, definitions, references, hover, rename
|
|
637
|
-
| **TTSR** | Tool-triggered system rules — conditional context injection based on tool usage
|
|
616
|
+
| **Search the Web** | Brave Search, Tavily, or Jina page extraction |
|
|
617
|
+
| **Google Search** | Gemini-powered web search with AI-synthesized answers |
|
|
618
|
+
| **Context7** | Up-to-date library/framework documentation |
|
|
619
|
+
| **Background Shell** | Long-running process management with readiness detection |
|
|
620
|
+
| **Async Jobs** | Background bash commands with job tracking and cancellation |
|
|
621
|
+
| **Subagent** | Delegated tasks with isolated context windows |
|
|
622
|
+
| **GitHub** | Full-suite GitHub issues and PR management via `/gh` command |
|
|
623
|
+
| **Mac Tools** | macOS native app automation via Accessibility APIs |
|
|
624
|
+
| **MCP Client** | Native MCP server integration via @modelcontextprotocol/sdk |
|
|
625
|
+
| **Voice** | Real-time speech-to-text transcription (macOS, Linux — Ubuntu 22.04+) |
|
|
626
|
+
| **Slash Commands** | Custom command creation |
|
|
627
|
+
| **Ask User Questions** | Structured user input with single/multi-select |
|
|
628
|
+
| **Secure Env Collect** | Masked secret collection without manual .env editing |
|
|
629
|
+
| **Remote Questions** | Route decisions to Slack/Discord when human input is needed in headless/CI mode |
|
|
630
|
+
| **Universal Config** | Discover and import MCP servers and rules from other AI coding tools |
|
|
631
|
+
| **AWS Auth** | Automatic Bedrock credential refresh for AWS-hosted models |
|
|
632
|
+
| **Ollama** | First-class local LLM support via Ollama |
|
|
633
|
+
| **Claude Code CLI** | External provider extension for Claude Code CLI |
|
|
634
|
+
| **cmux** | Claude multiplexer integration — desktop notifications, sidebar metadata, visual subagent splits |
|
|
635
|
+
| **GitHub Sync** | Auto-sync milestones to GitHub Issues, PRs, and Milestones |
|
|
636
|
+
| **LSP** | Language Server Protocol — diagnostics, definitions, references, hover, rename |
|
|
637
|
+
| **TTSR** | Tool-triggered system rules — conditional context injection based on tool usage |
|
|
638
638
|
|
|
639
639
|
### Bundled Agents
|
|
640
640
|
|
|
641
641
|
Five specialized subagents for delegated work:
|
|
642
642
|
|
|
643
|
-
| Agent
|
|
644
|
-
|
|
|
645
|
-
| **Scout**
|
|
646
|
-
| **Researcher**
|
|
647
|
-
| **Worker**
|
|
648
|
-
| **JavaScript Pro**
|
|
649
|
-
| **TypeScript Pro**
|
|
643
|
+
| Agent | Role |
|
|
644
|
+
| ------------------ | ------------------------------------------------------------ |
|
|
645
|
+
| **Scout** | Fast codebase recon — returns compressed context for handoff |
|
|
646
|
+
| **Researcher** | Web research — finds and synthesizes current information |
|
|
647
|
+
| **Worker** | General-purpose execution in an isolated context window |
|
|
648
|
+
| **JavaScript Pro** | JavaScript-specialized execution and debugging |
|
|
649
|
+
| **TypeScript Pro** | TypeScript-specialized execution and debugging |
|
|
650
650
|
|
|
651
651
|
---
|
|
652
652
|
|
|
@@ -806,8 +806,8 @@ Use expensive models where quality matters (planning, complex execution) and che
|
|
|
806
806
|
|
|
807
807
|
## Ecosystem
|
|
808
808
|
|
|
809
|
-
| Project
|
|
810
|
-
|
|
|
809
|
+
| Project | Description |
|
|
810
|
+
| --------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
811
811
|
| [GSD2 Config Utility](https://github.com/jeremymcs/gsd2-config) | Standalone configuration tool for managing GSD preferences, providers, and API keys |
|
|
812
812
|
|
|
813
813
|
---
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-correct binary name for the Claude Code CLI.
|
|
3
|
+
*
|
|
4
|
+
* On Windows, npm-global binaries are installed as `.cmd` shims and
|
|
5
|
+
* `execFileSync` does not auto-resolve the extension — calling bare
|
|
6
|
+
* `claude` would fail with ENOENT even when the CLI is installed and
|
|
7
|
+
* authenticated. Mirrors the `NPM_COMMAND` pattern in
|
|
8
|
+
* `src/resources/extensions/gsd/pre-execution-checks.ts`.
|
|
9
|
+
*/
|
|
10
|
+
export declare const CLAUDE_COMMAND: string;
|
|
1
11
|
/**
|
|
2
12
|
* Check if the `claude` binary is installed (regardless of auth state).
|
|
3
13
|
*/
|
package/dist/claude-cli-check.js
CHANGED
|
@@ -2,12 +2,22 @@
|
|
|
2
2
|
// Lightweight check used at onboarding time (before extensions load).
|
|
3
3
|
// The full readiness check with caching lives in the claude-code-cli extension.
|
|
4
4
|
import { execFileSync } from 'node:child_process';
|
|
5
|
+
/**
|
|
6
|
+
* Platform-correct binary name for the Claude Code CLI.
|
|
7
|
+
*
|
|
8
|
+
* On Windows, npm-global binaries are installed as `.cmd` shims and
|
|
9
|
+
* `execFileSync` does not auto-resolve the extension — calling bare
|
|
10
|
+
* `claude` would fail with ENOENT even when the CLI is installed and
|
|
11
|
+
* authenticated. Mirrors the `NPM_COMMAND` pattern in
|
|
12
|
+
* `src/resources/extensions/gsd/pre-execution-checks.ts`.
|
|
13
|
+
*/
|
|
14
|
+
export const CLAUDE_COMMAND = process.platform === 'win32' ? 'claude.cmd' : 'claude';
|
|
5
15
|
/**
|
|
6
16
|
* Check if the `claude` binary is installed (regardless of auth state).
|
|
7
17
|
*/
|
|
8
18
|
export function isClaudeBinaryInstalled() {
|
|
9
19
|
try {
|
|
10
|
-
execFileSync(
|
|
20
|
+
execFileSync(CLAUDE_COMMAND, ['--version'], { timeout: 5_000, stdio: 'pipe' });
|
|
11
21
|
return true;
|
|
12
22
|
}
|
|
13
23
|
catch {
|
|
@@ -19,13 +29,13 @@ export function isClaudeBinaryInstalled() {
|
|
|
19
29
|
*/
|
|
20
30
|
export function isClaudeCliReady() {
|
|
21
31
|
try {
|
|
22
|
-
execFileSync(
|
|
32
|
+
execFileSync(CLAUDE_COMMAND, ['--version'], { timeout: 5_000, stdio: 'pipe' });
|
|
23
33
|
}
|
|
24
34
|
catch {
|
|
25
35
|
return false;
|
|
26
36
|
}
|
|
27
37
|
try {
|
|
28
|
-
const output = execFileSync(
|
|
38
|
+
const output = execFileSync(CLAUDE_COMMAND, ['auth', 'status'], { timeout: 5_000, stdio: 'pipe' })
|
|
29
39
|
.toString()
|
|
30
40
|
.toLowerCase();
|
|
31
41
|
return !(/not logged in|no credentials|unauthenticated|not authenticated/i.test(output));
|
package/dist/loader.js
CHANGED
|
File without changes
|
package/dist/onboarding.d.ts
CHANGED
|
@@ -10,6 +10,20 @@
|
|
|
10
10
|
* All steps are skippable. All errors are recoverable. Never crashes boot.
|
|
11
11
|
*/
|
|
12
12
|
import type { AuthStorage } from '@gsd/pi-coding-agent';
|
|
13
|
+
type ClackModule = typeof import('@clack/prompts');
|
|
14
|
+
type PicoModule = {
|
|
15
|
+
cyan: (s: string) => string;
|
|
16
|
+
green: (s: string) => string;
|
|
17
|
+
yellow: (s: string) => string;
|
|
18
|
+
dim: (s: string) => string;
|
|
19
|
+
bold: (s: string) => string;
|
|
20
|
+
red: (s: string) => string;
|
|
21
|
+
reset: (s: string) => string;
|
|
22
|
+
};
|
|
23
|
+
interface RunOnboardingOptions {
|
|
24
|
+
/** Show logo + intro banner. Disable when onboarding is launched inside an active TUI session. */
|
|
25
|
+
showIntro?: boolean;
|
|
26
|
+
}
|
|
13
27
|
/**
|
|
14
28
|
* Determine if the onboarding wizard should run.
|
|
15
29
|
*
|
|
@@ -36,4 +50,9 @@ export declare function shouldRunOnboarding(authStorage: AuthStorage, settingsDe
|
|
|
36
50
|
* All steps are skippable. All errors are recoverable.
|
|
37
51
|
* Writes status to stderr during execution.
|
|
38
52
|
*/
|
|
39
|
-
export declare function runOnboarding(authStorage: AuthStorage): Promise<void>;
|
|
53
|
+
export declare function runOnboarding(authStorage: AuthStorage, opts?: RunOnboardingOptions): Promise<void>;
|
|
54
|
+
export declare function runLlmStep(p: ClackModule, pc: PicoModule, authStorage: AuthStorage): Promise<boolean>;
|
|
55
|
+
export declare function runWebSearchStep(p: ClackModule, pc: PicoModule, authStorage: AuthStorage, isAnthropicAuth: boolean): Promise<string | null>;
|
|
56
|
+
export declare function runToolKeysStep(p: ClackModule, pc: PicoModule, authStorage: AuthStorage): Promise<number>;
|
|
57
|
+
export declare function runRemoteQuestionsStep(p: ClackModule, pc: PicoModule, authStorage: AuthStorage): Promise<string | null>;
|
|
58
|
+
export {};
|
package/dist/onboarding.js
CHANGED
|
@@ -15,6 +15,8 @@ import { dirname, join } from 'node:path';
|
|
|
15
15
|
import { renderLogo } from './logo.js';
|
|
16
16
|
import { agentDir } from './app-paths.js';
|
|
17
17
|
import { isClaudeCliReady } from './claude-cli-check.js';
|
|
18
|
+
import { markOnboardingComplete, markStepCompleted, markStepSkipped, isOnboardingComplete, } from './resources/extensions/gsd/onboarding-state.js';
|
|
19
|
+
import { getLlmProviderIds } from './resources/extensions/gsd/setup-catalog.js';
|
|
18
20
|
// ─── Constants ────────────────────────────────────────────────────────────────
|
|
19
21
|
const TOOL_KEYS = [
|
|
20
22
|
{
|
|
@@ -36,25 +38,17 @@ const TOOL_KEYS = [
|
|
|
36
38
|
hint: 'voice transcription — free at console.groq.com',
|
|
37
39
|
},
|
|
38
40
|
];
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Known LLM provider IDs that, if authed, mean the user doesn't need onboarding.
|
|
43
|
+
* Sourced from the shared setup-catalog so adding a provider lands in one place.
|
|
44
|
+
* 'anthropic-vertex' and 'ollama' aren't in PROVIDER_REGISTRY but are still
|
|
45
|
+
* treated as "authed = no onboarding needed" for back-compat.
|
|
46
|
+
*/
|
|
47
|
+
const LLM_PROVIDER_IDS = Array.from(new Set([
|
|
48
|
+
...getLlmProviderIds(),
|
|
42
49
|
'anthropic-vertex',
|
|
43
|
-
'claude-code',
|
|
44
|
-
'openai',
|
|
45
|
-
'github-copilot',
|
|
46
|
-
'openai-codex',
|
|
47
|
-
'google-gemini-cli',
|
|
48
|
-
'google-antigravity',
|
|
49
|
-
'google',
|
|
50
|
-
'groq',
|
|
51
|
-
'xai',
|
|
52
|
-
'openrouter',
|
|
53
|
-
'mistral',
|
|
54
50
|
'ollama',
|
|
55
|
-
|
|
56
|
-
'custom-openai',
|
|
57
|
-
];
|
|
51
|
+
]));
|
|
58
52
|
/** API key prefix validation — loose checks to catch obvious mistakes */
|
|
59
53
|
const API_KEY_PREFIXES = {
|
|
60
54
|
anthropic: ['sk-ant-'],
|
|
@@ -178,6 +172,10 @@ async function runStep(p, warnLabel, fn, opts = {}) {
|
|
|
178
172
|
export function shouldRunOnboarding(authStorage, settingsDefaultProvider) {
|
|
179
173
|
if (!process.stdin.isTTY)
|
|
180
174
|
return false;
|
|
175
|
+
// Explicit completion record wins — user has already finished onboarding (and
|
|
176
|
+
// our flowVersion hasn't bumped since).
|
|
177
|
+
if (isOnboardingComplete())
|
|
178
|
+
return false;
|
|
181
179
|
if (settingsDefaultProvider)
|
|
182
180
|
return false;
|
|
183
181
|
// Check if any LLM provider has credentials
|
|
@@ -196,7 +194,7 @@ export function shouldRunOnboarding(authStorage, settingsDefaultProvider) {
|
|
|
196
194
|
* All steps are skippable. All errors are recoverable.
|
|
197
195
|
* Writes status to stderr during execution.
|
|
198
196
|
*/
|
|
199
|
-
export async function runOnboarding(authStorage) {
|
|
197
|
+
export async function runOnboarding(authStorage, opts = {}) {
|
|
200
198
|
let p;
|
|
201
199
|
let pc;
|
|
202
200
|
try {
|
|
@@ -209,31 +207,62 @@ export async function runOnboarding(authStorage) {
|
|
|
209
207
|
return;
|
|
210
208
|
}
|
|
211
209
|
// ── Intro ─────────────────────────────────────────────────────────────────
|
|
212
|
-
|
|
213
|
-
|
|
210
|
+
if (opts.showIntro !== false) {
|
|
211
|
+
process.stderr.write(renderLogo(pc.cyan));
|
|
212
|
+
p.intro(pc.bold('Welcome to GSD — let\'s get you set up'));
|
|
213
|
+
}
|
|
214
|
+
const completedSteps = [];
|
|
214
215
|
// ── LLM Provider Selection ────────────────────────────────────────────────
|
|
215
216
|
const llmResult = await runStep(p, 'LLM setup failed', () => runLlmStep(p, pc, authStorage), {
|
|
216
|
-
cancelMessage: 'Setup cancelled — you can run /
|
|
217
|
+
cancelMessage: 'Setup cancelled — you can run /gsd onboarding --resume later.',
|
|
217
218
|
errorInfo: 'You can configure your LLM provider later with /login inside GSD.',
|
|
218
219
|
});
|
|
219
220
|
if (llmResult === STEP_CANCELLED)
|
|
220
221
|
return;
|
|
221
222
|
const llmConfigured = llmResult ?? false;
|
|
223
|
+
if (llmConfigured) {
|
|
224
|
+
markStepCompleted('llm');
|
|
225
|
+
completedSteps.push('llm');
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
markStepSkipped('llm');
|
|
229
|
+
}
|
|
222
230
|
// ── Web Search Provider ──────────────────────────────────────────────────
|
|
223
231
|
const searchResult = await runStep(p, 'Web search setup failed', () => runWebSearchStep(p, pc, authStorage, llmConfigured));
|
|
224
232
|
if (searchResult === STEP_CANCELLED)
|
|
225
233
|
return;
|
|
226
234
|
const searchConfigured = searchResult;
|
|
235
|
+
if (searchConfigured) {
|
|
236
|
+
markStepCompleted('search');
|
|
237
|
+
completedSteps.push('search');
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
markStepSkipped('search');
|
|
241
|
+
}
|
|
227
242
|
// ── Remote Questions ─────────────────────────────────────────────────────
|
|
228
243
|
const remoteResult = await runStep(p, 'Remote questions setup failed', () => runRemoteQuestionsStep(p, pc, authStorage));
|
|
229
244
|
if (remoteResult === STEP_CANCELLED)
|
|
230
245
|
return;
|
|
231
246
|
const remoteConfigured = remoteResult;
|
|
247
|
+
if (remoteConfigured) {
|
|
248
|
+
markStepCompleted('remote');
|
|
249
|
+
completedSteps.push('remote');
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
markStepSkipped('remote');
|
|
253
|
+
}
|
|
232
254
|
// ── Tool API Keys ─────────────────────────────────────────────────────────
|
|
233
255
|
const toolResult = await runStep(p, 'Tool key setup failed', () => runToolKeysStep(p, pc, authStorage));
|
|
234
256
|
if (toolResult === STEP_CANCELLED)
|
|
235
257
|
return;
|
|
236
258
|
const toolKeyCount = toolResult ?? 0;
|
|
259
|
+
if (toolKeyCount > 0) {
|
|
260
|
+
markStepCompleted('tool-keys');
|
|
261
|
+
completedSteps.push('tool-keys');
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
markStepSkipped('tool-keys');
|
|
265
|
+
}
|
|
237
266
|
// ── Summary ───────────────────────────────────────────────────────────────
|
|
238
267
|
const summaryLines = [];
|
|
239
268
|
if (llmConfigured) {
|
|
@@ -268,11 +297,17 @@ export async function runOnboarding(authStorage) {
|
|
|
268
297
|
else {
|
|
269
298
|
summaryLines.push(`${pc.dim('↷')} Tool keys: none configured`);
|
|
270
299
|
}
|
|
300
|
+
// Persist completion record so re-entry, web boot probe, and shouldRunOnboarding
|
|
301
|
+
// all agree the wizard finished. Required steps drive the "complete" semantics
|
|
302
|
+
// in onboarding-state.ts; here we mark wizard-level completion regardless.
|
|
303
|
+
markOnboardingComplete(completedSteps);
|
|
304
|
+
summaryLines.push('');
|
|
305
|
+
summaryLines.push(`${pc.dim('Tip:')} re-run anytime with ${pc.cyan('/gsd onboarding')}`);
|
|
271
306
|
p.note(summaryLines.join('\n'), 'Setup complete');
|
|
272
307
|
p.outro(pc.dim('Launching GSD...'));
|
|
273
308
|
}
|
|
274
309
|
// ─── LLM Authentication Step ──────────────────────────────────────────────────
|
|
275
|
-
async function runLlmStep(p, pc, authStorage) {
|
|
310
|
+
export async function runLlmStep(p, pc, authStorage) {
|
|
276
311
|
// Build the OAuth provider list dynamically from what's registered
|
|
277
312
|
const oauthProviders = authStorage.getOAuthProviders();
|
|
278
313
|
const oauthMap = new Map(oauthProviders.map(op => [op.id, op]));
|
|
@@ -572,7 +607,7 @@ async function runCustomOpenAIFlow(p, pc, authStorage) {
|
|
|
572
607
|
return true;
|
|
573
608
|
}
|
|
574
609
|
// ─── Web Search Provider Step ─────────────────────────────────────────────────
|
|
575
|
-
async function runWebSearchStep(p, pc, authStorage, isAnthropicAuth) {
|
|
610
|
+
export async function runWebSearchStep(p, pc, authStorage, isAnthropicAuth) {
|
|
576
611
|
// Check which LLM provider was configured
|
|
577
612
|
const authed = authStorage.list().filter(id => LLM_PROVIDER_IDS.includes(id));
|
|
578
613
|
const isAnthropic = isAnthropicAuth && authed.includes('anthropic');
|
|
@@ -633,7 +668,7 @@ async function runWebSearchStep(p, pc, authStorage, isAnthropicAuth) {
|
|
|
633
668
|
return null;
|
|
634
669
|
}
|
|
635
670
|
// ─── Tool API Keys Step ───────────────────────────────────────────────────────
|
|
636
|
-
async function runToolKeysStep(p, pc, authStorage) {
|
|
671
|
+
export async function runToolKeysStep(p, pc, authStorage) {
|
|
637
672
|
// Filter to keys not already configured
|
|
638
673
|
const missing = TOOL_KEYS.filter(tk => !authStorage.has(tk.provider) && !process.env[tk.envVar]);
|
|
639
674
|
if (missing.length === 0)
|
|
@@ -668,7 +703,7 @@ async function runToolKeysStep(p, pc, authStorage) {
|
|
|
668
703
|
return savedCount;
|
|
669
704
|
}
|
|
670
705
|
// ─── Remote Questions Step ────────────────────────────────────────────────────
|
|
671
|
-
async function runRemoteQuestionsStep(p, pc, authStorage) {
|
|
706
|
+
export async function runRemoteQuestionsStep(p, pc, authStorage) {
|
|
672
707
|
// Check existing config — use getCredentialsForProvider to skip empty-key entries
|
|
673
708
|
const hasValidKey = (provider) => authStorage
|
|
674
709
|
.getCredentialsForProvider(provider)
|
|
@@ -316,10 +316,13 @@ export default function AskUserQuestions(pi) {
|
|
|
316
316
|
lines.push(`${theme.fg("accent", q.header)}: ${theme.fg("dim", "(no answer)")}`);
|
|
317
317
|
continue;
|
|
318
318
|
}
|
|
319
|
-
const
|
|
319
|
+
const selected = answer.selected;
|
|
320
|
+
const answerText = Array.isArray(selected)
|
|
321
|
+
? (selected.length > 0 ? selected.join(", ") : "(custom)")
|
|
322
|
+
: (selected || "(custom)");
|
|
320
323
|
let line = `${theme.fg("success", "✓ ")}${theme.fg("accent", q.header)}: ${answerText}`;
|
|
321
|
-
if (answer.
|
|
322
|
-
line += ` ${theme.fg("muted", `[note: ${answer.
|
|
324
|
+
if (answer.notes) {
|
|
325
|
+
line += ` ${theme.fg("muted", `[note: ${answer.notes}]`)}`;
|
|
323
326
|
}
|
|
324
327
|
lines.push(line);
|
|
325
328
|
}
|
|
@@ -9,6 +9,16 @@
|
|
|
9
9
|
* and check the exit code + output for an authenticated session.
|
|
10
10
|
*/
|
|
11
11
|
import { execFileSync } from "node:child_process";
|
|
12
|
+
/**
|
|
13
|
+
* Platform-correct binary name for the Claude Code CLI.
|
|
14
|
+
*
|
|
15
|
+
* On Windows, npm-global binaries are installed as `.cmd` shims and
|
|
16
|
+
* `execFileSync` does not auto-resolve the extension — calling bare
|
|
17
|
+
* `claude` would fail with ENOENT even when the CLI is installed and
|
|
18
|
+
* authenticated. Mirrors the `NPM_COMMAND` pattern in
|
|
19
|
+
* `src/resources/extensions/gsd/pre-execution-checks.ts`.
|
|
20
|
+
*/
|
|
21
|
+
const CLAUDE_COMMAND = process.platform === "win32" ? "claude.cmd" : "claude";
|
|
12
22
|
let cachedBinaryPresent = null;
|
|
13
23
|
let cachedAuthed = null;
|
|
14
24
|
let lastCheckMs = 0;
|
|
@@ -22,7 +32,7 @@ function refreshCache() {
|
|
|
22
32
|
lastCheckMs = now;
|
|
23
33
|
// Check binary presence
|
|
24
34
|
try {
|
|
25
|
-
execFileSync(
|
|
35
|
+
execFileSync(CLAUDE_COMMAND, ["--version"], { timeout: 5_000, stdio: "pipe" });
|
|
26
36
|
cachedBinaryPresent = true;
|
|
27
37
|
}
|
|
28
38
|
catch {
|
|
@@ -32,7 +42,7 @@ function refreshCache() {
|
|
|
32
42
|
}
|
|
33
43
|
// Check auth status — exit code 0 with non-error output means authenticated
|
|
34
44
|
try {
|
|
35
|
-
const output = execFileSync(
|
|
45
|
+
const output = execFileSync(CLAUDE_COMMAND, ["auth", "status"], { timeout: 5_000, stdio: "pipe" })
|
|
36
46
|
.toString()
|
|
37
47
|
.toLowerCase();
|
|
38
48
|
// The CLI outputs "not logged in", "no credentials", or similar when unauthenticated
|