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
|
@@ -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.
|
|
@@ -222,8 +222,6 @@ function _parseSummaryImpl(content) {
|
|
|
222
222
|
whatHappened: nativeResult.whatHappened,
|
|
223
223
|
deviations: nativeResult.deviations,
|
|
224
224
|
filesModified: nativeResult.filesModified,
|
|
225
|
-
followUps: extractSection(content, 'Follow-ups') ?? '',
|
|
226
|
-
knownLimitations: extractSection(content, 'Known Limitations') ?? '',
|
|
227
225
|
};
|
|
228
226
|
}
|
|
229
227
|
const [fmLines, body] = splitFrontmatter(content);
|
|
@@ -278,9 +276,7 @@ function _parseSummaryImpl(content) {
|
|
|
278
276
|
}
|
|
279
277
|
}
|
|
280
278
|
}
|
|
281
|
-
|
|
282
|
-
const knownLimitations = extractSection(body, 'Known Limitations') ?? '';
|
|
283
|
-
return { frontmatter, title, oneLiner, whatHappened, deviations, filesModified, followUps, knownLimitations };
|
|
279
|
+
return { frontmatter, title, oneLiner, whatHappened, deviations, filesModified };
|
|
284
280
|
}
|
|
285
281
|
// ─── Continue Parser ───────────────────────────────────────────────────────
|
|
286
282
|
export function parseContinue(content) {
|
|
@@ -353,10 +353,7 @@ async function buildDiscussSlicePrompt(mid, sid, sTitle, base, options) {
|
|
|
353
353
|
}
|
|
354
354
|
}
|
|
355
355
|
// Completed slice summaries — what was already built that this slice builds on
|
|
356
|
-
// Ensure DB is open so getMilestoneSlices returns real data (#2560).
|
|
357
356
|
{
|
|
358
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
359
|
-
await ensureDbOpen();
|
|
360
357
|
let normSlices = [];
|
|
361
358
|
if (isDbAvailable()) {
|
|
362
359
|
normSlices = getMilestoneSlices(mid).map(s => ({ id: s.id, done: s.status === "complete" }));
|
|
@@ -479,13 +476,6 @@ export async function showDiscuss(ctx, pi, basePath) {
|
|
|
479
476
|
}
|
|
480
477
|
return;
|
|
481
478
|
}
|
|
482
|
-
// Ensure DB is open before querying slices (#2560).
|
|
483
|
-
// showDiscuss() is a command handler — unlike tool handlers, it has no
|
|
484
|
-
// automatic ensureDbOpen() call. Without this, isDbAvailable() returns
|
|
485
|
-
// false on cold-start sessions and normSlices falls to [] → false
|
|
486
|
-
// "All slices complete" exit.
|
|
487
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
488
|
-
await ensureDbOpen();
|
|
489
479
|
// Guard: no roadmap yet (unless DB has slices)
|
|
490
480
|
const roadmapFile = resolveMilestoneFile(basePath, mid, "ROADMAP");
|
|
491
481
|
const roadmapContent = roadmapFile ? await loadFile(roadmapFile) : null;
|
|
@@ -12,7 +12,6 @@ import { nativeInit } from "./native-git-bridge.js";
|
|
|
12
12
|
import { ensureGitignore, untrackRuntimeFiles } from "./gitignore.js";
|
|
13
13
|
import { gsdRoot } from "./paths.js";
|
|
14
14
|
import { assertSafeDirectory } from "./validate-directory.js";
|
|
15
|
-
import { runSkillInstallStep } from "./skill-catalog.js";
|
|
16
15
|
// ─── Defaults ───────────────────────────────────────────────────────────────────
|
|
17
16
|
const DEFAULT_PREFS = {
|
|
18
17
|
mode: "solo",
|
|
@@ -177,14 +176,7 @@ export async function showProjectInit(ctx, pi, basePath, detection) {
|
|
|
177
176
|
if (advancedChoice === "customize") {
|
|
178
177
|
await customizeAdvancedPrefs(ctx, prefs);
|
|
179
178
|
}
|
|
180
|
-
// ── Step 8:
|
|
181
|
-
try {
|
|
182
|
-
await runSkillInstallStep(ctx, signals);
|
|
183
|
-
}
|
|
184
|
-
catch {
|
|
185
|
-
// Non-fatal — skill installation failure should never block project init
|
|
186
|
-
}
|
|
187
|
-
// ── Step 9: Bootstrap .gsd/ ────────────────────────────────────────────────
|
|
179
|
+
// ── Step 8: Bootstrap .gsd/ ────────────────────────────────────────────────
|
|
188
180
|
bootstrapGsdDirectory(basePath, prefs, signals);
|
|
189
181
|
// Ensure .gitignore
|
|
190
182
|
ensureGitignore(basePath);
|
|
@@ -68,20 +68,6 @@ export function resolveModelForComplexity(classification, phaseConfig, routingCo
|
|
|
68
68
|
const configuredPrimary = phaseConfig.primary;
|
|
69
69
|
const configuredTier = getModelTier(configuredPrimary);
|
|
70
70
|
const requestedTier = classification.tier;
|
|
71
|
-
// If the configured model is unknown (not in MODEL_CAPABILITY_TIER),
|
|
72
|
-
// honor the user's explicit choice — don't downgrade based on a guess.
|
|
73
|
-
// Unknown models default to "heavy" in getModelTier, which makes every
|
|
74
|
-
// standard/light unit get downgraded to tier_models, silently ignoring
|
|
75
|
-
// the user's configuration. (#2192)
|
|
76
|
-
if (!isKnownModel(configuredPrimary)) {
|
|
77
|
-
return {
|
|
78
|
-
modelId: configuredPrimary,
|
|
79
|
-
fallbacks: phaseConfig.fallbacks,
|
|
80
|
-
tier: requestedTier,
|
|
81
|
-
wasDowngraded: false,
|
|
82
|
-
reason: `configured model "${configuredPrimary}" is not in the known tier map — honoring explicit config`,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
71
|
// Downgrade-only: if requested tier >= configured tier, no change
|
|
86
72
|
if (tierOrdinal(requestedTier) >= tierOrdinal(configuredTier)) {
|
|
87
73
|
return {
|
|
@@ -155,17 +141,6 @@ function getModelTier(modelId) {
|
|
|
155
141
|
// Unknown models are assumed heavy (safest assumption)
|
|
156
142
|
return "heavy";
|
|
157
143
|
}
|
|
158
|
-
/** Check if a model ID has a known capability tier mapping. (#2192) */
|
|
159
|
-
function isKnownModel(modelId) {
|
|
160
|
-
const bareId = modelId.includes("/") ? modelId.split("/").pop() : modelId;
|
|
161
|
-
if (MODEL_CAPABILITY_TIER[bareId])
|
|
162
|
-
return true;
|
|
163
|
-
for (const knownId of Object.keys(MODEL_CAPABILITY_TIER)) {
|
|
164
|
-
if (bareId.includes(knownId) || knownId.includes(bareId))
|
|
165
|
-
return true;
|
|
166
|
-
}
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
144
|
function findModelForTier(tier, config, availableModelIds, crossProvider) {
|
|
170
145
|
// 1. Check explicit tier_models config
|
|
171
146
|
const explicitModel = config.tier_models?.[tier];
|
|
@@ -49,17 +49,6 @@ export function buildDesktopNotificationCommand(platform, title, message, level
|
|
|
49
49
|
const normalizedTitle = normalizeNotificationText(title);
|
|
50
50
|
const normalizedMessage = normalizeNotificationText(message);
|
|
51
51
|
if (platform === "darwin") {
|
|
52
|
-
// Prefer terminal-notifier: registers as its own Notification Center app,
|
|
53
|
-
// so it gets a proper permission entry in System Settings → Notifications.
|
|
54
|
-
// osascript notifications are silently swallowed when the calling terminal
|
|
55
|
-
// (Ghostty, iTerm2, etc.) lacks notification permissions — exits 0, no error.
|
|
56
|
-
// See: https://github.com/gsd-build/gsd-2/issues/2632
|
|
57
|
-
const tnPath = findExecutable("terminal-notifier");
|
|
58
|
-
if (tnPath) {
|
|
59
|
-
const sound = level === "error" ? "Basso" : "Glass";
|
|
60
|
-
return { file: tnPath, args: ["-title", normalizedTitle, "-message", normalizedMessage, "-sound", sound] };
|
|
61
|
-
}
|
|
62
|
-
// Fallback: osascript (works if terminal app has notification permissions)
|
|
63
52
|
const sound = level === "error" ? 'sound name "Basso"' : 'sound name "Glass"';
|
|
64
53
|
const script = `display notification "${escapeAppleScript(normalizedMessage)}" with title "${escapeAppleScript(normalizedTitle)}" ${sound}`;
|
|
65
54
|
return { file: "osascript", args: ["-e", script] };
|
|
@@ -76,15 +65,3 @@ function normalizeNotificationText(s) {
|
|
|
76
65
|
function escapeAppleScript(s) {
|
|
77
66
|
return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
78
67
|
}
|
|
79
|
-
/**
|
|
80
|
-
* Locate an executable on PATH. Returns absolute path or null.
|
|
81
|
-
* Non-fatal — returns null on any error.
|
|
82
|
-
*/
|
|
83
|
-
function findExecutable(name) {
|
|
84
|
-
try {
|
|
85
|
-
return execFileSync("which", [name], { timeout: 2000, stdio: ["ignore", "pipe", "ignore"] }).toString().trim() || null;
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
@@ -7,25 +7,19 @@
|
|
|
7
7
|
import { existsSync, readdirSync } from "node:fs";
|
|
8
8
|
import { homedir } from "node:os";
|
|
9
9
|
import { isAbsolute, join } from "node:path";
|
|
10
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
10
11
|
import { statSync } from "node:fs";
|
|
11
12
|
import { validatePreferences } from "./preferences-validation.js";
|
|
12
13
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
13
14
|
/**
|
|
14
15
|
* Known skill directories, in priority order.
|
|
15
|
-
*
|
|
16
|
-
* Legacy ~/.gsd/agent/skills/ is included as a fallback for pre-migration installs.
|
|
16
|
+
* User skills (~/.gsd/agent/skills/) take precedence over project skills.
|
|
17
17
|
*/
|
|
18
18
|
export function getSkillSearchDirs(cwd) {
|
|
19
|
-
|
|
20
|
-
{ dir: join(
|
|
21
|
-
{ dir: join(cwd, ".
|
|
19
|
+
return [
|
|
20
|
+
{ dir: join(getAgentDir(), "skills"), method: "user-skill" },
|
|
21
|
+
{ dir: join(cwd, ".pi", "agent", "skills"), method: "project-skill" },
|
|
22
22
|
];
|
|
23
|
-
// Legacy fallback — read skills from old GSD directory only if migration hasn't completed
|
|
24
|
-
const legacyDir = join(homedir(), ".gsd", "agent", "skills");
|
|
25
|
-
if (existsSync(legacyDir) && !existsSync(join(legacyDir, ".migrated-to-agents"))) {
|
|
26
|
-
dirs.push({ dir: legacyDir, method: "user-skill" });
|
|
27
|
-
}
|
|
28
|
-
return dirs;
|
|
29
23
|
}
|
|
30
24
|
/**
|
|
31
25
|
* Resolve a single skill reference to an absolute path.
|
|
@@ -823,30 +823,5 @@ export function validatePreferences(preferences) {
|
|
|
823
823
|
errors.push("show_token_cost must be a boolean");
|
|
824
824
|
}
|
|
825
825
|
}
|
|
826
|
-
// ─── Experimental Features ────────────────────────────────────────
|
|
827
|
-
if (preferences.experimental !== undefined) {
|
|
828
|
-
if (typeof preferences.experimental === "object" && preferences.experimental !== null) {
|
|
829
|
-
const exp = preferences.experimental;
|
|
830
|
-
const validExp = {};
|
|
831
|
-
if (exp.rtk !== undefined) {
|
|
832
|
-
if (typeof exp.rtk === "boolean")
|
|
833
|
-
validExp.rtk = exp.rtk;
|
|
834
|
-
else
|
|
835
|
-
errors.push("experimental.rtk must be a boolean");
|
|
836
|
-
}
|
|
837
|
-
const knownExpKeys = new Set(["rtk"]);
|
|
838
|
-
for (const key of Object.keys(exp)) {
|
|
839
|
-
if (!knownExpKeys.has(key)) {
|
|
840
|
-
warnings.push(`unknown experimental key "${key}" — ignored`);
|
|
841
|
-
}
|
|
842
|
-
}
|
|
843
|
-
if (Object.keys(validExp).length > 0) {
|
|
844
|
-
validated.experimental = validExp;
|
|
845
|
-
}
|
|
846
|
-
}
|
|
847
|
-
else {
|
|
848
|
-
errors.push("experimental must be an object");
|
|
849
|
-
}
|
|
850
|
-
}
|
|
851
826
|
return { preferences: validated, errors, warnings };
|
|
852
827
|
}
|
|
@@ -275,9 +275,6 @@ function mergePreferences(base, override) {
|
|
|
275
275
|
service_tier: override.service_tier ?? base.service_tier,
|
|
276
276
|
forensics_dedup: override.forensics_dedup ?? base.forensics_dedup,
|
|
277
277
|
show_token_cost: override.show_token_cost ?? base.show_token_cost,
|
|
278
|
-
experimental: (base.experimental || override.experimental)
|
|
279
|
-
? { ...(base.experimental ?? {}), ...(override.experimental ?? {}) }
|
|
280
|
-
: undefined,
|
|
281
278
|
};
|
|
282
279
|
}
|
|
283
280
|
function mergeStringLists(base, override) {
|
|
@@ -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
|
|
@@ -31,14 +31,6 @@ export function classifyProviderError(errorMsg) {
|
|
|
31
31
|
if (isConnectionError) {
|
|
32
32
|
return { isTransient: true, isRateLimit: false, suggestedDelayMs: 15_000 }; // 15s for connection errors
|
|
33
33
|
}
|
|
34
|
-
// Stream-truncation JSON parse errors — transient (#2572).
|
|
35
|
-
// When the API stream is cut mid-chunk, pi tries to reassemble the partial
|
|
36
|
-
// tool-call JSON and gets a SyntaxError. This is the downstream symptom of
|
|
37
|
-
// a connection drop — same root cause as ECONNRESET, one layer up.
|
|
38
|
-
const isMalformedStream = /Unexpected end of JSON|Unexpected token.*JSON|Expected double-quoted property name|SyntaxError.*JSON/i.test(errorMsg);
|
|
39
|
-
if (isMalformedStream) {
|
|
40
|
-
return { isTransient: true, isRateLimit: false, suggestedDelayMs: 15_000 }; // 15s, same as connection errors
|
|
41
|
-
}
|
|
42
34
|
// Unknown error — treat as permanent (user reviews)
|
|
43
35
|
return { isTransient: false, isRateLimit: false, suggestedDelayMs: 0 };
|
|
44
36
|
}
|
|
@@ -8,17 +8,18 @@
|
|
|
8
8
|
import { resolvePostUnitHooks, resolvePreDispatchHooks } from "./preferences.js";
|
|
9
9
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
10
10
|
import { join } from "node:path";
|
|
11
|
-
import { parseUnitId } from "./unit-id.js";
|
|
12
11
|
// ─── Artifact Path Resolution ──────────────────────────────────────────────
|
|
13
12
|
export function resolveHookArtifactPath(basePath, unitId, artifactName) {
|
|
14
|
-
const
|
|
15
|
-
if (
|
|
16
|
-
|
|
13
|
+
const parts = unitId.split("/");
|
|
14
|
+
if (parts.length === 3) {
|
|
15
|
+
const [mid, sid, tid] = parts;
|
|
16
|
+
return join(basePath, ".gsd", "milestones", mid, "slices", sid, "tasks", `${tid}-${artifactName}`);
|
|
17
17
|
}
|
|
18
|
-
if (
|
|
19
|
-
|
|
18
|
+
if (parts.length === 2) {
|
|
19
|
+
const [mid, sid] = parts;
|
|
20
|
+
return join(basePath, ".gsd", "milestones", mid, "slices", sid, artifactName);
|
|
20
21
|
}
|
|
21
|
-
return join(basePath, ".gsd", "milestones",
|
|
22
|
+
return join(basePath, ".gsd", "milestones", parts[0], artifactName);
|
|
22
23
|
}
|
|
23
24
|
// ─── Dispatch Rule Conversion ──────────────────────────────────────────────
|
|
24
25
|
/**
|
|
@@ -162,7 +163,7 @@ export class RuleRegistry {
|
|
|
162
163
|
pendingRetry: false,
|
|
163
164
|
};
|
|
164
165
|
// Build prompt with variable substitution
|
|
165
|
-
const
|
|
166
|
+
const [mid, sid, tid] = triggerUnitId.split("/");
|
|
166
167
|
let prompt = config.prompt
|
|
167
168
|
.replace(/\{milestoneId\}/g, mid ?? "")
|
|
168
169
|
.replace(/\{sliceId\}/g, sid ?? "")
|
|
@@ -223,7 +224,7 @@ export class RuleRegistry {
|
|
|
223
224
|
if (hooks.length === 0) {
|
|
224
225
|
return { action: "proceed", prompt, firedHooks: [] };
|
|
225
226
|
}
|
|
226
|
-
const
|
|
227
|
+
const [mid, sid, tid] = unitId.split("/");
|
|
227
228
|
const substitute = (text) => text
|
|
228
229
|
.replace(/\{milestoneId\}/g, mid ?? "")
|
|
229
230
|
.replace(/\{sliceId\}/g, sid ?? "")
|
|
@@ -409,7 +410,7 @@ export class RuleRegistry {
|
|
|
409
410
|
const currentCycle = (this.cycleCounts.get(cycleKey) ?? 0) + 1;
|
|
410
411
|
this.cycleCounts.set(cycleKey, currentCycle);
|
|
411
412
|
this.activeHook.cycle = currentCycle;
|
|
412
|
-
const
|
|
413
|
+
const [mid, sid, tid] = unitId.split("/");
|
|
413
414
|
const prompt = hook.prompt
|
|
414
415
|
.replace(/\{milestoneId\}/g, mid ?? "")
|
|
415
416
|
.replace(/\{sliceId\}/g, sid ?? "")
|
|
@@ -363,13 +363,9 @@ function formatTraceSummary(trace) {
|
|
|
363
363
|
if (trace.errors.length > 0) {
|
|
364
364
|
parts.push(`Errors: ${trace.errors.slice(-3).join("; ")}`);
|
|
365
365
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
// when the previous turn was truncated or malformed. Crash recovery has its
|
|
370
|
-
// own path (formatCrashRecoveryBriefing) that handles lastReasoning safely
|
|
371
|
-
// with explicit "Last Agent Reasoning Before Interruption" framing.
|
|
372
|
-
// See: https://github.com/gsd-build/gsd-2/issues/2195
|
|
366
|
+
if (trace.lastReasoning) {
|
|
367
|
+
parts.push(`Last reasoning: "${trace.lastReasoning}"`);
|
|
368
|
+
}
|
|
373
369
|
return parts.join("\n");
|
|
374
370
|
}
|
|
375
371
|
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
@@ -9,9 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
11
11
|
import { join } from "node:path";
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
const SKILLS_DIR = join(homedir(), ".agents", "skills");
|
|
12
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
13
|
+
const SKILLS_DIR = join(getAgentDir(), "skills");
|
|
15
14
|
/** Snapshot of skill names at auto-mode start */
|
|
16
15
|
let baselineSkills = null;
|
|
17
16
|
/**
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { existsSync } from "node:fs";
|
|
16
16
|
import { join } from "node:path";
|
|
17
|
-
import {
|
|
17
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
18
18
|
import { formatCost, formatTokenCount, loadLedgerFromDisk } from "./metrics.js";
|
|
19
19
|
import { detectStaleSkills } from "./skill-telemetry.js";
|
|
20
20
|
// ─── Constants ────────────────────────────────────────────────────────────────
|
|
@@ -141,7 +141,7 @@ export function formatSkillDetail(basePath, skillName) {
|
|
|
141
141
|
lines.push(` ${date} ${u.id.padEnd(20)} ${formatTokenCount(u.tokens.total).padStart(8)} tokens ${formatCost(u.cost)}`);
|
|
142
142
|
}
|
|
143
143
|
// Check for SKILL.md existence
|
|
144
|
-
const skillPath = join(
|
|
144
|
+
const skillPath = join(getAgentDir(), "skills", skillName, "SKILL.md");
|
|
145
145
|
if (existsSync(skillPath)) {
|
|
146
146
|
const stat = require("node:fs").statSync(skillPath);
|
|
147
147
|
lines.push("");
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { existsSync, readdirSync } from "node:fs";
|
|
14
14
|
import { join } from "node:path";
|
|
15
|
-
import {
|
|
15
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
16
16
|
// ─── In-memory state ──────────────────────────────────────────────────────────
|
|
17
17
|
/** Skills available in the system prompt for the current unit */
|
|
18
18
|
let availableSkills = [];
|
|
@@ -24,14 +24,8 @@ const activelyLoadedSkills = new Set();
|
|
|
24
24
|
* Called before each unit starts.
|
|
25
25
|
*/
|
|
26
26
|
export function captureAvailableSkills() {
|
|
27
|
-
const skillsDir = join(
|
|
28
|
-
|
|
29
|
-
const names = listSkillNames(skillsDir);
|
|
30
|
-
// Include skills still in the legacy directory only if migration hasn't completed
|
|
31
|
-
const legacyMigrated = existsSync(join(legacyDir, ".migrated-to-agents"));
|
|
32
|
-
const legacyNames = legacyMigrated ? [] : listSkillNames(legacyDir);
|
|
33
|
-
const all = new Set([...names, ...legacyNames]);
|
|
34
|
-
availableSkills = [...all];
|
|
27
|
+
const skillsDir = join(getAgentDir(), "skills");
|
|
28
|
+
availableSkills = listSkillNames(skillsDir);
|
|
35
29
|
activelyLoadedSkills.clear();
|
|
36
30
|
}
|
|
37
31
|
/**
|
|
@@ -91,12 +85,8 @@ export function detectStaleSkills(units, thresholdDays) {
|
|
|
91
85
|
const cutoff = Date.now() - (thresholdDays * 24 * 60 * 60 * 1000);
|
|
92
86
|
const stale = [];
|
|
93
87
|
// Check all installed skills, not just those with usage data
|
|
94
|
-
const skillsDir = join(
|
|
95
|
-
const
|
|
96
|
-
const legacyMigrated = existsSync(join(legacyDir, ".migrated-to-agents"));
|
|
97
|
-
const legacyNames = legacyMigrated ? [] : listSkillNames(legacyDir);
|
|
98
|
-
const installedSet = new Set([...listSkillNames(skillsDir), ...legacyNames]);
|
|
99
|
-
const installed = [...installedSet];
|
|
88
|
+
const skillsDir = join(getAgentDir(), "skills");
|
|
89
|
+
const installed = listSkillNames(skillsDir);
|
|
100
90
|
for (const skill of installed) {
|
|
101
91
|
const lastTs = lastUsed.get(skill);
|
|
102
92
|
if (lastTs === undefined || lastTs < cutoff) {
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
import { parseRoadmap, parsePlan, } from './parsers-legacy.js';
|
|
5
5
|
import { parseSummary, loadFile, parseRequirementCounts, parseContextDependsOn, } from './files.js';
|
|
6
6
|
import { resolveMilestoneFile, resolveSlicePath, resolveSliceFile, resolveTaskFile, resolveTasksDir, resolveGsdRootFile, gsdRoot, } from './paths.js';
|
|
7
|
-
import { findMilestoneIds } from './milestone-ids.js';
|
|
8
|
-
import { loadQueueOrder, sortByQueueOrder } from './queue-order.js';
|
|
7
|
+
import { milestoneIdSort, findMilestoneIds } from './milestone-ids.js';
|
|
9
8
|
import { nativeBatchParseGsdFiles } from './native-parser-bridge.js';
|
|
10
9
|
import { join, resolve } from 'path';
|
|
11
10
|
import { existsSync, readdirSync } from 'node:fs';
|
|
@@ -85,14 +84,8 @@ export async function getActiveMilestoneId(basePath) {
|
|
|
85
84
|
if (isDbAvailable()) {
|
|
86
85
|
const allMilestones = getAllMilestones();
|
|
87
86
|
if (allMilestones.length > 0) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
// guard uses queue order — causing a deadlock.
|
|
91
|
-
const customOrder = loadQueueOrder(basePath);
|
|
92
|
-
const sortedIds = sortByQueueOrder(allMilestones.map(m => m.id), customOrder);
|
|
93
|
-
const byId = new Map(allMilestones.map(m => [m.id, m]));
|
|
94
|
-
for (const id of sortedIds) {
|
|
95
|
-
const m = byId.get(id);
|
|
87
|
+
const sorted = [...allMilestones].sort((a, b) => a.id.localeCompare(b.id));
|
|
88
|
+
for (const m of sorted) {
|
|
96
89
|
if (m.status === "complete" || m.status === "done" || m.status === "parked")
|
|
97
90
|
continue;
|
|
98
91
|
return m.id;
|
|
@@ -240,13 +233,8 @@ export async function deriveStateFromDb(basePath) {
|
|
|
240
233
|
});
|
|
241
234
|
}
|
|
242
235
|
}
|
|
243
|
-
// Re-sort so milestones
|
|
244
|
-
|
|
245
|
-
const sortedIds = sortByQueueOrder(allMilestones.map(m => m.id), customOrder);
|
|
246
|
-
const byId = new Map(allMilestones.map(m => [m.id, m]));
|
|
247
|
-
allMilestones.length = 0;
|
|
248
|
-
for (const id of sortedIds)
|
|
249
|
-
allMilestones.push(byId.get(id));
|
|
236
|
+
// Re-sort so milestones are in canonical order after injection
|
|
237
|
+
allMilestones.sort((a, b) => milestoneIdSort(a.id, b.id));
|
|
250
238
|
// Parallel worker isolation: when locked, filter to just the locked milestone
|
|
251
239
|
const milestoneLock = process.env.GSD_MILESTONE_LOCK;
|
|
252
240
|
const milestones = milestoneLock
|
|
@@ -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.
|
|
@@ -7,28 +7,17 @@ const require = createRequire(import.meta.url);
|
|
|
7
7
|
const ROOT = new URL("../../../../../", import.meta.url);
|
|
8
8
|
|
|
9
9
|
export function resolve(specifier, context, nextResolve) {
|
|
10
|
-
// 1.
|
|
11
|
-
// CI portability runs don't build any packages/ dist artifacts, so every
|
|
12
|
-
// @gsd/* specifier (including transitive ones pulled in by pi-coding-agent
|
|
13
|
-
// source itself) must resolve to the TypeScript source entrypoint.
|
|
10
|
+
// 1. Direct redirects to dist/ for specific packages
|
|
14
11
|
if (specifier === "../../packages/pi-coding-agent/src/index.js") {
|
|
15
|
-
specifier = new URL("packages/pi-coding-agent/
|
|
16
|
-
} else if (specifier === "@gsd/pi-coding-agent") {
|
|
17
|
-
specifier = new URL("packages/pi-coding-agent/src/index.ts", ROOT).href;
|
|
12
|
+
specifier = new URL("packages/pi-coding-agent/dist/index.js", ROOT).href;
|
|
18
13
|
} else if (specifier === "@gsd/pi-ai/oauth") {
|
|
19
|
-
specifier = new URL("packages/pi-ai/
|
|
14
|
+
specifier = new URL("packages/pi-ai/dist/utils/oauth/index.js", ROOT).href;
|
|
20
15
|
} else if (specifier === "@gsd/pi-ai") {
|
|
21
|
-
specifier = new URL("packages/pi-ai/
|
|
16
|
+
specifier = new URL("packages/pi-ai/dist/index.js", ROOT).href;
|
|
22
17
|
} else if (specifier === "@gsd/pi-agent-core") {
|
|
23
|
-
specifier = new URL("packages/pi-agent-core/
|
|
18
|
+
specifier = new URL("packages/pi-agent-core/dist/index.js", ROOT).href;
|
|
24
19
|
} else if (specifier === "@gsd/pi-tui") {
|
|
25
|
-
specifier = new URL("packages/pi-tui/
|
|
26
|
-
} else if (specifier === "@gsd/native") {
|
|
27
|
-
specifier = new URL("packages/native/src/index.ts", ROOT).href;
|
|
28
|
-
} else if (specifier.startsWith("@gsd/native/")) {
|
|
29
|
-
// Sub-path imports like @gsd/native/fd, @gsd/native/text, etc.
|
|
30
|
-
const subpath = specifier.slice("@gsd/native/".length);
|
|
31
|
-
specifier = new URL(`packages/native/src/${subpath}/index.ts`, ROOT).href;
|
|
20
|
+
specifier = new URL("packages/pi-tui/dist/index.js", ROOT).href;
|
|
32
21
|
}
|
|
33
22
|
// 2. Redirect packages/*/dist/ → packages/*/src/ with .js→.ts for strip-types
|
|
34
23
|
// Also handles local imports — skip rewrite for dist/ paths that are real compiled artifacts.
|
|
@@ -65,15 +54,9 @@ export function resolve(specifier, context, nextResolve) {
|
|
|
65
54
|
}
|
|
66
55
|
|
|
67
56
|
export function load(url, context, nextLoad) {
|
|
68
|
-
// Node's --experimental-strip-types handles
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
// files through TypeScript's transpileModule to avoid those crashes.
|
|
72
|
-
const shouldTranspileWithTypeScript =
|
|
73
|
-
url.endsWith('.tsx') ||
|
|
74
|
-
(url.endsWith('.ts') && url.includes('/packages/') && url.includes('/src/'));
|
|
75
|
-
|
|
76
|
-
if (shouldTranspileWithTypeScript) {
|
|
57
|
+
// Node's --experimental-strip-types handles .ts but not .tsx (which may contain JSX).
|
|
58
|
+
// Use TypeScript to transpile .tsx → JS with react-jsx transform, then serve as module.
|
|
59
|
+
if (url.endsWith('.tsx')) {
|
|
77
60
|
const ts = require('typescript');
|
|
78
61
|
const source = readFileSync(fileURLToPath(url), 'utf-8');
|
|
79
62
|
const { outputText } = ts.transpileModule(source, {
|
|
@@ -83,8 +66,6 @@ export function load(url, context, nextLoad) {
|
|
|
83
66
|
module: ts.ModuleKind.ESNext,
|
|
84
67
|
target: ts.ScriptTarget.ESNext,
|
|
85
68
|
esModuleInterop: true,
|
|
86
|
-
experimentalDecorators: true,
|
|
87
|
-
emitDecoratorMetadata: true,
|
|
88
69
|
},
|
|
89
70
|
});
|
|
90
71
|
return { format: 'module', source: outputText, shortCircuit: true };
|