gsd-pi 2.79.0-dev.ece5fd8ba → 2.80.0-dev.4ea7d80e7
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-dispatch.js +10 -0
- package/dist/resources/extensions/gsd/auto-prompts.js +168 -3
- package/dist/resources/extensions/gsd/auto-recovery.js +198 -59
- package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
- package/dist/resources/extensions/gsd/auto-start.js +2 -3
- 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 +168 -3
- 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-extract-learnings.js +17 -12
- 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 +351 -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 +410 -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 +316 -1520
- package/dist/resources/extensions/gsd/guided-flow.js +2 -2
- 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 +18 -7
- 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/chat-controller-ordering.test.js +74 -0
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +14 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +97 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +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__/chat-frame-compaction-tone.test.js +6 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +67 -14
- 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/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +10 -9
- 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 +27 -6
- 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 +16 -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 +112 -18
- 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 +60 -1
- 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/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +36 -27
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.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 +48 -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/chat-controller-ordering.test.ts +87 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +108 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +16 -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__/chat-frame-compaction-tone.test.ts +7 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +100 -16
- 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/assistant-message.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +10 -9
- 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 +41 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +124 -18
- 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 +75 -1
- 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/theme/themes.ts +36 -27
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +65 -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/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +36 -27
- package/pkg/dist/modes/interactive/theme/themes.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-dispatch.ts +17 -0
- package/src/resources/extensions/gsd/auto-prompts.ts +170 -3
- package/src/resources/extensions/gsd/auto-recovery.ts +194 -56
- package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
- package/src/resources/extensions/gsd/auto-start.ts +7 -6
- 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 +179 -2
- 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-extract-learnings.ts +17 -12
- 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 +383 -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 +451 -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 +379 -1660
- package/src/resources/extensions/gsd/guided-flow.ts +2 -2
- 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 +170 -1
- 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-extract-learnings.test.ts +9 -0
- 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 +139 -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/has-pending-deep-stage.test.ts +33 -1
- 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/start-auto-detached.test.ts +46 -2
- 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/uok-plan-v2-wiring.test.ts +1 -1
- 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 → vIAZSyxIuvqNkCvXt9oqb}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → vIAZSyxIuvqNkCvXt9oqb}/_ssgManifest.js +0 -0
|
@@ -2064,8 +2064,8 @@ export async function showSmartEntry(
|
|
|
2064
2064
|
// standard wizard below.
|
|
2065
2065
|
{
|
|
2066
2066
|
const prefs = loadEffectiveGSDPreferences(basePath)?.preferences;
|
|
2067
|
-
const {
|
|
2068
|
-
if (
|
|
2067
|
+
const { shouldRunDeepProjectSetup } = await import("./auto-dispatch.js");
|
|
2068
|
+
if (shouldRunDeepProjectSetup(state, prefs, basePath)) {
|
|
2069
2069
|
await startDeepProjectSetupForeground(ctx, pi, basePath, stepMode);
|
|
2070
2070
|
return;
|
|
2071
2071
|
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Runtime counters for telemetry-gated legacy compatibility paths.
|
|
3
|
+
|
|
4
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
5
|
+
import { dirname } from "node:path";
|
|
6
|
+
|
|
7
|
+
import { logWarning } from "./workflow-logger.js";
|
|
8
|
+
|
|
9
|
+
export type LegacyTelemetryCounter =
|
|
10
|
+
| "legacy.markdownFallbackUsed"
|
|
11
|
+
| "legacy.workflowEngineUsed"
|
|
12
|
+
| "legacy.uokFallbackUsed"
|
|
13
|
+
| "legacy.mcpAliasUsed"
|
|
14
|
+
| "legacy.componentFormatUsed"
|
|
15
|
+
| "legacy.providerDefaultUsed";
|
|
16
|
+
|
|
17
|
+
export type LegacyTelemetrySnapshot = Record<LegacyTelemetryCounter, number>;
|
|
18
|
+
|
|
19
|
+
export interface LegacyTelemetryReport {
|
|
20
|
+
ts: string;
|
|
21
|
+
counters: LegacyTelemetrySnapshot;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const COUNTERS: LegacyTelemetryCounter[] = [
|
|
25
|
+
"legacy.markdownFallbackUsed",
|
|
26
|
+
"legacy.workflowEngineUsed",
|
|
27
|
+
"legacy.uokFallbackUsed",
|
|
28
|
+
"legacy.mcpAliasUsed",
|
|
29
|
+
"legacy.componentFormatUsed",
|
|
30
|
+
"legacy.providerDefaultUsed",
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const values: LegacyTelemetrySnapshot = Object.fromEntries(
|
|
34
|
+
COUNTERS.map((counter) => [counter, 0]),
|
|
35
|
+
) as LegacyTelemetrySnapshot;
|
|
36
|
+
|
|
37
|
+
const warnedCounters = new Set<LegacyTelemetryCounter>();
|
|
38
|
+
|
|
39
|
+
const DIAGNOSTICS: Record<LegacyTelemetryCounter, string> = {
|
|
40
|
+
"legacy.markdownFallbackUsed": "Deprecated markdown state fallback used; migrate projects to DB-authoritative state before removing markdown derivation.",
|
|
41
|
+
"legacy.workflowEngineUsed": "Deprecated workflow engine path used; prefer auto-milestone workflow templates before removing legacy engines.",
|
|
42
|
+
"legacy.uokFallbackUsed": "Deprecated UOK fallback path used; resolve UOK kernel blockers before removing parity fallback wrappers.",
|
|
43
|
+
"legacy.mcpAliasUsed": "Deprecated MCP alias tool used; update callers to the canonical gsd_* tool name before alias removal.",
|
|
44
|
+
"legacy.componentFormatUsed": "Deprecated component format loaded; migrate skills/agents to component.yaml before removing legacy loaders.",
|
|
45
|
+
"legacy.providerDefaultUsed": "Provider-specific default fallback used without an explicit available model; configure provider-aware model preferences before removing defaults.",
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
process.once("beforeExit", persistLegacyTelemetry);
|
|
49
|
+
|
|
50
|
+
export function incrementLegacyTelemetry(counter: LegacyTelemetryCounter, amount = 1): void {
|
|
51
|
+
if (!Number.isFinite(amount) || amount <= 0) return;
|
|
52
|
+
values[counter] += amount;
|
|
53
|
+
emitLegacyDiagnostic(counter);
|
|
54
|
+
persistLegacyTelemetry();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function getLegacyTelemetry(): LegacyTelemetrySnapshot {
|
|
58
|
+
return { ...values };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function resetLegacyTelemetry(): void {
|
|
62
|
+
for (const counter of COUNTERS) {
|
|
63
|
+
values[counter] = 0;
|
|
64
|
+
}
|
|
65
|
+
warnedCounters.clear();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function listLegacyTelemetryCounters(): LegacyTelemetryCounter[] {
|
|
69
|
+
return [...COUNTERS];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function getLegacyTelemetryReport(): LegacyTelemetryReport {
|
|
73
|
+
return {
|
|
74
|
+
ts: new Date().toISOString(),
|
|
75
|
+
counters: getLegacyTelemetry(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function persistLegacyTelemetrySnapshot(): void {
|
|
80
|
+
persistLegacyTelemetry();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function emitLegacyDiagnostic(counter: LegacyTelemetryCounter): void {
|
|
84
|
+
if (warnedCounters.has(counter)) return;
|
|
85
|
+
warnedCounters.add(counter);
|
|
86
|
+
logWarning("migration", DIAGNOSTICS[counter], { counter });
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function persistLegacyTelemetry(): void {
|
|
90
|
+
const outputPath = process.env.GSD_LEGACY_TELEMETRY_FILE?.trim();
|
|
91
|
+
if (!outputPath) return;
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
mkdirSync(dirname(outputPath), { recursive: true });
|
|
95
|
+
writeFileSync(outputPath, `${JSON.stringify(getLegacyTelemetryReport(), null, 2)}\n`, "utf-8");
|
|
96
|
+
} catch {
|
|
97
|
+
// Legacy cleanup telemetry must never block runtime paths.
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Markdown projection renderer for GSD workflow database rows.
|
|
1
3
|
// GSD Markdown Renderer — DB → Markdown file generation
|
|
2
4
|
//
|
|
3
5
|
// Transforms DB state into correct markdown files on disk.
|
|
@@ -23,7 +25,8 @@ import {
|
|
|
23
25
|
insertArtifact,
|
|
24
26
|
getGateResults,
|
|
25
27
|
} from "./gsd-db.js";
|
|
26
|
-
import type { MilestoneRow,
|
|
28
|
+
import type { MilestoneRow, ArtifactRow } from "./db-milestone-artifact-rows.js";
|
|
29
|
+
import type { SliceRow, TaskRow } from "./db-task-slice-rows.js";
|
|
27
30
|
import type { GateRow } from "./types.js";
|
|
28
31
|
import {
|
|
29
32
|
resolveMilestoneFile,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
// GSD
|
|
2
|
-
//
|
|
3
|
-
// The user's configured model is always the ceiling.
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Routes work to appropriate models while preserving configured ceilings.
|
|
4
3
|
|
|
5
4
|
import type { ComplexityTier, ClassificationResult, TaskMetadata } from "./complexity-classifier.js";
|
|
6
5
|
import { tierOrdinal } from "./complexity-classifier.js";
|
|
@@ -8,6 +7,7 @@ import type { ResolvedModelConfig } from "./preferences.js";
|
|
|
8
7
|
import { getProviderCapabilities, type ProviderCapabilities } from "@gsd/pi-ai";
|
|
9
8
|
import { getToolCompatibility, getAllToolCompatibility } from "@gsd/pi-coding-agent";
|
|
10
9
|
import type { ToolCompatibility } from "@gsd/pi-coding-agent";
|
|
10
|
+
import { incrementLegacyTelemetry } from "./legacy-telemetry.js";
|
|
11
11
|
|
|
12
12
|
// ─── Types ───────────────────────────────────────────────────────────────────
|
|
13
13
|
|
|
@@ -641,14 +641,18 @@ export function resolveModelForTier(
|
|
|
641
641
|
|
|
642
642
|
// No available models known — return canonical fallback
|
|
643
643
|
if (availableModelIds.length === 0) {
|
|
644
|
+
incrementLegacyTelemetry("legacy.providerDefaultUsed");
|
|
644
645
|
return canonicalModelForTier(tier);
|
|
645
646
|
}
|
|
646
647
|
|
|
647
648
|
// Cross-provider tier search
|
|
648
649
|
const resolved = findModelForTier(tier, routingConfig, availableModelIds, allowCrossProvider);
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
650
|
+
if (resolved) {
|
|
651
|
+
return normalizeResolvedTierModelId(resolved, tier, routingConfig);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
incrementLegacyTelemetry("legacy.providerDefaultUsed");
|
|
655
|
+
return canonicalModelForTier(tier);
|
|
652
656
|
}
|
|
653
657
|
|
|
654
658
|
// ─── Internal ────────────────────────────────────────────────────────────────
|
|
@@ -27,9 +27,13 @@ export function buildNotificationWidgetLines(): string[] {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
const REFRESH_INTERVAL_MS = 30_000;
|
|
30
|
+
let notificationWidgetCleanup: (() => void) | undefined;
|
|
30
31
|
|
|
31
|
-
export function initNotificationWidget(ctx: ExtensionContext): void {
|
|
32
|
-
|
|
32
|
+
export function initNotificationWidget(ctx: ExtensionContext): () => void {
|
|
33
|
+
notificationWidgetCleanup?.();
|
|
34
|
+
notificationWidgetCleanup = undefined;
|
|
35
|
+
|
|
36
|
+
if (!ctx.hasUI) return () => {};
|
|
33
37
|
|
|
34
38
|
const push = () => {
|
|
35
39
|
const chip = buildNotificationChip();
|
|
@@ -37,6 +41,23 @@ export function initNotificationWidget(ctx: ExtensionContext): void {
|
|
|
37
41
|
};
|
|
38
42
|
push();
|
|
39
43
|
|
|
40
|
-
onNotificationStoreChange(push);
|
|
41
|
-
setInterval(push, REFRESH_INTERVAL_MS)
|
|
44
|
+
const unsubscribe = onNotificationStoreChange(push);
|
|
45
|
+
const interval = setInterval(push, REFRESH_INTERVAL_MS);
|
|
46
|
+
interval.unref?.();
|
|
47
|
+
|
|
48
|
+
const cleanup = () => {
|
|
49
|
+
unsubscribe();
|
|
50
|
+
clearInterval(interval);
|
|
51
|
+
if (notificationWidgetCleanup === cleanup) {
|
|
52
|
+
ctx.ui.setStatus(STATUS_KEY, undefined);
|
|
53
|
+
notificationWidgetCleanup = undefined;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
notificationWidgetCleanup = cleanup;
|
|
57
|
+
return cleanup;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function _resetNotificationWidgetForTests(): void {
|
|
61
|
+
notificationWidgetCleanup?.();
|
|
62
|
+
notificationWidgetCleanup = undefined;
|
|
42
63
|
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Post-execution validation checks for completed GSD task output.
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Post-Execution Checks — Validate task output after execution completes.
|
|
3
6
|
*
|
|
@@ -15,7 +18,7 @@
|
|
|
15
18
|
|
|
16
19
|
import { existsSync, readFileSync } from "node:fs";
|
|
17
20
|
import { resolve, dirname, join, extname } from "node:path";
|
|
18
|
-
import type { TaskRow } from "./
|
|
21
|
+
import type { TaskRow } from "./db-task-slice-rows.js";
|
|
19
22
|
|
|
20
23
|
// ─── Result Types ────────────────────────────────────────────────────────────
|
|
21
24
|
|
|
@@ -144,12 +147,30 @@ export function resolveImportPath(
|
|
|
144
147
|
if (existsSync(directPath)) {
|
|
145
148
|
return { exists: true, resolvedPath: directPath };
|
|
146
149
|
}
|
|
147
|
-
|
|
148
|
-
//
|
|
149
|
-
// .
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
|
|
150
|
+
|
|
151
|
+
// Known concrete extensions that should NOT fall through to code-shadow
|
|
152
|
+
// probing when missing. This preserves the "missing.css must stay missing"
|
|
153
|
+
// guarantee while still allowing dotted module stems like ./route.server
|
|
154
|
+
// to resolve as ./route.server.ts.
|
|
155
|
+
const nonFallbackExtensions = new Set([
|
|
156
|
+
".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
|
|
157
|
+
".json", ".css", ".scss", ".sass", ".less", ".styl",
|
|
158
|
+
".svg", ".png", ".jpg", ".jpeg", ".gif", ".webp", ".avif", ".ico", ".bmp",
|
|
159
|
+
".woff", ".woff2", ".ttf", ".otf", ".eot",
|
|
160
|
+
]);
|
|
161
|
+
const runtimeFallbackExtensions = new Set([".js", ".jsx", ".mjs", ".cjs"]);
|
|
162
|
+
const dottedStemFallbackExtensions = new Set([".server", ".client", ".webhook"]);
|
|
163
|
+
|
|
164
|
+
if (
|
|
165
|
+
explicitExt !== "" &&
|
|
166
|
+
!runtimeFallbackExtensions.has(explicitExt) &&
|
|
167
|
+
!nonFallbackExtensions.has(explicitExt) &&
|
|
168
|
+
!dottedStemFallbackExtensions.has(explicitExt)
|
|
169
|
+
) {
|
|
170
|
+
return { exists: false, resolvedPath: null };
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (nonFallbackExtensions.has(explicitExt) && !runtimeFallbackExtensions.has(explicitExt)) {
|
|
153
174
|
return { exists: false, resolvedPath: null };
|
|
154
175
|
}
|
|
155
176
|
}
|
|
@@ -222,6 +243,13 @@ export function checkImportResolution(
|
|
|
222
243
|
const imports = extractRelativeImports(source);
|
|
223
244
|
|
|
224
245
|
for (const { importPath, lineNum } of imports) {
|
|
246
|
+
// React Router generated +types modules may not exist on disk during
|
|
247
|
+
// post-exec checks (generated during framework build). Don't block task
|
|
248
|
+
// completion on these imports.
|
|
249
|
+
if (/^\.{1,2}\/\+types\//.test(importPath)) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
|
|
225
253
|
const resolution = resolveImportPath(importPath, file, basePath);
|
|
226
254
|
|
|
227
255
|
if (!resolution.exists) {
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Shared pull request evidence generator for GSD shipping paths.
|
|
3
|
+
|
|
4
|
+
export type PrChangeType = "feat" | "fix" | "refactor" | "test" | "docs" | "chore";
|
|
5
|
+
|
|
6
|
+
export interface PrEvidenceInput {
|
|
7
|
+
milestoneId: string;
|
|
8
|
+
subjectId?: string;
|
|
9
|
+
subjectKind?: "milestone" | "slice" | "workflow";
|
|
10
|
+
milestoneTitle?: string;
|
|
11
|
+
changeType?: PrChangeType;
|
|
12
|
+
linkedIssue?: string;
|
|
13
|
+
summaries?: string[];
|
|
14
|
+
blockers?: string[];
|
|
15
|
+
roadmapItems?: string[];
|
|
16
|
+
metrics?: string[];
|
|
17
|
+
testsRun?: string[];
|
|
18
|
+
why?: string;
|
|
19
|
+
how?: string;
|
|
20
|
+
rollbackNotes?: string[];
|
|
21
|
+
aiAssisted?: boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface PrEvidence {
|
|
25
|
+
title: string;
|
|
26
|
+
body: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const CHANGE_TYPE_LABELS: Record<PrChangeType, string> = {
|
|
30
|
+
feat: "New feature or capability",
|
|
31
|
+
fix: "Bug fix",
|
|
32
|
+
refactor: "Code restructuring",
|
|
33
|
+
test: "Adding or updating tests",
|
|
34
|
+
docs: "Documentation only",
|
|
35
|
+
chore: "Build, CI, or tooling changes",
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// Per-item cap for user-supplied content. 2 KB gives slice titles plus
|
|
39
|
+
// descriptions room while still bounding malicious DoS-via-PR-body input.
|
|
40
|
+
const USER_CONTENT_CAP_BYTES = 2048;
|
|
41
|
+
const TRUNCATION_SUFFIX = " … [truncated]";
|
|
42
|
+
|
|
43
|
+
// Strips HTML comments, fake commit trailers (Co-Authored-By, Signed-off-by —
|
|
44
|
+
// case-insensitive on the trailer name), and caps total length. Designed to
|
|
45
|
+
// be a no-op for well-formed input; golden fixtures must remain byte-stable.
|
|
46
|
+
// Trailer lines are removed (not rejected) so that a single bad line in an
|
|
47
|
+
// otherwise legitimate description does not block the entire PR.
|
|
48
|
+
function sanitizeUserContent(s: string): string {
|
|
49
|
+
if (!s) return s;
|
|
50
|
+
// Strip HTML comments greedily across newlines.
|
|
51
|
+
let out = s.replace(/<!--[\s\S]*?-->/g, "");
|
|
52
|
+
// Drop lines that look like commit trailers we do not want forged.
|
|
53
|
+
out = out
|
|
54
|
+
.split("\n")
|
|
55
|
+
.filter((line) => !/^\s*(co-authored-by|signed-off-by)\s*:/i.test(line))
|
|
56
|
+
.join("\n");
|
|
57
|
+
if (Buffer.byteLength(out, "utf8") > USER_CONTENT_CAP_BYTES) {
|
|
58
|
+
const budget = USER_CONTENT_CAP_BYTES - Buffer.byteLength(TRUNCATION_SUFFIX, "utf8");
|
|
59
|
+
// Truncate by code units to stay safely under the byte budget for ASCII;
|
|
60
|
+
// for multibyte content we conservatively walk back until under budget.
|
|
61
|
+
let sliced = out.slice(0, Math.max(0, budget));
|
|
62
|
+
while (Buffer.byteLength(sliced, "utf8") > budget && sliced.length > 0) {
|
|
63
|
+
sliced = sliced.slice(0, -1);
|
|
64
|
+
}
|
|
65
|
+
out = sliced + TRUNCATION_SUFFIX;
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Strips HTML comments and fake trailers without applying the length cap.
|
|
71
|
+
// Used for short fields like linkedIssue where truncation would be confusing.
|
|
72
|
+
function sanitizeIssueRef(s: string): string {
|
|
73
|
+
if (!s) return s;
|
|
74
|
+
let out = s.replace(/<!--[\s\S]*?-->/g, "");
|
|
75
|
+
out = out
|
|
76
|
+
.split("\n")
|
|
77
|
+
.filter((line) => !/^\s*(co-authored-by|signed-off-by)\s*:/i.test(line))
|
|
78
|
+
.join("\n");
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function normalizeList(values: readonly string[] | undefined): string[] {
|
|
83
|
+
return (values ?? [])
|
|
84
|
+
.map((value) => sanitizeUserContent(value).trim())
|
|
85
|
+
.filter(Boolean);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function changeTypeChecklist(selected: PrChangeType): string[] {
|
|
89
|
+
return (Object.keys(CHANGE_TYPE_LABELS) as PrChangeType[]).map((type) => {
|
|
90
|
+
const checked = type === selected ? "x" : " ";
|
|
91
|
+
return `- [${checked}] \`${type}\` - ${CHANGE_TYPE_LABELS[type]}`;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function bulletList(values: readonly string[], fallback: string): string {
|
|
96
|
+
if (values.length === 0) return `- ${fallback}`;
|
|
97
|
+
return values.map((value) => `- ${value}`).join("\n");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function buildPrEvidence(input: PrEvidenceInput): PrEvidence {
|
|
101
|
+
const subjectId = input.subjectId?.trim() || input.milestoneId;
|
|
102
|
+
const subjectKind = input.subjectKind ?? "milestone";
|
|
103
|
+
const subjectTitle = input.milestoneTitle?.trim() || subjectId;
|
|
104
|
+
const changeType = input.changeType ?? "feat";
|
|
105
|
+
const summaries = normalizeList(input.summaries);
|
|
106
|
+
const blockers = normalizeList(input.blockers);
|
|
107
|
+
const roadmapItems = normalizeList(input.roadmapItems);
|
|
108
|
+
const metrics = normalizeList(input.metrics);
|
|
109
|
+
const testsRun = normalizeList(input.testsRun);
|
|
110
|
+
const rollbackNotes = normalizeList(input.rollbackNotes);
|
|
111
|
+
// linkedIssue is sanitized but not length-capped: legitimate issue refs
|
|
112
|
+
// are short by nature, and truncating "Closes #123" would be unhelpful.
|
|
113
|
+
const linkedIssueRaw = input.linkedIssue ? sanitizeIssueRef(input.linkedIssue).trim() : "";
|
|
114
|
+
const linkedIssue = linkedIssueRaw || "Not specified. Add an issue link before marking this PR ready if CONTRIBUTING.md requires one.";
|
|
115
|
+
const why = (input.why ? sanitizeUserContent(input.why).trim() : "") || `${capitalize(subjectKind)} work is complete and ready for review.`;
|
|
116
|
+
const how = (input.how ? sanitizeUserContent(input.how).trim() : "") || "Generated from GSD evidence and local workflow artifacts.";
|
|
117
|
+
const title = `${changeType}: ${subjectTitle}`;
|
|
118
|
+
|
|
119
|
+
const sections: string[] = [
|
|
120
|
+
"## TL;DR",
|
|
121
|
+
"",
|
|
122
|
+
`**What:** Ship ${subjectKind} ${subjectId} - ${subjectTitle}`,
|
|
123
|
+
`**Why:** ${why}`,
|
|
124
|
+
`**How:** ${how}`,
|
|
125
|
+
"",
|
|
126
|
+
"## What",
|
|
127
|
+
"",
|
|
128
|
+
summaries.length > 0 ? summaries.join("\n\n") : `${capitalize(subjectKind)} ${subjectId} completed.`,
|
|
129
|
+
];
|
|
130
|
+
|
|
131
|
+
if (blockers.length > 0) {
|
|
132
|
+
sections.push("", "## Blockers", "", blockers.map((blocker) => `- ${blocker}`).join("\n"));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
sections.push(
|
|
136
|
+
"",
|
|
137
|
+
"## Why",
|
|
138
|
+
"",
|
|
139
|
+
why,
|
|
140
|
+
"",
|
|
141
|
+
"## How",
|
|
142
|
+
"",
|
|
143
|
+
how,
|
|
144
|
+
"",
|
|
145
|
+
"## Linked Issue",
|
|
146
|
+
"",
|
|
147
|
+
linkedIssue,
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
if (roadmapItems.length > 0) {
|
|
151
|
+
sections.push("", "## Roadmap", "", roadmapItems.join("\n"));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (metrics.length > 0) {
|
|
155
|
+
sections.push("", "## Metrics", "", bulletList(metrics, "No metrics recorded."));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
sections.push(
|
|
159
|
+
"",
|
|
160
|
+
"## Tests Run",
|
|
161
|
+
"",
|
|
162
|
+
bulletList(testsRun, "Not specified. Add exact verification commands before requesting review."),
|
|
163
|
+
"",
|
|
164
|
+
"## Change Type",
|
|
165
|
+
"",
|
|
166
|
+
...changeTypeChecklist(changeType),
|
|
167
|
+
"",
|
|
168
|
+
"## Rollback And Compatibility",
|
|
169
|
+
"",
|
|
170
|
+
bulletList(rollbackNotes, "No behavior-changing rollback notes recorded."),
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
if (input.aiAssisted !== false) {
|
|
174
|
+
sections.push("", "## AI Assistance Disclosure", "", "This PR was prepared with AI assistance.");
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return { title, body: sections.join("\n") };
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function capitalize(value: string): string {
|
|
181
|
+
return value.slice(0, 1).toUpperCase() + value.slice(1);
|
|
182
|
+
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Pre-execution validation checks for GSD task plans.
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Pre-Execution Checks — Validate task plans before execution begins.
|
|
3
6
|
*
|
|
@@ -18,7 +21,7 @@ import { existsSync } from "node:fs";
|
|
|
18
21
|
import { spawn } from "node:child_process";
|
|
19
22
|
import { homedir } from "node:os";
|
|
20
23
|
import { resolve } from "node:path";
|
|
21
|
-
import type { TaskRow } from "./
|
|
24
|
+
import type { TaskRow } from "./db-task-slice-rows.js";
|
|
22
25
|
import type { PreExecutionCheckJSON } from "./verification-evidence.ts";
|
|
23
26
|
|
|
24
27
|
const NPM_COMMAND = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Canonical process recommendations for routing work by task size.
|
|
3
|
+
|
|
4
|
+
export type ProcessTaskSize =
|
|
5
|
+
| "hotfix"
|
|
6
|
+
| "bugfix"
|
|
7
|
+
| "small-feature"
|
|
8
|
+
| "large-feature"
|
|
9
|
+
| "architecture-change";
|
|
10
|
+
|
|
11
|
+
export interface ProcessTaskPath {
|
|
12
|
+
taskSize: ProcessTaskSize;
|
|
13
|
+
label: string;
|
|
14
|
+
templateId: string;
|
|
15
|
+
command: string;
|
|
16
|
+
phases: string[];
|
|
17
|
+
guidance: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const TASK_PATHS: Record<ProcessTaskSize, ProcessTaskPath> = {
|
|
21
|
+
hotfix: {
|
|
22
|
+
taskSize: "hotfix",
|
|
23
|
+
label: "Hotfix",
|
|
24
|
+
templateId: "hotfix",
|
|
25
|
+
command: "/gsd start hotfix <description>",
|
|
26
|
+
phases: ["fix", "ship"],
|
|
27
|
+
guidance: "Use for urgent production fixes that need minimal ceremony and fast verification.",
|
|
28
|
+
},
|
|
29
|
+
bugfix: {
|
|
30
|
+
taskSize: "bugfix",
|
|
31
|
+
label: "Bugfix",
|
|
32
|
+
templateId: "bugfix",
|
|
33
|
+
command: "/gsd start bugfix <description> --issue <ref>",
|
|
34
|
+
phases: ["triage", "fix", "verify", "ship"],
|
|
35
|
+
guidance: "Use for reproducible defects where a linked issue and regression test are expected.",
|
|
36
|
+
},
|
|
37
|
+
"small-feature": {
|
|
38
|
+
taskSize: "small-feature",
|
|
39
|
+
label: "Small Feature",
|
|
40
|
+
templateId: "small-feature",
|
|
41
|
+
command: "/gsd start small-feature <description>",
|
|
42
|
+
phases: ["scope", "plan", "implement", "verify"],
|
|
43
|
+
guidance: "Use for contained feature work that does not need the full milestone machinery.",
|
|
44
|
+
},
|
|
45
|
+
"large-feature": {
|
|
46
|
+
taskSize: "large-feature",
|
|
47
|
+
label: "Large Feature",
|
|
48
|
+
templateId: "full-project",
|
|
49
|
+
command: "/gsd discuss <description>, then /gsd auto",
|
|
50
|
+
phases: ["discuss", "plan", "execute", "verify"],
|
|
51
|
+
guidance: "Use for multi-slice work that should run through the DB-backed milestone flow.",
|
|
52
|
+
},
|
|
53
|
+
"architecture-change": {
|
|
54
|
+
taskSize: "architecture-change",
|
|
55
|
+
label: "Architecture Change",
|
|
56
|
+
templateId: "refactor",
|
|
57
|
+
command: "/gsd start refactor <description>",
|
|
58
|
+
phases: ["inventory", "plan", "migrate", "verify"],
|
|
59
|
+
guidance: "Use for structural changes that require inventory, compatibility notes, and staged verification.",
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export function recommendProcessPath(taskSize: ProcessTaskSize): ProcessTaskPath {
|
|
64
|
+
return TASK_PATHS[taskSize];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function listRecommendedProcessPaths(): ProcessTaskPath[] {
|
|
68
|
+
return [
|
|
69
|
+
TASK_PATHS.hotfix,
|
|
70
|
+
TASK_PATHS.bugfix,
|
|
71
|
+
TASK_PATHS["small-feature"],
|
|
72
|
+
TASK_PATHS["large-feature"],
|
|
73
|
+
TASK_PATHS["architecture-change"],
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function formatRecommendedProcessPaths(): string {
|
|
78
|
+
return listRecommendedProcessPaths()
|
|
79
|
+
.map((path) => ` ${path.taskSize.padEnd(19)} ${path.command}`)
|
|
80
|
+
.join("\n");
|
|
81
|
+
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* Templates are snapshotted shortly after module init via warmCache().
|
|
11
11
|
* This keeps import/extension-registration fast while still preventing a
|
|
12
12
|
* running session from being invalidated when another `gsd` launch overwrites
|
|
13
|
-
*
|
|
13
|
+
* the user-local agent tree with newer templates via initResources(). Without caching, the
|
|
14
14
|
* in-memory extension code (which knows variable set A) can read a newer
|
|
15
15
|
* template from disk (which expects variable set B), causing a
|
|
16
16
|
* "template declares {{X}} but no value was provided" crash mid-session.
|
|
@@ -57,9 +57,9 @@ export function resolveExtensionDirFromCandidates(
|
|
|
57
57
|
*
|
|
58
58
|
* `import.meta.url` resolves to whichever copy of this module is executing.
|
|
59
59
|
* On Windows (npm global install via MSYS2 / Git Bash) this can resolve to
|
|
60
|
-
* the npm-global
|
|
61
|
-
*
|
|
62
|
-
*
|
|
60
|
+
* the npm-global package path, which does NOT contain the prompts/ and
|
|
61
|
+
* templates/ subtrees that initResources() copies to the user-local agent
|
|
62
|
+
* extension directory. Detect the mismatch and fall back to
|
|
63
63
|
* the user-local agent directory.
|
|
64
64
|
*/
|
|
65
65
|
function resolveExtensionDir(): string {
|
|
@@ -74,7 +74,7 @@ const templatesDir = join(__extensionDir, "templates");
|
|
|
74
74
|
|
|
75
75
|
/**
|
|
76
76
|
* Return the resolved templates directory path for use in prompts.
|
|
77
|
-
* Avoids hardcoding
|
|
77
|
+
* Avoids hardcoding the user-local templates directory in templates. (#3575)
|
|
78
78
|
*/
|
|
79
79
|
export function getTemplatesDir(): string {
|
|
80
80
|
return templatesDir;
|
|
@@ -155,6 +155,10 @@ export function loadPrompt(name: string, vars: Record<string, string> = {}): str
|
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
const effectiveVars = {
|
|
158
|
+
templatesDir: getTemplatesDir(),
|
|
159
|
+
planTemplatePath: join(getTemplatesDir(), "plan.md"),
|
|
160
|
+
taskPlanTemplatePath: join(getTemplatesDir(), "task-plan.md"),
|
|
161
|
+
taskSummaryTemplatePath: join(getTemplatesDir(), "task-summary.md"),
|
|
158
162
|
skillActivation: "If a `GSD Skill Preferences` block is present in system context, use it and the `<available_skills>` catalog in your system prompt to decide which skills to load and follow for this unit, without relaxing required verification or artifact rules.",
|
|
159
163
|
...vars,
|
|
160
164
|
};
|