gsd-pi 2.50.0-dev.d210a87 → 2.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/dist/cli.js +0 -26
- package/dist/loader.js +0 -4
- package/dist/resource-loader.d.ts +1 -4
- package/dist/resource-loader.js +3 -138
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -3
- package/dist/resources/extensions/bg-shell/interaction.js +1 -3
- package/dist/resources/extensions/bg-shell/process-manager.js +1 -4
- package/dist/resources/extensions/claude-code-cli/partial-builder.js +0 -5
- package/dist/resources/extensions/gsd/auto/phases.js +1 -16
- package/dist/resources/extensions/gsd/auto/session.js +0 -5
- package/dist/resources/extensions/gsd/auto-dashboard.js +3 -22
- package/dist/resources/extensions/gsd/auto-dispatch.js +54 -81
- package/dist/resources/extensions/gsd/auto-post-unit.js +76 -37
- package/dist/resources/extensions/gsd/auto-prompts.js +0 -57
- package/dist/resources/extensions/gsd/auto-recovery.js +25 -21
- package/dist/resources/extensions/gsd/auto.js +5 -15
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +0 -16
- package/dist/resources/extensions/gsd/crash-recovery.js +2 -6
- package/dist/resources/extensions/gsd/custom-execution-policy.js +2 -3
- package/dist/resources/extensions/gsd/custom-verification.js +1 -3
- package/dist/resources/extensions/gsd/custom-workflow-engine.js +2 -3
- package/dist/resources/extensions/gsd/dashboard-overlay.js +0 -4
- package/dist/resources/extensions/gsd/detection.js +3 -589
- package/dist/resources/extensions/gsd/dispatch-guard.js +1 -2
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +0 -15
- package/dist/resources/extensions/gsd/files.js +1 -5
- package/dist/resources/extensions/gsd/guided-flow.js +0 -10
- package/dist/resources/extensions/gsd/init-wizard.js +1 -9
- package/dist/resources/extensions/gsd/model-router.js +0 -25
- package/dist/resources/extensions/gsd/notifications.js +0 -23
- package/dist/resources/extensions/gsd/preferences-skills.js +5 -11
- package/dist/resources/extensions/gsd/preferences-types.js +0 -1
- package/dist/resources/extensions/gsd/preferences-validation.js +0 -25
- package/dist/resources/extensions/gsd/preferences.js +0 -3
- package/dist/resources/extensions/gsd/prompts/forensics.md +7 -11
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -6
- package/dist/resources/extensions/gsd/provider-error-pause.js +0 -8
- package/dist/resources/extensions/gsd/rule-registry.js +11 -10
- package/dist/resources/extensions/gsd/session-forensics.js +3 -7
- package/dist/resources/extensions/gsd/skill-discovery.js +2 -3
- package/dist/resources/extensions/gsd/skill-health.js +2 -2
- package/dist/resources/extensions/gsd/skill-telemetry.js +5 -15
- package/dist/resources/extensions/gsd/state.js +5 -17
- package/dist/resources/extensions/gsd/templates/milestone-validation.md +0 -12
- package/dist/resources/extensions/gsd/templates/preferences.md +0 -2
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +9 -28
- package/dist/resources/extensions/gsd/undo.js +7 -8
- package/dist/resources/extensions/gsd/unit-runtime.js +1 -2
- package/dist/resources/extensions/gsd/verification-gate.js +1 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -17
- package/dist/web/standalone/.next/build-manifest.json +4 -4
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
- package/dist/web/standalone/.next/required-server-files.json +3 -3
- package/dist/web/standalone/.next/routes-manifest.json +0 -6
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -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 +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page.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 +4 -4
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.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/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/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 +26 -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 +2 -2
- 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 +5 -5
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page.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 +16 -17
- package/dist/web/standalone/.next/server/chunks/229.js +12 -0
- package/dist/web/standalone/.next/server/chunks/441.js +2 -0
- package/dist/web/standalone/.next/server/chunks/471.js +13 -0
- package/dist/web/standalone/.next/server/chunks/{4741.js → 741.js} +1 -1
- package/dist/web/standalone/.next/server/functions-config-manifest.json +0 -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 +3 -3
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/server/webpack-runtime.js +1 -1
- package/dist/web/standalone/.next/static/MQOhBnkC_TLtNn_JvZWDj/_buildManifest.js +1 -0
- package/dist/web/standalone/.next/static/chunks/4024.7c75ac378de0f2b5.js +9 -0
- package/dist/web/standalone/.next/static/chunks/{2008.817d0885545aaea9.js → 485.243af25f0cdf50d6.js} +6 -6
- package/dist/web/standalone/.next/static/chunks/app/_global-error/page-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/api/boot/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/files/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/git/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/history/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/update/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-12dd5ece0df4badc.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d83ba70a25a85472.js +1 -0
- package/dist/web/standalone/.next/static/chunks/webpack-2473ce2c3879fff4.js +1 -0
- package/dist/web/standalone/.next/static/css/dd4ae3f58ac9b600.css +1 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/server.js +1 -1
- package/package.json +1 -1
- package/packages/pi-ai/dist/types.d.ts +0 -1
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/pnpm-lock.yaml +2022 -0
- package/packages/pi-ai/src/types.ts +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +0 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/bash-executor.d.ts +1 -3
- package/packages/pi-coding-agent/dist/core/bash-executor.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/bash-executor.js +1 -10
- package/packages/pi-coding-agent/dist/core/bash-executor.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +0 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -13
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +1 -19
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/wrapper.js +0 -8
- package/packages/pi-coding-agent/dist/core/extensions/wrapper.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.js +1 -8
- package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.d.ts +1 -11
- package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.js +8 -30
- package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js +0 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +2 -2
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +2 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- 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 +4 -6
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts +0 -5
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +0 -12
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +1 -2
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/pnpm-lock.yaml +454 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +1 -2
- package/packages/pi-coding-agent/src/core/bash-executor.ts +2 -10
- package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -2
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -18
- package/packages/pi-coding-agent/src/core/extensions/types.ts +0 -21
- package/packages/pi-coding-agent/src/core/extensions/wrapper.ts +0 -9
- package/packages/pi-coding-agent/src/core/package-manager.ts +1 -10
- package/packages/pi-coding-agent/src/core/skills.ts +10 -35
- package/packages/pi-coding-agent/src/core/slash-commands.ts +0 -1
- package/packages/pi-coding-agent/src/index.ts +0 -4
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +2 -3
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +4 -6
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +0 -15
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +1 -2
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +1 -2
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/scripts/postinstall.js +6 -163
- package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -3
- package/src/resources/extensions/bg-shell/interaction.ts +1 -3
- package/src/resources/extensions/bg-shell/process-manager.ts +1 -4
- package/src/resources/extensions/claude-code-cli/partial-builder.ts +0 -5
- package/src/resources/extensions/gsd/auto/phases.ts +1 -15
- package/src/resources/extensions/gsd/auto/session.ts +0 -6
- package/src/resources/extensions/gsd/auto-dashboard.ts +3 -31
- package/src/resources/extensions/gsd/auto-dispatch.ts +51 -84
- package/src/resources/extensions/gsd/auto-post-unit.ts +83 -56
- package/src/resources/extensions/gsd/auto-prompts.ts +0 -48
- package/src/resources/extensions/gsd/auto-recovery.ts +26 -19
- package/src/resources/extensions/gsd/auto.ts +5 -15
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +0 -17
- package/src/resources/extensions/gsd/crash-recovery.ts +2 -6
- package/src/resources/extensions/gsd/custom-execution-policy.ts +2 -3
- package/src/resources/extensions/gsd/custom-verification.ts +1 -3
- package/src/resources/extensions/gsd/custom-workflow-engine.ts +2 -3
- package/src/resources/extensions/gsd/dashboard-overlay.ts +0 -7
- package/src/resources/extensions/gsd/detection.ts +3 -662
- package/src/resources/extensions/gsd/dispatch-guard.ts +1 -2
- package/src/resources/extensions/gsd/docs/preferences-reference.md +0 -15
- package/src/resources/extensions/gsd/files.ts +1 -6
- package/src/resources/extensions/gsd/guided-flow.ts +0 -11
- package/src/resources/extensions/gsd/init-wizard.ts +1 -9
- package/src/resources/extensions/gsd/model-router.ts +0 -25
- package/src/resources/extensions/gsd/notifications.ts +0 -23
- package/src/resources/extensions/gsd/preferences-skills.ts +5 -11
- package/src/resources/extensions/gsd/preferences-types.ts +0 -20
- package/src/resources/extensions/gsd/preferences-validation.ts +0 -26
- package/src/resources/extensions/gsd/preferences.ts +0 -3
- package/src/resources/extensions/gsd/prompts/forensics.md +7 -11
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -6
- package/src/resources/extensions/gsd/provider-error-pause.ts +0 -9
- package/src/resources/extensions/gsd/rule-registry.ts +11 -10
- package/src/resources/extensions/gsd/session-forensics.ts +3 -7
- package/src/resources/extensions/gsd/skill-discovery.ts +2 -3
- package/src/resources/extensions/gsd/skill-health.ts +2 -2
- package/src/resources/extensions/gsd/skill-telemetry.ts +5 -15
- package/src/resources/extensions/gsd/state.ts +5 -16
- package/src/resources/extensions/gsd/templates/milestone-validation.md +0 -12
- package/src/resources/extensions/gsd/templates/preferences.md +0 -2
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -16
- package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -68
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +3 -5
- package/src/resources/extensions/gsd/tests/custom-verification.test.ts +0 -33
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/detection.test.ts +0 -838
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +9 -28
- package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -63
- package/src/resources/extensions/gsd/tests/model-router.test.ts +0 -40
- package/src/resources/extensions/gsd/tests/notifications.test.ts +6 -28
- package/src/resources/extensions/gsd/tests/preferences.test.ts +0 -50
- package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -40
- package/src/resources/extensions/gsd/tests/reactive-executor.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +5 -4
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +0 -146
- package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +12 -12
- package/src/resources/extensions/gsd/tests/terminated-transient.test.ts +0 -24
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +2 -2
- package/src/resources/extensions/gsd/types.ts +0 -2
- package/src/resources/extensions/gsd/undo.ts +7 -8
- package/src/resources/extensions/gsd/unit-runtime.ts +1 -2
- package/src/resources/extensions/gsd/verification-gate.ts +1 -3
- package/dist/resources/extensions/gsd/auto-observability.js +0 -54
- package/dist/resources/extensions/gsd/auto-utils.js +0 -20
- package/dist/resources/extensions/gsd/observability-validator.js +0 -422
- package/dist/resources/extensions/gsd/roadmap-mutations.js +0 -110
- package/dist/resources/extensions/gsd/rtk-status.js +0 -43
- package/dist/resources/extensions/gsd/skill-catalog.js +0 -1026
- package/dist/resources/extensions/shared/rtk-session-stats.js +0 -189
- package/dist/resources/extensions/shared/rtk.js +0 -100
- package/dist/rtk.d.ts +0 -52
- package/dist/rtk.js +0 -332
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +0 -3
- package/dist/web/standalone/.next/server/app/api/experimental/route.js.nft.json +0 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +0 -1
- package/dist/web/standalone/.next/server/chunks/2229.js +0 -12
- package/dist/web/standalone/.next/server/chunks/2331.js +0 -25
- package/dist/web/standalone/.next/server/chunks/5822.js +0 -2
- package/dist/web/standalone/.next/server/chunks/7471.js +0 -13
- package/dist/web/standalone/.next/static/chunks/4024.9ad5def014d90ce4.js +0 -9
- package/dist/web/standalone/.next/static/chunks/app/_global-error/page-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/boot/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/captures/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/experimental/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/files/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/git/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/history/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/projects/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/steer/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/undo/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/update/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/page-b950e4e384cc62b3.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/webpack-cfc9a116e6450a6b.js +0 -1
- package/dist/web/standalone/.next/static/css/de141508b083f922.css +0 -1
- package/dist/web/standalone/.next/static/yJIyd5cXPNpmXTv18ZlyC/_buildManifest.js +0 -1
- package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -105
- package/src/resources/extensions/gsd/auto-observability.ts +0 -72
- package/src/resources/extensions/gsd/auto-utils.ts +0 -25
- package/src/resources/extensions/gsd/observability-validator.ts +0 -456
- package/src/resources/extensions/gsd/roadmap-mutations.ts +0 -134
- package/src/resources/extensions/gsd/rtk-status.ts +0 -53
- package/src/resources/extensions/gsd/skill-catalog.ts +0 -1085
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +0 -97
- package/src/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -474
- package/src/resources/extensions/gsd/tests/retry-diagnostic-reasoning.test.ts +0 -161
- package/src/resources/extensions/gsd/tests/rewrite-count-persist.test.ts +0 -82
- package/src/resources/extensions/gsd/tests/skill-catalog.test.ts +0 -193
- package/src/resources/extensions/shared/rtk-session-stats.ts +0 -249
- package/src/resources/extensions/shared/rtk.ts +0 -120
- /package/dist/web/standalone/.next/static/{yJIyd5cXPNpmXTv18ZlyC → MQOhBnkC_TLtNn_JvZWDj}/_ssgManifest.js +0 -0
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import { resolveMilestoneFile } from "./paths.js";
|
|
4
4
|
import { findMilestoneIds } from "./guided-flow.js";
|
|
5
|
-
import { parseUnitId } from "./unit-id.js";
|
|
6
5
|
import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js";
|
|
7
6
|
import { parseRoadmap } from "./parsers-legacy.js";
|
|
8
7
|
import { readFileSync } from "node:fs";
|
|
@@ -23,7 +22,7 @@ export function getPriorSliceCompletionBlocker(
|
|
|
23
22
|
): string | null {
|
|
24
23
|
if (!SLICE_DISPATCH_TYPES.has(unitType)) return null;
|
|
25
24
|
|
|
26
|
-
const
|
|
25
|
+
const [targetMid, targetSid] = unitId.split("/");
|
|
27
26
|
if (!targetMid || !targetSid) return null;
|
|
28
27
|
|
|
29
28
|
// Use findMilestoneIds to respect custom queue order.
|
|
@@ -241,9 +241,6 @@ Setting `prefer_skills: []` does **not** disable skill discovery — it just mea
|
|
|
241
241
|
|
|
242
242
|
**Known unit types for `before`/`after`:** `research-milestone`, `plan-milestone`, `research-slice`, `plan-slice`, `execute-task`, `complete-slice`, `replan-slice`, `reassess-roadmap`, `run-uat`.
|
|
243
243
|
|
|
244
|
-
- `experimental`: opt-in experimental features. All features here are **off by default** — you must explicitly set each one to `true` to enable it. Features in this block may change or be removed without a deprecation cycle while in experimental status. Keys:
|
|
245
|
-
- `rtk`: boolean — enable RTK (Real-Time Kompression) shell-command compression. When enabled, GSD wraps shell commands through the RTK binary to reduce token usage during command execution. RTK is downloaded automatically on first use if not already installed. **Default: `false`** (opt-in required). Set `GSD_RTK_DISABLED=1` in the environment to force-disable regardless of this preference.
|
|
246
|
-
|
|
247
244
|
---
|
|
248
245
|
|
|
249
246
|
## Best Practices
|
|
@@ -655,15 +652,3 @@ verification_max_retries: 2
|
|
|
655
652
|
```
|
|
656
653
|
|
|
657
654
|
Runs test, lint, and typecheck after each task. On failure, auto-fix is attempted up to 2 times before reporting the issue.
|
|
658
|
-
|
|
659
|
-
## Experimental Features Example
|
|
660
|
-
|
|
661
|
-
```yaml
|
|
662
|
-
---
|
|
663
|
-
version: 1
|
|
664
|
-
experimental:
|
|
665
|
-
rtk: true
|
|
666
|
-
---
|
|
667
|
-
```
|
|
668
|
-
|
|
669
|
-
Opts in to RTK shell-command compression. RTK is downloaded automatically on first use. Set `GSD_RTK_DISABLED=1` to force-disable at the environment level regardless of this setting.
|
|
@@ -269,8 +269,6 @@ function _parseSummaryImpl(content: string): Summary {
|
|
|
269
269
|
whatHappened: nativeResult.whatHappened,
|
|
270
270
|
deviations: nativeResult.deviations,
|
|
271
271
|
filesModified: nativeResult.filesModified,
|
|
272
|
-
followUps: extractSection(content, 'Follow-ups') ?? '',
|
|
273
|
-
knownLimitations: extractSection(content, 'Known Limitations') ?? '',
|
|
274
272
|
};
|
|
275
273
|
}
|
|
276
274
|
|
|
@@ -332,10 +330,7 @@ function _parseSummaryImpl(content: string): Summary {
|
|
|
332
330
|
}
|
|
333
331
|
}
|
|
334
332
|
|
|
335
|
-
|
|
336
|
-
const knownLimitations = extractSection(body, 'Known Limitations') ?? '';
|
|
337
|
-
|
|
338
|
-
return { frontmatter, title, oneLiner, whatHappened, deviations, filesModified, followUps, knownLimitations };
|
|
333
|
+
return { frontmatter, title, oneLiner, whatHappened, deviations, filesModified };
|
|
339
334
|
}
|
|
340
335
|
|
|
341
336
|
// ─── Continue Parser ───────────────────────────────────────────────────────
|
|
@@ -450,10 +450,7 @@ async function buildDiscussSlicePrompt(
|
|
|
450
450
|
}
|
|
451
451
|
|
|
452
452
|
// Completed slice summaries — what was already built that this slice builds on
|
|
453
|
-
// Ensure DB is open so getMilestoneSlices returns real data (#2560).
|
|
454
453
|
{
|
|
455
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
456
|
-
await ensureDbOpen();
|
|
457
454
|
type NormSlice = { id: string; done: boolean };
|
|
458
455
|
let normSlices: NormSlice[] = [];
|
|
459
456
|
if (isDbAvailable()) {
|
|
@@ -591,14 +588,6 @@ export async function showDiscuss(
|
|
|
591
588
|
return;
|
|
592
589
|
}
|
|
593
590
|
|
|
594
|
-
// Ensure DB is open before querying slices (#2560).
|
|
595
|
-
// showDiscuss() is a command handler — unlike tool handlers, it has no
|
|
596
|
-
// automatic ensureDbOpen() call. Without this, isDbAvailable() returns
|
|
597
|
-
// false on cold-start sessions and normSlices falls to [] → false
|
|
598
|
-
// "All slices complete" exit.
|
|
599
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
600
|
-
await ensureDbOpen();
|
|
601
|
-
|
|
602
591
|
// Guard: no roadmap yet (unless DB has slices)
|
|
603
592
|
const roadmapFile = resolveMilestoneFile(basePath, mid, "ROADMAP");
|
|
604
593
|
const roadmapContent = roadmapFile ? await loadFile(roadmapFile) : null;
|
|
@@ -15,7 +15,6 @@ import { ensureGitignore, untrackRuntimeFiles } from "./gitignore.js";
|
|
|
15
15
|
import { gsdRoot } from "./paths.js";
|
|
16
16
|
import { assertSafeDirectory } from "./validate-directory.js";
|
|
17
17
|
import type { ProjectDetection, ProjectSignals } from "./detection.js";
|
|
18
|
-
import { runSkillInstallStep } from "./skill-catalog.js";
|
|
19
18
|
|
|
20
19
|
// ─── Types ──────────────────────────────────────────────────────────────────────
|
|
21
20
|
|
|
@@ -224,14 +223,7 @@ export async function showProjectInit(
|
|
|
224
223
|
await customizeAdvancedPrefs(ctx, prefs);
|
|
225
224
|
}
|
|
226
225
|
|
|
227
|
-
// ── Step 8:
|
|
228
|
-
try {
|
|
229
|
-
await runSkillInstallStep(ctx, signals);
|
|
230
|
-
} catch {
|
|
231
|
-
// Non-fatal — skill installation failure should never block project init
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// ── Step 9: Bootstrap .gsd/ ────────────────────────────────────────────────
|
|
226
|
+
// ── Step 8: Bootstrap .gsd/ ────────────────────────────────────────────────
|
|
235
227
|
bootstrapGsdDirectory(basePath, prefs, signals);
|
|
236
228
|
|
|
237
229
|
// Ensure .gitignore
|
|
@@ -114,21 +114,6 @@ export function resolveModelForComplexity(
|
|
|
114
114
|
const configuredTier = getModelTier(configuredPrimary);
|
|
115
115
|
const requestedTier = classification.tier;
|
|
116
116
|
|
|
117
|
-
// If the configured model is unknown (not in MODEL_CAPABILITY_TIER),
|
|
118
|
-
// honor the user's explicit choice — don't downgrade based on a guess.
|
|
119
|
-
// Unknown models default to "heavy" in getModelTier, which makes every
|
|
120
|
-
// standard/light unit get downgraded to tier_models, silently ignoring
|
|
121
|
-
// the user's configuration. (#2192)
|
|
122
|
-
if (!isKnownModel(configuredPrimary)) {
|
|
123
|
-
return {
|
|
124
|
-
modelId: configuredPrimary,
|
|
125
|
-
fallbacks: phaseConfig.fallbacks,
|
|
126
|
-
tier: requestedTier,
|
|
127
|
-
wasDowngraded: false,
|
|
128
|
-
reason: `configured model "${configuredPrimary}" is not in the known tier map — honoring explicit config`,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
|
|
132
117
|
// Downgrade-only: if requested tier >= configured tier, no change
|
|
133
118
|
if (tierOrdinal(requestedTier) >= tierOrdinal(configuredTier)) {
|
|
134
119
|
return {
|
|
@@ -217,16 +202,6 @@ function getModelTier(modelId: string): ComplexityTier {
|
|
|
217
202
|
return "heavy";
|
|
218
203
|
}
|
|
219
204
|
|
|
220
|
-
/** Check if a model ID has a known capability tier mapping. (#2192) */
|
|
221
|
-
function isKnownModel(modelId: string): boolean {
|
|
222
|
-
const bareId = modelId.includes("/") ? modelId.split("/").pop()! : modelId;
|
|
223
|
-
if (MODEL_CAPABILITY_TIER[bareId]) return true;
|
|
224
|
-
for (const knownId of Object.keys(MODEL_CAPABILITY_TIER)) {
|
|
225
|
-
if (bareId.includes(knownId) || knownId.includes(bareId)) return true;
|
|
226
|
-
}
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
205
|
function findModelForTier(
|
|
231
206
|
tier: ComplexityTier,
|
|
232
207
|
config: DynamicRoutingConfig,
|
|
@@ -74,17 +74,6 @@ export function buildDesktopNotificationCommand(
|
|
|
74
74
|
const normalizedMessage = normalizeNotificationText(message);
|
|
75
75
|
|
|
76
76
|
if (platform === "darwin") {
|
|
77
|
-
// Prefer terminal-notifier: registers as its own Notification Center app,
|
|
78
|
-
// so it gets a proper permission entry in System Settings → Notifications.
|
|
79
|
-
// osascript notifications are silently swallowed when the calling terminal
|
|
80
|
-
// (Ghostty, iTerm2, etc.) lacks notification permissions — exits 0, no error.
|
|
81
|
-
// See: https://github.com/gsd-build/gsd-2/issues/2632
|
|
82
|
-
const tnPath = findExecutable("terminal-notifier");
|
|
83
|
-
if (tnPath) {
|
|
84
|
-
const sound = level === "error" ? "Basso" : "Glass";
|
|
85
|
-
return { file: tnPath, args: ["-title", normalizedTitle, "-message", normalizedMessage, "-sound", sound] };
|
|
86
|
-
}
|
|
87
|
-
// Fallback: osascript (works if terminal app has notification permissions)
|
|
88
77
|
const sound = level === "error" ? 'sound name "Basso"' : 'sound name "Glass"';
|
|
89
78
|
const script = `display notification "${escapeAppleScript(normalizedMessage)}" with title "${escapeAppleScript(normalizedTitle)}" ${sound}`;
|
|
90
79
|
return { file: "osascript", args: ["-e", script] };
|
|
@@ -105,15 +94,3 @@ function normalizeNotificationText(s: string): string {
|
|
|
105
94
|
function escapeAppleScript(s: string): string {
|
|
106
95
|
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
107
96
|
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Locate an executable on PATH. Returns absolute path or null.
|
|
111
|
-
* Non-fatal — returns null on any error.
|
|
112
|
-
*/
|
|
113
|
-
function findExecutable(name: string): string | null {
|
|
114
|
-
try {
|
|
115
|
-
return execFileSync("which", [name], { timeout: 2000, stdio: ["ignore", "pipe", "ignore"] }).toString().trim() || null;
|
|
116
|
-
} catch {
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { existsSync, readdirSync } from "node:fs";
|
|
9
9
|
import { homedir } from "node:os";
|
|
10
10
|
import { isAbsolute, join } from "node:path";
|
|
11
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
11
12
|
import { statSync } from "node:fs";
|
|
12
13
|
|
|
13
14
|
import type {
|
|
@@ -24,20 +25,13 @@ export type { GSDSkillRule, SkillDiscoveryMode, SkillResolution, SkillResolution
|
|
|
24
25
|
|
|
25
26
|
/**
|
|
26
27
|
* Known skill directories, in priority order.
|
|
27
|
-
*
|
|
28
|
-
* Legacy ~/.gsd/agent/skills/ is included as a fallback for pre-migration installs.
|
|
28
|
+
* User skills (~/.gsd/agent/skills/) take precedence over project skills.
|
|
29
29
|
*/
|
|
30
30
|
export function getSkillSearchDirs(cwd: string): Array<{ dir: string; method: SkillResolution["method"] }> {
|
|
31
|
-
|
|
32
|
-
{ dir: join(
|
|
33
|
-
{ dir: join(cwd, ".
|
|
31
|
+
return [
|
|
32
|
+
{ dir: join(getAgentDir(), "skills"), method: "user-skill" },
|
|
33
|
+
{ dir: join(cwd, ".pi", "agent", "skills"), method: "project-skill" },
|
|
34
34
|
];
|
|
35
|
-
// Legacy fallback — read skills from old GSD directory only if migration hasn't completed
|
|
36
|
-
const legacyDir = join(homedir(), ".gsd", "agent", "skills");
|
|
37
|
-
if (existsSync(legacyDir) && !existsSync(join(legacyDir, ".migrated-to-agents"))) {
|
|
38
|
-
dirs.push({ dir: legacyDir, method: "user-skill" });
|
|
39
|
-
}
|
|
40
|
-
return dirs;
|
|
41
35
|
}
|
|
42
36
|
|
|
43
37
|
/**
|
|
@@ -93,7 +93,6 @@ export const KNOWN_PREFERENCE_KEYS = new Set<string>([
|
|
|
93
93
|
"service_tier",
|
|
94
94
|
"forensics_dedup",
|
|
95
95
|
"show_token_cost",
|
|
96
|
-
"experimental",
|
|
97
96
|
]);
|
|
98
97
|
|
|
99
98
|
/** Canonical list of all dispatch unit types. */
|
|
@@ -183,20 +182,6 @@ export interface CmuxPreferences {
|
|
|
183
182
|
browser?: boolean;
|
|
184
183
|
}
|
|
185
184
|
|
|
186
|
-
/**
|
|
187
|
-
* Opt-in experimental features. All features in this block are disabled by
|
|
188
|
-
* default and must be explicitly enabled. They may change or be removed without
|
|
189
|
-
* a deprecation cycle while in experimental status.
|
|
190
|
-
*/
|
|
191
|
-
export interface ExperimentalPreferences {
|
|
192
|
-
/**
|
|
193
|
-
* Enable RTK (Real-Time Kompression) shell-command compression.
|
|
194
|
-
* RTK wraps shell commands to reduce token usage during command execution.
|
|
195
|
-
* Default: false (opt-in required).
|
|
196
|
-
*/
|
|
197
|
-
rtk?: boolean;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
185
|
export interface GSDPreferences {
|
|
201
186
|
version?: number;
|
|
202
187
|
mode?: WorkflowMode;
|
|
@@ -248,11 +233,6 @@ export interface GSDPreferences {
|
|
|
248
233
|
forensics_dedup?: boolean;
|
|
249
234
|
/** Opt-in: show per-prompt and cumulative session token cost in the footer. Default: false. */
|
|
250
235
|
show_token_cost?: boolean;
|
|
251
|
-
/**
|
|
252
|
-
* Opt-in experimental features. All features here are disabled by default.
|
|
253
|
-
* See the preferences reference for details on each feature.
|
|
254
|
-
*/
|
|
255
|
-
experimental?: ExperimentalPreferences;
|
|
256
236
|
}
|
|
257
237
|
|
|
258
238
|
export interface LoadedGSDPreferences {
|
|
@@ -793,31 +793,5 @@ export function validatePreferences(preferences: GSDPreferences): {
|
|
|
793
793
|
}
|
|
794
794
|
}
|
|
795
795
|
|
|
796
|
-
// ─── Experimental Features ────────────────────────────────────────
|
|
797
|
-
if (preferences.experimental !== undefined) {
|
|
798
|
-
if (typeof preferences.experimental === "object" && preferences.experimental !== null) {
|
|
799
|
-
const exp = preferences.experimental as unknown as Record<string, unknown>;
|
|
800
|
-
const validExp: import("./preferences-types.js").ExperimentalPreferences = {};
|
|
801
|
-
|
|
802
|
-
if (exp.rtk !== undefined) {
|
|
803
|
-
if (typeof exp.rtk === "boolean") validExp.rtk = exp.rtk;
|
|
804
|
-
else errors.push("experimental.rtk must be a boolean");
|
|
805
|
-
}
|
|
806
|
-
|
|
807
|
-
const knownExpKeys = new Set(["rtk"]);
|
|
808
|
-
for (const key of Object.keys(exp)) {
|
|
809
|
-
if (!knownExpKeys.has(key)) {
|
|
810
|
-
warnings.push(`unknown experimental key "${key}" — ignored`);
|
|
811
|
-
}
|
|
812
|
-
}
|
|
813
|
-
|
|
814
|
-
if (Object.keys(validExp).length > 0) {
|
|
815
|
-
validated.experimental = validExp;
|
|
816
|
-
}
|
|
817
|
-
} else {
|
|
818
|
-
errors.push("experimental must be an object");
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
|
|
822
796
|
return { preferences: validated, errors, warnings };
|
|
823
797
|
}
|
|
@@ -353,9 +353,6 @@ function mergePreferences(base: GSDPreferences, override: GSDPreferences): GSDPr
|
|
|
353
353
|
service_tier: override.service_tier ?? base.service_tier,
|
|
354
354
|
forensics_dedup: override.forensics_dedup ?? base.forensics_dedup,
|
|
355
355
|
show_token_cost: override.show_token_cost ?? base.show_token_cost,
|
|
356
|
-
experimental: (base.experimental || override.experimental)
|
|
357
|
-
? { ...(base.experimental ?? {}), ...(override.experimental ?? {}) }
|
|
358
|
-
: undefined,
|
|
359
356
|
};
|
|
360
357
|
}
|
|
361
358
|
|
|
@@ -142,10 +142,11 @@ Then **offer GitHub issue creation**: "Would you like me to create a GitHub issu
|
|
|
142
142
|
If yes, create using the `bash` tool:
|
|
143
143
|
|
|
144
144
|
```bash
|
|
145
|
-
# Step 1:
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
145
|
+
# Step 1: Create issue (use labels for metadata, NOT for classification — type is set via GraphQL)
|
|
146
|
+
ISSUE_URL=$(gh issue create --repo gsd-build/gsd-2 \
|
|
147
|
+
--title "..." \
|
|
148
|
+
--label "auto-generated" \
|
|
149
|
+
--body "$(cat <<'EOF'
|
|
149
150
|
## Problem
|
|
150
151
|
[1-2 sentence summary]
|
|
151
152
|
|
|
@@ -168,13 +169,8 @@ cat > /tmp/gsd-forensic-issue.md << 'GSD_ISSUE_BODY'
|
|
|
168
169
|
|
|
169
170
|
---
|
|
170
171
|
*Auto-generated by `/gsd forensics`*
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
ISSUE_URL=$(gh issue create --repo gsd-build/gsd-2 \
|
|
174
|
-
--title "..." \
|
|
175
|
-
--label "auto-generated" \
|
|
176
|
-
--body-file /tmp/gsd-forensic-issue.md)
|
|
177
|
-
rm -f /tmp/gsd-forensic-issue.md
|
|
172
|
+
EOF
|
|
173
|
+
)")
|
|
178
174
|
|
|
179
175
|
# Step 2: Set issue type via GraphQL (gh issue create has no --type flag)
|
|
180
176
|
ISSUE_NUM=$(echo "$ISSUE_URL" | grep -oE '[0-9]+$')
|
|
@@ -24,12 +24,7 @@ All relevant context has been preloaded below — the roadmap, all slice summari
|
|
|
24
24
|
2. For each **slice** in the roadmap, verify its demo/deliverable claim against its summary. Flag any slice whose summary does not substantiate its claimed output.
|
|
25
25
|
3. Check **cross-slice integration points** — do boundary map entries (produces/consumes) align with what was actually built?
|
|
26
26
|
4. Check **requirement coverage** — are all active requirements addressed by at least one slice?
|
|
27
|
-
5.
|
|
28
|
-
- For each verification class (Contract, Integration, Operational, UAT), determine whether slice summaries, UAT results, or observable behavior provide evidence that this verification tier was addressed.
|
|
29
|
-
- Document the compliance status of each class in your verdict rationale.
|
|
30
|
-
- If `Operational` verification is non-empty and no evidence of operational verification exists, flag this explicitly — it means planned operational checks (migrations, deployments, runtime verification) were not proven.
|
|
31
|
-
- A milestone with unaddressed verification classes may still pass if the gaps are minor, but the gaps MUST be documented in the Deferred Work Inventory.
|
|
32
|
-
6. Determine a verdict:
|
|
27
|
+
5. Determine a verdict:
|
|
33
28
|
- `pass` — all criteria met, all slices delivered, no gaps
|
|
34
29
|
- `needs-attention` — minor gaps that do not block completion (document them)
|
|
35
30
|
- `needs-remediation` — material gaps found; remediation slices must be added to the roadmap
|
|
@@ -46,15 +46,6 @@ export function classifyProviderError(errorMsg: string): {
|
|
|
46
46
|
return { isTransient: true, isRateLimit: false, suggestedDelayMs: 15_000 }; // 15s for connection errors
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
// Stream-truncation JSON parse errors — transient (#2572).
|
|
50
|
-
// When the API stream is cut mid-chunk, pi tries to reassemble the partial
|
|
51
|
-
// tool-call JSON and gets a SyntaxError. This is the downstream symptom of
|
|
52
|
-
// a connection drop — same root cause as ECONNRESET, one layer up.
|
|
53
|
-
const isMalformedStream = /Unexpected end of JSON|Unexpected token.*JSON|Expected double-quoted property name|SyntaxError.*JSON/i.test(errorMsg);
|
|
54
|
-
if (isMalformedStream) {
|
|
55
|
-
return { isTransient: true, isRateLimit: false, suggestedDelayMs: 15_000 }; // 15s, same as connection errors
|
|
56
|
-
}
|
|
57
|
-
|
|
58
49
|
// Unknown error — treat as permanent (user reviews)
|
|
59
50
|
return { isTransient: false, isRateLimit: false, suggestedDelayMs: 0 };
|
|
60
51
|
}
|
|
@@ -20,19 +20,20 @@ import type {
|
|
|
20
20
|
import { resolvePostUnitHooks, resolvePreDispatchHooks } from "./preferences.js";
|
|
21
21
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
22
22
|
import { join } from "node:path";
|
|
23
|
-
import { parseUnitId } from "./unit-id.js";
|
|
24
23
|
|
|
25
24
|
// ─── Artifact Path Resolution ──────────────────────────────────────────────
|
|
26
25
|
|
|
27
26
|
export function resolveHookArtifactPath(basePath: string, unitId: string, artifactName: string): string {
|
|
28
|
-
const
|
|
29
|
-
if (
|
|
30
|
-
|
|
27
|
+
const parts = unitId.split("/");
|
|
28
|
+
if (parts.length === 3) {
|
|
29
|
+
const [mid, sid, tid] = parts;
|
|
30
|
+
return join(basePath, ".gsd", "milestones", mid, "slices", sid, "tasks", `${tid}-${artifactName}`);
|
|
31
31
|
}
|
|
32
|
-
if (
|
|
33
|
-
|
|
32
|
+
if (parts.length === 2) {
|
|
33
|
+
const [mid, sid] = parts;
|
|
34
|
+
return join(basePath, ".gsd", "milestones", mid, "slices", sid, artifactName);
|
|
34
35
|
}
|
|
35
|
-
return join(basePath, ".gsd", "milestones",
|
|
36
|
+
return join(basePath, ".gsd", "milestones", parts[0], artifactName);
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
// ─── Dispatch Rule Conversion ──────────────────────────────────────────────
|
|
@@ -211,7 +212,7 @@ export class RuleRegistry {
|
|
|
211
212
|
};
|
|
212
213
|
|
|
213
214
|
// Build prompt with variable substitution
|
|
214
|
-
const
|
|
215
|
+
const [mid, sid, tid] = triggerUnitId.split("/");
|
|
215
216
|
let prompt = config.prompt
|
|
216
217
|
.replace(/\{milestoneId\}/g, mid ?? "")
|
|
217
218
|
.replace(/\{sliceId\}/g, sid ?? "")
|
|
@@ -290,7 +291,7 @@ export class RuleRegistry {
|
|
|
290
291
|
return { action: "proceed", prompt, firedHooks: [] };
|
|
291
292
|
}
|
|
292
293
|
|
|
293
|
-
const
|
|
294
|
+
const [mid, sid, tid] = unitId.split("/");
|
|
294
295
|
const substitute = (text: string): string =>
|
|
295
296
|
text
|
|
296
297
|
.replace(/\{milestoneId\}/g, mid ?? "")
|
|
@@ -505,7 +506,7 @@ export class RuleRegistry {
|
|
|
505
506
|
this.cycleCounts.set(cycleKey, currentCycle);
|
|
506
507
|
this.activeHook.cycle = currentCycle;
|
|
507
508
|
|
|
508
|
-
const
|
|
509
|
+
const [mid, sid, tid] = unitId.split("/");
|
|
509
510
|
const prompt = hook.prompt
|
|
510
511
|
.replace(/\{milestoneId\}/g, mid ?? "")
|
|
511
512
|
.replace(/\{sliceId\}/g, sid ?? "")
|
|
@@ -472,13 +472,9 @@ function formatTraceSummary(trace: ExecutionTrace): string {
|
|
|
472
472
|
if (trace.errors.length > 0) {
|
|
473
473
|
parts.push(`Errors: ${trace.errors.slice(-3).join("; ")}`);
|
|
474
474
|
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
// when the previous turn was truncated or malformed. Crash recovery has its
|
|
479
|
-
// own path (formatCrashRecoveryBriefing) that handles lastReasoning safely
|
|
480
|
-
// with explicit "Last Agent Reasoning Before Interruption" framing.
|
|
481
|
-
// See: https://github.com/gsd-build/gsd-2/issues/2195
|
|
475
|
+
if (trace.lastReasoning) {
|
|
476
|
+
parts.push(`Last reasoning: "${trace.lastReasoning}"`);
|
|
477
|
+
}
|
|
482
478
|
return parts.join("\n");
|
|
483
479
|
}
|
|
484
480
|
|
|
@@ -10,10 +10,9 @@
|
|
|
10
10
|
|
|
11
11
|
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
12
12
|
import { join } from "node:path";
|
|
13
|
-
import {
|
|
13
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
const SKILLS_DIR = join(homedir(), ".agents", "skills");
|
|
15
|
+
const SKILLS_DIR = join(getAgentDir(), "skills");
|
|
17
16
|
|
|
18
17
|
export interface DiscoveredSkill {
|
|
19
18
|
name: string;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
17
17
|
import { join } from "node:path";
|
|
18
|
-
import {
|
|
18
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
19
19
|
import type { UnitMetrics, MetricsLedger } from "./metrics.js";
|
|
20
20
|
import { formatCost, formatTokenCount, loadLedgerFromDisk } from "./metrics.js";
|
|
21
21
|
import { getSkillLastUsed, detectStaleSkills } from "./skill-telemetry.js";
|
|
@@ -208,7 +208,7 @@ export function formatSkillDetail(basePath: string, skillName: string): string {
|
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
// Check for SKILL.md existence
|
|
211
|
-
const skillPath = join(
|
|
211
|
+
const skillPath = join(getAgentDir(), "skills", skillName, "SKILL.md");
|
|
212
212
|
if (existsSync(skillPath)) {
|
|
213
213
|
const stat = require("node:fs").statSync(skillPath);
|
|
214
214
|
lines.push("");
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
15
15
|
import { join } from "node:path";
|
|
16
|
-
import {
|
|
16
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
17
17
|
|
|
18
18
|
// ─── In-memory state ──────────────────────────────────────────────────────────
|
|
19
19
|
|
|
@@ -30,14 +30,8 @@ const activelyLoadedSkills = new Set<string>();
|
|
|
30
30
|
* Called before each unit starts.
|
|
31
31
|
*/
|
|
32
32
|
export function captureAvailableSkills(): void {
|
|
33
|
-
const skillsDir = join(
|
|
34
|
-
|
|
35
|
-
const names = listSkillNames(skillsDir);
|
|
36
|
-
// Include skills still in the legacy directory only if migration hasn't completed
|
|
37
|
-
const legacyMigrated = existsSync(join(legacyDir, ".migrated-to-agents"));
|
|
38
|
-
const legacyNames = legacyMigrated ? [] : listSkillNames(legacyDir);
|
|
39
|
-
const all = new Set([...names, ...legacyNames]);
|
|
40
|
-
availableSkills = [...all];
|
|
33
|
+
const skillsDir = join(getAgentDir(), "skills");
|
|
34
|
+
availableSkills = listSkillNames(skillsDir);
|
|
41
35
|
activelyLoadedSkills.clear();
|
|
42
36
|
}
|
|
43
37
|
|
|
@@ -105,12 +99,8 @@ export function detectStaleSkills(
|
|
|
105
99
|
const stale: string[] = [];
|
|
106
100
|
|
|
107
101
|
// Check all installed skills, not just those with usage data
|
|
108
|
-
const skillsDir = join(
|
|
109
|
-
const
|
|
110
|
-
const legacyMigrated = existsSync(join(legacyDir, ".migrated-to-agents"));
|
|
111
|
-
const legacyNames = legacyMigrated ? [] : listSkillNames(legacyDir);
|
|
112
|
-
const installedSet = new Set([...listSkillNames(skillsDir), ...legacyNames]);
|
|
113
|
-
const installed = [...installedSet];
|
|
102
|
+
const skillsDir = join(getAgentDir(), "skills");
|
|
103
|
+
const installed = listSkillNames(skillsDir);
|
|
114
104
|
|
|
115
105
|
for (const skill of installed) {
|
|
116
106
|
const lastTs = lastUsed.get(skill);
|
|
@@ -34,8 +34,7 @@ import {
|
|
|
34
34
|
gsdRoot,
|
|
35
35
|
} from './paths.js';
|
|
36
36
|
|
|
37
|
-
import { findMilestoneIds } from './milestone-ids.js';
|
|
38
|
-
import { loadQueueOrder, sortByQueueOrder } from './queue-order.js';
|
|
37
|
+
import { milestoneIdSort, findMilestoneIds } from './milestone-ids.js';
|
|
39
38
|
import { nativeBatchParseGsdFiles, type BatchParsedFile } from './native-parser-bridge.js';
|
|
40
39
|
|
|
41
40
|
import { join, resolve } from 'path';
|
|
@@ -150,14 +149,8 @@ export async function getActiveMilestoneId(basePath: string): Promise<string | n
|
|
|
150
149
|
if (isDbAvailable()) {
|
|
151
150
|
const allMilestones = getAllMilestones();
|
|
152
151
|
if (allMilestones.length > 0) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
// guard uses queue order — causing a deadlock.
|
|
156
|
-
const customOrder = loadQueueOrder(basePath);
|
|
157
|
-
const sortedIds = sortByQueueOrder(allMilestones.map(m => m.id), customOrder);
|
|
158
|
-
const byId = new Map(allMilestones.map(m => [m.id, m]));
|
|
159
|
-
for (const id of sortedIds) {
|
|
160
|
-
const m = byId.get(id)!;
|
|
152
|
+
const sorted = [...allMilestones].sort((a, b) => a.id.localeCompare(b.id));
|
|
153
|
+
for (const m of sorted) {
|
|
161
154
|
if (m.status === "complete" || m.status === "done" || m.status === "parked") continue;
|
|
162
155
|
return m.id;
|
|
163
156
|
}
|
|
@@ -311,12 +304,8 @@ export async function deriveStateFromDb(basePath: string): Promise<GSDState> {
|
|
|
311
304
|
} as MilestoneRow);
|
|
312
305
|
}
|
|
313
306
|
}
|
|
314
|
-
// Re-sort so milestones
|
|
315
|
-
|
|
316
|
-
const sortedIds = sortByQueueOrder(allMilestones.map(m => m.id), customOrder);
|
|
317
|
-
const byId = new Map(allMilestones.map(m => [m.id, m]));
|
|
318
|
-
allMilestones.length = 0;
|
|
319
|
-
for (const id of sortedIds) allMilestones.push(byId.get(id)!);
|
|
307
|
+
// Re-sort so milestones are in canonical order after injection
|
|
308
|
+
allMilestones.sort((a, b) => milestoneIdSort(a.id, b.id));
|
|
320
309
|
|
|
321
310
|
// Parallel worker isolation: when locked, filter to just the locked milestone
|
|
322
311
|
const milestoneLock = process.env.GSD_MILESTONE_LOCK;
|
|
@@ -35,18 +35,6 @@ validated_at: {{date}}
|
|
|
35
35
|
|
|
36
36
|
- **{{requirementId}}**: {{status}} — {{disposition: covered by remediation slice / acceptable gap / needs attention}}
|
|
37
37
|
|
|
38
|
-
## Verification Class Compliance
|
|
39
|
-
|
|
40
|
-
<!-- If verification classes were defined during planning, document whether each
|
|
41
|
-
was addressed. Use N/A for classes that were empty or "none" in planning. -->
|
|
42
|
-
|
|
43
|
-
| Class | Planned | Evidence | Status |
|
|
44
|
-
|-------|---------|----------|--------|
|
|
45
|
-
| Contract | {{planned_or_none}} | {{evidence_or_none}} | {{MET / NOT MET / N/A}} |
|
|
46
|
-
| Integration | {{planned_or_none}} | {{evidence_or_none}} | {{MET / NOT MET / N/A}} |
|
|
47
|
-
| Operational | {{planned_or_none}} | {{evidence_or_none}} | {{MET / NOT MET / N/A}} |
|
|
48
|
-
| UAT | {{planned_or_none}} | {{evidence_or_none}} | {{MET / NOT MET / N/A}} |
|
|
49
|
-
|
|
50
38
|
## Remediation Slices
|
|
51
39
|
|
|
52
40
|
<!-- New slices appended to the roadmap to address auto-remediable gaps.
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import test from "node:test";
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
|
-
import { readFileSync } from "node:fs";
|
|
4
|
-
import { join } from "node:path";
|
|
5
3
|
|
|
6
4
|
import {
|
|
7
5
|
unitVerb,
|
|
@@ -13,9 +11,6 @@ import {
|
|
|
13
11
|
extractUatSliceId,
|
|
14
12
|
} from "../auto-dashboard.ts";
|
|
15
13
|
|
|
16
|
-
const autoSource = readFileSync(join(process.cwd(), "src", "resources", "extensions", "gsd", "auto.ts"), "utf-8");
|
|
17
|
-
const dashboardSource = readFileSync(join(process.cwd(), "src", "resources", "extensions", "gsd", "auto-dashboard.ts"), "utf-8");
|
|
18
|
-
|
|
19
14
|
// ─── unitVerb ─────────────────────────────────────────────────────────────
|
|
20
15
|
|
|
21
16
|
test("unitVerb maps known unit types to verbs", () => {
|
|
@@ -185,17 +180,6 @@ test("formatAutoElapsed returns empty string for negative autoStartTime", () =>
|
|
|
185
180
|
assert.equal(formatAutoElapsed(NaN), "");
|
|
186
181
|
});
|
|
187
182
|
|
|
188
|
-
test("getAutoDashboardData returns RTK savings in the dashboard payload", () => {
|
|
189
|
-
assert.match(autoSource, /const rtkSavings = sessionId && s\.basePath/);
|
|
190
|
-
assert.match(autoSource, /rtkSavings,/);
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
test("auto progress widget renders RTK savings under the footer stats line", () => {
|
|
194
|
-
assert.match(dashboardSource, /formatRtkSavingsLabel/);
|
|
195
|
-
assert.match(dashboardSource, /getRtkSessionSavings\(accessors\.getBasePath\(\), sessionId\)/);
|
|
196
|
-
assert.match(dashboardSource, /lines\.push\(rightAlign\("", theme\.fg\("dim", cachedRtkLabel\), width\)\);/);
|
|
197
|
-
});
|
|
198
|
-
|
|
199
183
|
// ─── extractUatSliceId ───────────────────────────────────────────────────
|
|
200
184
|
|
|
201
185
|
test("extractUatSliceId extracts slice ID from M001/S01 format", () => {
|