gsd-pi 2.79.0-dev.ece5fd8ba → 2.80.0-dev.96f4d89d5
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 +45 -52
- 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 +11 -5
- 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 +12 -12
- 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 +12 -12
- 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 +42 -50
- 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 +13 -5
- 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-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/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 → y7d--cnc6Cibuva-Lzzw_}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → y7d--cnc6Cibuva-Lzzw_}/_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";
|
|
@@ -588,65 +588,32 @@ export function verifyExpectedArtifact(
|
|
|
588
588
|
}
|
|
589
589
|
}
|
|
590
590
|
|
|
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).
|
|
591
|
+
// plan-slice verification is DB-primary. The slice plan is a projection, so
|
|
592
|
+
// DB task rows prove the slice was planned even if the rendered markdown no
|
|
593
|
+
// longer uses legacy checkbox/heading syntax.
|
|
636
594
|
if (unitType === "plan-slice") {
|
|
637
595
|
const { milestone: mid, slice: sid } = parseUnitId(unitId);
|
|
638
596
|
if (mid && sid) {
|
|
639
597
|
try {
|
|
640
|
-
// DB primary path — get task IDs to verify task plan files exist
|
|
641
598
|
let taskIds: string[] | null = null;
|
|
642
599
|
if (isDbAvailable()) {
|
|
643
|
-
const
|
|
644
|
-
if (
|
|
600
|
+
const refreshed = refreshOpenDatabaseFromDisk();
|
|
601
|
+
if (refreshed) {
|
|
602
|
+
const tasks = getSliceTasks(mid, sid);
|
|
603
|
+
if (tasks.length > 0) taskIds = tasks.map(t => t.id);
|
|
604
|
+
}
|
|
645
605
|
}
|
|
646
606
|
|
|
647
607
|
if (!taskIds) {
|
|
648
|
-
// LEGACY: DB unavailable or no tasks in DB
|
|
608
|
+
// LEGACY: DB unavailable or no tasks in DB. Require actual task
|
|
609
|
+
// entries so an empty scaffold cannot advance the pipeline (#699).
|
|
649
610
|
const planContent = readFileSync(absPath, "utf-8");
|
|
611
|
+
const hasCheckboxTask = /^\s*- \[[xX ]\] \*\*T\d+:/m.test(planContent);
|
|
612
|
+
const hasHeadingTask = /^\s*#{2,4}\s+T\d+\s*(?:--|—|:)/m.test(planContent);
|
|
613
|
+
if (!hasCheckboxTask && !hasHeadingTask) {
|
|
614
|
+
logWarning("recovery", `verify-fail ${unitType} ${unitId}: plan has no task checkbox/heading (len=${planContent.length}) at ${absPath}`);
|
|
615
|
+
return false;
|
|
616
|
+
}
|
|
650
617
|
const plan = parseLegacyPlan(planContent);
|
|
651
618
|
if (plan.tasks.length > 0) taskIds = plan.tasks.map((t: { id: string }) => t.id);
|
|
652
619
|
}
|
|
@@ -672,6 +639,31 @@ export function verifyExpectedArtifact(
|
|
|
672
639
|
}
|
|
673
640
|
}
|
|
674
641
|
|
|
642
|
+
// execute-task: DB status is authoritative. Fall back to checked-checkbox
|
|
643
|
+
// detection when the DB is unavailable (unmigrated projects), or when the
|
|
644
|
+
// disk artifacts already reflect completion but the DB replay is one beat
|
|
645
|
+
// behind the completion write.
|
|
646
|
+
if (unitType === "execute-task") {
|
|
647
|
+
const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
|
|
648
|
+
if (mid && sid && tid) {
|
|
649
|
+
const dbTask = getTask(mid, sid, tid);
|
|
650
|
+
if (dbTask) {
|
|
651
|
+
if (dbTask.status !== "complete" && dbTask.status !== "done" && !hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) {
|
|
652
|
+
return false;
|
|
653
|
+
}
|
|
654
|
+
} else if (!isDbAvailable()) {
|
|
655
|
+
// LEGACY: Pre-migration fallback for projects without DB.
|
|
656
|
+
// Require a CHECKED checkbox — a bare heading or unchecked checkbox
|
|
657
|
+
// does not prove gsd_complete_task ran. Summary file on disk alone
|
|
658
|
+
// is not sufficient evidence (could be a rogue write) (#3607).
|
|
659
|
+
if (!hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) return false;
|
|
660
|
+
} else {
|
|
661
|
+
// DB available but task row not found — completion tool never ran (#3607)
|
|
662
|
+
return false;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
|
|
675
667
|
// complete-slice: DB status is authoritative for whether the slice is done.
|
|
676
668
|
// Fall back to file-based check (roadmap [x]) when DB is unavailable.
|
|
677
669
|
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();
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// GSD-2 + src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts - Handles provider and agent-end recovery for GSD auto-mode.
|
|
2
|
+
|
|
1
3
|
import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
|
|
2
4
|
|
|
3
5
|
import { logWarning } from "../workflow-logger.js";
|
|
@@ -12,7 +14,7 @@ import { clearPathCache } from "../paths.js";
|
|
|
12
14
|
import { getAutoDashboardData, getAutoModeStartModel, isAutoActive, pauseAuto, setCurrentDispatchedModelId } from "../auto.js";
|
|
13
15
|
import { getNextFallbackModel, resolveModelWithFallbacksForUnit } from "../preferences.js";
|
|
14
16
|
import { pauseAutoForProviderError } from "../provider-error-pause.js";
|
|
15
|
-
import { isSessionSwitchInFlight, resolveAgentEnd } from "../auto/resolve.js";
|
|
17
|
+
import { isSessionSwitchInFlight, resolveAgentEnd, resolveAgentEndCancelled } from "../auto/resolve.js";
|
|
16
18
|
import { resolveModelId } from "../auto-model-selection.js";
|
|
17
19
|
import { resolveProjectRoot } from "../worktree.js";
|
|
18
20
|
import { clearDiscussionFlowState } from "./write-gate.js";
|
|
@@ -56,6 +58,24 @@ function resolveAgentEndBasePath(): string | undefined {
|
|
|
56
58
|
}
|
|
57
59
|
}
|
|
58
60
|
|
|
61
|
+
export function _buildAbortedPauseContext(lastMsg: { errorMessage?: unknown }): {
|
|
62
|
+
message: string;
|
|
63
|
+
category: "aborted";
|
|
64
|
+
isTransient: true;
|
|
65
|
+
} {
|
|
66
|
+
const hasErrorMessage = Object.prototype.hasOwnProperty.call(lastMsg, "errorMessage") && !!lastMsg.errorMessage;
|
|
67
|
+
return {
|
|
68
|
+
message: hasErrorMessage ? String(lastMsg.errorMessage) : "Operation aborted",
|
|
69
|
+
category: "aborted",
|
|
70
|
+
isTransient: true,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function isUserInitiatedAbortMessage(message: string | undefined | null): boolean {
|
|
75
|
+
if (!message) return false;
|
|
76
|
+
return /\b(?:claude code process aborted by user|request aborted by user|process aborted by user)\b/i.test(message);
|
|
77
|
+
}
|
|
78
|
+
|
|
59
79
|
async function pauseTransientWithBackoff(
|
|
60
80
|
cls: ErrorClass,
|
|
61
81
|
pi: ExtensionAPI,
|
|
@@ -159,7 +179,7 @@ export async function handleAgentEnd(
|
|
|
159
179
|
return;
|
|
160
180
|
}
|
|
161
181
|
|
|
162
|
-
await pauseAuto(ctx, pi);
|
|
182
|
+
await pauseAuto(ctx, pi, _buildAbortedPauseContext(lastMsg as { errorMessage?: unknown }));
|
|
163
183
|
return;
|
|
164
184
|
}
|
|
165
185
|
if (lastMsg && "stopReason" in lastMsg && lastMsg.stopReason === "error") {
|
|
@@ -167,6 +187,14 @@ export async function handleAgentEnd(
|
|
|
167
187
|
// is in the assistant message text content. Fall back to content when
|
|
168
188
|
// errorMessage looks uninformative.
|
|
169
189
|
const rawErrorMsg = ("errorMessage" in lastMsg && lastMsg.errorMessage) ? String(lastMsg.errorMessage) : "";
|
|
190
|
+
if (isUserInitiatedAbortMessage(rawErrorMsg)) {
|
|
191
|
+
resolveAgentEndCancelled({
|
|
192
|
+
message: rawErrorMsg,
|
|
193
|
+
category: "aborted",
|
|
194
|
+
isTransient: false,
|
|
195
|
+
});
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
170
198
|
const isUseless = !rawErrorMsg || /^(success|ok|true|error|unknown)$/i.test(rawErrorMsg.trim());
|
|
171
199
|
// #3588: When errorMessage is uninformative, extract the real error from
|
|
172
200
|
// the assistant message text content for display purposes only.
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Registers DB-backed GSD workflow tools and compatibility aliases.
|
|
1
3
|
import { Type } from "@sinclair/typebox";
|
|
2
4
|
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
3
5
|
import { Text } from "@gsd/pi-tui";
|
|
@@ -8,6 +10,7 @@ import { loadWriteGateSnapshot, shouldBlockRootArtifactSaveInSnapshot } from "./
|
|
|
8
10
|
import { StringEnum } from "@gsd/pi-ai";
|
|
9
11
|
import { logError } from "../workflow-logger.js";
|
|
10
12
|
import { getErrorMessage } from "../error-utils.js";
|
|
13
|
+
import { incrementLegacyTelemetry } from "../legacy-telemetry.js";
|
|
11
14
|
|
|
12
15
|
async function loadWorkflowExecutors(): Promise<typeof import("../tools/workflow-tool-executors.js")> {
|
|
13
16
|
return import("../tools/workflow-tool-executors.js");
|
|
@@ -19,11 +22,19 @@ async function loadWorkflowExecutors(): Promise<typeof import("../tools/workflow
|
|
|
19
22
|
*/
|
|
20
23
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- toolDef shape matches ToolDefinition but typing it fully requires generics
|
|
21
24
|
function registerAlias(pi: ExtensionAPI, toolDef: any, aliasName: string, canonicalName: string): void {
|
|
25
|
+
const execute = typeof toolDef.execute === "function"
|
|
26
|
+
? async (...args: any[]) => {
|
|
27
|
+
incrementLegacyTelemetry("legacy.mcpAliasUsed");
|
|
28
|
+
return toolDef.execute(...args);
|
|
29
|
+
}
|
|
30
|
+
: toolDef.execute;
|
|
31
|
+
|
|
22
32
|
pi.registerTool({
|
|
23
33
|
...toolDef,
|
|
24
34
|
name: aliasName,
|
|
25
35
|
description: toolDef.description + ` (alias for ${canonicalName} — prefer the canonical name)`,
|
|
26
36
|
promptGuidelines: [`Alias for ${canonicalName} — prefer the canonical name.`],
|
|
37
|
+
execute,
|
|
27
38
|
});
|
|
28
39
|
}
|
|
29
40
|
|