gsd-pi 2.80.0-dev.42bd34838 → 2.80.0-dev.488219eb6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/extensions/claude-code-cli/readiness.js +18 -7
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +29 -0
- package/dist/resources/extensions/github-sync/sync.js +4 -1
- package/dist/resources/extensions/gsd/auto/loop.js +71 -8
- package/dist/resources/extensions/gsd/auto/phases.js +179 -99
- package/dist/resources/extensions/gsd/auto/resolve.js +12 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +10 -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 +94 -76
- package/dist/resources/extensions/gsd/auto-prompts.js +90 -15
- package/dist/resources/extensions/gsd/auto-start.js +238 -12
- package/dist/resources/extensions/gsd/auto-worktree.js +209 -81
- package/dist/resources/extensions/gsd/auto.js +95 -44
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +96 -26
- 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 +6 -3
- 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 +298 -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/clean-root-preflight.js +24 -6
- 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/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +53 -0
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
- package/dist/resources/extensions/gsd/git-service.js +37 -1
- package/dist/resources/extensions/gsd/guided-flow.js +61 -32
- package/dist/resources/extensions/gsd/init-wizard.js +4 -1
- 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/pre-execution-checks.js +22 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -4
- 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/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -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/workflow-protocol.js +131 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +57 -5
- 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 +11 -11
- 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 +11 -11
- 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 +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/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/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-tool-refresh.test.js +18 -0
- 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 +12 -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 +36 -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 +3 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- 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 +2 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -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 +3 -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 +34 -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 +74 -2
- package/packages/pi-coding-agent/dist/core/sdk.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 +5 -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 +153 -8
- 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 +18 -1
- 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 +23 -5
- 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 +19 -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.js +23 -5
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +25 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +40 -7
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +3 -1
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +3 -3
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +5 -5
- package/packages/pi-coding-agent/src/core/extensions/types.ts +37 -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 +85 -3
- 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 +177 -8
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +24 -5
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +17 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +21 -0
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +25 -8
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/src/resources/extensions/claude-code-cli/readiness.ts +25 -7
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +30 -0
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +26 -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 +2 -2
- package/src/resources/extensions/gsd/auto/loop.ts +84 -8
- package/src/resources/extensions/gsd/auto/phases.ts +258 -159
- package/src/resources/extensions/gsd/auto/resolve.ts +19 -0
- package/src/resources/extensions/gsd/auto/run-unit.ts +10 -29
- 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 +107 -78
- package/src/resources/extensions/gsd/auto-prompts.ts +95 -14
- package/src/resources/extensions/gsd/auto-start.ts +286 -15
- package/src/resources/extensions/gsd/auto-worktree.ts +241 -72
- package/src/resources/extensions/gsd/auto.ts +132 -40
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +116 -24
- 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 +8 -3
- 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 +347 -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/clean-root-preflight.ts +32 -7
- 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/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +66 -0
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
- package/src/resources/extensions/gsd/git-service.ts +41 -2
- package/src/resources/extensions/gsd/guided-flow.ts +71 -39
- package/src/resources/extensions/gsd/init-wizard.ts +5 -1
- 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/pre-execution-checks.ts +23 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -4
- 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/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -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 +361 -10
- 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 +106 -0
- 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-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 +15 -6
- 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/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-store.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +35 -31
- 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/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/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/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 +12 -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 +5 -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-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/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/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-step-ordering.test.ts +70 -125
- 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-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/run-uat-replay-cap.test.ts +57 -41
- 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/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 -97
- 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/state-corruption-2945.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +33 -47
- 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-manifest.test.ts +8 -25
- package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +50 -1
- 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-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 +14 -13
- 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-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 +140 -3
- 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/workflow-protocol.ts +160 -0
- package/src/resources/extensions/gsd/worktree-resolver.ts +83 -5
- 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/{tht0ltP8EIjsohPOA_WZf → G68KoLv5claox_Dyd4pZn}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{tht0ltP8EIjsohPOA_WZf → G68KoLv5claox_Dyd4pZn}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Auto-mode orchestration, session lifecycle, and stop handling.
|
|
1
3
|
/**
|
|
2
4
|
* GSD Auto Mode — Fresh Session Per Unit
|
|
3
5
|
*
|
|
@@ -151,6 +153,7 @@ import {
|
|
|
151
153
|
resolveProjectRoot,
|
|
152
154
|
} from "./worktree.js";
|
|
153
155
|
import { GitServiceImpl } from "./git-service.js";
|
|
156
|
+
import { nativeCheckoutBranch } from "./native-git-bridge.js";
|
|
154
157
|
import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
|
|
155
158
|
import {
|
|
156
159
|
createAutoWorktree,
|
|
@@ -353,6 +356,14 @@ function restoreProjectRootEnv(): void {
|
|
|
353
356
|
s.projectRootEnvCaptured = false;
|
|
354
357
|
}
|
|
355
358
|
|
|
359
|
+
export function _captureProjectRootEnvForTest(projectRoot: string): void {
|
|
360
|
+
captureProjectRootEnv(projectRoot);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
export function _restoreProjectRootEnvForTest(): void {
|
|
364
|
+
restoreProjectRootEnv();
|
|
365
|
+
}
|
|
366
|
+
|
|
356
367
|
function captureMilestoneLockEnv(milestoneId: string | null): void {
|
|
357
368
|
if (!s.milestoneLockEnvCaptured) {
|
|
358
369
|
s.hadMilestoneLockEnv = Object.prototype.hasOwnProperty.call(process.env, "GSD_MILESTONE_LOCK");
|
|
@@ -441,6 +452,16 @@ export function _synthesizePausedSessionRecoveryForTest(
|
|
|
441
452
|
return synthesizePausedSessionRecovery(basePath, unitType, unitId, sessionFile);
|
|
442
453
|
}
|
|
443
454
|
|
|
455
|
+
export function _resolvePausedResumeBasePathForTest(
|
|
456
|
+
basePath: string,
|
|
457
|
+
pausedWorktreePath: string | null | undefined,
|
|
458
|
+
pathExists: (path: string) => boolean = existsSync,
|
|
459
|
+
): string {
|
|
460
|
+
return pausedWorktreePath && pathExists(pausedWorktreePath)
|
|
461
|
+
? pausedWorktreePath
|
|
462
|
+
: basePath;
|
|
463
|
+
}
|
|
464
|
+
|
|
444
465
|
const DETACHED_AUTO_KEEPALIVE_INTERVAL_MS = 30_000;
|
|
445
466
|
|
|
446
467
|
function withDetachedAutoKeepalive<T>(run: Promise<T>): Promise<T> {
|
|
@@ -672,6 +693,30 @@ export function isAutoPaused(): boolean {
|
|
|
672
693
|
return s.paused;
|
|
673
694
|
}
|
|
674
695
|
|
|
696
|
+
export interface ResumeResourceRefreshDeps {
|
|
697
|
+
env?: NodeJS.ProcessEnv;
|
|
698
|
+
importModule?: (specifier: string) => Promise<any>;
|
|
699
|
+
openProjectDb?: (basePath: string) => Promise<void>;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
export async function refreshResumeResourcesAndDb(
|
|
703
|
+
basePath: string,
|
|
704
|
+
deps: ResumeResourceRefreshDeps = {},
|
|
705
|
+
): Promise<void> {
|
|
706
|
+
const env = deps.env ?? process.env;
|
|
707
|
+
const importModule = deps.importModule ?? ((specifier: string) => import(specifier));
|
|
708
|
+
const agentDir = env.GSD_CODING_AGENT_DIR || join(gsdHome(), "agent");
|
|
709
|
+
const pkgRoot = env.GSD_PKG_ROOT;
|
|
710
|
+
const resourceLoaderPath = pkgRoot
|
|
711
|
+
? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
|
|
712
|
+
: new URL("../../../resource-loader.js", import.meta.url).href;
|
|
713
|
+
const { initResources } = await importModule(resourceLoaderPath);
|
|
714
|
+
initResources(agentDir);
|
|
715
|
+
const { primeCache } = await importModule("./prompt-loader.js");
|
|
716
|
+
primeCache();
|
|
717
|
+
await (deps.openProjectDb ?? openProjectDbIfPresent)(basePath);
|
|
718
|
+
}
|
|
719
|
+
|
|
675
720
|
export function setActiveEngineId(id: string | null): void {
|
|
676
721
|
s.activeEngineId = id;
|
|
677
722
|
}
|
|
@@ -926,7 +971,23 @@ function handleLostSessionLock(
|
|
|
926
971
|
* the stale unit state, progress widget, status badge, and restores CWD so
|
|
927
972
|
* the dashboard does not show an orphaned timer and the shell is usable.
|
|
928
973
|
*/
|
|
929
|
-
function
|
|
974
|
+
export async function rerootCommandSession(
|
|
975
|
+
cmdCtx: Pick<ExtensionCommandContext, "newSession"> | null | undefined,
|
|
976
|
+
workspaceRoot: string,
|
|
977
|
+
): Promise<{ status: "skipped" | "ok" | "cancelled" | "failed"; error?: string }> {
|
|
978
|
+
if (!cmdCtx || !workspaceRoot) return { status: "skipped" };
|
|
979
|
+
try {
|
|
980
|
+
const result = await cmdCtx.newSession({ workspaceRoot });
|
|
981
|
+
return result.cancelled ? { status: "cancelled" } : { status: "ok" };
|
|
982
|
+
} catch (err) {
|
|
983
|
+
return {
|
|
984
|
+
status: "failed",
|
|
985
|
+
error: err instanceof Error ? err.message : String(err),
|
|
986
|
+
};
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
export async function cleanupAfterLoopExit(ctx: ExtensionContext): Promise<void> {
|
|
930
991
|
s.currentUnit = null;
|
|
931
992
|
s.active = false;
|
|
932
993
|
deactivateGSD();
|
|
@@ -964,6 +1025,34 @@ function cleanupAfterLoopExit(ctx: ExtensionContext): void {
|
|
|
964
1025
|
logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
965
1026
|
}
|
|
966
1027
|
}
|
|
1028
|
+
|
|
1029
|
+
if (s.originalBasePath && s.cmdCtx) {
|
|
1030
|
+
const result = await rerootCommandSession(s.cmdCtx, s.basePath);
|
|
1031
|
+
if (result.status === "cancelled") {
|
|
1032
|
+
logWarning("engine", "post-loop session re-root was cancelled", { file: "auto.ts", basePath: s.basePath });
|
|
1033
|
+
} else if (result.status === "failed") {
|
|
1034
|
+
logWarning("engine", `post-loop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.basePath });
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
export function _cleanupAfterLoopExitForTest(ctx: ExtensionContext): Promise<void> {
|
|
1040
|
+
return cleanupAfterLoopExit(ctx);
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
export type AutoWorktreeExitAction = "skip" | "merge" | "preserve";
|
|
1044
|
+
|
|
1045
|
+
export function _resolveAutoWorktreeExitActionForTest(
|
|
1046
|
+
currentMilestoneId: string | null | undefined,
|
|
1047
|
+
milestoneMergedInPhases: boolean,
|
|
1048
|
+
milestoneComplete: boolean,
|
|
1049
|
+
): AutoWorktreeExitAction {
|
|
1050
|
+
const action = _selectStopAutoWorktreeExit({
|
|
1051
|
+
currentMilestoneId: currentMilestoneId ?? null,
|
|
1052
|
+
milestoneComplete,
|
|
1053
|
+
milestoneMergedInPhases,
|
|
1054
|
+
});
|
|
1055
|
+
return action === "none" ? "skip" : action;
|
|
967
1056
|
}
|
|
968
1057
|
|
|
969
1058
|
export async function stopAuto(
|
|
@@ -1117,10 +1206,16 @@ export async function stopAuto(
|
|
|
1117
1206
|
logWarning("engine", `milestone summary check failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1118
1207
|
}
|
|
1119
1208
|
|
|
1120
|
-
|
|
1209
|
+
const exitAction = _selectStopAutoWorktreeExit({
|
|
1210
|
+
currentMilestoneId: s.currentMilestoneId,
|
|
1211
|
+
milestoneComplete,
|
|
1212
|
+
milestoneMergedInPhases: s.milestoneMergedInPhases,
|
|
1213
|
+
});
|
|
1214
|
+
|
|
1215
|
+
if (exitAction === "merge") {
|
|
1121
1216
|
// Milestone is complete — merge worktree branch back to main
|
|
1122
1217
|
resolver.mergeAndExit(s.currentMilestoneId, notifyCtx);
|
|
1123
|
-
} else {
|
|
1218
|
+
} else if (exitAction === "preserve") {
|
|
1124
1219
|
// Milestone still in progress — preserve branch for later resumption
|
|
1125
1220
|
resolver.exitMilestone(s.currentMilestoneId, notifyCtx, {
|
|
1126
1221
|
preserveBranch: true,
|
|
@@ -1128,6 +1223,10 @@ export async function stopAuto(
|
|
|
1128
1223
|
}
|
|
1129
1224
|
}
|
|
1130
1225
|
} catch (e) {
|
|
1226
|
+
ctx?.ui.notify(
|
|
1227
|
+
`Worktree cleanup failed for ${s.currentMilestoneId ?? "current milestone"}: ${e instanceof Error ? e.message : String(e)}. Resolve the preserved branch/worktree and run /gsd auto to resume.`,
|
|
1228
|
+
"warning",
|
|
1229
|
+
);
|
|
1131
1230
|
debugLog("stop-cleanup-worktree", { error: e instanceof Error ? e.message : String(e) });
|
|
1132
1231
|
}
|
|
1133
1232
|
|
|
@@ -1173,6 +1272,19 @@ export async function stopAuto(
|
|
|
1173
1272
|
debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
|
|
1174
1273
|
}
|
|
1175
1274
|
|
|
1275
|
+
// Re-root the active command session/tool runtime after worktree teardown.
|
|
1276
|
+
// mergeAndExit restores process.cwd(), but AgentSession has already captured
|
|
1277
|
+
// its own cwd for tools and system prompt; refresh it before returning to the
|
|
1278
|
+
// user so follow-up commands do not target a removed milestone worktree.
|
|
1279
|
+
if (s.originalBasePath && ctx && s.cmdCtx) {
|
|
1280
|
+
const result = await rerootCommandSession(s.cmdCtx, s.basePath);
|
|
1281
|
+
if (result.status === "cancelled") {
|
|
1282
|
+
logWarning("engine", "post-stop session re-root was cancelled", { file: "auto.ts", basePath: s.basePath });
|
|
1283
|
+
} else if (result.status === "failed") {
|
|
1284
|
+
logWarning("engine", `post-stop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.basePath });
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1176
1288
|
// ── Step 8: Ledger notification ──
|
|
1177
1289
|
try {
|
|
1178
1290
|
const ledger = getLedger();
|
|
@@ -1301,6 +1413,17 @@ export async function stopAuto(
|
|
|
1301
1413
|
}
|
|
1302
1414
|
}
|
|
1303
1415
|
|
|
1416
|
+
export type StopAutoWorktreeExitAction = "none" | "merge" | "preserve";
|
|
1417
|
+
|
|
1418
|
+
export function _selectStopAutoWorktreeExit(args: {
|
|
1419
|
+
currentMilestoneId: string | null;
|
|
1420
|
+
milestoneComplete: boolean;
|
|
1421
|
+
milestoneMergedInPhases: boolean;
|
|
1422
|
+
}): StopAutoWorktreeExitAction {
|
|
1423
|
+
if (!args.currentMilestoneId || args.milestoneMergedInPhases) return "none";
|
|
1424
|
+
return args.milestoneComplete ? "merge" : "preserve";
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1304
1427
|
/**
|
|
1305
1428
|
* Pause auto-mode without destroying state. Context is preserved.
|
|
1306
1429
|
* The user can interact with the agent, then `/gsd auto` resumes
|
|
@@ -1436,6 +1559,7 @@ function buildResolverDeps(): WorktreeResolverDeps {
|
|
|
1436
1559
|
getAutoWorktreePath,
|
|
1437
1560
|
autoCommitCurrentBranch,
|
|
1438
1561
|
getCurrentBranch,
|
|
1562
|
+
checkoutBranch: nativeCheckoutBranch,
|
|
1439
1563
|
autoWorktreeBranch,
|
|
1440
1564
|
resolveMilestoneFile,
|
|
1441
1565
|
readFileSync: (path: string, encoding: string) =>
|
|
@@ -1978,9 +2102,7 @@ export async function startAuto(
|
|
|
1978
2102
|
{ file: "auto.ts", milestoneId: s.currentMilestoneId ?? "" },
|
|
1979
2103
|
);
|
|
1980
2104
|
}
|
|
1981
|
-
|
|
1982
|
-
s.basePath = resumeWorktreePath;
|
|
1983
|
-
}
|
|
2105
|
+
s.basePath = _resolvePausedResumeBasePathForTest(base, resumeWorktreePath);
|
|
1984
2106
|
// Rebuild scope now that s.basePath reflects the actual worktree (or project root).
|
|
1985
2107
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1986
2108
|
// Ensure the workflow-logger audit log is pinned to the project root
|
|
@@ -2032,20 +2154,7 @@ export async function startAuto(
|
|
|
2032
2154
|
// tree; deployed extensions live at ~/.gsd/agent/extensions/gsd/ where the
|
|
2033
2155
|
// relative path resolves to ~/.gsd/agent/resource-loader.js which doesn't exist.
|
|
2034
2156
|
// Using GSD_PKG_ROOT constructs a correct absolute path in both contexts (#3949).
|
|
2035
|
-
|
|
2036
|
-
const pkgRoot = process.env.GSD_PKG_ROOT;
|
|
2037
|
-
const resourceLoaderPath = pkgRoot
|
|
2038
|
-
? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
|
|
2039
|
-
: new URL("../../../resource-loader.js", import.meta.url).href;
|
|
2040
|
-
const { initResources } = await import(resourceLoaderPath);
|
|
2041
|
-
initResources(agentDir);
|
|
2042
|
-
// initResources() uses synchronous fs APIs, so the prompt-template cache
|
|
2043
|
-
// can be primed immediately — no need for the legacy 1s setTimeout deferral.
|
|
2044
|
-
const { primeCache } = await import("./prompt-loader.js");
|
|
2045
|
-
primeCache();
|
|
2046
|
-
// Open the project DB before rebuild/derive so resume uses DB-backed
|
|
2047
|
-
// state instead of falling back to stale markdown parsing (#2940).
|
|
2048
|
-
await openProjectDbIfPresent(s.basePath);
|
|
2157
|
+
await refreshResumeResourcesAndDb(s.basePath);
|
|
2049
2158
|
try {
|
|
2050
2159
|
await rebuildState(s.basePath);
|
|
2051
2160
|
pi.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "sync" as const, preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, state: await deriveState(s.basePath) });
|
|
@@ -2117,7 +2226,7 @@ export async function startAuto(
|
|
|
2117
2226
|
runKernelLoop: runUokKernelLoop,
|
|
2118
2227
|
runLegacyLoop: runLegacyAutoLoop,
|
|
2119
2228
|
});
|
|
2120
|
-
cleanupAfterLoopExit(ctx);
|
|
2229
|
+
await cleanupAfterLoopExit(ctx);
|
|
2121
2230
|
return;
|
|
2122
2231
|
}
|
|
2123
2232
|
|
|
@@ -2177,7 +2286,7 @@ export async function startAuto(
|
|
|
2177
2286
|
runKernelLoop: runUokKernelLoop,
|
|
2178
2287
|
runLegacyLoop: runLegacyAutoLoop,
|
|
2179
2288
|
});
|
|
2180
|
-
cleanupAfterLoopExit(ctx);
|
|
2289
|
+
await cleanupAfterLoopExit(ctx);
|
|
2181
2290
|
}
|
|
2182
2291
|
|
|
2183
2292
|
// describeNextUnit is imported from auto-dashboard.ts and re-exported
|
|
@@ -2301,24 +2410,7 @@ export async function dispatchHookUnit(
|
|
|
2301
2410
|
startedAt: hookStartedAt,
|
|
2302
2411
|
};
|
|
2303
2412
|
|
|
2304
|
-
|
|
2305
|
-
// newSession() snapshots process.cwd() during construction; chdir-ing
|
|
2306
|
-
// afterward leaves the session rooted to whatever cwd was when the call
|
|
2307
|
-
// was made. Must be synchronous — no awaits between chdir and newSession.
|
|
2308
|
-
try { if (process.cwd() !== s.basePath) process.chdir(s.basePath); } catch (err) {
|
|
2309
|
-
const msg = `Failed to chdir before hook newSession (basePath: ${s.basePath}): ${err instanceof Error ? err.message : String(err)}`;
|
|
2310
|
-
logWarning("engine", msg, { file: "auto.ts", basePath: s.basePath, error: err instanceof Error ? err.message : String(err) });
|
|
2311
|
-
ctx.ui.notify(`${msg}. Cancelling hook dispatch to avoid running in the wrong directory.`, "error");
|
|
2312
|
-
if (wasActive) {
|
|
2313
|
-
s.basePath = previousBasePath;
|
|
2314
|
-
s.currentUnit = previousCurrentUnit;
|
|
2315
|
-
} else {
|
|
2316
|
-
s.reset();
|
|
2317
|
-
}
|
|
2318
|
-
return false;
|
|
2319
|
-
}
|
|
2320
|
-
|
|
2321
|
-
const result = await s.cmdCtx!.newSession();
|
|
2413
|
+
const result = await s.cmdCtx!.newSession({ workspaceRoot: s.basePath });
|
|
2322
2414
|
if (result.cancelled) {
|
|
2323
2415
|
await stopAuto(ctx, pi);
|
|
2324
2416
|
return false;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
|
|
4
4
|
|
|
5
|
+
import type { ErrorContext } from "../auto/types.js";
|
|
5
6
|
import { logWarning } from "../workflow-logger.js";
|
|
6
7
|
import {
|
|
7
8
|
checkDeepProjectSetupAfterTurn,
|
|
@@ -14,7 +15,12 @@ import { clearPathCache } from "../paths.js";
|
|
|
14
15
|
import { getAutoDashboardData, getAutoModeStartModel, isAutoActive, pauseAuto, setCurrentDispatchedModelId } from "../auto.js";
|
|
15
16
|
import { getNextFallbackModel, resolveModelWithFallbacksForUnit } from "../preferences.js";
|
|
16
17
|
import { pauseAutoForProviderError } from "../provider-error-pause.js";
|
|
17
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
isSessionSwitchAbortGraceActive,
|
|
20
|
+
isSessionSwitchInFlight,
|
|
21
|
+
resolveAgentEnd,
|
|
22
|
+
resolveAgentEndCancelled,
|
|
23
|
+
} from "../auto/resolve.js";
|
|
18
24
|
import { resolveModelId } from "../auto-model-selection.js";
|
|
19
25
|
import { resolveProjectRoot } from "../worktree.js";
|
|
20
26
|
import { clearDiscussionFlowState } from "./write-gate.js";
|
|
@@ -76,6 +82,103 @@ export function isUserInitiatedAbortMessage(message: string | undefined | null):
|
|
|
76
82
|
return /\b(?:claude code process aborted by user|request aborted by user|process aborted by user)\b/i.test(message);
|
|
77
83
|
}
|
|
78
84
|
|
|
85
|
+
function isBareClaudeCodeSessionSwitchAbortMarker(message: string | undefined | null): boolean {
|
|
86
|
+
if (!message) return false;
|
|
87
|
+
const normalized = message.trim().replace(/\s+/g, " ").toLowerCase();
|
|
88
|
+
return normalized === "claude code process aborted by user"
|
|
89
|
+
|| normalized === "request aborted by user"
|
|
90
|
+
|| normalized === "process aborted by user"
|
|
91
|
+
|| normalized === "claude code stream aborted by caller";
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function readAssistantTextContent(content: unknown): string {
|
|
95
|
+
if (!Array.isArray(content)) return "";
|
|
96
|
+
return content
|
|
97
|
+
.map((block) => {
|
|
98
|
+
if (!block || typeof block !== "object") return "";
|
|
99
|
+
const text = (block as { text?: unknown }).text;
|
|
100
|
+
return typeof text === "string" ? text : "";
|
|
101
|
+
})
|
|
102
|
+
.filter(Boolean)
|
|
103
|
+
.join("\n");
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function isClaudeCodeSessionSwitchAbortMessage(lastMsg: unknown): boolean {
|
|
107
|
+
if (!lastMsg || typeof lastMsg !== "object") return false;
|
|
108
|
+
const m = lastMsg as { stopReason?: unknown; errorMessage?: unknown; content?: unknown };
|
|
109
|
+
const carriers = [
|
|
110
|
+
m.errorMessage ? String(m.errorMessage) : "",
|
|
111
|
+
readAssistantTextContent(m.content),
|
|
112
|
+
].filter((value) => value.trim().length > 0);
|
|
113
|
+
|
|
114
|
+
if ((m.stopReason === "error" || m.stopReason === "aborted") && carriers.length > 0) {
|
|
115
|
+
return carriers.every(isBareClaudeCodeSessionSwitchAbortMarker);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Resolve an agent_end event observed while a session switch is in flight.
|
|
123
|
+
*
|
|
124
|
+
* #5538-followup: When `newSession()` aborts an in-flight stream as part of a
|
|
125
|
+
* session transition (run-unit.ts:63 → _settleCurrentTurnForSessionTransition
|
|
126
|
+
* → agent.abort()), the SDK emits "Claude Code process aborted by user" or
|
|
127
|
+
* "Request aborted by user" against the previous unit's turn. The previous
|
|
128
|
+
* code path treated that as a user cancellation and propagated it to the next
|
|
129
|
+
* unit via the pending-switch-cancellation queue, killing auto-mode with
|
|
130
|
+
* "Auto-mode stopped — Unit aborted: Claude Code process aborted by user"
|
|
131
|
+
* even though no user input occurred.
|
|
132
|
+
*
|
|
133
|
+
* Claude Code abort markers are intentionally ignored when the abort fires
|
|
134
|
+
* while the session-switch is in flight: the abort is the expected side-effect
|
|
135
|
+
* of the transition, not a user signal. Other branches (genuine `stopReason
|
|
136
|
+
* === "aborted"` with diagnostic content/errorMessage) preserve the prior
|
|
137
|
+
* behavior.
|
|
138
|
+
*/
|
|
139
|
+
export function _handleSessionSwitchAgentEnd(
|
|
140
|
+
lastMsg: unknown,
|
|
141
|
+
resolveCancelled: (ctx: ErrorContext) => boolean,
|
|
142
|
+
): void {
|
|
143
|
+
if (!lastMsg || typeof lastMsg !== "object") return;
|
|
144
|
+
const m = lastMsg as { stopReason?: unknown; errorMessage?: unknown; content?: unknown };
|
|
145
|
+
|
|
146
|
+
if (isClaudeCodeSessionSwitchAbortMessage(m)) {
|
|
147
|
+
// Internal abort from in-flight session transition — drop on the floor.
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (m.stopReason === "error") {
|
|
152
|
+
const rawErrorMsg = m.errorMessage ? String(m.errorMessage) : "";
|
|
153
|
+
if (isBareClaudeCodeSessionSwitchAbortMarker(rawErrorMsg)) {
|
|
154
|
+
// Internal abort from in-flight session transition — drop on the floor.
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (m.stopReason === "aborted") {
|
|
161
|
+
const content = m.content;
|
|
162
|
+
const hasEmptyContent = Array.isArray(content) && content.length === 0;
|
|
163
|
+
const hasErrorMessage = !!m.errorMessage;
|
|
164
|
+
if (!hasEmptyContent || hasErrorMessage) {
|
|
165
|
+
resolveCancelled(_buildAbortedPauseContext(m as { errorMessage?: unknown }));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export function resolveAgentEndErrorDisplay(
|
|
171
|
+
rawErrorMsg: string,
|
|
172
|
+
content: unknown,
|
|
173
|
+
): string {
|
|
174
|
+
const isUseless = !rawErrorMsg || /^(success|ok|true|error|unknown)$/i.test(rawErrorMsg.trim());
|
|
175
|
+
if (isUseless && Array.isArray(content)) {
|
|
176
|
+
const textBlock = content.find((b: any) => b.type === "text" && b.text);
|
|
177
|
+
if (textBlock) return (textBlock as any).text.slice(0, 300);
|
|
178
|
+
}
|
|
179
|
+
return rawErrorMsg;
|
|
180
|
+
}
|
|
181
|
+
|
|
79
182
|
async function pauseTransientWithBackoff(
|
|
80
183
|
cls: ErrorClass,
|
|
81
184
|
pi: ExtensionAPI,
|
|
@@ -156,23 +259,14 @@ export async function handleAgentEnd(
|
|
|
156
259
|
|
|
157
260
|
const lastMsg = event.messages[event.messages.length - 1];
|
|
158
261
|
if (isSessionSwitchInFlight()) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
} else if (lastMsg && "stopReason" in lastMsg && lastMsg.stopReason === "aborted") {
|
|
169
|
-
const content = "content" in lastMsg ? lastMsg.content : undefined;
|
|
170
|
-
const hasEmptyContent = Array.isArray(content) && content.length === 0;
|
|
171
|
-
const hasErrorMessage = "errorMessage" in lastMsg && !!lastMsg.errorMessage;
|
|
172
|
-
if (!hasEmptyContent || hasErrorMessage) {
|
|
173
|
-
resolveAgentEndCancelled(_buildAbortedPauseContext(lastMsg as { errorMessage?: unknown }));
|
|
174
|
-
}
|
|
175
|
-
}
|
|
262
|
+
_handleSessionSwitchAgentEnd(lastMsg, resolveAgentEndCancelled);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (isSessionSwitchAbortGraceActive() && isClaudeCodeSessionSwitchAbortMessage(lastMsg)) {
|
|
267
|
+
// Claude Code can report the abort from `newSession()` a few hundred ms
|
|
268
|
+
// after the guard drops. That event belongs to the old turn; do not let it
|
|
269
|
+
// cancel the freshly-dispatched unit.
|
|
176
270
|
return;
|
|
177
271
|
}
|
|
178
272
|
|
|
@@ -215,15 +309,13 @@ export async function handleAgentEnd(
|
|
|
215
309
|
});
|
|
216
310
|
return;
|
|
217
311
|
}
|
|
218
|
-
const isUseless = !rawErrorMsg || /^(success|ok|true|error|unknown)$/i.test(rawErrorMsg.trim());
|
|
219
312
|
// #3588: When errorMessage is uninformative, extract the real error from
|
|
220
313
|
// the assistant message text content for display purposes only.
|
|
221
314
|
// Classification still uses rawErrorMsg to avoid false positives from prose.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
315
|
+
const displayMsg = resolveAgentEndErrorDisplay(
|
|
316
|
+
rawErrorMsg,
|
|
317
|
+
"content" in lastMsg ? lastMsg.content : undefined,
|
|
318
|
+
);
|
|
227
319
|
const errorDetail = displayMsg ? `: ${displayMsg}` : "";
|
|
228
320
|
const explicitRetryAfterMs = ("retryAfterMs" in lastMsg && typeof lastMsg.retryAfterMs === "number") ? lastMsg.retryAfterMs : undefined;
|
|
229
321
|
|