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
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
## TL;DR
|
|
2
|
+
|
|
3
|
+
**What:** Ship milestone M001 - Authentication
|
|
4
|
+
**Why:** Users need to authenticate before accessing protected resources.
|
|
5
|
+
**How:** Added password hash check and session token issuance.
|
|
6
|
+
|
|
7
|
+
## What
|
|
8
|
+
|
|
9
|
+
### S01
|
|
10
|
+
Implemented login flow.
|
|
11
|
+
|
|
12
|
+
## Why
|
|
13
|
+
|
|
14
|
+
Users need to authenticate before accessing protected resources.
|
|
15
|
+
|
|
16
|
+
## How
|
|
17
|
+
|
|
18
|
+
Added password hash check and session token issuance.
|
|
19
|
+
|
|
20
|
+
## Linked Issue
|
|
21
|
+
|
|
22
|
+
Closes #123
|
|
23
|
+
|
|
24
|
+
## Roadmap
|
|
25
|
+
|
|
26
|
+
- [x] **S01: Login**
|
|
27
|
+
|
|
28
|
+
## Metrics
|
|
29
|
+
|
|
30
|
+
- **Units executed:** 3
|
|
31
|
+
|
|
32
|
+
## Tests Run
|
|
33
|
+
|
|
34
|
+
- npm test
|
|
35
|
+
- npm run typecheck:extensions
|
|
36
|
+
|
|
37
|
+
## Change Type
|
|
38
|
+
|
|
39
|
+
- [x] `feat` - New feature or capability
|
|
40
|
+
- [ ] `fix` - Bug fix
|
|
41
|
+
- [ ] `refactor` - Code restructuring
|
|
42
|
+
- [ ] `test` - Adding or updating tests
|
|
43
|
+
- [ ] `docs` - Documentation only
|
|
44
|
+
- [ ] `chore` - Build, CI, or tooling changes
|
|
45
|
+
|
|
46
|
+
## Rollback And Compatibility
|
|
47
|
+
|
|
48
|
+
- Revert the merge commit.
|
|
49
|
+
|
|
50
|
+
## AI Assistance Disclosure
|
|
51
|
+
|
|
52
|
+
This PR was prepared with AI assistance.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
## TL;DR
|
|
2
|
+
|
|
3
|
+
**What:** Ship milestone M001 - Authentication
|
|
4
|
+
**Why:** Milestone work is complete and ready for review.
|
|
5
|
+
**How:** Generated from GSD evidence and local workflow artifacts.
|
|
6
|
+
|
|
7
|
+
## What
|
|
8
|
+
|
|
9
|
+
Milestone M001 completed.
|
|
10
|
+
|
|
11
|
+
## Why
|
|
12
|
+
|
|
13
|
+
Milestone work is complete and ready for review.
|
|
14
|
+
|
|
15
|
+
## How
|
|
16
|
+
|
|
17
|
+
Generated from GSD evidence and local workflow artifacts.
|
|
18
|
+
|
|
19
|
+
## Linked Issue
|
|
20
|
+
|
|
21
|
+
Not specified. Add an issue link before marking this PR ready if CONTRIBUTING.md requires one.
|
|
22
|
+
|
|
23
|
+
## Tests Run
|
|
24
|
+
|
|
25
|
+
- Not specified. Add exact verification commands before requesting review.
|
|
26
|
+
|
|
27
|
+
## Change Type
|
|
28
|
+
|
|
29
|
+
- [x] `feat` - New feature or capability
|
|
30
|
+
- [ ] `fix` - Bug fix
|
|
31
|
+
- [ ] `refactor` - Code restructuring
|
|
32
|
+
- [ ] `test` - Adding or updating tests
|
|
33
|
+
- [ ] `docs` - Documentation only
|
|
34
|
+
- [ ] `chore` - Build, CI, or tooling changes
|
|
35
|
+
|
|
36
|
+
## Rollback And Compatibility
|
|
37
|
+
|
|
38
|
+
- No behavior-changing rollback notes recorded.
|
|
39
|
+
|
|
40
|
+
## AI Assistance Disclosure
|
|
41
|
+
|
|
42
|
+
This PR was prepared with AI assistance.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
## TL;DR
|
|
2
|
+
|
|
3
|
+
**What:** Ship workflow lane/writer - lane/writer
|
|
4
|
+
**Why:** Workflow work is complete and ready for review.
|
|
5
|
+
**How:** Generated by GSD GitHub Sync swarm routines from lane evidence.
|
|
6
|
+
|
|
7
|
+
## What
|
|
8
|
+
|
|
9
|
+
### Swarm lane
|
|
10
|
+
**Lane:** `lane/writer`
|
|
11
|
+
**Branch:** `lane/single-writer`
|
|
12
|
+
**Owner:** @owner
|
|
13
|
+
**Latest commit:** `abc1234`
|
|
14
|
+
|
|
15
|
+
### Impact area
|
|
16
|
+
Single-writer UOK metadata.
|
|
17
|
+
|
|
18
|
+
### Changed contracts
|
|
19
|
+
- [ ] WriterToken
|
|
20
|
+
|
|
21
|
+
### Transition risks
|
|
22
|
+
- [ ] Writer token lifecycle regression
|
|
23
|
+
|
|
24
|
+
## Why
|
|
25
|
+
|
|
26
|
+
Workflow work is complete and ready for review.
|
|
27
|
+
|
|
28
|
+
## How
|
|
29
|
+
|
|
30
|
+
Generated by GSD GitHub Sync swarm routines from lane evidence.
|
|
31
|
+
|
|
32
|
+
## Linked Issue
|
|
33
|
+
|
|
34
|
+
Closes #123
|
|
35
|
+
|
|
36
|
+
## Tests Run
|
|
37
|
+
|
|
38
|
+
- npm run typecheck:extensions
|
|
39
|
+
|
|
40
|
+
## Change Type
|
|
41
|
+
|
|
42
|
+
- [ ] `feat` - New feature or capability
|
|
43
|
+
- [ ] `fix` - Bug fix
|
|
44
|
+
- [x] `refactor` - Code restructuring
|
|
45
|
+
- [ ] `test` - Adding or updating tests
|
|
46
|
+
- [ ] `docs` - Documentation only
|
|
47
|
+
- [ ] `chore` - Build, CI, or tooling changes
|
|
48
|
+
|
|
49
|
+
## Rollback And Compatibility
|
|
50
|
+
|
|
51
|
+
- Disable writer sequence enrichment
|
|
52
|
+
|
|
53
|
+
## AI Assistance Disclosure
|
|
54
|
+
|
|
55
|
+
This PR was prepared with AI assistance.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
## TL;DR
|
|
2
|
+
|
|
3
|
+
**What:** Ship workflow lane/writer - lane/writer
|
|
4
|
+
**Why:** Workflow work is complete and ready for review.
|
|
5
|
+
**How:** Generated by GSD GitHub Sync swarm routines from lane evidence.
|
|
6
|
+
|
|
7
|
+
## What
|
|
8
|
+
|
|
9
|
+
### Swarm lane
|
|
10
|
+
**Lane:** `lane/writer`
|
|
11
|
+
**Branch:** `lane/single-writer`
|
|
12
|
+
**Owner:** @owner
|
|
13
|
+
**Latest commit:** `abc1234`
|
|
14
|
+
|
|
15
|
+
### Impact area
|
|
16
|
+
Single-writer UOK metadata.
|
|
17
|
+
|
|
18
|
+
### Changed contracts
|
|
19
|
+
- [ ] WriterToken
|
|
20
|
+
|
|
21
|
+
### Transition risks
|
|
22
|
+
- [ ] Writer token lifecycle regression
|
|
23
|
+
|
|
24
|
+
## Blockers
|
|
25
|
+
|
|
26
|
+
- Awaiting state-lane writer-sequence merge
|
|
27
|
+
- Parity report incomplete
|
|
28
|
+
|
|
29
|
+
## Why
|
|
30
|
+
|
|
31
|
+
Workflow work is complete and ready for review.
|
|
32
|
+
|
|
33
|
+
## How
|
|
34
|
+
|
|
35
|
+
Generated by GSD GitHub Sync swarm routines from lane evidence.
|
|
36
|
+
|
|
37
|
+
## Linked Issue
|
|
38
|
+
|
|
39
|
+
Closes #123
|
|
40
|
+
|
|
41
|
+
## Tests Run
|
|
42
|
+
|
|
43
|
+
- npm run typecheck:extensions
|
|
44
|
+
|
|
45
|
+
## Change Type
|
|
46
|
+
|
|
47
|
+
- [ ] `feat` - New feature or capability
|
|
48
|
+
- [ ] `fix` - Bug fix
|
|
49
|
+
- [x] `refactor` - Code restructuring
|
|
50
|
+
- [ ] `test` - Adding or updating tests
|
|
51
|
+
- [ ] `docs` - Documentation only
|
|
52
|
+
- [ ] `chore` - Build, CI, or tooling changes
|
|
53
|
+
|
|
54
|
+
## Rollback And Compatibility
|
|
55
|
+
|
|
56
|
+
- Disable writer sequence enrichment
|
|
57
|
+
|
|
58
|
+
## AI Assistance Disclosure
|
|
59
|
+
|
|
60
|
+
This PR was prepared with AI assistance.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Verifies the forensics prompt renders required investigation and issue-routing guidance.
|
|
3
|
+
|
|
4
|
+
import test from "node:test";
|
|
5
|
+
import assert from "node:assert/strict";
|
|
6
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
|
|
10
|
+
test("forensics prompt renders compact investigation and issue routing guidance", async (t) => {
|
|
11
|
+
const previousGsdHome = process.env.GSD_HOME;
|
|
12
|
+
const providedGsdHome = process.env.GSD_TEST_HOME;
|
|
13
|
+
const isolatedHome = providedGsdHome ?? mkdtempSync(join(tmpdir(), "gsd-forensics-render-"));
|
|
14
|
+
process.env.GSD_HOME = isolatedHome;
|
|
15
|
+
t.after(() => {
|
|
16
|
+
if (previousGsdHome === undefined) delete process.env.GSD_HOME;
|
|
17
|
+
else process.env.GSD_HOME = previousGsdHome;
|
|
18
|
+
if (!providedGsdHome) rmSync(isolatedHome, { recursive: true, force: true });
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const { loadPrompt } = await import(`../prompt-loader.ts?test=${Date.now()}`);
|
|
22
|
+
const prompt = loadPrompt("forensics", {
|
|
23
|
+
problemDescription: "Auto-mode repeats the same unit.",
|
|
24
|
+
forensicData: "stuck-detected event for execute-task/M001/S01/T01",
|
|
25
|
+
gsdSourceDir: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
|
|
26
|
+
dedupSection: "No duplicate issue found.",
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
assert.match(prompt, /Investigation Protocol/);
|
|
30
|
+
assert.match(prompt, /gsd_milestone_status/);
|
|
31
|
+
assert.match(prompt, /sqlite3 .gsd\/gsd.db/);
|
|
32
|
+
assert.match(prompt, /gh issue create --repo gsd-build\/gsd-2/);
|
|
33
|
+
assert.match(prompt, /Do NOT use the `github_issues` tool/);
|
|
34
|
+
assert.match(prompt, /Redaction Rules/);
|
|
35
|
+
assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
|
|
36
|
+
});
|
|
@@ -233,6 +233,16 @@ describe("getNextPendingStep", () => {
|
|
|
233
233
|
const next = getNextPendingStep(graph);
|
|
234
234
|
assert.equal(next?.id, "b");
|
|
235
235
|
});
|
|
236
|
+
|
|
237
|
+
it("treats expanded dependencies as satisfied", (t) => {
|
|
238
|
+
const graph = makeGraph([
|
|
239
|
+
makeStep({ id: "iter", status: "expanded" }),
|
|
240
|
+
makeStep({ id: "after", dependsOn: ["iter"] }),
|
|
241
|
+
]);
|
|
242
|
+
|
|
243
|
+
const next = getNextPendingStep(graph);
|
|
244
|
+
assert.equal(next?.id, "after");
|
|
245
|
+
});
|
|
236
246
|
});
|
|
237
247
|
|
|
238
248
|
// ─── markStepComplete ────────────────────────────────────────────────────
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// GSD Extension - Database regression tests.
|
|
2
|
+
|
|
1
3
|
import { describe, test } from 'node:test';
|
|
2
4
|
import assert from 'node:assert/strict';
|
|
3
5
|
import * as fs from 'node:fs';
|
|
@@ -29,7 +31,10 @@ import {
|
|
|
29
31
|
getTask,
|
|
30
32
|
getSliceTasks,
|
|
31
33
|
checkpointDatabase,
|
|
34
|
+
refreshOpenDatabaseFromDisk,
|
|
35
|
+
tryCreateMemoriesFts,
|
|
32
36
|
} from '../gsd-db.ts';
|
|
37
|
+
import { _resetLogs, peekLogs, setStderrLoggingEnabled } from '../workflow-logger.ts';
|
|
33
38
|
|
|
34
39
|
const _require = createRequire(import.meta.url);
|
|
35
40
|
|
|
@@ -910,6 +915,31 @@ describe('gsd-db', () => {
|
|
|
910
915
|
closeDatabase();
|
|
911
916
|
});
|
|
912
917
|
|
|
918
|
+
test('gsd-db: FTS5 unavailable warning normalizes provider typo', () => {
|
|
919
|
+
const previousStderr = setStderrLoggingEnabled(false);
|
|
920
|
+
_resetLogs();
|
|
921
|
+
try {
|
|
922
|
+
const ok = tryCreateMemoriesFts({
|
|
923
|
+
exec(): void {
|
|
924
|
+
throw new Error('no such moduel : fts5');
|
|
925
|
+
},
|
|
926
|
+
prepare(): never {
|
|
927
|
+
throw new Error('prepare should not be called');
|
|
928
|
+
},
|
|
929
|
+
close(): void {},
|
|
930
|
+
});
|
|
931
|
+
|
|
932
|
+
assert.equal(ok, false, 'FTS5 creation should report fallback');
|
|
933
|
+
const warning = peekLogs().find((entry) => entry.component === 'db' && entry.message.includes('FTS5 unavailable'));
|
|
934
|
+
assert.ok(warning, 'FTS5 fallback warning should be logged');
|
|
935
|
+
assert.match(warning!.message, /no such module: fts5/);
|
|
936
|
+
assert.doesNotMatch(warning!.message, /moduel/);
|
|
937
|
+
} finally {
|
|
938
|
+
_resetLogs();
|
|
939
|
+
setStderrLoggingEnabled(previousStderr);
|
|
940
|
+
}
|
|
941
|
+
});
|
|
942
|
+
|
|
913
943
|
// ─── checkpointDatabase ────────────────────────────────────────────────────
|
|
914
944
|
|
|
915
945
|
describe('checkpointDatabase', () => {
|
|
@@ -952,6 +982,71 @@ describe('gsd-db', () => {
|
|
|
952
982
|
});
|
|
953
983
|
});
|
|
954
984
|
|
|
985
|
+
// ─── refreshOpenDatabaseFromDisk ───────────────────────────────────────────
|
|
986
|
+
|
|
987
|
+
describe('refreshOpenDatabaseFromDisk', () => {
|
|
988
|
+
test('refreshOpenDatabaseFromDisk: reopens the active file-backed database and sees external writes', (t) => {
|
|
989
|
+
const dbPath = tempDbPath();
|
|
990
|
+
t.after(() => cleanup(dbPath));
|
|
991
|
+
|
|
992
|
+
openDatabase(dbPath);
|
|
993
|
+
insertMilestone({ id: 'M001', title: 'Test', status: 'active' });
|
|
994
|
+
insertSlice({
|
|
995
|
+
id: 'S01',
|
|
996
|
+
milestoneId: 'M001',
|
|
997
|
+
title: 'Slice 1',
|
|
998
|
+
status: 'pending',
|
|
999
|
+
sequence: 1,
|
|
1000
|
+
});
|
|
1001
|
+
insertTask({
|
|
1002
|
+
id: 'T01',
|
|
1003
|
+
milestoneId: 'M001',
|
|
1004
|
+
sliceId: 'S01',
|
|
1005
|
+
title: 'Task 1',
|
|
1006
|
+
status: 'pending',
|
|
1007
|
+
sequence: 1,
|
|
1008
|
+
});
|
|
1009
|
+
|
|
1010
|
+
const adapterBefore = _getAdapter()!;
|
|
1011
|
+
|
|
1012
|
+
const externalDb = openRawSqliteForTest(dbPath);
|
|
1013
|
+
try {
|
|
1014
|
+
externalDb.exec(`
|
|
1015
|
+
INSERT INTO tasks (milestone_id, slice_id, id, title, status, sequence)
|
|
1016
|
+
VALUES ('M001', 'S01', 'T02', 'Task 2', 'pending', 2)
|
|
1017
|
+
`);
|
|
1018
|
+
} finally {
|
|
1019
|
+
externalDb.close();
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
const visibleBeforeRefresh = getSliceTasks('M001', 'S01').map(task => task.id);
|
|
1023
|
+
assert.ok(visibleBeforeRefresh.includes('T01'));
|
|
1024
|
+
|
|
1025
|
+
assert.equal(refreshOpenDatabaseFromDisk(), true);
|
|
1026
|
+
assert.notEqual(_getAdapter(), adapterBefore, 'refresh must replace the active adapter rather than becoming a no-op');
|
|
1027
|
+
const sliceTaskIds = getSliceTasks('M001', 'S01').map(task => task.id);
|
|
1028
|
+
assert.deepEqual(sliceTaskIds, ['T01', 'T02']);
|
|
1029
|
+
assert.equal(isDbAvailable(), true);
|
|
1030
|
+
});
|
|
1031
|
+
|
|
1032
|
+
test('refreshOpenDatabaseFromDisk: refuses in-memory databases without closing them', () => {
|
|
1033
|
+
openDatabase(':memory:');
|
|
1034
|
+
insertMilestone({ id: 'M001', title: 'Test', status: 'active' });
|
|
1035
|
+
|
|
1036
|
+
assert.equal(refreshOpenDatabaseFromDisk(), false);
|
|
1037
|
+
assert.equal(isDbAvailable(), true);
|
|
1038
|
+
assert.ok(_getAdapter()!.prepare("SELECT 1 FROM milestones WHERE id = 'M001'").get());
|
|
1039
|
+
|
|
1040
|
+
closeDatabase();
|
|
1041
|
+
});
|
|
1042
|
+
|
|
1043
|
+
test('refreshOpenDatabaseFromDisk: is a no-op when no database is open', () => {
|
|
1044
|
+
closeDatabase();
|
|
1045
|
+
assert.equal(refreshOpenDatabaseFromDisk(), false);
|
|
1046
|
+
assert.equal(isDbAvailable(), false);
|
|
1047
|
+
});
|
|
1048
|
+
});
|
|
1049
|
+
|
|
955
1050
|
// ─── getDbStatus ───────────────────────────────────────────────────────────
|
|
956
1051
|
|
|
957
1052
|
describe('getDbStatus', () => {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Verifies the guided milestone discussion prompt renders its core interview and persistence contracts.
|
|
3
|
+
|
|
4
|
+
import test from "node:test";
|
|
5
|
+
import assert from "node:assert/strict";
|
|
6
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
|
|
10
|
+
test("guided milestone prompt renders compact interview and context guidance", async (t) => {
|
|
11
|
+
const previousGsdHome = process.env.GSD_HOME;
|
|
12
|
+
const providedGsdHome = process.env.GSD_TEST_HOME;
|
|
13
|
+
const isolatedHome = providedGsdHome ?? mkdtempSync(join(tmpdir(), "gsd-guided-milestone-render-"));
|
|
14
|
+
process.env.GSD_HOME = isolatedHome;
|
|
15
|
+
t.after(() => {
|
|
16
|
+
if (previousGsdHome === undefined) delete process.env.GSD_HOME;
|
|
17
|
+
else process.env.GSD_HOME = previousGsdHome;
|
|
18
|
+
if (!providedGsdHome) rmSync(isolatedHome, { recursive: true, force: true });
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const { loadPrompt } = await import(`../prompt-loader.ts?test=${Date.now()}`);
|
|
22
|
+
const prompt = loadPrompt("guided-discuss-milestone", {
|
|
23
|
+
workingDirectory: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
|
|
24
|
+
milestoneId: "M001",
|
|
25
|
+
milestoneTitle: "Baseline And Safety",
|
|
26
|
+
structuredQuestionsAvailable: "true",
|
|
27
|
+
fastPathInstruction: "No fast path in this test.",
|
|
28
|
+
inlinedTemplates: "## Context\n\n## Decisions\n\n## Open Questions",
|
|
29
|
+
commitInstruction: "Do not commit during this test.",
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
assert.match(prompt, /M001 context written/);
|
|
33
|
+
assert.match(prompt, /Project Shape/);
|
|
34
|
+
assert.match(prompt, /default to `complex`/i);
|
|
35
|
+
assert.match(prompt, /3 or 4 concrete, researched options/);
|
|
36
|
+
assert.match(prompt, /"Other — let me discuss"/);
|
|
37
|
+
assert.match(prompt, /CONTEXT-DRAFT/);
|
|
38
|
+
assert.match(prompt, /Do NOT mention this save to the user/);
|
|
39
|
+
assert.match(prompt, /depth_verification_M001_confirm/);
|
|
40
|
+
assert.match(prompt, /artifact_type: "CONTEXT"/);
|
|
41
|
+
assert.match(prompt, /milestone_id: M001/);
|
|
42
|
+
assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
|
|
43
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Verifies the guided project discussion prompt renders its core interview and persistence contracts.
|
|
3
|
+
|
|
4
|
+
import test from "node:test";
|
|
5
|
+
import assert from "node:assert/strict";
|
|
6
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
|
|
10
|
+
test("guided project prompt renders compact interview and artifact guidance", async (t) => {
|
|
11
|
+
const previousGsdHome = process.env.GSD_HOME;
|
|
12
|
+
const providedGsdHome = process.env.GSD_TEST_HOME;
|
|
13
|
+
const isolatedHome = providedGsdHome ?? mkdtempSync(join(tmpdir(), "gsd-guided-project-render-"));
|
|
14
|
+
process.env.GSD_HOME = isolatedHome;
|
|
15
|
+
t.after(() => {
|
|
16
|
+
if (previousGsdHome === undefined) delete process.env.GSD_HOME;
|
|
17
|
+
else process.env.GSD_HOME = previousGsdHome;
|
|
18
|
+
if (!providedGsdHome) rmSync(isolatedHome, { recursive: true, force: true });
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const { loadPrompt } = await import(`../prompt-loader.ts?test=${Date.now()}`);
|
|
22
|
+
const prompt = loadPrompt("guided-discuss-project", {
|
|
23
|
+
workingDirectory: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
|
|
24
|
+
structuredQuestionsAvailable: "true",
|
|
25
|
+
inlinedTemplates: "## Project\n\n## Project Shape\n\n## Capability Contract\n\n## Milestone Sequence",
|
|
26
|
+
commitInstruction: "Do not commit during this test.",
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
assert.match(prompt, /What do you want to build\?/);
|
|
30
|
+
assert.match(prompt, /Project shape: simple/);
|
|
31
|
+
assert.match(prompt, /Default to `complex` when uncertain/);
|
|
32
|
+
assert.match(prompt, /3 or 4 concrete, researched options/);
|
|
33
|
+
assert.match(prompt, /"Other — let me discuss"/);
|
|
34
|
+
assert.match(prompt, /depth_verification_project_confirm/);
|
|
35
|
+
assert.match(prompt, /artifact_type: "PROJECT"/);
|
|
36
|
+
assert.match(prompt, /omit `milestone_id`/);
|
|
37
|
+
assert.match(prompt, /Do NOT use `artifact_type: "CONTEXT"` and do NOT pass `milestone_id: "PROJECT"`/);
|
|
38
|
+
assert.match(prompt, /\*\*Complexity:\*\* simple/);
|
|
39
|
+
assert.match(prompt, /\*\*Complexity:\*\* complex/);
|
|
40
|
+
assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
|
|
41
|
+
});
|
package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Verifies the guided requirements discussion prompt renders core requirements and persistence contracts.
|
|
3
|
+
|
|
4
|
+
import test from "node:test";
|
|
5
|
+
import assert from "node:assert/strict";
|
|
6
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
|
|
10
|
+
test("guided requirements prompt renders compact capability and persistence guidance", async (t) => {
|
|
11
|
+
const previousGsdHome = process.env.GSD_HOME;
|
|
12
|
+
const providedGsdHome = process.env.GSD_TEST_HOME;
|
|
13
|
+
const isolatedHome = providedGsdHome ?? mkdtempSync(join(tmpdir(), "gsd-guided-requirements-render-"));
|
|
14
|
+
process.env.GSD_HOME = isolatedHome;
|
|
15
|
+
t.after(() => {
|
|
16
|
+
if (previousGsdHome === undefined) delete process.env.GSD_HOME;
|
|
17
|
+
else process.env.GSD_HOME = previousGsdHome;
|
|
18
|
+
if (!providedGsdHome) rmSync(isolatedHome, { recursive: true, force: true });
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const { loadPrompt } = await import(`../prompt-loader.ts?test=${Date.now()}`);
|
|
22
|
+
const prompt = loadPrompt("guided-discuss-requirements", {
|
|
23
|
+
workingDirectory: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
|
|
24
|
+
structuredQuestionsAvailable: "true",
|
|
25
|
+
inlinedTemplates: "## Active\n\n## Validated\n\n## Deferred\n\n## Out of Scope\n\n## Traceability\n\n## Coverage Summary",
|
|
26
|
+
commitInstruction: "Do not commit during this test.",
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
assert.match(prompt, /PROJECT\.md missing/);
|
|
30
|
+
assert.match(prompt, /Project Shape/);
|
|
31
|
+
assert.match(prompt, /R###/);
|
|
32
|
+
assert.match(prompt, /M###\/none yet/);
|
|
33
|
+
assert.match(prompt, /never bare `none yet`/);
|
|
34
|
+
assert.match(prompt, /3 or 4 concrete, researched options/);
|
|
35
|
+
assert.match(prompt, /"Other — let me discuss"/);
|
|
36
|
+
assert.match(prompt, /class-assignment and status questions are exempt/);
|
|
37
|
+
assert.match(prompt, /artifact_type: "REQUIREMENTS-DRAFT"/);
|
|
38
|
+
assert.match(prompt, /depth_verification_requirements_confirm/);
|
|
39
|
+
assert.match(prompt, /gsd_requirement_save/);
|
|
40
|
+
assert.match(prompt, /gsd_summary_save/);
|
|
41
|
+
assert.match(prompt, /artifact_type: "REQUIREMENTS"/);
|
|
42
|
+
assert.match(prompt, /Do NOT use `artifact_type: "CONTEXT"`/);
|
|
43
|
+
assert.match(prompt, /Requirements written\./);
|
|
44
|
+
assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
|
|
45
|
+
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// GSD Extension — Auto recovery integration tests.
|
|
2
|
+
|
|
1
3
|
import test from "node:test";
|
|
2
4
|
import assert from "node:assert/strict";
|
|
3
5
|
import { mkdirSync, writeFileSync, existsSync, readFileSync, rmSync, chmodSync } from "node:fs";
|
|
@@ -401,6 +403,57 @@ test("verifyExpectedArtifact plan-slice fails for plan with no tasks (#699)", (t
|
|
|
401
403
|
assert.equal(result, false, "should fail when plan has no task entries (empty scaffold, #699)");
|
|
402
404
|
});
|
|
403
405
|
|
|
406
|
+
test("verifyExpectedArtifact plan-slice trusts DB tasks over legacy plan syntax", (t) => {
|
|
407
|
+
const base = makeTmpBase();
|
|
408
|
+
t.after(() => {
|
|
409
|
+
closeDatabase();
|
|
410
|
+
cleanup(base);
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
openDatabase(join(base, ".gsd", "gsd.db"));
|
|
414
|
+
insertMilestone({ id: "M001", title: "Milestone", status: "active" });
|
|
415
|
+
insertSlice({ id: "S01", milestoneId: "M001", title: "Slice", status: "pending" });
|
|
416
|
+
insertTask({ id: "T01", milestoneId: "M001", sliceId: "S01", title: "First task", status: "pending" });
|
|
417
|
+
insertTask({ id: "T02", milestoneId: "M001", sliceId: "S01", title: "Second task", status: "pending" });
|
|
418
|
+
|
|
419
|
+
const sliceDir = join(base, ".gsd", "milestones", "M001", "slices", "S01");
|
|
420
|
+
const tasksDir = join(sliceDir, "tasks");
|
|
421
|
+
writeFileSync(
|
|
422
|
+
join(sliceDir, "S01-PLAN.md"),
|
|
423
|
+
"# S01: Slice\n\n## Tasks\n\nTask rows live in the DB; this projection intentionally has no legacy task syntax.\n",
|
|
424
|
+
);
|
|
425
|
+
writeFileSync(join(tasksDir, "T01-PLAN.md"), "# T01 Plan\n");
|
|
426
|
+
writeFileSync(join(tasksDir, "T02-PLAN.md"), "# T02 Plan\n");
|
|
427
|
+
|
|
428
|
+
const result = verifyExpectedArtifact("plan-slice", "M001/S01", base);
|
|
429
|
+
assert.equal(result, true, "DB task rows plus task plan files should verify plan-slice");
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
test("verifyExpectedArtifact plan-slice still fails when a DB-backed task plan file is missing", (t) => {
|
|
433
|
+
const base = makeTmpBase();
|
|
434
|
+
t.after(() => {
|
|
435
|
+
closeDatabase();
|
|
436
|
+
cleanup(base);
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
openDatabase(join(base, ".gsd", "gsd.db"));
|
|
440
|
+
insertMilestone({ id: "M001", title: "Milestone", status: "active" });
|
|
441
|
+
insertSlice({ id: "S01", milestoneId: "M001", title: "Slice", status: "pending" });
|
|
442
|
+
insertTask({ id: "T01", milestoneId: "M001", sliceId: "S01", title: "First task", status: "pending" });
|
|
443
|
+
insertTask({ id: "T02", milestoneId: "M001", sliceId: "S01", title: "Second task", status: "pending" });
|
|
444
|
+
|
|
445
|
+
const sliceDir = join(base, ".gsd", "milestones", "M001", "slices", "S01");
|
|
446
|
+
const tasksDir = join(sliceDir, "tasks");
|
|
447
|
+
writeFileSync(
|
|
448
|
+
join(sliceDir, "S01-PLAN.md"),
|
|
449
|
+
"# S01: Slice\n\n## Tasks\n\nTask rows live in the DB; this projection intentionally has no legacy task syntax.\n",
|
|
450
|
+
);
|
|
451
|
+
writeFileSync(join(tasksDir, "T01-PLAN.md"), "# T01 Plan\n");
|
|
452
|
+
|
|
453
|
+
const result = verifyExpectedArtifact("plan-slice", "M001/S01", base);
|
|
454
|
+
assert.equal(result, false, "DB task rows must still require matching task plan files");
|
|
455
|
+
});
|
|
456
|
+
|
|
404
457
|
// ─── verifyExpectedArtifact: heading-style plan tasks (#1691) ─────────────
|
|
405
458
|
|
|
406
459
|
test("verifyExpectedArtifact accepts plan-slice with heading-style tasks (### T01 --)", (t) => {
|
|
@@ -456,6 +509,32 @@ test("verifyExpectedArtifact accepts plan-slice with colon-style heading tasks (
|
|
|
456
509
|
);
|
|
457
510
|
});
|
|
458
511
|
|
|
512
|
+
test("verifyExpectedArtifact accepts indented legacy plan-slice task markers", (t) => {
|
|
513
|
+
const base = makeTmpBase();
|
|
514
|
+
t.after(() => cleanup(base));
|
|
515
|
+
|
|
516
|
+
const sliceDir = join(base, ".gsd", "milestones", "M001", "slices", "S01");
|
|
517
|
+
const tasksDir = join(sliceDir, "tasks");
|
|
518
|
+
mkdirSync(tasksDir, { recursive: true });
|
|
519
|
+
writeFileSync(join(sliceDir, "S01-PLAN.md"), [
|
|
520
|
+
"# S01: Test Slice",
|
|
521
|
+
"",
|
|
522
|
+
"## Tasks",
|
|
523
|
+
"",
|
|
524
|
+
" - [ ] **T01: Implement feature** `est:1h`",
|
|
525
|
+
"",
|
|
526
|
+
" ### T02 -- Write tests",
|
|
527
|
+
].join("\n"));
|
|
528
|
+
writeFileSync(join(tasksDir, "T01-PLAN.md"), "# T01 Plan");
|
|
529
|
+
writeFileSync(join(tasksDir, "T02-PLAN.md"), "# T02 Plan");
|
|
530
|
+
|
|
531
|
+
assert.strictEqual(
|
|
532
|
+
verifyExpectedArtifact("plan-slice", "M001/S01", base),
|
|
533
|
+
true,
|
|
534
|
+
"Indented legacy task markers should be treated as completed plan-slice artifacts",
|
|
535
|
+
);
|
|
536
|
+
});
|
|
537
|
+
|
|
459
538
|
test("verifyExpectedArtifact execute-task rejects heading-style plan without checked checkbox (#3607)", (t) => {
|
|
460
539
|
const base = makeTmpBase();
|
|
461
540
|
t.after(() => cleanup(base));
|
package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts
CHANGED
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
} from "../../auto-worktree.ts";
|
|
25
25
|
import { getSliceBranchName } from "../../worktree.ts";
|
|
26
26
|
import { nativeMergeSquash } from "../../native-git-bridge.ts";
|
|
27
|
+
import { drainLogs, setStderrLoggingEnabled } from "../../workflow-logger.ts";
|
|
27
28
|
|
|
28
29
|
function run(cmd: string, cwd: string): string {
|
|
29
30
|
// Safe: all inputs are hardcoded test strings, not user input
|
|
@@ -251,6 +252,42 @@ describe("auto-worktree-milestone-merge", { timeout: 300_000 }, () => {
|
|
|
251
252
|
assert.strictEqual(typeof result.pushed, "boolean", "pushed flag remains boolean");
|
|
252
253
|
});
|
|
253
254
|
|
|
255
|
+
test("external .gsd and local-only auto_push closeout without cleanup or push warnings", () => {
|
|
256
|
+
const { repo, externalState } = freshRepoWithExternalGsd();
|
|
257
|
+
const previousStderr = setStderrLoggingEnabled(false);
|
|
258
|
+
drainLogs();
|
|
259
|
+
|
|
260
|
+
try {
|
|
261
|
+
writeFileSync(
|
|
262
|
+
join(externalState, "PREFERENCES.md"),
|
|
263
|
+
"---\nversion: 1\n---\n\ngit:\n auto_push: true\n",
|
|
264
|
+
);
|
|
265
|
+
mkdirSync(join(externalState, "milestones", "M041"), { recursive: true });
|
|
266
|
+
mkdirSync(join(externalState, "runtime", "units"), { recursive: true });
|
|
267
|
+
writeFileSync(join(externalState, "runtime", "units", "leftover.json"), "{}\n");
|
|
268
|
+
|
|
269
|
+
const wtPath = createAutoWorktree(repo, "M041");
|
|
270
|
+
addSliceToMilestone(repo, wtPath, "M041", "S01", "Local-only push", [
|
|
271
|
+
{ file: "local-only.ts", content: "export const localOnly = true;\n", message: "add local only file" },
|
|
272
|
+
]);
|
|
273
|
+
|
|
274
|
+
const roadmap = makeRoadmap("M041", "Local-only closeout", [
|
|
275
|
+
{ id: "S01", title: "Local-only push" },
|
|
276
|
+
]);
|
|
277
|
+
|
|
278
|
+
const result = mergeMilestoneToMain(repo, "M041", roadmap);
|
|
279
|
+
const logs = drainLogs();
|
|
280
|
+
const messages = logs.map((entry) => entry.message).join("\n");
|
|
281
|
+
|
|
282
|
+
assert.equal(result.pushed, false, "local-only repo should not report pushed");
|
|
283
|
+
assert.ok(!messages.includes("untracked file cleanup failed"), "external .gsd cleanup should not call git on paths outside the repo");
|
|
284
|
+
assert.ok(!messages.includes("git push failed"), "missing origin should skip auto-push instead of running git push");
|
|
285
|
+
} finally {
|
|
286
|
+
drainLogs();
|
|
287
|
+
setStderrLoggingEnabled(previousStderr);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
|
|
254
291
|
test("auto-resolve .gsd/ state file conflicts", () => {
|
|
255
292
|
const repo = freshRepo();
|
|
256
293
|
const wtPath = createAutoWorktree(repo, "M050");
|