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
|
@@ -14,7 +14,7 @@ import { appendEvent } from "./workflow-events.js";
|
|
|
14
14
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
15
15
|
import { clearParseCache } from "./files.js";
|
|
16
16
|
import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
|
|
17
|
-
import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone } from "./gsd-db.js";
|
|
17
|
+
import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone, refreshOpenDatabaseFromDisk } from "./gsd-db.js";
|
|
18
18
|
import { isValidationTerminal } from "./state.js";
|
|
19
19
|
import { getErrorMessage } from "./error-utils.js";
|
|
20
20
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
@@ -155,7 +155,21 @@ export function hasImplementationArtifacts(basePath: string, milestoneId?: strin
|
|
|
155
155
|
return "unknown";
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
const branchClassification = classifyImplementationFiles(changedFiles);
|
|
159
|
+
if (branchClassification === "present") return "present";
|
|
160
|
+
|
|
161
|
+
// A completing milestone branch can have a non-empty diff containing only
|
|
162
|
+
// .gsd/ closeout files after implementation commits already landed on the
|
|
163
|
+
// recorded integration branch. In that topology, the branch diff alone is
|
|
164
|
+
// insufficient; use the same milestone-tagged evidence fallback as the
|
|
165
|
+
// self-diff retry path before declaring the milestone implementation-free.
|
|
166
|
+
if (milestoneId) {
|
|
167
|
+
const tagged = getChangedFilesFromMilestoneTaggedCommits(basePath, milestoneId);
|
|
168
|
+
if (!tagged.ok) return "unknown";
|
|
169
|
+
if (tagged.matched) return classifyImplementationFiles(tagged.files);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return "absent";
|
|
159
173
|
} catch (e) {
|
|
160
174
|
// Non-fatal — if git operations fail, return unknown so callers can decide
|
|
161
175
|
logWarning("recovery", `implementation artifact check failed: ${(e as Error).message}`);
|
|
@@ -263,7 +277,7 @@ function getChangedFilesFromMilestoneTaggedCommits(
|
|
|
263
277
|
"log", "--format=%H%x1f%B%x1e", "HEAD", "--", `.gsd/milestones/${milestoneId}`,
|
|
264
278
|
]);
|
|
265
279
|
if (!scoped.ok) return scoped;
|
|
266
|
-
if (scoped.matched) return scoped;
|
|
280
|
+
if (scoped.matched && classifyImplementationFiles(scoped.files) === "present") return scoped;
|
|
267
281
|
|
|
268
282
|
// Fallback (#5033): when .gsd/ is gitignored / external / untracked, the
|
|
269
283
|
// path-scoped scan matches no commits even though GSD-tagged commits
|
|
@@ -274,9 +288,17 @@ function getChangedFilesFromMilestoneTaggedCommits(
|
|
|
274
288
|
// Intentionally unbounded — symmetric with the primary scan, and avoids
|
|
275
289
|
// reintroducing the rolling-depth failure class removed in #4699 where
|
|
276
290
|
// milestone evidence aged out behind unrelated activity.
|
|
277
|
-
|
|
291
|
+
const unscoped = scanGsdTaggedCommits(basePath, milestoneId, [
|
|
278
292
|
"log", "--format=%H%x1f%B%x1e", "HEAD",
|
|
279
293
|
]);
|
|
294
|
+
if (!unscoped.ok) return scoped.matched ? scoped : unscoped;
|
|
295
|
+
if (!unscoped.matched) return scoped;
|
|
296
|
+
|
|
297
|
+
return {
|
|
298
|
+
ok: true,
|
|
299
|
+
matched: true,
|
|
300
|
+
files: [...new Set([...scoped.files, ...unscoped.files])],
|
|
301
|
+
};
|
|
280
302
|
}
|
|
281
303
|
|
|
282
304
|
function scanGsdTaggedCommits(
|
|
@@ -588,65 +610,32 @@ export function verifyExpectedArtifact(
|
|
|
588
610
|
}
|
|
589
611
|
}
|
|
590
612
|
|
|
591
|
-
// plan-slice
|
|
592
|
-
//
|
|
593
|
-
//
|
|
594
|
-
// unit gets skipped — but deriveState still returns phase:"planning" because the
|
|
595
|
-
// plan has no tasks, creating an infinite skip loop (#699).
|
|
596
|
-
if (unitType === "plan-slice") {
|
|
597
|
-
const planContent = readFileSync(absPath, "utf-8");
|
|
598
|
-
// Accept checkbox-style (- [x] **T01: ...) or heading-style (### T01 -- / ### T01: / ### T01 —)
|
|
599
|
-
const hasCheckboxTask = /^- \[[xX ]\] \*\*T\d+:/m.test(planContent);
|
|
600
|
-
const hasHeadingTask = /^#{2,4}\s+T\d+\s*(?:--|—|:)/m.test(planContent);
|
|
601
|
-
if (!hasCheckboxTask && !hasHeadingTask) {
|
|
602
|
-
logWarning("recovery", `verify-fail ${unitType} ${unitId}: plan has no task checkbox/heading (len=${planContent.length}) at ${absPath}`);
|
|
603
|
-
return false;
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
// execute-task: DB status is authoritative. Fall back to checked-checkbox
|
|
608
|
-
// detection when the DB is unavailable (unmigrated projects), or when the
|
|
609
|
-
// disk artifacts already reflect completion but the DB replay is one beat
|
|
610
|
-
// behind the completion write.
|
|
611
|
-
if (unitType === "execute-task") {
|
|
612
|
-
const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
|
|
613
|
-
if (mid && sid && tid) {
|
|
614
|
-
const dbTask = getTask(mid, sid, tid);
|
|
615
|
-
if (dbTask) {
|
|
616
|
-
if (dbTask.status !== "complete" && dbTask.status !== "done" && !hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) {
|
|
617
|
-
return false;
|
|
618
|
-
}
|
|
619
|
-
} else if (!isDbAvailable()) {
|
|
620
|
-
// LEGACY: Pre-migration fallback for projects without DB.
|
|
621
|
-
// Require a CHECKED checkbox — a bare heading or unchecked checkbox
|
|
622
|
-
// does not prove gsd_complete_task ran. Summary file on disk alone
|
|
623
|
-
// is not sufficient evidence (could be a rogue write) (#3607).
|
|
624
|
-
if (!hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) return false;
|
|
625
|
-
} else {
|
|
626
|
-
// DB available but task row not found — completion tool never ran (#3607)
|
|
627
|
-
return false;
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
// plan-slice must also produce individual task plan files for every task listed
|
|
633
|
-
// in the slice plan. Without this check, a plan-slice that wrote S{sid}-PLAN.md
|
|
634
|
-
// but omitted T{tid}-PLAN.md files would be marked complete, causing execute-task
|
|
635
|
-
// to dispatch with a missing task plan (see issue #739).
|
|
613
|
+
// plan-slice verification is DB-primary. The slice plan is a projection, so
|
|
614
|
+
// DB task rows prove the slice was planned even if the rendered markdown no
|
|
615
|
+
// longer uses legacy checkbox/heading syntax.
|
|
636
616
|
if (unitType === "plan-slice") {
|
|
637
617
|
const { milestone: mid, slice: sid } = parseUnitId(unitId);
|
|
638
618
|
if (mid && sid) {
|
|
639
619
|
try {
|
|
640
|
-
// DB primary path — get task IDs to verify task plan files exist
|
|
641
620
|
let taskIds: string[] | null = null;
|
|
642
621
|
if (isDbAvailable()) {
|
|
643
|
-
const
|
|
644
|
-
if (
|
|
622
|
+
const refreshed = refreshOpenDatabaseFromDisk();
|
|
623
|
+
if (refreshed) {
|
|
624
|
+
const tasks = getSliceTasks(mid, sid);
|
|
625
|
+
if (tasks.length > 0) taskIds = tasks.map(t => t.id);
|
|
626
|
+
}
|
|
645
627
|
}
|
|
646
628
|
|
|
647
629
|
if (!taskIds) {
|
|
648
|
-
// LEGACY: DB unavailable or no tasks in DB
|
|
630
|
+
// LEGACY: DB unavailable or no tasks in DB. Require actual task
|
|
631
|
+
// entries so an empty scaffold cannot advance the pipeline (#699).
|
|
649
632
|
const planContent = readFileSync(absPath, "utf-8");
|
|
633
|
+
const hasCheckboxTask = /^\s*- \[[xX ]\] \*\*T\d+:/m.test(planContent);
|
|
634
|
+
const hasHeadingTask = /^\s*#{2,4}\s+T\d+\s*(?:--|—|:)/m.test(planContent);
|
|
635
|
+
if (!hasCheckboxTask && !hasHeadingTask) {
|
|
636
|
+
logWarning("recovery", `verify-fail ${unitType} ${unitId}: plan has no task checkbox/heading (len=${planContent.length}) at ${absPath}`);
|
|
637
|
+
return false;
|
|
638
|
+
}
|
|
650
639
|
const plan = parseLegacyPlan(planContent);
|
|
651
640
|
if (plan.tasks.length > 0) taskIds = plan.tasks.map((t: { id: string }) => t.id);
|
|
652
641
|
}
|
|
@@ -672,6 +661,31 @@ export function verifyExpectedArtifact(
|
|
|
672
661
|
}
|
|
673
662
|
}
|
|
674
663
|
|
|
664
|
+
// execute-task: DB status is authoritative. Fall back to checked-checkbox
|
|
665
|
+
// detection when the DB is unavailable (unmigrated projects), or when the
|
|
666
|
+
// disk artifacts already reflect completion but the DB replay is one beat
|
|
667
|
+
// behind the completion write.
|
|
668
|
+
if (unitType === "execute-task") {
|
|
669
|
+
const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
|
|
670
|
+
if (mid && sid && tid) {
|
|
671
|
+
const dbTask = getTask(mid, sid, tid);
|
|
672
|
+
if (dbTask) {
|
|
673
|
+
if (dbTask.status !== "complete" && dbTask.status !== "done" && !hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) {
|
|
674
|
+
return false;
|
|
675
|
+
}
|
|
676
|
+
} else if (!isDbAvailable()) {
|
|
677
|
+
// LEGACY: Pre-migration fallback for projects without DB.
|
|
678
|
+
// Require a CHECKED checkbox — a bare heading or unchecked checkbox
|
|
679
|
+
// does not prove gsd_complete_task ran. Summary file on disk alone
|
|
680
|
+
// is not sufficient evidence (could be a rogue write) (#3607).
|
|
681
|
+
if (!hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) return false;
|
|
682
|
+
} else {
|
|
683
|
+
// DB available but task row not found — completion tool never ran (#3607)
|
|
684
|
+
return false;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
|
|
675
689
|
// complete-slice: DB status is authoritative for whether the slice is done.
|
|
676
690
|
// Fall back to file-based check (roadmap [x]) when DB is unavailable.
|
|
677
691
|
if (unitType === "complete-slice") {
|
|
@@ -16,14 +16,21 @@ export type AutoRuntimeSnapshot = {
|
|
|
16
16
|
paused: boolean;
|
|
17
17
|
currentUnit: CurrentUnit | null;
|
|
18
18
|
basePath: string;
|
|
19
|
+
orchestrationPhase?: "idle" | "running" | "paused" | "stopped" | "error";
|
|
20
|
+
orchestrationTransitionCount?: number;
|
|
21
|
+
orchestrationLastTransitionAt?: number;
|
|
19
22
|
};
|
|
20
23
|
|
|
21
24
|
export function getAutoRuntimeSnapshot(): AutoRuntimeSnapshot {
|
|
25
|
+
const orchestrationStatus = autoSession.orchestration?.getStatus();
|
|
22
26
|
return {
|
|
23
27
|
active: autoSession.active,
|
|
24
28
|
paused: autoSession.paused,
|
|
25
29
|
currentUnit: autoSession.currentUnit ? { ...autoSession.currentUnit } : null,
|
|
26
30
|
basePath: autoSession.basePath,
|
|
31
|
+
orchestrationPhase: orchestrationStatus?.phase,
|
|
32
|
+
orchestrationTransitionCount: orchestrationStatus?.transitionCount,
|
|
33
|
+
orchestrationLastTransitionAt: orchestrationStatus?.lastTransitionAt,
|
|
27
34
|
};
|
|
28
35
|
}
|
|
29
36
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Post-unit verification gate for GSD auto-mode units.
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Post-unit verification gate for auto-mode.
|
|
3
6
|
*
|
|
@@ -14,7 +17,8 @@ import type { ExtensionContext, ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
|
14
17
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
15
18
|
import { resolveSliceFile, resolveSlicePath, resolveMilestoneFile } from "./paths.js";
|
|
16
19
|
import { parseUnitId } from "./unit-id.js";
|
|
17
|
-
import { isDbAvailable, getTask, getSliceTasks, getMilestoneSlices
|
|
20
|
+
import { isDbAvailable, getTask, getSliceTasks, getMilestoneSlices } from "./gsd-db.js";
|
|
21
|
+
import type { TaskRow } from "./db-task-slice-rows.js";
|
|
18
22
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
19
23
|
import { extractVerdict } from "./verdict-parser.js";
|
|
20
24
|
import { isClosedStatus } from "./status-guards.js";
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Auto-mode worktree lifecycle, merge, and cleanup management.
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* GSD Auto-Worktree -- lifecycle management for auto-mode worktrees.
|
|
3
6
|
*
|
|
@@ -18,7 +21,7 @@ import {
|
|
|
18
21
|
statSync,
|
|
19
22
|
lstatSync as lstatSyncFn,
|
|
20
23
|
} from "node:fs";
|
|
21
|
-
import { isAbsolute, join, sep as pathSep } from "node:path";
|
|
24
|
+
import { isAbsolute, join, relative, sep as pathSep } from "node:path";
|
|
22
25
|
import { GSDError, GSD_IO_ERROR, GSD_GIT_ERROR } from "./errors.js";
|
|
23
26
|
import {
|
|
24
27
|
reconcileWorktreeDb,
|
|
@@ -50,7 +53,8 @@ import {
|
|
|
50
53
|
normalizeWorktreePathForCompare,
|
|
51
54
|
resolveWorktreeProjectRoot,
|
|
52
55
|
} from "./worktree-root.js";
|
|
53
|
-
import { MergeConflictError, readIntegrationBranch, RUNTIME_EXCLUSION_PATHS } from "./git-service.js";
|
|
56
|
+
import { MergeConflictError, createDraftPR, readIntegrationBranch, RUNTIME_EXCLUSION_PATHS } from "./git-service.js";
|
|
57
|
+
import { buildPrEvidence } from "./pr-evidence.js";
|
|
54
58
|
import { debugLog } from "./debug-logger.js";
|
|
55
59
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
56
60
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
@@ -266,6 +270,40 @@ function getActiveWorkspace(): GsdWorkspace | null {
|
|
|
266
270
|
return activeWorkspace;
|
|
267
271
|
}
|
|
268
272
|
|
|
273
|
+
function gitPathspecForWorktreePath(basePath: string, targetPath: string): string | null {
|
|
274
|
+
let base = basePath;
|
|
275
|
+
let target = targetPath;
|
|
276
|
+
try {
|
|
277
|
+
base = realpathSync.native(basePath);
|
|
278
|
+
} catch {
|
|
279
|
+
/* keep original */
|
|
280
|
+
void base;
|
|
281
|
+
}
|
|
282
|
+
try {
|
|
283
|
+
target = realpathSync.native(targetPath);
|
|
284
|
+
} catch {
|
|
285
|
+
/* keep original */
|
|
286
|
+
void target;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const rel = relative(base, target);
|
|
290
|
+
if (rel === "" || rel.startsWith("..") || isAbsolute(rel)) return null;
|
|
291
|
+
return rel.replaceAll("\\", "/");
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function gitRemoteExists(basePath: string, remote: string): boolean {
|
|
295
|
+
try {
|
|
296
|
+
execFileSync("git", ["remote", "get-url", remote], {
|
|
297
|
+
cwd: basePath,
|
|
298
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
299
|
+
encoding: "utf-8",
|
|
300
|
+
});
|
|
301
|
+
return true;
|
|
302
|
+
} catch {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
269
307
|
function clearProjectRootStateFiles(basePath: string, milestoneId: string): void {
|
|
270
308
|
const gsdDir = gsdRoot(basePath);
|
|
271
309
|
// Phase C pt 2: auto.lock removed from this list — the file is gone
|
|
@@ -301,11 +339,14 @@ function clearProjectRootStateFiles(basePath: string, milestoneId: string): void
|
|
|
301
339
|
for (const dir of syncedDirs) {
|
|
302
340
|
try {
|
|
303
341
|
if (existsSync(dir)) {
|
|
342
|
+
const pathspec = gitPathspecForWorktreePath(basePath, dir);
|
|
343
|
+
if (!pathspec) continue;
|
|
344
|
+
|
|
304
345
|
// Only remove files that are untracked by git — tracked files are
|
|
305
346
|
// managed by the branch checkout and should not be deleted.
|
|
306
347
|
const untrackedOutput = execFileSync(
|
|
307
348
|
"git",
|
|
308
|
-
["ls-files", "--others", "--exclude-standard",
|
|
349
|
+
["ls-files", "--others", "--exclude-standard", pathspec],
|
|
309
350
|
{ cwd: basePath, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" },
|
|
310
351
|
).trim();
|
|
311
352
|
if (untrackedOutput) {
|
|
@@ -2187,16 +2228,18 @@ export function mergeMilestoneToMain(
|
|
|
2187
2228
|
let pushed = false;
|
|
2188
2229
|
if (prefs.auto_push === true && prefs.auto_pr !== true && !nothingToCommit) {
|
|
2189
2230
|
const remote = prefs.remote ?? "origin";
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2231
|
+
if (gitRemoteExists(originalBasePath_, remote)) {
|
|
2232
|
+
try {
|
|
2233
|
+
execFileSync("git", ["push", remote, mainBranch], {
|
|
2234
|
+
cwd: originalBasePath_,
|
|
2235
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
2236
|
+
encoding: "utf-8",
|
|
2237
|
+
});
|
|
2238
|
+
pushed = true;
|
|
2239
|
+
} catch (err) {
|
|
2240
|
+
// Push failure is non-fatal
|
|
2241
|
+
logWarning("worktree", `git push failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2242
|
+
}
|
|
2200
2243
|
}
|
|
2201
2244
|
}
|
|
2202
2245
|
|
|
@@ -2205,29 +2248,35 @@ export function mergeMilestoneToMain(
|
|
|
2205
2248
|
if (prefs.auto_pr === true && !nothingToCommit) {
|
|
2206
2249
|
const remote = prefs.remote ?? "origin";
|
|
2207
2250
|
const prTarget = prefs.pr_target_branch ?? mainBranch;
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2251
|
+
if (gitRemoteExists(originalBasePath_, remote)) {
|
|
2252
|
+
try {
|
|
2253
|
+
// Push the milestone branch to remote first
|
|
2254
|
+
execFileSync("git", ["push", remote, milestoneBranch], {
|
|
2255
|
+
cwd: originalBasePath_,
|
|
2256
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
2257
|
+
encoding: "utf-8",
|
|
2258
|
+
});
|
|
2259
|
+
const prEvidence = buildPrEvidence({
|
|
2260
|
+
milestoneId,
|
|
2261
|
+
milestoneTitle,
|
|
2262
|
+
changeType: "feat",
|
|
2263
|
+
summaries: completedSlices.map((slice) => `### ${slice.id}\n${slice.title}`),
|
|
2264
|
+
testsRun: ["Auto-created after milestone merge. Run `npm run verify:pr` before marking this draft ready."],
|
|
2265
|
+
rollbackNotes: ["Close the draft PR or revert the merge commit if review finds a behavior regression."],
|
|
2266
|
+
how: "Generated by git.auto_pr after the milestone branch was pushed and merged locally.",
|
|
2267
|
+
});
|
|
2268
|
+
const prUrl = createDraftPR(originalBasePath_, milestoneId, prEvidence.title, prEvidence.body, {
|
|
2269
|
+
head: milestoneBranch,
|
|
2270
|
+
base: prTarget,
|
|
2271
|
+
});
|
|
2272
|
+
if (!prUrl) {
|
|
2273
|
+
throw new Error("gh pr create returned no URL");
|
|
2274
|
+
}
|
|
2275
|
+
prCreated = true;
|
|
2276
|
+
} catch (err) {
|
|
2277
|
+
// PR creation failure is non-fatal — gh may not be installed or authenticated
|
|
2278
|
+
logWarning("worktree", `PR creation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2279
|
+
}
|
|
2231
2280
|
}
|
|
2232
2281
|
}
|
|
2233
2282
|
|
|
@@ -147,6 +147,7 @@ import {
|
|
|
147
147
|
MergeConflictError,
|
|
148
148
|
parseSliceBranch,
|
|
149
149
|
setActiveMilestoneId,
|
|
150
|
+
resolveProjectRoot,
|
|
150
151
|
} from "./worktree.js";
|
|
151
152
|
import { GitServiceImpl } from "./git-service.js";
|
|
152
153
|
import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
|
|
@@ -231,6 +232,8 @@ import type { ErrorContext } from "./auto/types.js";
|
|
|
231
232
|
import { runAutoLoopWithUok } from "./uok/kernel.js";
|
|
232
233
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
233
234
|
import { validateDirectory } from "./validate-directory.js";
|
|
235
|
+
import { createAutoOrchestrator } from "./auto/orchestrator.js";
|
|
236
|
+
import type { AutoOrchestrationModule, AutoOrchestratorDeps } from "./auto/contracts.js";
|
|
234
237
|
// Slice-level parallelism (#2340)
|
|
235
238
|
import { getEligibleSlices } from "./slice-parallel-eligibility.js";
|
|
236
239
|
import { startSliceParallel } from "./slice-parallel-orchestrator.js";
|
|
@@ -1208,6 +1211,12 @@ export async function stopAuto(
|
|
|
1208
1211
|
// changes the user made between sessions (#4959 / CodeRabbit).
|
|
1209
1212
|
if (pi) clearToolBaseline(pi);
|
|
1210
1213
|
|
|
1214
|
+
try {
|
|
1215
|
+
await s.orchestration?.stop(reason ?? "stop");
|
|
1216
|
+
} catch (err) {
|
|
1217
|
+
debugLog("stop-orchestration-stop", { error: err instanceof Error ? err.message : String(err) });
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1211
1220
|
// Reset all session state in one call
|
|
1212
1221
|
s.reset();
|
|
1213
1222
|
}
|
|
@@ -1264,6 +1273,7 @@ export async function pauseAuto(
|
|
|
1264
1273
|
activeRunDir: s.activeRunDir,
|
|
1265
1274
|
autoStartTime: s.autoStartTime,
|
|
1266
1275
|
milestoneLock: s.sessionMilestoneLock ?? undefined,
|
|
1276
|
+
pauseReason: _errorContext?.message,
|
|
1267
1277
|
};
|
|
1268
1278
|
setRuntimeKv("global", "", PAUSED_SESSION_KV_KEY, pausedMeta);
|
|
1269
1279
|
} catch (err) {
|
|
@@ -1306,6 +1316,12 @@ export async function pauseAuto(
|
|
|
1306
1316
|
resolveAgentEnd({ messages: [] });
|
|
1307
1317
|
_resetPendingResolve();
|
|
1308
1318
|
|
|
1319
|
+
try {
|
|
1320
|
+
await s.orchestration?.stop("pause");
|
|
1321
|
+
} catch (err) {
|
|
1322
|
+
debugLog("pause-orchestration-stop", { error: err instanceof Error ? err.message : String(err) });
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1309
1325
|
s.active = false;
|
|
1310
1326
|
s.paused = true;
|
|
1311
1327
|
deactivateGSD();
|
|
@@ -1363,6 +1379,141 @@ function buildResolver(): WorktreeResolver {
|
|
|
1363
1379
|
return new WorktreeResolver(s, buildResolverDeps());
|
|
1364
1380
|
}
|
|
1365
1381
|
|
|
1382
|
+
/**
|
|
1383
|
+
* Thin entry glue for the new Auto Orchestration module.
|
|
1384
|
+
*
|
|
1385
|
+
* This intentionally wires only dispatch + error notification today, with
|
|
1386
|
+
* no behavior changes to the existing auto loop. It provides a concrete seam
|
|
1387
|
+
* the next refactor steps can adopt incrementally.
|
|
1388
|
+
*/
|
|
1389
|
+
export function createWiredAutoOrchestrationModule(
|
|
1390
|
+
ctx: ExtensionContext,
|
|
1391
|
+
_pi: ExtensionAPI,
|
|
1392
|
+
dispatchBasePath: string,
|
|
1393
|
+
runtimeBasePath = resolveProjectRoot(dispatchBasePath),
|
|
1394
|
+
): AutoOrchestrationModule {
|
|
1395
|
+
const flowId = `auto-orchestrator-${Date.now()}`;
|
|
1396
|
+
let seq = 0;
|
|
1397
|
+
|
|
1398
|
+
const deps: AutoOrchestratorDeps = {
|
|
1399
|
+
dispatch: {
|
|
1400
|
+
async decideNextUnit() {
|
|
1401
|
+
const state = await deriveState(dispatchBasePath);
|
|
1402
|
+
const active = state.activeMilestone;
|
|
1403
|
+
if (!active) return null;
|
|
1404
|
+
|
|
1405
|
+
const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
|
|
1406
|
+
const action = await resolveDispatch({
|
|
1407
|
+
basePath: dispatchBasePath,
|
|
1408
|
+
mid: active.id,
|
|
1409
|
+
midTitle: active.title,
|
|
1410
|
+
state,
|
|
1411
|
+
prefs,
|
|
1412
|
+
});
|
|
1413
|
+
|
|
1414
|
+
if (action.action !== "dispatch") return null;
|
|
1415
|
+
return {
|
|
1416
|
+
unitType: action.unitType,
|
|
1417
|
+
unitId: action.unitId,
|
|
1418
|
+
reason: action.matchedRule ?? "dispatch",
|
|
1419
|
+
preconditions: [],
|
|
1420
|
+
};
|
|
1421
|
+
},
|
|
1422
|
+
},
|
|
1423
|
+
recovery: {
|
|
1424
|
+
async classifyAndRecover(input) {
|
|
1425
|
+
const reason = input.error instanceof Error ? input.error.message : String(input.error ?? "unknown auto error");
|
|
1426
|
+
return { action: "escalate" as const, reason };
|
|
1427
|
+
},
|
|
1428
|
+
},
|
|
1429
|
+
worktree: {
|
|
1430
|
+
async prepareForUnit() {},
|
|
1431
|
+
async syncAfterUnit() {},
|
|
1432
|
+
async cleanupOnStop() {},
|
|
1433
|
+
},
|
|
1434
|
+
health: {
|
|
1435
|
+
async preAdvanceGate() {
|
|
1436
|
+
const gate = await preDispatchHealthGate(dispatchBasePath);
|
|
1437
|
+
return {
|
|
1438
|
+
allow: gate.proceed,
|
|
1439
|
+
reason: gate.reason,
|
|
1440
|
+
};
|
|
1441
|
+
},
|
|
1442
|
+
async postAdvanceRecord(result) {
|
|
1443
|
+
if (result.kind === "error") {
|
|
1444
|
+
recordHealthSnapshot(1, 0, 0, [{
|
|
1445
|
+
code: "orchestration-error",
|
|
1446
|
+
message: result.reason ?? "orchestration error",
|
|
1447
|
+
severity: "error",
|
|
1448
|
+
unitId: "orchestration",
|
|
1449
|
+
}], [], "orchestration");
|
|
1450
|
+
} else if (result.kind === "blocked") {
|
|
1451
|
+
recordHealthSnapshot(0, 1, 0, [{
|
|
1452
|
+
code: "orchestration-blocked",
|
|
1453
|
+
message: result.reason ?? "orchestration blocked",
|
|
1454
|
+
severity: "warning",
|
|
1455
|
+
unitId: "orchestration",
|
|
1456
|
+
}], [], "orchestration");
|
|
1457
|
+
}
|
|
1458
|
+
},
|
|
1459
|
+
},
|
|
1460
|
+
runtime: {
|
|
1461
|
+
async ensureLockOwnership() {
|
|
1462
|
+
const status = getSessionLockStatus(runtimeBasePath);
|
|
1463
|
+
if (!status.valid || status.failureReason === "pid-mismatch") {
|
|
1464
|
+
throw new Error("session lock held by another process");
|
|
1465
|
+
}
|
|
1466
|
+
},
|
|
1467
|
+
async journalTransition(event) {
|
|
1468
|
+
const eventType = event.name === "start"
|
|
1469
|
+
? "iteration-start"
|
|
1470
|
+
: event.name === "resume"
|
|
1471
|
+
? "iteration-start"
|
|
1472
|
+
: event.name === "advance"
|
|
1473
|
+
? "dispatch-match"
|
|
1474
|
+
: event.name === "advance-blocked"
|
|
1475
|
+
? "guard-block"
|
|
1476
|
+
: event.name === "advance-stopped"
|
|
1477
|
+
? "dispatch-stop"
|
|
1478
|
+
: event.name === "advance-error"
|
|
1479
|
+
? "iteration-end"
|
|
1480
|
+
: event.name === "advance-paused" || event.name === "advance-retry"
|
|
1481
|
+
? "guard-block"
|
|
1482
|
+
: event.name === "stop"
|
|
1483
|
+
? "terminal"
|
|
1484
|
+
: "iteration-end";
|
|
1485
|
+
|
|
1486
|
+
_emitJournalEvent(runtimeBasePath, {
|
|
1487
|
+
ts: new Date().toISOString(),
|
|
1488
|
+
flowId,
|
|
1489
|
+
seq: ++seq,
|
|
1490
|
+
eventType,
|
|
1491
|
+
data: {
|
|
1492
|
+
source: "auto-orchestrator",
|
|
1493
|
+
name: event.name,
|
|
1494
|
+
reason: event.reason,
|
|
1495
|
+
unitType: event.unitType,
|
|
1496
|
+
unitId: event.unitId,
|
|
1497
|
+
},
|
|
1498
|
+
});
|
|
1499
|
+
},
|
|
1500
|
+
},
|
|
1501
|
+
notifications: {
|
|
1502
|
+
async notifyLifecycle(event) {
|
|
1503
|
+
if (event.name === "error") {
|
|
1504
|
+
ctx.ui.notify(event.detail ?? "auto orchestration error", "error");
|
|
1505
|
+
}
|
|
1506
|
+
},
|
|
1507
|
+
},
|
|
1508
|
+
};
|
|
1509
|
+
|
|
1510
|
+
return createAutoOrchestrator(deps);
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
function ensureOrchestrationModule(ctx: ExtensionContext, pi: ExtensionAPI, basePath: string): void {
|
|
1514
|
+
s.orchestration = createWiredAutoOrchestrationModule(ctx, pi, basePath, lockBase());
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1366
1517
|
/**
|
|
1367
1518
|
* Build the LoopDeps object from auto.ts private scope.
|
|
1368
1519
|
* This bundles all private functions that autoLoop needs without exporting them.
|
|
@@ -1785,6 +1936,7 @@ export async function startAuto(
|
|
|
1785
1936
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1786
1937
|
}
|
|
1787
1938
|
|
|
1939
|
+
ensureOrchestrationModule(ctx, pi, s.basePath || base);
|
|
1788
1940
|
registerSigtermHandler(lockBase());
|
|
1789
1941
|
|
|
1790
1942
|
ctx.ui.setStatus("gsd-auto", s.stepMode ? "next" : "auto");
|
|
@@ -1868,6 +2020,11 @@ export async function startAuto(
|
|
|
1868
2020
|
}
|
|
1869
2021
|
pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: s.stepMode ? "Step-mode resumed." : "Auto-mode resumed.", level: "progress" });
|
|
1870
2022
|
|
|
2023
|
+
try {
|
|
2024
|
+
await s.orchestration?.resume();
|
|
2025
|
+
} catch (err) {
|
|
2026
|
+
debugLog("resume-orchestration-resume", { error: err instanceof Error ? err.message : String(err) });
|
|
2027
|
+
}
|
|
1871
2028
|
startAutoCommandPolling(s.basePath);
|
|
1872
2029
|
await runAutoLoopWithUok({
|
|
1873
2030
|
ctx,
|
|
@@ -1904,7 +2061,7 @@ export async function startAuto(
|
|
|
1904
2061
|
// Build scope after bootstrap has populated s.basePath / s.originalBasePath /
|
|
1905
2062
|
// s.currentMilestoneId (including worktree setup inside bootstrapAutoSession).
|
|
1906
2063
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1907
|
-
|
|
2064
|
+
ensureOrchestrationModule(ctx, pi, s.basePath || base);
|
|
1908
2065
|
captureProjectRootEnv(s.originalBasePath || s.basePath);
|
|
1909
2066
|
registerAutoWorkerForSession(s);
|
|
1910
2067
|
try {
|
|
@@ -1915,6 +2072,12 @@ export async function startAuto(
|
|
|
1915
2072
|
}
|
|
1916
2073
|
pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: requestedStepMode ? "Step-mode started." : "Auto-mode started.", level: "progress" });
|
|
1917
2074
|
|
|
2075
|
+
try {
|
|
2076
|
+
await s.orchestration?.start({ basePath: s.basePath, trigger: "auto-loop" });
|
|
2077
|
+
} catch (err) {
|
|
2078
|
+
debugLog("start-orchestration-start", { error: err instanceof Error ? err.message : String(err) });
|
|
2079
|
+
}
|
|
2080
|
+
|
|
1918
2081
|
startAutoCommandPolling(s.basePath);
|
|
1919
2082
|
|
|
1920
2083
|
// Dispatch the first unit
|
|
@@ -2037,6 +2200,9 @@ export async function dispatchHookUnit(
|
|
|
2037
2200
|
}
|
|
2038
2201
|
|
|
2039
2202
|
s.basePath = targetBasePath;
|
|
2203
|
+
if (!s.orchestration) {
|
|
2204
|
+
ensureOrchestrationModule(ctx, pi, s.basePath);
|
|
2205
|
+
}
|
|
2040
2206
|
|
|
2041
2207
|
const hookUnitType = `hook/${hookName}`;
|
|
2042
2208
|
const hookStartedAt = Date.now();
|