gsd-pi 2.67.0-dev.46f9884 → 2.67.0-dev.4fb8afe
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 +42 -32
- package/dist/resource-loader.d.ts +1 -1
- package/dist/resource-loader.js +20 -5
- package/dist/resources/GSD-WORKFLOW.md +3 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +73 -42
- package/dist/resources/extensions/get-secrets-from-user.js +18 -2
- package/dist/resources/extensions/gsd/auto/phases.js +17 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +12 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +26 -0
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +11 -435
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -4
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +7 -64
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +18 -3
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +88 -8
- package/dist/resources/extensions/gsd/codebase-generator.js +173 -12
- package/dist/resources/extensions/gsd/commands/catalog.js +4 -3
- package/dist/resources/extensions/gsd/commands/dispatcher.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +92 -1
- package/dist/resources/extensions/gsd/commands-bootstrap.js +9 -0
- package/dist/resources/extensions/gsd/commands-codebase.js +4 -3
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +39 -5
- package/dist/resources/extensions/gsd/doctor-git-checks.js +4 -4
- package/dist/resources/extensions/gsd/doctor-proactive.js +3 -3
- package/dist/resources/extensions/gsd/guided-flow.js +16 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +3 -3
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -3
- package/dist/resources/extensions/gsd/prompts/system.md +3 -0
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +7 -5
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +508 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +190 -0
- package/dist/resources/extensions/gsd/workflow-reconcile.js +0 -4
- package/dist/resources/extensions/gsd/worktree-manager.js +6 -2
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
- package/dist/web/standalone/.next/build-manifest.json +5 -5
- package/dist/web/standalone/.next/prerender-manifest.json +13 -13
- package/dist/web/standalone/.next/react-loadable-manifest.json +7 -7
- package/dist/web/standalone/.next/required-server-files.json +18 -6
- package/dist/web/standalone/.next/routes-manifest.json +1 -0
- package/dist/web/standalone/.next/server/app/_global-error/page.js +32 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- 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 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +8 -6
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +8 -6
- 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 +2 -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 +2 -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.js.nft.json +1 -1
- 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 +9 -7
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +9 -7
- 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 +2 -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/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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +1 -1
- 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.js.nft.json +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 +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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.js.nft.json +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.js.nft.json +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 +2 -2
- 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 +2 -2
- 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/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
- package/dist/web/standalone/.next/server/chunks/2331.js +7 -7
- package/dist/web/standalone/.next/server/chunks/4741.js +5 -9
- package/dist/web/standalone/.next/server/chunks/63.js +45 -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-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +11 -8
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -2
- package/dist/web/standalone/.next/server/prefetch-hints.json +1 -0
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/IBTC_HlEpTBAa4HXMoV_A/_buildManifest.js +1 -0
- package/dist/web/standalone/.next/static/chunks/2008.71ee9230ad78df21.js +20 -0
- package/dist/web/standalone/.next/static/chunks/{363642f4.f9053a63f1b97508.js → 363642f4.cf8b455e0d94b478.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/3794-42fdce068d44fa4f.js +32 -0
- package/dist/web/standalone/.next/static/chunks/{4447.f86b52aea068b189.js → 4447.5bad7871be61ca73.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/4bd1b696-e356ca5ba0218e27.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{6502.8874bcae249c02e1.js → 6502.b804e48b7919f55e.js} +3 -3
- package/dist/web/standalone/.next/static/chunks/{e868780c.f7831045ac345aaa.js → e868780c.abc48b70a10fc2d6.js} +3 -3
- package/dist/web/standalone/.next/static/chunks/framework-711ef29bc66f648c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-6919d9dd919bd15f.js +5 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-9fed74684e1c5bb1.js → webpack-b49b09f97429b5d0.js} +1 -1
- package/dist/web/standalone/node_modules/@next/env/package.json +1 -1
- package/dist/web/standalone/node_modules/next/dist/build/adapter/setup-node-env.external.js +15 -0
- package/dist/web/standalone/node_modules/next/dist/build/analysis/extract-const-value.js +78 -63
- package/dist/web/standalone/node_modules/next/dist/build/analysis/get-page-static-info.js +64 -40
- package/dist/web/standalone/node_modules/next/dist/build/create-compiler-aliases.js +2 -0
- package/dist/web/standalone/node_modules/next/dist/build/define-env.js +29 -11
- package/dist/web/standalone/node_modules/next/dist/build/duration-to-string.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/build/entries.js +55 -295
- package/dist/web/standalone/node_modules/next/dist/build/file-classifier.js +76 -0
- package/dist/web/standalone/node_modules/next/dist/build/get-supported-browsers.js +38 -0
- package/dist/web/standalone/node_modules/next/dist/build/load-jsconfig.js +7 -7
- package/dist/web/standalone/node_modules/next/dist/build/lockfile.js +90 -9
- package/dist/web/standalone/node_modules/next/dist/build/next-config-ts/transpile-config.js +128 -49
- package/dist/web/standalone/node_modules/next/dist/build/print-build-errors.js +72 -0
- package/dist/web/standalone/node_modules/next/dist/build/route-discovery.js +353 -0
- package/dist/web/standalone/node_modules/next/dist/build/segment-config/app/app-segment-config.js +34 -17
- package/dist/web/standalone/node_modules/next/dist/build/static-paths/app.js +68 -15
- package/dist/web/standalone/node_modules/next/dist/build/static-paths/pages.js +3 -3
- package/dist/web/standalone/node_modules/next/dist/build/swc/index.js +125 -48
- package/dist/web/standalone/node_modules/next/dist/build/swc/loaderWorkerPool.js +40 -0
- package/dist/web/standalone/node_modules/next/dist/build/swc/options.js +23 -6
- package/dist/web/standalone/node_modules/next/dist/build/utils.js +48 -94
- package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/index.js +14 -3
- package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/global.js +4 -2
- package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/modules.js +4 -2
- package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/next-font.js +1 -0
- package/dist/web/standalone/node_modules/next/dist/build/webpack/config/blocks/css/plugins.js +5 -5
- package/dist/web/standalone/node_modules/next/dist/build/webpack/config/index.js +3 -2
- package/dist/web/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js +2 -1
- package/dist/web/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-url-parser.js +8 -1
- package/dist/web/standalone/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/loader.js +13 -4
- package/dist/web/standalone/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js +3 -1
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/build-manifest-plugin-utils.js +2 -16
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/build-manifest-plugin.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/deferred-entries-plugin.js +106 -0
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/flight-client-entry-plugin.js +16 -8
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.js +24 -11
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/middleware-plugin.js +21 -2
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/next-types-plugin/index.js +6 -5
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/nextjs-require-cache-hot-reloader.js +10 -14
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNotFoundError.js +18 -4
- package/dist/web/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseScss.js +5 -4
- package/dist/web/standalone/node_modules/next/dist/build/webpack-config.js +18 -8
- package/dist/web/standalone/node_modules/next/dist/cli/next-test.js +4 -3
- package/dist/web/standalone/node_modules/next/dist/client/app-find-source-map-url.js +2 -1
- package/dist/web/standalone/node_modules/next/dist/client/components/app-router-headers.js +10 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/app-router-instance.js +82 -4
- package/dist/web/standalone/node_modules/next/dist/client/components/app-router.js +39 -20
- package/dist/web/standalone/node_modules/next/dist/client/components/builtin/app-error.js +29 -65
- package/dist/web/standalone/node_modules/next/dist/client/components/builtin/error-styles.js +165 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/builtin/global-error.js +56 -38
- package/dist/web/standalone/node_modules/next/dist/client/components/error-boundary.js +16 -6
- package/dist/web/standalone/node_modules/next/dist/client/components/forbidden.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/client/components/handle-isr-error.js +3 -4
- package/dist/web/standalone/node_modules/next/dist/client/components/links.js +7 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/navigation-untracked.js +2 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/navigation.js +27 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/navigation.react-server.js +5 -2
- package/dist/web/standalone/node_modules/next/dist/client/components/not-found.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/client/components/redirect-boundary.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/client/components/redirect-error.js +0 -9
- package/dist/web/standalone/node_modules/next/dist/client/components/redirect.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js +73 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js +102 -8
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js +165 -48
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js +19 -11
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js +669 -457
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/committed-state.js +49 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js +19 -20
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js +5 -117
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js +34 -19
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js +16 -32
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js +85 -57
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js +12 -10
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js +10 -1
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/router-reducer.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/bfcache.js +128 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/cache.js +732 -231
- package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/lru.js +13 -6
- package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/navigation-testing-lock.js +194 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/navigation.js +388 -250
- package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/optimistic-routes.js +543 -0
- package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/scheduler.js +154 -55
- package/dist/web/standalone/node_modules/next/dist/client/components/segment-cache/vary-path.js +63 -1
- package/dist/web/standalone/node_modules/next/dist/client/components/unauthorized.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/client/components/use-action-queue.js +49 -3
- package/dist/web/standalone/node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js +9 -1
- package/dist/web/standalone/node_modules/next/dist/client/flight-data-helpers.js +42 -29
- package/dist/web/standalone/node_modules/next/dist/client/lib/javascript-url.js +32 -0
- package/dist/web/standalone/node_modules/next/dist/client/lib/promise.js +53 -0
- package/dist/web/standalone/node_modules/next/dist/client/{app-build-id.js → navigation-build-id.js} +17 -13
- package/dist/web/standalone/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js +14 -0
- package/dist/web/standalone/node_modules/next/dist/client/route-loader.js +9 -46
- package/dist/web/standalone/node_modules/next/dist/client/router.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/compiled/@next/font/dist/google/font-data.json +74 -3
- package/dist/web/standalone/node_modules/next/dist/compiled/babel/bundle.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/compiled/babel-packages/packages-bundle.js +5 -5
- package/dist/web/standalone/node_modules/next/dist/compiled/browserslist/index.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/compiled/http-proxy/index.js +5 -5
- package/dist/web/standalone/node_modules/next/dist/compiled/jsonwebtoken/index.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/compiled/next-devtools/index.js +2209 -23
- package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-page-experimental.runtime.prod.js +42 -12
- package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +42 -12
- package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +42 -12
- package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js +42 -12
- package/dist/web/standalone/node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +10 -10
- package/dist/web/standalone/node_modules/next/dist/compiled/next-server/pages.runtime.prod.js +10 -10
- package/dist/web/standalone/node_modules/next/dist/compiled/react-is/package.json +1 -1
- package/dist/web/standalone/node_modules/next/dist/compiled/tar/index.min.js +1 -0
- package/dist/web/standalone/node_modules/next/dist/compiled/tar/package.json +1 -1
- package/dist/web/standalone/node_modules/next/dist/compiled/unistore/unistore.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/lib/bundler.js +97 -0
- package/dist/web/standalone/node_modules/next/dist/lib/constants.js +19 -4
- package/dist/web/standalone/node_modules/next/dist/lib/download-swc.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/lib/find-root.js +11 -7
- package/dist/web/standalone/node_modules/next/dist/lib/format-server-error.js +1 -0
- package/dist/web/standalone/node_modules/next/dist/lib/generate-interception-routes-rewrites.js +3 -20
- package/dist/web/standalone/node_modules/next/dist/lib/interop-default.js +1 -0
- package/dist/web/standalone/node_modules/next/dist/lib/is-interception-route-rewrite.js +18 -0
- package/dist/web/standalone/node_modules/next/dist/lib/load-custom-routes.js +49 -5
- package/dist/web/standalone/node_modules/next/dist/lib/memory/trace.js +109 -0
- package/dist/web/standalone/node_modules/next/dist/lib/metadata/get-metadata-route.js +11 -2
- package/dist/web/standalone/node_modules/next/dist/lib/needs-experimental-react.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +5 -5
- package/dist/web/standalone/node_modules/next/dist/lib/try-to-parse-path.js +1 -2
- package/dist/web/standalone/node_modules/next/dist/lib/turbopack-warning.js +0 -1
- package/dist/web/standalone/node_modules/next/dist/lib/typescript/diagnosticFormatter.js +6 -3
- package/dist/web/standalone/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js +81 -1
- package/dist/web/standalone/node_modules/next/dist/lib/typescript/missingDependencyError.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/lib/typescript/runTypeCheck.js +6 -8
- package/dist/web/standalone/node_modules/next/dist/lib/typescript/type-paths.js +7 -12
- package/dist/web/standalone/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js +17 -7
- package/dist/web/standalone/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js +33 -32
- package/dist/web/standalone/node_modules/next/dist/lib/verify-typescript-setup.js +66 -16
- package/dist/web/standalone/node_modules/next/dist/next-devtools/server/shared.js +6 -10
- package/dist/web/standalone/node_modules/next/dist/next-devtools/shared/webpack-module-path.js +4 -4
- package/dist/web/standalone/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js +22 -4
- package/dist/web/standalone/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js +7 -1
- package/dist/web/standalone/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js +18 -13
- package/dist/web/standalone/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js +7 -4
- package/dist/web/standalone/node_modules/next/dist/server/app-render/action-handler.js +83 -15
- package/dist/web/standalone/node_modules/next/dist/server/app-render/app-render-prerender-utils.js +0 -82
- package/dist/web/standalone/node_modules/next/dist/server/app-render/app-render-render-utils.js +45 -81
- package/dist/web/standalone/node_modules/next/dist/server/app-render/app-render.js +1746 -803
- package/dist/web/standalone/node_modules/next/dist/server/app-render/create-component-tree.js +136 -50
- package/dist/web/standalone/node_modules/next/dist/server/app-render/create-error-handler.js +6 -4
- package/dist/web/standalone/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js +52 -26
- package/dist/web/standalone/node_modules/next/dist/server/app-render/csrf-protection.js +14 -3
- package/dist/web/standalone/node_modules/next/dist/server/app-render/debug-channel-server.js +30 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/debug-channel-server.web.js +71 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/dynamic-rendering.js +353 -37
- package/dist/web/standalone/node_modules/next/dist/server/app-render/get-asset-query-string.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/server/app-render/get-layer-assets.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js +13 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js +18 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/instant-config.js +181 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/instant-samples-client.js +128 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/instant-samples.js +432 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.js +33 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/instant-validation/stream-utils.js +96 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/manifests-singleton.js +8 -1
- package/dist/web/standalone/node_modules/next/dist/server/app-render/postponed-state.js +2 -1
- package/dist/web/standalone/node_modules/next/dist/server/app-render/prospective-render-utils.js +1 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/segment-explorer-path.js +35 -10
- package/dist/web/standalone/node_modules/next/dist/server/app-render/staged-rendering.js +142 -72
- package/dist/web/standalone/node_modules/next/dist/server/app-render/stale-time.js +111 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/stream-ops.js +106 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/stream-ops.web.js +163 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/types.js +10 -4
- package/dist/web/standalone/node_modules/next/dist/server/app-render/use-flight-response.js +3 -1
- package/dist/web/standalone/node_modules/next/dist/server/app-render/vary-params.js +336 -0
- package/dist/web/standalone/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js +59 -12
- package/dist/web/standalone/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js +54 -26
- package/dist/web/standalone/node_modules/next/dist/server/async-storage/request-store.js +4 -4
- package/dist/web/standalone/node_modules/next/dist/server/async-storage/work-store.js +2 -5
- package/dist/web/standalone/node_modules/next/dist/server/base-server.js +65 -53
- package/dist/web/standalone/node_modules/next/dist/server/config-schema.js +94 -8
- package/dist/web/standalone/node_modules/next/dist/server/config-shared.js +57 -7
- package/dist/web/standalone/node_modules/next/dist/server/config.js +96 -25
- package/dist/web/standalone/node_modules/next/dist/server/dev/browser-logs/file-logger.js +9 -6
- package/dist/web/standalone/node_modules/next/dist/server/dev/browser-logs/receive-logs.js +46 -0
- package/dist/web/standalone/node_modules/next/dist/server/dev/browser-logs/source-map.js +1 -4
- package/dist/web/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +266 -33
- package/dist/web/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +8 -4
- package/dist/web/standalone/node_modules/next/dist/server/dev/log-requests.js +10 -2
- package/dist/web/standalone/node_modules/next/dist/server/dev/middleware-turbopack.js +20 -10
- package/dist/web/standalone/node_modules/next/dist/server/dev/middleware-webpack.js +13 -3
- package/dist/web/standalone/node_modules/next/dist/server/dev/next-dev-server.js +19 -6
- package/dist/web/standalone/node_modules/next/dist/server/dev/on-demand-entry-handler.js +69 -0
- package/dist/web/standalone/node_modules/next/dist/server/dev/require-cache.js +51 -21
- package/dist/web/standalone/node_modules/next/dist/server/dev/server-action-logger.js +37 -0
- package/dist/web/standalone/node_modules/next/dist/server/dev/static-paths-worker.js +1 -0
- package/dist/web/standalone/node_modules/next/dist/server/dev/turbopack-utils.js +6 -15
- package/dist/web/standalone/node_modules/next/dist/server/dynamic-rendering-utils.js +22 -0
- package/dist/web/standalone/node_modules/next/dist/server/image-optimizer.js +157 -27
- package/dist/web/standalone/node_modules/next/dist/server/lib/app-info-log.js +16 -38
- package/dist/web/standalone/node_modules/next/dist/server/lib/cache-control.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/server/lib/clone-response.js +16 -16
- package/dist/web/standalone/node_modules/next/dist/server/lib/cpu-profile.js +47 -16
- package/dist/web/standalone/node_modules/next/dist/server/lib/dev-bundler-service.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/server/lib/disk-lru-cache.external.js +57 -0
- package/dist/web/standalone/node_modules/next/dist/server/lib/find-page-file.js +27 -7
- package/dist/web/standalone/node_modules/next/dist/server/lib/implicit-tags.js +3 -3
- package/dist/web/standalone/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +5 -3
- package/dist/web/standalone/node_modules/next/dist/server/lib/incremental-cache/index.js +32 -10
- package/dist/web/standalone/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js +18 -1
- package/dist/web/standalone/node_modules/next/dist/server/lib/install-code-frame.js +22 -0
- package/dist/web/standalone/node_modules/next/dist/server/lib/lru-cache.js +9 -1
- package/dist/web/standalone/node_modules/next/dist/server/lib/patch-fetch.js +40 -7
- package/dist/web/standalone/node_modules/next/dist/server/lib/postponed-request-body.js +64 -0
- package/dist/web/standalone/node_modules/next/dist/server/lib/render-server.js +4 -1
- package/dist/web/standalone/node_modules/next/dist/server/lib/router-server.js +37 -13
- package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js +110 -0
- package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/filesystem.js +16 -15
- package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +32 -11
- package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/route-types-utils.js +3 -3
- package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.js +71 -71
- package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/typegen.js +247 -2
- package/dist/web/standalone/node_modules/next/dist/server/lib/server-ipc/utils.js +2 -1
- package/dist/web/standalone/node_modules/next/dist/server/lib/start-server.js +73 -39
- package/dist/web/standalone/node_modules/next/dist/server/lib/trace/tracer.js +11 -1
- package/dist/web/standalone/node_modules/next/dist/server/lib/utils.js +40 -11
- package/dist/web/standalone/node_modules/next/dist/server/load-components.js +2 -0
- package/dist/web/standalone/node_modules/next/dist/server/load-manifest.external.js +37 -17
- package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-errors.js +11 -4
- package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-logs.js +9 -3
- package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-page-metadata.js +52 -44
- package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-project-metadata.js +6 -2
- package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-routes.js +44 -79
- package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/get-server-action-by-id.js +12 -4
- package/dist/web/standalone/node_modules/next/dist/server/mcp/tools/utils/format-errors.js +62 -72
- package/dist/web/standalone/node_modules/next/dist/server/next-server.js +69 -99
- package/dist/web/standalone/node_modules/next/dist/server/next.js +3 -0
- package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js +61 -6
- package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/date.js +4 -4
- package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js +13 -6
- package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/{utils.js → io-utils.js} +14 -5
- package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/node-crypto.js +8 -8
- package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/process-error-handlers.js +91 -0
- package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/random.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/{unhandled-rejection.js → unhandled-rejection.external.js} +23 -4
- package/dist/web/standalone/node_modules/next/dist/server/node-environment-extensions/web-crypto.js +3 -3
- package/dist/web/standalone/node_modules/next/dist/server/node-environment.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.js +2 -1
- package/dist/web/standalone/node_modules/next/dist/server/patch-error-inspect.js +37 -20
- package/dist/web/standalone/node_modules/next/dist/server/render-result.js +9 -0
- package/dist/web/standalone/node_modules/next/dist/server/render.js +47 -44
- package/dist/web/standalone/node_modules/next/dist/server/require-hook.js +19 -8
- package/dist/web/standalone/node_modules/next/dist/server/response-cache/utils.js +1 -0
- package/dist/web/standalone/node_modules/next/dist/server/resume-data-cache/cache-store.js +35 -23
- package/dist/web/standalone/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js +16 -7
- package/dist/web/standalone/node_modules/next/dist/server/revalidation-utils.js +12 -7
- package/dist/web/standalone/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js +2 -1
- package/dist/web/standalone/node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js +4 -1
- package/dist/web/standalone/node_modules/next/dist/server/route-modules/app-page/module.js +31 -1
- package/dist/web/standalone/node_modules/next/dist/server/route-modules/app-page/normalize-request-url.js +25 -0
- package/dist/web/standalone/node_modules/next/dist/server/route-modules/pages/pages-handler.js +31 -8
- package/dist/web/standalone/node_modules/next/dist/server/route-modules/route-module.js +71 -18
- package/dist/web/standalone/node_modules/next/dist/server/stream-utils/encoded-tags.js +8 -0
- package/dist/web/standalone/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +239 -58
- package/dist/web/standalone/node_modules/next/dist/server/stream-utils/uint8array-helpers.js +7 -2
- package/dist/web/standalone/node_modules/next/dist/server/typescript/constant.js +1 -0
- package/dist/web/standalone/node_modules/next/dist/server/typescript/rules/config.js +14 -3
- package/dist/web/standalone/node_modules/next/dist/server/web/adapter.js +7 -3
- package/dist/web/standalone/node_modules/next/dist/server/web/next-url.js +6 -2
- package/dist/web/standalone/node_modules/next/dist/server/web/sandbox/sandbox.js +3 -0
- package/dist/web/standalone/node_modules/next/dist/shared/lib/app-router-types.js +30 -11
- package/dist/web/standalone/node_modules/next/dist/shared/lib/constants.js +7 -7
- package/dist/web/standalone/node_modules/next/dist/shared/lib/deployment-id.js +37 -10
- package/dist/web/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/shared/lib/errors/code-frame.js +20 -0
- package/dist/web/standalone/node_modules/next/dist/shared/lib/format-webpack-messages.js +22 -2
- package/dist/web/standalone/node_modules/next/dist/shared/lib/image-config.js +3 -1
- package/dist/web/standalone/node_modules/next/dist/shared/lib/is-internal.js +2 -0
- package/dist/web/standalone/node_modules/next/dist/shared/lib/magic-identifier.js +6 -6
- package/dist/web/standalone/node_modules/next/dist/shared/lib/router/router.js +32 -0
- package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/app-paths.js +11 -0
- package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +11 -4
- package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js +3 -2
- package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js +9 -2
- package/dist/web/standalone/node_modules/next/dist/shared/lib/router/utils/parse-url.js +8 -2
- package/dist/web/standalone/node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.js +32 -0
- package/dist/web/standalone/node_modules/next/dist/shared/lib/server-reference-info.js +4 -0
- package/dist/web/standalone/node_modules/next/dist/shared/lib/size-limit.js +6 -1
- package/dist/web/standalone/node_modules/next/dist/shared/lib/turbopack/compilation-events.js +47 -10
- package/dist/web/standalone/node_modules/next/dist/shared/lib/turbopack/manifest-loader.js +90 -116
- package/dist/web/standalone/node_modules/next/dist/shared/lib/turbopack/utils.js +14 -26
- package/dist/web/standalone/node_modules/next/dist/shared/lib/utils/reflect-utils.js +69 -0
- package/dist/web/standalone/node_modules/next/dist/shared/lib/utils.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/trace/index.js +4 -0
- package/dist/web/standalone/node_modules/next/dist/trace/report/to-json-build.js +11 -108
- package/dist/web/standalone/node_modules/next/dist/trace/report/to-json.js +52 -38
- package/dist/web/standalone/node_modules/next/dist/trace/trace.js +15 -1
- package/dist/web/standalone/node_modules/next/package.json +21 -23
- package/dist/web/standalone/node_modules/react/cjs/react.development.js +1284 -0
- package/dist/web/standalone/package.json +2 -2
- package/dist/web/standalone/server.js +1 -1
- package/package.json +1 -1
- package/packages/mcp-server/README.md +38 -0
- package/packages/mcp-server/src/server.ts +6 -2
- package/packages/mcp-server/src/workflow-tools.test.ts +976 -0
- package/packages/mcp-server/src/workflow-tools.ts +986 -0
- package/packages/pi-ai/dist/utils/event-stream.d.ts +2 -0
- package/packages/pi-ai/dist/utils/event-stream.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/event-stream.js +4 -0
- package/packages/pi-ai/dist/utils/event-stream.js.map +1 -1
- package/packages/pi-ai/src/utils/event-stream.ts +5 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +12 -2
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.d.ts +13 -0
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.js +27 -0
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.js.map +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +15 -2
- package/packages/pi-coding-agent/src/modes/interactive/provider-auth-setup.ts +40 -0
- package/src/resources/GSD-WORKFLOW.md +3 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +96 -44
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +211 -2
- package/src/resources/extensions/get-secrets-from-user.ts +20 -2
- package/src/resources/extensions/gsd/auto/phases.ts +25 -0
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +20 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +30 -1
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +22 -435
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -5
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +7 -72
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +18 -4
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +122 -6
- package/src/resources/extensions/gsd/codebase-generator.ts +261 -16
- package/src/resources/extensions/gsd/commands/catalog.ts +4 -3
- package/src/resources/extensions/gsd/commands/dispatcher.ts +1 -2
- package/src/resources/extensions/gsd/commands/handlers/core.ts +108 -2
- package/src/resources/extensions/gsd/commands-bootstrap.ts +10 -0
- package/src/resources/extensions/gsd/commands-codebase.ts +4 -3
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +38 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +4 -4
- package/src/resources/extensions/gsd/doctor-proactive.ts +3 -3
- package/src/resources/extensions/gsd/guided-flow.ts +24 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +3 -3
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -3
- package/src/resources/extensions/gsd/prompts/system.md +3 -0
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +7 -5
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +9 -2
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +25 -3
- package/src/resources/extensions/gsd/tests/update-command.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +301 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +625 -0
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +629 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +233 -0
- package/src/resources/extensions/gsd/workflow-reconcile.ts +0 -5
- package/src/resources/extensions/gsd/worktree-manager.ts +6 -2
- package/dist/web/standalone/.next/server/chunks/7471.js +0 -13
- package/dist/web/standalone/.next/static/FRT6f5ou3wPxpZ7ojoB7E/_buildManifest.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2008.817d0885545aaea9.js +0 -20
- package/dist/web/standalone/.next/static/chunks/3794-337d1ca25ad99a89.js +0 -2
- package/dist/web/standalone/.next/static/chunks/4bd1b696-e5d7c65570c947b7.js +0 -1
- package/dist/web/standalone/.next/static/chunks/framework-0675a4b5b92df616.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-cb72b7c5b8014fa5.js +0 -5
- package/dist/web/standalone/node_modules/next/dist/client/components/router-reducer/handle-mutable.js +0 -66
- package/dist/web/standalone/node_modules/next/dist/compiled/babel/code-frame.js +0 -1
- package/dist/web/standalone/node_modules/next/dist/compiled/babel-code-frame/index.js +0 -1
- package/dist/web/standalone/node_modules/next/dist/compiled/babel-code-frame/package.json +0 -1
- package/dist/web/standalone/node_modules/next/dist/compiled/tar/index.js +0 -1
- package/dist/web/standalone/node_modules/next/dist/server/app-render/staged-validation.js +0 -32
- package/dist/web/standalone/node_modules/next/dist/server/lib/router-utils/block-cross-site.js +0 -76
- package/dist/web/standalone/node_modules/next/dist/shared/lib/segment-cache/output-export-prefetch-encoding.js +0 -52
- package/dist/web/standalone/node_modules/typescript/lib/typescript.js +0 -198668
- package/dist/web/standalone/node_modules/typescript/package.json +0 -120
- /package/dist/web/standalone/.next/static/{FRT6f5ou3wPxpZ7ojoB7E → IBTC_HlEpTBAa4HXMoV_A}/_ssgManifest.js +0 -0
|
@@ -165,10 +165,10 @@ export function buildCategorySummaries(prefs: Record<string, unknown>): Record<s
|
|
|
165
165
|
const modeSummary = mode ?? "(not set)";
|
|
166
166
|
|
|
167
167
|
// Models
|
|
168
|
-
const models = prefs.models as Record<string,
|
|
168
|
+
const models = prefs.models as Record<string, unknown> | undefined;
|
|
169
169
|
let modelsSummary = "(not configured)";
|
|
170
170
|
if (models && Object.keys(models).length > 0) {
|
|
171
|
-
const parts = Object.entries(models).map(([phase, model]) => `${phase}: ${model}`);
|
|
171
|
+
const parts = Object.entries(models).map(([phase, model]) => `${phase}: ${formatConfiguredModel(model)}`);
|
|
172
172
|
modelsSummary = parts.join(", ");
|
|
173
173
|
}
|
|
174
174
|
|
|
@@ -255,9 +255,38 @@ export function buildCategorySummaries(prefs: Record<string, unknown>): Record<s
|
|
|
255
255
|
|
|
256
256
|
// ─── Category configuration functions ────────────────────────────────────────
|
|
257
257
|
|
|
258
|
+
export function formatConfiguredModel(config: unknown): string {
|
|
259
|
+
if (typeof config === "string") return config;
|
|
260
|
+
if (!config || typeof config !== "object") return "(invalid)";
|
|
261
|
+
const maybeConfig = config as { model?: unknown; provider?: unknown };
|
|
262
|
+
if (typeof maybeConfig.model !== "string" || maybeConfig.model.trim() === "") return "(invalid)";
|
|
263
|
+
if (typeof maybeConfig.provider === "string" && maybeConfig.provider && !maybeConfig.model.includes("/")) {
|
|
264
|
+
return `${maybeConfig.provider}/${maybeConfig.model}`;
|
|
265
|
+
}
|
|
266
|
+
return maybeConfig.model;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export function toPersistedModelId(provider: string, modelId: string): string {
|
|
270
|
+
if (!provider.trim()) return modelId;
|
|
271
|
+
const normalizedProvider = provider.trim();
|
|
272
|
+
const normalizedModelId = modelId.trim();
|
|
273
|
+
return normalizedModelId.startsWith(`${normalizedProvider}/`)
|
|
274
|
+
? normalizedModelId
|
|
275
|
+
: `${normalizedProvider}/${normalizedModelId}`;
|
|
276
|
+
}
|
|
277
|
+
|
|
258
278
|
async function configureModels(ctx: ExtensionCommandContext, prefs: Record<string, unknown>): Promise<void> {
|
|
259
|
-
const modelPhases = [
|
|
260
|
-
|
|
279
|
+
const modelPhases = [
|
|
280
|
+
"research",
|
|
281
|
+
"planning",
|
|
282
|
+
"discuss",
|
|
283
|
+
"execution",
|
|
284
|
+
"execution_simple",
|
|
285
|
+
"completion",
|
|
286
|
+
"validation",
|
|
287
|
+
"subagent",
|
|
288
|
+
] as const;
|
|
289
|
+
const models: Record<string, unknown> = (prefs.models as Record<string, unknown>) ?? {};
|
|
261
290
|
|
|
262
291
|
const availableModels = ctx.modelRegistry.getAvailable();
|
|
263
292
|
if (availableModels.length > 0) {
|
|
@@ -292,7 +321,7 @@ async function configureModels(ctx: ExtensionCommandContext, prefs: Record<strin
|
|
|
292
321
|
providerOptions.push("(keep current)", "(clear)", "(type manually)");
|
|
293
322
|
|
|
294
323
|
for (const phase of modelPhases) {
|
|
295
|
-
const current = models[phase]
|
|
324
|
+
const current = formatConfiguredModel(models[phase]);
|
|
296
325
|
const phaseLabel = `Model for ${phase} phase${current ? ` (current: ${current})` : ""}`;
|
|
297
326
|
|
|
298
327
|
// Step 1: pick provider
|
|
@@ -329,13 +358,13 @@ async function configureModels(ctx: ExtensionCommandContext, prefs: Record<strin
|
|
|
329
358
|
if (modelChoice === "(clear)") {
|
|
330
359
|
delete models[phase];
|
|
331
360
|
} else {
|
|
332
|
-
models[phase] = modelChoice;
|
|
361
|
+
models[phase] = toPersistedModelId(providerName, modelChoice);
|
|
333
362
|
}
|
|
334
363
|
}
|
|
335
364
|
}
|
|
336
365
|
} else {
|
|
337
366
|
for (const phase of modelPhases) {
|
|
338
|
-
const current = models[phase]
|
|
367
|
+
const current = formatConfiguredModel(models[phase]);
|
|
339
368
|
const input = await ctx.ui.input(
|
|
340
369
|
`Model for ${phase} phase${current ? ` (current: ${current})` : ""}:`,
|
|
341
370
|
current || "e.g. claude-sonnet-4-20250514",
|
|
@@ -352,6 +381,8 @@ async function configureModels(ctx: ExtensionCommandContext, prefs: Record<strin
|
|
|
352
381
|
}
|
|
353
382
|
if (Object.keys(models).length > 0) {
|
|
354
383
|
prefs.models = models;
|
|
384
|
+
} else {
|
|
385
|
+
delete prefs.models;
|
|
355
386
|
}
|
|
356
387
|
}
|
|
357
388
|
|
|
@@ -10,7 +10,7 @@ import { deriveState, isMilestoneComplete } from "./state.js";
|
|
|
10
10
|
import { listWorktrees, resolveGitDir, worktreesDir } from "./worktree-manager.js";
|
|
11
11
|
import { abortAndReset } from "./git-self-heal.js";
|
|
12
12
|
import { RUNTIME_EXCLUSION_PATHS, resolveMilestoneIntegrationBranch, writeIntegrationBranch } from "./git-service.js";
|
|
13
|
-
import { nativeIsRepo, nativeWorktreeList, nativeWorktreeRemove, nativeBranchList, nativeBranchDelete, nativeLsFiles, nativeRmCached, nativeHasChanges, nativeLastCommitEpoch, nativeGetCurrentBranch,
|
|
13
|
+
import { nativeIsRepo, nativeWorktreeList, nativeWorktreeRemove, nativeBranchList, nativeBranchDelete, nativeLsFiles, nativeRmCached, nativeHasChanges, nativeLastCommitEpoch, nativeGetCurrentBranch, nativeAddAllWithExclusions, nativeCommit } from "./native-git-bridge.js";
|
|
14
14
|
import { getAllWorktreeHealth } from "./worktree-health.js";
|
|
15
15
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
16
16
|
|
|
@@ -386,19 +386,19 @@ export async function checkGitHealth(
|
|
|
386
386
|
code: "stale_uncommitted_changes",
|
|
387
387
|
scope: "project",
|
|
388
388
|
unitId: "project",
|
|
389
|
-
message: `Uncommitted changes detected with no commit in ${mins} minute${mins === 1 ? "" : "s"} (threshold: ${thresholdMinutes}m). Snapshotting
|
|
389
|
+
message: `Uncommitted changes detected with no commit in ${mins} minute${mins === 1 ? "" : "s"} (threshold: ${thresholdMinutes}m). Snapshotting uncommitted changes.`,
|
|
390
390
|
fixable: true,
|
|
391
391
|
});
|
|
392
392
|
|
|
393
393
|
if (shouldFix("stale_uncommitted_changes")) {
|
|
394
394
|
try {
|
|
395
|
-
|
|
395
|
+
nativeAddAllWithExclusions(basePath, RUNTIME_EXCLUSION_PATHS);
|
|
396
396
|
const commitMsg = `gsd snapshot: uncommitted changes after ${mins}m inactivity`;
|
|
397
397
|
const result = nativeCommit(basePath, commitMsg);
|
|
398
398
|
if (result) {
|
|
399
399
|
fixesApplied.push(`created gsd snapshot after ${mins}m of uncommitted changes`);
|
|
400
400
|
} else {
|
|
401
|
-
fixesApplied.push("gsd snapshot skipped — nothing to commit after staging
|
|
401
|
+
fixesApplied.push("gsd snapshot skipped — nothing to commit after staging changes");
|
|
402
402
|
}
|
|
403
403
|
} catch {
|
|
404
404
|
fixesApplied.push("failed to create gsd snapshot commit");
|
|
@@ -21,8 +21,8 @@ import { readCrashLock, isLockProcessAlive, clearLock } from "./crash-recovery.j
|
|
|
21
21
|
import { abortAndReset } from "./git-self-heal.js";
|
|
22
22
|
import { rebuildState } from "./doctor.js";
|
|
23
23
|
import { deriveState } from "./state.js";
|
|
24
|
-
import { resolveMilestoneIntegrationBranch } from "./git-service.js";
|
|
25
|
-
import { nativeIsRepo, nativeHasChanges, nativeLastCommitEpoch, nativeGetCurrentBranch,
|
|
24
|
+
import { RUNTIME_EXCLUSION_PATHS, resolveMilestoneIntegrationBranch } from "./git-service.js";
|
|
25
|
+
import { nativeIsRepo, nativeHasChanges, nativeLastCommitEpoch, nativeGetCurrentBranch, nativeAddAllWithExclusions, nativeCommit } from "./native-git-bridge.js";
|
|
26
26
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
27
27
|
import { runEnvironmentChecks } from "./doctor-environment.js";
|
|
28
28
|
|
|
@@ -312,7 +312,7 @@ export async function preDispatchHealthGate(basePath: string): Promise<PreDispat
|
|
|
312
312
|
if (minutesSinceCommit >= thresholdMinutes) {
|
|
313
313
|
const mins = Math.floor(minutesSinceCommit);
|
|
314
314
|
try {
|
|
315
|
-
|
|
315
|
+
nativeAddAllWithExclusions(basePath, RUNTIME_EXCLUSION_PATHS);
|
|
316
316
|
const commitMsg = `gsd snapshot: pre-dispatch, uncommitted changes after ${mins}m inactivity`;
|
|
317
317
|
const result = nativeCommit(basePath, commitMsg);
|
|
318
318
|
if (result) {
|
|
@@ -40,6 +40,10 @@ import { findMilestoneIds, nextMilestoneId, reserveMilestoneId, getReservedMiles
|
|
|
40
40
|
import { parkMilestone, discardMilestone } from "./milestone-actions.js";
|
|
41
41
|
import { selectAndApplyModel } from "./auto-model-selection.js";
|
|
42
42
|
import { DISCUSS_TOOLS_ALLOWLIST } from "./constants.js";
|
|
43
|
+
import {
|
|
44
|
+
getWorkflowTransportSupportError,
|
|
45
|
+
getRequiredWorkflowToolsForGuidedUnit,
|
|
46
|
+
} from "./workflow-mcp.js";
|
|
43
47
|
import {
|
|
44
48
|
runPreparation,
|
|
45
49
|
formatCodebaseBrief,
|
|
@@ -318,6 +322,26 @@ async function dispatchWorkflow(
|
|
|
318
322
|
routing: result.routing,
|
|
319
323
|
});
|
|
320
324
|
}
|
|
325
|
+
|
|
326
|
+
const compatibilityError = getWorkflowTransportSupportError(
|
|
327
|
+
result.appliedModel?.provider ?? ctx.model?.provider,
|
|
328
|
+
getRequiredWorkflowToolsForGuidedUnit(unitType),
|
|
329
|
+
{
|
|
330
|
+
projectRoot: process.cwd(),
|
|
331
|
+
surface: "guided flow",
|
|
332
|
+
unitType,
|
|
333
|
+
authMode: result.appliedModel?.provider
|
|
334
|
+
? ctx.modelRegistry.getProviderAuthMode(result.appliedModel.provider)
|
|
335
|
+
: ctx.model?.provider
|
|
336
|
+
? ctx.modelRegistry.getProviderAuthMode(ctx.model.provider)
|
|
337
|
+
: undefined,
|
|
338
|
+
baseUrl: result.appliedModel?.baseUrl ?? ctx.model?.baseUrl,
|
|
339
|
+
},
|
|
340
|
+
);
|
|
341
|
+
if (compatibilityError) {
|
|
342
|
+
ctx.ui.notify(compatibilityError, "error");
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
321
345
|
}
|
|
322
346
|
|
|
323
347
|
// Scope tools for discuss flows (#2949).
|
|
@@ -25,11 +25,11 @@ Then:
|
|
|
25
25
|
4. If the slice plan includes observability/diagnostic surfaces, confirm they work. Skip this for simple slices that don't have observability sections.
|
|
26
26
|
5. If the slice involved runtime behavior, fill the **Operational Readiness** section (Q8) in the slice summary: health signal, failure signal, recovery procedure, and monitoring gaps. Omit entirely for simple slices with no runtime concerns.
|
|
27
27
|
6. If this slice produced evidence that a requirement changed status (Active → Validated, Active → Deferred, etc.), call `gsd_requirement_update` with the requirement ID, updated `status`, and `validation` evidence. Do NOT write `.gsd/REQUIREMENTS.md` directly — the engine renders it from the database.
|
|
28
|
-
7.
|
|
29
|
-
8.
|
|
28
|
+
7. Prepare the slice completion content you will pass to `gsd_complete_slice` using the camelCase fields `milestoneId`, `sliceId`, `sliceTitle`, `oneLiner`, `narrative`, `verification`, and `uatContent`. Do **not** manually write `{{sliceSummaryPath}}`. Do **not** manually write `{{sliceUatPath}}` — the DB-backed tool is the canonical write path for both artifacts.
|
|
29
|
+
8. Draft the UAT content you will pass as `uatContent` — a concrete UAT script with real test cases derived from the slice plan and task summaries. Include preconditions, numbered steps with expected outcomes, and edge cases. This must NOT be a placeholder or generic template — tailor every test case to what this slice actually built.
|
|
30
30
|
9. Review task summaries for `key_decisions`. Append any significant decisions to `.gsd/DECISIONS.md` if missing.
|
|
31
31
|
10. Review task summaries for patterns, gotchas, or non-obvious lessons learned. If any would save future agents from repeating investigation or hitting the same issues, append them to `.gsd/KNOWLEDGE.md`. Only add entries that are genuinely useful — don't pad with obvious observations.
|
|
32
|
-
11. Call `gsd_complete_slice` with milestoneId
|
|
32
|
+
11. Call `gsd_complete_slice` with the camelCase fields `milestoneId`, `sliceId`, `sliceTitle`, `oneLiner`, `narrative`, `verification`, and `uatContent`, plus any optional enrichment fields you have. Do NOT manually mark the roadmap checkbox — the tool writes to the DB, renders `{{sliceSummaryPath}}` and `{{sliceUatPath}}`, and updates the ROADMAP.md projection automatically.
|
|
33
33
|
12. Do not run git commands — the system commits your changes and handles any merge after this unit succeeds.
|
|
34
34
|
13. Update `.gsd/PROJECT.md` if it exists — refresh current state if needed: use the `write` tool with `path: ".gsd/PROJECT.md"` and `content` containing the full updated document reflecting current project state. Do NOT use the `edit` tool for this — PROJECT.md is a full-document refresh.
|
|
35
35
|
|
|
@@ -69,14 +69,14 @@ Then:
|
|
|
69
69
|
16. If you made an architectural, pattern, library, or observability decision during this task that downstream work should know about, append it to `.gsd/DECISIONS.md` (read the template at `~/.gsd/agent/extensions/gsd/templates/decisions.md` if the file doesn't exist yet). Not every task produces decisions — only append when a meaningful choice was made.
|
|
70
70
|
17. If you discover a non-obvious rule, recurring gotcha, or useful pattern during execution, append it to `.gsd/KNOWLEDGE.md`. Only add entries that would save future agents from repeating your investigation. Don't add obvious things.
|
|
71
71
|
18. Read the template at `~/.gsd/agent/extensions/gsd/templates/task-summary.md`
|
|
72
|
-
19.
|
|
73
|
-
20. Call `gsd_complete_task` with milestoneId, sliceId, taskId, and
|
|
72
|
+
19. Use that template to prepare the completion content you will pass to `gsd_complete_task` using the camelCase fields `milestoneId`, `sliceId`, `taskId`, `oneLiner`, `narrative`, `verification`, and `verificationEvidence`. Do **not** manually write `{{taskSummaryPath}}` — the DB-backed tool is the canonical write path and renders the summary file for you.
|
|
73
|
+
20. Call `gsd_complete_task` with milestoneId, sliceId, taskId, and the completion fields derived from the template. This is your final required step — do NOT manually edit PLAN.md checkboxes. The tool marks the task complete, updates the DB, renders `{{taskSummaryPath}}`, and updates PLAN.md automatically.
|
|
74
74
|
21. Do not run git commands — the system reads your task summary after completion and creates a meaningful commit from it (type inferred from title, message from your one-liner, key files from frontmatter). Write a clear, specific one-liner in the summary — it becomes the commit message.
|
|
75
75
|
|
|
76
76
|
All work stays in your working directory: `{{workingDirectory}}`.
|
|
77
77
|
|
|
78
78
|
**Autonomous execution:** Do not call `ask_user_questions` or `secure_env_collect`. You are running in auto-mode — there is no human available to answer questions. Make reasonable assumptions and document them in the task summary. If a decision genuinely requires human input, note it in the summary and proceed with the best available option.
|
|
79
79
|
|
|
80
|
-
**You MUST call `gsd_complete_task`
|
|
80
|
+
**You MUST call `gsd_complete_task` before finishing. Do not manually write `{{taskSummaryPath}}`.**
|
|
81
81
|
|
|
82
82
|
When done, say: "Task {{taskId}} complete."
|
|
@@ -62,6 +62,7 @@ Titles live inside file content (headings, frontmatter), not in file or director
|
|
|
62
62
|
REQUIREMENTS.md (requirement contract - tracks active/validated/deferred/out-of-scope)
|
|
63
63
|
DECISIONS.md (append-only register of architectural and pattern decisions)
|
|
64
64
|
KNOWLEDGE.md (append-only register of project-specific rules, patterns, and lessons learned)
|
|
65
|
+
CODEBASE.md (generated codebase map cache — auto-refreshed when tracked files change)
|
|
65
66
|
OVERRIDES.md (user-issued overrides that supersede plan content via /gsd steer)
|
|
66
67
|
QUEUE.md (append-only log of queued milestones via /gsd queue)
|
|
67
68
|
STATE.md
|
|
@@ -104,6 +105,7 @@ In all modes, slices commit sequentially on the active branch; there are no per-
|
|
|
104
105
|
- **REQUIREMENTS.md** tracks the requirement contract — requirements move between Active, Validated, Deferred, Blocked, and Out of Scope as slices prove or invalidate them. Update at slice completion when evidence supports a status change.
|
|
105
106
|
- **DECISIONS.md** is an append-only register of architectural and pattern decisions - read it during planning/research, append to it during execution when a meaningful decision is made
|
|
106
107
|
- **KNOWLEDGE.md** is an append-only register of project-specific rules, patterns, and lessons learned. Read it at the start of every unit. Append to it when you discover a recurring issue, a non-obvious pattern, or a rule that future agents should follow.
|
|
108
|
+
- **CODEBASE.md** is a generated structural cache of the tracked repository. GSD auto-refreshes it when tracked files change and injects it into system context when available. Use `/gsd codebase update` only when you need to force an immediate refresh.
|
|
107
109
|
- **CONTEXT.md** files (milestone or slice level) capture the brief — scope, goals, constraints, and key decisions from discussion. When present, they are the authoritative source for what a milestone or slice is trying to achieve. Read them before planning or executing.
|
|
108
110
|
- **Milestones** are major project phases (M001, M002, ...)
|
|
109
111
|
- **Slices** are demoable vertical increments (S01, S02, ...) ordered by risk. After each slice completes, the roadmap is reassessed before the next slice begins.
|
|
@@ -131,6 +133,7 @@ Templates showing the expected format for each artifact type are in:
|
|
|
131
133
|
- `/gsd status` - progress dashboard overlay
|
|
132
134
|
- `/gsd queue` - queue future milestones (safe while auto-mode is running)
|
|
133
135
|
- `/gsd quick <task>` - quick task with GSD guarantees (atomic commits, state tracking) but no milestone ceremony
|
|
136
|
+
- `/gsd codebase [generate|update|stats]` - manage the `.gsd/CODEBASE.md` cache used for prompt context
|
|
134
137
|
- `{{shortcutDashboard}}` - toggle dashboard overlay
|
|
135
138
|
- `{{shortcutShell}}` - show shell processes
|
|
136
139
|
|
|
@@ -40,9 +40,9 @@ After all reviewers complete, aggregate their verdicts:
|
|
|
40
40
|
- If any reviewer says NEEDS-ATTENTION → overall verdict: `needs-attention`
|
|
41
41
|
- If any reviewer says FAIL → overall verdict: `needs-remediation`
|
|
42
42
|
|
|
43
|
-
### Step 3 —
|
|
43
|
+
### Step 3 — Persist Validation
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Prepare the validation content you will pass to `gsd_validate_milestone`. Do **not** manually write `{{validationPath}}` — the DB-backed tool is the canonical write path and renders the validation file for you.
|
|
46
46
|
|
|
47
47
|
```markdown
|
|
48
48
|
---
|
|
@@ -69,13 +69,15 @@ reviewers: 3
|
|
|
69
69
|
<if verdict is not pass: specific actions required>
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
+
Call `gsd_validate_milestone` with the camelCase fields `milestoneId`, `verdict`, `remediationRound`, `successCriteriaChecklist`, `sliceDeliveryAudit`, `crossSliceIntegration`, `requirementCoverage`, `verdictRationale`, and `remediationPlan` when needed. If you include verification-class analysis, pass it in `verificationClasses`.
|
|
73
|
+
|
|
72
74
|
**DB access safety:** Do NOT query `.gsd/gsd.db` directly via `sqlite3` or `node -e require('better-sqlite3')` — the engine owns the WAL connection. Use `gsd_milestone_status` to read milestone and slice state. All data you need is already inlined in the context above or accessible via the `gsd_*` tools. Direct DB access corrupts the WAL and bypasses tool-level validation.
|
|
73
75
|
|
|
74
76
|
If verdict is `needs-remediation`:
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
+
- Use `gsd_reassess_roadmap` to add the remediation slices instead of editing `{{roadmapPath}}` manually
|
|
78
|
+
- Those slices will be planned and executed before validation re-runs
|
|
77
79
|
|
|
78
|
-
**You MUST write `{{validationPath}}
|
|
80
|
+
**You MUST call `gsd_validate_milestone` before finishing. Do not manually write `{{validationPath}}`.**
|
|
79
81
|
|
|
80
82
|
**File system safety:** When scanning milestone directories for evidence, use `ls` or `find` to list directory contents first — never pass a directory path (e.g. `tasks/`, `slices/`) directly to the `read` tool. The `read` tool only accepts file paths, not directories.
|
|
81
83
|
|
|
@@ -8,11 +8,13 @@ import { execSync } from "node:child_process";
|
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
10
|
parseCodebaseMap,
|
|
11
|
+
parseCodebaseMapMetadata,
|
|
11
12
|
generateCodebaseMap,
|
|
12
13
|
updateCodebaseMap,
|
|
13
14
|
writeCodebaseMap,
|
|
14
15
|
readCodebaseMap,
|
|
15
16
|
getCodebaseMapStats,
|
|
17
|
+
ensureCodebaseMapFresh,
|
|
16
18
|
} from "../codebase-generator.ts";
|
|
17
19
|
|
|
18
20
|
// ─── Helpers ──────────────────────────────────────────────────────────────
|
|
@@ -212,6 +214,24 @@ test("generateCodebaseMap: preserves existing descriptions", () => {
|
|
|
212
214
|
}
|
|
213
215
|
});
|
|
214
216
|
|
|
217
|
+
test("generateCodebaseMap: writes freshness metadata comment", () => {
|
|
218
|
+
const base = makeTmpRepo();
|
|
219
|
+
try {
|
|
220
|
+
addFile(base, "src/main.ts");
|
|
221
|
+
|
|
222
|
+
const result = generateCodebaseMap(base);
|
|
223
|
+
const metadata = parseCodebaseMapMetadata(result.content);
|
|
224
|
+
|
|
225
|
+
assert.ok(metadata, "metadata comment should be present");
|
|
226
|
+
assert.equal(metadata?.fileCount, 1);
|
|
227
|
+
assert.equal(metadata?.truncated, false);
|
|
228
|
+
assert.equal(typeof metadata?.fingerprint, "string");
|
|
229
|
+
assert.ok(metadata?.generatedAt?.endsWith("Z"));
|
|
230
|
+
} finally {
|
|
231
|
+
cleanup(base);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
|
|
215
235
|
test("generateCodebaseMap: collapses large directories", () => {
|
|
216
236
|
const base = makeTmpRepo();
|
|
217
237
|
try {
|
|
@@ -571,3 +591,51 @@ test("updateCodebaseMap: respects excludePatterns option", () => {
|
|
|
571
591
|
cleanup(base);
|
|
572
592
|
}
|
|
573
593
|
});
|
|
594
|
+
|
|
595
|
+
test("ensureCodebaseMapFresh: generates CODEBASE.md when missing", () => {
|
|
596
|
+
const base = makeTmpRepo();
|
|
597
|
+
try {
|
|
598
|
+
addFile(base, "src/main.ts");
|
|
599
|
+
|
|
600
|
+
const result = ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
|
|
601
|
+
const written = readCodebaseMap(base);
|
|
602
|
+
|
|
603
|
+
assert.equal(result.status, "generated");
|
|
604
|
+
assert.ok(written?.includes("`src/main.ts`"));
|
|
605
|
+
} finally {
|
|
606
|
+
cleanup(base);
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
test("ensureCodebaseMapFresh: updates CODEBASE.md when tracked files change", () => {
|
|
611
|
+
const base = makeTmpRepo();
|
|
612
|
+
try {
|
|
613
|
+
addFile(base, "src/main.ts");
|
|
614
|
+
const initial = ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
|
|
615
|
+
assert.equal(initial.status, "generated");
|
|
616
|
+
|
|
617
|
+
addFile(base, "src/new.ts");
|
|
618
|
+
const refreshed = ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
|
|
619
|
+
const written = readCodebaseMap(base);
|
|
620
|
+
|
|
621
|
+
assert.equal(refreshed.status, "updated");
|
|
622
|
+
assert.equal(refreshed.reason, "files-changed");
|
|
623
|
+
assert.ok(written?.includes("`src/new.ts`"));
|
|
624
|
+
} finally {
|
|
625
|
+
cleanup(base);
|
|
626
|
+
}
|
|
627
|
+
});
|
|
628
|
+
|
|
629
|
+
test("ensureCodebaseMapFresh: returns fresh when metadata matches repository state", () => {
|
|
630
|
+
const base = makeTmpRepo();
|
|
631
|
+
try {
|
|
632
|
+
addFile(base, "src/main.ts");
|
|
633
|
+
ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
|
|
634
|
+
|
|
635
|
+
const refreshed = ensureCodebaseMapFresh(base, undefined, { ttlMs: 0, force: true });
|
|
636
|
+
assert.equal(refreshed.status, "fresh");
|
|
637
|
+
assert.equal(refreshed.fileCount, 1);
|
|
638
|
+
} finally {
|
|
639
|
+
cleanup(base);
|
|
640
|
+
}
|
|
641
|
+
});
|
|
@@ -100,6 +100,18 @@ steps: []
|
|
|
100
100
|
// ─── Catalog Registration ────────────────────────────────────────────────
|
|
101
101
|
|
|
102
102
|
describe("workflow catalog registration", () => {
|
|
103
|
+
it("model appears in TOP_LEVEL_SUBCOMMANDS", () => {
|
|
104
|
+
const entry = TOP_LEVEL_SUBCOMMANDS.find((c) => c.cmd === "model");
|
|
105
|
+
assert.ok(entry, "model should be in TOP_LEVEL_SUBCOMMANDS");
|
|
106
|
+
assert.match(entry!.desc, /session model/i);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it("getGsdArgumentCompletions('m') includes model", () => {
|
|
110
|
+
const completions = getGsdArgumentCompletions("m");
|
|
111
|
+
const labels = completions.map((c: any) => c.label);
|
|
112
|
+
assert.ok(labels.includes("model"), "should include model completion");
|
|
113
|
+
});
|
|
114
|
+
|
|
103
115
|
it("workflow appears in TOP_LEVEL_SUBCOMMANDS", () => {
|
|
104
116
|
const entry = TOP_LEVEL_SUBCOMMANDS.find((c) => c.cmd === "workflow");
|
|
105
117
|
assert.ok(entry, "workflow should be in TOP_LEVEL_SUBCOMMANDS");
|
|
@@ -42,3 +42,35 @@ test("show-config only falls back when ctx.ui.custom() is unavailable", async ()
|
|
|
42
42
|
assert.equal(fallbackCtx.notices.length, 1, "unavailable overlay triggers text fallback");
|
|
43
43
|
assert.match(fallbackCtx.notices[0]!.message, /GSD Configuration/);
|
|
44
44
|
});
|
|
45
|
+
|
|
46
|
+
test("model command resolves and persists exact provider-qualified selection", async () => {
|
|
47
|
+
const selectedModel = { provider: "openai", id: "gpt-5.4" };
|
|
48
|
+
let applied: typeof selectedModel | null = null;
|
|
49
|
+
const ctx = {
|
|
50
|
+
hasUI: true,
|
|
51
|
+
model: { provider: "anthropic", id: "claude-sonnet-4-6" },
|
|
52
|
+
modelRegistry: {
|
|
53
|
+
getAvailable: () => [
|
|
54
|
+
{ provider: "anthropic", id: "claude-sonnet-4-6" },
|
|
55
|
+
selectedModel,
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
ui: {
|
|
59
|
+
notify: (message: string, type?: string) => {
|
|
60
|
+
notices.push({ message, type });
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
} as any;
|
|
64
|
+
const notices: Array<{ message: string; type?: string }> = [];
|
|
65
|
+
const pi = {
|
|
66
|
+
setModel: async (model: typeof selectedModel) => {
|
|
67
|
+
applied = model;
|
|
68
|
+
return true;
|
|
69
|
+
},
|
|
70
|
+
} as any;
|
|
71
|
+
|
|
72
|
+
const handled = await handleCoreCommand("model openai/gpt-5.4", ctx, pi);
|
|
73
|
+
assert.equal(handled, true);
|
|
74
|
+
assert.deepEqual(applied, selectedModel);
|
|
75
|
+
assert.match(notices[0]!.message, /openai\/gpt-5\.4/);
|
|
76
|
+
});
|
|
@@ -77,6 +77,36 @@ describe('ensure-db-open', () => {
|
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
+
test('ensureDbOpen: explicit basePath opens target project without cwd override', async () => {
|
|
81
|
+
const tmpDir = makeTmpDir();
|
|
82
|
+
const gsdDir = path.join(tmpDir, '.gsd');
|
|
83
|
+
fs.mkdirSync(gsdDir, { recursive: true });
|
|
84
|
+
fs.writeFileSync(path.join(gsdDir, 'DECISIONS.md'), `# Decisions
|
|
85
|
+
|
|
86
|
+
| # | When | Scope | Decision | Choice | Rationale | Revisable |
|
|
87
|
+
|---|------|-------|----------|--------|-----------|-----------|
|
|
88
|
+
| D777 | M001 | architecture | Use explicit basePath | BasePath | Avoid cwd coupling | Yes |
|
|
89
|
+
`);
|
|
90
|
+
|
|
91
|
+
try {
|
|
92
|
+
closeDatabase();
|
|
93
|
+
} catch { /* ok */ }
|
|
94
|
+
|
|
95
|
+
const originalCwd = process.cwd();
|
|
96
|
+
try {
|
|
97
|
+
const { ensureDbOpen } = await import('../bootstrap/dynamic-tools.ts');
|
|
98
|
+
const result = await ensureDbOpen(tmpDir);
|
|
99
|
+
|
|
100
|
+
assert.ok(result === true, 'ensureDbOpen should honor explicit basePath');
|
|
101
|
+
assert.equal(process.cwd(), originalCwd, 'ensureDbOpen should not mutate process.cwd');
|
|
102
|
+
assert.ok(isDbAvailable(), 'DB should be available after explicit open');
|
|
103
|
+
assert.ok(getDecisionById('D777') !== null, 'explicit basePath DB should be opened');
|
|
104
|
+
} finally {
|
|
105
|
+
closeDatabase();
|
|
106
|
+
cleanupDir(tmpDir);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
80
110
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
81
111
|
// ensureDbOpen returns false when no .gsd/ exists
|
|
82
112
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -159,6 +189,42 @@ describe('ensure-db-open', () => {
|
|
|
159
189
|
}
|
|
160
190
|
});
|
|
161
191
|
|
|
192
|
+
test('ensureDbOpen: switches open database when basePath changes', async () => {
|
|
193
|
+
const firstDir = makeTmpDir();
|
|
194
|
+
const secondDir = makeTmpDir();
|
|
195
|
+
fs.mkdirSync(path.join(firstDir, '.gsd'), { recursive: true });
|
|
196
|
+
fs.mkdirSync(path.join(secondDir, '.gsd'), { recursive: true });
|
|
197
|
+
fs.writeFileSync(path.join(firstDir, '.gsd', 'DECISIONS.md'), `# Decisions
|
|
198
|
+
|
|
199
|
+
| # | When | Scope | Decision | Choice | Rationale | Revisable |
|
|
200
|
+
|---|------|-------|----------|--------|-----------|-----------|
|
|
201
|
+
| D101 | M001 | architecture | First DB | First | First rationale | Yes |
|
|
202
|
+
`);
|
|
203
|
+
fs.writeFileSync(path.join(secondDir, '.gsd', 'DECISIONS.md'), `# Decisions
|
|
204
|
+
|
|
205
|
+
| # | When | Scope | Decision | Choice | Rationale | Revisable |
|
|
206
|
+
|---|------|-------|----------|--------|-----------|-----------|
|
|
207
|
+
| D202 | M001 | architecture | Second DB | Second | Second rationale | Yes |
|
|
208
|
+
`);
|
|
209
|
+
|
|
210
|
+
try {
|
|
211
|
+
closeDatabase();
|
|
212
|
+
} catch { /* ok */ }
|
|
213
|
+
|
|
214
|
+
try {
|
|
215
|
+
const { ensureDbOpen } = await import('../bootstrap/dynamic-tools.ts');
|
|
216
|
+
assert.equal(await ensureDbOpen(firstDir), true);
|
|
217
|
+
assert.ok(getDecisionById('D101') !== null, 'first DB should be active');
|
|
218
|
+
assert.equal(await ensureDbOpen(secondDir), true);
|
|
219
|
+
assert.ok(getDecisionById('D202') !== null, 'second DB should be active after switch');
|
|
220
|
+
assert.equal(getDecisionById('D101'), null, 'first DB should no longer be active after switch');
|
|
221
|
+
} finally {
|
|
222
|
+
closeDatabase();
|
|
223
|
+
cleanupDir(firstDir);
|
|
224
|
+
cleanupDir(secondDir);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
|
|
162
228
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
163
229
|
|
|
164
230
|
});
|
|
@@ -661,9 +661,10 @@ describe('doctor-git', async () => {
|
|
|
661
661
|
env: { ...process.env, GIT_COMMITTER_DATE: pastDate },
|
|
662
662
|
});
|
|
663
663
|
|
|
664
|
-
// Modify
|
|
665
|
-
//
|
|
664
|
+
// Modify a tracked file and create a new untracked file. The snapshot
|
|
665
|
+
// must preserve both, not just tracked changes.
|
|
666
666
|
writeFileSync(join(dir, "README.md"), "# test\nmodified content\n");
|
|
667
|
+
writeFileSync(join(dir, "new-untracked.ts"), "export const preserved = true;\n");
|
|
667
668
|
|
|
668
669
|
const detect = await runGSDDoctor(dir);
|
|
669
670
|
const staleIssues = detect.issues.filter(i => i.code === "stale_uncommitted_changes");
|
|
@@ -681,6 +682,12 @@ describe('doctor-git', async () => {
|
|
|
681
682
|
// Verify the snapshot commit was created with the gsd snapshot tag
|
|
682
683
|
const log = run("git log -1 --oneline", dir);
|
|
683
684
|
assert.ok(log.includes("gsd snapshot"), "commit is tagged with gsd snapshot");
|
|
685
|
+
|
|
686
|
+
const files = run("git show --name-only --format= HEAD", dir);
|
|
687
|
+
assert.ok(files.includes("README.md"), "snapshot keeps tracked modifications");
|
|
688
|
+
assert.ok(files.includes("new-untracked.ts"), "snapshot also includes new untracked files");
|
|
689
|
+
const status = run("git status --short", dir);
|
|
690
|
+
assert.ok(!status.includes("new-untracked.ts"), "snapshot does not leave the new source file untracked");
|
|
684
691
|
});
|
|
685
692
|
|
|
686
693
|
// ─── Test: stale_uncommitted_changes NOT flagged when recent commit ──
|
|
@@ -219,6 +219,39 @@ describe('doctor-proactive', async () => {
|
|
|
219
219
|
assert.ok(result.fixesApplied.some((f: string) => f.includes("STATE.md")), "reports STATE.md status as info");
|
|
220
220
|
});
|
|
221
221
|
|
|
222
|
+
test('health gate: pre-dispatch snapshot includes new untracked files', async () => {
|
|
223
|
+
const dir = createRepoWithActiveMilestone();
|
|
224
|
+
cleanups.push(dir);
|
|
225
|
+
|
|
226
|
+
const pastDate = new Date(Date.now() - 45 * 60 * 1000).toISOString();
|
|
227
|
+
run(`git commit --amend --no-edit --date="${pastDate}"`, dir);
|
|
228
|
+
execSync(`git commit --amend --no-edit`, {
|
|
229
|
+
cwd: dir,
|
|
230
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
231
|
+
encoding: "utf-8",
|
|
232
|
+
env: { ...process.env, GIT_COMMITTER_DATE: pastDate },
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
writeFileSync(join(dir, "README.md"), "# test\nmodified content\n");
|
|
236
|
+
writeFileSync(join(dir, "new-untracked.ts"), "export const preserved = true;\n");
|
|
237
|
+
|
|
238
|
+
const result = await preDispatchHealthGate(dir);
|
|
239
|
+
assert.ok(result.proceed, "dispatch still proceeds after snapshotting");
|
|
240
|
+
assert.ok(
|
|
241
|
+
result.fixesApplied.some((f: string) => f.includes("gsd snapshot")),
|
|
242
|
+
"pre-dispatch gate creates a snapshot commit",
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
const log = run("git log -1 --oneline", dir);
|
|
246
|
+
assert.ok(log.includes("gsd snapshot"), "snapshot commit is created");
|
|
247
|
+
|
|
248
|
+
const files = run("git show --name-only --format= HEAD", dir);
|
|
249
|
+
assert.ok(files.includes("README.md"), "snapshot keeps tracked modifications");
|
|
250
|
+
assert.ok(files.includes("new-untracked.ts"), "snapshot also includes new untracked files");
|
|
251
|
+
const status = run("git status --short", dir);
|
|
252
|
+
assert.ok(!status.includes("new-untracked.ts"), "snapshot does not leave the new source file untracked");
|
|
253
|
+
});
|
|
254
|
+
|
|
222
255
|
test('health gate: stale crash lock auto-cleared', async () => {
|
|
223
256
|
const dir = realpathSync(mkdtempSync(join(tmpdir(), "doc-proactive-")));
|
|
224
257
|
cleanups.push(dir);
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
parsePreferencesMarkdown,
|
|
18
18
|
_resetParseWarningFlag,
|
|
19
19
|
} from "../preferences.ts";
|
|
20
|
+
import { formatConfiguredModel, toPersistedModelId } from "../commands-prefs-wizard.ts";
|
|
20
21
|
import { _resetLogs, peekLogs } from "../workflow-logger.ts";
|
|
21
22
|
import type { GSDPreferences, GSDModelConfigV2, GSDPhaseModelConfig } from "../preferences.ts";
|
|
22
23
|
|
|
@@ -347,6 +348,22 @@ test("handles model config with explicit provider field", () => {
|
|
|
347
348
|
assert.equal(execution.provider, "bedrock");
|
|
348
349
|
});
|
|
349
350
|
|
|
351
|
+
test("formatConfiguredModel renders provider-qualified object config", () => {
|
|
352
|
+
assert.equal(
|
|
353
|
+
formatConfiguredModel({ model: "claude-opus-4-6", provider: "bedrock" }),
|
|
354
|
+
"bedrock/claude-opus-4-6",
|
|
355
|
+
);
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
test("toPersistedModelId prefixes provider chosen in prefs wizard", () => {
|
|
359
|
+
assert.equal(toPersistedModelId("openai", "gpt-5.4"), "openai/gpt-5.4");
|
|
360
|
+
assert.equal(
|
|
361
|
+
toPersistedModelId("openai", "openai/gpt-5.4"),
|
|
362
|
+
"openai/gpt-5.4",
|
|
363
|
+
"already-qualified IDs should be preserved",
|
|
364
|
+
);
|
|
365
|
+
});
|
|
366
|
+
|
|
350
367
|
test("handles empty models config", () => {
|
|
351
368
|
const prefs = parsePreferencesMarkdown("---\nversion: 1\n---\n");
|
|
352
369
|
assert.notEqual(prefs, null);
|