gsd-pi 2.79.0-dev.ece5fd8ba → 2.80.0-dev.710c06e97
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/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/github-sync/templates.js +90 -74
- package/dist/resources/extensions/gsd/auto/contracts.js +1 -0
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
- package/dist/resources/extensions/gsd/auto/loop.js +365 -522
- package/dist/resources/extensions/gsd/auto/orchestrator.js +146 -0
- package/dist/resources/extensions/gsd/auto/phases.js +55 -6
- package/dist/resources/extensions/gsd/auto/run-unit.js +19 -15
- package/dist/resources/extensions/gsd/auto/session.js +8 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +48 -0
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
- package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
- package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
- package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
- package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
- package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
- package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
- package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
- package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
- package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
- package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +15 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +54 -15
- package/dist/resources/extensions/gsd/auto-prompts.js +168 -3
- package/dist/resources/extensions/gsd/auto-recovery.js +72 -55
- package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
- package/dist/resources/extensions/gsd/auto-verification.js +2 -11
- package/dist/resources/extensions/gsd/auto-worktree.js +87 -38
- package/dist/resources/extensions/gsd/auto.js +159 -2
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +24 -2
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -6
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +129 -1
- package/dist/resources/extensions/gsd/commands-ship.js +23 -46
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
- package/dist/resources/extensions/gsd/component-loader.js +5 -11
- package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
- package/dist/resources/extensions/gsd/db-adapter.js +47 -0
- package/dist/resources/extensions/gsd/db-base-schema.js +337 -0
- package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
- package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
- package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
- package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
- package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
- package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
- package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
- package/dist/resources/extensions/gsd/db-migration-steps.js +394 -0
- package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
- package/dist/resources/extensions/gsd/db-open-state.js +32 -0
- package/dist/resources/extensions/gsd/db-provider.js +108 -0
- package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
- package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
- package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
- package/dist/resources/extensions/gsd/db-transaction.js +63 -0
- package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
- package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
- package/dist/resources/extensions/gsd/escalation.js +2 -0
- package/dist/resources/extensions/gsd/graph.js +9 -3
- package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
- package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
- package/dist/resources/extensions/gsd/model-router.js +9 -6
- package/dist/resources/extensions/gsd/notification-widget.js +21 -3
- package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
- package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
- package/dist/resources/extensions/gsd/process-task-path.js +61 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
- package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
- package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
- package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
- package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
- package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
- package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
- package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
- package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
- package/dist/resources/extensions/gsd/prompts/system.md +65 -107
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
- package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
- package/dist/resources/extensions/gsd/state.js +4 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
- package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +6 -1
- package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
- package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
- package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
- package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
- package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
- package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
- package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
- package/dist/resources/extensions/shared/interview-ui.js +15 -4
- 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 +14 -14
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- 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 +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.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- 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.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +14 -14
- package/dist/web/standalone/.next/server/chunks/167.js +2 -0
- package/dist/web/standalone/.next/server/chunks/6897.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/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/{8336.6f6f30e410419aff.js → 8336.631939fb583761fa.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-0481f1221120a7c6.js} +1 -1
- package/dist/web/standalone/package.json +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/package.json +15 -6
- package/packages/contracts/dist/index.d.ts +3 -0
- package/packages/contracts/dist/index.d.ts.map +1 -0
- package/packages/contracts/dist/index.js +5 -0
- package/packages/contracts/dist/index.js.map +1 -0
- package/packages/contracts/dist/rpc.d.ts +549 -0
- package/packages/contracts/dist/rpc.d.ts.map +1 -0
- package/packages/contracts/dist/rpc.js +53 -0
- package/packages/contracts/dist/rpc.js.map +1 -0
- package/packages/contracts/dist/rpc.test.d.ts +2 -0
- package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
- package/packages/contracts/dist/rpc.test.js +47 -0
- package/packages/contracts/dist/rpc.test.js.map +1 -0
- package/packages/contracts/dist/workflow.d.ts +180 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -0
- package/packages/contracts/dist/workflow.js +201 -0
- package/packages/contracts/dist/workflow.js.map +1 -0
- package/packages/contracts/package.json +39 -0
- package/packages/contracts/src/index.ts +5 -0
- package/packages/contracts/src/rpc.test.ts +72 -0
- package/packages/contracts/src/rpc.ts +286 -0
- package/packages/contracts/src/workflow.ts +213 -0
- package/packages/contracts/tsconfig.json +25 -0
- package/packages/daemon/package.json +3 -2
- package/packages/daemon/src/event-bridge.test.ts +2 -1
- package/packages/daemon/src/event-bridge.ts +1 -1
- package/packages/daemon/src/event-formatter.test.ts +1 -2
- package/packages/daemon/src/event-formatter.ts +1 -2
- package/packages/daemon/src/session-manager.ts +2 -2
- package/packages/daemon/src/types.ts +3 -18
- package/packages/mcp-server/dist/server.d.ts +13 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +77 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +1 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/types.d.ts +3 -11
- package/packages/mcp-server/dist/types.d.ts.map +1 -1
- package/packages/mcp-server/dist/types.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +2 -40
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -2
- package/packages/mcp-server/src/mcp-server.test.ts +138 -0
- package/packages/mcp-server/src/server.ts +99 -1
- package/packages/mcp-server/src/session-manager.ts +2 -2
- package/packages/mcp-server/src/types.ts +7 -18
- package/packages/mcp-server/src/workflow-tools.ts +2 -40
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
- package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/fake-model.js +27 -0
- package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
- package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/index.js +8 -0
- package/packages/pi-ai/dist/models/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
- package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/fake.js +319 -0
- package/packages/pi-ai/dist/providers/fake.js.map +1 -0
- package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
- package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/src/models/fake-model.ts +30 -0
- package/packages/pi-ai/src/models/index.ts +9 -0
- package/packages/pi-ai/src/providers/fake.ts +376 -0
- package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +4 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +8 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
- package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +22 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +26 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +112 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +51 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +8 -8
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +20 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +4 -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 +48 -15
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +40 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -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-state.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +12 -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 +54 -10
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +18 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +27 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
- package/packages/pi-coding-agent/package.json +2 -1
- package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
- package/packages/pi-coding-agent/src/core/settings-manager.ts +12 -0
- package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +37 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +59 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +160 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +8 -8
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +50 -15
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +43 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +75 -9
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +32 -2
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +40 -0
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
- package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
- package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
- package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
- package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/index.d.ts +1 -0
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +2 -0
- package/packages/pi-tui/dist/index.js.map +1 -1
- package/packages/pi-tui/dist/style.d.ts +41 -0
- package/packages/pi-tui/dist/style.d.ts.map +1 -0
- package/packages/pi-tui/dist/style.js +158 -0
- package/packages/pi-tui/dist/style.js.map +1 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +1 -0
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
- package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
- package/packages/pi-tui/src/index.ts +9 -0
- package/packages/pi-tui/src/style.ts +225 -0
- package/packages/pi-tui/src/tui.ts +1 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/README.md +3 -3
- package/packages/rpc-client/dist/index.d.ts +1 -1
- package/packages/rpc-client/dist/index.d.ts.map +1 -1
- package/packages/rpc-client/dist/index.js.map +1 -1
- package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
- package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
- package/packages/rpc-client/dist/rpc-client.js.map +1 -1
- package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
- package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
- package/packages/rpc-client/dist/rpc-types.js +3 -11
- package/packages/rpc-client/dist/rpc-types.js.map +1 -1
- package/packages/rpc-client/package.json +4 -1
- package/packages/rpc-client/src/index.ts +1 -1
- package/packages/rpc-client/src/rpc-client.ts +3 -6
- package/packages/rpc-client/src/rpc-types.ts +3 -398
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +18 -1
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/github-sync/templates.ts +93 -88
- package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
- package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
- package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
- package/src/resources/extensions/gsd/auto/loop.ts +416 -596
- package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
- package/src/resources/extensions/gsd/auto/phases.ts +82 -8
- package/src/resources/extensions/gsd/auto/run-unit.ts +24 -14
- package/src/resources/extensions/gsd/auto/session.ts +11 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
- package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
- package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
- package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
- package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
- package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
- package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
- package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
- package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
- package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
- package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
- package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
- package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +61 -8
- package/src/resources/extensions/gsd/auto-prompts.ts +170 -3
- package/src/resources/extensions/gsd/auto-recovery.ts +67 -53
- package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
- package/src/resources/extensions/gsd/auto-verification.ts +5 -1
- package/src/resources/extensions/gsd/auto-worktree.ts +85 -36
- package/src/resources/extensions/gsd/auto.ts +167 -1
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +30 -2
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +30 -6
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +135 -1
- package/src/resources/extensions/gsd/commands-ship.ts +24 -51
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
- package/src/resources/extensions/gsd/component-loader.ts +5 -11
- package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
- package/src/resources/extensions/gsd/db-adapter.ts +75 -0
- package/src/resources/extensions/gsd/db-base-schema.ts +368 -0
- package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
- package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
- package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
- package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
- package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
- package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
- package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
- package/src/resources/extensions/gsd/db-migration-steps.ts +434 -0
- package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
- package/src/resources/extensions/gsd/db-open-state.ts +47 -0
- package/src/resources/extensions/gsd/db-provider.ts +148 -0
- package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
- package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
- package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
- package/src/resources/extensions/gsd/db-transaction.ts +76 -0
- package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
- package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
- package/src/resources/extensions/gsd/escalation.ts +3 -1
- package/src/resources/extensions/gsd/graph.ts +12 -5
- package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
- package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
- package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
- package/src/resources/extensions/gsd/model-router.ts +10 -6
- package/src/resources/extensions/gsd/notification-widget.ts +25 -4
- package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
- package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
- package/src/resources/extensions/gsd/process-task-path.ts +81 -0
- package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
- package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
- package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
- package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
- package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
- package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
- package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
- package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
- package/src/resources/extensions/gsd/prompts/queue.md +46 -53
- package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
- package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
- package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
- package/src/resources/extensions/gsd/prompts/system.md +65 -107
- package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
- package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
- package/src/resources/extensions/gsd/state.ts +6 -3
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
- package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
- package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
- package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
- package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
- package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
- package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
- package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
- package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
- package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
- package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
- package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
- package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
- package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
- package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
- package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
- package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
- package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +6 -1
- package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
- package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
- package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
- package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
- package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
- package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
- package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
- package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
- package/src/resources/extensions/shared/interview-ui.ts +18 -5
- package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
- package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
- /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → CaMwumvGbBPZrJicfsCzV}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → CaMwumvGbBPZrJicfsCzV}/_ssgManifest.js +0 -0
|
@@ -219,6 +219,169 @@ export async function inlineFileSmart(absPath, relPath, label, query, threshold
|
|
|
219
219
|
const truncated = truncateAtSectionBoundary(content, threshold).content;
|
|
220
220
|
return `### ${label}\nSource: \`${relPath}\`\n\n${truncated}`;
|
|
221
221
|
}
|
|
222
|
+
function inlineCompactTemplate(name, label) {
|
|
223
|
+
const compact = {
|
|
224
|
+
plan: [
|
|
225
|
+
"# {{sliceId}}: {{sliceTitle}}",
|
|
226
|
+
"",
|
|
227
|
+
"**Goal:** {{goal}}",
|
|
228
|
+
"**Demo:** {{demo}}",
|
|
229
|
+
"",
|
|
230
|
+
"## Must-Haves",
|
|
231
|
+
"- {{mustHave}}",
|
|
232
|
+
"",
|
|
233
|
+
"## Threat Surface",
|
|
234
|
+
"- Abuse: {{abuseScenarios}}",
|
|
235
|
+
"- Data exposure: {{sensitiveDataAccessible}}",
|
|
236
|
+
"- Input trust: {{untrustedInput}}",
|
|
237
|
+
"",
|
|
238
|
+
"## Requirement Impact",
|
|
239
|
+
"- Requirements touched: {{requirementIds}}",
|
|
240
|
+
"- Re-verify: {{whatMustBeRetested}}",
|
|
241
|
+
"- Decisions revisited: {{decisionIds}}",
|
|
242
|
+
"",
|
|
243
|
+
"## Proof Level",
|
|
244
|
+
"- This slice proves: {{contract | integration | operational | final-assembly}}",
|
|
245
|
+
"- Real runtime required: {{yes/no}}",
|
|
246
|
+
"- Human/UAT required: {{yes/no}}",
|
|
247
|
+
"",
|
|
248
|
+
"## Verification",
|
|
249
|
+
"- {{testFileOrCommand}}",
|
|
250
|
+
"",
|
|
251
|
+
"## Observability / Diagnostics",
|
|
252
|
+
"- Runtime signals: {{signalOrNone}}",
|
|
253
|
+
"- Inspection surfaces: {{surfaceOrNone}}",
|
|
254
|
+
"- Failure visibility: {{failureSignalOrNone}}",
|
|
255
|
+
"- Redaction constraints: {{secretOrPiiBoundaryOrNone}}",
|
|
256
|
+
"",
|
|
257
|
+
"## Integration Closure",
|
|
258
|
+
"- Upstream surfaces consumed: {{filesModulesContracts}}",
|
|
259
|
+
"- New wiring introduced: {{entrypointOrNone}}",
|
|
260
|
+
"- Remaining end-to-end work: {{listOrNothing}}",
|
|
261
|
+
"",
|
|
262
|
+
"## Tasks",
|
|
263
|
+
"- [ ] **T01: {{taskTitle}}** `est:{{estimate}}`",
|
|
264
|
+
" - Why: {{whyThisTaskExists}}",
|
|
265
|
+
" - Files: `{{filePath}}`",
|
|
266
|
+
" - Do: {{specificImplementationStepsAndConstraints}}",
|
|
267
|
+
" - Verify: {{testCommandOrRuntimeCheck}}",
|
|
268
|
+
" - Done when: {{measurableAcceptanceCondition}}",
|
|
269
|
+
"",
|
|
270
|
+
"## Files Likely Touched",
|
|
271
|
+
"- `{{filePath}}`",
|
|
272
|
+
].join("\n"),
|
|
273
|
+
"task-summary": [
|
|
274
|
+
"---",
|
|
275
|
+
"id: {{taskId}}",
|
|
276
|
+
"parent: {{sliceId}}",
|
|
277
|
+
"milestone: {{milestoneId}}",
|
|
278
|
+
"provides: [{{whatThisTaskProvides}}]",
|
|
279
|
+
"key_files: [{{filePath}}]",
|
|
280
|
+
"key_decisions: [{{decision}}]",
|
|
281
|
+
"patterns_established: [{{pattern}}]",
|
|
282
|
+
"observability_surfaces: [{{diagnosticOrNone}}]",
|
|
283
|
+
"duration: {{duration}}",
|
|
284
|
+
"verification_result: passed",
|
|
285
|
+
"completed_at: {{date}}",
|
|
286
|
+
"blocker_discovered: false",
|
|
287
|
+
"---",
|
|
288
|
+
"",
|
|
289
|
+
"# {{taskId}}: {{taskTitle}}",
|
|
290
|
+
"**{{oneLiner}}**",
|
|
291
|
+
"",
|
|
292
|
+
"## What Happened",
|
|
293
|
+
"{{narrative}}",
|
|
294
|
+
"",
|
|
295
|
+
"## Verification",
|
|
296
|
+
"{{whatWasVerifiedAndHow}}",
|
|
297
|
+
"",
|
|
298
|
+
"## Verification Evidence",
|
|
299
|
+
"| # | Command | Exit Code | Verdict | Duration |",
|
|
300
|
+
"|---|---------|-----------|---------|----------|",
|
|
301
|
+
"| {{row}} | {{command}} | {{exitCode}} | {{verdict}} | {{duration}} |",
|
|
302
|
+
"",
|
|
303
|
+
"## Diagnostics",
|
|
304
|
+
"{{diagnosticsOrNone}}",
|
|
305
|
+
"",
|
|
306
|
+
"## Deviations",
|
|
307
|
+
"{{deviationsFromPlan_OR_none}}",
|
|
308
|
+
"",
|
|
309
|
+
"## Known Issues",
|
|
310
|
+
"{{issuesDiscoveredButNotFixed_OR_none}}",
|
|
311
|
+
"",
|
|
312
|
+
"## Files Created/Modified",
|
|
313
|
+
"- `{{filePath}}` - {{description}}",
|
|
314
|
+
].join("\n"),
|
|
315
|
+
"slice-summary": [
|
|
316
|
+
"---",
|
|
317
|
+
"id: {{sliceId}}",
|
|
318
|
+
"parent: {{milestoneId}}",
|
|
319
|
+
"milestone: {{milestoneId}}",
|
|
320
|
+
"provides: [{{whatThisSliceProvides}}]",
|
|
321
|
+
"requires: []",
|
|
322
|
+
"affects: []",
|
|
323
|
+
"key_files: [{{filePath}}]",
|
|
324
|
+
"key_decisions: [{{decision}}]",
|
|
325
|
+
"patterns_established: [{{pattern}}]",
|
|
326
|
+
"observability_surfaces: [{{diagnosticOrNone}}]",
|
|
327
|
+
"drill_down_paths: [{{pathToTaskSummary}}]",
|
|
328
|
+
"duration: {{duration}}",
|
|
329
|
+
"verification_result: passed",
|
|
330
|
+
"completed_at: {{date}}",
|
|
331
|
+
"---",
|
|
332
|
+
"",
|
|
333
|
+
"# {{sliceId}}: {{sliceTitle}}",
|
|
334
|
+
"**{{oneLiner}}**",
|
|
335
|
+
"",
|
|
336
|
+
"## What Happened",
|
|
337
|
+
"{{narrative}}",
|
|
338
|
+
"",
|
|
339
|
+
"## Verification",
|
|
340
|
+
"{{whatWasVerifiedAcrossAllTasks}}",
|
|
341
|
+
"",
|
|
342
|
+
"## Requirements Advanced",
|
|
343
|
+
"- {{requirementId}} - {{howThisSliceAdvancedIt}}",
|
|
344
|
+
"",
|
|
345
|
+
"## Requirements Validated",
|
|
346
|
+
"- {{requirementId}} - {{whatProofNowMakesItValidated}}",
|
|
347
|
+
"",
|
|
348
|
+
"## New Requirements Surfaced",
|
|
349
|
+
"- {{newRequirementOr_none}}",
|
|
350
|
+
"",
|
|
351
|
+
"## Requirements Invalidated or Re-scoped",
|
|
352
|
+
"- {{requirementIdOr_none}} - {{whatChanged}}",
|
|
353
|
+
"",
|
|
354
|
+
"## Operational Readiness",
|
|
355
|
+
"- Health signal: {{healthSignalOrNA}}",
|
|
356
|
+
"- Failure signal: {{failureSignalOrNA}}",
|
|
357
|
+
"- Recovery: {{recoveryOrNA}}",
|
|
358
|
+
"- Monitoring gaps: {{gapsOrNone}}",
|
|
359
|
+
"",
|
|
360
|
+
"## Deviations",
|
|
361
|
+
"{{deviationsFromPlan_OR_none}}",
|
|
362
|
+
"",
|
|
363
|
+
"## Known Limitations",
|
|
364
|
+
"{{whatDoesntWorkYet_OR_whatWasDeferredToLaterSlices}}",
|
|
365
|
+
"",
|
|
366
|
+
"## Follow-ups",
|
|
367
|
+
"{{workDeferredOrDiscoveredDuringExecution_OR_none}}",
|
|
368
|
+
"",
|
|
369
|
+
"## Files Created/Modified",
|
|
370
|
+
"- `{{filePath}}` - {{description}}",
|
|
371
|
+
"",
|
|
372
|
+
"## Forward Intelligence",
|
|
373
|
+
"### What the next slice should know",
|
|
374
|
+
"- {{insightThatWouldHelpDownstreamWork}}",
|
|
375
|
+
"### What's fragile",
|
|
376
|
+
"- {{fragileAreaOrThinImplementation}} - {{whyItMatters}}",
|
|
377
|
+
"### Authoritative diagnostics",
|
|
378
|
+
"- {{whereAFutureAgentShouldLookFirst}} - {{whyThisSignalIsTrustworthy}}",
|
|
379
|
+
"### What assumptions changed",
|
|
380
|
+
"- {{originalAssumption}} - {{whatActuallyHappened}}",
|
|
381
|
+
].join("\n"),
|
|
382
|
+
};
|
|
383
|
+
return `${compact[name]}\n\n### Output Template: ${label}\nSource: \`templates/${name}.md\``;
|
|
384
|
+
}
|
|
222
385
|
/**
|
|
223
386
|
* Compact slice-summary excerpt for milestone-level closers (#4780).
|
|
224
387
|
*
|
|
@@ -1493,7 +1656,7 @@ async function renderSlicePrompt(options) {
|
|
|
1493
1656
|
const graphBlock = await inlineGraphSubgraph(base, `${sid} ${sTitle}`, { budget: 3000 });
|
|
1494
1657
|
if (graphBlock)
|
|
1495
1658
|
inlined.push(graphBlock);
|
|
1496
|
-
inlined.push(inlineTemplate("plan", "Slice Plan"));
|
|
1659
|
+
inlined.push(level === "minimal" ? inlineCompactTemplate("plan", "Slice Plan") : inlineTemplate("plan", "Slice Plan"));
|
|
1497
1660
|
if (level === "full") {
|
|
1498
1661
|
inlined.push(inlineTemplate("task-plan", "Task Plan"));
|
|
1499
1662
|
}
|
|
@@ -1648,7 +1811,7 @@ export async function buildExecuteTaskPrompt(mid, sid, sTitle, tid, tTitle, base
|
|
|
1648
1811
|
// Knowledge graph: tight subgraph for this task (graceful — skipped if no graph.json)
|
|
1649
1812
|
const graphBlockET = await inlineGraphSubgraph(base, `${tid} ${tTitle}`, { budget: 2000 });
|
|
1650
1813
|
const inlinedTemplates = inlineLevel === "minimal"
|
|
1651
|
-
?
|
|
1814
|
+
? inlineCompactTemplate("task-summary", "Task Summary")
|
|
1652
1815
|
: [
|
|
1653
1816
|
inlineTemplate("task-summary", "Task Summary"),
|
|
1654
1817
|
inlineTemplate("decisions", "Decisions"),
|
|
@@ -1782,7 +1945,9 @@ export async function buildCompleteSlicePrompt(mid, midTitle, sid, sTitle, base,
|
|
|
1782
1945
|
return blocks.length > 0 ? blocks.join("\n\n---\n\n") : null;
|
|
1783
1946
|
}
|
|
1784
1947
|
case "templates": {
|
|
1785
|
-
const parts = [
|
|
1948
|
+
const parts = [inlineLevel === "minimal"
|
|
1949
|
+
? inlineCompactTemplate("slice-summary", "Slice Summary")
|
|
1950
|
+
: inlineTemplate("slice-summary", "Slice Summary")];
|
|
1786
1951
|
if (inlineLevel !== "minimal") {
|
|
1787
1952
|
parts.push(inlineTemplate("uat", "UAT"));
|
|
1788
1953
|
}
|
|
@@ -12,7 +12,7 @@ import { appendEvent } from "./workflow-events.js";
|
|
|
12
12
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
13
13
|
import { clearParseCache } from "./files.js";
|
|
14
14
|
import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
|
|
15
|
-
import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone } from "./gsd-db.js";
|
|
15
|
+
import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone, refreshOpenDatabaseFromDisk } from "./gsd-db.js";
|
|
16
16
|
import { isValidationTerminal } from "./state.js";
|
|
17
17
|
import { getErrorMessage } from "./error-utils.js";
|
|
18
18
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
@@ -120,7 +120,22 @@ export function hasImplementationArtifacts(basePath, milestoneId) {
|
|
|
120
120
|
return "absent";
|
|
121
121
|
return "unknown";
|
|
122
122
|
}
|
|
123
|
-
|
|
123
|
+
const branchClassification = classifyImplementationFiles(changedFiles);
|
|
124
|
+
if (branchClassification === "present")
|
|
125
|
+
return "present";
|
|
126
|
+
// A completing milestone branch can have a non-empty diff containing only
|
|
127
|
+
// .gsd/ closeout files after implementation commits already landed on the
|
|
128
|
+
// recorded integration branch. In that topology, the branch diff alone is
|
|
129
|
+
// insufficient; use the same milestone-tagged evidence fallback as the
|
|
130
|
+
// self-diff retry path before declaring the milestone implementation-free.
|
|
131
|
+
if (milestoneId) {
|
|
132
|
+
const tagged = getChangedFilesFromMilestoneTaggedCommits(basePath, milestoneId);
|
|
133
|
+
if (!tagged.ok)
|
|
134
|
+
return "unknown";
|
|
135
|
+
if (tagged.matched)
|
|
136
|
+
return classifyImplementationFiles(tagged.files);
|
|
137
|
+
}
|
|
138
|
+
return "absent";
|
|
124
139
|
}
|
|
125
140
|
catch (e) {
|
|
126
141
|
// Non-fatal — if git operations fail, return unknown so callers can decide
|
|
@@ -217,7 +232,7 @@ function getChangedFilesFromMilestoneTaggedCommits(basePath, milestoneId) {
|
|
|
217
232
|
]);
|
|
218
233
|
if (!scoped.ok)
|
|
219
234
|
return scoped;
|
|
220
|
-
if (scoped.matched)
|
|
235
|
+
if (scoped.matched && classifyImplementationFiles(scoped.files) === "present")
|
|
221
236
|
return scoped;
|
|
222
237
|
// Fallback (#5033): when .gsd/ is gitignored / external / untracked, the
|
|
223
238
|
// path-scoped scan matches no commits even though GSD-tagged commits
|
|
@@ -228,9 +243,18 @@ function getChangedFilesFromMilestoneTaggedCommits(basePath, milestoneId) {
|
|
|
228
243
|
// Intentionally unbounded — symmetric with the primary scan, and avoids
|
|
229
244
|
// reintroducing the rolling-depth failure class removed in #4699 where
|
|
230
245
|
// milestone evidence aged out behind unrelated activity.
|
|
231
|
-
|
|
246
|
+
const unscoped = scanGsdTaggedCommits(basePath, milestoneId, [
|
|
232
247
|
"log", "--format=%H%x1f%B%x1e", "HEAD",
|
|
233
248
|
]);
|
|
249
|
+
if (!unscoped.ok)
|
|
250
|
+
return scoped.matched ? scoped : unscoped;
|
|
251
|
+
if (!unscoped.matched)
|
|
252
|
+
return scoped;
|
|
253
|
+
return {
|
|
254
|
+
ok: true,
|
|
255
|
+
matched: true,
|
|
256
|
+
files: [...new Set([...scoped.files, ...unscoped.files])],
|
|
257
|
+
};
|
|
234
258
|
}
|
|
235
259
|
function scanGsdTaggedCommits(basePath, milestoneId, gitArgs) {
|
|
236
260
|
try {
|
|
@@ -510,66 +534,32 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
510
534
|
return false;
|
|
511
535
|
}
|
|
512
536
|
}
|
|
513
|
-
// plan-slice
|
|
514
|
-
//
|
|
515
|
-
//
|
|
516
|
-
// unit gets skipped — but deriveState still returns phase:"planning" because the
|
|
517
|
-
// plan has no tasks, creating an infinite skip loop (#699).
|
|
518
|
-
if (unitType === "plan-slice") {
|
|
519
|
-
const planContent = readFileSync(absPath, "utf-8");
|
|
520
|
-
// Accept checkbox-style (- [x] **T01: ...) or heading-style (### T01 -- / ### T01: / ### T01 —)
|
|
521
|
-
const hasCheckboxTask = /^- \[[xX ]\] \*\*T\d+:/m.test(planContent);
|
|
522
|
-
const hasHeadingTask = /^#{2,4}\s+T\d+\s*(?:--|—|:)/m.test(planContent);
|
|
523
|
-
if (!hasCheckboxTask && !hasHeadingTask) {
|
|
524
|
-
logWarning("recovery", `verify-fail ${unitType} ${unitId}: plan has no task checkbox/heading (len=${planContent.length}) at ${absPath}`);
|
|
525
|
-
return false;
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
// execute-task: DB status is authoritative. Fall back to checked-checkbox
|
|
529
|
-
// detection when the DB is unavailable (unmigrated projects), or when the
|
|
530
|
-
// disk artifacts already reflect completion but the DB replay is one beat
|
|
531
|
-
// behind the completion write.
|
|
532
|
-
if (unitType === "execute-task") {
|
|
533
|
-
const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
|
|
534
|
-
if (mid && sid && tid) {
|
|
535
|
-
const dbTask = getTask(mid, sid, tid);
|
|
536
|
-
if (dbTask) {
|
|
537
|
-
if (dbTask.status !== "complete" && dbTask.status !== "done" && !hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) {
|
|
538
|
-
return false;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
else if (!isDbAvailable()) {
|
|
542
|
-
// LEGACY: Pre-migration fallback for projects without DB.
|
|
543
|
-
// Require a CHECKED checkbox — a bare heading or unchecked checkbox
|
|
544
|
-
// does not prove gsd_complete_task ran. Summary file on disk alone
|
|
545
|
-
// is not sufficient evidence (could be a rogue write) (#3607).
|
|
546
|
-
if (!hasCheckedTaskCompletionOnDisk(base, mid, sid, tid))
|
|
547
|
-
return false;
|
|
548
|
-
}
|
|
549
|
-
else {
|
|
550
|
-
// DB available but task row not found — completion tool never ran (#3607)
|
|
551
|
-
return false;
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
// plan-slice must also produce individual task plan files for every task listed
|
|
556
|
-
// in the slice plan. Without this check, a plan-slice that wrote S{sid}-PLAN.md
|
|
557
|
-
// but omitted T{tid}-PLAN.md files would be marked complete, causing execute-task
|
|
558
|
-
// to dispatch with a missing task plan (see issue #739).
|
|
537
|
+
// plan-slice verification is DB-primary. The slice plan is a projection, so
|
|
538
|
+
// DB task rows prove the slice was planned even if the rendered markdown no
|
|
539
|
+
// longer uses legacy checkbox/heading syntax.
|
|
559
540
|
if (unitType === "plan-slice") {
|
|
560
541
|
const { milestone: mid, slice: sid } = parseUnitId(unitId);
|
|
561
542
|
if (mid && sid) {
|
|
562
543
|
try {
|
|
563
|
-
// DB primary path — get task IDs to verify task plan files exist
|
|
564
544
|
let taskIds = null;
|
|
565
545
|
if (isDbAvailable()) {
|
|
566
|
-
const
|
|
567
|
-
if (
|
|
568
|
-
|
|
546
|
+
const refreshed = refreshOpenDatabaseFromDisk();
|
|
547
|
+
if (refreshed) {
|
|
548
|
+
const tasks = getSliceTasks(mid, sid);
|
|
549
|
+
if (tasks.length > 0)
|
|
550
|
+
taskIds = tasks.map(t => t.id);
|
|
551
|
+
}
|
|
569
552
|
}
|
|
570
553
|
if (!taskIds) {
|
|
571
|
-
// LEGACY: DB unavailable or no tasks in DB
|
|
554
|
+
// LEGACY: DB unavailable or no tasks in DB. Require actual task
|
|
555
|
+
// entries so an empty scaffold cannot advance the pipeline (#699).
|
|
572
556
|
const planContent = readFileSync(absPath, "utf-8");
|
|
557
|
+
const hasCheckboxTask = /^\s*- \[[xX ]\] \*\*T\d+:/m.test(planContent);
|
|
558
|
+
const hasHeadingTask = /^\s*#{2,4}\s+T\d+\s*(?:--|—|:)/m.test(planContent);
|
|
559
|
+
if (!hasCheckboxTask && !hasHeadingTask) {
|
|
560
|
+
logWarning("recovery", `verify-fail ${unitType} ${unitId}: plan has no task checkbox/heading (len=${planContent.length}) at ${absPath}`);
|
|
561
|
+
return false;
|
|
562
|
+
}
|
|
573
563
|
const plan = parseLegacyPlan(planContent);
|
|
574
564
|
if (plan.tasks.length > 0)
|
|
575
565
|
taskIds = plan.tasks.map((t) => t.id);
|
|
@@ -595,6 +585,33 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
595
585
|
}
|
|
596
586
|
}
|
|
597
587
|
}
|
|
588
|
+
// execute-task: DB status is authoritative. Fall back to checked-checkbox
|
|
589
|
+
// detection when the DB is unavailable (unmigrated projects), or when the
|
|
590
|
+
// disk artifacts already reflect completion but the DB replay is one beat
|
|
591
|
+
// behind the completion write.
|
|
592
|
+
if (unitType === "execute-task") {
|
|
593
|
+
const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
|
|
594
|
+
if (mid && sid && tid) {
|
|
595
|
+
const dbTask = getTask(mid, sid, tid);
|
|
596
|
+
if (dbTask) {
|
|
597
|
+
if (dbTask.status !== "complete" && dbTask.status !== "done" && !hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) {
|
|
598
|
+
return false;
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
else if (!isDbAvailable()) {
|
|
602
|
+
// LEGACY: Pre-migration fallback for projects without DB.
|
|
603
|
+
// Require a CHECKED checkbox — a bare heading or unchecked checkbox
|
|
604
|
+
// does not prove gsd_complete_task ran. Summary file on disk alone
|
|
605
|
+
// is not sufficient evidence (could be a rogue write) (#3607).
|
|
606
|
+
if (!hasCheckedTaskCompletionOnDisk(base, mid, sid, tid))
|
|
607
|
+
return false;
|
|
608
|
+
}
|
|
609
|
+
else {
|
|
610
|
+
// DB available but task row not found — completion tool never ran (#3607)
|
|
611
|
+
return false;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
598
615
|
// complete-slice: DB status is authoritative for whether the slice is done.
|
|
599
616
|
// Fall back to file-based check (roadmap [x]) when DB is unavailable.
|
|
600
617
|
if (unitType === "complete-slice") {
|
|
@@ -3,11 +3,15 @@ import { AutoSession } from "./auto/session.js";
|
|
|
3
3
|
import { isDeterministicPolicyError, isQueuedUserMessageSkip, isToolInvocationError, markToolEnd as markTrackedToolEnd, markToolStart as markTrackedToolStart, } from "./auto-tool-tracking.js";
|
|
4
4
|
export const autoSession = new AutoSession();
|
|
5
5
|
export function getAutoRuntimeSnapshot() {
|
|
6
|
+
const orchestrationStatus = autoSession.orchestration?.getStatus();
|
|
6
7
|
return {
|
|
7
8
|
active: autoSession.active,
|
|
8
9
|
paused: autoSession.paused,
|
|
9
10
|
currentUnit: autoSession.currentUnit ? { ...autoSession.currentUnit } : null,
|
|
10
11
|
basePath: autoSession.basePath,
|
|
12
|
+
orchestrationPhase: orchestrationStatus?.phase,
|
|
13
|
+
orchestrationTransitionCount: orchestrationStatus?.transitionCount,
|
|
14
|
+
orchestrationLastTransitionAt: orchestrationStatus?.lastTransitionAt,
|
|
11
15
|
};
|
|
12
16
|
}
|
|
13
17
|
export function isAutoActive() {
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Runs typecheck/lint/test checks, captures runtime errors, performs
|
|
5
|
-
* dependency audits, handles auto-fix retry logic, and writes
|
|
6
|
-
* verification evidence JSON.
|
|
7
|
-
*
|
|
8
|
-
* Extracted from the pre-loop agent_end handler in auto.ts. Returns a
|
|
9
|
-
* sentinel value instead of calling return/pauseAuto directly — the
|
|
10
|
-
* caller checks the result and handles control flow.
|
|
11
|
-
*/
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Post-unit verification gate for GSD auto-mode units.
|
|
12
3
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
13
4
|
import { resolveSlicePath, resolveMilestoneFile } from "./paths.js";
|
|
14
5
|
import { parseUnitId } from "./unit-id.js";
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Auto-mode worktree lifecycle, merge, and cleanup management.
|
|
1
3
|
/**
|
|
2
4
|
* GSD Auto-Worktree -- lifecycle management for auto-mode worktrees.
|
|
3
5
|
*
|
|
@@ -6,7 +8,7 @@
|
|
|
6
8
|
* manages create, enter, detect, and teardown for auto-mode worktrees.
|
|
7
9
|
*/
|
|
8
10
|
import { existsSync, cpSync, readFileSync, readdirSync, mkdirSync, realpathSync, rmSync, unlinkSync, statSync, lstatSync as lstatSyncFn, } from "node:fs";
|
|
9
|
-
import { isAbsolute, join, sep as pathSep } from "node:path";
|
|
11
|
+
import { isAbsolute, join, relative, sep as pathSep } from "node:path";
|
|
10
12
|
import { GSDError, GSD_IO_ERROR, GSD_GIT_ERROR } from "./errors.js";
|
|
11
13
|
import { reconcileWorktreeDb, isDbAvailable, getMilestone, getMilestoneSlices, closeDatabase, openDatabase, getDbPath, } from "./gsd-db.js";
|
|
12
14
|
import { execFileSync } from "node:child_process";
|
|
@@ -15,7 +17,8 @@ import { gsdRoot, resolveGsdPathContract } from "./paths.js";
|
|
|
15
17
|
import { createWorktree, removeWorktree, resolveGitDir, worktreePath, isInsideWorktreesDir, } from "./worktree-manager.js";
|
|
16
18
|
import { detectWorktreeName, nudgeGitBranchCache, } from "./worktree.js";
|
|
17
19
|
import { isGsdWorktreePath, normalizeWorktreePathForCompare, resolveWorktreeProjectRoot, } from "./worktree-root.js";
|
|
18
|
-
import { MergeConflictError, readIntegrationBranch, RUNTIME_EXCLUSION_PATHS } from "./git-service.js";
|
|
20
|
+
import { MergeConflictError, createDraftPR, readIntegrationBranch, RUNTIME_EXCLUSION_PATHS } from "./git-service.js";
|
|
21
|
+
import { buildPrEvidence } from "./pr-evidence.js";
|
|
19
22
|
import { debugLog } from "./debug-logger.js";
|
|
20
23
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
21
24
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
@@ -203,6 +206,41 @@ function setActiveWorkspace(ws) {
|
|
|
203
206
|
function getActiveWorkspace() {
|
|
204
207
|
return activeWorkspace;
|
|
205
208
|
}
|
|
209
|
+
function gitPathspecForWorktreePath(basePath, targetPath) {
|
|
210
|
+
let base = basePath;
|
|
211
|
+
let target = targetPath;
|
|
212
|
+
try {
|
|
213
|
+
base = realpathSync.native(basePath);
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
/* keep original */
|
|
217
|
+
void base;
|
|
218
|
+
}
|
|
219
|
+
try {
|
|
220
|
+
target = realpathSync.native(targetPath);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
/* keep original */
|
|
224
|
+
void target;
|
|
225
|
+
}
|
|
226
|
+
const rel = relative(base, target);
|
|
227
|
+
if (rel === "" || rel.startsWith("..") || isAbsolute(rel))
|
|
228
|
+
return null;
|
|
229
|
+
return rel.replaceAll("\\", "/");
|
|
230
|
+
}
|
|
231
|
+
function gitRemoteExists(basePath, remote) {
|
|
232
|
+
try {
|
|
233
|
+
execFileSync("git", ["remote", "get-url", remote], {
|
|
234
|
+
cwd: basePath,
|
|
235
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
236
|
+
encoding: "utf-8",
|
|
237
|
+
});
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
206
244
|
function clearProjectRootStateFiles(basePath, milestoneId) {
|
|
207
245
|
const gsdDir = gsdRoot(basePath);
|
|
208
246
|
// Phase C pt 2: auto.lock removed from this list — the file is gone
|
|
@@ -236,9 +274,12 @@ function clearProjectRootStateFiles(basePath, milestoneId) {
|
|
|
236
274
|
for (const dir of syncedDirs) {
|
|
237
275
|
try {
|
|
238
276
|
if (existsSync(dir)) {
|
|
277
|
+
const pathspec = gitPathspecForWorktreePath(basePath, dir);
|
|
278
|
+
if (!pathspec)
|
|
279
|
+
continue;
|
|
239
280
|
// Only remove files that are untracked by git — tracked files are
|
|
240
281
|
// managed by the branch checkout and should not be deleted.
|
|
241
|
-
const untrackedOutput = execFileSync("git", ["ls-files", "--others", "--exclude-standard",
|
|
282
|
+
const untrackedOutput = execFileSync("git", ["ls-files", "--others", "--exclude-standard", pathspec], { cwd: basePath, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" }).trim();
|
|
242
283
|
if (untrackedOutput) {
|
|
243
284
|
for (const f of untrackedOutput.split("\n").filter(Boolean)) {
|
|
244
285
|
try {
|
|
@@ -1899,17 +1940,19 @@ export function mergeMilestoneToMain(originalBasePath_, milestoneId, roadmapCont
|
|
|
1899
1940
|
let pushed = false;
|
|
1900
1941
|
if (prefs.auto_push === true && prefs.auto_pr !== true && !nothingToCommit) {
|
|
1901
1942
|
const remote = prefs.remote ?? "origin";
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1943
|
+
if (gitRemoteExists(originalBasePath_, remote)) {
|
|
1944
|
+
try {
|
|
1945
|
+
execFileSync("git", ["push", remote, mainBranch], {
|
|
1946
|
+
cwd: originalBasePath_,
|
|
1947
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
1948
|
+
encoding: "utf-8",
|
|
1949
|
+
});
|
|
1950
|
+
pushed = true;
|
|
1951
|
+
}
|
|
1952
|
+
catch (err) {
|
|
1953
|
+
// Push failure is non-fatal
|
|
1954
|
+
logWarning("worktree", `git push failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1955
|
+
}
|
|
1913
1956
|
}
|
|
1914
1957
|
}
|
|
1915
1958
|
// 9b. Auto-create PR if enabled (#2302: no longer gated on pushed/auto_push)
|
|
@@ -1917,30 +1960,36 @@ export function mergeMilestoneToMain(originalBasePath_, milestoneId, roadmapCont
|
|
|
1917
1960
|
if (prefs.auto_pr === true && !nothingToCommit) {
|
|
1918
1961
|
const remote = prefs.remote ?? "origin";
|
|
1919
1962
|
const prTarget = prefs.pr_target_branch ?? mainBranch;
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1963
|
+
if (gitRemoteExists(originalBasePath_, remote)) {
|
|
1964
|
+
try {
|
|
1965
|
+
// Push the milestone branch to remote first
|
|
1966
|
+
execFileSync("git", ["push", remote, milestoneBranch], {
|
|
1967
|
+
cwd: originalBasePath_,
|
|
1968
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
1969
|
+
encoding: "utf-8",
|
|
1970
|
+
});
|
|
1971
|
+
const prEvidence = buildPrEvidence({
|
|
1972
|
+
milestoneId,
|
|
1973
|
+
milestoneTitle,
|
|
1974
|
+
changeType: "feat",
|
|
1975
|
+
summaries: completedSlices.map((slice) => `### ${slice.id}\n${slice.title}`),
|
|
1976
|
+
testsRun: ["Auto-created after milestone merge. Run `npm run verify:pr` before marking this draft ready."],
|
|
1977
|
+
rollbackNotes: ["Close the draft PR or revert the merge commit if review finds a behavior regression."],
|
|
1978
|
+
how: "Generated by git.auto_pr after the milestone branch was pushed and merged locally.",
|
|
1979
|
+
});
|
|
1980
|
+
const prUrl = createDraftPR(originalBasePath_, milestoneId, prEvidence.title, prEvidence.body, {
|
|
1981
|
+
head: milestoneBranch,
|
|
1982
|
+
base: prTarget,
|
|
1983
|
+
});
|
|
1984
|
+
if (!prUrl) {
|
|
1985
|
+
throw new Error("gh pr create returned no URL");
|
|
1986
|
+
}
|
|
1987
|
+
prCreated = true;
|
|
1988
|
+
}
|
|
1989
|
+
catch (err) {
|
|
1990
|
+
// PR creation failure is non-fatal — gh may not be installed or authenticated
|
|
1991
|
+
logWarning("worktree", `PR creation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1992
|
+
}
|
|
1944
1993
|
}
|
|
1945
1994
|
}
|
|
1946
1995
|
// 11. Guard removed — step 9b (#1792) now handles this with a smarter check:
|