gsd-pi 2.80.0-dev.96f4d89d5 → 2.80.0-dev.a947d025c
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 +35 -59
- 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/contracts.js +2 -0
- package/dist/resources/extensions/gsd/auto/loop.js +103 -9
- package/dist/resources/extensions/gsd/auto/orchestrator.js +48 -4
- package/dist/resources/extensions/gsd/auto/phases.js +311 -154
- 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 +9 -1
- package/dist/resources/extensions/gsd/auto/unit-runner-events.js +7 -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-dashboard.js +18 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
- package/dist/resources/extensions/gsd/auto-dispatch.js +26 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +122 -88
- package/dist/resources/extensions/gsd/auto-prompts.js +214 -17
- package/dist/resources/extensions/gsd/auto-recovery.js +197 -9
- package/dist/resources/extensions/gsd/auto-start.js +254 -17
- 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 +229 -336
- package/dist/resources/extensions/gsd/auto.js +273 -87
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +122 -11
- 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 +341 -55
- 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 +147 -2
- package/dist/resources/extensions/gsd/clean-root-preflight.js +65 -9
- package/dist/resources/extensions/gsd/commands/dispatcher.js +5 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
- package/dist/resources/extensions/gsd/commands-config.js +1 -1
- package/dist/resources/extensions/gsd/commands-eval-review.js +2 -2
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +17 -12
- package/dist/resources/extensions/gsd/commands-handlers.js +23 -9
- package/dist/resources/extensions/gsd/context-budget.js +37 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +56 -10
- package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +92 -0
- package/dist/resources/extensions/gsd/db-base-schema.js +18 -2
- package/dist/resources/extensions/gsd/db-migration-steps.js +22 -0
- package/dist/resources/extensions/gsd/detection.js +106 -0
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
- package/dist/resources/extensions/gsd/git-service.js +73 -5
- package/dist/resources/extensions/gsd/gsd-db.js +146 -13
- package/dist/resources/extensions/gsd/guided-flow.js +149 -48
- package/dist/resources/extensions/gsd/health-widget.js +3 -0
- 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/recovery-classification.js +94 -0
- 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/state-reconciliation.js +27 -0
- package/dist/resources/extensions/gsd/tool-contract.js +50 -0
- 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-lifecycle.js +958 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
- package/dist/resources/extensions/gsd/worktree-safety.js +119 -0
- package/dist/resources/extensions/gsd/worktree-state-projection.js +317 -0
- 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 +6 -4
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +22 -17
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
- package/packages/mcp-server/src/workflow-tools.ts +30 -16
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +4 -1
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +9 -2
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +43 -11
- 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 +31 -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 +52 -11
- 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 +26 -10
- 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 +36 -1
- 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 +21 -2
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +94 -16
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +78 -0
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +11 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +9 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js +103 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js +66 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js +24 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +8 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +20 -7
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +102 -3
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +60 -4
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +2 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +46 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -2
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +81 -4
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +20 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +25 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js +22 -0
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +6 -7
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +2 -3
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js +22 -56
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js +12 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.js +14 -6
- package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.js +12 -3
- package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.js +10 -3
- package/packages/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +7 -62
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +115 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts +19 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js +20 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts +4 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js +9 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +6 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +137 -19
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +2 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +32 -7
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +18 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +225 -16
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +85 -2
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +71 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +25 -3
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +36 -27
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +21 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-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 +40 -1
- 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 +102 -16
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +91 -0
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +18 -0
- package/packages/pi-coding-agent/src/core/compaction-threshold.test.ts +121 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.test.ts +32 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.ts +66 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +113 -3
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +24 -6
- package/packages/pi-coding-agent/src/core/extensions/types.ts +63 -2
- package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
- package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +60 -0
- package/packages/pi-coding-agent/src/core/sdk.ts +92 -4
- package/packages/pi-coding-agent/src/core/settings-manager.ts +39 -1
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
- package/packages/pi-coding-agent/src/core/tools/bash-spawn-windows.test.ts +22 -66
- package/packages/pi-coding-agent/src/core/tools/bash.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/edit.ts +13 -1
- package/packages/pi-coding-agent/src/core/tools/find.ts +15 -6
- package/packages/pi-coding-agent/src/core/tools/grep.ts +13 -3
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/index.ts +8 -0
- package/packages/pi-coding-agent/src/core/tools/ls.ts +11 -3
- package/packages/pi-coding-agent/src/core/tools/read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +11 -72
- package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +127 -0
- package/packages/pi-coding-agent/src/core/tools/tool-target.ts +48 -0
- package/packages/pi-coding-agent/src/core/tools/write.ts +14 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +7 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +185 -19
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +2 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +41 -10
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +260 -16
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +75 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +107 -3
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +27 -3
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +36 -27
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +25 -0
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +1 -1
- 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/packages/rpc-client/README.md +7 -0
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +36 -27
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/src/resources/GSD-WORKFLOW.md +2 -2
- package/src/resources/extensions/claude-code-cli/readiness.ts +25 -7
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +42 -3
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +67 -0
- package/src/resources/extensions/github-sync/sync.ts +8 -1
- package/src/resources/extensions/github-sync/tests/sync-source.test.ts +6 -18
- package/src/resources/extensions/gsd/auto/contracts.ts +19 -2
- package/src/resources/extensions/gsd/auto/loop-deps.ts +11 -11
- package/src/resources/extensions/gsd/auto/loop.ts +134 -16
- package/src/resources/extensions/gsd/auto/orchestrator.ts +52 -4
- package/src/resources/extensions/gsd/auto/phases.ts +427 -220
- 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 +9 -1
- package/src/resources/extensions/gsd/auto/types.ts +3 -0
- package/src/resources/extensions/gsd/auto/unit-runner-events.ts +15 -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-dashboard.ts +20 -0
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
- package/src/resources/extensions/gsd/auto-dispatch.ts +33 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +134 -90
- package/src/resources/extensions/gsd/auto-prompts.ts +228 -16
- package/src/resources/extensions/gsd/auto-recovery.ts +207 -7
- package/src/resources/extensions/gsd/auto-start.ts +326 -25
- 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 +259 -360
- package/src/resources/extensions/gsd/auto.ts +336 -89
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +147 -11
- 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 +396 -55
- 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 +153 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +72 -9
- package/src/resources/extensions/gsd/commands/dispatcher.ts +6 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +4 -2
- package/src/resources/extensions/gsd/commands-config.ts +1 -1
- package/src/resources/extensions/gsd/commands-eval-review.ts +2 -2
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +17 -12
- package/src/resources/extensions/gsd/commands-handlers.ts +34 -15
- package/src/resources/extensions/gsd/context-budget.ts +44 -2
- package/src/resources/extensions/gsd/crash-recovery.ts +67 -10
- package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +107 -0
- package/src/resources/extensions/gsd/db-base-schema.ts +19 -2
- package/src/resources/extensions/gsd/db-migration-steps.ts +25 -0
- package/src/resources/extensions/gsd/detection.ts +128 -0
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
- package/src/resources/extensions/gsd/git-service.ts +87 -10
- package/src/resources/extensions/gsd/gsd-db.ts +168 -13
- package/src/resources/extensions/gsd/guided-flow.ts +175 -55
- package/src/resources/extensions/gsd/health-widget.ts +3 -0
- 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/recovery-classification.ts +122 -0
- 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/state-reconciliation.ts +57 -0
- 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 +544 -41
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +80 -59
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +119 -2
- 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 +175 -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 +184 -2
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +32 -30
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +32 -128
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +20 -54
- package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +20 -30
- package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +17 -29
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +142 -0
- package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +21 -39
- package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +15 -24
- package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +44 -29
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +39 -51
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +159 -213
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +15 -32
- package/src/resources/extensions/gsd/tests/browser-teardown.test.ts +0 -41
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +97 -2
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +34 -27
- package/src/resources/extensions/gsd/tests/cmux.test.ts +51 -53
- package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +39 -61
- package/src/resources/extensions/gsd/tests/commands-config.test.ts +26 -19
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +14 -1
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +29 -33
- package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +45 -108
- package/src/resources/extensions/gsd/tests/context-budget.test.ts +10 -1
- package/src/resources/extensions/gsd/tests/context-store.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +90 -31
- package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +18 -10
- package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +4 -68
- package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +6 -11
- 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 +151 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -20
- package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +18 -26
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/init-skip-git.test.ts +9 -12
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/git-locale.test.ts +31 -20
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +60 -202
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +13 -56
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +248 -10
- 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 +37 -7
- 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 +267 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +88 -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 +44 -9
- package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +144 -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 +95 -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/runtime-invariant-modules.test.ts +91 -0
- 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 +222 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +44 -42
- package/src/resources/extensions/gsd/tests/signal-handlers.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +56 -24
- package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +51 -11
- package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +66 -50
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +68 -107
- package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +115 -42
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +21 -59
- package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +25 -116
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +21 -57
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +29 -76
- package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +33 -24
- package/src/resources/extensions/gsd/tests/stale-slice-rows.test.ts +39 -30
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -1
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +101 -2
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -4
- 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/tui-header-lifecycle.test.ts +210 -0
- 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 +50 -31
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +434 -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 +373 -76
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +327 -0
- package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
- 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/tool-contract.ts +82 -0
- 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-lifecycle.ts +1255 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
- package/src/resources/extensions/gsd/worktree-safety.ts +282 -0
- package/src/resources/extensions/gsd/worktree-state-projection.ts +404 -0
- 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/resources/extensions/gsd/worktree-resolver.js +0 -733
- package/dist/web/standalone/.next/static/chunks/8336.631939fb583761fa.js +0 -10
- package/src/resources/extensions/gsd/tests/sync-layer-scope.test.ts +0 -434
- package/src/resources/extensions/gsd/worktree-resolver.ts +0 -909
- /package/dist/web/standalone/.next/static/{y7d--cnc6Cibuva-Lzzw_ → 8G7Lc96dfT0V6VXh6O6Ka}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{y7d--cnc6Cibuva-Lzzw_ → 8G7Lc96dfT0V6VXh6O6Ka}/_ssgManifest.js +0 -0
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Registers GSD extension runtime hooks and token-saving tool policies.
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
2
6
|
import { isToolCallEventType } from "@gsd/pi-coding-agent";
|
|
3
7
|
import { updateSnapshot } from "../ecosystem/gsd-extension-api.js";
|
|
4
8
|
import { buildMilestoneFileName, resolveMilestonePath, resolveSliceFile, resolveSlicePath } from "../paths.js";
|
|
5
|
-
import { canonicalToolName, clearDiscussionFlowState, isDepthConfirmationAnswer, isQueuePhaseActive, markApprovalGateVerified, markDepthVerified, resetWriteGateState, shouldBlockContextWrite, shouldBlockPlanningUnit, shouldBlockQueueExecution, isGateQuestionId, setPendingGate, clearPendingGate, getPendingGate, shouldBlockPendingGate, shouldBlockPendingGateBash, extractDepthVerificationMilestoneId } from "./write-gate.js";
|
|
9
|
+
import { canonicalToolName, clearDiscussionFlowState, isDepthConfirmationAnswer, isQueuePhaseActive, markApprovalGateVerified, markDepthVerified, resetWriteGateState, shouldBlockContextWrite, shouldBlockPlanningUnit, shouldBlockQueueExecution, shouldBlockWorktreeWrite, isGateQuestionId, setPendingGate, clearPendingGate, getPendingGate, shouldBlockPendingGate, shouldBlockPendingGateBash, extractDepthVerificationMilestoneId } from "./write-gate.js";
|
|
6
10
|
import { resolveManifest } from "../unit-context-manifest.js";
|
|
7
11
|
import { isBlockedStateFile, isBashWriteToStateFile, BLOCKED_WRITE_ERROR } from "../write-intercept.js";
|
|
8
12
|
import { loadFile, saveFile, formatContinue } from "../files.js";
|
|
@@ -19,10 +23,213 @@ import { initNotificationWidget } from "../notification-widget.js";
|
|
|
19
23
|
import { resolveWorktreeProjectRoot } from "../worktree-root.js";
|
|
20
24
|
import { extractSubagentAgentClasses } from "./subagent-input.js";
|
|
21
25
|
import { approvalGateIdForUnit, isExplicitApprovalResponse, shouldPauseForUserApprovalQuestion } from "../user-input-boundary.js";
|
|
22
|
-
|
|
23
|
-
// printed it before the TUI launched. Only re-print on /clear (subsequent sessions).
|
|
24
|
-
let isFirstSession = true;
|
|
26
|
+
import { resolveSkillManifest } from "../skill-manifest.js";
|
|
25
27
|
let approvalQuestionAbortInFlight = false;
|
|
28
|
+
async function loadWelcomeScreenModule() {
|
|
29
|
+
const candidates = [];
|
|
30
|
+
const gsdBinPath = process.env.GSD_BIN_PATH;
|
|
31
|
+
if (gsdBinPath) {
|
|
32
|
+
candidates.push(join(dirname(gsdBinPath), "welcome-screen.js"));
|
|
33
|
+
}
|
|
34
|
+
const packageRoot = process.env.GSD_PKG_ROOT;
|
|
35
|
+
if (packageRoot) {
|
|
36
|
+
candidates.push(join(packageRoot, "dist", "welcome-screen.js"));
|
|
37
|
+
candidates.push(join(packageRoot, "src", "welcome-screen.ts"));
|
|
38
|
+
}
|
|
39
|
+
for (const candidate of candidates) {
|
|
40
|
+
try {
|
|
41
|
+
if (!existsSync(candidate))
|
|
42
|
+
continue;
|
|
43
|
+
const mod = await import(pathToFileURL(candidate).href);
|
|
44
|
+
if (typeof mod.buildWelcomeScreenLines === "function") {
|
|
45
|
+
return mod;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Try the next package layout.
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
async function installWelcomeHeader(ctx) {
|
|
55
|
+
if (!ctx.hasUI || typeof ctx.ui?.setHeader !== "function")
|
|
56
|
+
return;
|
|
57
|
+
try {
|
|
58
|
+
const welcome = await loadWelcomeScreenModule();
|
|
59
|
+
if (!welcome)
|
|
60
|
+
return;
|
|
61
|
+
let remoteChannel;
|
|
62
|
+
try {
|
|
63
|
+
const { resolveRemoteConfig } = await import("../../remote-questions/config.js");
|
|
64
|
+
const rc = resolveRemoteConfig();
|
|
65
|
+
if (rc)
|
|
66
|
+
remoteChannel = rc.channel;
|
|
67
|
+
}
|
|
68
|
+
catch { /* non-fatal */ }
|
|
69
|
+
ctx.ui.setHeader(() => {
|
|
70
|
+
let cachedLines;
|
|
71
|
+
let cachedWidth;
|
|
72
|
+
return {
|
|
73
|
+
render(width) {
|
|
74
|
+
if (cachedLines !== undefined && cachedWidth === width)
|
|
75
|
+
return cachedLines;
|
|
76
|
+
cachedLines = welcome.buildWelcomeScreenLines({
|
|
77
|
+
version: process.env.GSD_VERSION || "0.0.0",
|
|
78
|
+
remoteChannel,
|
|
79
|
+
width,
|
|
80
|
+
});
|
|
81
|
+
cachedWidth = width;
|
|
82
|
+
return cachedLines;
|
|
83
|
+
},
|
|
84
|
+
invalidate() {
|
|
85
|
+
cachedLines = undefined;
|
|
86
|
+
cachedWidth = undefined;
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
/* non-fatal */
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
let deferredApprovalGate = null;
|
|
96
|
+
export const MINIMAL_GSD_TOOL_NAMES = [
|
|
97
|
+
"gsd_exec",
|
|
98
|
+
"gsd_exec_search",
|
|
99
|
+
"gsd_resume",
|
|
100
|
+
"gsd_milestone_status",
|
|
101
|
+
"gsd_checkpoint_db",
|
|
102
|
+
"memory_query",
|
|
103
|
+
"capture_thought",
|
|
104
|
+
];
|
|
105
|
+
export const MINIMAL_AUTO_BASE_TOOL_NAMES = [
|
|
106
|
+
"ask_user_questions",
|
|
107
|
+
"bash",
|
|
108
|
+
"bg_shell",
|
|
109
|
+
"edit",
|
|
110
|
+
"glob",
|
|
111
|
+
"grep",
|
|
112
|
+
"ls",
|
|
113
|
+
"read",
|
|
114
|
+
"write",
|
|
115
|
+
];
|
|
116
|
+
const AUTO_UNIT_SCOPED_TOOLS = {
|
|
117
|
+
"research-milestone": ["gsd_summary_save", "gsd_decision_save"],
|
|
118
|
+
"plan-milestone": ["gsd_plan_milestone", "gsd_decision_save", "gsd_requirement_update"],
|
|
119
|
+
"discuss-milestone": ["gsd_summary_save", "gsd_decision_save", "gsd_requirement_save"],
|
|
120
|
+
"validate-milestone": ["gsd_validate_milestone", "gsd_reassess_roadmap", "subagent"],
|
|
121
|
+
"complete-milestone": ["gsd_complete_milestone", "subagent"],
|
|
122
|
+
"research-slice": ["gsd_summary_save", "gsd_decision_save"],
|
|
123
|
+
"plan-slice": ["gsd_plan_slice", "gsd_plan_task", "gsd_decision_save"],
|
|
124
|
+
"refine-slice": ["gsd_plan_slice", "gsd_plan_task", "gsd_decision_save"],
|
|
125
|
+
"replan-slice": ["gsd_replan_slice", "gsd_plan_task", "gsd_decision_save"],
|
|
126
|
+
"complete-slice": ["gsd_slice_complete", "gsd_decision_save", "gsd_requirement_update", "subagent"],
|
|
127
|
+
"reassess-roadmap": ["gsd_reassess_roadmap"],
|
|
128
|
+
"execute-task": ["gsd_task_complete", "gsd_decision_save"],
|
|
129
|
+
"execute-task-simple": ["gsd_task_complete", "gsd_decision_save"],
|
|
130
|
+
"reactive-execute": ["gsd_task_complete", "gsd_decision_save"],
|
|
131
|
+
"run-uat": ["gsd_summary_save"],
|
|
132
|
+
"gate-evaluate": ["gsd_save_gate_result"],
|
|
133
|
+
"rewrite-docs": ["gsd_summary_save", "gsd_decision_save"],
|
|
134
|
+
"workflow-preferences": ["gsd_summary_save"],
|
|
135
|
+
"discuss-project": ["gsd_summary_save", "gsd_decision_save", "gsd_requirement_save"],
|
|
136
|
+
"discuss-requirements": ["gsd_requirement_save", "gsd_summary_save"],
|
|
137
|
+
"research-decision": ["gsd_summary_save"],
|
|
138
|
+
"research-project": ["gsd_summary_save", "gsd_decision_save"],
|
|
139
|
+
};
|
|
140
|
+
const WORKFLOW_GSD_TOOL_NAMES = [
|
|
141
|
+
...MINIMAL_GSD_TOOL_NAMES,
|
|
142
|
+
...Object.values(AUTO_UNIT_SCOPED_TOOLS).flat(),
|
|
143
|
+
].filter(isGsdManagedTool);
|
|
144
|
+
function isGsdManagedTool(name) {
|
|
145
|
+
return name.startsWith("gsd_") || name === "memory_query" || name === "capture_thought" || name === "gsd_graph";
|
|
146
|
+
}
|
|
147
|
+
export function buildMinimalGsdToolSet(activeToolNames) {
|
|
148
|
+
const active = new Set(activeToolNames);
|
|
149
|
+
const preserved = activeToolNames.filter((name) => !isGsdManagedTool(name));
|
|
150
|
+
const minimal = MINIMAL_GSD_TOOL_NAMES.filter((name) => active.has(name));
|
|
151
|
+
return [...new Set([...preserved, ...minimal])];
|
|
152
|
+
}
|
|
153
|
+
export function buildMinimalAutoGsdToolSet(activeToolNames, unitType) {
|
|
154
|
+
const active = new Set(activeToolNames);
|
|
155
|
+
const unitTools = unitType ? AUTO_UNIT_SCOPED_TOOLS[unitType] ?? [] : [];
|
|
156
|
+
const autoBaseTools = new Set(MINIMAL_AUTO_BASE_TOOL_NAMES);
|
|
157
|
+
const preserved = activeToolNames.filter((name) => autoBaseTools.has(name));
|
|
158
|
+
const scoped = [...MINIMAL_GSD_TOOL_NAMES, ...unitTools].filter((name) => active.has(name));
|
|
159
|
+
return [...new Set([...preserved, ...scoped])];
|
|
160
|
+
}
|
|
161
|
+
export function buildMinimalGsdWorkflowToolSet(activeToolNames) {
|
|
162
|
+
const active = new Set(activeToolNames);
|
|
163
|
+
const autoBaseTools = new Set(MINIMAL_AUTO_BASE_TOOL_NAMES);
|
|
164
|
+
const preserved = activeToolNames.filter((name) => autoBaseTools.has(name));
|
|
165
|
+
const scoped = WORKFLOW_GSD_TOOL_NAMES.filter((name) => active.has(name));
|
|
166
|
+
return [...new Set([...preserved, ...scoped])];
|
|
167
|
+
}
|
|
168
|
+
export function buildRequestScopedGsdToolSet(activeToolNames, requestCustomMessages) {
|
|
169
|
+
for (let index = (requestCustomMessages?.length ?? 0) - 1; index >= 0; index--) {
|
|
170
|
+
const currentCustomType = requestCustomMessages?.[index]?.customType;
|
|
171
|
+
if (currentCustomType === "gsd-run" ||
|
|
172
|
+
currentCustomType === "gsd-discuss" ||
|
|
173
|
+
currentCustomType === "gsd-doctor-heal" ||
|
|
174
|
+
currentCustomType === "gsd-triage") {
|
|
175
|
+
return buildMinimalGsdWorkflowToolSet(activeToolNames);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
export function isFullGsdToolSurfaceRequested() {
|
|
181
|
+
return process.env.PI_GSD_FULL_TOOLS === "1";
|
|
182
|
+
}
|
|
183
|
+
function isGeneralGsdToolScopingRequested() {
|
|
184
|
+
return process.env.PI_GSD_MINIMAL_TOOLS === "1";
|
|
185
|
+
}
|
|
186
|
+
function applyMinimalGsdToolSurface(pi) {
|
|
187
|
+
if (isFullGsdToolSurfaceRequested())
|
|
188
|
+
return;
|
|
189
|
+
const dash = getAutoRuntimeSnapshot();
|
|
190
|
+
if (dash.active && dash.currentUnit) {
|
|
191
|
+
pi.setActiveTools(buildMinimalAutoGsdToolSet(pi.getActiveTools(), dash.currentUnit.type));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
if (!isGeneralGsdToolScopingRequested())
|
|
195
|
+
return;
|
|
196
|
+
pi.setActiveTools(buildMinimalGsdToolSet(pi.getActiveTools()));
|
|
197
|
+
}
|
|
198
|
+
export function scopeGsdWorkflowToolsForDispatch(pi, unitType) {
|
|
199
|
+
if (isFullGsdToolSurfaceRequested())
|
|
200
|
+
return null;
|
|
201
|
+
const current = pi.getActiveTools();
|
|
202
|
+
const scoped = unitType
|
|
203
|
+
? buildMinimalAutoGsdToolSet(current, unitType)
|
|
204
|
+
: buildMinimalGsdWorkflowToolSet(current);
|
|
205
|
+
const toolsChanged = !(scoped.length === current.length && scoped.every((name, index) => name === current[index]));
|
|
206
|
+
const skillManifest = resolveSkillManifest(unitType);
|
|
207
|
+
const canScopeSkills = skillManifest !== null && pi.getVisibleSkills && pi.setVisibleSkills;
|
|
208
|
+
if (!toolsChanged && !canScopeSkills) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
if (toolsChanged) {
|
|
212
|
+
pi.setActiveTools(scoped);
|
|
213
|
+
}
|
|
214
|
+
const visibleSkills = canScopeSkills ? pi.getVisibleSkills() : undefined;
|
|
215
|
+
if (canScopeSkills) {
|
|
216
|
+
pi.setVisibleSkills(skillManifest);
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
tools: toolsChanged ? current : null,
|
|
220
|
+
visibleSkills,
|
|
221
|
+
restoreVisibleSkills: Boolean(canScopeSkills),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
export function restoreGsdWorkflowTools(pi, savedState) {
|
|
225
|
+
if (!savedState)
|
|
226
|
+
return;
|
|
227
|
+
if (savedState.tools)
|
|
228
|
+
pi.setActiveTools(savedState.tools);
|
|
229
|
+
if (savedState.restoreVisibleSkills && pi.setVisibleSkills) {
|
|
230
|
+
pi.setVisibleSkills(savedState.visibleSkills);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
26
233
|
async function deriveGsdState(basePath) {
|
|
27
234
|
const { deriveState } = await import("../state.js");
|
|
28
235
|
return deriveState(basePath);
|
|
@@ -52,11 +259,70 @@ async function applyDisabledModelProviderPolicy(ctx) {
|
|
|
52
259
|
// Non-fatal: keep default provider visibility if preferences cannot be loaded.
|
|
53
260
|
}
|
|
54
261
|
}
|
|
55
|
-
|
|
56
|
-
|
|
262
|
+
/**
|
|
263
|
+
* Bridge `context_management.compaction_threshold_percent` from GSD preferences
|
|
264
|
+
* into the agent's runtime compaction settings (#5475). The preference is
|
|
265
|
+
* validated to (0.5, 0.95) at load time, but defense-in-depth normalization
|
|
266
|
+
* here protects against a stale or hand-edited prefs file. Calling with
|
|
267
|
+
* `undefined` clears any prior override so a removed preference does not leak.
|
|
268
|
+
*/
|
|
269
|
+
async function applyCompactionThresholdOverride(ctx) {
|
|
270
|
+
try {
|
|
271
|
+
const { loadEffectiveGSDPreferences } = await import("../preferences.js");
|
|
272
|
+
const prefs = loadEffectiveGSDPreferences();
|
|
273
|
+
const raw = prefs?.preferences.context_management?.compaction_threshold_percent;
|
|
274
|
+
const value = typeof raw === "number" && Number.isFinite(raw) && raw > 0 && raw < 1 ? raw : undefined;
|
|
275
|
+
ctx.setCompactionThresholdOverride(value);
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
// Non-fatal: leave any existing override in place.
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function clearDeferredApprovalGate(basePath) {
|
|
282
|
+
if (!basePath || deferredApprovalGate?.basePath === basePath) {
|
|
283
|
+
deferredApprovalGate = null;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function deferApprovalGate(gateId, basePath) {
|
|
287
|
+
deferredApprovalGate = { gateId, basePath };
|
|
288
|
+
}
|
|
289
|
+
function contextBasePath(ctx) {
|
|
290
|
+
return typeof ctx?.cwd === "string" ? ctx.cwd : process.cwd();
|
|
291
|
+
}
|
|
292
|
+
function activateDeferredApprovalGate(basePath) {
|
|
293
|
+
if (deferredApprovalGate?.basePath !== basePath)
|
|
294
|
+
return;
|
|
295
|
+
setPendingGate(deferredApprovalGate.gateId, basePath);
|
|
296
|
+
deferredApprovalGate = null;
|
|
297
|
+
}
|
|
298
|
+
function isContextDraftSummarySave(toolName, input) {
|
|
299
|
+
if (toolName !== "gsd_summary_save" && toolName !== "summary_save")
|
|
300
|
+
return false;
|
|
301
|
+
if (!input || typeof input !== "object")
|
|
302
|
+
return false;
|
|
303
|
+
return input.artifact_type === "CONTEXT-DRAFT";
|
|
304
|
+
}
|
|
305
|
+
function shouldBlockDeferredApprovalTool(toolName, input, basePath) {
|
|
306
|
+
if (deferredApprovalGate?.basePath !== basePath)
|
|
307
|
+
return { block: false };
|
|
308
|
+
if (toolName === "ask_user_questions")
|
|
309
|
+
return { block: false };
|
|
310
|
+
if (isContextDraftSummarySave(toolName, input))
|
|
311
|
+
return { block: false };
|
|
312
|
+
return {
|
|
313
|
+
block: true,
|
|
314
|
+
reason: [
|
|
315
|
+
`HARD BLOCK: Approval question "${deferredApprovalGate.gateId}" has been shown to the user.`,
|
|
316
|
+
`Only CONTEXT-DRAFT persistence may finish in this same assistant turn.`,
|
|
317
|
+
`Wait for the user's answer before calling additional tools.`,
|
|
318
|
+
].join(" "),
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
export function resolveNotificationStoreBasePath(basePath) {
|
|
322
|
+
return resolveWorktreeProjectRoot(basePath);
|
|
57
323
|
}
|
|
58
324
|
function initSessionNotifications(ctx) {
|
|
59
|
-
initNotificationStore(resolveNotificationStoreBasePath());
|
|
325
|
+
initNotificationStore(resolveNotificationStoreBasePath(contextBasePath(ctx)));
|
|
60
326
|
installNotifyInterceptor(ctx);
|
|
61
327
|
initNotificationWidget(ctx);
|
|
62
328
|
}
|
|
@@ -90,73 +356,58 @@ async function writeContextModeCompactionSnapshot(basePath) {
|
|
|
90
356
|
}
|
|
91
357
|
export function registerHooks(pi, ecosystemHandlers) {
|
|
92
358
|
pi.on("session_start", async (_event, ctx) => {
|
|
359
|
+
const basePath = contextBasePath(ctx);
|
|
93
360
|
initSessionNotifications(ctx);
|
|
94
361
|
if (!isAutoActive()) {
|
|
95
362
|
const { initHealthWidget } = await import("../health-widget.js");
|
|
96
363
|
initHealthWidget(ctx);
|
|
97
364
|
}
|
|
98
|
-
resetWriteGateState(
|
|
365
|
+
resetWriteGateState(basePath);
|
|
99
366
|
resetToolCallLoopGuard();
|
|
100
367
|
approvalQuestionAbortInFlight = false;
|
|
368
|
+
clearDeferredApprovalGate();
|
|
101
369
|
await resetAskUserQuestionsTurnCache();
|
|
102
370
|
await syncServiceTierStatus(ctx);
|
|
103
371
|
await applyDisabledModelProviderPolicy(ctx);
|
|
372
|
+
await applyCompactionThresholdOverride(ctx);
|
|
104
373
|
// Skip MCP auto-prep when running inside an auto-worktree (see session_switch below).
|
|
105
374
|
const { isInAutoWorktree } = await import("../auto-worktree.js");
|
|
106
|
-
if (!isInAutoWorktree(
|
|
375
|
+
if (!isInAutoWorktree(basePath)) {
|
|
107
376
|
const { prepareWorkflowMcpForProject } = await import("../workflow-mcp-auto-prep.js");
|
|
108
|
-
prepareWorkflowMcpForProject(ctx,
|
|
377
|
+
prepareWorkflowMcpForProject(ctx, basePath);
|
|
109
378
|
}
|
|
110
379
|
// Apply show_token_cost preference (#1515)
|
|
111
380
|
try {
|
|
112
381
|
const { loadEffectiveGSDPreferences } = await import("../preferences.js");
|
|
113
|
-
const prefs = loadEffectiveGSDPreferences();
|
|
382
|
+
const prefs = loadEffectiveGSDPreferences(basePath);
|
|
114
383
|
process.env.GSD_SHOW_TOKEN_COST = prefs?.preferences.show_token_cost ? "1" : "";
|
|
115
384
|
}
|
|
116
385
|
catch { /* non-fatal */ }
|
|
117
|
-
|
|
118
|
-
isFirstSession = false;
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
try {
|
|
122
|
-
const gsdBinPath = process.env.GSD_BIN_PATH;
|
|
123
|
-
if (gsdBinPath) {
|
|
124
|
-
const { dirname } = await import("node:path");
|
|
125
|
-
const { printWelcomeScreen } = await import(join(dirname(gsdBinPath), "welcome-screen.js"));
|
|
126
|
-
let remoteChannel;
|
|
127
|
-
try {
|
|
128
|
-
const { resolveRemoteConfig } = await import("../../remote-questions/config.js");
|
|
129
|
-
const rc = resolveRemoteConfig();
|
|
130
|
-
if (rc)
|
|
131
|
-
remoteChannel = rc.channel;
|
|
132
|
-
}
|
|
133
|
-
catch { /* non-fatal */ }
|
|
134
|
-
printWelcomeScreen({ version: process.env.GSD_VERSION || "0.0.0", remoteChannel });
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
catch { /* non-fatal */ }
|
|
138
|
-
}
|
|
386
|
+
await installWelcomeHeader(ctx);
|
|
139
387
|
await loadToolApiKeysForSession();
|
|
140
388
|
if (isAutoActive()) {
|
|
141
389
|
ctx.ui.setWidget("gsd-health", undefined);
|
|
142
390
|
}
|
|
143
391
|
});
|
|
144
392
|
pi.on("session_switch", async (_event, ctx) => {
|
|
393
|
+
const basePath = contextBasePath(ctx);
|
|
145
394
|
initSessionNotifications(ctx);
|
|
146
|
-
resetWriteGateState(
|
|
395
|
+
resetWriteGateState(basePath);
|
|
147
396
|
resetToolCallLoopGuard();
|
|
397
|
+
clearDeferredApprovalGate();
|
|
148
398
|
await resetAskUserQuestionsTurnCache();
|
|
149
|
-
clearDiscussionFlowState(
|
|
399
|
+
clearDiscussionFlowState(basePath);
|
|
150
400
|
await syncServiceTierStatus(ctx);
|
|
151
401
|
await applyDisabledModelProviderPolicy(ctx);
|
|
402
|
+
await applyCompactionThresholdOverride(ctx);
|
|
152
403
|
// Skip MCP auto-prep when running inside an auto-worktree. The worktree
|
|
153
404
|
// already has .mcp.json from createAutoWorktree, and re-running the writer
|
|
154
405
|
// post-chdir rewrites the file mid-run (non-idempotent due to cwd-relative
|
|
155
406
|
// CLI path resolution), dirtying the tree and breaking the milestone merge.
|
|
156
407
|
const { isInAutoWorktree } = await import("../auto-worktree.js");
|
|
157
|
-
if (!isInAutoWorktree(
|
|
408
|
+
if (!isInAutoWorktree(basePath)) {
|
|
158
409
|
const { prepareWorkflowMcpForProject } = await import("../workflow-mcp-auto-prep.js");
|
|
159
|
-
prepareWorkflowMcpForProject(ctx,
|
|
410
|
+
prepareWorkflowMcpForProject(ctx, basePath);
|
|
160
411
|
}
|
|
161
412
|
await loadToolApiKeysForSession();
|
|
162
413
|
if (!isAutoActive()) {
|
|
@@ -168,10 +419,11 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
168
419
|
}
|
|
169
420
|
});
|
|
170
421
|
pi.on("before_agent_start", async (event, ctx) => {
|
|
422
|
+
applyMinimalGsdToolSurface(pi);
|
|
171
423
|
// Wait for ecosystem loader to finish (no-op after first turn).
|
|
172
424
|
const { getEcosystemReadyPromise } = await import("../ecosystem/loader.js");
|
|
173
425
|
await getEcosystemReadyPromise();
|
|
174
|
-
const beforeAgentBasePath =
|
|
426
|
+
const beforeAgentBasePath = contextBasePath(ctx);
|
|
175
427
|
const pendingApprovalGate = getPendingGate(beforeAgentBasePath);
|
|
176
428
|
if (pendingApprovalGate && isExplicitApprovalResponse(event.prompt, pendingApprovalGate)) {
|
|
177
429
|
markApprovalGateVerified(pendingApprovalGate, beforeAgentBasePath);
|
|
@@ -180,13 +432,14 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
180
432
|
markDepthVerified(milestoneId, beforeAgentBasePath);
|
|
181
433
|
clearPendingGate(beforeAgentBasePath);
|
|
182
434
|
}
|
|
435
|
+
clearDeferredApprovalGate(beforeAgentBasePath);
|
|
183
436
|
// GSD's own context injection (existing behavior — unchanged).
|
|
184
437
|
const { buildBeforeAgentStartResult } = await import("./system-context.js");
|
|
185
438
|
const gsdResult = await buildBeforeAgentStartResult(event, ctx);
|
|
186
439
|
// Refresh the snapshot used by ecosystem getPhase()/getActiveUnit().
|
|
187
440
|
// deriveState has its own ~100ms cache so this is cheap on repeat calls.
|
|
188
441
|
try {
|
|
189
|
-
const state = await deriveGsdState(
|
|
442
|
+
const state = await deriveGsdState(beforeAgentBasePath);
|
|
190
443
|
updateSnapshot(state);
|
|
191
444
|
}
|
|
192
445
|
catch {
|
|
@@ -223,7 +476,12 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
223
476
|
resetToolCallLoopGuard();
|
|
224
477
|
await resetAskUserQuestionsTurnCache();
|
|
225
478
|
const { handleAgentEnd } = await import("./agent-end-recovery.js");
|
|
226
|
-
|
|
479
|
+
try {
|
|
480
|
+
await handleAgentEnd(pi, event, ctx);
|
|
481
|
+
}
|
|
482
|
+
finally {
|
|
483
|
+
activateDeferredApprovalGate(contextBasePath(ctx));
|
|
484
|
+
}
|
|
227
485
|
});
|
|
228
486
|
// Squash-merge quick-task branch back to the original branch after the
|
|
229
487
|
// agent turn completes (#2668). cleanupQuickBranch is a no-op when no
|
|
@@ -237,8 +495,8 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
237
495
|
// Best-effort: don't break the turn lifecycle if cleanup fails.
|
|
238
496
|
}
|
|
239
497
|
});
|
|
240
|
-
pi.on("session_before_compact", async () => {
|
|
241
|
-
const basePath =
|
|
498
|
+
pi.on("session_before_compact", async (_event, ctx) => {
|
|
499
|
+
const basePath = contextBasePath(ctx);
|
|
242
500
|
// Context Mode is default-on. Write the resumable snapshot before any
|
|
243
501
|
// active-auto cancel return so auto sessions still leave re-entry context.
|
|
244
502
|
await writeContextModeCompactionSnapshot(basePath);
|
|
@@ -302,7 +560,7 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
302
560
|
if (!unitType) {
|
|
303
561
|
try {
|
|
304
562
|
const { getPendingDeepProjectSetupUnitForContext } = await import("../guided-flow.js");
|
|
305
|
-
const pending = getPendingDeepProjectSetupUnitForContext(ctx,
|
|
563
|
+
const pending = getPendingDeepProjectSetupUnitForContext(ctx, contextBasePath(ctx));
|
|
306
564
|
unitType = pending?.unitType;
|
|
307
565
|
unitId = pending?.unitId;
|
|
308
566
|
}
|
|
@@ -311,7 +569,7 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
311
569
|
}
|
|
312
570
|
}
|
|
313
571
|
if (!unitType) {
|
|
314
|
-
const milestoneId = await getDiscussionMilestoneIdFor(
|
|
572
|
+
const milestoneId = await getDiscussionMilestoneIdFor(contextBasePath(ctx));
|
|
315
573
|
if (milestoneId) {
|
|
316
574
|
unitType = "discuss-milestone";
|
|
317
575
|
unitId = milestoneId;
|
|
@@ -321,11 +579,12 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
321
579
|
return;
|
|
322
580
|
const gateId = approvalGateIdForUnit(unitType, unitId);
|
|
323
581
|
if (gateId)
|
|
324
|
-
|
|
582
|
+
deferApprovalGate(gateId, contextBasePath(ctx));
|
|
325
583
|
approvalQuestionAbortInFlight = true;
|
|
326
584
|
ctx.ui.notify(`${unitType}${unitId ? ` ${unitId}` : ""} is waiting for your approval - pausing before more tool calls run.`, "info");
|
|
327
|
-
// The pending gate
|
|
328
|
-
//
|
|
585
|
+
// The durable pending gate is activated at agent_end so same-turn
|
|
586
|
+
// CONTEXT-DRAFT persistence can finish after the text boundary streams.
|
|
587
|
+
// The tool_call hook below still blocks non-draft tools in this turn.
|
|
329
588
|
// Aborting mid-stream eats the model's question text on external CLI
|
|
330
589
|
// providers (Claude Code SDK) because lastTextContent isn't populated
|
|
331
590
|
// from in-flight builder state — the user only ever sees "Claude Code
|
|
@@ -335,7 +594,7 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
335
594
|
const { isParallelActive, shutdownParallel } = await import("../parallel-orchestrator.js");
|
|
336
595
|
if (isParallelActive()) {
|
|
337
596
|
try {
|
|
338
|
-
await shutdownParallel(
|
|
597
|
+
await shutdownParallel(contextBasePath(ctx));
|
|
339
598
|
}
|
|
340
599
|
catch {
|
|
341
600
|
// best-effort
|
|
@@ -348,14 +607,17 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
348
607
|
saveActivityLog(ctx, dash.basePath, dash.currentUnit.type, dash.currentUnit.id);
|
|
349
608
|
}
|
|
350
609
|
});
|
|
351
|
-
pi.on("tool_call", async (event) => {
|
|
352
|
-
const discussionBasePath =
|
|
610
|
+
pi.on("tool_call", async (event, ctx) => {
|
|
611
|
+
const discussionBasePath = contextBasePath(ctx);
|
|
353
612
|
const toolName = canonicalToolName(event.toolName);
|
|
354
613
|
// ── Loop guard: block repeated identical tool calls ──
|
|
355
614
|
const loopCheck = checkToolCallLoop(toolName, event.input);
|
|
356
615
|
if (loopCheck.block) {
|
|
357
616
|
return { block: true, reason: loopCheck.reason };
|
|
358
617
|
}
|
|
618
|
+
const deferredGateGuard = shouldBlockDeferredApprovalTool(toolName, event.input, discussionBasePath);
|
|
619
|
+
if (deferredGateGuard.block)
|
|
620
|
+
return deferredGateGuard;
|
|
359
621
|
// ── Discussion gate enforcement: track pending gate questions ─────────
|
|
360
622
|
// Only gate-shaped ask_user_questions calls should block execution.
|
|
361
623
|
// The gate stays pending until the user selects the approval option.
|
|
@@ -432,6 +694,16 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
432
694
|
return planningGuard;
|
|
433
695
|
}
|
|
434
696
|
}
|
|
697
|
+
// ── Worktree-isolation write gate (#5199) ────────────────────────────
|
|
698
|
+
// Block planning-write tools from landing code at the project root when
|
|
699
|
+
// git.isolation=worktree but auto-mode hasn't created the milestone
|
|
700
|
+
// worktree yet. Without this, writes silently orphan outside git history.
|
|
701
|
+
if (isToolCallEventType("write", event) || isToolCallEventType("edit", event)) {
|
|
702
|
+
const wtBasePath = resolveWorktreeProjectRoot(dash.basePath ?? discussionBasePath);
|
|
703
|
+
const wtGuard = shouldBlockWorktreeWrite(event.toolName, event.input.path, wtBasePath, isAutoActive(), dash.currentUnit?.type);
|
|
704
|
+
if (wtGuard.block)
|
|
705
|
+
return wtGuard;
|
|
706
|
+
}
|
|
435
707
|
// ── Single-writer engine: block direct writes to STATE.md ──────────
|
|
436
708
|
// Covers write, edit, and bash tools to prevent bypass vectors.
|
|
437
709
|
if (isToolCallEventType("write", event)) {
|
|
@@ -484,7 +756,7 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
484
756
|
}
|
|
485
757
|
}
|
|
486
758
|
});
|
|
487
|
-
pi.on("tool_result", async (event) => {
|
|
759
|
+
pi.on("tool_result", async (event, ctx) => {
|
|
488
760
|
if (isAutoActive() && typeof event.toolCallId === "string") {
|
|
489
761
|
markToolEnd(event.toolCallId);
|
|
490
762
|
}
|
|
@@ -504,7 +776,7 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
504
776
|
const toolName = canonicalToolName(event.toolName);
|
|
505
777
|
if (toolName !== "ask_user_questions")
|
|
506
778
|
return;
|
|
507
|
-
const basePath =
|
|
779
|
+
const basePath = contextBasePath(ctx);
|
|
508
780
|
const milestoneId = await getDiscussionMilestoneIdFor(basePath);
|
|
509
781
|
const queueActive = isQueuePhaseActive(basePath);
|
|
510
782
|
const details = event.details;
|
|
@@ -706,8 +978,22 @@ export function registerHooks(pi, ecosystemHandlers) {
|
|
|
706
978
|
// Tool set adaptation hook (ADR-005 Phase 4)
|
|
707
979
|
// Extensions can override tool set after model selection by returning { toolNames: [...] }
|
|
708
980
|
// Return undefined to let the built-in provider compatibility filtering proceed.
|
|
709
|
-
pi.on("adjust_tool_set", async (
|
|
710
|
-
|
|
981
|
+
pi.on("adjust_tool_set", async (event) => {
|
|
982
|
+
if (isFullGsdToolSurfaceRequested())
|
|
983
|
+
return undefined;
|
|
984
|
+
const removed = new Set(event.filteredTools);
|
|
985
|
+
const providerCompatible = event.activeToolNames.filter((name) => !removed.has(name));
|
|
986
|
+
const requestScoped = buildRequestScopedGsdToolSet(providerCompatible, event.requestCustomMessages);
|
|
987
|
+
if (requestScoped) {
|
|
988
|
+
return { toolNames: requestScoped };
|
|
989
|
+
}
|
|
990
|
+
const dash = getAutoRuntimeSnapshot();
|
|
991
|
+
if (dash.active && dash.currentUnit) {
|
|
992
|
+
return { toolNames: buildMinimalAutoGsdToolSet(providerCompatible, dash.currentUnit.type) };
|
|
993
|
+
}
|
|
994
|
+
if (isGeneralGsdToolScopingRequested()) {
|
|
995
|
+
return { toolNames: buildMinimalGsdToolSet(providerCompatible) };
|
|
996
|
+
}
|
|
711
997
|
return undefined;
|
|
712
998
|
});
|
|
713
999
|
}
|
|
@@ -36,6 +36,8 @@ function toStrArray(v) {
|
|
|
36
36
|
* CompleteMilestoneParams, tolerating type mismatches from LLM JSON quirks.
|
|
37
37
|
*/
|
|
38
38
|
export function sanitizeCompleteMilestoneParams(raw) {
|
|
39
|
+
const actorName = toStr(raw.actorName);
|
|
40
|
+
const triggerReason = toStr(raw.triggerReason);
|
|
39
41
|
return {
|
|
40
42
|
milestoneId: toStr(raw.milestoneId),
|
|
41
43
|
title: toStr(raw.title),
|
|
@@ -50,5 +52,7 @@ export function sanitizeCompleteMilestoneParams(raw) {
|
|
|
50
52
|
followUps: toStr(raw.followUps),
|
|
51
53
|
deviations: toStr(raw.deviations),
|
|
52
54
|
verificationPassed: raw.verificationPassed === true || raw.verificationPassed === "true",
|
|
55
|
+
...(actorName ? { actorName } : {}),
|
|
56
|
+
...(triggerReason ? { triggerReason } : {}),
|
|
53
57
|
};
|
|
54
58
|
}
|