gsd-pi 2.79.0-dev.ece5fd8ba → 2.80.0-dev.b62439b9f
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/{cli-web-branch.d.ts → cli/cli-web-branch.d.ts} +1 -1
- package/dist/{cli-web-branch.js → cli/cli-web-branch.js} +3 -3
- package/dist/{cli.js → cli/cli.js} +25 -25
- package/dist/{web-mode.js → cli/web-mode.js} +3 -3
- package/dist/{extension-registry.js → extension-runtime/extension-registry.js} +1 -1
- package/dist/{headless-query.d.ts → headless/headless-query.d.ts} +1 -1
- package/dist/{headless-query.js → headless/headless-query.js} +3 -2
- package/dist/{headless-recover.js → headless/headless-recover.js} +3 -2
- package/dist/{headless.js → headless/headless.js} +3 -3
- package/dist/loader.js +10 -10
- package/dist/{onboarding.js → onboarding/onboarding.js} +8 -8
- package/dist/{welcome-screen.js → onboarding/welcome-screen.js} +1 -1
- package/dist/{models-resolver.js → providers/models-resolver.js} +1 -1
- package/dist/{remote-questions-config.js → providers/remote-questions-config.js} +1 -1
- package/dist/{resource-loader.d.ts → resource-runtime/resource-loader.d.ts} +1 -1
- package/dist/{resource-loader.js → resource-runtime/resource-loader.js} +6 -6
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/github-sync/templates.js +55 -70
- 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 +362 -523
- 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/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 +3 -0
- 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 +85 -38
- package/dist/resources/extensions/gsd/auto.js +162 -5
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +9 -1
- 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 +76 -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/shared/interview-ui.js +15 -4
- package/dist/{security-overrides.js → security/security-overrides.js} +1 -1
- package/dist/{startup-model-validation.js → startup/startup-model-validation.js} +1 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/{update-check.js → update/update-check.js} +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -16
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- 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 +2 -2
- 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 +2 -2
- 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/preferences/route.js +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 +2 -2
- 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/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- 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 +3 -3
- 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/update/route.js +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 +16 -16
- package/dist/web/standalone/.next/server/chunks/167.js +2 -0
- package/dist/web/standalone/.next/server/chunks/7020.js +12 -0
- package/dist/web/standalone/.next/server/middleware-build-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/package.json +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/{worktree-cli.js → worktrees/worktree-cli.js} +3 -2
- package/package.json +12 -5
- 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/package.json +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +14 -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/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.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +6 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +9 -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 +31 -10
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- 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/modes/interactive/components/__tests__/tool-execution.test.ts +23 -2
- 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 +6 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -9
- 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__/tui.test.js +25 -3
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts +3 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +3 -1
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/tui.test.ts +30 -3
- package/packages/pi-tui/src/tui.ts +3 -1
- 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/package.json +1 -1
- package/src/resources/extensions/github-sync/templates.ts +59 -84
- 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 +414 -598
- 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/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 +4 -0
- 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 +83 -36
- package/src/resources/extensions/gsd/auto.ts +170 -4
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +14 -1
- 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 +124 -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 +32 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +38 -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.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/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/headless-answers.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/headless-query.test.ts +2 -2
- 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.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/resource-loader-import-path.test.ts +1 -1
- 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-mcp.test.ts +8 -7
- 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/worktree-submodule-safety.test.ts +18 -34
- 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/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/server/chunks/6897.js +0 -12
- /package/dist/{app-paths.d.ts → app/app-paths.d.ts} +0 -0
- /package/dist/{app-paths.js → app/app-paths.js} +0 -0
- /package/dist/{project-sessions.d.ts → app/project-sessions.d.ts} +0 -0
- /package/dist/{project-sessions.js → app/project-sessions.js} +0 -0
- /package/dist/{tool-bootstrap.d.ts → app/tool-bootstrap.d.ts} +0 -0
- /package/dist/{tool-bootstrap.js → app/tool-bootstrap.js} +0 -0
- /package/dist/{cli-auto-routing.d.ts → cli/cli-auto-routing.d.ts} +0 -0
- /package/dist/{cli-auto-routing.js → cli/cli-auto-routing.js} +0 -0
- /package/dist/{cli-policy.d.ts → cli/cli-policy.d.ts} +0 -0
- /package/dist/{cli-policy.js → cli/cli-policy.js} +0 -0
- /package/dist/{cli.d.ts → cli/cli.d.ts} +0 -0
- /package/dist/{help-text.d.ts → cli/help-text.d.ts} +0 -0
- /package/dist/{help-text.js → cli/help-text.js} +0 -0
- /package/dist/{logo.d.ts → cli/logo.d.ts} +0 -0
- /package/dist/{logo.js → cli/logo.js} +0 -0
- /package/dist/{web-mode.d.ts → cli/web-mode.d.ts} +0 -0
- /package/dist/{bundled-extension-paths.d.ts → extension-runtime/bundled-extension-paths.d.ts} +0 -0
- /package/dist/{bundled-extension-paths.js → extension-runtime/bundled-extension-paths.js} +0 -0
- /package/dist/{bundled-resource-path.d.ts → extension-runtime/bundled-resource-path.d.ts} +0 -0
- /package/dist/{bundled-resource-path.js → extension-runtime/bundled-resource-path.js} +0 -0
- /package/dist/{extension-discovery.d.ts → extension-runtime/extension-discovery.d.ts} +0 -0
- /package/dist/{extension-discovery.js → extension-runtime/extension-discovery.js} +0 -0
- /package/dist/{extension-registry.d.ts → extension-runtime/extension-registry.d.ts} +0 -0
- /package/dist/{extension-sort.d.ts → extension-runtime/extension-sort.d.ts} +0 -0
- /package/dist/{extension-sort.js → extension-runtime/extension-sort.js} +0 -0
- /package/dist/{extension-validator.d.ts → extension-runtime/extension-validator.d.ts} +0 -0
- /package/dist/{extension-validator.js → extension-runtime/extension-validator.js} +0 -0
- /package/dist/{headless-answers.d.ts → headless/headless-answers.d.ts} +0 -0
- /package/dist/{headless-answers.js → headless/headless-answers.js} +0 -0
- /package/dist/{headless-context.d.ts → headless/headless-context.d.ts} +0 -0
- /package/dist/{headless-context.js → headless/headless-context.js} +0 -0
- /package/dist/{headless-events.d.ts → headless/headless-events.d.ts} +0 -0
- /package/dist/{headless-events.js → headless/headless-events.js} +0 -0
- /package/dist/{headless-recover.d.ts → headless/headless-recover.d.ts} +0 -0
- /package/dist/{headless-types.d.ts → headless/headless-types.d.ts} +0 -0
- /package/dist/{headless-types.js → headless/headless-types.js} +0 -0
- /package/dist/{headless-ui.d.ts → headless/headless-ui.d.ts} +0 -0
- /package/dist/{headless-ui.js → headless/headless-ui.js} +0 -0
- /package/dist/{headless.d.ts → headless/headless.d.ts} +0 -0
- /package/dist/{mcp-server.d.ts → mcp/mcp-server.d.ts} +0 -0
- /package/dist/{mcp-server.js → mcp/mcp-server.js} +0 -0
- /package/dist/{onboarding.d.ts → onboarding/onboarding.d.ts} +0 -0
- /package/dist/{welcome-screen.d.ts → onboarding/welcome-screen.d.ts} +0 -0
- /package/dist/{wizard.d.ts → onboarding/wizard.d.ts} +0 -0
- /package/dist/{wizard.js → onboarding/wizard.js} +0 -0
- /package/dist/{models-resolver.d.ts → providers/models-resolver.d.ts} +0 -0
- /package/dist/{pi-migration.d.ts → providers/pi-migration.d.ts} +0 -0
- /package/dist/{pi-migration.js → providers/pi-migration.js} +0 -0
- /package/dist/{provider-migrations.d.ts → providers/provider-migrations.d.ts} +0 -0
- /package/dist/{provider-migrations.js → providers/provider-migrations.js} +0 -0
- /package/dist/{remote-questions-config.d.ts → providers/remote-questions-config.d.ts} +0 -0
- /package/dist/{rtk-shared.d.ts → rtk/rtk-shared.d.ts} +0 -0
- /package/dist/{rtk-shared.js → rtk/rtk-shared.js} +0 -0
- /package/dist/{rtk.d.ts → rtk/rtk.d.ts} +0 -0
- /package/dist/{rtk.js → rtk/rtk.js} +0 -0
- /package/dist/{security-overrides.d.ts → security/security-overrides.d.ts} +0 -0
- /package/dist/{claude-cli-check.d.ts → startup/claude-cli-check.d.ts} +0 -0
- /package/dist/{claude-cli-check.js → startup/claude-cli-check.js} +0 -0
- /package/dist/{runtime-checks.d.ts → startup/runtime-checks.d.ts} +0 -0
- /package/dist/{runtime-checks.js → startup/runtime-checks.js} +0 -0
- /package/dist/{startup-model-validation.d.ts → startup/startup-model-validation.d.ts} +0 -0
- /package/dist/{startup-timings.d.ts → startup/startup-timings.d.ts} +0 -0
- /package/dist/{startup-timings.js → startup/startup-timings.js} +0 -0
- /package/dist/{update-check.d.ts → update/update-check.d.ts} +0 -0
- /package/dist/{update-cmd.d.ts → update/update-cmd.d.ts} +0 -0
- /package/dist/{update-cmd.js → update/update-cmd.js} +0 -0
- /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → -WDXZiiJHGZDbYH75Mu6f}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → -WDXZiiJHGZDbYH75Mu6f}/_ssgManifest.js +0 -0
- /package/dist/{worktree-cli.d.ts → worktrees/worktree-cli.d.ts} +0 -0
- /package/dist/{worktree-name-gen.d.ts → worktrees/worktree-name-gen.d.ts} +0 -0
- /package/dist/{worktree-name-gen.js → worktrees/worktree-name-gen.js} +0 -0
- /package/dist/{worktree-status-banner.d.ts → worktrees/worktree-status-banner.d.ts} +0 -0
- /package/dist/{worktree-status-banner.js → worktrees/worktree-status-banner.js} +0 -0
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Verifies GSD planning prompt placeholder rendering and DB-backed tool guidance.
|
|
3
|
+
|
|
1
4
|
import test from "node:test";
|
|
2
5
|
import assert from "node:assert/strict";
|
|
3
6
|
import { readFileSync } from "node:fs";
|
|
@@ -6,6 +9,7 @@ import { fileURLToPath } from "node:url";
|
|
|
6
9
|
|
|
7
10
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
11
|
const worktreePromptsDir = join(__dirname, "..", "prompts");
|
|
12
|
+
const fixtureRoot = process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd();
|
|
9
13
|
|
|
10
14
|
function loadPrompt(name: string, vars: Record<string, string> = {}): string {
|
|
11
15
|
const path = join(worktreePromptsDir, `${name}.md`);
|
|
@@ -17,15 +21,18 @@ function loadPrompt(name: string, vars: Record<string, string> = {}): string {
|
|
|
17
21
|
}
|
|
18
22
|
|
|
19
23
|
const BASE_VARS = {
|
|
20
|
-
workingDirectory:
|
|
24
|
+
workingDirectory: fixtureRoot,
|
|
21
25
|
milestoneId: "M001", sliceId: "S01", sliceTitle: "Test Slice",
|
|
22
26
|
slicePath: ".gsd/milestones/M001/slices/S01",
|
|
23
27
|
roadmapPath: ".gsd/milestones/M001/M001-ROADMAP.md",
|
|
24
28
|
researchPath: ".gsd/milestones/M001/slices/S01/S01-RESEARCH.md",
|
|
25
|
-
outputPath: "
|
|
29
|
+
outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "slices", "S01", "S01-PLAN.md"),
|
|
26
30
|
inlinedContext: "--- test inlined context ---",
|
|
27
31
|
dependencySummaries: "", executorContextConstraints: "",
|
|
28
32
|
sourceFilePaths: "- **Requirements**: `.gsd/REQUIREMENTS.md`",
|
|
33
|
+
templatesDir: join(fixtureRoot, "templates"),
|
|
34
|
+
planTemplatePath: "C:\\Users\\Test\\.gsd\\agent\\extensions\\gsd\\templates\\plan.md",
|
|
35
|
+
taskPlanTemplatePath: "C:\\Users\\Test\\.gsd\\agent\\extensions\\gsd\\templates\\task-plan.md",
|
|
29
36
|
skillActivation: "Load the relevant skills.",
|
|
30
37
|
};
|
|
31
38
|
|
|
@@ -61,6 +68,19 @@ test("plan-slice prompt: DB-backed tool names survive template substitution", ()
|
|
|
61
68
|
assert.ok(result.includes("canonical write path"), "canonical write path language should survive substitution");
|
|
62
69
|
});
|
|
63
70
|
|
|
71
|
+
test("plan-slice prompt: compact planning gates survive template substitution", () => {
|
|
72
|
+
const result = loadPrompt("plan-slice", { ...BASE_VARS, commitInstruction: "Do not commit." });
|
|
73
|
+
assert.ok(result.includes("planning-dispatch"), "planning-dispatch policy should remain visible");
|
|
74
|
+
assert.ok(result.includes("Bias toward \"roadmap is fine.\""), "roadmap reassessment brake should remain visible");
|
|
75
|
+
assert.ok(result.includes("Self-audit before finishing"), "self-audit gate should remain visible");
|
|
76
|
+
assert.ok(result.includes("Quality gates: non-trivial slices/tasks include specific Q3-Q7 coverage where applicable."));
|
|
77
|
+
assert.ok(result.includes("C:\\Users\\Test\\.gsd\\agent\\extensions\\gsd\\templates\\plan.md"));
|
|
78
|
+
assert.ok(result.includes("C:\\Users\\Test\\.gsd\\agent\\extensions\\gsd\\templates\\task-plan.md"));
|
|
79
|
+
assert.ok(!result.includes("{{templatesDir}}/plan.md"));
|
|
80
|
+
assert.ok(!result.includes("{{templatesDir}}/task-plan.md"));
|
|
81
|
+
assert.ok(!result.includes("{{"));
|
|
82
|
+
});
|
|
83
|
+
|
|
64
84
|
test("plan-slice prompt: footer references gsd_plan_slice tool, not direct write", () => {
|
|
65
85
|
const result = loadPrompt("plan-slice", { ...BASE_VARS, commitInstruction: "Do not commit." });
|
|
66
86
|
assert.ok(
|
|
@@ -91,7 +111,7 @@ test("domain-work prompts use skillActivation placeholder", () => {
|
|
|
91
111
|
|
|
92
112
|
test("skillActivation default leaves no unresolved placeholder", () => {
|
|
93
113
|
const result = loadPromptWithDefaultSkillActivation("execute-task", {
|
|
94
|
-
workingDirectory:
|
|
114
|
+
workingDirectory: fixtureRoot,
|
|
95
115
|
milestoneId: "M001",
|
|
96
116
|
sliceId: "S01",
|
|
97
117
|
sliceTitle: "Test Slice",
|
|
@@ -104,7 +124,8 @@ test("skillActivation default leaves no unresolved placeholder", () => {
|
|
|
104
124
|
carryForwardSection: "Carry forward",
|
|
105
125
|
resumeSection: "Resume",
|
|
106
126
|
priorTaskLines: "- (no prior tasks)",
|
|
107
|
-
|
|
127
|
+
templatesDir: join(fixtureRoot, "templates"),
|
|
128
|
+
taskSummaryPath: join(fixtureRoot, ".gsd", "milestones", "M001", "slices", "S01", "tasks", "T01-SUMMARY.md"),
|
|
108
129
|
inlinedTemplates: "Template",
|
|
109
130
|
verificationBudget: "~10K chars",
|
|
110
131
|
overridesSection: "",
|
|
@@ -116,7 +137,7 @@ test("skillActivation default leaves no unresolved placeholder", () => {
|
|
|
116
137
|
|
|
117
138
|
test("custom skillActivation is substituted into execute-task", () => {
|
|
118
139
|
const result = loadPrompt("execute-task", {
|
|
119
|
-
workingDirectory:
|
|
140
|
+
workingDirectory: fixtureRoot,
|
|
120
141
|
milestoneId: "M001",
|
|
121
142
|
sliceId: "S01",
|
|
122
143
|
sliceTitle: "Test Slice",
|
|
@@ -129,7 +150,8 @@ test("custom skillActivation is substituted into execute-task", () => {
|
|
|
129
150
|
carryForwardSection: "Carry forward",
|
|
130
151
|
resumeSection: "Resume",
|
|
131
152
|
priorTaskLines: "- (no prior tasks)",
|
|
132
|
-
|
|
153
|
+
templatesDir: join(fixtureRoot, "templates"),
|
|
154
|
+
taskSummaryPath: join(fixtureRoot, ".gsd", "milestones", "M001", "slices", "S01", "tasks", "T01-SUMMARY.md"),
|
|
133
155
|
inlinedTemplates: "Template",
|
|
134
156
|
verificationBudget: "~10K chars",
|
|
135
157
|
overridesSection: "",
|
|
@@ -153,12 +175,12 @@ test("guided resume prompt substitutes skillActivation", () => {
|
|
|
153
175
|
|
|
154
176
|
test("research-milestone prompt substitutes skillActivation", () => {
|
|
155
177
|
const result = loadPrompt("research-milestone", {
|
|
156
|
-
workingDirectory:
|
|
178
|
+
workingDirectory: fixtureRoot,
|
|
157
179
|
milestoneId: "M001",
|
|
158
180
|
milestoneTitle: "Test Milestone",
|
|
159
181
|
milestonePath: ".gsd/milestones/M001",
|
|
160
182
|
contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
|
|
161
|
-
outputPath: "
|
|
183
|
+
outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-RESEARCH.md"),
|
|
162
184
|
inlinedContext: "Context",
|
|
163
185
|
skillDiscoveryMode: "manual",
|
|
164
186
|
skillDiscoveryInstructions: " Discover skills manually.",
|
|
@@ -171,12 +193,12 @@ test("research-milestone prompt substitutes skillActivation", () => {
|
|
|
171
193
|
|
|
172
194
|
test("research-milestone prompt references gsd_summary_save, not direct write", () => {
|
|
173
195
|
const result = loadPrompt("research-milestone", {
|
|
174
|
-
workingDirectory:
|
|
196
|
+
workingDirectory: fixtureRoot,
|
|
175
197
|
milestoneId: "M001",
|
|
176
198
|
milestoneTitle: "Test Milestone",
|
|
177
199
|
milestonePath: ".gsd/milestones/M001",
|
|
178
200
|
contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
|
|
179
|
-
outputPath: "
|
|
201
|
+
outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-RESEARCH.md"),
|
|
180
202
|
inlinedContext: "Context",
|
|
181
203
|
skillDiscoveryMode: "manual",
|
|
182
204
|
skillDiscoveryInstructions: " Discover skills manually.",
|
|
@@ -199,7 +221,7 @@ test("research-milestone prompt references gsd_summary_save, not direct write",
|
|
|
199
221
|
|
|
200
222
|
test("research-slice prompt substitutes skillActivation", () => {
|
|
201
223
|
const result = loadPrompt("research-slice", {
|
|
202
|
-
workingDirectory:
|
|
224
|
+
workingDirectory: fixtureRoot,
|
|
203
225
|
milestoneId: "M001",
|
|
204
226
|
sliceId: "S01",
|
|
205
227
|
sliceTitle: "Test Slice",
|
|
@@ -207,7 +229,7 @@ test("research-slice prompt substitutes skillActivation", () => {
|
|
|
207
229
|
roadmapPath: ".gsd/milestones/M001/M001-ROADMAP.md",
|
|
208
230
|
contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
|
|
209
231
|
milestoneResearchPath: ".gsd/milestones/M001/M001-RESEARCH.md",
|
|
210
|
-
outputPath: "
|
|
232
|
+
outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "slices", "S01", "S01-RESEARCH.md"),
|
|
211
233
|
inlinedContext: "Context",
|
|
212
234
|
dependencySummaries: "",
|
|
213
235
|
skillDiscoveryMode: "manual",
|
|
@@ -221,15 +243,15 @@ test("research-slice prompt substitutes skillActivation", () => {
|
|
|
221
243
|
|
|
222
244
|
test("plan-milestone prompt substitutes skillActivation", () => {
|
|
223
245
|
const result = loadPrompt("plan-milestone", {
|
|
224
|
-
workingDirectory:
|
|
246
|
+
workingDirectory: fixtureRoot,
|
|
225
247
|
milestoneId: "M001",
|
|
226
248
|
milestoneTitle: "Test Milestone",
|
|
227
249
|
milestonePath: ".gsd/milestones/M001",
|
|
228
250
|
contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
|
|
229
251
|
researchPath: ".gsd/milestones/M001/M001-RESEARCH.md",
|
|
230
|
-
researchOutputPath: "
|
|
231
|
-
outputPath: "
|
|
232
|
-
secretsOutputPath: "
|
|
252
|
+
researchOutputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-RESEARCH.md"),
|
|
253
|
+
outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-ROADMAP.md"),
|
|
254
|
+
secretsOutputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-SECRETS.md"),
|
|
233
255
|
inlinedContext: "Context",
|
|
234
256
|
sourceFilePaths: "- source",
|
|
235
257
|
skillDiscoveryMode: "manual",
|
|
@@ -241,6 +263,33 @@ test("plan-milestone prompt substitutes skillActivation", () => {
|
|
|
241
263
|
assert.ok(!result.includes("{{skillActivation}}"));
|
|
242
264
|
});
|
|
243
265
|
|
|
266
|
+
test("plan-milestone prompt: compact planning gates survive template substitution", () => {
|
|
267
|
+
const result = loadPrompt("plan-milestone", {
|
|
268
|
+
workingDirectory: fixtureRoot,
|
|
269
|
+
milestoneId: "M001",
|
|
270
|
+
milestoneTitle: "Test Milestone",
|
|
271
|
+
milestonePath: ".gsd/milestones/M001",
|
|
272
|
+
contextPath: ".gsd/milestones/M001/M001-CONTEXT.md",
|
|
273
|
+
researchPath: ".gsd/milestones/M001/M001-RESEARCH.md",
|
|
274
|
+
researchOutputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-RESEARCH.md"),
|
|
275
|
+
outputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-ROADMAP.md"),
|
|
276
|
+
secretsOutputPath: join(fixtureRoot, ".gsd", "milestones", "M001", "M001-SECRETS.md"),
|
|
277
|
+
inlinedContext: "Context",
|
|
278
|
+
sourceFilePaths: "- source",
|
|
279
|
+
skillDiscoveryMode: "manual",
|
|
280
|
+
skillDiscoveryInstructions: " Discover skills manually.",
|
|
281
|
+
skillActivation: "Load milestone planning skills first.",
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
assert.ok(result.includes("Already Planned? Soft Brake"));
|
|
285
|
+
assert.ok(result.includes("gsd_plan_milestone"));
|
|
286
|
+
assert.ok(result.includes("Dependency format is comma-separated"));
|
|
287
|
+
assert.ok(result.includes("phases.progressive_planning"));
|
|
288
|
+
assert.ok(result.includes("Single-Slice Fast Path"));
|
|
289
|
+
assert.ok(result.includes("Secrets Manifest"));
|
|
290
|
+
assert.ok(!result.includes("{{"));
|
|
291
|
+
});
|
|
292
|
+
|
|
244
293
|
test("guided research slice prompt substitutes skillActivation", () => {
|
|
245
294
|
const result = loadPrompt("guided-research-slice", {
|
|
246
295
|
milestoneId: "M001",
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// GSD Extension — Plan-slice tool integration tests.
|
|
2
|
+
|
|
1
3
|
import test from 'node:test';
|
|
2
4
|
import assert from 'node:assert/strict';
|
|
3
5
|
import { mkdtempSync, mkdirSync, rmSync, readFileSync, existsSync, writeFileSync } from 'node:fs';
|
|
@@ -8,6 +10,7 @@ import { openDatabase, closeDatabase, insertMilestone, insertSlice, getSlice, ge
|
|
|
8
10
|
import { handlePlanSlice } from '../tools/plan-slice.ts';
|
|
9
11
|
import { parsePlan } from '../parsers-legacy.ts';
|
|
10
12
|
import { parseTaskPlanFile } from '../files.ts';
|
|
13
|
+
import { deriveState, invalidateStateCache } from '../state.ts';
|
|
11
14
|
|
|
12
15
|
function makeTmpBase(): string {
|
|
13
16
|
const base = mkdtempSync(join(tmpdir(), 'gsd-plan-slice-'));
|
|
@@ -98,6 +101,30 @@ test('handlePlanSlice writes slice/task planning state and renders plan artifact
|
|
|
98
101
|
}
|
|
99
102
|
});
|
|
100
103
|
|
|
104
|
+
test('handlePlanSlice advances DB-derived state out of planning immediately', async () => {
|
|
105
|
+
const base = makeTmpBase();
|
|
106
|
+
openDatabase(join(base, '.gsd', 'gsd.db'));
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
seedParentSlice();
|
|
110
|
+
|
|
111
|
+
invalidateStateCache();
|
|
112
|
+
const before = await deriveState(base);
|
|
113
|
+
assert.equal(before.phase, 'planning');
|
|
114
|
+
assert.equal(before.progress?.tasks?.total, 0);
|
|
115
|
+
|
|
116
|
+
const result = await handlePlanSlice(validParams(), base);
|
|
117
|
+
assert.ok(!('error' in result), `unexpected error: ${'error' in result ? result.error : ''}`);
|
|
118
|
+
|
|
119
|
+
invalidateStateCache();
|
|
120
|
+
const after = await deriveState(base);
|
|
121
|
+
assert.notEqual(after.phase, 'planning');
|
|
122
|
+
assert.equal(after.progress?.tasks?.total, 2);
|
|
123
|
+
} finally {
|
|
124
|
+
cleanup(base);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
|
|
101
128
|
test('handlePlanSlice leaves omitted enrichment fields empty instead of rendering placeholders', async () => {
|
|
102
129
|
const base = makeTmpBase();
|
|
103
130
|
openDatabase(join(base, '.gsd', 'gsd.db'));
|
|
@@ -304,6 +304,30 @@ describe("resolveImportPath", () => {
|
|
|
304
304
|
assert.ok(!result.exists);
|
|
305
305
|
assert.equal(result.resolvedPath, null);
|
|
306
306
|
});
|
|
307
|
+
|
|
308
|
+
test("resolves dotted TS module stem like .server via extension probing", (t) => {
|
|
309
|
+
const dir = mkdtempSync(join(tmpdir(), "post-exec-test-server-dot-"));
|
|
310
|
+
t.after(() => rmSync(dir, { recursive: true, force: true }));
|
|
311
|
+
mkdirSync(join(dir, "src"), { recursive: true });
|
|
312
|
+
writeFileSync(join(dir, "src", "route.server.ts"), "export {};\n");
|
|
313
|
+
writeFileSync(join(dir, "src", "main.ts"), "");
|
|
314
|
+
|
|
315
|
+
const result = resolveImportPath("./route.server", "src/main.ts", dir);
|
|
316
|
+
assert.ok(result.exists);
|
|
317
|
+
assert.ok(result.resolvedPath?.endsWith("route.server.ts"));
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
test("missing unknown explicit extension does not match code-extension shadow", (t) => {
|
|
321
|
+
const dir = mkdtempSync(join(tmpdir(), "post-exec-test-unknown-shadow-"));
|
|
322
|
+
t.after(() => rmSync(dir, { recursive: true, force: true }));
|
|
323
|
+
mkdirSync(join(dir, "src"), { recursive: true });
|
|
324
|
+
writeFileSync(join(dir, "src", "video.mp4.ts"), "export {};\n");
|
|
325
|
+
writeFileSync(join(dir, "src", "main.ts"), "");
|
|
326
|
+
|
|
327
|
+
const result = resolveImportPath("./video.mp4", "src/main.ts", dir);
|
|
328
|
+
assert.ok(!result.exists);
|
|
329
|
+
assert.equal(result.resolvedPath, null);
|
|
330
|
+
});
|
|
307
331
|
});
|
|
308
332
|
|
|
309
333
|
// ─── Import Resolution Check Tests ───────────────────────────────────────────
|
|
@@ -334,6 +358,28 @@ describe("checkImportResolution", () => {
|
|
|
334
358
|
}
|
|
335
359
|
});
|
|
336
360
|
|
|
361
|
+
test("ignores generated React Router +types imports", () => {
|
|
362
|
+
tempDir = join(tmpdir(), `post-exec-test-${Date.now()}`);
|
|
363
|
+
mkdirSync(tempDir, { recursive: true });
|
|
364
|
+
mkdirSync(join(tempDir, "app", "routes"), { recursive: true });
|
|
365
|
+
writeFileSync(
|
|
366
|
+
join(tempDir, "app", "routes", "root.tsx"),
|
|
367
|
+
"import type { Route } from './+types/root';\nexport default function Root() { return null; }"
|
|
368
|
+
);
|
|
369
|
+
|
|
370
|
+
try {
|
|
371
|
+
const task = createTask({
|
|
372
|
+
id: "T01",
|
|
373
|
+
key_files: ["app/routes/root.tsx"],
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
const results = checkImportResolution(task, [], tempDir);
|
|
377
|
+
assert.deepEqual(results, []);
|
|
378
|
+
} finally {
|
|
379
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
|
|
337
383
|
test("fails when import doesn't resolve", () => {
|
|
338
384
|
tempDir = join(tmpdir(), `post-exec-test-${Date.now()}`);
|
|
339
385
|
mkdirSync(tempDir, { recursive: true });
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Tests for the shared GSD pull request evidence generator.
|
|
3
|
+
|
|
4
|
+
import test from "node:test";
|
|
5
|
+
import assert from "node:assert/strict";
|
|
6
|
+
|
|
7
|
+
import { buildPrEvidence, type PrChangeType } from "../pr-evidence.ts";
|
|
8
|
+
|
|
9
|
+
test("pr-evidence: generated body includes contribution-required sections", () => {
|
|
10
|
+
const evidence = buildPrEvidence({
|
|
11
|
+
milestoneId: "M001",
|
|
12
|
+
milestoneTitle: "Authentication",
|
|
13
|
+
linkedIssue: "Closes #123",
|
|
14
|
+
summaries: ["### S01\nImplemented login."],
|
|
15
|
+
roadmapItems: ["- [x] **S01: Login**"],
|
|
16
|
+
metrics: ["**Units executed:** 3"],
|
|
17
|
+
testsRun: ["npm test"],
|
|
18
|
+
rollbackNotes: ["Revert the merge commit."],
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
assert.equal(evidence.title, "feat: Authentication");
|
|
22
|
+
for (const section of [
|
|
23
|
+
"## TL;DR",
|
|
24
|
+
"## What",
|
|
25
|
+
"## Why",
|
|
26
|
+
"## How",
|
|
27
|
+
"## Linked Issue",
|
|
28
|
+
"## Tests Run",
|
|
29
|
+
"## Change Type",
|
|
30
|
+
"## Rollback And Compatibility",
|
|
31
|
+
"## AI Assistance Disclosure",
|
|
32
|
+
]) {
|
|
33
|
+
assert.ok(evidence.body.includes(section), `missing section: ${section}`);
|
|
34
|
+
}
|
|
35
|
+
assert.ok(evidence.body.includes("Closes #123"));
|
|
36
|
+
assert.ok(evidence.body.includes("npm test"));
|
|
37
|
+
assert.ok(evidence.body.includes("This PR was prepared with AI assistance."));
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test("pr-evidence: every change type selects exactly one checklist row", () => {
|
|
41
|
+
const changeTypes: PrChangeType[] = ["feat", "fix", "refactor", "test", "docs", "chore"];
|
|
42
|
+
|
|
43
|
+
for (const changeType of changeTypes) {
|
|
44
|
+
const evidence = buildPrEvidence({ milestoneId: "M001", changeType });
|
|
45
|
+
const checkedRows = evidence.body.split("\n").filter((line) => line.startsWith("- [x] `"));
|
|
46
|
+
assert.deepEqual(checkedRows, [
|
|
47
|
+
`- [x] \`${changeType}\` - ${{
|
|
48
|
+
feat: "New feature or capability",
|
|
49
|
+
fix: "Bug fix",
|
|
50
|
+
refactor: "Code restructuring",
|
|
51
|
+
test: "Adding or updating tests",
|
|
52
|
+
docs: "Documentation only",
|
|
53
|
+
chore: "Build, CI, or tooling changes",
|
|
54
|
+
}[changeType]}`,
|
|
55
|
+
]);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("pr-evidence: missing issue, tests, and rollback data are explicit", () => {
|
|
60
|
+
const evidence = buildPrEvidence({ milestoneId: "M001", aiAssisted: false });
|
|
61
|
+
|
|
62
|
+
assert.ok(evidence.body.includes("Not specified. Add an issue link"));
|
|
63
|
+
assert.ok(evidence.body.includes("Not specified. Add exact verification commands"));
|
|
64
|
+
assert.ok(evidence.body.includes("No behavior-changing rollback notes recorded."));
|
|
65
|
+
assert.ok(!evidence.body.includes("## AI Assistance Disclosure"));
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("pr-evidence: subject metadata supports non-milestone PRs", () => {
|
|
69
|
+
const evidence = buildPrEvidence({
|
|
70
|
+
milestoneId: "M001",
|
|
71
|
+
subjectId: "S01",
|
|
72
|
+
subjectKind: "slice",
|
|
73
|
+
milestoneTitle: "Auth Slice",
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
assert.equal(evidence.title, "feat: Auth Slice");
|
|
77
|
+
assert.ok(evidence.body.includes("Ship slice S01 - Auth Slice"));
|
|
78
|
+
assert.ok(evidence.body.includes("Slice work is complete and ready for review."));
|
|
79
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Tests for canonical process recommendations by task size.
|
|
3
|
+
|
|
4
|
+
import test from "node:test";
|
|
5
|
+
import assert from "node:assert/strict";
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
formatRecommendedProcessPaths,
|
|
9
|
+
listRecommendedProcessPaths,
|
|
10
|
+
recommendProcessPath,
|
|
11
|
+
type ProcessTaskSize,
|
|
12
|
+
} from "../process-task-path.ts";
|
|
13
|
+
|
|
14
|
+
test("process task paths cover every Phase 7 task size with one command", () => {
|
|
15
|
+
const expected: ProcessTaskSize[] = [
|
|
16
|
+
"hotfix",
|
|
17
|
+
"bugfix",
|
|
18
|
+
"small-feature",
|
|
19
|
+
"large-feature",
|
|
20
|
+
"architecture-change",
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const paths = listRecommendedProcessPaths();
|
|
24
|
+
assert.deepEqual(paths.map((path) => path.taskSize), expected);
|
|
25
|
+
|
|
26
|
+
for (const taskSize of expected) {
|
|
27
|
+
const path = recommendProcessPath(taskSize);
|
|
28
|
+
assert.equal(path.taskSize, taskSize);
|
|
29
|
+
assert.ok(path.templateId.length > 0);
|
|
30
|
+
assert.match(path.command, /^\/gsd /);
|
|
31
|
+
assert.ok(path.phases.length > 0);
|
|
32
|
+
assert.ok(path.guidance.length > 0);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("process task paths route large work to the DB-backed milestone flow", () => {
|
|
37
|
+
const largeFeature = recommendProcessPath("large-feature");
|
|
38
|
+
assert.equal(largeFeature.templateId, "full-project");
|
|
39
|
+
assert.match(largeFeature.command, /\/gsd discuss/);
|
|
40
|
+
assert.match(largeFeature.command, /\/gsd auto/);
|
|
41
|
+
assert.match(largeFeature.guidance, /DB-backed milestone flow/);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test("formatted process paths are stable for command help", () => {
|
|
45
|
+
const formatted = formatRecommendedProcessPaths();
|
|
46
|
+
assert.match(formatted, /hotfix\s+\/gsd start hotfix/);
|
|
47
|
+
assert.match(formatted, /bugfix\s+\/gsd start bugfix/);
|
|
48
|
+
assert.match(formatted, /small-feature\s+\/gsd start small-feature/);
|
|
49
|
+
assert.match(formatted, /large-feature\s+\/gsd discuss/);
|
|
50
|
+
assert.match(formatted, /architecture-change\s+\/gsd start refactor/);
|
|
51
|
+
});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Regression test for #3696 — prompt step ordering and runtime fixes
|
|
3
3
|
*
|
|
4
4
|
* 1. complete-milestone.md: gsd_requirement_update (step 9) before
|
|
5
|
-
* gsd_complete_milestone
|
|
5
|
+
* gsd_complete_milestone, and completion remains the final durable write
|
|
6
6
|
* 2. complete-slice.md: uses gsd_requirement_update
|
|
7
7
|
* 3. register-extension.ts: _gsdEpipeGuard logs instead of re-throwing
|
|
8
8
|
* 4. register-hooks.ts: session_before_compact only checks isAutoActive
|
|
@@ -50,6 +50,21 @@ describe('prompt step ordering (#3696)', () => {
|
|
|
50
50
|
);
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
+
test('project and learnings writes appear before gsd_complete_milestone', () => {
|
|
54
|
+
const projectMatch = completeMilestoneMd.match(/^\d+\.\s.*PROJECT\.md/m);
|
|
55
|
+
const learningsMatch = completeMilestoneMd.match(/^\d+\.\s.*Extract structured learnings/m);
|
|
56
|
+
const completeMilestoneMatch = completeMilestoneMd.match(/^\d+\.\s.*gsd_complete_milestone/m);
|
|
57
|
+
assert.ok(projectMatch, 'PROJECT.md update should appear in a numbered step');
|
|
58
|
+
assert.ok(learningsMatch, 'learnings extraction should appear in a numbered step');
|
|
59
|
+
assert.ok(completeMilestoneMatch, 'gsd_complete_milestone should appear in a numbered step');
|
|
60
|
+
|
|
61
|
+
const projectIdx = completeMilestoneMd.indexOf(projectMatch![0]);
|
|
62
|
+
const learningsIdx = completeMilestoneMd.indexOf(learningsMatch![0]);
|
|
63
|
+
const completeMilestoneIdx = completeMilestoneMd.indexOf(completeMilestoneMatch![0]);
|
|
64
|
+
assert.ok(projectIdx < completeMilestoneIdx, 'PROJECT.md update must happen before gsd_complete_milestone');
|
|
65
|
+
assert.ok(learningsIdx < completeMilestoneIdx, 'learnings extraction must happen before gsd_complete_milestone');
|
|
66
|
+
});
|
|
67
|
+
|
|
53
68
|
test('complete-slice.md uses gsd_requirement_update', () => {
|
|
54
69
|
assert.match(completeSliceMd, /gsd_requirement_update/,
|
|
55
70
|
'complete-slice.md should reference gsd_requirement_update');
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Verifies the queue prompt renders compact discussion and write-gate 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("queue prompt renders compact draft, verification, 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-queue-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("queue", {
|
|
23
|
+
preamble: "Queue preamble.",
|
|
24
|
+
existingMilestonesContext: "No existing milestones.",
|
|
25
|
+
commitInstruction: "Commit queued milestone artifacts.",
|
|
26
|
+
inlinedTemplates: "## Context Template\n\nUse standard GSD context.",
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
assert.match(prompt, /Draft Awareness/);
|
|
30
|
+
assert.match(prompt, /What do you want to add\?/);
|
|
31
|
+
assert.match(prompt, /Investigate between question rounds/);
|
|
32
|
+
assert.match(prompt, /Pre-Write Verification/);
|
|
33
|
+
assert.match(prompt, /depth_verification/);
|
|
34
|
+
assert.match(prompt, /gsd_milestone_generate_id/);
|
|
35
|
+
assert.match(prompt, /gsd_summary_save/);
|
|
36
|
+
assert.doesNotMatch(prompt, /\{\{[a-zA-Z][a-zA-Z0-9_]*\}\}/);
|
|
37
|
+
});
|
|
@@ -24,7 +24,7 @@ describe("resource-loader import path", () => {
|
|
|
24
24
|
|
|
25
25
|
test("uses GSD_PKG_ROOT to resolve resource-loader from package root", () => {
|
|
26
26
|
// The fix uses GSD_PKG_ROOT (set by loader.ts) to construct an absolute
|
|
27
|
-
// file URL to dist/resource-loader.js — works in both source and deployed,
|
|
27
|
+
// file URL to dist/resource-runtime/resource-loader.js — works in both source and deployed,
|
|
28
28
|
// and on Windows where raw paths fail with ERR_UNSUPPORTED_ESM_URL_SCHEME.
|
|
29
29
|
assert.ok(
|
|
30
30
|
autoSrc.includes('process.env.GSD_PKG_ROOT'),
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// Each DB tool must register under its canonical gsd_concept_action name
|
|
4
|
-
// AND under a backward-compatible alias name.
|
|
5
|
-
// The alias must share the exact same execute function reference as the canonical tool.
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Verifies canonical and alias DB tool registration plus legacy alias telemetry.
|
|
6
3
|
|
|
7
4
|
import { test } from 'node:test';
|
|
8
5
|
import assert from 'node:assert/strict';
|
|
9
6
|
import { registerDbTools } from '../bootstrap/db-tools.ts';
|
|
7
|
+
import { getLegacyTelemetry, resetLegacyTelemetry } from '../legacy-telemetry.ts';
|
|
10
8
|
|
|
11
9
|
|
|
12
10
|
// ─── Mock PI ──────────────────────────────────────────────────────────────────
|
|
@@ -66,9 +64,9 @@ for (const { canonical, alias } of RENAME_MAP) {
|
|
|
66
64
|
assert.ok(aliasTool !== undefined, `Alias tool "${alias}" should be registered`);
|
|
67
65
|
}
|
|
68
66
|
|
|
69
|
-
// ─── Execute function
|
|
67
|
+
// ─── Execute function wrapping ───────────────────────────────────────────────
|
|
70
68
|
|
|
71
|
-
console.log('\n── Tool naming: execute
|
|
69
|
+
console.log('\n── Tool naming: alias execute wrapper ──');
|
|
72
70
|
|
|
73
71
|
for (const { canonical, alias } of RENAME_MAP) {
|
|
74
72
|
const canonicalTool = pi.tools.find((t: any) => t.name === canonical);
|
|
@@ -76,12 +74,37 @@ for (const { canonical, alias } of RENAME_MAP) {
|
|
|
76
74
|
|
|
77
75
|
if (canonicalTool && aliasTool) {
|
|
78
76
|
assert.ok(
|
|
79
|
-
canonicalTool.execute
|
|
80
|
-
`"${
|
|
77
|
+
canonicalTool.execute !== aliasTool.execute,
|
|
78
|
+
`"${alias}" should wrap "${canonical}" so alias usage can be counted`,
|
|
81
79
|
);
|
|
82
80
|
}
|
|
83
81
|
}
|
|
84
82
|
|
|
83
|
+
test("alias execute increments legacy MCP alias telemetry before delegating", async () => {
|
|
84
|
+
const canonicalTool = pi.tools.find((t: any) => t.name === "gsd_decision_save");
|
|
85
|
+
const aliasTool = pi.tools.find((t: any) => t.name === "gsd_save_decision");
|
|
86
|
+
assert.ok(canonicalTool);
|
|
87
|
+
assert.ok(aliasTool);
|
|
88
|
+
|
|
89
|
+
const originalCanonicalExecute = canonicalTool.execute;
|
|
90
|
+
try {
|
|
91
|
+
resetLegacyTelemetry();
|
|
92
|
+
let delegated = false;
|
|
93
|
+
canonicalTool.execute = async () => {
|
|
94
|
+
delegated = true;
|
|
95
|
+
return { content: [{ type: "text", text: "ok" }], details: { ok: true } };
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
await aliasTool.execute("call-1", {}, undefined, undefined, undefined);
|
|
99
|
+
|
|
100
|
+
assert.equal(delegated, true);
|
|
101
|
+
assert.equal(getLegacyTelemetry()["legacy.mcpAliasUsed"], 1);
|
|
102
|
+
} finally {
|
|
103
|
+
canonicalTool.execute = originalCanonicalExecute;
|
|
104
|
+
resetLegacyTelemetry();
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
85
108
|
// ─── Alias descriptions include "(alias for ...)" ───────────────────────────
|
|
86
109
|
|
|
87
110
|
console.log('\n── Tool naming: alias descriptions ──');
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
// GSD-2
|
|
2
|
-
//
|
|
3
|
-
// builder produces a prompt matching expectations.
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Tests unit context composer rendering, budgets, and reassess-roadmap prompt integration.
|
|
4
3
|
|
|
5
4
|
import test from "node:test";
|
|
6
5
|
import assert from "node:assert/strict";
|
|
@@ -122,9 +121,9 @@ test("Context Mode composer: standalone output starts with heading and includes
|
|
|
122
121
|
assert.ok(out.startsWith("## Context Mode"));
|
|
123
122
|
assert.match(out, /execution lane/i);
|
|
124
123
|
assert.match(out, /`gsd_exec`/);
|
|
125
|
-
assert.match(out, /noisy
|
|
124
|
+
assert.match(out, /noisy commands/);
|
|
126
125
|
assert.match(out, /`gsd_exec_search`/);
|
|
127
|
-
assert.match(out, /before
|
|
126
|
+
assert.match(out, /before reruns/);
|
|
128
127
|
assert.match(out, /`gsd_resume`/);
|
|
129
128
|
assert.match(out, /after compaction or resume/);
|
|
130
129
|
});
|
|
@@ -137,6 +136,7 @@ test("Context Mode composer: nested output is compact single sentence", () => {
|
|
|
137
136
|
assert.match(out, /`gsd_exec`/);
|
|
138
137
|
assert.match(out, /`gsd_exec_search`/);
|
|
139
138
|
assert.match(out, /`gsd_resume`/);
|
|
139
|
+
assert.ok(out.length < 180, `nested guidance should stay compact, got ${out.length} chars`);
|
|
140
140
|
});
|
|
141
141
|
|
|
142
142
|
// ─── Integration: migrated buildReassessRoadmapPrompt ─────────────────────
|
|
@@ -224,7 +224,7 @@ test("#4782 phase 2: buildReassessRoadmapPrompt emits composer-shaped context wi
|
|
|
224
224
|
|
|
225
225
|
const fakeBase: BaseResolverContext = {
|
|
226
226
|
unitType: "reassess-roadmap",
|
|
227
|
-
basePath:
|
|
227
|
+
basePath: process.env.GSD_TEST_WORKSPACE_ROOT ?? process.cwd(),
|
|
228
228
|
milestoneId: "M001",
|
|
229
229
|
sliceId: "S01",
|
|
230
230
|
};
|