gsd-pi 2.80.0-dev.710c06e97 → 2.80.0-dev.7582bf37a
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 +4 -2
- package/dist/claude-cli-check.d.ts +30 -0
- package/dist/claude-cli-check.js +18 -7
- package/dist/cli.js +0 -19
- package/dist/headless-query.d.ts +10 -0
- package/dist/headless-query.js +6 -4
- package/dist/loader-entrypoint.d.ts +8 -0
- package/dist/loader-entrypoint.js +27 -0
- package/dist/loader.js +2 -11
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.js +6 -3
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +2 -2
- package/dist/resources/extensions/claude-code-cli/readiness.js +18 -7
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +40 -3
- package/dist/resources/extensions/github-sync/sync.js +4 -1
- package/dist/resources/extensions/gsd/auto/loop.js +103 -9
- package/dist/resources/extensions/gsd/auto/phases.js +240 -139
- package/dist/resources/extensions/gsd/auto/resolve.js +29 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +22 -30
- package/dist/resources/extensions/gsd/auto/session.js +8 -0
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +33 -1
- package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +9 -1
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
- package/dist/resources/extensions/gsd/auto-dispatch.js +26 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +104 -86
- package/dist/resources/extensions/gsd/auto-prompts.js +214 -17
- package/dist/resources/extensions/gsd/auto-recovery.js +174 -10
- package/dist/resources/extensions/gsd/auto-start.js +240 -15
- package/dist/resources/extensions/gsd/auto-supervisor.js +8 -1
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +2 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +209 -81
- package/dist/resources/extensions/gsd/auto.js +168 -45
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +99 -10
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +44 -37
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -10
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +30 -20
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +4 -1
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +6 -4
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +5 -3
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +319 -54
- package/dist/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.js +4 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +19 -2
- package/dist/resources/extensions/gsd/clean-root-preflight.js +65 -9
- package/dist/resources/extensions/gsd/commands/dispatcher.js +5 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
- package/dist/resources/extensions/gsd/commands-config.js +1 -1
- package/dist/resources/extensions/gsd/commands-eval-review.js +2 -2
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +17 -12
- package/dist/resources/extensions/gsd/commands-handlers.js +23 -9
- package/dist/resources/extensions/gsd/context-budget.js +37 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +56 -10
- package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +92 -0
- package/dist/resources/extensions/gsd/db-base-schema.js +18 -2
- package/dist/resources/extensions/gsd/db-migration-steps.js +22 -0
- package/dist/resources/extensions/gsd/detection.js +106 -0
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
- package/dist/resources/extensions/gsd/git-service.js +73 -5
- package/dist/resources/extensions/gsd/gsd-db.js +146 -13
- package/dist/resources/extensions/gsd/guided-flow.js +143 -48
- package/dist/resources/extensions/gsd/init-wizard.js +4 -1
- package/dist/resources/extensions/gsd/memory-store.js +69 -12
- package/dist/resources/extensions/gsd/migrate/command.js +40 -1
- package/dist/resources/extensions/gsd/migration-auto-check.js +87 -0
- package/dist/resources/extensions/gsd/native-git-bridge.js +32 -8
- package/dist/resources/extensions/gsd/orphan-stash-audit.js +101 -0
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +13 -3
- package/dist/resources/extensions/gsd/planning-path-scope.js +26 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +22 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +28 -2
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +27 -23
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/execute-task.md +4 -2
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
- package/dist/resources/extensions/gsd/quick.js +34 -2
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +10 -2
- package/dist/resources/extensions/gsd/slice-cadence.js +45 -2
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +15 -9
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -7
- package/dist/resources/extensions/gsd/tools/complete-task.js +1 -1
- package/dist/resources/extensions/gsd/tools/context-mode-tool-result.js +15 -0
- package/dist/resources/extensions/gsd/tools/exec-search-tool.js +5 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +3 -15
- package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -0
- package/dist/resources/extensions/gsd/tools/plan-slice.js +9 -0
- package/dist/resources/extensions/gsd/tools/plan-task.js +9 -0
- package/dist/resources/extensions/gsd/tools/resume-tool.js +5 -0
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +1 -1
- package/dist/resources/extensions/gsd/unit-context-composer.js +12 -3
- package/dist/resources/extensions/gsd/unit-runtime.js +22 -0
- package/dist/resources/extensions/gsd/workflow-protocol.js +131 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
- package/dist/resources/extensions/gsd/worktree-resolver.js +90 -22
- package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
- 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 +16 -16
- 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 +2 -2
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +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/page_client-reference-manifest.js +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/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +3 -3
- 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/8359.e059d86b255fce1c.js +10 -0
- package/dist/web/standalone/.next/static/chunks/app/{page-fab3ebb85b006001.js → page-752f1e2ebdaa3e45.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-0481f1221120a7c6.js → webpack-de742b64187e13fe.js} +1 -1
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.d.ts +2 -0
- package/dist/welcome-screen.js +9 -7
- package/package.json +6 -4
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +22 -17
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
- package/packages/mcp-server/src/workflow-tools.ts +30 -16
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +4 -1
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +5 -0
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +2 -0
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +2 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/dist/token-audit.d.ts +47 -0
- package/packages/pi-agent-core/dist/token-audit.d.ts.map +1 -0
- package/packages/pi-agent-core/dist/token-audit.js +221 -0
- package/packages/pi-agent-core/dist/token-audit.js.map +1 -0
- package/packages/pi-agent-core/dist/types.d.ts +9 -0
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
- package/packages/pi-agent-core/src/agent-loop.ts +4 -1
- package/packages/pi-agent-core/src/agent.ts +8 -0
- package/packages/pi-agent-core/src/index.ts +2 -0
- package/packages/pi-agent-core/src/token-audit.test.ts +189 -0
- package/packages/pi-agent-core/src/token-audit.ts +287 -0
- package/packages/pi-agent-core/src/types.ts +14 -0
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +35 -13
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +21 -11
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +7 -0
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +9 -7
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +23 -14
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +2 -0
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +48 -21
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +22 -21
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +22 -21
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -1
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +39 -25
- package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -22
- package/packages/pi-ai/src/providers/anthropic.ts +22 -9
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +34 -21
- package/packages/pi-ai/src/types.ts +3 -0
- package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +56 -22
- package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +24 -28
- package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +24 -28
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +32 -0
- 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-tool-refresh.test.js +30 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +17 -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 +52 -7
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +78 -0
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +11 -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 +9 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js +103 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js +66 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js +24 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +8 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -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 +20 -7
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +102 -3
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +41 -3
- 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/hooks-runner.test.js +2 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +46 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -2
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +81 -4
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +20 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +25 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js +22 -0
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +6 -7
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +2 -3
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js +22 -56
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js +12 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.js +14 -6
- package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.js +12 -3
- package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.js +10 -3
- package/packages/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +7 -62
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +115 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts +19 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js +20 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts +4 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js +9 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +6 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +137 -19
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +2 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +32 -7
- 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 +18 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +225 -16
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +85 -2
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +71 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
- 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 +22 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +36 -27
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +21 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js +28 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +3 -2
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +36 -0
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +40 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +59 -7
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +91 -0
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +18 -0
- package/packages/pi-coding-agent/src/core/compaction-threshold.test.ts +121 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.test.ts +32 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.ts +66 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +113 -3
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +24 -6
- package/packages/pi-coding-agent/src/core/extensions/types.ts +44 -2
- package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
- package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +60 -0
- package/packages/pi-coding-agent/src/core/sdk.ts +92 -4
- package/packages/pi-coding-agent/src/core/settings-manager.ts +39 -1
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
- package/packages/pi-coding-agent/src/core/tools/bash-spawn-windows.test.ts +22 -66
- package/packages/pi-coding-agent/src/core/tools/bash.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/edit.ts +13 -1
- package/packages/pi-coding-agent/src/core/tools/find.ts +15 -6
- package/packages/pi-coding-agent/src/core/tools/grep.ts +13 -3
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/index.ts +8 -0
- package/packages/pi-coding-agent/src/core/tools/ls.ts +11 -3
- package/packages/pi-coding-agent/src/core/tools/read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +11 -72
- package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +127 -0
- package/packages/pi-coding-agent/src/core/tools/tool-target.ts +48 -0
- package/packages/pi-coding-agent/src/core/tools/write.ts +14 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +7 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +185 -19
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +2 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +41 -10
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +260 -16
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +75 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +107 -3
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +24 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +36 -27
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +25 -0
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +31 -0
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.ts +3 -2
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +18 -8
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/tui.ts +20 -8
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +36 -27
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/src/resources/GSD-WORKFLOW.md +2 -2
- package/src/resources/extensions/claude-code-cli/readiness.ts +25 -7
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +42 -3
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +67 -0
- package/src/resources/extensions/github-sync/sync.ts +8 -1
- package/src/resources/extensions/github-sync/tests/sync-source.test.ts +6 -18
- package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -2
- package/src/resources/extensions/gsd/auto/loop.ts +134 -16
- package/src/resources/extensions/gsd/auto/phases.ts +328 -200
- package/src/resources/extensions/gsd/auto/resolve.ts +42 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +28 -30
- package/src/resources/extensions/gsd/auto/session.ts +8 -0
- package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +63 -1
- package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +14 -1
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
- package/src/resources/extensions/gsd/auto-dispatch.ts +33 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +117 -88
- package/src/resources/extensions/gsd/auto-prompts.ts +228 -16
- package/src/resources/extensions/gsd/auto-recovery.ts +185 -7
- package/src/resources/extensions/gsd/auto-start.ts +293 -21
- package/src/resources/extensions/gsd/auto-supervisor.ts +7 -0
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +2 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +241 -72
- package/src/resources/extensions/gsd/auto.ts +220 -40
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +120 -8
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +45 -37
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +36 -10
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +32 -19
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +5 -1
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +7 -4
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +6 -3
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +369 -54
- package/src/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.ts +4 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +19 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +72 -9
- package/src/resources/extensions/gsd/commands/dispatcher.ts +6 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +4 -2
- package/src/resources/extensions/gsd/commands-config.ts +1 -1
- package/src/resources/extensions/gsd/commands-eval-review.ts +2 -2
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +17 -12
- package/src/resources/extensions/gsd/commands-handlers.ts +34 -15
- package/src/resources/extensions/gsd/context-budget.ts +44 -2
- package/src/resources/extensions/gsd/crash-recovery.ts +67 -10
- package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +107 -0
- package/src/resources/extensions/gsd/db-base-schema.ts +19 -2
- package/src/resources/extensions/gsd/db-migration-steps.ts +25 -0
- package/src/resources/extensions/gsd/detection.ts +128 -0
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
- package/src/resources/extensions/gsd/git-service.ts +87 -10
- package/src/resources/extensions/gsd/gsd-db.ts +168 -13
- package/src/resources/extensions/gsd/guided-flow.ts +169 -55
- package/src/resources/extensions/gsd/init-wizard.ts +5 -1
- package/src/resources/extensions/gsd/memory-store.ts +77 -12
- package/src/resources/extensions/gsd/migrate/command.ts +47 -1
- package/src/resources/extensions/gsd/migration-auto-check.ts +129 -0
- package/src/resources/extensions/gsd/native-git-bridge.ts +39 -6
- package/src/resources/extensions/gsd/orphan-stash-audit.ts +117 -0
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +13 -3
- package/src/resources/extensions/gsd/planning-path-scope.ts +35 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +23 -0
- package/src/resources/extensions/gsd/preferences-types.ts +1 -1
- package/src/resources/extensions/gsd/prompt-loader.ts +27 -2
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +27 -23
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/execute-task.md +4 -2
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
- package/src/resources/extensions/gsd/quick.ts +37 -2
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +11 -2
- package/src/resources/extensions/gsd/slice-cadence.ts +49 -2
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +23 -9
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +59 -89
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +47 -172
- package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +0 -35
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +35 -9
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +433 -11
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +80 -59
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +3 -47
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +76 -18
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +160 -11
- package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +54 -95
- package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +67 -26
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +139 -2
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +32 -30
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +32 -128
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +20 -54
- package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +20 -30
- package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +17 -29
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +21 -39
- package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +15 -24
- package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +44 -29
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +39 -51
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +159 -213
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +15 -32
- package/src/resources/extensions/gsd/tests/browser-teardown.test.ts +0 -41
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +97 -2
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +34 -27
- package/src/resources/extensions/gsd/tests/cmux.test.ts +51 -53
- package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +39 -61
- package/src/resources/extensions/gsd/tests/commands-config.test.ts +26 -19
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +14 -1
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +29 -33
- package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +45 -108
- package/src/resources/extensions/gsd/tests/context-budget.test.ts +10 -1
- package/src/resources/extensions/gsd/tests/context-store.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +90 -31
- package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +4 -68
- package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +4 -9
- package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +14 -65
- package/src/resources/extensions/gsd/tests/detection.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/discuss-tool-scoping.test.ts +44 -37
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +58 -40
- package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +25 -15
- package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +313 -0
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +35 -17
- package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +16 -21
- package/src/resources/extensions/gsd/tests/est-annotation-timeout.test.ts +15 -82
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +5 -2
- package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +219 -0
- package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -20
- package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +18 -26
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/init-skip-git.test.ts +9 -12
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/git-locale.test.ts +31 -20
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +60 -202
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +13 -56
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +239 -1
- package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/lazy-pi-tui-import.test.ts +44 -6
- package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +21 -35
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +79 -98
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +70 -278
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
- package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +37 -30
- package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +32 -28
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +201 -0
- package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +24 -37
- package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +9 -24
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +91 -75
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +36 -22
- package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +36 -30
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +45 -5
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +74 -4
- package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +20 -22
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +130 -32
- package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +18 -36
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +35 -73
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +76 -138
- package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/prompt-path-audit.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +70 -106
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +59 -161
- package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +33 -29
- package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +22 -196
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +23 -93
- package/src/resources/extensions/gsd/tests/quick-external-gsd.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +50 -79
- package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +27 -13
- package/src/resources/extensions/gsd/tests/remote-questions.test.ts +151 -251
- package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +41 -29
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +58 -69
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +32 -164
- package/src/resources/extensions/gsd/tests/right-sized-workflow-prompts.test.ts +192 -0
- package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +57 -41
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +156 -0
- package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +96 -0
- package/src/resources/extensions/gsd/tests/session-model-override.test.ts +14 -9
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +166 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +44 -42
- package/src/resources/extensions/gsd/tests/signal-handlers.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +56 -24
- package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +51 -11
- package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +66 -50
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +68 -107
- package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +115 -42
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +21 -59
- package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +25 -116
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +21 -57
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +29 -76
- package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +33 -24
- package/src/resources/extensions/gsd/tests/stale-slice-rows.test.ts +39 -30
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -1
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +101 -2
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +35 -40
- package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +48 -46
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +14 -102
- package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +78 -232
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +32 -35
- package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +7 -9
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +84 -309
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +291 -0
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +134 -341
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +136 -4
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +8 -25
- package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +80 -1
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -99
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +43 -36
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -444
- package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +142 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +44 -189
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -57
- package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +21 -44
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +27 -26
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -18
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +9 -2
- package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +22 -19
- package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +203 -4
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -13
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +14 -15
- package/src/resources/extensions/gsd/tools/complete-task.ts +1 -1
- package/src/resources/extensions/gsd/tools/context-mode-tool-result.ts +25 -0
- package/src/resources/extensions/gsd/tools/exec-search-tool.ts +7 -7
- package/src/resources/extensions/gsd/tools/exec-tool.ts +4 -23
- package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -0
- package/src/resources/extensions/gsd/tools/plan-task.ts +10 -0
- package/src/resources/extensions/gsd/tools/resume-tool.ts +7 -7
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +1 -1
- package/src/resources/extensions/gsd/unit-context-composer.ts +19 -4
- package/src/resources/extensions/gsd/unit-runtime.ts +25 -0
- package/src/resources/extensions/gsd/workflow-protocol.ts +160 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
- package/src/resources/extensions/gsd/worktree-resolver.ts +119 -20
- package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +86 -40
- package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
- package/dist/web/standalone/.next/static/chunks/8336.631939fb583761fa.js +0 -10
- /package/dist/web/standalone/.next/static/{CaMwumvGbBPZrJicfsCzV → Y9yOOsO4ZA5BPTOS8ixvP}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{CaMwumvGbBPZrJicfsCzV → Y9yOOsO4ZA5BPTOS8ixvP}/_ssgManifest.js +0 -0
|
@@ -1,173 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
* Regression tests for subagent model preference wiring.
|
|
3
|
-
*
|
|
4
|
-
* Fixes: subagent_model config in reactive_execution was validated and stored
|
|
5
|
-
* but never passed through to subagent dispatch instruction strings, so the
|
|
6
|
-
* executing agent autonomously chose "sonnet" instead of the configured model.
|
|
7
|
-
*
|
|
8
|
-
* Issue: gsd-build/gsd-2#4078
|
|
9
|
-
*/
|
|
1
|
+
// GSD-2 — Subagent model dispatch behavior tests.
|
|
10
2
|
|
|
11
3
|
import test from "node:test";
|
|
12
4
|
import assert from "node:assert/strict";
|
|
13
|
-
import { mkdtempSync, mkdirSync, rmSync, writeFileSync
|
|
14
|
-
import { join
|
|
5
|
+
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
15
7
|
import { tmpdir } from "node:os";
|
|
16
|
-
import { fileURLToPath } from "node:url";
|
|
17
|
-
import { validatePreferences } from "../preferences-validation.ts";
|
|
18
|
-
import { extractSourceRegion } from "./test-helpers.ts";
|
|
19
|
-
|
|
20
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
21
|
-
const promptsSrc = readFileSync(join(__dirname, "..", "auto-prompts.ts"), "utf-8");
|
|
22
|
-
const dispatchSrc = readFileSync(join(__dirname, "..", "auto-dispatch.ts"), "utf-8");
|
|
23
|
-
|
|
24
|
-
// ─── Preference Validation ────────────────────────────────────────────────
|
|
25
|
-
|
|
26
|
-
test("reactive_execution: subagent_model is preserved in validated preferences", () => {
|
|
27
|
-
const result = validatePreferences({
|
|
28
|
-
reactive_execution: {
|
|
29
|
-
enabled: true,
|
|
30
|
-
max_parallel: 2,
|
|
31
|
-
isolation_mode: "same-tree",
|
|
32
|
-
subagent_model: "claude-opus-4-6",
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
assert.equal(result.errors.length, 0);
|
|
36
|
-
assert.equal(
|
|
37
|
-
result.preferences.reactive_execution?.subagent_model,
|
|
38
|
-
"claude-opus-4-6",
|
|
39
|
-
"subagent_model should be preserved through validation",
|
|
40
|
-
);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
test("reactive_execution: subagent_model rejects empty string", () => {
|
|
44
|
-
const result = validatePreferences({
|
|
45
|
-
reactive_execution: {
|
|
46
|
-
enabled: true,
|
|
47
|
-
max_parallel: 2,
|
|
48
|
-
isolation_mode: "same-tree",
|
|
49
|
-
subagent_model: "",
|
|
50
|
-
} as any,
|
|
51
|
-
});
|
|
52
|
-
assert.ok(
|
|
53
|
-
result.errors.some((e) => e.includes("subagent_model")),
|
|
54
|
-
"empty subagent_model should produce a validation error",
|
|
55
|
-
);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
// ─── Structural: Prompt Builders Accept subagentModel ────────────────────
|
|
59
|
-
|
|
60
|
-
test("buildReactiveExecutePrompt: accepts subagentModel parameter", () => {
|
|
61
|
-
const fnStart = promptsSrc.indexOf("export async function buildReactiveExecutePrompt");
|
|
62
|
-
assert.ok(fnStart !== -1, "buildReactiveExecutePrompt should be exported");
|
|
63
|
-
const signature = extractSourceRegion(promptsSrc, "export async function buildReactiveExecutePrompt", { fromIdx: fnStart });
|
|
64
|
-
assert.ok(
|
|
65
|
-
signature.includes("subagentModel"),
|
|
66
|
-
"buildReactiveExecutePrompt should accept a subagentModel parameter",
|
|
67
|
-
);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
test("buildParallelResearchSlicesPrompt: accepts subagentModel parameter", () => {
|
|
71
|
-
const fnStart = promptsSrc.indexOf("export async function buildParallelResearchSlicesPrompt");
|
|
72
|
-
assert.ok(fnStart !== -1, "buildParallelResearchSlicesPrompt should be exported");
|
|
73
|
-
const signature = extractSourceRegion(promptsSrc, "export async function buildParallelResearchSlicesPrompt", { fromIdx: fnStart });
|
|
74
|
-
assert.ok(
|
|
75
|
-
signature.includes("subagentModel"),
|
|
76
|
-
"buildParallelResearchSlicesPrompt should accept a subagentModel parameter",
|
|
77
|
-
);
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
test("buildGateEvaluatePrompt: accepts subagentModel parameter", () => {
|
|
81
|
-
const fnStart = promptsSrc.indexOf("export async function buildGateEvaluatePrompt");
|
|
82
|
-
assert.ok(fnStart !== -1, "buildGateEvaluatePrompt should be exported");
|
|
83
|
-
const signature = extractSourceRegion(promptsSrc, "export async function buildGateEvaluatePrompt", { fromIdx: fnStart });
|
|
84
|
-
assert.ok(
|
|
85
|
-
signature.includes("subagentModel"),
|
|
86
|
-
"buildGateEvaluatePrompt should accept a subagentModel parameter",
|
|
87
|
-
);
|
|
88
|
-
});
|
|
89
8
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
assert.ok(
|
|
97
|
-
fnBody.includes("subagentModel"),
|
|
98
|
-
"buildReactiveExecutePrompt body should reference subagentModel",
|
|
99
|
-
);
|
|
100
|
-
// The instruction line must be dynamic (not a plain string literal)
|
|
101
|
-
assert.ok(
|
|
102
|
-
!fnBody.includes('"Use this as the prompt for a `subagent` call:"'),
|
|
103
|
-
"instruction should not be a plain static string — model must be injectable",
|
|
104
|
-
);
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
test("buildParallelResearchSlicesPrompt: instruction string uses subagentModel when set", () => {
|
|
108
|
-
const fnStart = promptsSrc.indexOf("export async function buildParallelResearchSlicesPrompt");
|
|
109
|
-
const fnEnd = promptsSrc.indexOf("\nexport async function", fnStart + 1);
|
|
110
|
-
const fnBody = promptsSrc.slice(fnStart, fnEnd);
|
|
111
|
-
assert.ok(
|
|
112
|
-
fnBody.includes("subagentModel"),
|
|
113
|
-
"buildParallelResearchSlicesPrompt body should reference subagentModel",
|
|
114
|
-
);
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
test("buildGateEvaluatePrompt: instruction string uses subagentModel when set", () => {
|
|
118
|
-
const fnStart = promptsSrc.indexOf("export async function buildGateEvaluatePrompt");
|
|
119
|
-
const fnEnd = promptsSrc.indexOf("\nexport async function", fnStart + 1);
|
|
120
|
-
const fnBody = promptsSrc.slice(fnStart, fnEnd);
|
|
121
|
-
assert.ok(
|
|
122
|
-
fnBody.includes("subagentModel"),
|
|
123
|
-
"buildGateEvaluatePrompt body should reference subagentModel",
|
|
124
|
-
);
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
// ─── Structural: Dispatch Wires Model to Prompt Builders ─────────────────
|
|
128
|
-
|
|
129
|
-
test("auto-dispatch: passes model to buildReactiveExecutePrompt", () => {
|
|
130
|
-
// Find the reactive-execute dispatch rule
|
|
131
|
-
const ruleStart = dispatchSrc.indexOf("reactive-execute (parallel dispatch)");
|
|
132
|
-
assert.ok(ruleStart !== -1, "reactive-execute dispatch rule should exist");
|
|
133
|
-
const ruleBlock = extractSourceRegion(dispatchSrc, "reactive-execute (parallel dispatch)", { fromIdx: ruleStart });
|
|
134
|
-
assert.ok(
|
|
135
|
-
ruleBlock.includes("subagent_model") || ruleBlock.includes("subagentModel"),
|
|
136
|
-
"reactive-execute rule should resolve and pass the subagent model",
|
|
137
|
-
);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
test("auto-dispatch: passes model to buildParallelResearchSlicesPrompt", () => {
|
|
141
|
-
const callIdx = dispatchSrc.indexOf("buildParallelResearchSlicesPrompt(");
|
|
142
|
-
assert.ok(callIdx !== -1, "buildParallelResearchSlicesPrompt call should exist");
|
|
143
|
-
// The call site should pass a model argument (not just 4 args)
|
|
144
|
-
const callSite = extractSourceRegion(dispatchSrc, "buildParallelResearchSlicesPrompt(", { fromIdx: callIdx });
|
|
145
|
-
assert.ok(
|
|
146
|
-
callSite.includes("subagentModel") || callSite.includes("resolveModelWithFallbacksForUnit"),
|
|
147
|
-
"buildParallelResearchSlicesPrompt call should include model argument",
|
|
148
|
-
);
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
test("auto-dispatch: passes model to buildGateEvaluatePrompt", () => {
|
|
152
|
-
const callIdx = dispatchSrc.indexOf("buildGateEvaluatePrompt(");
|
|
153
|
-
assert.ok(callIdx !== -1, "buildGateEvaluatePrompt call should exist");
|
|
154
|
-
const callSite = extractSourceRegion(dispatchSrc, "buildGateEvaluatePrompt(", { fromIdx: callIdx });
|
|
155
|
-
assert.ok(
|
|
156
|
-
callSite.includes("subagentModel") || callSite.includes("resolveModelWithFallbacksForUnit"),
|
|
157
|
-
"buildGateEvaluatePrompt call should include model argument",
|
|
158
|
-
);
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
// ─── Integration: Prompt Output Contains Model String ────────────────────
|
|
162
|
-
|
|
163
|
-
test("buildReactiveExecutePrompt: output contains model string when subagentModel provided", async (t) => {
|
|
164
|
-
const { buildReactiveExecutePrompt } = await import("../auto-prompts.ts");
|
|
165
|
-
const repo = mkdtempSync(join(tmpdir(), "gsd-subagent-model-reactive-"));
|
|
166
|
-
t.after(() => rmSync(repo, { recursive: true, force: true }));
|
|
9
|
+
import { validatePreferences } from "../preferences-validation.ts";
|
|
10
|
+
import {
|
|
11
|
+
buildGateEvaluatePrompt,
|
|
12
|
+
buildParallelResearchSlicesPrompt,
|
|
13
|
+
buildReactiveExecutePrompt,
|
|
14
|
+
} from "../auto-prompts.ts";
|
|
167
15
|
|
|
16
|
+
function writeReactiveFixture(repo: string): void {
|
|
168
17
|
const gsd = join(repo, ".gsd", "milestones", "M001", "slices", "S01");
|
|
169
18
|
mkdirSync(join(gsd, "tasks"), { recursive: true });
|
|
170
|
-
|
|
171
19
|
writeFileSync(
|
|
172
20
|
join(gsd, "S01-PLAN.md"),
|
|
173
21
|
[
|
|
@@ -183,7 +31,6 @@ test("buildReactiveExecutePrompt: output contains model string when subagentMode
|
|
|
183
31
|
"",
|
|
184
32
|
].join("\n"),
|
|
185
33
|
);
|
|
186
|
-
|
|
187
34
|
writeFileSync(
|
|
188
35
|
join(gsd, "tasks", "T01-PLAN.md"),
|
|
189
36
|
[
|
|
@@ -201,82 +48,87 @@ test("buildReactiveExecutePrompt: output contains model string when subagentMode
|
|
|
201
48
|
"- `src/out.ts` — Result",
|
|
202
49
|
].join("\n"),
|
|
203
50
|
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
test("reactive_execution subagent_model is preserved in validated preferences", () => {
|
|
54
|
+
const result = validatePreferences({
|
|
55
|
+
reactive_execution: {
|
|
56
|
+
enabled: true,
|
|
57
|
+
max_parallel: 2,
|
|
58
|
+
isolation_mode: "same-tree",
|
|
59
|
+
subagent_model: "claude-opus-4-6",
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
assert.equal(result.errors.length, 0);
|
|
63
|
+
assert.equal(result.preferences.reactive_execution?.subagent_model, "claude-opus-4-6");
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test("reactive_execution subagent_model rejects empty string", () => {
|
|
67
|
+
const result = validatePreferences({
|
|
68
|
+
reactive_execution: {
|
|
69
|
+
enabled: true,
|
|
70
|
+
max_parallel: 2,
|
|
71
|
+
isolation_mode: "same-tree",
|
|
72
|
+
subagent_model: "",
|
|
73
|
+
} as any,
|
|
74
|
+
});
|
|
75
|
+
assert.ok(result.errors.some((e) => e.includes("subagent_model")));
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test("buildReactiveExecutePrompt injects subagent model when provided", async (t) => {
|
|
79
|
+
const repo = mkdtempSync(join(tmpdir(), "gsd-subagent-model-reactive-"));
|
|
80
|
+
t.after(() => rmSync(repo, { recursive: true, force: true }));
|
|
81
|
+
writeReactiveFixture(repo);
|
|
204
82
|
|
|
205
83
|
const prompt = await buildReactiveExecutePrompt(
|
|
206
|
-
"M001",
|
|
207
|
-
|
|
84
|
+
"M001",
|
|
85
|
+
"Test Milestone",
|
|
86
|
+
"S01",
|
|
87
|
+
"Test Slice",
|
|
88
|
+
["T01"],
|
|
89
|
+
repo,
|
|
90
|
+
"claude-opus-4-6",
|
|
208
91
|
);
|
|
209
92
|
|
|
210
|
-
assert.
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
);
|
|
214
|
-
assert.ok(
|
|
215
|
-
prompt.includes("Context Mode (execution lane):"),
|
|
216
|
-
"embedded reactive-execute task prompt should use nested Context Mode guidance",
|
|
217
|
-
);
|
|
218
|
-
assert.ok(
|
|
219
|
-
prompt.includes("## Context Mode"),
|
|
220
|
-
"reactive-execute parent prompt should include standalone Context Mode guidance",
|
|
221
|
-
);
|
|
93
|
+
assert.match(prompt, /model: "claude-opus-4-6"/);
|
|
94
|
+
assert.match(prompt, /Context Mode \(execution lane\):/);
|
|
95
|
+
assert.match(prompt, /## Context Mode/);
|
|
222
96
|
});
|
|
223
97
|
|
|
224
|
-
test("buildReactiveExecutePrompt
|
|
225
|
-
const { buildReactiveExecutePrompt } = await import("../auto-prompts.ts");
|
|
98
|
+
test("buildReactiveExecutePrompt omits model instruction when subagentModel is omitted", async (t) => {
|
|
226
99
|
const repo = mkdtempSync(join(tmpdir(), "gsd-subagent-model-none-"));
|
|
227
100
|
t.after(() => rmSync(repo, { recursive: true, force: true }));
|
|
101
|
+
writeReactiveFixture(repo);
|
|
228
102
|
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
[
|
|
235
|
-
|
|
236
|
-
"",
|
|
237
|
-
"**Goal:** Verify no model when omitted",
|
|
238
|
-
"**Demo:** No model string",
|
|
239
|
-
"",
|
|
240
|
-
"## Tasks",
|
|
241
|
-
"",
|
|
242
|
-
"- [ ] **T01: Task One** `est:15m`",
|
|
243
|
-
" Do something.",
|
|
244
|
-
"",
|
|
245
|
-
].join("\n"),
|
|
103
|
+
const prompt = await buildReactiveExecutePrompt(
|
|
104
|
+
"M001",
|
|
105
|
+
"Test Milestone",
|
|
106
|
+
"S01",
|
|
107
|
+
"Test Slice",
|
|
108
|
+
["T01"],
|
|
109
|
+
repo,
|
|
246
110
|
);
|
|
247
111
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
[
|
|
251
|
-
"# T01: Task One",
|
|
252
|
-
"",
|
|
253
|
-
"## Description",
|
|
254
|
-
"Do something.",
|
|
255
|
-
"",
|
|
256
|
-
"## Inputs",
|
|
257
|
-
"",
|
|
258
|
-
"- `src/config.json` — Config",
|
|
259
|
-
"",
|
|
260
|
-
"## Expected Output",
|
|
261
|
-
"",
|
|
262
|
-
"- `src/out.ts` — Result",
|
|
263
|
-
].join("\n"),
|
|
264
|
-
);
|
|
112
|
+
assert.doesNotMatch(prompt, /with model:/);
|
|
113
|
+
});
|
|
265
114
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
);
|
|
115
|
+
test("buildParallelResearchSlicesPrompt injects subagent model for each slice", async (t) => {
|
|
116
|
+
const repo = mkdtempSync(join(tmpdir(), "gsd-subagent-model-parallel-"));
|
|
117
|
+
t.after(() => rmSync(repo, { recursive: true, force: true }));
|
|
118
|
+
mkdirSync(join(repo, ".gsd", "milestones", "M001", "slices", "S01"), { recursive: true });
|
|
271
119
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
"
|
|
120
|
+
const prompt = await buildParallelResearchSlicesPrompt(
|
|
121
|
+
"M001",
|
|
122
|
+
"Test Milestone",
|
|
123
|
+
[{ id: "S01", title: "Research Slice" }],
|
|
124
|
+
repo,
|
|
125
|
+
"claude-opus-4-6",
|
|
275
126
|
);
|
|
127
|
+
|
|
128
|
+
assert.match(prompt, /model: "claude-opus-4-6"/);
|
|
276
129
|
});
|
|
277
130
|
|
|
278
|
-
test("buildGateEvaluatePrompt
|
|
279
|
-
const { buildGateEvaluatePrompt } = await import("../auto-prompts.ts");
|
|
131
|
+
test("buildGateEvaluatePrompt uses nested context guidance and model instruction", async (t) => {
|
|
280
132
|
const { closeDatabase, insertGateRow, insertMilestone, insertSlice, openDatabase } = await import("../gsd-db.ts");
|
|
281
133
|
const repo = mkdtempSync(join(tmpdir(), "gsd-subagent-model-gate-"));
|
|
282
134
|
t.after(() => {
|
|
@@ -315,13 +167,7 @@ test("buildGateEvaluatePrompt: embedded gate prompts use nested Context Mode gui
|
|
|
315
167
|
"claude-opus-4-6",
|
|
316
168
|
);
|
|
317
169
|
|
|
318
|
-
assert.
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
);
|
|
322
|
-
assert.ok(
|
|
323
|
-
prompt.includes("## Context Mode"),
|
|
324
|
-
"gate-evaluate parent prompt should include standalone Context Mode guidance",
|
|
325
|
-
);
|
|
326
|
-
assert.ok(prompt.includes('model: "claude-opus-4-6"'), "gate subagent prompt should preserve model instruction");
|
|
170
|
+
assert.match(prompt, /Context Mode \(verification lane\):/);
|
|
171
|
+
assert.match(prompt, /## Context Mode/);
|
|
172
|
+
assert.match(prompt, /model: "claude-opus-4-6"/);
|
|
327
173
|
});
|
|
@@ -1,43 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Regression test for DB-authoritative syncWorktreeStateBack behavior.
|
|
3
|
-
*
|
|
4
|
-
* Worktree milestone projections are not authoritative. syncWorktreeStateBack
|
|
5
|
-
* may reconcile a legacy worktree DB and copy diagnostics, but must not copy
|
|
6
|
-
* milestone markdown directories back into the project root.
|
|
7
3
|
*/
|
|
8
4
|
|
|
9
|
-
import { describe, it } from
|
|
10
|
-
import assert from
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
5
|
+
import { describe, it } from "node:test";
|
|
6
|
+
import assert from "node:assert/strict";
|
|
7
|
+
import { existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { tmpdir } from "node:os";
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
resolve(process.cwd(), 'src', 'resources', 'extensions', 'gsd', 'auto-worktree.ts'),
|
|
17
|
-
'utf-8',
|
|
18
|
-
)
|
|
11
|
+
import { syncWorktreeStateBack } from "../auto-worktree.ts";
|
|
19
12
|
|
|
20
|
-
describe(
|
|
21
|
-
it(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
13
|
+
describe("syncWorktreeStateBack does not copy worktree milestone projections", () => {
|
|
14
|
+
it("copies root diagnostics but leaves milestone markdown directories behind", () => {
|
|
15
|
+
const root = mkdtempSync(join(tmpdir(), "gsd-sync-back-"));
|
|
16
|
+
const main = join(root, "main");
|
|
17
|
+
const worktree = join(root, "worktree");
|
|
18
|
+
try {
|
|
19
|
+
mkdirSync(join(main, ".gsd", "milestones"), { recursive: true });
|
|
20
|
+
mkdirSync(join(worktree, ".gsd", "milestones", "M001"), { recursive: true });
|
|
21
|
+
writeFileSync(join(worktree, ".gsd", "metrics.json"), "{}\n", "utf-8");
|
|
22
|
+
writeFileSync(
|
|
23
|
+
join(worktree, ".gsd", "milestones", "M001", "M001-ROADMAP.md"),
|
|
24
|
+
"# M001: Worktree-only projection\n",
|
|
25
|
+
"utf-8",
|
|
26
|
+
);
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
// Find syncWorktreeStateBack
|
|
30
|
-
const fnStart = src.indexOf('function syncWorktreeStateBack(')
|
|
31
|
-
assert.ok(fnStart !== -1)
|
|
28
|
+
const result = syncWorktreeStateBack(main, worktree, "M001");
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
})
|
|
43
|
-
})
|
|
30
|
+
assert.deepEqual(result.synced, ["metrics.json"]);
|
|
31
|
+
assert.equal(existsSync(join(main, ".gsd", "metrics.json")), true);
|
|
32
|
+
assert.equal(
|
|
33
|
+
existsSync(join(main, ".gsd", "milestones", "M001", "M001-ROADMAP.md")),
|
|
34
|
+
false,
|
|
35
|
+
);
|
|
36
|
+
} finally {
|
|
37
|
+
rmSync(root, { recursive: true, force: true });
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: System context memory gating regression tests.
|
|
3
|
+
|
|
4
|
+
import test from "node:test";
|
|
5
|
+
import assert from "node:assert/strict";
|
|
6
|
+
|
|
7
|
+
import { buildContextMessage, isLowEntropyResumePrompt, loadMemoryBlock } from "../bootstrap/system-context.ts";
|
|
8
|
+
import { closeDatabase, openDatabase } from "../gsd-db.ts";
|
|
9
|
+
import { createMemory } from "../memory-store.ts";
|
|
10
|
+
|
|
11
|
+
test("buildContextMessage marks hidden guided context when memory is supplied", () => {
|
|
12
|
+
const message = buildContextMessage({
|
|
13
|
+
memoryBlock: "\n\n[MEMORY]\n\n- keep this",
|
|
14
|
+
injection: "[GSD Guided Execute Context]\nUse the task plan.",
|
|
15
|
+
forensicsInjection: null,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
assert.ok(message, "expected hidden context message");
|
|
19
|
+
assert.equal(message.customType, "gsd-guided-context");
|
|
20
|
+
assert.equal(message.display, false);
|
|
21
|
+
assert.match(message.content, /\[GSD Context Metadata\]\n- Memory supplied: yes/);
|
|
22
|
+
assert.ok(
|
|
23
|
+
message.content.indexOf("Memory supplied: yes") < message.content.indexOf("[GSD Guided Execute Context]"),
|
|
24
|
+
"memory marker should appear before guided context",
|
|
25
|
+
);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test("buildContextMessage caps hidden context by default", () => {
|
|
29
|
+
const original = process.env.PI_GSD_CONTEXT_MAX_CHARS;
|
|
30
|
+
delete process.env.PI_GSD_CONTEXT_MAX_CHARS;
|
|
31
|
+
try {
|
|
32
|
+
const message = buildContextMessage({
|
|
33
|
+
memoryBlock: "",
|
|
34
|
+
injection: `[GSD Guided Execute Context]\n${"large context\n".repeat(500)}`,
|
|
35
|
+
forensicsInjection: null,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
assert.ok(message, "expected hidden context message");
|
|
39
|
+
assert.equal(message.customType, "gsd-guided-context");
|
|
40
|
+
assert.ok(message.content.length <= 4000);
|
|
41
|
+
assert.match(message.content, /\[GSD Context Truncated\]/);
|
|
42
|
+
} finally {
|
|
43
|
+
if (original === undefined) delete process.env.PI_GSD_CONTEXT_MAX_CHARS;
|
|
44
|
+
else process.env.PI_GSD_CONTEXT_MAX_CHARS = original;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("buildContextMessage supports explicit context cap override", () => {
|
|
49
|
+
const original = process.env.PI_GSD_CONTEXT_MAX_CHARS;
|
|
50
|
+
process.env.PI_GSD_CONTEXT_MAX_CHARS = "1200";
|
|
51
|
+
try {
|
|
52
|
+
const message = buildContextMessage({
|
|
53
|
+
memoryBlock: "",
|
|
54
|
+
injection: `[GSD Guided Execute Context]\n${"large context\n".repeat(200)}`,
|
|
55
|
+
forensicsInjection: null,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
assert.ok(message, "expected hidden context message");
|
|
59
|
+
assert.equal(message.customType, "gsd-guided-context");
|
|
60
|
+
assert.ok(message.content.length <= 1200);
|
|
61
|
+
assert.match(message.content, /\[GSD Context Truncated\]/);
|
|
62
|
+
} finally {
|
|
63
|
+
if (original === undefined) delete process.env.PI_GSD_CONTEXT_MAX_CHARS;
|
|
64
|
+
else process.env.PI_GSD_CONTEXT_MAX_CHARS = original;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("buildContextMessage does not add memory marker when only guided context is supplied", () => {
|
|
69
|
+
const message = buildContextMessage({
|
|
70
|
+
memoryBlock: "",
|
|
71
|
+
injection: "[GSD Guided Execute Context]\nUse the task plan.",
|
|
72
|
+
forensicsInjection: null,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
assert.ok(message, "expected guided context message");
|
|
76
|
+
assert.equal(message.customType, "gsd-guided-context");
|
|
77
|
+
assert.doesNotMatch(message.content, /Memory supplied: yes/);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
test("loadMemoryBlock keeps critical memories while gating prompt-relevant query hits", async () => {
|
|
81
|
+
closeDatabase();
|
|
82
|
+
assert.equal(openDatabase(":memory:"), true);
|
|
83
|
+
try {
|
|
84
|
+
createMemory({
|
|
85
|
+
category: "gotcha",
|
|
86
|
+
content: "Always preserve critical resume safety context.",
|
|
87
|
+
confidence: 0.95,
|
|
88
|
+
});
|
|
89
|
+
createMemory({
|
|
90
|
+
category: "preference",
|
|
91
|
+
content: "React dashboard preference should only appear for a React prompt query.",
|
|
92
|
+
confidence: 0.95,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const withPromptRelevant = await loadMemoryBlock("React dashboard", { includePromptRelevant: true });
|
|
96
|
+
assert.match(withPromptRelevant, /critical resume safety context/);
|
|
97
|
+
assert.match(withPromptRelevant, /React dashboard preference/);
|
|
98
|
+
|
|
99
|
+
const withoutPromptRelevant = await loadMemoryBlock("React dashboard", { includePromptRelevant: false });
|
|
100
|
+
assert.match(withoutPromptRelevant, /critical resume safety context/);
|
|
101
|
+
assert.doesNotMatch(withoutPromptRelevant, /React dashboard preference/);
|
|
102
|
+
} finally {
|
|
103
|
+
closeDatabase();
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test("isLowEntropyResumePrompt identifies bare resume prompts only", () => {
|
|
108
|
+
assert.equal(isLowEntropyResumePrompt("continue"), true);
|
|
109
|
+
assert.equal(isLowEntropyResumePrompt("Go ahead."), true);
|
|
110
|
+
assert.equal(isLowEntropyResumePrompt("run the tests"), false);
|
|
111
|
+
assert.equal(isLowEntropyResumePrompt("/gsd auto"), false);
|
|
112
|
+
});
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
// GSD
|
|
2
|
-
//
|
|
3
|
-
// per call; embedding it in the cached system prefix invalidates Anthropic
|
|
4
|
-
// prompt-cache hits on every request. The fix routes memory through the
|
|
5
|
-
// existing context-message channel (volatile user-message suffix) and combines
|
|
6
|
-
// it with any active guided-execute or forensics injection.
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Regression coverage for volatile system-context message routing.
|
|
7
3
|
|
|
8
4
|
import { describe, test } from "node:test";
|
|
9
5
|
import assert from "node:assert/strict";
|
|
@@ -11,6 +7,8 @@ import assert from "node:assert/strict";
|
|
|
11
7
|
import { buildContextMessage } from "../bootstrap/system-context.ts";
|
|
12
8
|
|
|
13
9
|
describe("buildContextMessage (#5019 — memory routing)", () => {
|
|
10
|
+
const markedMemory = "[GSD Context Metadata]\n- Memory supplied: yes\n\n[MEMORY]\nrule one";
|
|
11
|
+
|
|
14
12
|
test("returns null when nothing to inject", () => {
|
|
15
13
|
const result = buildContextMessage({
|
|
16
14
|
memoryBlock: "",
|
|
@@ -37,7 +35,7 @@ describe("buildContextMessage (#5019 — memory routing)", () => {
|
|
|
37
35
|
});
|
|
38
36
|
assert.ok(result, "expected a context message");
|
|
39
37
|
assert.equal(result.customType, "gsd-memory");
|
|
40
|
-
assert.equal(result.content, "[MEMORY]\nrule one\nrule two");
|
|
38
|
+
assert.equal(result.content, "[GSD Context Metadata]\n- Memory supplied: yes\n\n[MEMORY]\nrule one\nrule two");
|
|
41
39
|
assert.equal(result.display, false);
|
|
42
40
|
});
|
|
43
41
|
|
|
@@ -71,7 +69,7 @@ describe("buildContextMessage (#5019 — memory routing)", () => {
|
|
|
71
69
|
});
|
|
72
70
|
assert.ok(result);
|
|
73
71
|
assert.equal(result.customType, "gsd-guided-context");
|
|
74
|
-
assert.equal(result.content,
|
|
72
|
+
assert.equal(result.content, `${markedMemory}\n\n[GUIDED]\nexecute T01`);
|
|
75
73
|
});
|
|
76
74
|
|
|
77
75
|
test("memory + forensics: memory prepended, customType is gsd-forensics", () => {
|
|
@@ -82,7 +80,7 @@ describe("buildContextMessage (#5019 — memory routing)", () => {
|
|
|
82
80
|
});
|
|
83
81
|
assert.ok(result);
|
|
84
82
|
assert.equal(result.customType, "gsd-forensics");
|
|
85
|
-
assert.equal(result.content,
|
|
83
|
+
assert.equal(result.content, `${markedMemory}\n\n[FORENSICS]\ninvestigation context`);
|
|
86
84
|
});
|
|
87
85
|
|
|
88
86
|
test("guided takes precedence over forensics when both are somehow present", () => {
|