gsd-pi 2.67.0-dev.43b0159 → 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 +2 -2
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -0
- 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/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/system.md +3 -0
- 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 +19 -19
- 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 +6 -6
- 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 +19 -19
- 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/{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-65f0501b197d1c49.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 +2 -2
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -0
- 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/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/system.md +3 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +68 -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/prompt-contracts.test.ts +7 -0
- 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/CrKrzIIxk55witDF1eS0L/_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/{CrKrzIIxk55witDF1eS0L → IBTC_HlEpTBAa4HXMoV_A}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
1
3
|
const MILESTONE_CONTEXT_RE = /M\d+(?:-[a-z0-9]{6})?-CONTEXT\.md$/;
|
|
2
4
|
const CONTEXT_MILESTONE_RE = /(?:^|[/\\])(M\d+(?:-[a-z0-9]{6})?)-CONTEXT\.md$/i;
|
|
3
5
|
const DEPTH_VERIFICATION_MILESTONE_RE = /depth_verification[_-](M\d+(?:-[a-z0-9]{6})?)/i;
|
|
@@ -57,6 +59,61 @@ const GATE_SAFE_TOOLS = new Set([
|
|
|
57
59
|
"search-the-web", "resolve_library", "get_library_docs", "fetch_page",
|
|
58
60
|
"search_and_read",
|
|
59
61
|
]);
|
|
62
|
+
function shouldPersistWriteGateSnapshot(env = process.env) {
|
|
63
|
+
return env.GSD_PERSIST_WRITE_GATE_STATE === "1";
|
|
64
|
+
}
|
|
65
|
+
function writeGateSnapshotPath(basePath = process.cwd()) {
|
|
66
|
+
return join(basePath, ".gsd", "runtime", "write-gate-state.json");
|
|
67
|
+
}
|
|
68
|
+
function currentWriteGateSnapshot() {
|
|
69
|
+
return {
|
|
70
|
+
verifiedDepthMilestones: [...verifiedDepthMilestones].sort(),
|
|
71
|
+
activeQueuePhase,
|
|
72
|
+
pendingGateId,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function persistWriteGateSnapshot(basePath = process.cwd()) {
|
|
76
|
+
if (!shouldPersistWriteGateSnapshot())
|
|
77
|
+
return;
|
|
78
|
+
const path = writeGateSnapshotPath(basePath);
|
|
79
|
+
mkdirSync(join(basePath, ".gsd", "runtime"), { recursive: true });
|
|
80
|
+
const tempPath = `${path}.tmp`;
|
|
81
|
+
writeFileSync(tempPath, JSON.stringify(currentWriteGateSnapshot(), null, 2), "utf-8");
|
|
82
|
+
renameSync(tempPath, path);
|
|
83
|
+
}
|
|
84
|
+
function clearPersistedWriteGateSnapshot(basePath = process.cwd()) {
|
|
85
|
+
if (!shouldPersistWriteGateSnapshot())
|
|
86
|
+
return;
|
|
87
|
+
const path = writeGateSnapshotPath(basePath);
|
|
88
|
+
try {
|
|
89
|
+
unlinkSync(path);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// swallow
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function normalizeWriteGateSnapshot(value) {
|
|
96
|
+
const record = value && typeof value === "object" ? value : {};
|
|
97
|
+
const verified = Array.isArray(record.verifiedDepthMilestones)
|
|
98
|
+
? record.verifiedDepthMilestones.filter((item) => typeof item === "string")
|
|
99
|
+
: [];
|
|
100
|
+
return {
|
|
101
|
+
verifiedDepthMilestones: [...new Set(verified)].sort(),
|
|
102
|
+
activeQueuePhase: record.activeQueuePhase === true,
|
|
103
|
+
pendingGateId: typeof record.pendingGateId === "string" ? record.pendingGateId : null,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export function loadWriteGateSnapshot(basePath = process.cwd()) {
|
|
107
|
+
const path = writeGateSnapshotPath(basePath);
|
|
108
|
+
if (!existsSync(path))
|
|
109
|
+
return currentWriteGateSnapshot();
|
|
110
|
+
try {
|
|
111
|
+
return normalizeWriteGateSnapshot(JSON.parse(readFileSync(path, "utf-8")));
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return currentWriteGateSnapshot();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
60
117
|
export function isDepthVerified() {
|
|
61
118
|
return verifiedDepthMilestones.size > 0;
|
|
62
119
|
}
|
|
@@ -68,25 +125,34 @@ export function isMilestoneDepthVerified(milestoneId) {
|
|
|
68
125
|
return false;
|
|
69
126
|
return verifiedDepthMilestones.has(milestoneId);
|
|
70
127
|
}
|
|
128
|
+
export function isMilestoneDepthVerifiedInSnapshot(snapshot, milestoneId) {
|
|
129
|
+
if (!milestoneId)
|
|
130
|
+
return false;
|
|
131
|
+
return snapshot.verifiedDepthMilestones.includes(milestoneId);
|
|
132
|
+
}
|
|
71
133
|
export function isQueuePhaseActive() {
|
|
72
134
|
return activeQueuePhase;
|
|
73
135
|
}
|
|
74
136
|
export function setQueuePhaseActive(active) {
|
|
75
137
|
activeQueuePhase = active;
|
|
138
|
+
persistWriteGateSnapshot();
|
|
76
139
|
}
|
|
77
140
|
export function resetWriteGateState() {
|
|
78
141
|
verifiedDepthMilestones.clear();
|
|
79
142
|
pendingGateId = null;
|
|
143
|
+
persistWriteGateSnapshot();
|
|
80
144
|
}
|
|
81
145
|
export function clearDiscussionFlowState() {
|
|
82
146
|
verifiedDepthMilestones.clear();
|
|
83
147
|
activeQueuePhase = false;
|
|
84
148
|
pendingGateId = null;
|
|
149
|
+
clearPersistedWriteGateSnapshot();
|
|
85
150
|
}
|
|
86
|
-
export function markDepthVerified(milestoneId) {
|
|
151
|
+
export function markDepthVerified(milestoneId, basePath = process.cwd()) {
|
|
87
152
|
if (!milestoneId)
|
|
88
153
|
return;
|
|
89
154
|
verifiedDepthMilestones.add(milestoneId);
|
|
155
|
+
persistWriteGateSnapshot(basePath);
|
|
90
156
|
}
|
|
91
157
|
/**
|
|
92
158
|
* Check whether a question ID matches a recognized gate pattern.
|
|
@@ -114,12 +180,14 @@ function extractContextMilestoneId(inputPath) {
|
|
|
114
180
|
*/
|
|
115
181
|
export function setPendingGate(gateId) {
|
|
116
182
|
pendingGateId = gateId;
|
|
183
|
+
persistWriteGateSnapshot();
|
|
117
184
|
}
|
|
118
185
|
/**
|
|
119
186
|
* Clear the pending gate (called when the user confirms).
|
|
120
187
|
*/
|
|
121
188
|
export function clearPendingGate() {
|
|
122
189
|
pendingGateId = null;
|
|
190
|
+
persistWriteGateSnapshot();
|
|
123
191
|
}
|
|
124
192
|
/**
|
|
125
193
|
* Get the currently pending gate, if any.
|
|
@@ -134,8 +202,11 @@ export function getPendingGate() {
|
|
|
134
202
|
* Returns { block: true, reason } if the tool should be blocked.
|
|
135
203
|
* Read-only tools and ask_user_questions itself are always allowed.
|
|
136
204
|
*/
|
|
137
|
-
export function shouldBlockPendingGate(toolName,
|
|
138
|
-
|
|
205
|
+
export function shouldBlockPendingGate(toolName, milestoneId, queuePhaseActive) {
|
|
206
|
+
return shouldBlockPendingGateInSnapshot(currentWriteGateSnapshot(), toolName, milestoneId, queuePhaseActive);
|
|
207
|
+
}
|
|
208
|
+
export function shouldBlockPendingGateInSnapshot(snapshot, toolName, _milestoneId, _queuePhaseActive) {
|
|
209
|
+
if (!snapshot.pendingGateId)
|
|
139
210
|
return { block: false };
|
|
140
211
|
if (GATE_SAFE_TOOLS.has(toolName))
|
|
141
212
|
return { block: false };
|
|
@@ -145,7 +216,7 @@ export function shouldBlockPendingGate(toolName, _milestoneId, _queuePhaseActive
|
|
|
145
216
|
return {
|
|
146
217
|
block: true,
|
|
147
218
|
reason: [
|
|
148
|
-
`HARD BLOCK: Discussion gate "${pendingGateId}" has not been confirmed by the user.`,
|
|
219
|
+
`HARD BLOCK: Discussion gate "${snapshot.pendingGateId}" has not been confirmed by the user.`,
|
|
149
220
|
`You MUST re-call ask_user_questions with the gate question before making any other tool calls.`,
|
|
150
221
|
`If the previous ask_user_questions call failed, errored, was cancelled, or the user's response`,
|
|
151
222
|
`did not match a provided option, you MUST re-ask — never rationalize past the block.`,
|
|
@@ -157,8 +228,11 @@ export function shouldBlockPendingGate(toolName, _milestoneId, _queuePhaseActive
|
|
|
157
228
|
* Check whether a bash command should be blocked because a discussion gate is pending.
|
|
158
229
|
* Read-only bash commands are allowed; mutating commands are blocked.
|
|
159
230
|
*/
|
|
160
|
-
export function shouldBlockPendingGateBash(command,
|
|
161
|
-
|
|
231
|
+
export function shouldBlockPendingGateBash(command, milestoneId, queuePhaseActive) {
|
|
232
|
+
return shouldBlockPendingGateBashInSnapshot(currentWriteGateSnapshot(), command, milestoneId, queuePhaseActive);
|
|
233
|
+
}
|
|
234
|
+
export function shouldBlockPendingGateBashInSnapshot(snapshot, command, _milestoneId, _queuePhaseActive) {
|
|
235
|
+
if (!snapshot.pendingGateId)
|
|
162
236
|
return { block: false };
|
|
163
237
|
// Allow read-only bash commands
|
|
164
238
|
if (BASH_READ_ONLY_RE.test(command))
|
|
@@ -166,7 +240,7 @@ export function shouldBlockPendingGateBash(command, _milestoneId, _queuePhaseAct
|
|
|
166
240
|
return {
|
|
167
241
|
block: true,
|
|
168
242
|
reason: [
|
|
169
|
-
`HARD BLOCK: Discussion gate "${pendingGateId}" has not been confirmed by the user.`,
|
|
243
|
+
`HARD BLOCK: Discussion gate "${snapshot.pendingGateId}" has not been confirmed by the user.`,
|
|
170
244
|
`You MUST re-call ask_user_questions with the gate question before running mutating commands.`,
|
|
171
245
|
`If the previous ask_user_questions call failed, errored, was cancelled, or the user's response`,
|
|
172
246
|
`did not match a provided option, you MUST re-ask — never rationalize past the block.`,
|
|
@@ -232,6 +306,9 @@ export function shouldBlockContextWrite(toolName, inputPath, milestoneId, _queue
|
|
|
232
306
|
* require the milestone to be depth-verified first.
|
|
233
307
|
*/
|
|
234
308
|
export function shouldBlockContextArtifactSave(artifactType, milestoneId, sliceId) {
|
|
309
|
+
return shouldBlockContextArtifactSaveInSnapshot(currentWriteGateSnapshot(), artifactType, milestoneId, sliceId);
|
|
310
|
+
}
|
|
311
|
+
export function shouldBlockContextArtifactSaveInSnapshot(snapshot, artifactType, milestoneId, sliceId) {
|
|
235
312
|
if (artifactType !== "CONTEXT")
|
|
236
313
|
return { block: false };
|
|
237
314
|
if (sliceId)
|
|
@@ -245,7 +322,7 @@ export function shouldBlockContextArtifactSave(artifactType, milestoneId, sliceI
|
|
|
245
322
|
].join(" "),
|
|
246
323
|
};
|
|
247
324
|
}
|
|
248
|
-
if (
|
|
325
|
+
if (isMilestoneDepthVerifiedInSnapshot(snapshot, milestoneId))
|
|
249
326
|
return { block: false };
|
|
250
327
|
return {
|
|
251
328
|
block: true,
|
|
@@ -271,6 +348,9 @@ export function shouldBlockContextArtifactSave(artifactType, milestoneId, sliceI
|
|
|
271
348
|
* @returns { block, reason } — block=true if the call should be rejected.
|
|
272
349
|
*/
|
|
273
350
|
export function shouldBlockQueueExecution(toolName, input, queuePhaseActive) {
|
|
351
|
+
return shouldBlockQueueExecutionInSnapshot(currentWriteGateSnapshot(), toolName, input, queuePhaseActive);
|
|
352
|
+
}
|
|
353
|
+
export function shouldBlockQueueExecutionInSnapshot(snapshot, toolName, input, queuePhaseActive = snapshot.activeQueuePhase) {
|
|
274
354
|
if (!queuePhaseActive)
|
|
275
355
|
return { block: false };
|
|
276
356
|
// Always-safe tools (read-only, discussion, planning)
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* Generation: walk `git ls-files`, group by directory, output with descriptions.
|
|
8
8
|
* Maintenance: agent updates descriptions as it works; incremental update preserves them.
|
|
9
9
|
*/
|
|
10
|
+
import { createHash } from "node:crypto";
|
|
10
11
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
11
12
|
import { join, dirname, extname } from "node:path";
|
|
12
13
|
import { execSync } from "node:child_process";
|
|
@@ -31,6 +32,10 @@ const DEFAULT_EXCLUDES = [
|
|
|
31
32
|
];
|
|
32
33
|
const DEFAULT_MAX_FILES = 500;
|
|
33
34
|
const DEFAULT_COLLAPSE_THRESHOLD = 20;
|
|
35
|
+
const DEFAULT_REFRESH_TTL_MS = 30_000;
|
|
36
|
+
const DEFAULT_MAX_AGE_MS = 15 * 60_000;
|
|
37
|
+
const CODEBASE_METADATA_PREFIX = "<!-- gsd:codebase-meta ";
|
|
38
|
+
const freshnessCache = new Map();
|
|
34
39
|
// ─── Parsing ─────────────────────────────────────────────────────────────────
|
|
35
40
|
/**
|
|
36
41
|
* Parse an existing CODEBASE.md to extract file → description mappings.
|
|
@@ -66,6 +71,31 @@ export function parseCodebaseMap(content) {
|
|
|
66
71
|
}
|
|
67
72
|
return descriptions;
|
|
68
73
|
}
|
|
74
|
+
export function parseCodebaseMapMetadata(content) {
|
|
75
|
+
const metaLine = content
|
|
76
|
+
.split("\n")
|
|
77
|
+
.find((line) => line.trimStart().startsWith(CODEBASE_METADATA_PREFIX));
|
|
78
|
+
if (!metaLine)
|
|
79
|
+
return null;
|
|
80
|
+
const trimmed = metaLine.trim();
|
|
81
|
+
const jsonStart = CODEBASE_METADATA_PREFIX.length;
|
|
82
|
+
const jsonEnd = trimmed.lastIndexOf(" -->");
|
|
83
|
+
if (jsonEnd <= jsonStart)
|
|
84
|
+
return null;
|
|
85
|
+
try {
|
|
86
|
+
const parsed = JSON.parse(trimmed.slice(jsonStart, jsonEnd));
|
|
87
|
+
if (typeof parsed?.generatedAt === "string"
|
|
88
|
+
&& typeof parsed?.fingerprint === "string"
|
|
89
|
+
&& typeof parsed?.fileCount === "number"
|
|
90
|
+
&& typeof parsed?.truncated === "boolean") {
|
|
91
|
+
return parsed;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Ignore malformed metadata and treat the map as stale.
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
69
99
|
// ─── File Enumeration ────────────────────────────────────────────────────────
|
|
70
100
|
function shouldExclude(filePath, excludes) {
|
|
71
101
|
for (const pattern of excludes) {
|
|
@@ -103,6 +133,30 @@ function enumerateFiles(basePath, excludes, maxFiles) {
|
|
|
103
133
|
const truncated = filtered.length > maxFiles;
|
|
104
134
|
return { files: truncated ? filtered.slice(0, maxFiles) : filtered, truncated };
|
|
105
135
|
}
|
|
136
|
+
function resolveGeneratorOptions(options) {
|
|
137
|
+
const excludes = [...DEFAULT_EXCLUDES, ...(options?.excludePatterns ?? [])];
|
|
138
|
+
const maxFiles = options?.maxFiles ?? DEFAULT_MAX_FILES;
|
|
139
|
+
const collapseThreshold = options?.collapseThreshold ?? DEFAULT_COLLAPSE_THRESHOLD;
|
|
140
|
+
return {
|
|
141
|
+
excludes,
|
|
142
|
+
maxFiles,
|
|
143
|
+
collapseThreshold,
|
|
144
|
+
optionSignature: JSON.stringify({
|
|
145
|
+
excludes,
|
|
146
|
+
maxFiles,
|
|
147
|
+
collapseThreshold,
|
|
148
|
+
}),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function computeCodebaseFingerprint(files, resolved, truncated) {
|
|
152
|
+
return createHash("sha1")
|
|
153
|
+
.update(JSON.stringify({
|
|
154
|
+
files,
|
|
155
|
+
truncated,
|
|
156
|
+
optionSignature: resolved.optionSignature,
|
|
157
|
+
}))
|
|
158
|
+
.digest("hex");
|
|
159
|
+
}
|
|
106
160
|
// ─── Grouping ────────────────────────────────────────────────────────────────
|
|
107
161
|
function groupByDirectory(files, descriptions, collapseThreshold) {
|
|
108
162
|
const dirMap = new Map();
|
|
@@ -131,13 +185,13 @@ function groupByDirectory(files, descriptions, collapseThreshold) {
|
|
|
131
185
|
return groups;
|
|
132
186
|
}
|
|
133
187
|
// ─── Rendering ───────────────────────────────────────────────────────────────
|
|
134
|
-
function renderCodebaseMap(groups, totalFiles, truncated) {
|
|
188
|
+
function renderCodebaseMap(groups, totalFiles, truncated, metadata) {
|
|
135
189
|
const lines = [];
|
|
136
|
-
const now = new Date().toISOString().split(".")[0] + "Z";
|
|
137
190
|
const described = groups.reduce((sum, g) => sum + g.files.filter((f) => f.description).length, 0);
|
|
138
191
|
lines.push("# Codebase Map");
|
|
139
192
|
lines.push("");
|
|
140
|
-
lines.push(`Generated: ${
|
|
193
|
+
lines.push(`Generated: ${metadata.generatedAt} | Files: ${totalFiles} | Described: ${described}/${totalFiles}`);
|
|
194
|
+
lines.push(`${CODEBASE_METADATA_PREFIX}${JSON.stringify(metadata)} -->`);
|
|
141
195
|
if (truncated) {
|
|
142
196
|
lines.push(`Note: Truncated to first ${totalFiles} files. Run with higher --max-files to include all.`);
|
|
143
197
|
}
|
|
@@ -182,20 +236,35 @@ function renderCodebaseMap(groups, totalFiles, truncated) {
|
|
|
182
236
|
}
|
|
183
237
|
return lines.join("\n");
|
|
184
238
|
}
|
|
239
|
+
function buildCodebaseMap(basePath, resolved, existingDescriptions, enumerated) {
|
|
240
|
+
const listed = enumerated ?? enumerateFiles(basePath, resolved.excludes, resolved.maxFiles);
|
|
241
|
+
const descriptions = existingDescriptions ?? new Map();
|
|
242
|
+
const groups = groupByDirectory(listed.files, descriptions, resolved.collapseThreshold);
|
|
243
|
+
const generatedAt = new Date().toISOString().split(".")[0] + "Z";
|
|
244
|
+
const metadata = {
|
|
245
|
+
generatedAt,
|
|
246
|
+
fingerprint: computeCodebaseFingerprint(listed.files, resolved, listed.truncated),
|
|
247
|
+
fileCount: listed.files.length,
|
|
248
|
+
truncated: listed.truncated,
|
|
249
|
+
};
|
|
250
|
+
const content = renderCodebaseMap(groups, listed.files.length, listed.truncated, metadata);
|
|
251
|
+
return {
|
|
252
|
+
content,
|
|
253
|
+
fileCount: listed.files.length,
|
|
254
|
+
truncated: listed.truncated,
|
|
255
|
+
files: listed.files,
|
|
256
|
+
fingerprint: metadata.fingerprint,
|
|
257
|
+
generatedAt,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
185
260
|
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
186
261
|
/**
|
|
187
262
|
* Generate a fresh CODEBASE.md from scratch.
|
|
188
263
|
* Preserves existing descriptions if `existingDescriptions` is provided.
|
|
189
264
|
*/
|
|
190
265
|
export function generateCodebaseMap(basePath, options, existingDescriptions) {
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
const collapseThreshold = options?.collapseThreshold ?? DEFAULT_COLLAPSE_THRESHOLD;
|
|
194
|
-
const { files, truncated } = enumerateFiles(basePath, excludes, maxFiles);
|
|
195
|
-
const descriptions = existingDescriptions ?? new Map();
|
|
196
|
-
const groups = groupByDirectory(files, descriptions, collapseThreshold);
|
|
197
|
-
const content = renderCodebaseMap(groups, files.length, truncated);
|
|
198
|
-
return { content, fileCount: files.length, truncated, files };
|
|
266
|
+
const resolved = resolveGeneratorOptions(options);
|
|
267
|
+
return buildCodebaseMap(basePath, resolved, existingDescriptions);
|
|
199
268
|
}
|
|
200
269
|
/**
|
|
201
270
|
* Incremental update: re-scan files, preserve existing descriptions,
|
|
@@ -203,6 +272,7 @@ export function generateCodebaseMap(basePath, options, existingDescriptions) {
|
|
|
203
272
|
*/
|
|
204
273
|
export function updateCodebaseMap(basePath, options) {
|
|
205
274
|
const codebasePath = join(gsdRoot(basePath), "CODEBASE.md");
|
|
275
|
+
const resolved = resolveGeneratorOptions(options);
|
|
206
276
|
// Load existing descriptions
|
|
207
277
|
let existingDescriptions = new Map();
|
|
208
278
|
if (existsSync(codebasePath)) {
|
|
@@ -212,7 +282,7 @@ export function updateCodebaseMap(basePath, options) {
|
|
|
212
282
|
const existingFiles = new Set(existingDescriptions.keys());
|
|
213
283
|
// Generate new map preserving descriptions — reuse the returned file list
|
|
214
284
|
// to avoid a second enumeration (prevents race between content and stats).
|
|
215
|
-
const result =
|
|
285
|
+
const result = buildCodebaseMap(basePath, resolved, existingDescriptions);
|
|
216
286
|
const currentSet = new Set(result.files);
|
|
217
287
|
// Count changes
|
|
218
288
|
let added = 0;
|
|
@@ -232,8 +302,98 @@ export function updateCodebaseMap(basePath, options) {
|
|
|
232
302
|
unchanged: result.files.length - added,
|
|
233
303
|
fileCount: result.fileCount,
|
|
234
304
|
truncated: result.truncated,
|
|
305
|
+
fingerprint: result.fingerprint,
|
|
306
|
+
generatedAt: result.generatedAt,
|
|
235
307
|
};
|
|
236
308
|
}
|
|
309
|
+
function clearFreshnessCache(basePath) {
|
|
310
|
+
for (const key of freshnessCache.keys()) {
|
|
311
|
+
if (key === basePath || key.startsWith(`${basePath}::`)) {
|
|
312
|
+
freshnessCache.delete(key);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
export function ensureCodebaseMapFresh(basePath, options, ensureOptions) {
|
|
317
|
+
const resolved = resolveGeneratorOptions(options);
|
|
318
|
+
const cacheKey = `${basePath}::${resolved.optionSignature}`;
|
|
319
|
+
const ttlMs = ensureOptions?.ttlMs ?? DEFAULT_REFRESH_TTL_MS;
|
|
320
|
+
const maxAgeMs = ensureOptions?.maxAgeMs ?? DEFAULT_MAX_AGE_MS;
|
|
321
|
+
const force = ensureOptions?.force === true;
|
|
322
|
+
const now = Date.now();
|
|
323
|
+
if (!force && ttlMs > 0) {
|
|
324
|
+
const cached = freshnessCache.get(cacheKey);
|
|
325
|
+
if (cached && now - cached.checkedAt < ttlMs) {
|
|
326
|
+
return cached.result;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
const existing = readCodebaseMap(basePath);
|
|
330
|
+
const listed = enumerateFiles(basePath, resolved.excludes, resolved.maxFiles);
|
|
331
|
+
const fingerprint = computeCodebaseFingerprint(listed.files, resolved, listed.truncated);
|
|
332
|
+
const cacheAndReturn = (result) => {
|
|
333
|
+
freshnessCache.set(cacheKey, { checkedAt: now, result });
|
|
334
|
+
return result;
|
|
335
|
+
};
|
|
336
|
+
if (!existing) {
|
|
337
|
+
const generated = buildCodebaseMap(basePath, resolved, undefined, listed);
|
|
338
|
+
if (generated.fileCount > 0) {
|
|
339
|
+
writeCodebaseMap(basePath, generated.content);
|
|
340
|
+
return cacheAndReturn({
|
|
341
|
+
status: "generated",
|
|
342
|
+
fileCount: generated.fileCount,
|
|
343
|
+
truncated: generated.truncated,
|
|
344
|
+
generatedAt: generated.generatedAt,
|
|
345
|
+
fingerprint: generated.fingerprint,
|
|
346
|
+
reason: "missing",
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
return cacheAndReturn({
|
|
350
|
+
status: "empty",
|
|
351
|
+
fileCount: 0,
|
|
352
|
+
truncated: false,
|
|
353
|
+
generatedAt: null,
|
|
354
|
+
fingerprint,
|
|
355
|
+
reason: "no-tracked-files",
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
const metadata = parseCodebaseMapMetadata(existing);
|
|
359
|
+
const existingDescriptions = parseCodebaseMap(existing);
|
|
360
|
+
const ageMs = metadata ? now - Date.parse(metadata.generatedAt) : Number.POSITIVE_INFINITY;
|
|
361
|
+
const staleReason = !metadata ? "missing-metadata"
|
|
362
|
+
: metadata.fingerprint !== fingerprint ? "files-changed"
|
|
363
|
+
: metadata.fileCount !== listed.files.length ? "file-count-changed"
|
|
364
|
+
: metadata.truncated !== listed.truncated ? "truncation-changed"
|
|
365
|
+
: maxAgeMs > 0 && Number.isFinite(ageMs) && ageMs > maxAgeMs ? "expired"
|
|
366
|
+
: undefined;
|
|
367
|
+
if (!staleReason) {
|
|
368
|
+
return cacheAndReturn({
|
|
369
|
+
status: "fresh",
|
|
370
|
+
fileCount: metadata?.fileCount ?? listed.files.length,
|
|
371
|
+
truncated: metadata?.truncated ?? listed.truncated,
|
|
372
|
+
generatedAt: metadata?.generatedAt ?? null,
|
|
373
|
+
fingerprint: metadata?.fingerprint ?? fingerprint,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
const updated = buildCodebaseMap(basePath, resolved, existingDescriptions, listed);
|
|
377
|
+
if (updated.fileCount > 0) {
|
|
378
|
+
writeCodebaseMap(basePath, updated.content);
|
|
379
|
+
return cacheAndReturn({
|
|
380
|
+
status: "updated",
|
|
381
|
+
fileCount: updated.fileCount,
|
|
382
|
+
truncated: updated.truncated,
|
|
383
|
+
generatedAt: updated.generatedAt,
|
|
384
|
+
fingerprint: updated.fingerprint,
|
|
385
|
+
reason: staleReason,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
return cacheAndReturn({
|
|
389
|
+
status: "empty",
|
|
390
|
+
fileCount: 0,
|
|
391
|
+
truncated: false,
|
|
392
|
+
generatedAt: null,
|
|
393
|
+
fingerprint,
|
|
394
|
+
reason: staleReason,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
237
397
|
/**
|
|
238
398
|
* Write CODEBASE.md to .gsd/ directory.
|
|
239
399
|
*/
|
|
@@ -242,6 +402,7 @@ export function writeCodebaseMap(basePath, content) {
|
|
|
242
402
|
mkdirSync(root, { recursive: true });
|
|
243
403
|
const outPath = join(root, "CODEBASE.md");
|
|
244
404
|
writeFileSync(outPath, content, "utf-8");
|
|
405
|
+
clearFreshnessCache(basePath);
|
|
245
406
|
return outPath;
|
|
246
407
|
}
|
|
247
408
|
/**
|
|
@@ -61,7 +61,7 @@ export const TOP_LEVEL_SUBCOMMANDS = [
|
|
|
61
61
|
{ cmd: "mcp", desc: "MCP server status and connectivity check (status, check <server>)" },
|
|
62
62
|
{ cmd: "rethink", desc: "Conversational project reorganization — reorder, park, discard, add milestones" },
|
|
63
63
|
{ cmd: "workflow", desc: "Custom workflow lifecycle (new, run, list, validate, pause, resume)" },
|
|
64
|
-
{ cmd: "codebase", desc: "Generate and
|
|
64
|
+
{ cmd: "codebase", desc: "Generate, refresh, and inspect the codebase map cache (.gsd/CODEBASE.md)" },
|
|
65
65
|
];
|
|
66
66
|
const NESTED_COMPLETIONS = {
|
|
67
67
|
auto: [
|
|
@@ -224,7 +224,7 @@ const NESTED_COMPLETIONS = {
|
|
|
224
224
|
{ cmd: "generate", desc: "Generate or regenerate CODEBASE.md" },
|
|
225
225
|
{ cmd: "generate --max-files", desc: "Generate with custom file limit (default: 500)" },
|
|
226
226
|
{ cmd: "generate --collapse-threshold", desc: "Generate with custom collapse threshold (default: 20)" },
|
|
227
|
-
{ cmd: "update", desc: "
|
|
227
|
+
{ cmd: "update", desc: "Refresh the CODEBASE.md cache immediately (preserves descriptions)" },
|
|
228
228
|
{ cmd: "update --max-files", desc: "Update with custom file limit" },
|
|
229
229
|
{ cmd: "update --collapse-threshold", desc: "Update with custom collapse threshold" },
|
|
230
230
|
{ cmd: "stats", desc: "Show file count, description coverage, and generation time" },
|
|
@@ -40,6 +40,7 @@ export function showHelp(ctx) {
|
|
|
40
40
|
"",
|
|
41
41
|
"PROJECT KNOWLEDGE",
|
|
42
42
|
" /gsd knowledge <type> <text> Add rule, pattern, or lesson to KNOWLEDGE.md",
|
|
43
|
+
" /gsd codebase [generate|update|stats] Manage the CODEBASE.md cache used in prompt context",
|
|
43
44
|
"",
|
|
44
45
|
"SETUP & CONFIGURATION",
|
|
45
46
|
" /gsd init Project init wizard — detect, configure, bootstrap .gsd/",
|
|
@@ -44,6 +44,7 @@ const TOP_LEVEL_SUBCOMMANDS = [
|
|
|
44
44
|
{ cmd: "start", desc: "Start a workflow template" },
|
|
45
45
|
{ cmd: "templates", desc: "List available workflow templates" },
|
|
46
46
|
{ cmd: "extensions", desc: "Manage extensions" },
|
|
47
|
+
{ cmd: "codebase", desc: "Generate, refresh, and inspect the codebase map cache" },
|
|
47
48
|
];
|
|
48
49
|
function filterStartsWith(partial, options, prefix = "") {
|
|
49
50
|
const normalizedPrefix = prefix.length > 0 ? `${prefix} ` : "";
|
|
@@ -192,6 +193,14 @@ function getGsdArgumentCompletions(prefix) {
|
|
|
192
193
|
{ cmd: "info", desc: "Show extension details" },
|
|
193
194
|
], "extensions");
|
|
194
195
|
}
|
|
196
|
+
if (parts[0] === "codebase" && parts.length <= 2) {
|
|
197
|
+
return filterStartsWith(partial, [
|
|
198
|
+
{ cmd: "generate", desc: "Generate or regenerate CODEBASE.md" },
|
|
199
|
+
{ cmd: "update", desc: "Refresh the CODEBASE.md cache immediately" },
|
|
200
|
+
{ cmd: "stats", desc: "Show codebase-map coverage and generation time" },
|
|
201
|
+
{ cmd: "help", desc: "Show usage and subcommands" },
|
|
202
|
+
], "codebase");
|
|
203
|
+
}
|
|
195
204
|
if (parts[0] === "doctor" && parts.length <= 2) {
|
|
196
205
|
return filterStartsWith(partial, [
|
|
197
206
|
{ cmd: "fix", desc: "Auto-fix detected issues" },
|
|
@@ -8,10 +8,11 @@ import { generateCodebaseMap, updateCodebaseMap, writeCodebaseMap, getCodebaseMa
|
|
|
8
8
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
9
9
|
const USAGE = "Usage: /gsd codebase [generate|update|stats]\n\n" +
|
|
10
10
|
" generate [--max-files N] [--collapse-threshold N] — Generate or regenerate CODEBASE.md\n" +
|
|
11
|
-
" update [--max-files N] [--collapse-threshold N] —
|
|
11
|
+
" update [--max-files N] [--collapse-threshold N] — Refresh the CODEBASE.md cache immediately\n" +
|
|
12
12
|
" stats — Show file count, coverage, and generation time\n" +
|
|
13
13
|
" help — Show this help\n\n" +
|
|
14
|
-
"With no subcommand, shows stats if a map exists or help if not.\n
|
|
14
|
+
"With no subcommand, shows stats if a map exists or help if not.\n" +
|
|
15
|
+
"GSD also refreshes CODEBASE.md automatically before prompt injection and after completed units when tracked files change.\n\n" +
|
|
15
16
|
"Configure defaults via preferences.md:\n" +
|
|
16
17
|
" codebase:\n" +
|
|
17
18
|
" exclude_patterns: [\"docs/\", \"fixtures/\"]\n" +
|
|
@@ -95,7 +96,7 @@ function showStats(basePath, ctx) {
|
|
|
95
96
|
` Undescribed: ${stats.undescribedCount}\n` +
|
|
96
97
|
` Generated: ${stats.generatedAt ?? "unknown"}\n\n` +
|
|
97
98
|
(stats.undescribedCount > 0
|
|
98
|
-
? `Tip:
|
|
99
|
+
? `Tip: Auto-refresh keeps the cache current, but /gsd codebase update forces an immediate refresh.`
|
|
99
100
|
: `Coverage is complete.`), "info");
|
|
100
101
|
}
|
|
101
102
|
/**
|
|
@@ -8,7 +8,7 @@ import { deriveState, isMilestoneComplete } from "./state.js";
|
|
|
8
8
|
import { listWorktrees, resolveGitDir, worktreesDir } from "./worktree-manager.js";
|
|
9
9
|
import { abortAndReset } from "./git-self-heal.js";
|
|
10
10
|
import { RUNTIME_EXCLUSION_PATHS, resolveMilestoneIntegrationBranch, writeIntegrationBranch } from "./git-service.js";
|
|
11
|
-
import { nativeIsRepo, nativeWorktreeList, nativeWorktreeRemove, nativeBranchList, nativeBranchDelete, nativeLsFiles, nativeRmCached, nativeHasChanges, nativeLastCommitEpoch, nativeGetCurrentBranch,
|
|
11
|
+
import { nativeIsRepo, nativeWorktreeList, nativeWorktreeRemove, nativeBranchList, nativeBranchDelete, nativeLsFiles, nativeRmCached, nativeHasChanges, nativeLastCommitEpoch, nativeGetCurrentBranch, nativeAddAllWithExclusions, nativeCommit } from "./native-git-bridge.js";
|
|
12
12
|
import { getAllWorktreeHealth } from "./worktree-health.js";
|
|
13
13
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
14
14
|
/**
|
|
@@ -380,19 +380,19 @@ export async function checkGitHealth(basePath, issues, fixesApplied, shouldFix,
|
|
|
380
380
|
code: "stale_uncommitted_changes",
|
|
381
381
|
scope: "project",
|
|
382
382
|
unitId: "project",
|
|
383
|
-
message: `Uncommitted changes detected with no commit in ${mins} minute${mins === 1 ? "" : "s"} (threshold: ${thresholdMinutes}m). Snapshotting
|
|
383
|
+
message: `Uncommitted changes detected with no commit in ${mins} minute${mins === 1 ? "" : "s"} (threshold: ${thresholdMinutes}m). Snapshotting uncommitted changes.`,
|
|
384
384
|
fixable: true,
|
|
385
385
|
});
|
|
386
386
|
if (shouldFix("stale_uncommitted_changes")) {
|
|
387
387
|
try {
|
|
388
|
-
|
|
388
|
+
nativeAddAllWithExclusions(basePath, RUNTIME_EXCLUSION_PATHS);
|
|
389
389
|
const commitMsg = `gsd snapshot: uncommitted changes after ${mins}m inactivity`;
|
|
390
390
|
const result = nativeCommit(basePath, commitMsg);
|
|
391
391
|
if (result) {
|
|
392
392
|
fixesApplied.push(`created gsd snapshot after ${mins}m of uncommitted changes`);
|
|
393
393
|
}
|
|
394
394
|
else {
|
|
395
|
-
fixesApplied.push("gsd snapshot skipped — nothing to commit after staging
|
|
395
|
+
fixesApplied.push("gsd snapshot skipped — nothing to commit after staging changes");
|
|
396
396
|
}
|
|
397
397
|
}
|
|
398
398
|
catch {
|
|
@@ -20,8 +20,8 @@ import { readCrashLock, isLockProcessAlive, clearLock } from "./crash-recovery.j
|
|
|
20
20
|
import { abortAndReset } from "./git-self-heal.js";
|
|
21
21
|
import { rebuildState } from "./doctor.js";
|
|
22
22
|
import { deriveState } from "./state.js";
|
|
23
|
-
import { resolveMilestoneIntegrationBranch } from "./git-service.js";
|
|
24
|
-
import { nativeIsRepo, nativeHasChanges, nativeLastCommitEpoch, nativeGetCurrentBranch,
|
|
23
|
+
import { RUNTIME_EXCLUSION_PATHS, resolveMilestoneIntegrationBranch } from "./git-service.js";
|
|
24
|
+
import { nativeIsRepo, nativeHasChanges, nativeLastCommitEpoch, nativeGetCurrentBranch, nativeAddAllWithExclusions, nativeCommit } from "./native-git-bridge.js";
|
|
25
25
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
26
26
|
import { runEnvironmentChecks } from "./doctor-environment.js";
|
|
27
27
|
/** In-memory health history for the current auto-mode session. */
|
|
@@ -247,7 +247,7 @@ export async function preDispatchHealthGate(basePath) {
|
|
|
247
247
|
if (minutesSinceCommit >= thresholdMinutes) {
|
|
248
248
|
const mins = Math.floor(minutesSinceCommit);
|
|
249
249
|
try {
|
|
250
|
-
|
|
250
|
+
nativeAddAllWithExclusions(basePath, RUNTIME_EXCLUSION_PATHS);
|
|
251
251
|
const commitMsg = `gsd snapshot: pre-dispatch, uncommitted changes after ${mins}m inactivity`;
|
|
252
252
|
const result = nativeCommit(basePath, commitMsg);
|
|
253
253
|
if (result) {
|
|
@@ -34,6 +34,7 @@ import { findMilestoneIds, nextMilestoneId, reserveMilestoneId, getReservedMiles
|
|
|
34
34
|
import { parkMilestone, discardMilestone } from "./milestone-actions.js";
|
|
35
35
|
import { selectAndApplyModel } from "./auto-model-selection.js";
|
|
36
36
|
import { DISCUSS_TOOLS_ALLOWLIST } from "./constants.js";
|
|
37
|
+
import { getWorkflowTransportSupportError, getRequiredWorkflowToolsForGuidedUnit, } from "./workflow-mcp.js";
|
|
37
38
|
import { runPreparation, formatCodebaseBrief, formatPriorContextBrief, formatEcosystemBrief, } from "./preparation.js";
|
|
38
39
|
// ─── Preparation result storage ─────────────────────────────────────────────
|
|
39
40
|
// Stores the most recent preparation result for injection into discuss prompts.
|
|
@@ -259,6 +260,21 @@ async function dispatchWorkflow(pi, note, customType = "gsd-run", ctx, unitType)
|
|
|
259
260
|
routing: result.routing,
|
|
260
261
|
});
|
|
261
262
|
}
|
|
263
|
+
const compatibilityError = getWorkflowTransportSupportError(result.appliedModel?.provider ?? ctx.model?.provider, getRequiredWorkflowToolsForGuidedUnit(unitType), {
|
|
264
|
+
projectRoot: process.cwd(),
|
|
265
|
+
surface: "guided flow",
|
|
266
|
+
unitType,
|
|
267
|
+
authMode: result.appliedModel?.provider
|
|
268
|
+
? ctx.modelRegistry.getProviderAuthMode(result.appliedModel.provider)
|
|
269
|
+
: ctx.model?.provider
|
|
270
|
+
? ctx.modelRegistry.getProviderAuthMode(ctx.model.provider)
|
|
271
|
+
: undefined,
|
|
272
|
+
baseUrl: result.appliedModel?.baseUrl ?? ctx.model?.baseUrl,
|
|
273
|
+
});
|
|
274
|
+
if (compatibilityError) {
|
|
275
|
+
ctx.ui.notify(compatibilityError, "error");
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
262
278
|
}
|
|
263
279
|
// Scope tools for discuss flows (#2949).
|
|
264
280
|
// Providers with grammar-based constrained decoding (xAI/Grok) return
|
|
@@ -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
|
|