@opengsd/gsd-pi 1.3.0-dev.eed73bea → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/cli.js +17 -4
- package/dist/headless-answers.js +1 -1
- package/dist/headless-ui.d.ts +1 -1
- package/dist/headless-ui.js +1 -1
- package/dist/headless.js +1 -1
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/claude-code-cli/models.js +9 -0
- package/dist/resources/extensions/gsd/artifact-verification.js +427 -0
- package/dist/resources/extensions/gsd/auto/session.js +11 -0
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +1 -1
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +28 -1
- package/dist/resources/extensions/gsd/auto-budget.js +5 -1
- package/dist/resources/extensions/gsd/auto-dispatch.js +17 -6
- package/dist/resources/extensions/gsd/auto-post-unit.js +1 -1
- package/dist/resources/extensions/gsd/auto-prompts.js +8 -24
- package/dist/resources/extensions/gsd/auto-recovery.js +9 -517
- package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -5
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +3 -3
- package/dist/resources/extensions/gsd/auto-verification.js +5 -2
- package/dist/resources/extensions/gsd/auto.js +19 -10
- package/dist/resources/extensions/gsd/bootstrap/core-session-tools.js +39 -0
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +5 -4
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +33 -18
- package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +48 -36
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +15 -4
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +3 -1
- package/dist/resources/extensions/gsd/commands/handlers/auto.js +1 -1
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
- package/dist/resources/extensions/gsd/commands-usage.js +1 -1
- package/dist/resources/extensions/gsd/db/engine.js +4 -1
- package/dist/resources/extensions/gsd/db-memory-fts-schema.js +34 -0
- package/dist/resources/extensions/gsd/db-workspace.js +55 -3
- package/dist/resources/extensions/gsd/delegation-policy.js +1 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +2 -2
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +192 -4
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +3 -0
- package/dist/resources/extensions/gsd/exec-sandbox.js +8 -2
- package/dist/resources/extensions/gsd/flat-phase-migration.js +45 -0
- package/dist/resources/extensions/gsd/git-service.js +57 -0
- package/dist/resources/extensions/gsd/gitignore.js +4 -1
- package/dist/resources/extensions/gsd/guided-flow-queue.js +20 -13
- package/dist/resources/extensions/gsd/json-persistence.js +20 -0
- package/dist/resources/extensions/gsd/knowledge-backfill.js +18 -11
- package/dist/resources/extensions/gsd/layout-policy.js +3 -1
- package/dist/resources/extensions/gsd/markdown-renderer.js +2 -7
- package/dist/resources/extensions/gsd/memory-backfill.js +28 -21
- package/dist/resources/extensions/gsd/metrics.js +4 -4
- package/dist/resources/extensions/gsd/migrate-external.js +11 -2
- package/dist/resources/extensions/gsd/migration-auto-check.js +22 -0
- package/dist/resources/extensions/gsd/milestone-ids.js +32 -2
- package/dist/resources/extensions/gsd/orphan-stash-audit.js +92 -16
- package/dist/resources/extensions/gsd/prompts/code-review.md +6 -4
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +3 -3
- package/dist/resources/extensions/gsd/root-write-leak-guard.js +7 -1
- package/dist/resources/extensions/gsd/safety/destructive-guard.js +8 -1
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +16 -1
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +5 -2
- package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +1 -1
- package/dist/resources/extensions/gsd/state/derive/cache.js +28 -0
- package/dist/resources/extensions/gsd/state/derive/db-open.js +39 -0
- package/dist/resources/extensions/gsd/state/derive/from-db.js +452 -0
- package/dist/resources/extensions/gsd/state/derive/index.js +75 -0
- package/dist/resources/extensions/gsd/state/derive/interrupted-work.js +21 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +27 -33
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +48 -23
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +32 -28
- package/dist/resources/extensions/gsd/state.js +12 -611
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +4 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +3 -34
- package/dist/resources/extensions/gsd/tools/complete-task.js +8 -41
- package/dist/resources/extensions/gsd/tools/plan-slice.js +59 -44
- package/dist/resources/extensions/gsd/tools/plan-task.js +28 -5
- package/dist/resources/extensions/gsd/undo.js +43 -6
- package/dist/resources/extensions/gsd/unit-registry.js +11 -3
- package/dist/resources/extensions/gsd/verification-gate.js +7 -0
- package/dist/resources/extensions/gsd/workflow-manifest.js +126 -13
- package/dist/resources/extensions/gsd/workflow-projections.js +19 -14
- package/dist/resources/extensions/gsd/worktree-manager.js +44 -2
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
- 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 +9 -9
- 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 +1 -1
- 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/mcp-connections/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/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 +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 +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_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 +10 -10
- package/dist/web/standalone/.next/server/chunks/2842.js +4 -4
- package/dist/web/standalone/.next/server/chunks/8357.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 +3 -3
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/{2659.b7b129ee6a769448.js → 2659.58e950899a9bb82f.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/2772.a7c1fcc69a4685ef.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{3616.3c60753b8ffcbd2e.js → 3616.61a2af74bb8833c8.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{4283.8e446784528ed9dc.js → 4283.d0d9e0a955e441cb.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{5826.a46ecdd1cfe8dabc.js → 5826.5421d66c72b9f34e.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{8785.481aa5869991b760.js → 8785.e29b3134cab1d153.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/8937.640dc9c2aaa1dfad.js +10 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-49f565245e1e4afe.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/{layout-4ae2d68984392bbf.js → layout-b35cbfff38aaf4cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-bc4c723c6a19c6f0.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{main-app-90d1d8d5e5d2dc6b.js → main-app-590a74400e35f685.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ec3eaffc9785ba48.js +1 -0
- package/dist/web/standalone/.next/static/chunks/webpack-9c401904f87ded16.js +1 -0
- package/dist/web/standalone/node_modules/@gsd/native/package.json +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/server.js +1 -1
- package/package.json +6 -6
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/agent-session.d.ts +1 -0
- package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/agent-session.js +3 -0
- package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts +41 -0
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.js +62 -0
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.js.map +1 -0
- package/packages/gsd-agent-core/dist/index.d.ts +2 -0
- package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/index.js +2 -0
- package/packages/gsd-agent-core/dist/index.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-events.js +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-events.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +1 -0
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts +5 -0
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +60 -3
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
- package/packages/gsd-agent-core/dist/transcript-store.d.ts +58 -0
- package/packages/gsd-agent-core/dist/transcript-store.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/transcript-store.js +132 -0
- package/packages/gsd-agent-core/dist/transcript-store.js.map +1 -0
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +25 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js +7 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -24
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -841
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts +58 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js +312 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts +31 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js +130 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts +15 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +258 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts +13 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js +118 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +9 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts +54 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js +20 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +4 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +9 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts +56 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js +44 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js +77 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +23 -5
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +18 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/workflow-tools.js +1 -1
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +4 -4
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +3 -2
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +46 -0
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +38 -0
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/README.md +3 -2
- package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts +9 -0
- package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-context.js +94 -0
- package/packages/pi-coding-agent/dist/core/session-manager-context.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts +8 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.js +244 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts +12 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.js +84 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +135 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.js +2 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts +6 -154
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +22 -459
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts +75 -75
- package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme-schema.js +1 -1
- package/packages/pi-coding-agent/dist/theme/theme-schema.js.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.js +11 -7
- package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/dist/theme/theme-schema.d.ts +75 -75
- package/pkg/dist/theme/theme-schema.d.ts.map +1 -1
- package/pkg/dist/theme/theme-schema.js +1 -1
- package/pkg/dist/theme/theme-schema.js.map +1 -1
- package/pkg/dist/theme/theme.d.ts.map +1 -1
- package/pkg/dist/theme/theme.js +11 -7
- package/pkg/dist/theme/theme.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/tests/index.test.ts +14 -0
- package/src/resources/extensions/gsd/artifact-verification.ts +464 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
- package/src/resources/extensions/gsd/auto/session.ts +14 -0
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +3 -1
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +47 -1
- package/src/resources/extensions/gsd/auto-budget.ts +12 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +17 -7
- package/src/resources/extensions/gsd/auto-post-unit.ts +1 -1
- package/src/resources/extensions/gsd/auto-prompts.ts +7 -23
- package/src/resources/extensions/gsd/auto-recovery.ts +13 -518
- package/src/resources/extensions/gsd/auto-runtime-state.ts +4 -5
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +3 -2
- package/src/resources/extensions/gsd/auto-verification.ts +5 -1
- package/src/resources/extensions/gsd/auto.ts +23 -8
- package/src/resources/extensions/gsd/bootstrap/core-session-tools.ts +44 -0
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +5 -4
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +43 -18
- package/src/resources/extensions/gsd/bootstrap/tests/write-gate-basepath.test.ts +49 -1
- package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +50 -37
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +16 -4
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +2 -1
- package/src/resources/extensions/gsd/commands/handlers/auto.ts +1 -1
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
- package/src/resources/extensions/gsd/commands-usage.ts +1 -1
- package/src/resources/extensions/gsd/db/engine.ts +8 -1
- package/src/resources/extensions/gsd/db-memory-fts-schema.ts +45 -0
- package/src/resources/extensions/gsd/db-workspace.ts +61 -3
- package/src/resources/extensions/gsd/delegation-policy.ts +1 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +2 -2
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +233 -5
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +3 -0
- package/src/resources/extensions/gsd/doctor-types.ts +3 -0
- package/src/resources/extensions/gsd/exec-sandbox.ts +7 -2
- package/src/resources/extensions/gsd/flat-phase-migration.ts +44 -0
- package/src/resources/extensions/gsd/git-service.ts +64 -0
- package/src/resources/extensions/gsd/gitignore.ts +4 -1
- package/src/resources/extensions/gsd/guided-flow-queue.ts +20 -13
- package/src/resources/extensions/gsd/json-persistence.ts +20 -0
- package/src/resources/extensions/gsd/knowledge-backfill.ts +16 -10
- package/src/resources/extensions/gsd/layout-policy.ts +2 -1
- package/src/resources/extensions/gsd/markdown-renderer.ts +2 -10
- package/src/resources/extensions/gsd/memory-backfill.ts +26 -20
- package/src/resources/extensions/gsd/metrics.ts +4 -4
- package/src/resources/extensions/gsd/migrate-external.ts +8 -2
- package/src/resources/extensions/gsd/migration-auto-check.ts +23 -0
- package/src/resources/extensions/gsd/milestone-ids.ts +31 -2
- package/src/resources/extensions/gsd/orphan-stash-audit.ts +108 -20
- package/src/resources/extensions/gsd/prompts/code-review.md +6 -4
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
- package/src/resources/extensions/gsd/prompts/plan-slice.md +3 -3
- package/src/resources/extensions/gsd/root-write-leak-guard.ts +13 -1
- package/src/resources/extensions/gsd/safety/destructive-guard.ts +9 -1
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +16 -1
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +8 -2
- package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +1 -1
- package/src/resources/extensions/gsd/state/derive/cache.ts +46 -0
- package/src/resources/extensions/gsd/state/derive/db-open.ts +45 -0
- package/src/resources/extensions/gsd/state/derive/from-db.ts +561 -0
- package/src/resources/extensions/gsd/state/derive/index.ts +104 -0
- package/src/resources/extensions/gsd/state/derive/interrupted-work.ts +31 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +36 -30
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +50 -24
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +43 -28
- package/src/resources/extensions/gsd/state.ts +32 -732
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +98 -1
- package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +14 -5
- package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +182 -4
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +28 -0
- package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +58 -3
- package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/destructive-guard.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +143 -0
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +239 -2
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +37 -2
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/json-persistence-atomic.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +31 -1
- package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/metrics.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +57 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +91 -7
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +103 -4
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/post-mutation-hook.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +50 -14
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +8 -6
- package/src/resources/extensions/gsd/tests/register-hooks-loop-guard-auto.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/root-write-leak-guard.test.ts +20 -1
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +15 -3
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +115 -0
- package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/undo.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +69 -4
- package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +96 -15
- package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +8 -4
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +6 -5
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +39 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -2
- package/src/resources/extensions/gsd/tools/complete-slice.ts +3 -30
- package/src/resources/extensions/gsd/tools/complete-task.ts +7 -39
- package/src/resources/extensions/gsd/tools/plan-slice.ts +60 -47
- package/src/resources/extensions/gsd/tools/plan-task.ts +30 -5
- package/src/resources/extensions/gsd/undo.ts +47 -6
- package/src/resources/extensions/gsd/unit-registry.ts +11 -3
- package/src/resources/extensions/gsd/verification-gate.ts +8 -0
- package/src/resources/extensions/gsd/workflow-manifest.ts +141 -7
- package/src/resources/extensions/gsd/workflow-projections.ts +20 -14
- package/src/resources/extensions/gsd/worktree-manager.ts +41 -1
- package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +0 -1
- package/dist/web/standalone/.next/static/chunks/796.3976108148518f7d.js +0 -10
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-a6fb1847f67f167c.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/page-6644fc6ee8ca1247.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1115d46ac61b9823.js +0 -1
- package/dist/web/standalone/.next/static/chunks/webpack-7c1d97e39be2da11.js +0 -1
- /package/dist/web/standalone/.next/static/{SzEuqWX37DR9MEpEuQjP1 → zQLcXm0Za8lexoXtgDpMG}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{SzEuqWX37DR9MEpEuQjP1 → zQLcXm0Za8lexoXtgDpMG}/_ssgManifest.js +0 -0
|
@@ -29,21 +29,18 @@ import {
|
|
|
29
29
|
deleteVerificationEvidence,
|
|
30
30
|
saveGateResult,
|
|
31
31
|
getPendingGatesForTurn,
|
|
32
|
-
isDbAvailable,
|
|
33
32
|
} from "../gsd-db.js";
|
|
34
|
-
import { getWorkflowDatabasePath,
|
|
33
|
+
import { getWorkflowDatabasePath, ensureWorkflowDbAtPath } from "../db-workspace.js";
|
|
35
34
|
import { getGatesForTurn } from "../gate-registry.js";
|
|
36
35
|
import { gsdProjectionRoot, clearPathCache, resolveMilestonePath, resolveSlicePath } from "../paths.js";
|
|
37
36
|
import { resolveCanonicalMilestoneRoot } from "../worktree-manager.js";
|
|
38
37
|
import { checkOwnership, taskUnitKey } from "../unit-ownership.js";
|
|
39
38
|
import { saveFile, clearParseCache } from "../files.js";
|
|
40
39
|
import { invalidateStateCache } from "../state.js";
|
|
41
|
-
import { renderPlanCheckboxes
|
|
40
|
+
import { renderPlanCheckboxes } from "../markdown-renderer.js";
|
|
42
41
|
import {
|
|
43
|
-
|
|
42
|
+
renderMilestoneShellProjections,
|
|
44
43
|
renderSummaryContent,
|
|
45
|
-
renderTopLevelQueueFromDb,
|
|
46
|
-
renderTopLevelRoadmapFromDb,
|
|
47
44
|
} from "../workflow-projections.js";
|
|
48
45
|
import { writeManifest } from "../workflow-manifest.js";
|
|
49
46
|
import { appendEvent } from "../workflow-events.js";
|
|
@@ -108,35 +105,6 @@ function taskSummaryPath(
|
|
|
108
105
|
);
|
|
109
106
|
}
|
|
110
107
|
|
|
111
|
-
async function renderCompleteTaskProjections(basePath: string, milestoneId: string): Promise<void> {
|
|
112
|
-
try {
|
|
113
|
-
await renderRoadmapFromDb(basePath, milestoneId);
|
|
114
|
-
} catch (err) {
|
|
115
|
-
logWarning("projection", `renderRoadmapFromDb failed for ${milestoneId}: ${(err as Error).message}`);
|
|
116
|
-
}
|
|
117
|
-
try {
|
|
118
|
-
renderTopLevelRoadmapFromDb(basePath);
|
|
119
|
-
} catch (err) {
|
|
120
|
-
logWarning("projection", `renderTopLevelRoadmapFromDb failed: ${(err as Error).message}`);
|
|
121
|
-
}
|
|
122
|
-
try {
|
|
123
|
-
renderTopLevelQueueFromDb(basePath);
|
|
124
|
-
} catch (err) {
|
|
125
|
-
logWarning("projection", `renderTopLevelQueueFromDb failed: ${(err as Error).message}`);
|
|
126
|
-
}
|
|
127
|
-
try {
|
|
128
|
-
await renderStateProjection(basePath);
|
|
129
|
-
} catch (err) {
|
|
130
|
-
logWarning("projection", `renderStateProjection failed: ${(err as Error).message}`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function ensureCompleteTaskDbOpen(dbPath: string | null): boolean {
|
|
135
|
-
if (!dbPath || dbPath === ":memory:") return isDbAvailable();
|
|
136
|
-
if (isDbAvailable() && getWorkflowDatabasePath() === dbPath) return true;
|
|
137
|
-
return openWorkflowDatabasePath(dbPath);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
108
|
async function repairMissingTaskSummaryProjection(
|
|
141
109
|
artifactBasePath: string,
|
|
142
110
|
taskRow: TaskRow,
|
|
@@ -167,7 +135,7 @@ async function repairMissingTaskSummaryProjection(
|
|
|
167
135
|
clearParseCache();
|
|
168
136
|
|
|
169
137
|
try {
|
|
170
|
-
await
|
|
138
|
+
await renderMilestoneShellProjections(artifactBasePath, taskRow.milestone_id);
|
|
171
139
|
} catch (projErr) {
|
|
172
140
|
logWarning("tool", `complete-task repair projection warning: ${(projErr as Error).message}`);
|
|
173
141
|
}
|
|
@@ -473,7 +441,7 @@ export async function handleCompleteTask(
|
|
|
473
441
|
|
|
474
442
|
// Toggle or regenerate the plan projection from DB. Missing projection
|
|
475
443
|
// files are rebuilt by the renderer instead of being skipped.
|
|
476
|
-
if (!
|
|
444
|
+
if (!ensureWorkflowDbAtPath(rollbackDbPath)) {
|
|
477
445
|
throw new Error(`database unavailable before plan projection render for ${params.milestoneId}/${params.sliceId}`);
|
|
478
446
|
}
|
|
479
447
|
const wrotePlan = await renderPlanCheckboxes(artifactBasePath, params.milestoneId, params.sliceId);
|
|
@@ -488,7 +456,7 @@ export async function handleCompleteTask(
|
|
|
488
456
|
);
|
|
489
457
|
let rollbackSucceeded = false;
|
|
490
458
|
try {
|
|
491
|
-
|
|
459
|
+
ensureWorkflowDbAtPath(rollbackDbPath);
|
|
492
460
|
deleteVerificationEvidence(params.milestoneId, params.sliceId, params.taskId);
|
|
493
461
|
updateTaskStatus(params.milestoneId, params.sliceId, params.taskId, "pending");
|
|
494
462
|
invalidateStateCache();
|
|
@@ -640,7 +608,7 @@ export async function handleCompleteTask(
|
|
|
640
608
|
// Separate try/catch per step so a projection failure doesn't prevent
|
|
641
609
|
// the event log entry (critical for worktree reconciliation).
|
|
642
610
|
try {
|
|
643
|
-
await
|
|
611
|
+
await renderMilestoneShellProjections(artifactBasePath, params.milestoneId);
|
|
644
612
|
} catch (projErr) {
|
|
645
613
|
logWarning("tool", `complete-task projection warning: ${(projErr as Error).message}`);
|
|
646
614
|
}
|
|
@@ -51,7 +51,7 @@ export interface PlanSliceParams {
|
|
|
51
51
|
milestoneId: string;
|
|
52
52
|
sliceId: string;
|
|
53
53
|
goal: string;
|
|
54
|
-
tasks
|
|
54
|
+
tasks?: PlanSliceTaskInput[];
|
|
55
55
|
/** @optional — omitted fields render as conservative defaults */
|
|
56
56
|
successCriteria?: string;
|
|
57
57
|
/** @optional — omitted fields render as conservative defaults */
|
|
@@ -86,10 +86,12 @@ function validateRepositoryTargetIds(
|
|
|
86
86
|
return deduped;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
function validateTasks(value: unknown): PlanSliceTaskInput[] {
|
|
90
|
-
if (
|
|
91
|
-
|
|
89
|
+
function validateTasks(value: unknown): PlanSliceTaskInput[] | undefined {
|
|
90
|
+
if (value === undefined) return undefined;
|
|
91
|
+
if (!Array.isArray(value)) {
|
|
92
|
+
throw new Error("tasks must be an array");
|
|
92
93
|
}
|
|
94
|
+
if (value.length === 0) return undefined;
|
|
93
95
|
|
|
94
96
|
const seen = new Set<string>();
|
|
95
97
|
return value.map((entry, index) => {
|
|
@@ -200,7 +202,7 @@ function validateReferencedRepositories(
|
|
|
200
202
|
};
|
|
201
203
|
|
|
202
204
|
for (const id of params.targetRepositories ?? defaultTargets) noteMissing(id);
|
|
203
|
-
for (const task of params.tasks) {
|
|
205
|
+
for (const task of params.tasks ?? []) {
|
|
204
206
|
for (const id of task.targetRepositories ?? params.targetRepositories ?? defaultTargets) noteMissing(id);
|
|
205
207
|
}
|
|
206
208
|
|
|
@@ -211,7 +213,7 @@ function validateReferencedRepositories(
|
|
|
211
213
|
function resolveAllowedRootsForPathScope(params: PlanSliceParams, registry: RepositoryRegistry, defaultTargets: string[]): string[] {
|
|
212
214
|
const requested = new Set<string>();
|
|
213
215
|
for (const id of params.targetRepositories ?? defaultTargets) requested.add(id);
|
|
214
|
-
for (const task of params.tasks) {
|
|
216
|
+
for (const task of params.tasks ?? []) {
|
|
215
217
|
for (const id of task.targetRepositories ?? params.targetRepositories ?? defaultTargets) requested.add(id);
|
|
216
218
|
}
|
|
217
219
|
if (requested.size === 0) return [registry.projectRoot];
|
|
@@ -222,7 +224,7 @@ function resolveAllowedRootsForPathScope(params: PlanSliceParams, registry: Repo
|
|
|
222
224
|
}
|
|
223
225
|
|
|
224
226
|
function toTaskRows(params: PlanSliceParams, defaultTargets: string[]): TaskRow[] {
|
|
225
|
-
return params.tasks.map((task, index) => ({
|
|
227
|
+
return (params.tasks ?? []).map((task, index) => ({
|
|
226
228
|
milestone_id: params.milestoneId,
|
|
227
229
|
slice_id: params.sliceId,
|
|
228
230
|
id: task.taskId,
|
|
@@ -309,6 +311,8 @@ export async function handlePlanSlice(
|
|
|
309
311
|
return { error: `validation failed: ${message}` };
|
|
310
312
|
}
|
|
311
313
|
const defaultTargets = defaultRepositoryTargets(repositoryRegistry);
|
|
314
|
+
const taskPayload = params.tasks ?? [];
|
|
315
|
+
const hasTaskPayload = taskPayload.length > 0;
|
|
312
316
|
const repoValidationError = validateReferencedRepositories(params, repositoryRegistry, defaultTargets);
|
|
313
317
|
if (repoValidationError) {
|
|
314
318
|
return { error: `validation failed: ${repoValidationError}` };
|
|
@@ -317,7 +321,7 @@ export async function handlePlanSlice(
|
|
|
317
321
|
const allowedAbsoluteRoots = resolveAllowedRootsForPathScope(params, repositoryRegistry, defaultTargets);
|
|
318
322
|
|
|
319
323
|
const pathOnlyError = validatePathOnlyPlanningFields(
|
|
320
|
-
|
|
324
|
+
taskPayload.map((task, index) => ({
|
|
321
325
|
field: `tasks[${index}].expectedOutput`,
|
|
322
326
|
values: task.expectedOutput,
|
|
323
327
|
})),
|
|
@@ -328,7 +332,7 @@ export async function handlePlanSlice(
|
|
|
328
332
|
|
|
329
333
|
const pathScopeError = validatePlanningPathScope(
|
|
330
334
|
basePath,
|
|
331
|
-
|
|
335
|
+
taskPayload.flatMap((task, index) => [
|
|
332
336
|
{ field: `tasks[${index}].files`, values: task.files },
|
|
333
337
|
{ field: `tasks[${index}].inputs`, values: task.inputs },
|
|
334
338
|
{ field: `tasks[${index}].expectedOutput`, values: task.expectedOutput },
|
|
@@ -372,16 +376,18 @@ export async function handlePlanSlice(
|
|
|
372
376
|
return;
|
|
373
377
|
}
|
|
374
378
|
|
|
375
|
-
const newTaskIds = new Set(
|
|
379
|
+
const newTaskIds = new Set(taskPayload.map((task) => task.taskId));
|
|
376
380
|
const existingTasks = getSliceTasks(params.milestoneId, params.sliceId);
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
381
|
+
if (hasTaskPayload) {
|
|
382
|
+
omittedTaskIds = existingTasks
|
|
383
|
+
.filter((task) => !newTaskIds.has(task.id))
|
|
384
|
+
.map((task) => task.id);
|
|
385
|
+
|
|
386
|
+
for (const task of existingTasks) {
|
|
387
|
+
if (!newTaskIds.has(task.id) && isClosedStatus(task.status)) {
|
|
388
|
+
guardError = `cannot remove completed task ${task.id}`;
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
385
391
|
}
|
|
386
392
|
}
|
|
387
393
|
|
|
@@ -398,35 +404,37 @@ export async function handlePlanSlice(
|
|
|
398
404
|
targetRepositories: params.targetRepositories ?? defaultTargets,
|
|
399
405
|
});
|
|
400
406
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
407
|
+
if (hasTaskPayload) {
|
|
408
|
+
for (const taskId of omittedTaskIds) {
|
|
409
|
+
deleteTask(params.milestoneId, params.sliceId, taskId);
|
|
410
|
+
}
|
|
404
411
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
title: task.title,
|
|
409
|
-
description: task.description,
|
|
410
|
-
estimate: task.estimate,
|
|
411
|
-
files: task.files,
|
|
412
|
-
verify: task.verify,
|
|
413
|
-
inputs: task.inputs,
|
|
414
|
-
expectedOutput: task.expectedOutput,
|
|
415
|
-
observabilityImpact: task.observabilityImpact ?? "",
|
|
416
|
-
fullPlanMd: task.fullPlanMd,
|
|
417
|
-
targetRepositories: task.targetRepositories ?? params.targetRepositories ?? defaultTargets,
|
|
418
|
-
};
|
|
419
|
-
const existingTask = existingTaskById.get(task.taskId);
|
|
420
|
-
if (!existingTask || !isClosedStatus(existingTask.status)) {
|
|
421
|
-
insertTask({
|
|
422
|
-
id: task.taskId,
|
|
423
|
-
sliceId: params.sliceId,
|
|
424
|
-
milestoneId: params.milestoneId,
|
|
412
|
+
const existingTaskById = new Map(existingTasks.map((task) => [task.id, task]));
|
|
413
|
+
for (const task of taskPayload) {
|
|
414
|
+
const planning = {
|
|
425
415
|
title: task.title,
|
|
426
|
-
|
|
427
|
-
|
|
416
|
+
description: task.description,
|
|
417
|
+
estimate: task.estimate,
|
|
418
|
+
files: task.files,
|
|
419
|
+
verify: task.verify,
|
|
420
|
+
inputs: task.inputs,
|
|
421
|
+
expectedOutput: task.expectedOutput,
|
|
422
|
+
observabilityImpact: task.observabilityImpact ?? "",
|
|
423
|
+
fullPlanMd: task.fullPlanMd,
|
|
424
|
+
targetRepositories: task.targetRepositories ?? params.targetRepositories ?? defaultTargets,
|
|
425
|
+
};
|
|
426
|
+
const existingTask = existingTaskById.get(task.taskId);
|
|
427
|
+
if (!existingTask || !isClosedStatus(existingTask.status)) {
|
|
428
|
+
insertTask({
|
|
429
|
+
id: task.taskId,
|
|
430
|
+
sliceId: params.sliceId,
|
|
431
|
+
milestoneId: params.milestoneId,
|
|
432
|
+
title: task.title,
|
|
433
|
+
status: "pending",
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
upsertTaskPlanning(params.milestoneId, params.sliceId, task.taskId, planning);
|
|
428
437
|
}
|
|
429
|
-
upsertTaskPlanning(params.milestoneId, params.sliceId, task.taskId, planning);
|
|
430
438
|
}
|
|
431
439
|
|
|
432
440
|
// Seed quality gate rows inside the transaction — all-or-nothing with
|
|
@@ -436,7 +444,7 @@ export async function handlePlanSlice(
|
|
|
436
444
|
insertGateRow({ milestoneId: params.milestoneId, sliceId: params.sliceId, gateId: gid, scope: "slice" });
|
|
437
445
|
}
|
|
438
446
|
const taskGates = resolveTaskGates(gateEvaluation);
|
|
439
|
-
for (const task of
|
|
447
|
+
for (const task of taskPayload) {
|
|
440
448
|
for (const gid of taskGates) {
|
|
441
449
|
insertGateRow({ milestoneId: params.milestoneId, sliceId: params.sliceId, gateId: gid, scope: "task", taskId: task.taskId });
|
|
442
450
|
}
|
|
@@ -460,8 +468,13 @@ export async function handlePlanSlice(
|
|
|
460
468
|
deleteArtifactByPath(artifactPath);
|
|
461
469
|
}
|
|
462
470
|
|
|
463
|
-
const
|
|
464
|
-
|
|
471
|
+
const sliceTasks = getSliceTasks(params.milestoneId, params.sliceId);
|
|
472
|
+
const renderResult = sliceTasks.length === 0
|
|
473
|
+
? { planPath: "", taskPlanPaths: [] as string[] }
|
|
474
|
+
: await renderPlanFromDb(basePath, params.milestoneId, params.sliceId);
|
|
475
|
+
if (sliceTasks.length > 0) {
|
|
476
|
+
setSliceSketchFlag(params.milestoneId, params.sliceId, false);
|
|
477
|
+
}
|
|
465
478
|
invalidateStateCache();
|
|
466
479
|
clearParseCache();
|
|
467
480
|
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { clearParseCache } from "../files.js";
|
|
2
2
|
import { isClosedStatus } from "../status-guards.js";
|
|
3
3
|
import { isNonEmptyString, validateStringArray } from "../validation.js";
|
|
4
|
-
import {
|
|
4
|
+
import { getGateIdsForTurn } from "../gate-registry.js";
|
|
5
|
+
import { transaction, getSlice, getTask, insertTask, upsertTaskPlanning, insertGateRow, setSliceSketchFlag } from "../gsd-db.js";
|
|
5
6
|
import { invalidateStateCache } from "../state.js";
|
|
6
7
|
import { renderTaskPlanFromDb, renderPlanFromDb } from "../markdown-renderer.js";
|
|
7
|
-
import {
|
|
8
|
+
import { resolveTasksDir } from "../paths.js";
|
|
8
9
|
import { flushWorkflowProjections } from "../projection-flush.js";
|
|
9
10
|
import { writeManifest } from "../workflow-manifest.js";
|
|
10
11
|
import { appendEvent } from "../workflow-events.js";
|
|
11
12
|
import { logWarning } from "../workflow-logger.js";
|
|
13
|
+
import { loadEffectiveGSDPreferences } from "../preferences.js";
|
|
12
14
|
import { validatePathOnlyPlanningFields, validatePlanningPathScope } from "../planning-path-scope.js";
|
|
15
|
+
import type { GateId } from "../types.js";
|
|
13
16
|
|
|
14
17
|
export interface PlanTaskParams {
|
|
15
18
|
milestoneId: string;
|
|
@@ -57,6 +60,12 @@ function validateParams(params: PlanTaskParams): PlanTaskParams {
|
|
|
57
60
|
};
|
|
58
61
|
}
|
|
59
62
|
|
|
63
|
+
function resolveTaskGates(basePath: string): GateId[] {
|
|
64
|
+
const loaded = loadEffectiveGSDPreferences(basePath);
|
|
65
|
+
if (loaded?.preferences?.gate_evaluation?.task_gates === false) return [];
|
|
66
|
+
return [...getGateIdsForTurn("execute-task")];
|
|
67
|
+
}
|
|
68
|
+
|
|
60
69
|
export async function handlePlanTask(
|
|
61
70
|
rawParams: PlanTaskParams,
|
|
62
71
|
basePath: string,
|
|
@@ -84,6 +93,14 @@ export async function handlePlanTask(
|
|
|
84
93
|
return { error: `validation failed: ${pathScopeError}` };
|
|
85
94
|
}
|
|
86
95
|
|
|
96
|
+
let taskGates: GateId[];
|
|
97
|
+
try {
|
|
98
|
+
taskGates = resolveTaskGates(basePath);
|
|
99
|
+
} catch (err) {
|
|
100
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
101
|
+
return { error: `validation failed: ${message}` };
|
|
102
|
+
}
|
|
103
|
+
|
|
87
104
|
// ── Guards + DB writes inside a single transaction (prevents TOCTOU) ───
|
|
88
105
|
// Guards must be inside the transaction so the state they check cannot
|
|
89
106
|
// change between the read and the write (#2723).
|
|
@@ -127,6 +144,9 @@ export async function handlePlanTask(
|
|
|
127
144
|
observabilityImpact: params.observabilityImpact ?? "",
|
|
128
145
|
fullPlanMd: params.fullPlanMd,
|
|
129
146
|
});
|
|
147
|
+
for (const gid of taskGates) {
|
|
148
|
+
insertGateRow({ milestoneId: params.milestoneId, sliceId: params.sliceId, gateId: gid, scope: "task", taskId: params.taskId });
|
|
149
|
+
}
|
|
130
150
|
});
|
|
131
151
|
} catch (err) {
|
|
132
152
|
return { error: `db write failed: ${(err as Error).message}` };
|
|
@@ -142,17 +162,22 @@ export async function handlePlanTask(
|
|
|
142
162
|
// Flat-phase: tasks live as checkboxes in the slice plan's <tasks> block,
|
|
143
163
|
// not as standalone TID-PLAN.md files. Re-render the slice plan so the
|
|
144
164
|
// new/updated task appears in the plan file that gsd-core reads.
|
|
145
|
-
// Guard: resolveTasksDir is null in flat-phase (no tasks/ subdir exists)
|
|
146
|
-
|
|
165
|
+
// Guard: resolveTasksDir is null in flat-phase (no tasks/ subdir exists).
|
|
166
|
+
let slicePlanSynced = false;
|
|
147
167
|
try {
|
|
148
168
|
const tDir = resolveTasksDir(basePath, params.milestoneId, params.sliceId);
|
|
149
|
-
if (!tDir
|
|
169
|
+
if (!tDir) {
|
|
150
170
|
await renderPlanFromDb(basePath, params.milestoneId, params.sliceId);
|
|
171
|
+
slicePlanSynced = true;
|
|
151
172
|
}
|
|
152
173
|
} catch (syncErr) {
|
|
153
174
|
logWarning("tool", `plan-task: slice-plan sync failed: ${(syncErr as Error).message}`);
|
|
154
175
|
}
|
|
155
176
|
|
|
177
|
+
if (slicePlanSynced) {
|
|
178
|
+
setSliceSketchFlag(params.milestoneId, params.sliceId, false);
|
|
179
|
+
}
|
|
180
|
+
|
|
156
181
|
invalidateStateCache();
|
|
157
182
|
clearParseCache();
|
|
158
183
|
|
|
@@ -15,6 +15,7 @@ import { gsdRoot, resolveTasksDir, resolveSlicePath, resolveSliceFile, resolveTa
|
|
|
15
15
|
import { sendDesktopNotification } from "./notifications.js";
|
|
16
16
|
import { getTask, getSlice, getSliceTasks, updateTaskStatus, resetSliceCascade } from "./gsd-db.js";
|
|
17
17
|
import { renderPlanCheckboxes, renderRoadmapCheckboxes } from "./markdown-renderer.js";
|
|
18
|
+
import { UNIT_REGISTRY } from "./unit-registry.js";
|
|
18
19
|
|
|
19
20
|
/**
|
|
20
21
|
* Undo the last completed unit: revert git commits,
|
|
@@ -42,16 +43,20 @@ export async function handleUndo(args: string, ctx: ExtensionCommandContext, _pi
|
|
|
42
43
|
return;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
// Extract unit type and ID from the most recent activity log filename
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
// Extract unit type and ID from the most recent activity log filename.
|
|
47
|
+
// Both the unit type and the unit ID may contain hyphens, so anchor on the
|
|
48
|
+
// known unit-type vocabulary instead of guessing the unit-ID shape: a regex
|
|
49
|
+
// tuned to milestone-shaped IDs rejects project-level units whose IDs are
|
|
50
|
+
// symbolic (e.g. discuss-project uses PROJECT, workflow-preferences uses
|
|
51
|
+
// WORKFLOW-PREFS).
|
|
52
|
+
const parsed = parseActivityLogFilename(files[0]);
|
|
53
|
+
if (!parsed) {
|
|
49
54
|
ctx.ui.notify("Nothing to undo — could not parse latest activity log.", "warning");
|
|
50
55
|
return;
|
|
51
56
|
}
|
|
52
57
|
|
|
53
|
-
const unitType =
|
|
54
|
-
const unitId =
|
|
58
|
+
const unitType = parsed.unitType;
|
|
59
|
+
const unitId = parsed.unitId.replace(/-/g, "/");
|
|
55
60
|
|
|
56
61
|
if (!force) {
|
|
57
62
|
ctx.ui.notify(
|
|
@@ -100,6 +105,11 @@ export async function handleUndo(args: string, ctx: ExtensionCommandContext, _pi
|
|
|
100
105
|
if (unitType === "execute-task" && task !== undefined && slice !== undefined) {
|
|
101
106
|
const [mid, sid, tid] = [milestone, slice, task];
|
|
102
107
|
planUpdated = uncheckTaskInPlan(basePath, mid, sid, tid);
|
|
108
|
+
if (getTask(mid, sid, tid)) {
|
|
109
|
+
updateTaskStatus(mid, sid, tid, "pending");
|
|
110
|
+
await renderPlanCheckboxes(basePath, mid, sid);
|
|
111
|
+
planUpdated = true;
|
|
112
|
+
}
|
|
103
113
|
}
|
|
104
114
|
|
|
105
115
|
// 3. Try to revert git commits from activity log
|
|
@@ -379,6 +389,37 @@ export async function handleResetSlice(
|
|
|
379
389
|
|
|
380
390
|
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
381
391
|
|
|
392
|
+
// Known unit types sorted longest-first so a more specific type (e.g.
|
|
393
|
+
// "execute-task-simple") matches before a prefix of it ("execute-task") when
|
|
394
|
+
// splitting "<seq>-<unitType>-<unitId>.jsonl".
|
|
395
|
+
const UNIT_TYPES_BY_LENGTH_DESC: readonly string[] = Object.keys(UNIT_REGISTRY).sort(
|
|
396
|
+
(a, b) => b.length - a.length,
|
|
397
|
+
);
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Parse an activity-log filename of the form `<seq>-<unitType>-<unitId>.jsonl`
|
|
401
|
+
* (the format written by activity-log.ts). Both the unit type and the unit ID
|
|
402
|
+
* may contain hyphens, so we anchor on the known unit-type vocabulary rather
|
|
403
|
+
* than guessing the ID shape. This keeps non-milestone IDs (e.g. PROJECT,
|
|
404
|
+
* WORKFLOW-PREFS) parseable. Returns null when the name has no sequence prefix
|
|
405
|
+
* or does not start with a recognised unit type.
|
|
406
|
+
*/
|
|
407
|
+
export function parseActivityLogFilename(
|
|
408
|
+
filename: string,
|
|
409
|
+
): { unitType: string; unitId: string } | null {
|
|
410
|
+
const seqMatch = filename.match(/^\d+-(.+)\.jsonl$/);
|
|
411
|
+
if (!seqMatch) return null;
|
|
412
|
+
const rest = seqMatch[1];
|
|
413
|
+
for (const unitType of UNIT_TYPES_BY_LENGTH_DESC) {
|
|
414
|
+
const prefix = `${unitType}-`;
|
|
415
|
+
if (rest.startsWith(prefix)) {
|
|
416
|
+
const unitId = rest.slice(prefix.length);
|
|
417
|
+
if (unitId.length > 0) return { unitType, unitId };
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
return null;
|
|
421
|
+
}
|
|
422
|
+
|
|
382
423
|
export function uncheckTaskInPlan(basePath: string, mid: string, sid: string, tid: string): boolean {
|
|
383
424
|
const slicePath = resolveSlicePath(basePath, mid, sid);
|
|
384
425
|
if (!slicePath) return false;
|
|
@@ -117,10 +117,11 @@ export const UNIT_REGISTRY = {
|
|
|
117
117
|
"gsd_milestone_status",
|
|
118
118
|
"gsd_plan_milestone",
|
|
119
119
|
"gsd_plan_slice",
|
|
120
|
+
"gsd_plan_task",
|
|
120
121
|
"gsd_decision_save",
|
|
121
122
|
"gsd_requirement_update",
|
|
122
123
|
],
|
|
123
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_plan_milestone", "gsd_plan_slice"],
|
|
124
|
+
requiredWorkflowTools: ["gsd_milestone_status", "gsd_plan_milestone", "gsd_plan_slice", "gsd_plan_task"],
|
|
124
125
|
},
|
|
125
126
|
},
|
|
126
127
|
"discuss-milestone": {
|
|
@@ -219,13 +220,14 @@ export const UNIT_REGISTRY = {
|
|
|
219
220
|
allowedGsdTools: [
|
|
220
221
|
"gsd_milestone_status",
|
|
221
222
|
"gsd_plan_slice",
|
|
223
|
+
"gsd_plan_task",
|
|
222
224
|
"gsd_reassess_roadmap",
|
|
223
225
|
"gsd_decision_save",
|
|
224
226
|
"gsd_exec",
|
|
225
227
|
"gsd_exec_search",
|
|
226
228
|
"gsd_resume",
|
|
227
229
|
],
|
|
228
|
-
requiredWorkflowTools: ["gsd_plan_slice", "gsd_reassess_roadmap"],
|
|
230
|
+
requiredWorkflowTools: ["gsd_plan_slice", "gsd_plan_task", "gsd_reassess_roadmap"],
|
|
229
231
|
},
|
|
230
232
|
},
|
|
231
233
|
"refine-slice": {
|
|
@@ -345,7 +347,13 @@ export const UNIT_REGISTRY = {
|
|
|
345
347
|
scopeClass: "execute-task",
|
|
346
348
|
phaseChain: ["execution"],
|
|
347
349
|
toolContract: {
|
|
348
|
-
allowedGsdTools: [
|
|
350
|
+
allowedGsdTools: [
|
|
351
|
+
"gsd_milestone_status",
|
|
352
|
+
"gsd_task_complete",
|
|
353
|
+
"gsd_exec",
|
|
354
|
+
"gsd_summary_save",
|
|
355
|
+
"gsd_decision_save",
|
|
356
|
+
],
|
|
349
357
|
requiredWorkflowTools: ["gsd_task_complete", "gsd_summary_save"],
|
|
350
358
|
},
|
|
351
359
|
},
|
|
@@ -244,6 +244,14 @@ export function formatFailureContext(result: VerificationResult): string {
|
|
|
244
244
|
return header + body;
|
|
245
245
|
}
|
|
246
246
|
|
|
247
|
+
export function formatFailureSignature(result: VerificationResult): string {
|
|
248
|
+
return result.checks
|
|
249
|
+
.filter((check) => check.exitCode !== 0)
|
|
250
|
+
.map((check) => `${check.command.trim()}#${check.exitCode}`)
|
|
251
|
+
.sort()
|
|
252
|
+
.join("\n");
|
|
253
|
+
}
|
|
254
|
+
|
|
247
255
|
// ─── Gate Execution ─────────────────────────────────────────────────────────
|
|
248
256
|
|
|
249
257
|
/** Characters that indicate shell control syntax when unquoted in a command string. */
|