gsd-pi 2.76.0-dev.fe143342a → 2.77.0-dev.1d17f366c
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/README.md +17 -35
- package/dist/claude-cli-check.js +32 -3
- package/dist/cli-web-branch.d.ts +1 -0
- package/dist/cli-web-branch.js +3 -0
- package/dist/cli.js +38 -2
- package/dist/extension-discovery.d.ts +6 -0
- package/dist/extension-discovery.js +37 -0
- package/dist/extension-registry.d.ts +3 -0
- package/dist/extension-sort.d.ts +18 -0
- package/dist/extension-sort.js +114 -0
- package/dist/extension-validator.d.ts +47 -0
- package/dist/extension-validator.js +127 -0
- package/dist/loader.js +35 -7
- package/dist/onboarding.js +45 -0
- package/dist/provider-migrations.d.ts +18 -0
- package/dist/provider-migrations.js +14 -0
- package/dist/resources/extensions/claude-code-cli/readiness.js +4 -3
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +78 -59
- package/dist/resources/extensions/cmux/index.js +20 -0
- package/dist/resources/extensions/github-sync/templates.js +103 -0
- package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
- package/dist/resources/extensions/google-search/index.js +3 -375
- package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
- package/dist/resources/extensions/gsd/auto/loop.js +90 -2
- package/dist/resources/extensions/gsd/auto/phases.js +95 -21
- package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +48 -4
- package/dist/resources/extensions/gsd/auto/session.js +18 -1
- package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +115 -17
- package/dist/resources/extensions/gsd/auto-loop.js +1 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +1 -1
- package/dist/resources/extensions/gsd/auto-post-unit.js +90 -2
- package/dist/resources/extensions/gsd/auto-prompts.js +14 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +46 -1
- package/dist/resources/extensions/gsd/auto-start.js +45 -39
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +109 -61
- package/dist/resources/extensions/gsd/auto.js +97 -31
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +27 -1
- package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +4 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +11 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +17 -6
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -6
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +34 -2
- package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
- package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
- package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
- package/dist/resources/extensions/gsd/dispatch-guard.js +29 -3
- package/dist/resources/extensions/gsd/file-lock.js +49 -9
- package/dist/resources/extensions/gsd/git-service.js +1 -0
- package/dist/resources/extensions/gsd/gitignore.js +2 -0
- package/dist/resources/extensions/gsd/gsd-db.js +90 -30
- package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
- package/dist/resources/extensions/gsd/guided-flow.js +212 -9
- package/dist/resources/extensions/gsd/health-widget.js +4 -1
- package/dist/resources/extensions/gsd/journal.js +17 -2
- package/dist/resources/extensions/gsd/key-manager.js +22 -0
- package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
- package/dist/resources/extensions/gsd/milestone-summary-classifier.js +37 -0
- package/dist/resources/extensions/gsd/model-router.js +36 -3
- package/dist/resources/extensions/gsd/notifications.js +30 -16
- package/dist/resources/extensions/gsd/pre-execution-checks.js +31 -6
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
- package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/dist/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/dist/resources/extensions/gsd/prompts/system.md +1 -0
- package/dist/resources/extensions/gsd/reports.js +5 -4
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +12 -4
- package/dist/resources/extensions/gsd/safety/safety-harness.js +5 -1
- package/dist/resources/extensions/gsd/state-transition-matrix.js +118 -0
- package/dist/resources/extensions/gsd/state.js +25 -25
- package/dist/resources/extensions/gsd/token-counter.js +22 -5
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +16 -10
- package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
- package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
- package/dist/resources/extensions/gsd/uok/audit.js +18 -2
- package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +33 -0
- package/dist/resources/extensions/gsd/uok/execution-graph.js +10 -0
- package/dist/resources/extensions/gsd/uok/gitops.js +2 -1
- package/dist/resources/extensions/gsd/uok/loop-adapter.js +37 -10
- package/dist/resources/extensions/gsd/uok/parity-report.js +58 -0
- package/dist/resources/extensions/gsd/uok/plan-v2.js +30 -7
- package/dist/resources/extensions/gsd/uok/writer.js +82 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +1 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +50 -10
- package/dist/resources/extensions/mcp-client/auth.js +10 -1
- package/dist/resources/extensions/mcp-client/index.js +118 -9
- package/dist/resources/extensions/shared/cmux-events.js +12 -0
- package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
- package/dist/resources/skills/create-skill/SKILL.md +2 -2
- package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
- package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
- package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
- package/dist/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/dist/resources/skills/write-docs/SKILL.md +2 -1
- 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 +9 -9
- 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/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 +9 -9
- package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- 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/2826.e9f5195e91f9cad2.js +11 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-5fc74f13a25fa1bb.js → webpack-2e68521d7c82f7c2.js} +1 -1
- package/dist/welcome-screen.js +6 -1
- package/dist/wizard.js +2 -0
- package/package.json +16 -14
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/README.md +3 -3
- package/packages/mcp-server/dist/env-writer.d.ts +1 -0
- package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
- package/packages/mcp-server/dist/env-writer.js +74 -6
- package/packages/mcp-server/dist/env-writer.js.map +1 -1
- package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
- package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
- package/packages/mcp-server/dist/remote-questions.js +732 -0
- package/packages/mcp-server/dist/remote-questions.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts +7 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +95 -10
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts +14 -0
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +49 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +15 -6
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +9 -3
- package/packages/mcp-server/src/env-writer.test.ts +79 -1
- package/packages/mcp-server/src/env-writer.ts +76 -6
- package/packages/mcp-server/src/mcp-server.test.ts +67 -0
- package/packages/mcp-server/src/readers/readers.test.ts +5 -1
- package/packages/mcp-server/src/remote-questions.test.ts +294 -0
- package/packages/mcp-server/src/remote-questions.ts +916 -0
- package/packages/mcp-server/src/server.ts +118 -16
- package/packages/mcp-server/src/session-manager.ts +43 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +44 -0
- package/packages/mcp-server/src/workflow-tools.ts +19 -6
- package/packages/mcp-server/tsconfig.test.json +19 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +6 -1
- package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/package.json +6 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +220 -15
- package/packages/pi-ai/dist/models/custom.d.ts +38 -0
- package/packages/pi-ai/dist/models/custom.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/custom.js +41 -0
- package/packages/pi-ai/dist/models/custom.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +27 -4
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +8 -3
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +16 -1
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/package.json +6 -1
- package/packages/pi-ai/src/models/custom.ts +42 -0
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +26 -5
- package/packages/pi-ai/src/providers/anthropic.ts +9 -3
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
- package/packages/pi-ai/src/providers/simple-options.ts +17 -1
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +3 -2
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +7 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
- package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
- package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
- package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +3 -2
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +24 -8
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +14 -0
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +11 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -2
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +14 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +21 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +3 -3
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
- package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -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.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +13 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +6 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +3 -2
- package/packages/pi-coding-agent/src/core/agent-session.ts +11 -0
- package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
- package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
- package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
- package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
- package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
- package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
- package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +24 -11
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +2 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +15 -0
- package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +13 -0
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -2
- package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +16 -0
- package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
- package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +30 -1
- package/packages/pi-coding-agent/src/core/session-manager.ts +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +3 -3
- package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +14 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +13 -1
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js +12 -5
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +21 -0
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
- package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.js +20 -0
- package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
- package/packages/pi-tui/package.json +6 -1
- package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -5
- package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +27 -0
- package/packages/pi-tui/src/stdin-buffer.ts +26 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/package.json +6 -1
- package/pkg/package.json +1 -1
- package/scripts/install.js +512 -0
- package/scripts/lib/workspace-manifest.cjs +86 -0
- package/scripts/link-workspace-packages.cjs +5 -17
- package/scripts/postinstall.js +9 -178
- package/src/resources/extensions/claude-code-cli/readiness.ts +4 -3
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +91 -63
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +114 -12
- package/src/resources/extensions/cmux/index.ts +35 -10
- package/src/resources/extensions/github-sync/templates.ts +151 -0
- package/src/resources/extensions/github-sync/tests/templates.test.ts +59 -0
- package/src/resources/extensions/google-search/extension-manifest.json +5 -4
- package/src/resources/extensions/google-search/index.ts +9 -470
- package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +14 -1
- package/src/resources/extensions/gsd/auto/loop.ts +104 -2
- package/src/resources/extensions/gsd/auto/phases.ts +123 -21
- package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
- package/src/resources/extensions/gsd/auto/run-unit.ts +56 -4
- package/src/resources/extensions/gsd/auto/session.ts +28 -1
- package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
- package/src/resources/extensions/gsd/auto/types.ts +1 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +117 -16
- package/src/resources/extensions/gsd/auto-loop.ts +1 -1
- package/src/resources/extensions/gsd/auto-model-selection.ts +1 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +92 -3
- package/src/resources/extensions/gsd/auto-prompts.ts +28 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +40 -1
- package/src/resources/extensions/gsd/auto-start.ts +48 -52
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +122 -68
- package/src/resources/extensions/gsd/auto.ts +105 -35
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +34 -1
- package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +11 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +18 -6
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +13 -9
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +35 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
- package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
- package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
- package/src/resources/extensions/gsd/dispatch-guard.ts +26 -2
- package/src/resources/extensions/gsd/file-lock.ts +84 -11
- package/src/resources/extensions/gsd/git-service.ts +1 -0
- package/src/resources/extensions/gsd/gitignore.ts +2 -1
- package/src/resources/extensions/gsd/gsd-db.ts +92 -32
- package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
- package/src/resources/extensions/gsd/guided-flow.ts +259 -10
- package/src/resources/extensions/gsd/health-widget.ts +3 -1
- package/src/resources/extensions/gsd/journal.ts +29 -3
- package/src/resources/extensions/gsd/key-manager.ts +22 -0
- package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
- package/src/resources/extensions/gsd/milestone-summary-classifier.ts +42 -0
- package/src/resources/extensions/gsd/model-router.ts +42 -1
- package/src/resources/extensions/gsd/notifications.ts +27 -15
- package/src/resources/extensions/gsd/pre-execution-checks.ts +33 -7
- package/src/resources/extensions/gsd/preferences-types.ts +8 -0
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
- package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/src/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/src/resources/extensions/gsd/prompts/system.md +1 -0
- package/src/resources/extensions/gsd/reports.ts +5 -4
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +16 -3
- package/src/resources/extensions/gsd/safety/safety-harness.ts +9 -0
- package/src/resources/extensions/gsd/state-transition-matrix.ts +152 -0
- package/src/resources/extensions/gsd/state.ts +35 -30
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +238 -4
- package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +122 -0
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +141 -0
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
- package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +61 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +161 -0
- package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +1 -2
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +14 -9
- package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/execution-entry-missing-context-4671.test.ts +173 -0
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
- package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +131 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +296 -1
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/key-manager.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/milestone-summary-classifier.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +337 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +39 -25
- package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +181 -0
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
- package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +9 -3
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +413 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
- package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/uok-parity-report.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +42 -2
- package/src/resources/extensions/gsd/tests/uok-writer.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +138 -5
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -5
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +64 -0
- package/src/resources/extensions/gsd/token-counter.ts +22 -5
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
- package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
- package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
- package/src/resources/extensions/gsd/uok/audit.ts +20 -2
- package/src/resources/extensions/gsd/uok/contracts.ts +65 -0
- package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +56 -0
- package/src/resources/extensions/gsd/uok/execution-graph.ts +22 -0
- package/src/resources/extensions/gsd/uok/gitops.ts +6 -1
- package/src/resources/extensions/gsd/uok/loop-adapter.ts +45 -10
- package/src/resources/extensions/gsd/uok/parity-report.ts +84 -0
- package/src/resources/extensions/gsd/uok/plan-v2.ts +39 -8
- package/src/resources/extensions/gsd/uok/writer.ts +113 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +23 -3
- package/src/resources/extensions/gsd/worktree-manager.ts +1 -0
- package/src/resources/extensions/gsd/worktree-resolver.ts +54 -9
- package/src/resources/extensions/mcp-client/auth.ts +12 -1
- package/src/resources/extensions/mcp-client/index.ts +129 -10
- package/src/resources/extensions/shared/cmux-events.ts +59 -0
- package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
- package/src/resources/skills/create-skill/SKILL.md +2 -2
- package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
- package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
- package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
- package/src/resources/skills/verify-before-complete/SKILL.md +2 -1
- package/src/resources/skills/write-docs/SKILL.md +2 -1
- package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +0 -9
- /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → vidAVJkURvTJ0_V2-64ro}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{n21VtX2hZlkpdEUO_nU4z → vidAVJkURvTJ0_V2-64ro}/_ssgManifest.js +0 -0
|
@@ -99,7 +99,7 @@ describe('gsd-db', () => {
|
|
|
99
99
|
// Check schema_version table
|
|
100
100
|
const adapter = _getAdapter()!;
|
|
101
101
|
const version = adapter.prepare('SELECT MAX(version) as version FROM schema_version').get();
|
|
102
|
-
assert.deepStrictEqual(version?.['version'],
|
|
102
|
+
assert.deepStrictEqual(version?.['version'], 22, 'schema version should be 22');
|
|
103
103
|
|
|
104
104
|
// Check tables exist by querying them
|
|
105
105
|
const dRows = adapter.prepare('SELECT count(*) as cnt FROM decisions').get();
|
|
@@ -469,6 +469,301 @@ describe('gsd-db', () => {
|
|
|
469
469
|
cleanup(dbPath);
|
|
470
470
|
});
|
|
471
471
|
|
|
472
|
+
test('gsd-db: pre-v18 DB with memory_sources missing scope opens without crash (issue #4607)', () => {
|
|
473
|
+
// Regression: initSchema() ran CREATE INDEX on memories.scope and
|
|
474
|
+
// memory_sources.scope unconditionally, before the v18 migration adds those
|
|
475
|
+
// columns to existing rows. Databases at schema v17 that had a
|
|
476
|
+
// memory_sources table without the scope column crashed on open with
|
|
477
|
+
// "no such column: scope".
|
|
478
|
+
// The fix moves those index statements inside the v18 migration guard so
|
|
479
|
+
// they only execute after the column already exists.
|
|
480
|
+
const dbPath = tempDbPath();
|
|
481
|
+
const legacyDb = openRawSqliteForTest(dbPath);
|
|
482
|
+
|
|
483
|
+
// Build a realistic v17 schema: full table set that existed before v18,
|
|
484
|
+
// with memory_sources present but missing the scope column that v18 adds.
|
|
485
|
+
legacyDb.exec(`
|
|
486
|
+
CREATE TABLE schema_version (
|
|
487
|
+
version INTEGER NOT NULL,
|
|
488
|
+
applied_at TEXT NOT NULL
|
|
489
|
+
);
|
|
490
|
+
INSERT INTO schema_version(version, applied_at) VALUES (17, '2026-01-01T00:00:00.000Z');
|
|
491
|
+
|
|
492
|
+
CREATE TABLE decisions (
|
|
493
|
+
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
494
|
+
id TEXT NOT NULL UNIQUE,
|
|
495
|
+
when_context TEXT NOT NULL DEFAULT '',
|
|
496
|
+
scope TEXT NOT NULL DEFAULT '',
|
|
497
|
+
decision TEXT NOT NULL DEFAULT '',
|
|
498
|
+
choice TEXT NOT NULL DEFAULT '',
|
|
499
|
+
rationale TEXT NOT NULL DEFAULT '',
|
|
500
|
+
revisable TEXT NOT NULL DEFAULT '',
|
|
501
|
+
made_by TEXT NOT NULL DEFAULT 'agent',
|
|
502
|
+
superseded_by TEXT DEFAULT NULL
|
|
503
|
+
);
|
|
504
|
+
|
|
505
|
+
CREATE TABLE requirements (
|
|
506
|
+
id TEXT PRIMARY KEY,
|
|
507
|
+
class TEXT NOT NULL DEFAULT '',
|
|
508
|
+
status TEXT NOT NULL DEFAULT '',
|
|
509
|
+
description TEXT NOT NULL DEFAULT '',
|
|
510
|
+
why TEXT NOT NULL DEFAULT '',
|
|
511
|
+
source TEXT NOT NULL DEFAULT '',
|
|
512
|
+
primary_owner TEXT NOT NULL DEFAULT '',
|
|
513
|
+
supporting_slices TEXT NOT NULL DEFAULT '',
|
|
514
|
+
validation TEXT NOT NULL DEFAULT '',
|
|
515
|
+
notes TEXT NOT NULL DEFAULT '',
|
|
516
|
+
full_content TEXT NOT NULL DEFAULT '',
|
|
517
|
+
superseded_by TEXT DEFAULT NULL
|
|
518
|
+
);
|
|
519
|
+
|
|
520
|
+
CREATE TABLE memories (
|
|
521
|
+
seq INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
522
|
+
id TEXT NOT NULL UNIQUE,
|
|
523
|
+
category TEXT NOT NULL,
|
|
524
|
+
content TEXT NOT NULL,
|
|
525
|
+
confidence REAL NOT NULL DEFAULT 0.8,
|
|
526
|
+
source_unit_type TEXT,
|
|
527
|
+
source_unit_id TEXT,
|
|
528
|
+
created_at TEXT NOT NULL,
|
|
529
|
+
updated_at TEXT NOT NULL,
|
|
530
|
+
superseded_by TEXT DEFAULT NULL,
|
|
531
|
+
hit_count INTEGER NOT NULL DEFAULT 0
|
|
532
|
+
);
|
|
533
|
+
|
|
534
|
+
CREATE TABLE memory_processed_units (
|
|
535
|
+
unit_key TEXT PRIMARY KEY,
|
|
536
|
+
activity_file TEXT,
|
|
537
|
+
processed_at TEXT NOT NULL
|
|
538
|
+
);
|
|
539
|
+
|
|
540
|
+
-- memory_sources existed before v18 but lacked the scope column
|
|
541
|
+
CREATE TABLE memory_sources (
|
|
542
|
+
id TEXT PRIMARY KEY,
|
|
543
|
+
kind TEXT NOT NULL,
|
|
544
|
+
uri TEXT,
|
|
545
|
+
title TEXT,
|
|
546
|
+
content TEXT NOT NULL,
|
|
547
|
+
content_hash TEXT NOT NULL UNIQUE,
|
|
548
|
+
imported_at TEXT NOT NULL
|
|
549
|
+
);
|
|
550
|
+
|
|
551
|
+
CREATE TABLE milestones (
|
|
552
|
+
id TEXT PRIMARY KEY,
|
|
553
|
+
title TEXT NOT NULL DEFAULT '',
|
|
554
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
555
|
+
depends_on TEXT NOT NULL DEFAULT '[]',
|
|
556
|
+
created_at TEXT NOT NULL DEFAULT '',
|
|
557
|
+
completed_at TEXT DEFAULT NULL,
|
|
558
|
+
vision TEXT NOT NULL DEFAULT '',
|
|
559
|
+
success_criteria TEXT NOT NULL DEFAULT '[]',
|
|
560
|
+
key_risks TEXT NOT NULL DEFAULT '[]',
|
|
561
|
+
proof_strategy TEXT NOT NULL DEFAULT '[]',
|
|
562
|
+
verification_contract TEXT NOT NULL DEFAULT '',
|
|
563
|
+
verification_integration TEXT NOT NULL DEFAULT '',
|
|
564
|
+
verification_operational TEXT NOT NULL DEFAULT '',
|
|
565
|
+
verification_uat TEXT NOT NULL DEFAULT '',
|
|
566
|
+
definition_of_done TEXT NOT NULL DEFAULT '[]',
|
|
567
|
+
requirement_coverage TEXT NOT NULL DEFAULT '',
|
|
568
|
+
boundary_map_markdown TEXT NOT NULL DEFAULT ''
|
|
569
|
+
);
|
|
570
|
+
|
|
571
|
+
CREATE TABLE slices (
|
|
572
|
+
milestone_id TEXT NOT NULL,
|
|
573
|
+
id TEXT NOT NULL,
|
|
574
|
+
title TEXT NOT NULL DEFAULT '',
|
|
575
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
576
|
+
risk TEXT NOT NULL DEFAULT 'medium',
|
|
577
|
+
depends TEXT NOT NULL DEFAULT '[]',
|
|
578
|
+
demo TEXT NOT NULL DEFAULT '',
|
|
579
|
+
created_at TEXT NOT NULL DEFAULT '',
|
|
580
|
+
completed_at TEXT DEFAULT NULL,
|
|
581
|
+
full_summary_md TEXT NOT NULL DEFAULT '',
|
|
582
|
+
full_uat_md TEXT NOT NULL DEFAULT '',
|
|
583
|
+
goal TEXT NOT NULL DEFAULT '',
|
|
584
|
+
success_criteria TEXT NOT NULL DEFAULT '',
|
|
585
|
+
proof_level TEXT NOT NULL DEFAULT '',
|
|
586
|
+
integration_closure TEXT NOT NULL DEFAULT '',
|
|
587
|
+
observability_impact TEXT NOT NULL DEFAULT '',
|
|
588
|
+
sequence INTEGER DEFAULT 0,
|
|
589
|
+
PRIMARY KEY (milestone_id, id)
|
|
590
|
+
);
|
|
591
|
+
|
|
592
|
+
CREATE TABLE tasks (
|
|
593
|
+
milestone_id TEXT NOT NULL,
|
|
594
|
+
slice_id TEXT NOT NULL,
|
|
595
|
+
id TEXT NOT NULL,
|
|
596
|
+
title TEXT NOT NULL DEFAULT '',
|
|
597
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
598
|
+
one_liner TEXT NOT NULL DEFAULT '',
|
|
599
|
+
narrative TEXT NOT NULL DEFAULT '',
|
|
600
|
+
verification_result TEXT NOT NULL DEFAULT '',
|
|
601
|
+
duration TEXT NOT NULL DEFAULT '',
|
|
602
|
+
completed_at TEXT DEFAULT NULL,
|
|
603
|
+
blocker_discovered INTEGER DEFAULT 0,
|
|
604
|
+
deviations TEXT NOT NULL DEFAULT '',
|
|
605
|
+
known_issues TEXT NOT NULL DEFAULT '',
|
|
606
|
+
key_files TEXT NOT NULL DEFAULT '[]',
|
|
607
|
+
key_decisions TEXT NOT NULL DEFAULT '[]',
|
|
608
|
+
full_summary_md TEXT NOT NULL DEFAULT '',
|
|
609
|
+
description TEXT NOT NULL DEFAULT '',
|
|
610
|
+
estimate TEXT NOT NULL DEFAULT '',
|
|
611
|
+
files TEXT NOT NULL DEFAULT '[]',
|
|
612
|
+
verify TEXT NOT NULL DEFAULT '',
|
|
613
|
+
inputs TEXT NOT NULL DEFAULT '[]',
|
|
614
|
+
expected_output TEXT NOT NULL DEFAULT '[]',
|
|
615
|
+
observability_impact TEXT NOT NULL DEFAULT '',
|
|
616
|
+
full_plan_md TEXT NOT NULL DEFAULT '',
|
|
617
|
+
sequence INTEGER DEFAULT 0,
|
|
618
|
+
blocker_source TEXT NOT NULL DEFAULT '',
|
|
619
|
+
escalation_pending INTEGER NOT NULL DEFAULT 0,
|
|
620
|
+
escalation_awaiting_review INTEGER NOT NULL DEFAULT 0,
|
|
621
|
+
escalation_artifact_path TEXT DEFAULT NULL,
|
|
622
|
+
escalation_override_applied_at TEXT DEFAULT NULL,
|
|
623
|
+
PRIMARY KEY (milestone_id, slice_id, id)
|
|
624
|
+
);
|
|
625
|
+
|
|
626
|
+
CREATE TABLE replan_history (
|
|
627
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
628
|
+
milestone_id TEXT NOT NULL DEFAULT '',
|
|
629
|
+
slice_id TEXT DEFAULT NULL,
|
|
630
|
+
task_id TEXT DEFAULT NULL,
|
|
631
|
+
summary TEXT NOT NULL DEFAULT '',
|
|
632
|
+
previous_artifact_path TEXT DEFAULT NULL,
|
|
633
|
+
replacement_artifact_path TEXT DEFAULT NULL,
|
|
634
|
+
full_content TEXT NOT NULL DEFAULT '',
|
|
635
|
+
created_at TEXT NOT NULL DEFAULT ''
|
|
636
|
+
);
|
|
637
|
+
|
|
638
|
+
CREATE TABLE quality_gates (
|
|
639
|
+
milestone_id TEXT NOT NULL,
|
|
640
|
+
slice_id TEXT NOT NULL,
|
|
641
|
+
gate_id TEXT NOT NULL,
|
|
642
|
+
scope TEXT NOT NULL DEFAULT 'slice',
|
|
643
|
+
task_id TEXT NOT NULL DEFAULT '',
|
|
644
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
645
|
+
verdict TEXT NOT NULL DEFAULT '',
|
|
646
|
+
rationale TEXT NOT NULL DEFAULT '',
|
|
647
|
+
findings TEXT NOT NULL DEFAULT '',
|
|
648
|
+
evaluated_at TEXT DEFAULT NULL,
|
|
649
|
+
PRIMARY KEY (milestone_id, slice_id, gate_id, task_id)
|
|
650
|
+
);
|
|
651
|
+
|
|
652
|
+
CREATE TABLE verification_evidence (
|
|
653
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
654
|
+
task_id TEXT NOT NULL DEFAULT '',
|
|
655
|
+
slice_id TEXT NOT NULL DEFAULT '',
|
|
656
|
+
milestone_id TEXT NOT NULL DEFAULT '',
|
|
657
|
+
command TEXT NOT NULL DEFAULT '',
|
|
658
|
+
exit_code INTEGER DEFAULT 0,
|
|
659
|
+
verdict TEXT NOT NULL DEFAULT '',
|
|
660
|
+
duration_ms INTEGER DEFAULT 0,
|
|
661
|
+
created_at TEXT NOT NULL DEFAULT ''
|
|
662
|
+
);
|
|
663
|
+
|
|
664
|
+
CREATE TABLE slice_dependencies (
|
|
665
|
+
milestone_id TEXT NOT NULL,
|
|
666
|
+
slice_id TEXT NOT NULL,
|
|
667
|
+
depends_on_slice_id TEXT NOT NULL,
|
|
668
|
+
PRIMARY KEY (milestone_id, slice_id, depends_on_slice_id)
|
|
669
|
+
);
|
|
670
|
+
|
|
671
|
+
CREATE TABLE gate_runs (
|
|
672
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
673
|
+
trace_id TEXT NOT NULL,
|
|
674
|
+
turn_id TEXT NOT NULL,
|
|
675
|
+
gate_id TEXT NOT NULL,
|
|
676
|
+
gate_type TEXT NOT NULL DEFAULT '',
|
|
677
|
+
unit_type TEXT DEFAULT NULL,
|
|
678
|
+
unit_id TEXT DEFAULT NULL,
|
|
679
|
+
milestone_id TEXT DEFAULT NULL,
|
|
680
|
+
slice_id TEXT DEFAULT NULL,
|
|
681
|
+
task_id TEXT DEFAULT NULL,
|
|
682
|
+
outcome TEXT NOT NULL DEFAULT 'pass',
|
|
683
|
+
failure_class TEXT NOT NULL DEFAULT 'none',
|
|
684
|
+
rationale TEXT NOT NULL DEFAULT '',
|
|
685
|
+
findings TEXT NOT NULL DEFAULT '',
|
|
686
|
+
attempt INTEGER NOT NULL DEFAULT 1,
|
|
687
|
+
max_attempts INTEGER NOT NULL DEFAULT 1,
|
|
688
|
+
retryable INTEGER NOT NULL DEFAULT 0,
|
|
689
|
+
evaluated_at TEXT NOT NULL DEFAULT ''
|
|
690
|
+
);
|
|
691
|
+
|
|
692
|
+
CREATE TABLE turn_git_transactions (
|
|
693
|
+
trace_id TEXT NOT NULL,
|
|
694
|
+
turn_id TEXT NOT NULL,
|
|
695
|
+
unit_type TEXT DEFAULT NULL,
|
|
696
|
+
unit_id TEXT DEFAULT NULL,
|
|
697
|
+
stage TEXT NOT NULL DEFAULT 'turn-start',
|
|
698
|
+
action TEXT NOT NULL DEFAULT 'status-only',
|
|
699
|
+
push INTEGER NOT NULL DEFAULT 0,
|
|
700
|
+
status TEXT NOT NULL DEFAULT 'ok',
|
|
701
|
+
error TEXT DEFAULT NULL,
|
|
702
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
703
|
+
updated_at TEXT NOT NULL DEFAULT '',
|
|
704
|
+
PRIMARY KEY (trace_id, turn_id, stage)
|
|
705
|
+
);
|
|
706
|
+
|
|
707
|
+
CREATE TABLE audit_events (
|
|
708
|
+
event_id TEXT PRIMARY KEY,
|
|
709
|
+
trace_id TEXT NOT NULL,
|
|
710
|
+
turn_id TEXT DEFAULT NULL,
|
|
711
|
+
caused_by TEXT DEFAULT NULL,
|
|
712
|
+
category TEXT NOT NULL,
|
|
713
|
+
type TEXT NOT NULL,
|
|
714
|
+
ts TEXT NOT NULL,
|
|
715
|
+
payload_json TEXT NOT NULL DEFAULT '{}'
|
|
716
|
+
);
|
|
717
|
+
|
|
718
|
+
CREATE TABLE audit_turn_index (
|
|
719
|
+
trace_id TEXT NOT NULL,
|
|
720
|
+
turn_id TEXT NOT NULL,
|
|
721
|
+
first_ts TEXT NOT NULL,
|
|
722
|
+
last_ts TEXT NOT NULL,
|
|
723
|
+
event_count INTEGER NOT NULL DEFAULT 0,
|
|
724
|
+
PRIMARY KEY (trace_id, turn_id)
|
|
725
|
+
);
|
|
726
|
+
|
|
727
|
+
CREATE INDEX idx_memories_active ON memories(superseded_by);
|
|
728
|
+
CREATE INDEX idx_tasks_active ON tasks(milestone_id, slice_id, status);
|
|
729
|
+
CREATE INDEX idx_slices_active ON slices(milestone_id, status);
|
|
730
|
+
CREATE INDEX idx_milestones_status ON milestones(status);
|
|
731
|
+
CREATE INDEX idx_quality_gates_pending ON quality_gates(milestone_id, slice_id, status);
|
|
732
|
+
CREATE INDEX idx_verification_evidence_task ON verification_evidence(milestone_id, slice_id, task_id);
|
|
733
|
+
CREATE INDEX idx_slice_deps_target ON slice_dependencies(milestone_id, depends_on_slice_id);
|
|
734
|
+
CREATE INDEX idx_tasks_escalation_pending ON tasks(milestone_id, slice_id, escalation_pending);
|
|
735
|
+
`);
|
|
736
|
+
legacyDb.close();
|
|
737
|
+
|
|
738
|
+
// This must not throw — before the fix, initSchema() crashed with
|
|
739
|
+
// "no such column: scope" when it tried to CREATE INDEX on memory_sources.scope
|
|
740
|
+
// before the v18 migration had added that column.
|
|
741
|
+
assert.doesNotThrow(
|
|
742
|
+
() => openDatabase(dbPath),
|
|
743
|
+
'openDatabase must not throw on a v17 DB where memory_sources lacks scope',
|
|
744
|
+
);
|
|
745
|
+
|
|
746
|
+
const adapter = _getAdapter()!;
|
|
747
|
+
|
|
748
|
+
// After open+migrate, memories.scope must exist
|
|
749
|
+
const memCols = adapter.prepare('PRAGMA table_info(memories)').all().map((r) => r['name']);
|
|
750
|
+
assert.ok(memCols.includes('scope'), 'memories.scope must be present after migration');
|
|
751
|
+
|
|
752
|
+
// idx_memories_scope must be created by the v18 migration
|
|
753
|
+
const scopeIdx = adapter
|
|
754
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='index' AND name='idx_memories_scope'")
|
|
755
|
+
.get();
|
|
756
|
+
assert.ok(scopeIdx, 'idx_memories_scope must exist after open on v17 DB');
|
|
757
|
+
|
|
758
|
+
// idx_memory_sources_scope must be created by the v18 migration
|
|
759
|
+
const srcScopeIdx = adapter
|
|
760
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='index' AND name='idx_memory_sources_scope'")
|
|
761
|
+
.get();
|
|
762
|
+
assert.ok(srcScopeIdx, 'idx_memory_sources_scope must exist after open on v17 DB');
|
|
763
|
+
|
|
764
|
+
cleanup(dbPath);
|
|
765
|
+
});
|
|
766
|
+
|
|
472
767
|
test('gsd-db: rowToTask tolerates legacy comma-separated task arrays', () => {
|
|
473
768
|
openDatabase(':memory:');
|
|
474
769
|
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression tests for the headless vs interactive milestone-bootstrap divergence.
|
|
3
|
+
*
|
|
4
|
+
* Two defects were covered here:
|
|
5
|
+
* 1. `showHeadlessMilestoneCreation` dispatched with `unitType: "plan-milestone"`
|
|
6
|
+
* instead of `"discuss-milestone"`. The `discuss-` prefix drives tool
|
|
7
|
+
* scoping (`guided-flow.ts:583`) and enables the `checkAutoStartAfterDiscuss`
|
|
8
|
+
* guardrails — routing through `plan-milestone` bypassed them even
|
|
9
|
+
* though headless is semantically a discuss flow.
|
|
10
|
+
* 2. The `discuss-headless.md` ready-phrase pre-condition was a prose
|
|
11
|
+
* sentence, so models that treated it as advisory could skip ahead to
|
|
12
|
+
* the ready phrase without actually writing the artifacts. The checkbox
|
|
13
|
+
* format from `discuss.md` has lower abstraction cost and is harder to
|
|
14
|
+
* rationalize past.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { test, describe } from "node:test";
|
|
18
|
+
import assert from "node:assert/strict";
|
|
19
|
+
import { readFileSync } from "node:fs";
|
|
20
|
+
import { dirname, join } from "node:path";
|
|
21
|
+
import { fileURLToPath } from "node:url";
|
|
22
|
+
|
|
23
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
24
|
+
|
|
25
|
+
const GUIDED_FLOW_PATH = join(__dirname, "..", "guided-flow.ts");
|
|
26
|
+
const DISCUSS_HEADLESS_PATH = join(__dirname, "..", "prompts", "discuss-headless.md");
|
|
27
|
+
|
|
28
|
+
function getGuidedFlowSource(): string {
|
|
29
|
+
return readFileSync(GUIDED_FLOW_PATH, "utf-8");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function getHeadlessPromptSource(): string {
|
|
33
|
+
return readFileSync(DISCUSS_HEADLESS_PATH, "utf-8");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
describe("headless milestone bootstrap — parity with interactive flow", () => {
|
|
37
|
+
test("showHeadlessMilestoneCreation dispatches as discuss-milestone, not plan-milestone", () => {
|
|
38
|
+
const source = getGuidedFlowSource();
|
|
39
|
+
const fnStart = source.indexOf("export async function showHeadlessMilestoneCreation");
|
|
40
|
+
assert.ok(fnStart > -1, "showHeadlessMilestoneCreation must exist");
|
|
41
|
+
|
|
42
|
+
// Scope: from the function start to the next top-level export (or EOF).
|
|
43
|
+
const nextExport = source.indexOf("\nexport ", fnStart + 1);
|
|
44
|
+
const fnBody = source.slice(fnStart, nextExport === -1 ? source.length : nextExport);
|
|
45
|
+
|
|
46
|
+
// Match only the actual dispatchWorkflow call — comments in the body
|
|
47
|
+
// may mention "plan-milestone" as part of the fix rationale.
|
|
48
|
+
const dispatchMatches = [...fnBody.matchAll(/dispatchWorkflow\([^)]*,\s*"([^"]+)"\s*\)/g)];
|
|
49
|
+
assert.strictEqual(
|
|
50
|
+
dispatchMatches.length,
|
|
51
|
+
1,
|
|
52
|
+
`expected exactly one dispatchWorkflow call, found ${dispatchMatches.length}`,
|
|
53
|
+
);
|
|
54
|
+
assert.strictEqual(
|
|
55
|
+
dispatchMatches[0][1],
|
|
56
|
+
"discuss-milestone",
|
|
57
|
+
`showHeadlessMilestoneCreation must dispatch as "discuss-milestone" so tool scoping and discuss-flow guardrails apply; got "${dispatchMatches[0][1]}"`,
|
|
58
|
+
);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("discuss-headless single-milestone pre-condition uses the non-bypassable checkbox format", () => {
|
|
62
|
+
const source = getHeadlessPromptSource();
|
|
63
|
+
const section = source.split("### Multi-Milestone")[0];
|
|
64
|
+
assert.ok(
|
|
65
|
+
/### Ready-phrase pre-condition \(NON-BYPASSABLE\)/.test(section),
|
|
66
|
+
"single-milestone ready-phrase section must be present",
|
|
67
|
+
);
|
|
68
|
+
// All four required artifacts must appear as checkboxes, not a prose list.
|
|
69
|
+
for (const artifact of [
|
|
70
|
+
"`.gsd/PROJECT.md`",
|
|
71
|
+
"`.gsd/REQUIREMENTS.md`",
|
|
72
|
+
"`{{contextPath}}`",
|
|
73
|
+
"`gsd_plan_milestone`",
|
|
74
|
+
]) {
|
|
75
|
+
assert.ok(
|
|
76
|
+
new RegExp(`- \\[ \\] [A-Za-z]+ ${artifact.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`).test(section),
|
|
77
|
+
`single-milestone pre-condition must include a checkbox for ${artifact}`,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
assert.ok(
|
|
81
|
+
/If ANY box is unchecked, \*\*STOP\*\*/.test(section),
|
|
82
|
+
"single-milestone pre-condition must include the 'If ANY box is unchecked, STOP' sentinel",
|
|
83
|
+
);
|
|
84
|
+
assert.ok(
|
|
85
|
+
/Do not announce the ready phrase as something you are "about to" do/.test(section),
|
|
86
|
+
"single-milestone pre-condition must include the 'do not announce intent' guard",
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test("discuss-headless multi-milestone pre-condition uses the non-bypassable checkbox format", () => {
|
|
91
|
+
const source = getHeadlessPromptSource();
|
|
92
|
+
const multiIdx = source.indexOf("### Multi-Milestone");
|
|
93
|
+
assert.ok(multiIdx > -1, "multi-milestone section must be present");
|
|
94
|
+
const multiSection = source.slice(multiIdx);
|
|
95
|
+
|
|
96
|
+
assert.ok(
|
|
97
|
+
/### Ready-phrase pre-condition \(NON-BYPASSABLE\)/.test(multiSection),
|
|
98
|
+
"multi-milestone ready-phrase section must be present",
|
|
99
|
+
);
|
|
100
|
+
for (const artifact of [
|
|
101
|
+
"`.gsd/PROJECT.md`",
|
|
102
|
+
"`.gsd/REQUIREMENTS.md`",
|
|
103
|
+
"`gsd_plan_milestone`",
|
|
104
|
+
"`.gsd/DISCUSSION-MANIFEST.json`",
|
|
105
|
+
]) {
|
|
106
|
+
const escaped = artifact.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
107
|
+
assert.ok(
|
|
108
|
+
new RegExp(`- \\[ \\] [\\s\\S]*?${escaped}`).test(multiSection),
|
|
109
|
+
`multi-milestone pre-condition must include a checkbox referencing ${artifact}`,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
assert.ok(
|
|
113
|
+
/gates_completed === total/.test(multiSection),
|
|
114
|
+
"multi-milestone pre-condition must still enforce gates_completed === total",
|
|
115
|
+
);
|
|
116
|
+
});
|
|
117
|
+
});
|
package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts
CHANGED
|
@@ -854,4 +854,34 @@ describe("auto-worktree-milestone-merge", { timeout: 300_000 }, () => {
|
|
|
854
854
|
"#1906: codeFilesChanged must be true when real code files were merged");
|
|
855
855
|
assert.ok(existsSync(join(repo, "real-code.ts")), "real-code.ts merged to main");
|
|
856
856
|
});
|
|
857
|
+
|
|
858
|
+
// #2505 regression: when a per-entry restore of the milestone shelter fails,
|
|
859
|
+
// the shelter must be retained so the queued milestone files (whose sources
|
|
860
|
+
// were deleted during the shelter step) remain recoverable. Deleting the
|
|
861
|
+
// shelter unconditionally would permanently lose that data.
|
|
862
|
+
test("#2505: shelter retained when restore fails; cleaned up on success", () => {
|
|
863
|
+
const repo = freshRepo();
|
|
864
|
+
const wtPath = createAutoWorktree(repo, "M200");
|
|
865
|
+
|
|
866
|
+
addSliceToMilestone(repo, wtPath, "M200", "S01", "Feature", [
|
|
867
|
+
{ file: "feature.ts", content: "export const f = 1;\n", message: "add feature" },
|
|
868
|
+
]);
|
|
869
|
+
|
|
870
|
+
// Seed a queued (non-target) milestone in .gsd/milestones/ that will be
|
|
871
|
+
// sheltered during the merge and restored afterwards.
|
|
872
|
+
const queuedDir = join(repo, ".gsd", "milestones", "M201");
|
|
873
|
+
mkdirSync(queuedDir, { recursive: true });
|
|
874
|
+
writeFileSync(join(queuedDir, "CONTEXT.md"), "# queued\n");
|
|
875
|
+
|
|
876
|
+
const roadmap = makeRoadmap("M200", "Milestone w/ queued sibling", [
|
|
877
|
+
{ id: "S01", title: "Feature" },
|
|
878
|
+
]);
|
|
879
|
+
|
|
880
|
+
const result = mergeMilestoneToMain(repo, "M200", roadmap);
|
|
881
|
+
|
|
882
|
+
// Normal success path: queued milestone restored, shelter cleaned up.
|
|
883
|
+
assert.ok(existsSync(join(queuedDir, "CONTEXT.md")), "queued milestone restored from shelter");
|
|
884
|
+
assert.ok(!existsSync(join(repo, ".gsd", ".milestone-shelter")), "shelter removed on successful restore");
|
|
885
|
+
assert.ok(result.commitMessage.length > 0, "merge completed");
|
|
886
|
+
});
|
|
857
887
|
});
|
|
@@ -248,12 +248,13 @@ describe('git-service', async () => {
|
|
|
248
248
|
|
|
249
249
|
assert.deepStrictEqual(
|
|
250
250
|
RUNTIME_EXCLUSION_PATHS.length,
|
|
251
|
-
|
|
252
|
-
"exactly
|
|
251
|
+
16,
|
|
252
|
+
"exactly 16 runtime exclusion paths"
|
|
253
253
|
);
|
|
254
254
|
|
|
255
255
|
const expectedPaths = [
|
|
256
256
|
".gsd/activity/",
|
|
257
|
+
".gsd/audit/",
|
|
257
258
|
".gsd/forensics/",
|
|
258
259
|
".gsd/runtime/",
|
|
259
260
|
".gsd/worktrees/",
|
|
@@ -1235,6 +1236,7 @@ describe('git-service', async () => {
|
|
|
1235
1236
|
const content = readFileSync(join(repo, ".gitignore"), "utf-8");
|
|
1236
1237
|
const lines = content.split("\n").map(l => l.trim()).filter(l => l && !l.startsWith("#"));
|
|
1237
1238
|
assert.ok(lines.includes(".gsd"), "ensureGitignore: .gitignore contains .gsd");
|
|
1239
|
+
assert.ok(lines.includes(".mcp.json"), "ensureGitignore: .gitignore contains .mcp.json");
|
|
1238
1240
|
|
|
1239
1241
|
// Idempotent — calling again doesn't add duplicates
|
|
1240
1242
|
const modified2 = ensureGitignore(repo);
|
|
@@ -107,6 +107,7 @@ test("ensureGitignore does NOT add .gsd when .gsd/ has tracked files (#1364)", (
|
|
|
107
107
|
// Other baseline patterns should still be present
|
|
108
108
|
assert.ok(lines.includes(".DS_Store"), "Expected .DS_Store in .gitignore");
|
|
109
109
|
assert.ok(lines.includes("node_modules/"), "Expected node_modules/ in .gitignore");
|
|
110
|
+
assert.ok(lines.includes(".mcp.json"), "Expected .mcp.json in .gitignore");
|
|
110
111
|
} finally {
|
|
111
112
|
cleanup(dir);
|
|
112
113
|
}
|
|
@@ -442,3 +442,33 @@ test('writeBlockerPlaceholder: updates DB slice status for complete-slice (#2653
|
|
|
442
442
|
cleanup(base);
|
|
443
443
|
}
|
|
444
444
|
});
|
|
445
|
+
|
|
446
|
+
test('writeBlockerPlaceholder: inserts placeholder slice for plan-milestone so deriveState exits pre-planning (#4378)', async () => {
|
|
447
|
+
const base = createFixtureBase();
|
|
448
|
+
try {
|
|
449
|
+
const { openDatabase, closeDatabase, insertMilestone, getMilestoneSlices, isDbAvailable } =
|
|
450
|
+
await import("../../gsd-db.ts");
|
|
451
|
+
|
|
452
|
+
const dbPath = join(base, ".gsd", "gsd.db");
|
|
453
|
+
mkdirSync(join(base, ".gsd", "milestones", "M001"), { recursive: true });
|
|
454
|
+
|
|
455
|
+
openDatabase(dbPath);
|
|
456
|
+
try {
|
|
457
|
+
insertMilestone({ id: "M001", title: "Test", status: "active" });
|
|
458
|
+
|
|
459
|
+
// Before fix: writeBlockerPlaceholder wrote the placeholder ROADMAP.md but
|
|
460
|
+
// never updated the DB, so activeMilestoneSlices.length === 0 on next deriveState
|
|
461
|
+
// call → state.phase stays 'pre-planning' → plan-milestone dispatches again → infinite loop
|
|
462
|
+
writeBlockerPlaceholder("plan-milestone", "M001", base, "idle recovery exhausted");
|
|
463
|
+
|
|
464
|
+
const slices = getMilestoneSlices("M001");
|
|
465
|
+
assert.ok(slices.length > 0,
|
|
466
|
+
"writeBlockerPlaceholder must insert a placeholder slice for plan-milestone so " +
|
|
467
|
+
"deriveState sees activeMilestoneSlices.length > 0 and exits pre-planning phase (#4378)");
|
|
468
|
+
} finally {
|
|
469
|
+
if (isDbAvailable()) closeDatabase();
|
|
470
|
+
}
|
|
471
|
+
} finally {
|
|
472
|
+
cleanup(base);
|
|
473
|
+
}
|
|
474
|
+
});
|
|
@@ -200,6 +200,17 @@ Test
|
|
|
200
200
|
|
|
201
201
|
## Boundary Map
|
|
202
202
|
_None_
|
|
203
|
+
`);
|
|
204
|
+
writeFileSync(join(msDir, "M001-SUMMARY.md"), `---
|
|
205
|
+
id: M001
|
|
206
|
+
title: "Test Milestone"
|
|
207
|
+
status: complete
|
|
208
|
+
completed_at: 2026-04-18T00:00:00Z
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
# M001: Test Milestone
|
|
212
|
+
|
|
213
|
+
Completed.
|
|
203
214
|
`);
|
|
204
215
|
run("git add -A", repo);
|
|
205
216
|
run("git commit -m \"add milestone\"", repo);
|