gsd-pi 2.43.0 → 2.44.0-dev.62b5d6c
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/dist/cli.js +13 -1
- package/dist/help-text.js +24 -0
- package/dist/resources/extensions/bg-shell/overlay.js +3 -0
- package/dist/resources/extensions/github-sync/sync.js +2 -1
- package/dist/resources/extensions/gsd/auto/loop.js +0 -2
- package/dist/resources/extensions/gsd/auto/phases.js +7 -12
- package/dist/resources/extensions/gsd/auto-dashboard.js +19 -18
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +34 -19
- package/dist/resources/extensions/gsd/auto-dispatch.js +36 -21
- package/dist/resources/extensions/gsd/auto-post-unit.js +128 -14
- package/dist/resources/extensions/gsd/auto-prompts.js +202 -92
- package/dist/resources/extensions/gsd/auto-recovery.js +83 -135
- package/dist/resources/extensions/gsd/auto-supervisor.js +14 -0
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +4 -7
- package/dist/resources/extensions/gsd/auto-verification.js +5 -10
- package/dist/resources/extensions/gsd/auto-worktree.js +123 -30
- package/dist/resources/extensions/gsd/auto.js +1 -4
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +611 -0
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +28 -3
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +7 -0
- package/dist/resources/extensions/gsd/commands/catalog.js +3 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +15 -1
- package/dist/resources/extensions/gsd/commands-handlers.js +1 -1
- package/dist/resources/extensions/gsd/commands-maintenance.js +78 -3
- package/dist/resources/extensions/gsd/dashboard-overlay.js +32 -31
- package/dist/resources/extensions/gsd/db-writer.js +95 -4
- package/dist/resources/extensions/gsd/dispatch-guard.js +35 -30
- package/dist/resources/extensions/gsd/doctor-checks.js +28 -11
- package/dist/resources/extensions/gsd/doctor-environment.js +28 -0
- package/dist/resources/extensions/gsd/doctor-types.js +0 -15
- package/dist/resources/extensions/gsd/doctor.js +46 -282
- package/dist/resources/extensions/gsd/file-watcher.js +5 -1
- package/dist/resources/extensions/gsd/files.js +14 -198
- package/dist/resources/extensions/gsd/git-service.js +4 -0
- package/dist/resources/extensions/gsd/gitignore.js +4 -0
- package/dist/resources/extensions/gsd/gsd-db.js +819 -197
- package/dist/resources/extensions/gsd/guided-flow.js +18 -8
- package/dist/resources/extensions/gsd/markdown-renderer.js +862 -0
- package/dist/resources/extensions/gsd/md-importer.js +182 -4
- package/dist/resources/extensions/gsd/native-git-bridge.js +10 -1
- package/dist/resources/extensions/gsd/parallel-eligibility.js +14 -19
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +38 -0
- package/dist/resources/extensions/gsd/parsers-legacy.js +239 -0
- package/dist/resources/extensions/gsd/preferences-types.js +1 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +9 -0
- package/dist/resources/extensions/gsd/preferences.js +1 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +22 -9
- package/dist/resources/extensions/gsd/prompts/discuss.md +2 -2
- package/dist/resources/extensions/gsd/prompts/execute-task.md +15 -5
- package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +6 -10
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -7
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +3 -3
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -7
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +6 -6
- package/dist/resources/extensions/gsd/reactive-graph.js +33 -3
- package/dist/resources/extensions/gsd/skill-health.js +3 -1
- package/dist/resources/extensions/gsd/state.js +484 -30
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +128 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +244 -0
- package/dist/resources/extensions/gsd/tools/complete-task.js +204 -0
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +205 -0
- package/dist/resources/extensions/gsd/tools/plan-slice.js +155 -0
- package/dist/resources/extensions/gsd/tools/plan-task.js +94 -0
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +152 -0
- package/dist/resources/extensions/gsd/tools/replan-slice.js +146 -0
- package/dist/resources/extensions/gsd/triage-resolution.js +17 -1
- package/dist/resources/extensions/gsd/undo.js +197 -3
- package/dist/resources/extensions/gsd/visualizer-data.js +53 -16
- package/dist/resources/extensions/gsd/workspace-index.js +63 -39
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -16
- 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 +1 -1
- package/dist/web/standalone/.next/required-server-files.json +4 -4
- package/dist/web/standalone/.next/routes-manifest.json +6 -0
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +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_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_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_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_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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_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_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_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_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_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_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_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_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_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_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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +5 -5
- 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_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_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_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_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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -0
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -0
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -0
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +5 -5
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -16
- package/dist/web/standalone/.next/server/chunks/229.js +3 -3
- package/dist/web/standalone/.next/server/chunks/471.js +3 -3
- package/dist/web/standalone/.next/server/functions-config-manifest.json +1 -0
- 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 +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/{4024.c195dc1fdd2adbea.js → 4024.0de81b543b28b9fe.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/app/_global-error/{page-d07a2c023f1aef1e.js → page-d83ba70a25a85472.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-f2a7482d42a5614b.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/boot/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
- 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 +1 -0
- package/dist/web/standalone/.next/static/chunks/app/page-b9367c5ae13b99c6.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{main-app-2f2ee7b85712c2bd.js → main-app-fdab67f7802d7832.js} +1 -1
- 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-459824ffb8c323dd.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-fa307370fcf9fb2c.js → webpack-9014b5adb127a98a.js} +1 -1
- package/dist/web/standalone/.next/static/css/8a727f372cf53002.css +1 -0
- package/dist/web/standalone/.next/static/fOnWQBjWXMKUs4bqTg530/_buildManifest.js +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 +4 -4
- package/packages/pi-ai/dist/models.custom.d.ts +173 -0
- package/packages/pi-ai/dist/models.custom.d.ts.map +1 -0
- package/packages/pi-ai/dist/models.custom.js +170 -0
- package/packages/pi-ai/dist/models.custom.js.map +1 -0
- package/packages/pi-ai/dist/models.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.js +16 -1
- package/packages/pi-ai/dist/models.js.map +1 -1
- package/packages/pi-ai/dist/models.test.d.ts +2 -0
- package/packages/pi-ai/dist/models.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/models.test.js +67 -0
- package/packages/pi-ai/dist/models.test.js.map +1 -0
- package/packages/pi-ai/src/models.custom.ts +172 -0
- package/packages/pi-ai/src/models.test.ts +85 -0
- package/packages/pi-ai/src/models.ts +17 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +10 -3
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +21 -34
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +4 -4
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.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/loader.d.ts +6 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +80 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.test.js +63 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +37 -0
- 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/fallback-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/fallback-resolver.js +2 -3
- package/packages/pi-coding-agent/dist/core/fallback-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js +12 -2
- package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts +38 -0
- package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js +192 -0
- package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +5 -0
- package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/client.js +69 -21
- package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +255 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +40 -3
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-commands.d.ts +25 -0
- package/packages/pi-coding-agent/dist/core/package-commands.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/package-commands.js +253 -0
- package/packages/pi-coding-agent/dist/core/package-commands.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/package-commands.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/package-commands.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/package-commands.test.js +225 -0
- package/packages/pi-coding-agent/dist/core/package-commands.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +4 -0
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +3 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -0
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/main.js +11 -199
- package/packages/pi-coding-agent/dist/main.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +6 -0
- 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 +21 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +8 -15
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.js +45 -34
- package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js +7 -2
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +2 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +26 -37
- package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +2 -2
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +3 -3
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +4 -4
- package/packages/pi-coding-agent/src/core/extensions/index.ts +5 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.test.ts +96 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +89 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +44 -0
- package/packages/pi-coding-agent/src/core/fallback-resolver.test.ts +15 -2
- package/packages/pi-coding-agent/src/core/fallback-resolver.ts +2 -3
- package/packages/pi-coding-agent/src/core/lifecycle-hooks.ts +274 -0
- package/packages/pi-coding-agent/src/core/lsp/client.ts +83 -21
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +288 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +39 -3
- package/packages/pi-coding-agent/src/core/package-commands.test.ts +240 -0
- package/packages/pi-coding-agent/src/core/package-commands.ts +310 -0
- package/packages/pi-coding-agent/src/core/sdk.ts +4 -0
- package/packages/pi-coding-agent/src/index.ts +7 -0
- package/packages/pi-coding-agent/src/main.ts +11 -232
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +20 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +9 -16
- package/packages/pi-coding-agent/src/modes/print-mode.ts +42 -32
- package/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +8 -2
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +8 -15
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/bg-shell/overlay.ts +4 -0
- package/src/resources/extensions/github-sync/sync.ts +2 -1
- package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -8
- package/src/resources/extensions/gsd/auto/loop.ts +0 -2
- package/src/resources/extensions/gsd/auto/phases.ts +7 -20
- package/src/resources/extensions/gsd/auto/types.ts +0 -1
- package/src/resources/extensions/gsd/auto-dashboard.ts +20 -16
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +34 -19
- package/src/resources/extensions/gsd/auto-dispatch.ts +38 -21
- package/src/resources/extensions/gsd/auto-post-unit.ts +150 -15
- package/src/resources/extensions/gsd/auto-prompts.ts +186 -103
- package/src/resources/extensions/gsd/auto-recovery.ts +77 -142
- package/src/resources/extensions/gsd/auto-supervisor.ts +14 -0
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +6 -7
- package/src/resources/extensions/gsd/auto-verification.ts +4 -9
- package/src/resources/extensions/gsd/auto-worktree.ts +126 -30
- package/src/resources/extensions/gsd/auto.ts +0 -9
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +675 -4
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +31 -3
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +7 -0
- package/src/resources/extensions/gsd/commands/catalog.ts +3 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +15 -1
- package/src/resources/extensions/gsd/commands-handlers.ts +1 -1
- package/src/resources/extensions/gsd/commands-maintenance.ts +86 -3
- package/src/resources/extensions/gsd/dashboard-overlay.ts +17 -13
- package/src/resources/extensions/gsd/db-writer.ts +105 -4
- package/src/resources/extensions/gsd/dispatch-guard.ts +32 -30
- package/src/resources/extensions/gsd/doctor-checks.ts +25 -11
- package/src/resources/extensions/gsd/doctor-environment.ts +31 -0
- package/src/resources/extensions/gsd/doctor-types.ts +0 -23
- package/src/resources/extensions/gsd/doctor.ts +45 -295
- package/src/resources/extensions/gsd/file-watcher.ts +4 -1
- package/src/resources/extensions/gsd/files.ts +16 -220
- package/src/resources/extensions/gsd/git-service.ts +4 -0
- package/src/resources/extensions/gsd/gitignore.ts +4 -0
- package/src/resources/extensions/gsd/gsd-db.ts +1157 -370
- package/src/resources/extensions/gsd/guided-flow.ts +20 -8
- package/src/resources/extensions/gsd/markdown-renderer.ts +1098 -0
- package/src/resources/extensions/gsd/md-importer.ts +211 -2
- package/src/resources/extensions/gsd/native-git-bridge.ts +12 -1
- package/src/resources/extensions/gsd/parallel-eligibility.ts +14 -18
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +43 -0
- package/src/resources/extensions/gsd/parsers-legacy.ts +271 -0
- package/src/resources/extensions/gsd/preferences-types.ts +3 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +9 -0
- package/src/resources/extensions/gsd/preferences.ts +1 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +22 -9
- package/src/resources/extensions/gsd/prompts/discuss.md +2 -2
- package/src/resources/extensions/gsd/prompts/execute-task.md +15 -5
- package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +6 -10
- package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -7
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +3 -3
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -7
- package/src/resources/extensions/gsd/prompts/replan-slice.md +6 -6
- package/src/resources/extensions/gsd/reactive-graph.ts +33 -3
- package/src/resources/extensions/gsd/skill-health.ts +2 -1
- package/src/resources/extensions/gsd/state.ts +547 -29
- package/src/resources/extensions/gsd/tests/atomic-task-closeout.test.ts +8 -120
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +20 -11
- package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +150 -5
- package/src/resources/extensions/gsd/tests/auto-stash-merge.test.ts +121 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +15 -20
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +410 -0
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +439 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +0 -2
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +527 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +593 -2
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +104 -57
- package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +22 -80
- package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +5 -7
- package/src/resources/extensions/gsd/tests/doctor-environment-worktree.test.ts +175 -0
- package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +38 -130
- package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +38 -76
- package/src/resources/extensions/gsd/tests/doctor.test.ts +9 -19
- package/src/resources/extensions/gsd/tests/flag-file-db.test.ts +290 -0
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +240 -0
- package/src/resources/extensions/gsd/tests/git-service.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +462 -0
- package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +4 -172
- package/src/resources/extensions/gsd/tests/integration-proof.test.ts +643 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -3
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +1205 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +439 -0
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/migrate-writer.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/parsers.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +176 -113
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +145 -0
- package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +305 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +325 -0
- package/src/resources/extensions/gsd/tests/replan-handler.test.ts +410 -0
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/rogue-file-detection.test.ts +296 -0
- package/src/resources/extensions/gsd/tests/schema-v9-sequence.test.ts +176 -0
- package/src/resources/extensions/gsd/tests/shared-wal.test.ts +216 -0
- package/src/resources/extensions/gsd/tests/token-cost-display.test.ts +118 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +11 -3
- package/src/resources/extensions/gsd/tests/undo.test.ts +321 -1
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -142
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +12 -5
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +176 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +300 -0
- package/src/resources/extensions/gsd/tools/complete-task.ts +245 -0
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +249 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +194 -0
- package/src/resources/extensions/gsd/tools/plan-task.ts +116 -0
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +203 -0
- package/src/resources/extensions/gsd/tools/replan-slice.ts +192 -0
- package/src/resources/extensions/gsd/triage-resolution.ts +20 -1
- package/src/resources/extensions/gsd/types.ts +50 -0
- package/src/resources/extensions/gsd/undo.ts +247 -3
- package/src/resources/extensions/gsd/visualizer-data.ts +54 -17
- package/src/resources/extensions/gsd/workspace-index.ts +64 -46
- package/dist/resources/extensions/gsd/auto-observability.js +0 -56
- package/dist/resources/extensions/gsd/observability-validator.js +0 -422
- package/dist/resources/extensions/gsd/roadmap-mutations.js +0 -110
- package/dist/web/standalone/.next/static/VvclDCW6TAWjEyLU-EYL1/_buildManifest.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-e07acdb7dd069836.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/files/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/git/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/history/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/update/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/layout-745c6ed5fea5fb06.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/page-801b53eff6e83579.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-e6255954dccfcf0a.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d07a2c023f1aef1e.js +0 -1
- package/dist/web/standalone/.next/static/css/123c0bb039697968.css +0 -1
- package/src/resources/extensions/gsd/auto-observability.ts +0 -74
- 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/tests/doctor-task-done-missing-summary-slice-loop.test.ts +0 -174
- package/src/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -474
- /package/dist/web/standalone/.next/static/{VvclDCW6TAWjEyLU-EYL1 → fOnWQBjWXMKUs4bqTg530}/_ssgManifest.js +0 -0
|
@@ -3,13 +3,6 @@ export type DoctorIssueCode =
|
|
|
3
3
|
| "invalid_preferences"
|
|
4
4
|
| "missing_tasks_dir"
|
|
5
5
|
| "missing_slice_plan"
|
|
6
|
-
| "task_done_missing_summary"
|
|
7
|
-
| "task_summary_without_done_checkbox"
|
|
8
|
-
| "all_tasks_done_missing_slice_summary"
|
|
9
|
-
| "all_tasks_done_missing_slice_uat"
|
|
10
|
-
| "all_tasks_done_roadmap_not_checked"
|
|
11
|
-
| "slice_checked_missing_summary"
|
|
12
|
-
| "slice_checked_missing_uat"
|
|
13
6
|
| "all_slices_done_missing_milestone_validation"
|
|
14
7
|
| "all_slices_done_missing_milestone_summary"
|
|
15
8
|
| "task_done_must_haves_not_verified"
|
|
@@ -79,22 +72,6 @@ export type DoctorIssueCode =
|
|
|
79
72
|
| "env_build"
|
|
80
73
|
| "env_test";
|
|
81
74
|
|
|
82
|
-
/**
|
|
83
|
-
* Issue codes that represent expected completion-transition states.
|
|
84
|
-
* These are detected by the doctor but should NOT be auto-fixed at task level —
|
|
85
|
-
* they are resolved by the complete-slice/complete-milestone dispatch units.
|
|
86
|
-
* Consumers (e.g. auto-post-unit health tracking) should exclude these from
|
|
87
|
-
* error counts when running at task fixLevel to avoid false escalation.
|
|
88
|
-
*
|
|
89
|
-
* Only the slice summary is deferred here because it requires LLM-generated
|
|
90
|
-
* content. Roadmap checkbox and UAT stub are mechanical bookkeeping and are
|
|
91
|
-
* fixed immediately to avoid inconsistent state if the session stops before
|
|
92
|
-
* complete-slice runs (#1808).
|
|
93
|
-
*/
|
|
94
|
-
export const COMPLETION_TRANSITION_CODES = new Set<DoctorIssueCode>([
|
|
95
|
-
"all_tasks_done_missing_slice_summary",
|
|
96
|
-
]);
|
|
97
|
-
|
|
98
75
|
/**
|
|
99
76
|
* Issue codes that represent global or completion-critical state.
|
|
100
77
|
* These must NOT be auto-fixed when fixLevel is "task" — automated
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, lstatSync, readdirSync, readFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
|
|
4
|
-
import { loadFile,
|
|
4
|
+
import { loadFile, parseSummary, saveFile, parseTaskPlanMustHaves, countMustHavesMentionedInSummary } from "./files.js";
|
|
5
|
+
import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
|
|
6
|
+
import { isDbAvailable, getMilestoneSlices, getSliceTasks } from "./gsd-db.js";
|
|
5
7
|
import { resolveMilestoneFile, resolveMilestonePath, resolveSliceFile, resolveSlicePath, resolveTaskFile, resolveTasksDir, milestonesDir, gsdRoot, relMilestoneFile, relSliceFile, relTaskFile, relSlicePath, relGsdRootFile, resolveGsdRootFile, relMilestonePath } from "./paths.js";
|
|
6
8
|
import { deriveState, isMilestoneComplete } from "./state.js";
|
|
7
9
|
import { invalidateAllCaches } from "./cache.js";
|
|
8
10
|
import { loadEffectiveGSDPreferences, type GSDPreferences } from "./preferences.js";
|
|
9
11
|
|
|
10
12
|
import type { DoctorIssue, DoctorIssueCode, DoctorReport } from "./doctor-types.js";
|
|
11
|
-
import {
|
|
13
|
+
import { GLOBAL_STATE_CODES } from "./doctor-types.js";
|
|
12
14
|
import type { RoadmapSliceEntry } from "./types.js";
|
|
13
15
|
import { checkGitHealth, checkRuntimeHealth, checkGlobalHealth } from "./doctor-checks.js";
|
|
14
16
|
import { checkEnvironmentHealth } from "./doctor-environment.js";
|
|
@@ -149,167 +151,6 @@ export async function rebuildState(basePath: string): Promise<void> {
|
|
|
149
151
|
await saveFile(path, buildStateMarkdown(state));
|
|
150
152
|
}
|
|
151
153
|
|
|
152
|
-
async function ensureSliceSummaryStub(basePath: string, milestoneId: string, sliceId: string, fixesApplied: string[]): Promise<void> {
|
|
153
|
-
const path = join(resolveSlicePath(basePath, milestoneId, sliceId) ?? relSlicePath(basePath, milestoneId, sliceId), `${sliceId}-SUMMARY.md`);
|
|
154
|
-
const absolute = resolveSliceFile(basePath, milestoneId, sliceId, "SUMMARY") ?? join(resolveSlicePath(basePath, milestoneId, sliceId)!, `${sliceId}-SUMMARY.md`);
|
|
155
|
-
const content = [
|
|
156
|
-
"---",
|
|
157
|
-
`id: ${sliceId}`,
|
|
158
|
-
`parent: ${milestoneId}`,
|
|
159
|
-
`milestone: ${milestoneId}`,
|
|
160
|
-
"provides: []",
|
|
161
|
-
"requires: []",
|
|
162
|
-
"affects: []",
|
|
163
|
-
"key_files: []",
|
|
164
|
-
"key_decisions: []",
|
|
165
|
-
"patterns_established: []",
|
|
166
|
-
"observability_surfaces:",
|
|
167
|
-
" - none yet \u2014 doctor created placeholder summary; replace with real diagnostics before treating as complete",
|
|
168
|
-
"drill_down_paths: []",
|
|
169
|
-
"duration: unknown",
|
|
170
|
-
"verification_result: unknown",
|
|
171
|
-
`completed_at: ${new Date().toISOString()}`,
|
|
172
|
-
"---",
|
|
173
|
-
"",
|
|
174
|
-
`# ${sliceId}: Recovery placeholder summary`,
|
|
175
|
-
"",
|
|
176
|
-
"**Doctor-created placeholder.**",
|
|
177
|
-
"",
|
|
178
|
-
"## What Happened",
|
|
179
|
-
"Doctor detected that all tasks were complete but the slice summary was missing. Replace this with a real compressed slice summary before relying on it.",
|
|
180
|
-
"",
|
|
181
|
-
"## Verification",
|
|
182
|
-
"Not re-run by doctor.",
|
|
183
|
-
"",
|
|
184
|
-
"## Deviations",
|
|
185
|
-
"Recovery placeholder created to restore required artifact shape.",
|
|
186
|
-
"",
|
|
187
|
-
"## Known Limitations",
|
|
188
|
-
"This file is intentionally incomplete and should be replaced by a real summary.",
|
|
189
|
-
"",
|
|
190
|
-
"## Follow-ups",
|
|
191
|
-
"- Regenerate this summary from task summaries.",
|
|
192
|
-
"",
|
|
193
|
-
"## Files Created/Modified",
|
|
194
|
-
`- \`${relSliceFile(basePath, milestoneId, sliceId, "SUMMARY")}\` \u2014 doctor-created placeholder summary`,
|
|
195
|
-
"",
|
|
196
|
-
"## Forward Intelligence",
|
|
197
|
-
"",
|
|
198
|
-
"### What the next slice should know",
|
|
199
|
-
"- Doctor had to reconstruct completion artifacts; inspect task summaries before continuing.",
|
|
200
|
-
"",
|
|
201
|
-
"### What's fragile",
|
|
202
|
-
"- Placeholder summary exists solely to unblock invariant checks.",
|
|
203
|
-
"",
|
|
204
|
-
"### Authoritative diagnostics",
|
|
205
|
-
"- Task summaries in the slice tasks/ directory \u2014 they are the actual authoritative source until this summary is rewritten.",
|
|
206
|
-
"",
|
|
207
|
-
"### What assumptions changed",
|
|
208
|
-
"- The system assumed completion would always write a slice summary; in practice doctor may need to restore missing artifacts.",
|
|
209
|
-
"",
|
|
210
|
-
].join("\n");
|
|
211
|
-
await saveFile(absolute, content);
|
|
212
|
-
fixesApplied.push(`created placeholder ${absolute}`);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
async function ensureSliceUatStub(basePath: string, milestoneId: string, sliceId: string, fixesApplied: string[]): Promise<void> {
|
|
216
|
-
const sDir = resolveSlicePath(basePath, milestoneId, sliceId);
|
|
217
|
-
if (!sDir) return;
|
|
218
|
-
const absolute = join(sDir, `${sliceId}-UAT.md`);
|
|
219
|
-
const content = [
|
|
220
|
-
`# ${sliceId}: Recovery placeholder UAT`,
|
|
221
|
-
"",
|
|
222
|
-
`**Milestone:** ${milestoneId}`,
|
|
223
|
-
`**Written:** ${new Date().toISOString()}`,
|
|
224
|
-
"",
|
|
225
|
-
"## Preconditions",
|
|
226
|
-
"- Doctor created this placeholder because the expected UAT file was missing.",
|
|
227
|
-
"",
|
|
228
|
-
"## Smoke Test",
|
|
229
|
-
"- Re-run the slice verification from the slice plan before shipping.",
|
|
230
|
-
"",
|
|
231
|
-
"## Test Cases",
|
|
232
|
-
"### 1. Replace this placeholder",
|
|
233
|
-
"1. Read the slice plan and task summaries.",
|
|
234
|
-
"2. Write a real UAT script.",
|
|
235
|
-
"3. **Expected:** This placeholder is replaced with meaningful human checks.",
|
|
236
|
-
"",
|
|
237
|
-
"## Edge Cases",
|
|
238
|
-
"### Missing completion artifacts",
|
|
239
|
-
"1. Confirm the summary, roadmap checkbox, and state file are coherent.",
|
|
240
|
-
"2. **Expected:** GSD doctor reports no remaining completion drift for this slice.",
|
|
241
|
-
"",
|
|
242
|
-
"## Failure Signals",
|
|
243
|
-
"- Placeholder content still present when treating the slice as done",
|
|
244
|
-
"",
|
|
245
|
-
"## Notes for Tester",
|
|
246
|
-
"Doctor created this file only to restore the required artifact shape. Replace it with a real UAT script.",
|
|
247
|
-
"",
|
|
248
|
-
].join("\n");
|
|
249
|
-
await saveFile(absolute, content);
|
|
250
|
-
fixesApplied.push(`created placeholder ${absolute}`);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
async function markTaskDoneInPlan(basePath: string, milestoneId: string, sliceId: string, taskId: string, fixesApplied: string[]): Promise<void> {
|
|
254
|
-
const planPath = resolveSliceFile(basePath, milestoneId, sliceId, "PLAN");
|
|
255
|
-
if (!planPath) return;
|
|
256
|
-
const content = await loadFile(planPath);
|
|
257
|
-
if (!content) return;
|
|
258
|
-
const updated = content.replace(
|
|
259
|
-
new RegExp(`^(\\s*-\\s+)\\[ \\]\\s+\\*\\*${taskId}:`, "m"),
|
|
260
|
-
`$1[x] **${taskId}:`,
|
|
261
|
-
);
|
|
262
|
-
if (updated !== content) {
|
|
263
|
-
await saveFile(planPath, updated);
|
|
264
|
-
fixesApplied.push(`marked ${taskId} done in ${planPath}`);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
async function markTaskUndoneInPlan(basePath: string, milestoneId: string, sliceId: string, taskId: string, fixesApplied: string[]): Promise<void> {
|
|
269
|
-
const planPath = resolveSliceFile(basePath, milestoneId, sliceId, "PLAN");
|
|
270
|
-
if (!planPath) return;
|
|
271
|
-
const content = await loadFile(planPath);
|
|
272
|
-
if (!content) return;
|
|
273
|
-
const updated = content.replace(
|
|
274
|
-
new RegExp(`^(\\s*-\\s+)\\[x\\]\\s+\\*\\*${taskId}:`, "mi"),
|
|
275
|
-
`$1[ ] **${taskId}:`,
|
|
276
|
-
);
|
|
277
|
-
if (updated !== content) {
|
|
278
|
-
await saveFile(planPath, updated);
|
|
279
|
-
fixesApplied.push(`unchecked ${taskId} in ${planPath} (missing summary — task will re-execute)`);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
async function markSliceDoneInRoadmap(basePath: string, milestoneId: string, sliceId: string, fixesApplied: string[]): Promise<void> {
|
|
284
|
-
const roadmapPath = resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
|
|
285
|
-
if (!roadmapPath) return;
|
|
286
|
-
const content = await loadFile(roadmapPath);
|
|
287
|
-
if (!content) return;
|
|
288
|
-
const updated = content.replace(
|
|
289
|
-
new RegExp(`^(\\s*-\\s+)\\[ \\]\\s+\\*\\*${sliceId}:`, "m"),
|
|
290
|
-
`$1[x] **${sliceId}:`,
|
|
291
|
-
);
|
|
292
|
-
if (updated !== content) {
|
|
293
|
-
await saveFile(roadmapPath, updated);
|
|
294
|
-
fixesApplied.push(`marked ${sliceId} done in ${roadmapPath}`);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
async function markSliceUndoneInRoadmap(basePath: string, milestoneId: string, sliceId: string, fixesApplied: string[]): Promise<void> {
|
|
299
|
-
const roadmapPath = resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
|
|
300
|
-
if (!roadmapPath) return;
|
|
301
|
-
const content = await loadFile(roadmapPath);
|
|
302
|
-
if (!content) return;
|
|
303
|
-
const updated = content.replace(
|
|
304
|
-
new RegExp(`^(\\s*-\\s+)\\[x\\]\\s+\\*\\*${sliceId}:`, "m"),
|
|
305
|
-
`$1[ ] **${sliceId}:`,
|
|
306
|
-
);
|
|
307
|
-
if (updated !== content) {
|
|
308
|
-
await saveFile(roadmapPath, updated);
|
|
309
|
-
fixesApplied.push(`unmarked ${sliceId} in ${roadmapPath} (premature completion)`);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
|
|
313
154
|
function matchesScope(unitId: string, scope?: string): boolean {
|
|
314
155
|
if (!scope) return true;
|
|
315
156
|
return unitId === scope || unitId.startsWith(`${scope}/`);
|
|
@@ -374,8 +215,14 @@ export async function selectDoctorScope(basePath: string, requestedScope?: strin
|
|
|
374
215
|
const roadmapPath = resolveMilestoneFile(basePath, milestone.id, "ROADMAP");
|
|
375
216
|
const roadmapContent = roadmapPath ? await loadFile(roadmapPath) : null;
|
|
376
217
|
if (!roadmapContent) continue;
|
|
377
|
-
|
|
378
|
-
|
|
218
|
+
if (isDbAvailable()) {
|
|
219
|
+
const dbSlices = getMilestoneSlices(milestone.id);
|
|
220
|
+
const allDone = dbSlices.length > 0 && dbSlices.every(s => s.status === "complete");
|
|
221
|
+
if (!allDone) return milestone.id;
|
|
222
|
+
} else {
|
|
223
|
+
const roadmap = parseLegacyRoadmap(roadmapContent);
|
|
224
|
+
if (!isMilestoneComplete(roadmap)) return milestone.id;
|
|
225
|
+
}
|
|
379
226
|
}
|
|
380
227
|
|
|
381
228
|
return state.registry[0]?.id;
|
|
@@ -490,18 +337,10 @@ export async function runGSDDoctor(basePath: string, options?: { fix?: boolean;
|
|
|
490
337
|
/** Whether a given issue code should be auto-fixed at the current fixLevel. */
|
|
491
338
|
const shouldFix = (code: DoctorIssueCode): boolean => {
|
|
492
339
|
if (!fix || dryRun) return false;
|
|
493
|
-
if (fixLevel === "task" && COMPLETION_TRANSITION_CODES.has(code)) return false;
|
|
494
340
|
if (fixLevel === "task" && GLOBAL_STATE_CODES.has(code)) return false;
|
|
495
341
|
return true;
|
|
496
342
|
};
|
|
497
343
|
|
|
498
|
-
/** Log a dry-run "would fix" entry when fix=true but dryRun=true. */
|
|
499
|
-
const dryRunCanFix = (code: DoctorIssueCode, message: string): void => {
|
|
500
|
-
if (dryRun && fix && !(fixLevel === "task" && COMPLETION_TRANSITION_CODES.has(code))) {
|
|
501
|
-
fixesApplied.push(`[dry-run] would fix: ${message}`);
|
|
502
|
-
}
|
|
503
|
-
};
|
|
504
|
-
|
|
505
344
|
const prefs = loadEffectiveGSDPreferences();
|
|
506
345
|
if (prefs) {
|
|
507
346
|
const prefIssues = validatePreferenceShape(prefs.preferences);
|
|
@@ -629,7 +468,25 @@ export async function runGSDDoctor(basePath: string, options?: { fix?: boolean;
|
|
|
629
468
|
const roadmapPath = resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
|
|
630
469
|
const roadmapContent = roadmapPath ? await loadFile(roadmapPath) : null;
|
|
631
470
|
if (!roadmapContent) continue;
|
|
632
|
-
|
|
471
|
+
|
|
472
|
+
// Normalize slices: prefer DB, fall back to parser
|
|
473
|
+
type NormSlice = RoadmapSliceEntry;
|
|
474
|
+
let slices: NormSlice[];
|
|
475
|
+
if (isDbAvailable()) {
|
|
476
|
+
const dbSlices = getMilestoneSlices(milestoneId);
|
|
477
|
+
slices = dbSlices.map(s => ({
|
|
478
|
+
id: s.id,
|
|
479
|
+
title: s.title,
|
|
480
|
+
done: s.status === "complete",
|
|
481
|
+
risk: (s.risk || "medium") as RoadmapSliceEntry["risk"],
|
|
482
|
+
depends: s.depends,
|
|
483
|
+
demo: s.demo,
|
|
484
|
+
}));
|
|
485
|
+
} else {
|
|
486
|
+
slices = parseLegacyRoadmap(roadmapContent).slices;
|
|
487
|
+
}
|
|
488
|
+
// Wrap in Roadmap-compatible shape for detectCircularDependencies
|
|
489
|
+
const roadmap = { slices };
|
|
633
490
|
|
|
634
491
|
// ── Circular dependency detection ──────────────────────────────────────
|
|
635
492
|
for (const cycle of detectCircularDependencies(roadmap.slices)) {
|
|
@@ -748,7 +605,17 @@ export async function runGSDDoctor(basePath: string, options?: { fix?: boolean;
|
|
|
748
605
|
|
|
749
606
|
const planPath = resolveSliceFile(basePath, milestoneId, slice.id, "PLAN");
|
|
750
607
|
const planContent = planPath ? await loadFile(planPath) : null;
|
|
751
|
-
|
|
608
|
+
// Normalize plan tasks: prefer DB, fall back to parsers-legacy
|
|
609
|
+
let plan: { tasks: Array<{ id: string; done: boolean; title: string; estimate?: string }> } | null = null;
|
|
610
|
+
if (isDbAvailable()) {
|
|
611
|
+
const dbTasks = getSliceTasks(milestoneId, slice.id);
|
|
612
|
+
if (dbTasks.length > 0) {
|
|
613
|
+
plan = { tasks: dbTasks.map(t => ({ id: t.id, done: t.status === "complete" || t.status === "done", title: t.title, estimate: t.estimate || undefined })) };
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
if (!plan && planContent) {
|
|
617
|
+
plan = parseLegacyPlan(planContent);
|
|
618
|
+
}
|
|
752
619
|
if (!plan) {
|
|
753
620
|
if (!slice.done) {
|
|
754
621
|
issues.push({
|
|
@@ -792,42 +659,11 @@ export async function runGSDDoctor(basePath: string, options?: { fix?: boolean;
|
|
|
792
659
|
} catch { /* non-fatal */ }
|
|
793
660
|
|
|
794
661
|
let allTasksDone = plan.tasks.length > 0;
|
|
795
|
-
let taskUncheckedByDoctor = false;
|
|
796
662
|
for (const task of plan.tasks) {
|
|
797
663
|
const taskUnitId = `${unitId}/${task.id}`;
|
|
798
664
|
const summaryPath = resolveTaskFile(basePath, milestoneId, slice.id, task.id, "SUMMARY");
|
|
799
665
|
const hasSummary = !!(summaryPath && await loadFile(summaryPath));
|
|
800
666
|
|
|
801
|
-
if (task.done && !hasSummary) {
|
|
802
|
-
issues.push({
|
|
803
|
-
severity: "error",
|
|
804
|
-
code: "task_done_missing_summary",
|
|
805
|
-
scope: "task",
|
|
806
|
-
unitId: taskUnitId,
|
|
807
|
-
message: `Task ${task.id} is marked done but summary is missing — unchecking so it re-executes`,
|
|
808
|
-
file: relSliceFile(basePath, milestoneId, slice.id, "PLAN"),
|
|
809
|
-
fixable: true,
|
|
810
|
-
});
|
|
811
|
-
dryRunCanFix("task_done_missing_summary", `uncheck ${task.id} in plan for ${taskUnitId}`);
|
|
812
|
-
if (shouldFix("task_done_missing_summary")) {
|
|
813
|
-
await markTaskUndoneInPlan(basePath, milestoneId, slice.id, task.id, fixesApplied);
|
|
814
|
-
taskUncheckedByDoctor = true;
|
|
815
|
-
}
|
|
816
|
-
}
|
|
817
|
-
|
|
818
|
-
if (!task.done && hasSummary) {
|
|
819
|
-
issues.push({
|
|
820
|
-
severity: "warning",
|
|
821
|
-
code: "task_summary_without_done_checkbox",
|
|
822
|
-
scope: "task",
|
|
823
|
-
unitId: taskUnitId,
|
|
824
|
-
message: `Task ${task.id} has a summary but is not marked done in the slice plan`,
|
|
825
|
-
file: relSliceFile(basePath, milestoneId, slice.id, "PLAN"),
|
|
826
|
-
fixable: true,
|
|
827
|
-
});
|
|
828
|
-
if (fix) await markTaskDoneInPlan(basePath, milestoneId, slice.id, task.id, fixesApplied);
|
|
829
|
-
}
|
|
830
|
-
|
|
831
667
|
// Must-have verification
|
|
832
668
|
if (task.done && hasSummary) {
|
|
833
669
|
const taskPlanPath = resolveTaskFile(basePath, milestoneId, slice.id, task.id, "PLAN");
|
|
@@ -875,15 +711,6 @@ export async function runGSDDoctor(basePath: string, options?: { fix?: boolean;
|
|
|
875
711
|
allTasksDone = allTasksDone && task.done;
|
|
876
712
|
}
|
|
877
713
|
|
|
878
|
-
// ── #1850: cascade slice uncheck when task_done_missing_summary fires ──
|
|
879
|
-
// When doctor unchecks tasks inside a done slice, the slice must also be
|
|
880
|
-
// unchecked so the state machine re-enters the executing phase. Without
|
|
881
|
-
// this, state.ts skips done slices and the unchecked tasks never run,
|
|
882
|
-
// causing doctor to fire again on every start (infinite loop).
|
|
883
|
-
if (taskUncheckedByDoctor && slice.done) {
|
|
884
|
-
await markSliceUndoneInRoadmap(basePath, milestoneId, slice.id, fixesApplied);
|
|
885
|
-
}
|
|
886
|
-
|
|
887
714
|
// Blocker-without-replan detection
|
|
888
715
|
const replanPath = resolveSliceFile(basePath, milestoneId, slice.id, "REPLAN");
|
|
889
716
|
if (!replanPath) {
|
|
@@ -916,88 +743,11 @@ export async function runGSDDoctor(basePath: string, options?: { fix?: boolean;
|
|
|
916
743
|
file: relSliceFile(basePath, milestoneId, slice.id, "REPLAN"), fixable: false });
|
|
917
744
|
}
|
|
918
745
|
|
|
919
|
-
const sliceSummaryPath = resolveSliceFile(basePath, milestoneId, slice.id, "SUMMARY");
|
|
920
|
-
const sliceUatPath = join(slicePath, `${slice.id}-UAT.md`);
|
|
921
|
-
const hasSliceSummary = !!(sliceSummaryPath && await loadFile(sliceSummaryPath));
|
|
922
|
-
const hasSliceUat = existsSync(sliceUatPath);
|
|
923
|
-
|
|
924
|
-
if (allTasksDone && !hasSliceSummary) {
|
|
925
|
-
issues.push({
|
|
926
|
-
severity: "error",
|
|
927
|
-
code: "all_tasks_done_missing_slice_summary",
|
|
928
|
-
scope: "slice",
|
|
929
|
-
unitId,
|
|
930
|
-
message: `All tasks are done but ${slice.id}-SUMMARY.md is missing`,
|
|
931
|
-
file: relSliceFile(basePath, milestoneId, slice.id, "SUMMARY"),
|
|
932
|
-
fixable: true,
|
|
933
|
-
});
|
|
934
|
-
dryRunCanFix("all_tasks_done_missing_slice_summary", `create placeholder summary for ${unitId}`);
|
|
935
|
-
if (shouldFix("all_tasks_done_missing_slice_summary")) await ensureSliceSummaryStub(basePath, milestoneId, slice.id, fixesApplied);
|
|
936
|
-
}
|
|
937
|
-
|
|
938
|
-
if (allTasksDone && !hasSliceUat) {
|
|
939
|
-
issues.push({
|
|
940
|
-
severity: "warning",
|
|
941
|
-
code: "all_tasks_done_missing_slice_uat",
|
|
942
|
-
scope: "slice",
|
|
943
|
-
unitId,
|
|
944
|
-
message: `All tasks are done but ${slice.id}-UAT.md is missing`,
|
|
945
|
-
file: `${relSlicePath(basePath, milestoneId, slice.id)}/${slice.id}-UAT.md`,
|
|
946
|
-
fixable: true,
|
|
947
|
-
});
|
|
948
|
-
dryRunCanFix("all_tasks_done_missing_slice_uat", `create placeholder UAT for ${unitId}`);
|
|
949
|
-
if (shouldFix("all_tasks_done_missing_slice_uat")) await ensureSliceUatStub(basePath, milestoneId, slice.id, fixesApplied);
|
|
950
|
-
}
|
|
951
|
-
|
|
952
|
-
if (allTasksDone && !slice.done) {
|
|
953
|
-
issues.push({
|
|
954
|
-
severity: "error",
|
|
955
|
-
code: "all_tasks_done_roadmap_not_checked",
|
|
956
|
-
scope: "slice",
|
|
957
|
-
unitId,
|
|
958
|
-
message: `All tasks are done but roadmap still shows ${slice.id} as incomplete`,
|
|
959
|
-
file: relMilestoneFile(basePath, milestoneId, "ROADMAP"),
|
|
960
|
-
fixable: true,
|
|
961
|
-
});
|
|
962
|
-
dryRunCanFix("all_tasks_done_roadmap_not_checked", `mark ${slice.id} done in roadmap`);
|
|
963
|
-
if (shouldFix("all_tasks_done_roadmap_not_checked") && (hasSliceSummary || existsSync(join(slicePath, `${slice.id}-SUMMARY.md`)))) {
|
|
964
|
-
await markSliceDoneInRoadmap(basePath, milestoneId, slice.id, fixesApplied);
|
|
965
|
-
}
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
if (slice.done && !hasSliceSummary) {
|
|
969
|
-
issues.push({
|
|
970
|
-
severity: "error",
|
|
971
|
-
code: "slice_checked_missing_summary",
|
|
972
|
-
scope: "slice",
|
|
973
|
-
unitId,
|
|
974
|
-
message: `Roadmap marks ${slice.id} complete but slice summary is missing`,
|
|
975
|
-
file: relSliceFile(basePath, milestoneId, slice.id, "SUMMARY"),
|
|
976
|
-
fixable: true,
|
|
977
|
-
});
|
|
978
|
-
if (!allTasksDone) {
|
|
979
|
-
dryRunCanFix("slice_checked_missing_summary", `uncheck ${slice.id} in roadmap (tasks incomplete)`);
|
|
980
|
-
if (shouldFix("slice_checked_missing_summary")) {
|
|
981
|
-
await markSliceUndoneInRoadmap(basePath, milestoneId, slice.id, fixesApplied);
|
|
982
|
-
}
|
|
983
|
-
}
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
if (slice.done && !hasSliceUat) {
|
|
987
|
-
issues.push({
|
|
988
|
-
severity: "warning",
|
|
989
|
-
code: "slice_checked_missing_uat",
|
|
990
|
-
scope: "slice",
|
|
991
|
-
unitId,
|
|
992
|
-
message: `Roadmap marks ${slice.id} complete but UAT file is missing`,
|
|
993
|
-
file: `${relSlicePath(basePath, milestoneId, slice.id)}/${slice.id}-UAT.md`,
|
|
994
|
-
fixable: true,
|
|
995
|
-
});
|
|
996
|
-
}
|
|
997
746
|
}
|
|
998
747
|
|
|
999
748
|
// Milestone-level check: all slices done but no validation file
|
|
1000
|
-
|
|
749
|
+
const milestoneComplete = roadmap.slices.length > 0 && roadmap.slices.every(s => s.done);
|
|
750
|
+
if (milestoneComplete && !resolveMilestoneFile(basePath, milestoneId, "VALIDATION") && !resolveMilestoneFile(basePath, milestoneId, "SUMMARY")) {
|
|
1001
751
|
issues.push({
|
|
1002
752
|
severity: "info",
|
|
1003
753
|
code: "all_slices_done_missing_milestone_validation",
|
|
@@ -1010,7 +760,7 @@ export async function runGSDDoctor(basePath: string, options?: { fix?: boolean;
|
|
|
1010
760
|
}
|
|
1011
761
|
|
|
1012
762
|
// Milestone-level check: all slices done but no milestone summary
|
|
1013
|
-
if (
|
|
763
|
+
if (milestoneComplete && !resolveMilestoneFile(basePath, milestoneId, "SUMMARY")) {
|
|
1014
764
|
issues.push({
|
|
1015
765
|
severity: "warning",
|
|
1016
766
|
code: "all_slices_done_missing_milestone_summary",
|
|
@@ -3,6 +3,7 @@ import type { EventBus } from "@gsd/pi-coding-agent";
|
|
|
3
3
|
import { relative } from "node:path";
|
|
4
4
|
|
|
5
5
|
let watcher: FSWatcher | null = null;
|
|
6
|
+
let pending = new Map<string, ReturnType<typeof setTimeout>>();
|
|
6
7
|
|
|
7
8
|
const EVENT_MAP: Record<string, string> = {
|
|
8
9
|
"settings.json": "settings-changed",
|
|
@@ -36,7 +37,7 @@ export async function startFileWatcher(
|
|
|
36
37
|
|
|
37
38
|
const { watch } = await import("chokidar");
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
pending = new Map<string, ReturnType<typeof setTimeout>>();
|
|
40
41
|
|
|
41
42
|
function debounceEmit(event: string): void {
|
|
42
43
|
const existing = pending.get(event);
|
|
@@ -90,6 +91,8 @@ export async function startFileWatcher(
|
|
|
90
91
|
* Stop the file watcher and clean up resources.
|
|
91
92
|
*/
|
|
92
93
|
export async function stopFileWatcher(): Promise<void> {
|
|
94
|
+
for (const timer of pending.values()) clearTimeout(timer);
|
|
95
|
+
pending.clear();
|
|
93
96
|
if (watcher) {
|
|
94
97
|
await watcher.close();
|
|
95
98
|
watcher = null;
|