gsd-pi 2.65.0 → 2.66.0-dev.1b4e601
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/mcp-server.js +6 -2
- package/dist/resources/extensions/browser-tools/capture.js +20 -1
- package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +93 -0
- package/dist/resources/extensions/gsd/auto/finalize-timeout.js +2 -0
- package/dist/resources/extensions/gsd/auto/loop.js +2 -2
- package/dist/resources/extensions/gsd/auto/phases.js +48 -5
- package/dist/resources/extensions/gsd/auto/run-unit.js +13 -2
- package/dist/resources/extensions/gsd/auto/session.js +4 -0
- package/dist/resources/extensions/gsd/auto/types.js +2 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +2 -1
- package/dist/resources/extensions/gsd/auto-dispatch.js +99 -9
- package/dist/resources/extensions/gsd/auto-model-selection.js +7 -5
- package/dist/resources/extensions/gsd/auto-post-unit.js +17 -6
- package/dist/resources/extensions/gsd/auto-prompts.js +24 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +40 -22
- package/dist/resources/extensions/gsd/auto-start.js +175 -12
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +10 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +29 -7
- package/dist/resources/extensions/gsd/auto.js +21 -15
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +17 -4
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +6 -4
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +5 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +11 -3
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +3 -1
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +31 -1
- package/dist/resources/extensions/gsd/commands/context.js +8 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +23 -2
- package/dist/resources/extensions/gsd/commands-extensions.js +1 -1
- package/dist/resources/extensions/gsd/config-overlay.js +312 -0
- package/dist/resources/extensions/gsd/db-writer.js +13 -3
- package/dist/resources/extensions/gsd/detection.js +1 -1
- package/dist/resources/extensions/gsd/dispatch-guard.js +2 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -0
- package/dist/resources/extensions/gsd/doctor.js +2 -1
- package/dist/resources/extensions/gsd/files.js +17 -0
- package/dist/resources/extensions/gsd/gitignore.js +1 -0
- package/dist/resources/extensions/gsd/gsd-db.js +47 -4
- package/dist/resources/extensions/gsd/guided-flow.js +220 -29
- package/dist/resources/extensions/gsd/index.js +1 -1
- package/dist/resources/extensions/gsd/json-persistence.js +5 -2
- package/dist/resources/extensions/gsd/md-importer.js +14 -7
- package/dist/resources/extensions/gsd/notification-overlay.js +1 -1
- package/dist/resources/extensions/gsd/notification-widget.js +2 -1
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +1 -1
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +17 -11
- package/dist/resources/extensions/gsd/pre-execution-checks.js +26 -5
- package/dist/resources/extensions/gsd/preferences-types.js +3 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +45 -1
- package/dist/resources/extensions/gsd/preferences.js +9 -2
- package/dist/resources/extensions/gsd/preparation.js +1092 -0
- package/dist/resources/extensions/gsd/prompt-validation.js +67 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +3 -3
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss-prepared.md +424 -0
- package/dist/resources/extensions/gsd/prompts/discuss.md +2 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +6 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -4
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +23 -0
- package/dist/resources/extensions/gsd/prompts/queue.md +2 -0
- package/dist/resources/extensions/gsd/prompts/rethink.md +2 -1
- package/dist/resources/extensions/gsd/prompts/system.md +2 -2
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +56 -23
- package/dist/resources/extensions/gsd/quick.js +19 -15
- package/dist/resources/extensions/gsd/reactive-graph.js +12 -0
- package/dist/resources/extensions/gsd/roadmap-slices.js +24 -5
- package/dist/resources/extensions/gsd/safety/content-validator.js +3 -3
- package/dist/resources/extensions/gsd/session-lock.js +23 -1
- package/dist/resources/extensions/gsd/state.js +115 -28
- package/dist/resources/extensions/gsd/templates/context-enhanced.md +138 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +15 -3
- package/dist/resources/extensions/gsd/tools/complete-slice.js +27 -6
- package/dist/resources/extensions/gsd/tools/complete-task.js +31 -7
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -5
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +5 -2
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +119 -0
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +30 -0
- package/dist/resources/extensions/gsd/tools/reopen-task.js +18 -0
- package/dist/resources/extensions/gsd/triage-resolution.js +33 -16
- package/dist/resources/extensions/gsd/undo.js +3 -2
- package/dist/resources/extensions/gsd/workflow-events.js +1 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +1 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +7 -9
- package/dist/resources/extensions/gsd/workflow-reconcile.js +100 -9
- package/dist/resources/extensions/gsd/workflow-templates.js +11 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +5 -2
- package/dist/resources/extensions/gsd/worktree.js +9 -0
- package/dist/resources/extensions/shared/interview-ui.js +1 -1
- package/dist/resources/extensions/subagent/agents.js +19 -5
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +19 -19
- package/dist/web/standalone/.next/build-manifest.json +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 +3 -3
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_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/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_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/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_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 +2 -2
- 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 -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_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 +4 -4
- 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 +4 -4
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +19 -19
- package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
- package/dist/web/standalone/.next/server/chunks/7471.js +3 -3
- 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/6502.8874bcae249c02e1.js +9 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-0c485498795110d6.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.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/{webpack-a1c1e452c6b32d04.js → webpack-9fed74684e1c5bb1.js} +1 -1
- 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-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +30 -19
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js +51 -0
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +9 -9
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts +2 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +10 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +20 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +15 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +18 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.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 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/retry-handler.test.ts +80 -0
- package/packages/pi-coding-agent/src/core/retry-handler.ts +37 -25
- package/packages/pi-coding-agent/src/core/sdk.ts +9 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +10 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +20 -4
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +27 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +16 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +5 -0
- package/packages/pi-tui/dist/components/image.d.ts +2 -0
- package/packages/pi-tui/dist/components/image.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/image.js +4 -0
- package/packages/pi-tui/dist/components/image.js.map +1 -1
- package/packages/pi-tui/dist/components/image.test.d.ts +6 -0
- package/packages/pi-tui/dist/components/image.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/components/image.test.js +32 -0
- package/packages/pi-tui/dist/components/image.test.js.map +1 -0
- package/packages/pi-tui/dist/tui.d.ts +1 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +8 -2
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/components/image.test.ts +36 -0
- package/packages/pi-tui/src/components/image.ts +5 -0
- package/packages/pi-tui/src/tui.ts +8 -2
- package/pkg/package.json +1 -1
- package/src/resources/extensions/browser-tools/capture.ts +19 -1
- package/src/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +93 -0
- package/src/resources/extensions/gsd/auto/finalize-timeout.ts +3 -0
- package/src/resources/extensions/gsd/auto/loop.ts +2 -2
- package/src/resources/extensions/gsd/auto/phases.ts +68 -3
- package/src/resources/extensions/gsd/auto/run-unit.ts +12 -2
- package/src/resources/extensions/gsd/auto/session.ts +4 -0
- package/src/resources/extensions/gsd/auto/types.ts +5 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +2 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +110 -9
- package/src/resources/extensions/gsd/auto-model-selection.ts +7 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +16 -6
- package/src/resources/extensions/gsd/auto-prompts.ts +31 -0
- package/src/resources/extensions/gsd/auto-recovery.ts +29 -23
- package/src/resources/extensions/gsd/auto-start.ts +188 -10
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +10 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +28 -7
- package/src/resources/extensions/gsd/auto.ts +19 -8
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +16 -4
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +10 -0
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +5 -4
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +4 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +11 -3
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +3 -1
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +36 -1
- package/src/resources/extensions/gsd/commands/context.ts +7 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +26 -2
- package/src/resources/extensions/gsd/commands-extensions.ts +1 -1
- package/src/resources/extensions/gsd/config-overlay.ts +331 -0
- package/src/resources/extensions/gsd/db-writer.ts +11 -3
- package/src/resources/extensions/gsd/detection.ts +1 -1
- package/src/resources/extensions/gsd/dispatch-guard.ts +2 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -0
- package/src/resources/extensions/gsd/doctor.ts +2 -1
- package/src/resources/extensions/gsd/files.ts +19 -0
- package/src/resources/extensions/gsd/gitignore.ts +1 -0
- package/src/resources/extensions/gsd/gsd-db.ts +46 -4
- package/src/resources/extensions/gsd/guided-flow.ts +254 -30
- package/src/resources/extensions/gsd/index.ts +1 -0
- package/src/resources/extensions/gsd/json-persistence.ts +6 -3
- package/src/resources/extensions/gsd/md-importer.ts +13 -6
- package/src/resources/extensions/gsd/notification-overlay.ts +1 -1
- package/src/resources/extensions/gsd/notification-widget.ts +2 -1
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +1 -1
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +19 -11
- package/src/resources/extensions/gsd/pre-execution-checks.ts +32 -7
- package/src/resources/extensions/gsd/preferences-types.ts +25 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +45 -1
- package/src/resources/extensions/gsd/preferences.ts +9 -2
- package/src/resources/extensions/gsd/preparation.ts +1419 -0
- package/src/resources/extensions/gsd/prompt-validation.ts +88 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +3 -3
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/discuss-prepared.md +424 -0
- package/src/resources/extensions/gsd/prompts/discuss.md +2 -0
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +6 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -4
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +23 -0
- package/src/resources/extensions/gsd/prompts/queue.md +2 -0
- package/src/resources/extensions/gsd/prompts/rethink.md +2 -1
- package/src/resources/extensions/gsd/prompts/system.md +2 -2
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +56 -23
- package/src/resources/extensions/gsd/quick.ts +20 -15
- package/src/resources/extensions/gsd/reactive-graph.ts +18 -0
- package/src/resources/extensions/gsd/roadmap-slices.ts +21 -5
- package/src/resources/extensions/gsd/safety/content-validator.ts +3 -3
- package/src/resources/extensions/gsd/session-lock.ts +17 -1
- package/src/resources/extensions/gsd/state.ts +115 -26
- package/src/resources/extensions/gsd/templates/context-enhanced.md +138 -0
- package/src/resources/extensions/gsd/tests/adversarial-review-fixes.test.ts +223 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +33 -2
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/defer-milestone-stamp.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/discuss-incremental-persistence.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/find-missing-summaries-closed.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/format-shortcut.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/guided-flow-state-rebuild.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/import-done-milestones.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +11 -9
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +28 -30
- package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
- package/src/resources/extensions/gsd/tests/integration-prepared-discussion.test.ts +525 -0
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +11 -10
- package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +189 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +284 -20
- package/src/resources/extensions/gsd/tests/pre-execution-fail-closed.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/preparation.test.ts +1211 -0
- package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/prompt-builder.test.ts +669 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +7 -4
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/reactive-graph.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/rogue-file-detection.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/skipped-validation-completion.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +147 -0
- package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +13 -0
- package/src/resources/extensions/gsd/tests/stash-pop-gsd-conflict.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +6 -7
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/subagent-agent-discovery.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/symlink-extension-discovery.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/wave1-critical-regressions.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/wave2-events-regressions.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/wave3-session-regressions.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/wave4-write-safety-regressions.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/wave5-consistency-regressions.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/worker-model-override.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-audit.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +16 -17
- package/src/resources/extensions/gsd/tests/worktree-sync-tasks.test.ts +13 -9
- package/src/resources/extensions/gsd/tests/worktree.test.ts +26 -9
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +127 -2
- package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +13 -3
- package/src/resources/extensions/gsd/tools/complete-slice.ts +26 -6
- package/src/resources/extensions/gsd/tools/complete-task.ts +29 -7
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +11 -9
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +5 -2
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +152 -0
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +27 -0
- package/src/resources/extensions/gsd/tools/reopen-task.ts +17 -0
- package/src/resources/extensions/gsd/triage-resolution.ts +37 -17
- package/src/resources/extensions/gsd/types.ts +4 -0
- package/src/resources/extensions/gsd/undo.ts +3 -2
- package/src/resources/extensions/gsd/workflow-events.ts +5 -3
- package/src/resources/extensions/gsd/workflow-logger.ts +1 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +7 -8
- package/src/resources/extensions/gsd/workflow-reconcile.ts +109 -8
- package/src/resources/extensions/gsd/workflow-templates.ts +11 -2
- package/src/resources/extensions/gsd/worktree-manager.ts +4 -2
- package/src/resources/extensions/gsd/worktree.ts +10 -0
- package/src/resources/extensions/shared/interview-ui.ts +1 -1
- package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +8 -10
- package/src/resources/extensions/subagent/agents.ts +30 -6
- package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
- package/dist/web/standalone/.next/static/chunks/app/page-62be3b5fa91e4c8f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
- /package/dist/web/standalone/.next/static/{MRM3OSYIAa4HMDqVGQ9nt → fcV2z87tmOazTEreFWNdG}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{MRM3OSYIAa4HMDqVGQ9nt → fcV2z87tmOazTEreFWNdG}/_ssgManifest.js +0 -0
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Also provides detectFileOverlap() for surfacing downstream impact on quick tasks.
|
|
11
11
|
*/
|
|
12
|
-
import { existsSync, mkdirSync, readFileSync,
|
|
12
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync } from "node:fs";
|
|
13
|
+
import { atomicWriteSync } from "./atomic-write.js";
|
|
13
14
|
import { join } from "node:path";
|
|
14
15
|
import { createRequire } from "node:module";
|
|
15
16
|
import { gsdRoot, milestonesDir } from "./paths.js";
|
|
@@ -46,11 +47,11 @@ export function executeInject(basePath, mid, sid, capture) {
|
|
|
46
47
|
const filesSection = content.indexOf("## Files Likely Touched");
|
|
47
48
|
if (filesSection !== -1) {
|
|
48
49
|
const updated = content.slice(0, filesSection) + newTask + "\n\n" + content.slice(filesSection);
|
|
49
|
-
|
|
50
|
+
atomicWriteSync(planPath, updated, "utf-8");
|
|
50
51
|
}
|
|
51
52
|
else {
|
|
52
53
|
// No Files section — append at end
|
|
53
|
-
|
|
54
|
+
atomicWriteSync(planPath, content.trimEnd() + "\n\n" + newTask + "\n", "utf-8");
|
|
54
55
|
}
|
|
55
56
|
return newId;
|
|
56
57
|
}
|
|
@@ -78,7 +79,7 @@ export function executeReplan(basePath, mid, sid, capture) {
|
|
|
78
79
|
`This file was created by the triage pipeline. The next dispatch cycle`,
|
|
79
80
|
`will detect it and enter the replanning-slice phase.`,
|
|
80
81
|
].join("\n");
|
|
81
|
-
|
|
82
|
+
atomicWriteSync(triggerPath, content, "utf-8");
|
|
82
83
|
// Also write replan_triggered_at column for DB-backed detection
|
|
83
84
|
try {
|
|
84
85
|
const req = createRequire(import.meta.url);
|
|
@@ -146,7 +147,7 @@ export function executeBacktrack(basePath, currentMilestoneId, capture) {
|
|
|
146
147
|
`2. Identify missing features/requirements from the target milestone`,
|
|
147
148
|
`3. Resume auto-mode — the state machine will re-enter discussion for the target`,
|
|
148
149
|
].join("\n");
|
|
149
|
-
|
|
150
|
+
atomicWriteSync(triggerPath, content, "utf-8");
|
|
150
151
|
// If we have a valid target, also reset that milestone's completion status
|
|
151
152
|
// so deriveState() will re-enter it as the active milestone.
|
|
152
153
|
if (targetMilestoneId) {
|
|
@@ -156,7 +157,7 @@ export function executeBacktrack(basePath, currentMilestoneId, capture) {
|
|
|
156
157
|
// Write a regression marker so the state machine knows this milestone
|
|
157
158
|
// needs re-discussion, not just re-execution
|
|
158
159
|
const regressionPath = join(targetDir, `${targetMilestoneId}-REGRESSION.md`);
|
|
159
|
-
|
|
160
|
+
atomicWriteSync(regressionPath, [
|
|
160
161
|
`# Milestone Regression`,
|
|
161
162
|
``,
|
|
162
163
|
`**From:** ${currentMilestoneId}`,
|
|
@@ -292,7 +293,7 @@ export function ensureDeferMilestoneDir(basePath, targetMilestone, captures) {
|
|
|
292
293
|
captureList || `(no captures yet)`,
|
|
293
294
|
``,
|
|
294
295
|
].join("\n");
|
|
295
|
-
|
|
296
|
+
atomicWriteSync(join(msDir, `${targetMilestone}-CONTEXT-DRAFT.md`), draftContent, "utf-8");
|
|
296
297
|
return true;
|
|
297
298
|
}
|
|
298
299
|
catch {
|
|
@@ -373,13 +374,16 @@ export function executeTriageResolutions(basePath, mid, sid) {
|
|
|
373
374
|
}
|
|
374
375
|
}
|
|
375
376
|
}
|
|
376
|
-
// Also process deferred
|
|
377
|
-
// milestone
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
377
|
+
// Also process deferred and milestone-class captures (#3542).
|
|
378
|
+
// A defer/milestone capture's "action" is the triage decision itself —
|
|
379
|
+
// once classified and resolved, the capture is done. The target milestone
|
|
380
|
+
// picks up the work naturally from its planning context.
|
|
381
|
+
const deferrable = loadAllCaptures(basePath).filter(c => c.status === "resolved" && !c.executed &&
|
|
382
|
+
(c.classification === "defer" || c.classification === "milestone"));
|
|
383
|
+
if (deferrable.length > 0) {
|
|
384
|
+
// Group captures that reference a specific milestone — create dirs as needed.
|
|
381
385
|
const byMilestone = new Map();
|
|
382
|
-
for (const cap of
|
|
386
|
+
for (const cap of deferrable) {
|
|
383
387
|
const target = cap.resolution?.match(/\b(M\d{3}(?:-[a-z0-9]{6})?)\b/)?.[1];
|
|
384
388
|
if (target) {
|
|
385
389
|
const list = byMilestone.get(target) ?? [];
|
|
@@ -394,12 +398,25 @@ export function executeTriageResolutions(basePath, mid, sid) {
|
|
|
394
398
|
if (created) {
|
|
395
399
|
result.deferredMilestones++;
|
|
396
400
|
result.actions.push(`Created milestone ${milestoneId} for ${captures.length} deferred capture(s)`);
|
|
397
|
-
for (const cap of captures) {
|
|
398
|
-
markCaptureExecuted(basePath, cap.id);
|
|
399
|
-
}
|
|
400
401
|
}
|
|
401
402
|
}
|
|
402
403
|
}
|
|
404
|
+
// Stamp ALL defer/milestone captures as executed (#3542 gaps 1-3).
|
|
405
|
+
// Previously only captures that triggered dir creation were stamped.
|
|
406
|
+
// Captures without a milestone ID in resolution text, or targeting an
|
|
407
|
+
// existing directory, were silently dropped — never stamped.
|
|
408
|
+
for (const cap of deferrable) {
|
|
409
|
+
if (!cap.executed) {
|
|
410
|
+
markCaptureExecuted(basePath, cap.id);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// Mark note captures as executed — they're informational only, no action
|
|
415
|
+
// needed. Without this they stay in "resolved but not executed" limbo (#3578).
|
|
416
|
+
const notes = loadAllCaptures(basePath).filter(c => c.status === "resolved" && !c.executed && c.classification === "note");
|
|
417
|
+
for (const cap of notes) {
|
|
418
|
+
markCaptureExecuted(basePath, cap.id);
|
|
419
|
+
result.actions.push(`Note acknowledged: ${cap.id} — "${cap.text}"`);
|
|
403
420
|
}
|
|
404
421
|
if (actionable.length === 0)
|
|
405
422
|
return result;
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// handleUndo: Rollback the most recent completed unit (revert git, remove state, uncheck plans).
|
|
3
3
|
// handleUndoTask: Reset a single task's DB status to "pending" and re-render markdown.
|
|
4
4
|
// handleResetSlice: Reset a slice and all its tasks, re-rendering plan + roadmap.
|
|
5
|
-
import { existsSync, readFileSync,
|
|
5
|
+
import { existsSync, readFileSync, unlinkSync, readdirSync } from "node:fs";
|
|
6
6
|
import { join, basename } from "node:path";
|
|
7
7
|
import { nativeRevertCommit, nativeRevertAbort } from "./native-git-bridge.js";
|
|
8
|
+
import { atomicWriteSync } from "./atomic-write.js";
|
|
8
9
|
import { parseUnitId } from "./unit-id.js";
|
|
9
10
|
import { deriveState } from "./state.js";
|
|
10
11
|
import { invalidateAllCaches } from "./cache.js";
|
|
@@ -331,7 +332,7 @@ export function uncheckTaskInPlan(basePath, mid, sid, tid) {
|
|
|
331
332
|
const regex = new RegExp(`^(\\s*-\\s*)\\[x\\](\\s*\\**${tid}\\**[:\\s])`, "mi");
|
|
332
333
|
if (regex.test(content)) {
|
|
333
334
|
content = content.replace(regex, "$1[ ]$2");
|
|
334
|
-
|
|
335
|
+
atomicWriteSync(planFile, content);
|
|
335
336
|
return true;
|
|
336
337
|
}
|
|
337
338
|
return false;
|
|
@@ -223,7 +223,7 @@ function _sanitizeForAudit(entry) {
|
|
|
223
223
|
};
|
|
224
224
|
if (entry.context) {
|
|
225
225
|
// Allowlist: only persist known-safe structured keys
|
|
226
|
-
const SAFE_KEYS = new Set(["fn", "tool", "mid", "sid", "tid", "worktree"]);
|
|
226
|
+
const SAFE_KEYS = new Set(["fn", "tool", "mid", "sid", "tid", "worktree", "id", "error", "count"]);
|
|
227
227
|
const filtered = {};
|
|
228
228
|
for (const [k, v] of Object.entries(entry.context)) {
|
|
229
229
|
if (SAFE_KEYS.has(k)) {
|
|
@@ -6,6 +6,7 @@ import { atomicWriteSync } from "./atomic-write.js";
|
|
|
6
6
|
import { join } from "node:path";
|
|
7
7
|
import { mkdirSync, existsSync } from "node:fs";
|
|
8
8
|
import { logWarning } from "./workflow-logger.js";
|
|
9
|
+
import { isClosedStatus } from "./status-guards.js";
|
|
9
10
|
import { deriveState } from "./state.js";
|
|
10
11
|
// ─── Helpers ─────────────────────────────────────────────────────────────
|
|
11
12
|
/**
|
|
@@ -38,7 +39,7 @@ export function renderPlanContent(sliceRow, taskRows) {
|
|
|
38
39
|
lines.push("");
|
|
39
40
|
lines.push("## Tasks");
|
|
40
41
|
for (const task of taskRows) {
|
|
41
|
-
const checkbox = task.status
|
|
42
|
+
const checkbox = isClosedStatus(task.status) ? "[x]" : "[ ]";
|
|
42
43
|
lines.push(`- ${checkbox} **${task.id}: ${task.title}** \u2014 ${task.description}`);
|
|
43
44
|
// Estimate subline (always present if non-empty)
|
|
44
45
|
if (task.estimate) {
|
|
@@ -96,7 +97,7 @@ export function renderRoadmapContent(milestoneRow, sliceRows) {
|
|
|
96
97
|
lines.push("| ID | Slice | Risk | Depends | Done | After this |");
|
|
97
98
|
lines.push("|----|-------|------|---------|------|------------|");
|
|
98
99
|
for (const slice of sliceRows) {
|
|
99
|
-
const done = slice.status
|
|
100
|
+
const done = isClosedStatus(slice.status) ? "\u2705" : "\u2B1C";
|
|
100
101
|
// depends is already parsed to string[] by rowToSlice
|
|
101
102
|
let depends = "\u2014";
|
|
102
103
|
if (slice.depends && slice.depends.length > 0) {
|
|
@@ -324,13 +325,10 @@ export async function renderAllProjections(basePath, milestoneId) {
|
|
|
324
325
|
// Query all slices for this milestone
|
|
325
326
|
const sliceRows = getMilestoneSlices(milestoneId);
|
|
326
327
|
for (const slice of sliceRows) {
|
|
327
|
-
//
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
catch (err) {
|
|
332
|
-
logWarning("projection", `renderPlanProjection failed for ${milestoneId}/${slice.id}: ${err.message}`);
|
|
333
|
-
}
|
|
328
|
+
// PLAN.md is rendered by the authoritative markdown-renderer.js in
|
|
329
|
+
// plan-slice/replan-slice tools. Do NOT overwrite it here — the simplified
|
|
330
|
+
// projection is missing key sections (Must-Haves, Verification, Files
|
|
331
|
+
// Likely Touched) and corrupts multi-line task descriptions (#3651).
|
|
334
332
|
// Render SUMMARY.md for each completed task
|
|
335
333
|
const taskRows = getSliceTasks(milestoneId, slice.id);
|
|
336
334
|
const doneTasks = taskRows.filter(t => t.status === "done" || t.status === "complete");
|
|
@@ -2,8 +2,11 @@ import { join } from "node:path";
|
|
|
2
2
|
import { mkdirSync, existsSync, readFileSync, unlinkSync } from "node:fs";
|
|
3
3
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
4
4
|
import { readEvents, findForkPoint, appendEvent, getSessionId } from "./workflow-events.js";
|
|
5
|
-
import { transaction, updateTaskStatus, updateSliceStatus, getSliceTasks, insertVerificationEvidence, upsertDecision, openDatabase, } from "./gsd-db.js";
|
|
5
|
+
import { transaction, updateTaskStatus, updateSliceStatus, updateMilestoneStatus, getSliceTasks, insertMilestone, _getAdapter, getMilestoneSlices, insertVerificationEvidence, upsertDecision, openDatabase, setTaskBlockerDiscovered, } from "./gsd-db.js";
|
|
6
6
|
import { isClosedStatus } from "./status-guards.js";
|
|
7
|
+
import { invalidateStateCache } from "./state.js";
|
|
8
|
+
import { clearPathCache } from "./paths.js";
|
|
9
|
+
import { clearParseCache } from "./files.js";
|
|
7
10
|
import { writeManifest } from "./workflow-manifest.js";
|
|
8
11
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
9
12
|
import { acquireSyncLock, releaseSyncLock } from "./sync-lock.js";
|
|
@@ -44,7 +47,15 @@ function replayEvents(events) {
|
|
|
44
47
|
transaction(() => {
|
|
45
48
|
for (const event of events) {
|
|
46
49
|
const p = event.params;
|
|
47
|
-
|
|
50
|
+
// Normalize cmd format: completion tools write hyphens ("complete-task"),
|
|
51
|
+
// legacy logs use underscores ("complete_task"). Accept both formats.
|
|
52
|
+
// Type guard: malformed event lines with non-string cmd are skipped.
|
|
53
|
+
if (typeof event.cmd !== "string") {
|
|
54
|
+
logWarning("reconcile", `Event with non-string cmd skipped: ${JSON.stringify(event.cmd)}`);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const cmd = event.cmd.replace(/-/g, "_");
|
|
58
|
+
switch (cmd) {
|
|
48
59
|
case "complete_task": {
|
|
49
60
|
const milestoneId = p["milestoneId"];
|
|
50
61
|
const sliceId = p["sliceId"];
|
|
@@ -60,13 +71,11 @@ function replayEvents(events) {
|
|
|
60
71
|
break;
|
|
61
72
|
}
|
|
62
73
|
case "report_blocker": {
|
|
63
|
-
// report_blocker marks the task with blocker_discovered = 1
|
|
64
|
-
// The DB helper updateTaskStatus doesn't handle blockers,
|
|
65
|
-
// so we just update status to "blocked" as a best-effort replay.
|
|
66
74
|
const milestoneId = p["milestoneId"];
|
|
67
75
|
const sliceId = p["sliceId"];
|
|
68
76
|
const taskId = p["taskId"];
|
|
69
77
|
updateTaskStatus(milestoneId, sliceId, taskId, "blocked");
|
|
78
|
+
setTaskBlockerDiscovered(milestoneId, sliceId, taskId, true);
|
|
70
79
|
break;
|
|
71
80
|
}
|
|
72
81
|
case "record_verification": {
|
|
@@ -91,9 +100,64 @@ function replayEvents(events) {
|
|
|
91
100
|
replaySliceComplete(milestoneId, sliceId, event.ts);
|
|
92
101
|
break;
|
|
93
102
|
}
|
|
103
|
+
case "complete_milestone": {
|
|
104
|
+
const milestoneId = p["milestoneId"];
|
|
105
|
+
if (!milestoneId)
|
|
106
|
+
break;
|
|
107
|
+
// Invariant check: only mark complete if all slices are closed.
|
|
108
|
+
// Without this guard, a reordered/partial event stream could close
|
|
109
|
+
// a milestone while work is still incomplete.
|
|
110
|
+
const mSlices = getMilestoneSlices(milestoneId);
|
|
111
|
+
const allClosed = mSlices.length === 0 || mSlices.every(s => isClosedStatus(s.status));
|
|
112
|
+
if (allClosed) {
|
|
113
|
+
updateMilestoneStatus(milestoneId, "complete", event.ts);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
logWarning("reconcile", `Skipping complete_milestone replay for ${milestoneId}: not all slices are closed`);
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
case "plan_milestone": {
|
|
121
|
+
// Replay milestone creation — uses INSERT OR IGNORE (gsd-db's insertMilestone is safe)
|
|
122
|
+
const mId = p["milestoneId"];
|
|
123
|
+
if (mId) {
|
|
124
|
+
insertMilestone({ id: mId, title: p["title"] ?? mId });
|
|
125
|
+
}
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
94
128
|
case "plan_slice": {
|
|
95
|
-
//
|
|
96
|
-
//
|
|
129
|
+
// Replay slice creation — strict INSERT OR IGNORE to avoid overwriting
|
|
130
|
+
// progressed status. insertSlice() uses ON CONFLICT DO UPDATE which
|
|
131
|
+
// could downgrade a completed slice back to pending.
|
|
132
|
+
const milestoneId = p["milestoneId"];
|
|
133
|
+
const sliceId = p["sliceId"];
|
|
134
|
+
if (milestoneId && sliceId) {
|
|
135
|
+
const adapter = _getAdapter();
|
|
136
|
+
if (adapter) {
|
|
137
|
+
adapter.prepare(`INSERT OR IGNORE INTO slices (milestone_id, id, title, status, created_at)
|
|
138
|
+
VALUES (:mid, :sid, :title, 'pending', :ts)`).run({ ":mid": milestoneId, ":sid": sliceId, ":title": p["title"] ?? sliceId, ":ts": event.ts });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
case "plan_task": {
|
|
144
|
+
// Replay task creation — strict INSERT OR IGNORE to avoid overwriting
|
|
145
|
+
// progressed status. insertTask() uses ON CONFLICT DO UPDATE which
|
|
146
|
+
// could downgrade a done/in-progress task back to pending.
|
|
147
|
+
const milestoneId = p["milestoneId"];
|
|
148
|
+
const sliceId = p["sliceId"];
|
|
149
|
+
const taskId = p["taskId"];
|
|
150
|
+
if (milestoneId && sliceId && taskId) {
|
|
151
|
+
const adapter = _getAdapter();
|
|
152
|
+
if (adapter) {
|
|
153
|
+
adapter.prepare(`INSERT OR IGNORE INTO tasks (milestone_id, slice_id, id, title, status, created_at)
|
|
154
|
+
VALUES (:mid, :sid, :tid, :title, 'pending', :ts)`).run({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId, ":title": p["title"] ?? taskId, ":ts": event.ts });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
case "replan_slice": {
|
|
160
|
+
// Informational — replan events don't mutate DB during replay
|
|
97
161
|
break;
|
|
98
162
|
}
|
|
99
163
|
case "save_decision": {
|
|
@@ -111,7 +175,7 @@ function replayEvents(events) {
|
|
|
111
175
|
break;
|
|
112
176
|
}
|
|
113
177
|
default:
|
|
114
|
-
|
|
178
|
+
logWarning("reconcile", `Unknown event cmd during replay: "${event.cmd}" — skipped`);
|
|
115
179
|
break;
|
|
116
180
|
}
|
|
117
181
|
}
|
|
@@ -125,22 +189,37 @@ function replayEvents(events) {
|
|
|
125
189
|
*/
|
|
126
190
|
export function extractEntityKey(event) {
|
|
127
191
|
const p = event.params;
|
|
128
|
-
|
|
192
|
+
// Normalize cmd format: accept both hyphens and underscores
|
|
193
|
+
if (typeof event.cmd !== "string")
|
|
194
|
+
return null;
|
|
195
|
+
const cmd = event.cmd.replace(/-/g, "_");
|
|
196
|
+
switch (cmd) {
|
|
129
197
|
case "complete_task":
|
|
130
198
|
case "start_task":
|
|
131
199
|
case "report_blocker":
|
|
132
200
|
case "record_verification":
|
|
201
|
+
case "plan_task":
|
|
133
202
|
return typeof p["taskId"] === "string"
|
|
134
203
|
? { type: "task", id: p["taskId"] }
|
|
135
204
|
: null;
|
|
136
205
|
case "complete_slice":
|
|
206
|
+
case "replan_slice":
|
|
137
207
|
return typeof p["sliceId"] === "string"
|
|
138
208
|
? { type: "slice", id: p["sliceId"] }
|
|
139
209
|
: null;
|
|
210
|
+
case "complete_milestone":
|
|
211
|
+
return typeof p["milestoneId"] === "string"
|
|
212
|
+
? { type: "milestone", id: p["milestoneId"] }
|
|
213
|
+
: null;
|
|
140
214
|
case "plan_slice":
|
|
141
215
|
return typeof p["sliceId"] === "string"
|
|
142
216
|
? { type: "slice_plan", id: p["sliceId"] }
|
|
143
217
|
: null;
|
|
218
|
+
case "complete_milestone":
|
|
219
|
+
case "plan_milestone":
|
|
220
|
+
return typeof p["milestoneId"] === "string"
|
|
221
|
+
? { type: "milestone", id: p["milestoneId"] }
|
|
222
|
+
: null;
|
|
144
223
|
case "save_decision":
|
|
145
224
|
if (typeof p["scope"] === "string" && typeof p["decision"] === "string") {
|
|
146
225
|
return { type: "decision", id: `${p["scope"]}:${p["decision"]}` };
|
|
@@ -291,6 +370,13 @@ function _reconcileWorktreeLogsInner(mainBasePath, worktreeBasePath) {
|
|
|
291
370
|
indexed.sort((a, b) => a.e.ts.localeCompare(b.e.ts) || a.i - b.i);
|
|
292
371
|
const merged = indexed.map(({ e }) => e);
|
|
293
372
|
// Step 7: Write merged event log FIRST (so crash recovery can re-derive DB state)
|
|
373
|
+
// Guard: detect concurrent appendEvent calls between our read (step 1) and
|
|
374
|
+
// this rewrite. If the log grew, re-read and retry to avoid dropping events.
|
|
375
|
+
const preWriteEvents = readEvents(mainLogPath);
|
|
376
|
+
if (preWriteEvents.length > mainEvents.length) {
|
|
377
|
+
logWarning("reconcile", `Event log grew during reconcile (${mainEvents.length} → ${preWriteEvents.length}), retrying with fresh read`);
|
|
378
|
+
return _reconcileWorktreeLogsInner(mainBasePath, worktreeBasePath);
|
|
379
|
+
}
|
|
294
380
|
const baseEvents = mainEvents.slice(0, forkPoint + 1);
|
|
295
381
|
const mergedLog = baseEvents.concat(merged);
|
|
296
382
|
const logContent = mergedLog.map((e) => JSON.stringify(e)).join("\n") + (mergedLog.length > 0 ? "\n" : "");
|
|
@@ -306,6 +392,11 @@ function _reconcileWorktreeLogsInner(mainBasePath, worktreeBasePath) {
|
|
|
306
392
|
catch (err) {
|
|
307
393
|
logWarning("reconcile", "manifest write failed (non-fatal)", { error: err.message });
|
|
308
394
|
}
|
|
395
|
+
// Step 10: Invalidate caches so deriveState() sees post-reconcile DB state.
|
|
396
|
+
// Use targeted invalidation (not invalidateAllCaches) to avoid wiping artifacts table.
|
|
397
|
+
invalidateStateCache();
|
|
398
|
+
clearPathCache();
|
|
399
|
+
clearParseCache();
|
|
309
400
|
return { autoMerged: merged.length, conflicts: [] };
|
|
310
401
|
}
|
|
311
402
|
// ─── Conflict Resolution (D-06) ─────────────────────────────────────────────
|
|
@@ -29,8 +29,17 @@ let cachedRegistry = null;
|
|
|
29
29
|
export function loadRegistry() {
|
|
30
30
|
if (cachedRegistry)
|
|
31
31
|
return cachedRegistry;
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
if (!existsSync(registryPath)) {
|
|
33
|
+
cachedRegistry = { version: 1, templates: {} };
|
|
34
|
+
return cachedRegistry;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const content = readFileSync(registryPath, "utf-8");
|
|
38
|
+
cachedRegistry = JSON.parse(content);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
cachedRegistry = { version: 1, templates: {} };
|
|
42
|
+
}
|
|
34
43
|
return cachedRegistry;
|
|
35
44
|
}
|
|
36
45
|
/**
|
|
@@ -44,7 +44,10 @@ function normalizePathForComparison(path) {
|
|
|
44
44
|
export function resolveGitDir(basePath) {
|
|
45
45
|
const gitPath = join(basePath, ".git");
|
|
46
46
|
if (!existsSync(gitPath))
|
|
47
|
-
return
|
|
47
|
+
return gitPath;
|
|
48
|
+
// In a normal repo .git is a directory — skip the file read (#3597)
|
|
49
|
+
if (lstatSync(gitPath).isDirectory())
|
|
50
|
+
return gitPath;
|
|
48
51
|
try {
|
|
49
52
|
const content = readFileSync(gitPath, "utf-8").trim();
|
|
50
53
|
if (content.startsWith("gitdir: ")) {
|
|
@@ -54,7 +57,7 @@ export function resolveGitDir(basePath) {
|
|
|
54
57
|
catch (e) {
|
|
55
58
|
logWarning("worktree", `.git file read failed: ${e.message}`);
|
|
56
59
|
}
|
|
57
|
-
return
|
|
60
|
+
return gitPath;
|
|
58
61
|
}
|
|
59
62
|
export function worktreesDir(basePath) {
|
|
60
63
|
return join(basePath, ".gsd", "worktrees");
|
|
@@ -34,6 +34,15 @@ function getService(basePath) {
|
|
|
34
34
|
}
|
|
35
35
|
return cachedService;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Clear the cached GitServiceImpl. For testing only — forces the next
|
|
39
|
+
* getService() call to re-read preferences and create a fresh instance.
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export function _resetServiceCache() {
|
|
43
|
+
cachedService = null;
|
|
44
|
+
cachedBasePath = null;
|
|
45
|
+
}
|
|
37
46
|
/**
|
|
38
47
|
* Set the active milestone ID on the cached GitServiceImpl.
|
|
39
48
|
* This enables integration branch resolution in getMainBranch().
|
|
@@ -204,7 +204,7 @@ export async function showInterviewRound(questions, opts, ctx) {
|
|
|
204
204
|
// instead of being trapped in a re-asking loop (bug #2715).
|
|
205
205
|
// Only auto-open if the user hasn't already provided notes —
|
|
206
206
|
// otherwise Enter from notes mode loops back here endlessly.
|
|
207
|
-
if (!isMultiSelect(currentIdx) && states[currentIdx].cursorIndex === noneOrDoneIdx(currentIdx) && !states[currentIdx].notes) {
|
|
207
|
+
if (!isMultiSelect(currentIdx) && states[currentIdx].cursorIndex === noneOrDoneIdx(currentIdx) && !states[currentIdx].notes && !states[currentIdx].notesVisible) {
|
|
208
208
|
states[currentIdx].notesVisible = true;
|
|
209
209
|
focusNotes = true;
|
|
210
210
|
loadStateToEditor();
|
|
@@ -5,6 +5,23 @@ import * as fs from "node:fs";
|
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import { getAgentDir, parseFrontmatter } from "@gsd/pi-coding-agent";
|
|
7
7
|
const PROJECT_AGENT_DIR_CANDIDATES = [".gsd", ".pi"];
|
|
8
|
+
function parseAgentTools(value) {
|
|
9
|
+
if (typeof value === "string") {
|
|
10
|
+
const tools = value
|
|
11
|
+
.split(",")
|
|
12
|
+
.map((tool) => tool.trim())
|
|
13
|
+
.filter(Boolean);
|
|
14
|
+
return tools.length > 0 ? tools : undefined;
|
|
15
|
+
}
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
const tools = value
|
|
18
|
+
.flatMap((tool) => typeof tool === "string" ? tool.split(",") : [])
|
|
19
|
+
.map((tool) => tool.trim())
|
|
20
|
+
.filter(Boolean);
|
|
21
|
+
return tools.length > 0 ? tools : undefined;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
8
25
|
function loadAgentsFromDir(dir, source) {
|
|
9
26
|
const agents = [];
|
|
10
27
|
if (!fs.existsSync(dir)) {
|
|
@@ -31,13 +48,10 @@ function loadAgentsFromDir(dir, source) {
|
|
|
31
48
|
continue;
|
|
32
49
|
}
|
|
33
50
|
const { frontmatter, body } = parseFrontmatter(content);
|
|
34
|
-
if (
|
|
51
|
+
if (typeof frontmatter.name !== "string" || typeof frontmatter.description !== "string") {
|
|
35
52
|
continue;
|
|
36
53
|
}
|
|
37
|
-
const tools = frontmatter.tools
|
|
38
|
-
?.split(",")
|
|
39
|
-
.map((t) => t.trim())
|
|
40
|
-
.filter(Boolean);
|
|
54
|
+
const tools = parseAgentTools(frontmatter.tools);
|
|
41
55
|
agents.push({
|
|
42
56
|
name: frontmatter.name,
|
|
43
57
|
description: frontmatter.description,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
fcV2z87tmOazTEreFWNdG
|
|
@@ -1,47 +1,47 @@
|
|
|
1
1
|
{
|
|
2
|
-
"/_not-found/page": "/_not-found",
|
|
3
2
|
"/_global-error/page": "/_global-error",
|
|
4
|
-
"/
|
|
3
|
+
"/_not-found/page": "/_not-found",
|
|
5
4
|
"/api/boot/route": "/api/boot",
|
|
5
|
+
"/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
|
|
6
6
|
"/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
|
|
7
|
-
"/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
|
|
8
|
-
"/api/cleanup/route": "/api/cleanup",
|
|
9
|
-
"/api/dev-mode/route": "/api/dev-mode",
|
|
10
7
|
"/api/doctor/route": "/api/doctor",
|
|
8
|
+
"/api/browse-directories/route": "/api/browse-directories",
|
|
11
9
|
"/api/captures/route": "/api/captures",
|
|
10
|
+
"/api/dev-mode/route": "/api/dev-mode",
|
|
11
|
+
"/api/cleanup/route": "/api/cleanup",
|
|
12
|
+
"/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
|
|
12
13
|
"/api/export-data/route": "/api/export-data",
|
|
13
|
-
"/api/browse-directories/route": "/api/browse-directories",
|
|
14
14
|
"/api/forensics/route": "/api/forensics",
|
|
15
|
-
"/api/
|
|
15
|
+
"/api/experimental/route": "/api/experimental",
|
|
16
16
|
"/api/history/route": "/api/history",
|
|
17
|
+
"/api/git/route": "/api/git",
|
|
17
18
|
"/api/hooks/route": "/api/hooks",
|
|
18
19
|
"/api/inspect/route": "/api/inspect",
|
|
19
20
|
"/api/knowledge/route": "/api/knowledge",
|
|
20
|
-
"/api/experimental/route": "/api/experimental",
|
|
21
|
-
"/api/live-state/route": "/api/live-state",
|
|
22
21
|
"/api/notifications/route": "/api/notifications",
|
|
22
|
+
"/api/live-state/route": "/api/live-state",
|
|
23
23
|
"/api/preferences/route": "/api/preferences",
|
|
24
24
|
"/api/recovery/route": "/api/recovery",
|
|
25
25
|
"/api/onboarding/route": "/api/onboarding",
|
|
26
|
-
"/api/projects/route": "/api/projects",
|
|
27
26
|
"/api/session/browser/route": "/api/session/browser",
|
|
27
|
+
"/api/projects/route": "/api/projects",
|
|
28
|
+
"/api/files/route": "/api/files",
|
|
28
29
|
"/api/session/events/route": "/api/session/events",
|
|
29
|
-
"/api/session/manage/route": "/api/session/manage",
|
|
30
|
-
"/api/settings-data/route": "/api/settings-data",
|
|
31
30
|
"/api/session/command/route": "/api/session/command",
|
|
31
|
+
"/api/settings-data/route": "/api/settings-data",
|
|
32
32
|
"/api/shutdown/route": "/api/shutdown",
|
|
33
|
-
"/api/
|
|
33
|
+
"/api/session/manage/route": "/api/session/manage",
|
|
34
34
|
"/api/steer/route": "/api/steer",
|
|
35
|
+
"/api/skill-health/route": "/api/skill-health",
|
|
35
36
|
"/api/terminal/input/route": "/api/terminal/input",
|
|
36
|
-
"/api/
|
|
37
|
+
"/api/terminal/sessions/route": "/api/terminal/sessions",
|
|
37
38
|
"/api/terminal/resize/route": "/api/terminal/resize",
|
|
38
39
|
"/api/switch-root/route": "/api/switch-root",
|
|
39
|
-
"/api/
|
|
40
|
-
"/api/terminal/upload/route": "/api/terminal/upload",
|
|
40
|
+
"/api/remote-questions/route": "/api/remote-questions",
|
|
41
41
|
"/api/terminal/stream/route": "/api/terminal/stream",
|
|
42
|
-
"/api/undo/route": "/api/undo",
|
|
43
|
-
"/api/visualizer/route": "/api/visualizer",
|
|
44
42
|
"/api/update/route": "/api/update",
|
|
45
|
-
"/api/
|
|
43
|
+
"/api/visualizer/route": "/api/visualizer",
|
|
44
|
+
"/api/undo/route": "/api/undo",
|
|
45
|
+
"/api/terminal/upload/route": "/api/terminal/upload",
|
|
46
46
|
"/page": "/"
|
|
47
47
|
}
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
],
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"lowPriorityFiles": [
|
|
7
|
-
"static/
|
|
8
|
-
"static/
|
|
7
|
+
"static/fcV2z87tmOazTEreFWNdG/_buildManifest.js",
|
|
8
|
+
"static/fcV2z87tmOazTEreFWNdG/_ssgManifest.js"
|
|
9
9
|
],
|
|
10
10
|
"rootMainFiles": [
|
|
11
|
-
"static/chunks/webpack-
|
|
11
|
+
"static/chunks/webpack-9fed74684e1c5bb1.js",
|
|
12
12
|
"static/chunks/4bd1b696-e5d7c65570c947b7.js",
|
|
13
13
|
"static/chunks/3794-337d1ca25ad99a89.js",
|
|
14
|
-
"static/chunks/main-app-
|
|
14
|
+
"static/chunks/main-app-fdab67f7802d7832.js"
|
|
15
15
|
],
|
|
16
16
|
"rootMainFilesTree": {},
|
|
17
17
|
"pages": {
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"dynamicRoutes": {},
|
|
79
79
|
"notFoundRoutes": [],
|
|
80
80
|
"preview": {
|
|
81
|
-
"previewModeId": "
|
|
82
|
-
"previewModeSigningKey": "
|
|
83
|
-
"previewModeEncryptionKey": "
|
|
81
|
+
"previewModeId": "64ce11a4acdbd1b4cc0239f8609d7b23",
|
|
82
|
+
"previewModeSigningKey": "d290b9696b54bdd610e9db7bf76130dd53557ef7e648e38bf0cedef2123c2779",
|
|
83
|
+
"previewModeEncryptionKey": "790bdf138ba68b6747317e5cbea70ce7117529c7402f9c65a856b165b8321f15"
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"static/chunks/363642f4.f9053a63f1b97508.js",
|
|
7
7
|
"static/chunks/4986-c2fc8845ce785303.js",
|
|
8
8
|
"static/chunks/2008.817d0885545aaea9.js",
|
|
9
|
-
"static/chunks/6502.
|
|
9
|
+
"static/chunks/6502.8874bcae249c02e1.js"
|
|
10
10
|
]
|
|
11
11
|
},
|
|
12
12
|
"components/gsd/chat-mode.tsx -> react-markdown": {
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"transform": "lodash/{{member}}"
|
|
101
101
|
}
|
|
102
102
|
},
|
|
103
|
-
"outputFileTracingRoot": "/
|
|
103
|
+
"outputFileTracingRoot": "/__w/gsd-2/gsd-2",
|
|
104
104
|
"cacheComponents": false,
|
|
105
105
|
"cacheLife": {
|
|
106
106
|
"default": {
|
|
@@ -297,11 +297,11 @@
|
|
|
297
297
|
"node-pty"
|
|
298
298
|
],
|
|
299
299
|
"turbopack": {
|
|
300
|
-
"root": "/
|
|
300
|
+
"root": "/__w/gsd-2/gsd-2"
|
|
301
301
|
},
|
|
302
302
|
"distDirRoot": ".next"
|
|
303
303
|
},
|
|
304
|
-
"appDir": "/
|
|
304
|
+
"appDir": "/__w/gsd-2/gsd-2/web",
|
|
305
305
|
"relativeAppDir": "web",
|
|
306
306
|
"files": [
|
|
307
307
|
".next/routes-manifest.json",
|