gsd-pi 2.80.0-dev.4ea7d80e7 → 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 +16 -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 +43 -1
- package/dist/resources/extensions/gsd/auto-start.js +238 -12
- 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 +159 -44
- 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-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 +4 -2
- package/dist/resources/extensions/gsd/db-migration-steps.js +6 -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 +46 -13
- package/dist/resources/extensions/gsd/guided-flow.js +141 -46
- 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 +14 -14
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +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 +14 -14
- 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 +3 -3
- 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 +6 -2
- 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 +3 -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 +6 -6
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +5 -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__/tool-execution.test.js +89 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +25 -1
- 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 +6 -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 +155 -7
- 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 +31 -6
- 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/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 +6 -2
- 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 +5 -3
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +8 -5
- 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__/tool-execution.test.ts +119 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +180 -7
- 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 +39 -8
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +24 -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/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 +16 -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 +54 -0
- package/src/resources/extensions/gsd/auto-start.ts +286 -15
- 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 +208 -39
- 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-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 +4 -2
- package/src/resources/extensions/gsd/db-migration-steps.ts +8 -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 +50 -13
- package/src/resources/extensions/gsd/guided-flow.ts +167 -53
- 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 +14 -1
- 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/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/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/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 +55 -0
- 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/{vIAZSyxIuvqNkCvXt9oqb → Y9yOOsO4ZA5BPTOS8ixvP}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{vIAZSyxIuvqNkCvXt9oqb → Y9yOOsO4ZA5BPTOS8ixvP}/_ssgManifest.js +0 -0
package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Integration tests for the /gsd eval-review helper chain.
|
|
1
3
|
/**
|
|
2
4
|
* Integration test for `/gsd eval-review` .
|
|
3
5
|
*
|
|
@@ -10,7 +12,7 @@
|
|
|
10
12
|
|
|
11
13
|
import { describe, it, beforeEach, afterEach } from "node:test";
|
|
12
14
|
import assert from "node:assert/strict";
|
|
13
|
-
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
15
|
+
import { mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from "node:fs";
|
|
14
16
|
import { join } from "node:path";
|
|
15
17
|
import { tmpdir } from "node:os";
|
|
16
18
|
|
|
@@ -119,7 +121,7 @@ describe("integration: /gsd eval-review helper chain on a real on-disk slice", (
|
|
|
119
121
|
);
|
|
120
122
|
assert.equal(ctx.truncated, false);
|
|
121
123
|
assert.equal(ctx.sliceId, "S07");
|
|
122
|
-
assert.equal(ctx.outputPath, evalReviewWritePath(layout.sliceDir, "S07"));
|
|
124
|
+
assert.equal(ctx.outputPath, evalReviewWritePath(realpathSync(layout.sliceDir), "S07"));
|
|
123
125
|
|
|
124
126
|
const prompt = buildEvalReviewPrompt(ctx);
|
|
125
127
|
|
|
@@ -7,13 +7,13 @@ import assert from 'node:assert/strict';
|
|
|
7
7
|
* English output, and that nativeMergeSquash passes the env to execFileSync.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { mkdtempSync, mkdirSync, writeFileSync, rmSync
|
|
10
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
11
11
|
import { join } from "node:path";
|
|
12
12
|
import { tmpdir } from "node:os";
|
|
13
13
|
import { execFileSync } from "node:child_process";
|
|
14
14
|
|
|
15
15
|
import { GIT_NO_PROMPT_ENV } from "../../git-constants.ts";
|
|
16
|
-
import { nativeAddAllWithExclusions } from "../../native-git-bridge.ts";
|
|
16
|
+
import { nativeAddAllWithExclusions, nativeMergeSquash } from "../../native-git-bridge.ts";
|
|
17
17
|
import { RUNTIME_EXCLUSION_PATHS } from "../../git-service.ts";
|
|
18
18
|
function git(cwd: string, ...args: string[]): string {
|
|
19
19
|
return execFileSync("git", args, { cwd, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" }).trim();
|
|
@@ -97,23 +97,34 @@ describe('git-locale', async () => {
|
|
|
97
97
|
|
|
98
98
|
// ─── nativeMergeSquash: env is passed (merge-squash stderr is English) ─
|
|
99
99
|
|
|
100
|
-
test('nativeMergeSquash
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
"
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
100
|
+
test('nativeMergeSquash succeeds under non-English locale env', () => {
|
|
101
|
+
const repo = initTempRepo();
|
|
102
|
+
try {
|
|
103
|
+
const mainBranch = git(repo, "branch", "--show-current");
|
|
104
|
+
git(repo, "checkout", "-b", "feature");
|
|
105
|
+
createFile(repo, "src/feature.ts", "export const feature = true;");
|
|
106
|
+
git(repo, "add", "-A");
|
|
107
|
+
git(repo, "commit", "-m", "feat: add feature");
|
|
108
|
+
git(repo, "checkout", mainBranch);
|
|
109
|
+
|
|
110
|
+
const origLcAll = process.env.LC_ALL;
|
|
111
|
+
const origLang = process.env.LANG;
|
|
112
|
+
process.env.LANG = "de_DE.UTF-8";
|
|
113
|
+
delete process.env.LC_ALL;
|
|
114
|
+
try {
|
|
115
|
+
const result = nativeMergeSquash(repo, "feature");
|
|
116
|
+
assert.equal(result.success, true);
|
|
117
|
+
} finally {
|
|
118
|
+
if (origLcAll !== undefined) process.env.LC_ALL = origLcAll;
|
|
119
|
+
else delete process.env.LC_ALL;
|
|
120
|
+
if (origLang !== undefined) process.env.LANG = origLang;
|
|
121
|
+
else delete process.env.LANG;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const staged = git(repo, "diff", "--cached", "--name-only");
|
|
125
|
+
assert.ok(staged.includes("src/feature.ts"));
|
|
126
|
+
} finally {
|
|
127
|
+
rmSync(repo, { recursive: true, force: true });
|
|
128
|
+
}
|
|
118
129
|
});
|
|
119
130
|
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Git service integration and commit-message tests.
|
|
1
3
|
import { describe, test } from 'node:test';
|
|
2
4
|
import assert from 'node:assert/strict';
|
|
3
5
|
import { mkdtempSync, mkdirSync, writeFileSync, rmSync, existsSync, symlinkSync, readFileSync } from "node:fs";
|
|
@@ -211,7 +213,12 @@ describe('git-service', async () => {
|
|
|
211
213
|
test('buildTaskCommitMessage', () => {
|
|
212
214
|
const msg = buildTaskCommitMessage({
|
|
213
215
|
taskId: "S01/T02",
|
|
216
|
+
taskDisplayId: "T02",
|
|
214
217
|
taskTitle: "implement user authentication",
|
|
218
|
+
milestoneId: "M001",
|
|
219
|
+
milestoneTitle: "User management",
|
|
220
|
+
sliceId: "S01",
|
|
221
|
+
sliceTitle: "Authentication",
|
|
215
222
|
oneLiner: "Added JWT-based auth with refresh token rotation",
|
|
216
223
|
keyFiles: ["src/auth.ts", "src/middleware/jwt.ts"],
|
|
217
224
|
});
|
|
@@ -220,7 +227,12 @@ describe('git-service', async () => {
|
|
|
220
227
|
assert.ok(msg.includes("JWT-based auth"), "message includes one-liner content");
|
|
221
228
|
assert.ok(msg.includes("- src/auth.ts"), "message body includes key files");
|
|
222
229
|
assert.ok(msg.includes("- src/middleware/jwt.ts"), "message body includes second key file");
|
|
230
|
+
assert.ok(msg.includes("GSD context:"), "message includes human GSD context block");
|
|
231
|
+
assert.ok(msg.includes("- Milestone: M001 - User management"), "message includes milestone name");
|
|
232
|
+
assert.ok(msg.includes("- Slice: S01 - Authentication"), "message includes slice name");
|
|
233
|
+
assert.ok(msg.includes("- Task: T02 - implement user authentication"), "message includes task name");
|
|
223
234
|
assert.ok(msg.includes("GSD-Task: S01/T02"), "GSD-Task trailer in body");
|
|
235
|
+
assert.ok(!msg.includes("chore: auto-commit after execute-task"), "message does not use generic fallback");
|
|
224
236
|
});
|
|
225
237
|
|
|
226
238
|
test('buildTaskCommitMessage sanitizes subject text', () => {
|
|
@@ -542,6 +554,60 @@ describe('git-service', async () => {
|
|
|
542
554
|
rmSync(repo, { recursive: true, force: true });
|
|
543
555
|
});
|
|
544
556
|
|
|
557
|
+
// Regression: #5500. The LLM occasionally hallucinates files in
|
|
558
|
+
// task.keyFiles that were never written. Pre-existing scoped-stage code
|
|
559
|
+
// ran `git add -- <every keyFile>` and failed the entire commit on the
|
|
560
|
+
// first missing path. Verify that valid paths still commit and missing
|
|
561
|
+
// ones are dropped silently.
|
|
562
|
+
test('GitServiceImpl: scoped staging drops missing keyFiles and commits the rest', () => {
|
|
563
|
+
const repo = initTempRepo();
|
|
564
|
+
const svc = new GitServiceImpl(repo);
|
|
565
|
+
|
|
566
|
+
createFile(repo, "src/index.ts", "export const ok = true;");
|
|
567
|
+
// Note: src/commands/list.ts is intentionally NOT created — the LLM
|
|
568
|
+
// claimed it wrote this file but didn't.
|
|
569
|
+
|
|
570
|
+
const msg = svc.autoCommit("execute-task", "M001/S01/T02", [], {
|
|
571
|
+
taskId: "S01/T02",
|
|
572
|
+
taskTitle: "wire up command list",
|
|
573
|
+
oneLiner: "Added list command stub",
|
|
574
|
+
keyFiles: ["src/index.ts", "src/commands/list.ts"],
|
|
575
|
+
});
|
|
576
|
+
assert.ok(msg !== null, "autoCommit succeeds when at least one keyFile exists");
|
|
577
|
+
|
|
578
|
+
const committed = run("git show --name-only --format= HEAD", repo);
|
|
579
|
+
assert.ok(committed.includes("src/index.ts"), "existing key file is committed");
|
|
580
|
+
assert.ok(!committed.includes("src/commands/list.ts"), "missing key file is silently dropped");
|
|
581
|
+
|
|
582
|
+
rmSync(repo, { recursive: true, force: true });
|
|
583
|
+
});
|
|
584
|
+
|
|
585
|
+
// Regression: #5500. When ALL keyFiles are bogus, scopedStageTaskFiles
|
|
586
|
+
// must return false so autoCommit falls back to smartStage. The commit
|
|
587
|
+
// still goes out (using `git add -A` semantics) instead of failing.
|
|
588
|
+
test('GitServiceImpl: all missing keyFiles falls back to smartStage', () => {
|
|
589
|
+
const repo = initTempRepo();
|
|
590
|
+
const svc = new GitServiceImpl(repo);
|
|
591
|
+
|
|
592
|
+
createFile(repo, "src/actually-changed.ts", "export const real = true;");
|
|
593
|
+
|
|
594
|
+
const msg = svc.autoCommit("execute-task", "M001/S01/T03", [], {
|
|
595
|
+
taskId: "S01/T03",
|
|
596
|
+
taskTitle: "fix path handling",
|
|
597
|
+
oneLiner: "Hardened path resolution",
|
|
598
|
+
keyFiles: ["src/wrong/path-1.ts", "src/wrong/path-2.ts"],
|
|
599
|
+
});
|
|
600
|
+
assert.ok(msg !== null, "autoCommit falls back to smartStage when all keyFiles are missing");
|
|
601
|
+
|
|
602
|
+
const committed = run("git show --name-only --format= HEAD", repo);
|
|
603
|
+
assert.ok(
|
|
604
|
+
committed.includes("src/actually-changed.ts"),
|
|
605
|
+
"smartStage fallback stages real dirty files when scoped staging finds nothing",
|
|
606
|
+
);
|
|
607
|
+
|
|
608
|
+
rmSync(repo, { recursive: true, force: true });
|
|
609
|
+
});
|
|
610
|
+
|
|
545
611
|
// ─── GitServiceImpl: empty-after-staging guard ─────────────────────────
|
|
546
612
|
|
|
547
613
|
test('GitServiceImpl: empty-after-staging guard', () => {
|
package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts
CHANGED
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
* Verifies that when auto-mode transitions between milestones, the
|
|
5
5
|
* worktree lifecycle is handled: old worktree merged, new worktree created.
|
|
6
6
|
*
|
|
7
|
-
* Uses source-level checks since the full auto-mode dispatch loop
|
|
8
|
-
* requires the @gsd/pi-coding-agent runtime.
|
|
9
7
|
*/
|
|
10
8
|
|
|
11
9
|
import test from "node:test";
|
|
@@ -119,48 +117,3 @@ test("worktree swap on milestone transition: merge old, create new", () => {
|
|
|
119
117
|
}
|
|
120
118
|
}
|
|
121
119
|
});
|
|
122
|
-
|
|
123
|
-
// ─── Verify the transition code path exists in auto.ts ──────────────────────
|
|
124
|
-
|
|
125
|
-
test("auto/phases.ts milestone transition block contains worktree lifecycle", () => {
|
|
126
|
-
const phasesSrc = readFileSync(
|
|
127
|
-
join(__dirname, "../..", "auto", "phases.ts"),
|
|
128
|
-
"utf-8",
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
// The resolver handles worktree merge + enter inside the milestone transition block
|
|
132
|
-
assert.ok(
|
|
133
|
-
phasesSrc.includes("Worktree lifecycle on milestone transition"),
|
|
134
|
-
"auto/phases.ts should contain the worktree lifecycle comment marker",
|
|
135
|
-
);
|
|
136
|
-
assert.ok(
|
|
137
|
-
phasesSrc.includes("resolver.mergeAndExit") && phasesSrc.includes("mid !== s.currentMilestoneId"),
|
|
138
|
-
"auto/phases.ts should call resolver.mergeAndExit during milestone transition",
|
|
139
|
-
);
|
|
140
|
-
assert.ok(
|
|
141
|
-
phasesSrc.includes("resolver.enterMilestone"),
|
|
142
|
-
"auto/phases.ts should call resolver.enterMilestone for incoming milestone",
|
|
143
|
-
);
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
// ─── Verify worktree-resolver mergeAndExit preserves branch on missing roadmap (#1573) ──
|
|
147
|
-
|
|
148
|
-
test("worktree-resolver mergeAndExit preserves branch when roadmap is missing (#1573)", () => {
|
|
149
|
-
const resolverSrc = readFileSync(
|
|
150
|
-
join(__dirname, "../..", "worktree-resolver.ts"),
|
|
151
|
-
"utf-8",
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
// The fallback teardown must pass preserveBranch: true to prevent orphaning commits
|
|
155
|
-
assert.ok(
|
|
156
|
-
resolverSrc.includes("preserveBranch: true"),
|
|
157
|
-
"worktree-resolver.ts should pass preserveBranch: true in the no-roadmap fallback",
|
|
158
|
-
);
|
|
159
|
-
|
|
160
|
-
// The worktree path should be tried as a fallback for roadmap resolution
|
|
161
|
-
assert.ok(
|
|
162
|
-
resolverSrc.includes("this.s.basePath !== originalBase") ||
|
|
163
|
-
resolverSrc.includes("roadmap-fallback"),
|
|
164
|
-
"worktree-resolver.ts should try resolving roadmap from worktree path as fallback",
|
|
165
|
-
);
|
|
166
|
-
});
|
|
@@ -1,213 +1,71 @@
|
|
|
1
1
|
// GSD Extension — Interactive Routing Bypass Tests
|
|
2
|
-
// Verifies that dynamic routing is skipped for interactive (guided-flow) dispatches
|
|
3
|
-
// and that model downgrade notifications always fire (#3962).
|
|
4
|
-
// Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
|
|
5
2
|
|
|
6
3
|
import test, { describe } from "node:test";
|
|
7
4
|
import assert from "node:assert/strict";
|
|
8
|
-
import {
|
|
9
|
-
import { join
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
join(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// The function signature should include isAutoMode with a default of true
|
|
35
|
-
assert.ok(
|
|
36
|
-
modelSelectionSrc.includes("isAutoMode"),
|
|
37
|
-
"selectAndApplyModel should have isAutoMode parameter",
|
|
38
|
-
);
|
|
39
|
-
assert.ok(
|
|
40
|
-
modelSelectionSrc.includes("isAutoMode = true"),
|
|
41
|
-
"isAutoMode should default to true (auto-mode behavior preserved)",
|
|
42
|
-
);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test("routing is disabled when isAutoMode is false", () => {
|
|
46
|
-
// The code should disable routing when not in auto-mode
|
|
47
|
-
assert.ok(
|
|
48
|
-
modelSelectionSrc.includes("if (!isAutoMode)"),
|
|
49
|
-
"should check isAutoMode flag to disable routing",
|
|
50
|
-
);
|
|
51
|
-
assert.ok(
|
|
52
|
-
modelSelectionSrc.includes("routingConfig.enabled = false"),
|
|
53
|
-
"should set routingConfig.enabled = false for interactive mode",
|
|
54
|
-
);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test("resolvePreferredModelConfig skips routing synthesis when isAutoMode is false", () => {
|
|
58
|
-
// resolvePreferredModelConfig should accept isAutoMode and bail early
|
|
59
|
-
// before synthesizing a routing ceiling from tier_models (#3962 codex review)
|
|
60
|
-
assert.ok(
|
|
61
|
-
modelSelectionSrc.includes("function resolvePreferredModelConfig"),
|
|
62
|
-
"resolvePreferredModelConfig should exist",
|
|
63
|
-
);
|
|
64
|
-
// The function should check isAutoMode before routing synthesis
|
|
65
|
-
const fnIdx = modelSelectionSrc.indexOf("function resolvePreferredModelConfig");
|
|
66
|
-
const fnBody = extractSourceRegion(modelSelectionSrc, "function resolvePreferredModelConfig");
|
|
67
|
-
assert.ok(
|
|
68
|
-
fnBody.includes("isAutoMode"),
|
|
69
|
-
"resolvePreferredModelConfig should accept isAutoMode parameter",
|
|
70
|
-
);
|
|
71
|
-
assert.ok(
|
|
72
|
-
fnBody.includes("if (!isAutoMode) return undefined"),
|
|
73
|
-
"should return undefined (skip routing synthesis) when not in auto-mode",
|
|
74
|
-
);
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
test("selectAndApplyModel threads isAutoMode to resolvePreferredModelConfig", () => {
|
|
78
|
-
// The call to resolvePreferredModelConfig inside selectAndApplyModel
|
|
79
|
-
// should pass isAutoMode as the third argument
|
|
80
|
-
const callSite = "resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode)";
|
|
81
|
-
assert.ok(
|
|
82
|
-
modelSelectionSrc.includes(callSite),
|
|
83
|
-
"selectAndApplyModel should pass isAutoMode to resolvePreferredModelConfig",
|
|
84
|
-
);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
test("guided-flow passes isAutoMode=false", () => {
|
|
88
|
-
// guided-flow.ts should explicitly pass isAutoMode as false
|
|
89
|
-
assert.ok(
|
|
90
|
-
guidedFlowSrc.includes("/* isAutoMode */ false"),
|
|
91
|
-
"guided-flow should pass isAutoMode=false to selectAndApplyModel",
|
|
92
|
-
);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
test("auto/phases.ts does NOT pass isAutoMode=false", () => {
|
|
96
|
-
// auto/phases.ts should use the default (true) — it's auto-mode
|
|
97
|
-
const phasesSrc = readFileSync(
|
|
98
|
-
join(__dirname, "..", "auto", "phases.ts"),
|
|
5
|
+
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { tmpdir } from "node:os";
|
|
8
|
+
|
|
9
|
+
import { resolvePreferredModelConfig } from "../auto-model-selection.ts";
|
|
10
|
+
|
|
11
|
+
function withRoutingPrefs<T>(fn: () => T): T {
|
|
12
|
+
const originalCwd = process.cwd();
|
|
13
|
+
const originalGsdHome = process.env.GSD_HOME;
|
|
14
|
+
const tempProject = mkdtempSync(join(tmpdir(), "gsd-interactive-routing-"));
|
|
15
|
+
const tempGsdHome = mkdtempSync(join(tmpdir(), "gsd-interactive-routing-home-"));
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
mkdirSync(join(tempProject, ".gsd"), { recursive: true });
|
|
19
|
+
writeFileSync(
|
|
20
|
+
join(tempProject, ".gsd", "PREFERENCES.md"),
|
|
21
|
+
[
|
|
22
|
+
"---",
|
|
23
|
+
"dynamic_routing:",
|
|
24
|
+
" enabled: true",
|
|
25
|
+
" tier_models:",
|
|
26
|
+
" light: gpt-4o-mini",
|
|
27
|
+
" standard: claude-sonnet-4-6",
|
|
28
|
+
" heavy: claude-opus-4-6",
|
|
29
|
+
"---",
|
|
30
|
+
].join("\n"),
|
|
99
31
|
"utf-8",
|
|
100
32
|
);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const downgradeBlock = "if (routingResult.wasDowngraded)";
|
|
113
|
-
const downgradeIdx = modelSelectionSrc.indexOf(downgradeBlock);
|
|
114
|
-
assert.ok(downgradeIdx > 0, "downgrade block should exist");
|
|
115
|
-
|
|
116
|
-
// Extract the code between wasDowngraded check and the next routing label assignment
|
|
117
|
-
const afterDowngrade = modelSelectionSrc.slice(
|
|
118
|
-
downgradeIdx,
|
|
119
|
-
modelSelectionSrc.indexOf("routingTierLabel =", downgradeIdx),
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
// The notification calls should NOT be wrapped in `if (verbose)`
|
|
123
|
-
assert.ok(
|
|
124
|
-
!afterDowngrade.includes("if (verbose)"),
|
|
125
|
-
"downgrade notifications should not be gated by verbose flag",
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
// But the notification calls should exist
|
|
129
|
-
assert.ok(
|
|
130
|
-
afterDowngrade.includes('ctx.ui.notify('),
|
|
131
|
-
"downgrade notifications should still fire",
|
|
132
|
-
);
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
test("tier escalation notification is not gated by verbose flag", () => {
|
|
136
|
-
// Extract the escalation block: from "if (escalated)" to its closing
|
|
137
|
-
// and verify the notification is present but `if (verbose)` is not.
|
|
138
|
-
const escalatedIdx = modelSelectionSrc.indexOf("if (escalated)");
|
|
139
|
-
assert.ok(escalatedIdx > 0, "escalation block should exist");
|
|
140
|
-
|
|
141
|
-
// Get the block from "if (escalated)" to the next distinctive marker
|
|
142
|
-
// (the capability-override loading that immediately follows).
|
|
143
|
-
const block = extractSourceRegion(
|
|
144
|
-
modelSelectionSrc,
|
|
145
|
-
"if (escalated)",
|
|
146
|
-
"// Load user capability overrides",
|
|
147
|
-
);
|
|
148
|
-
assert.ok(
|
|
149
|
-
block.includes("Tier escalation:"),
|
|
150
|
-
"escalation block should contain the notification",
|
|
151
|
-
);
|
|
152
|
-
assert.ok(
|
|
153
|
-
!block.includes("if (verbose)"),
|
|
154
|
-
"escalation block should not gate notification behind verbose flag",
|
|
155
|
-
);
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
describe("auto-mode start routing banner (#3962)", () => {
|
|
160
|
-
test("auto-start shows dynamic routing status on startup", () => {
|
|
161
|
-
assert.ok(
|
|
162
|
-
autoStartSrc.includes("Dynamic routing:"),
|
|
163
|
-
"auto-start should display routing status banner",
|
|
164
|
-
);
|
|
165
|
-
assert.ok(
|
|
166
|
-
autoStartSrc.includes("resolveDynamicRoutingConfig"),
|
|
167
|
-
"auto-start should import resolveDynamicRoutingConfig",
|
|
168
|
-
);
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
test("banner shows different messages for enabled vs disabled routing", () => {
|
|
172
|
-
assert.ok(
|
|
173
|
-
autoStartSrc.includes("Dynamic routing: enabled"),
|
|
174
|
-
"should show message when routing is enabled",
|
|
175
|
-
);
|
|
176
|
-
assert.ok(
|
|
177
|
-
autoStartSrc.includes("Dynamic routing: disabled"),
|
|
178
|
-
"should show message when routing is disabled",
|
|
179
|
-
);
|
|
180
|
-
});
|
|
33
|
+
process.env.GSD_HOME = tempGsdHome;
|
|
34
|
+
process.chdir(tempProject);
|
|
35
|
+
return fn();
|
|
36
|
+
} finally {
|
|
37
|
+
process.chdir(originalCwd);
|
|
38
|
+
if (originalGsdHome === undefined) delete process.env.GSD_HOME;
|
|
39
|
+
else process.env.GSD_HOME = originalGsdHome;
|
|
40
|
+
rmSync(tempProject, { recursive: true, force: true });
|
|
41
|
+
rmSync(tempGsdHome, { recursive: true, force: true });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
181
44
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
autoStartSrc.includes("isFlatRateProvider"),
|
|
194
|
-
"banner should check flat-rate provider status",
|
|
195
|
-
);
|
|
196
|
-
assert.ok(
|
|
197
|
-
autoStartSrc.includes("effectivelyEnabled"),
|
|
198
|
-
"banner should compute effective routing state, not just raw config",
|
|
199
|
-
);
|
|
45
|
+
describe("interactive routing bypass (#3962)", () => {
|
|
46
|
+
test("interactive dispatch does not synthesize dynamic routing config", () => {
|
|
47
|
+
withRoutingPrefs(() => {
|
|
48
|
+
const result = resolvePreferredModelConfig(
|
|
49
|
+
"execute-task",
|
|
50
|
+
{ provider: "anthropic", id: "claude-sonnet-4-6" },
|
|
51
|
+
false,
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
assert.equal(result, undefined);
|
|
55
|
+
});
|
|
200
56
|
});
|
|
201
57
|
|
|
202
|
-
test("
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
58
|
+
test("auto-mode dispatch still synthesizes dynamic routing config", () => {
|
|
59
|
+
withRoutingPrefs(() => {
|
|
60
|
+
const result = resolvePreferredModelConfig(
|
|
61
|
+
"execute-task",
|
|
62
|
+
{ provider: "anthropic", id: "claude-sonnet-4-6" },
|
|
63
|
+
true,
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
assert.ok(result);
|
|
67
|
+
assert.equal(result!.primary, "claude-opus-4-6");
|
|
68
|
+
assert.equal(result!.source, "synthesized");
|
|
69
|
+
});
|
|
212
70
|
});
|
|
213
71
|
});
|
|
@@ -1,62 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* When switching from isolation:branch/worktree to isolation:none, HEAD
|
|
5
|
-
* could remain on a milestone/<MID> branch. The fix in auto-start.ts
|
|
6
|
-
* detects this and auto-checks out to the integration branch.
|
|
7
|
-
*
|
|
8
|
-
* This structural test verifies the milestone/ branch check exists
|
|
9
|
-
* in auto-start.ts.
|
|
10
|
-
*/
|
|
1
|
+
import { describe, test } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
11
3
|
|
|
12
|
-
import {
|
|
13
|
-
import assert from 'node:assert/strict';
|
|
14
|
-
import { readFileSync } from 'node:fs';
|
|
15
|
-
import { fileURLToPath } from 'node:url';
|
|
16
|
-
import { dirname, join } from 'node:path';
|
|
4
|
+
import { resolveIsolationNoneBranchCheckout } from "../auto-start.ts";
|
|
17
5
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
test('checks for milestone/ branch prefix', () => {
|
|
25
|
-
assert.match(source, /startsWith\(["']milestone\//,
|
|
26
|
-
'auto-start should check for milestone/ branch prefix');
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
test('imports nativeGetCurrentBranch', () => {
|
|
30
|
-
assert.match(source, /nativeGetCurrentBranch/,
|
|
31
|
-
'auto-start should import nativeGetCurrentBranch');
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
test('imports nativeDetectMainBranch', () => {
|
|
35
|
-
assert.match(source, /nativeDetectMainBranch/,
|
|
36
|
-
'auto-start should import nativeDetectMainBranch');
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test('imports nativeCheckoutBranch', () => {
|
|
40
|
-
assert.match(source, /nativeCheckoutBranch/,
|
|
41
|
-
'auto-start should import nativeCheckoutBranch');
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
test('guard is conditional on isolation mode "none"', () => {
|
|
45
|
-
assert.match(source, /getIsolationMode\([^)]*\)\s*===\s*["']none["']/,
|
|
46
|
-
'guard should only activate when isolation mode is "none"');
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
test('calls nativeCheckoutBranch to return to integration branch', () => {
|
|
50
|
-
assert.match(source, /nativeCheckoutBranch\(base,\s*integrationBranch\)/,
|
|
51
|
-
'should checkout to the integration branch');
|
|
6
|
+
describe("isolation:none stale branch guard (#3675)", () => {
|
|
7
|
+
test("returns integration branch for stale milestone branch in isolation:none", () => {
|
|
8
|
+
assert.equal(
|
|
9
|
+
resolveIsolationNoneBranchCheckout("milestone/M001", "main", "none", true),
|
|
10
|
+
"main",
|
|
11
|
+
);
|
|
52
12
|
});
|
|
53
13
|
|
|
54
|
-
test(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
assert.
|
|
58
|
-
const before = source.slice(Math.max(0, milestoneIdx - 500), milestoneIdx);
|
|
59
|
-
assert.match(before, /try\s*\{/,
|
|
60
|
-
'milestone branch guard should be inside a try block');
|
|
14
|
+
test("does nothing outside milestone branches, repos, or isolation:none", () => {
|
|
15
|
+
assert.equal(resolveIsolationNoneBranchCheckout("feature", "main", "none", true), null);
|
|
16
|
+
assert.equal(resolveIsolationNoneBranchCheckout("milestone/M001", "main", "worktree", true), null);
|
|
17
|
+
assert.equal(resolveIsolationNoneBranchCheckout("milestone/M001", "main", "none", false), null);
|
|
61
18
|
});
|
|
62
19
|
});
|