gsd-pi 2.80.0-dev.c5f2443b3 → 2.80.0-dev.d4fc28e6b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/cli.js +0 -19
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +2 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +29 -0
- package/dist/resources/extensions/github-sync/templates.js +39 -8
- package/dist/resources/extensions/gsd/auto/loop.js +119 -18
- package/dist/resources/extensions/gsd/auto/phases.js +212 -135
- package/dist/resources/extensions/gsd/auto/resolve.js +29 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +41 -45
- 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-dashboard.js +51 -15
- 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 +27 -14
- 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 +199 -9
- 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 +111 -1
- package/dist/resources/extensions/gsd/auto.js +95 -27
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +103 -3
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +49 -36
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +15 -5
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +33 -20
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +7 -1
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +9 -3
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +8 -2
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +330 -55
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +129 -1
- 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-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/custom-workflow-engine.js +22 -2
- 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 +36 -4
- package/dist/resources/extensions/gsd/graph.js +9 -3
- package/dist/resources/extensions/gsd/gsd-db.js +146 -13
- package/dist/resources/extensions/gsd/guided-flow.js +129 -44
- 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/pr-evidence.js +57 -16
- 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 +21 -19
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/execute-task.md +4 -2
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
- package/dist/resources/extensions/gsd/quick.js +34 -2
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +10 -2
- package/dist/resources/extensions/gsd/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/working-output-messages.js +64 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
- package/dist/resources/extensions/gsd/worktree-resolver.js +68 -21
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
- package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
- 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/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/{8336.6f6f30e410419aff.js → 8336.631939fb583761fa.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-0481f1221120a7c6.js} +1 -1
- package/dist/welcome-screen.d.ts +2 -0
- package/dist/welcome-screen.js +9 -7
- package/package.json +12 -8
- package/packages/contracts/package.json +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +22 -17
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
- package/packages/mcp-server/src/workflow-tools.ts +30 -16
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +4 -1
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +5 -0
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +2 -0
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +2 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/dist/token-audit.d.ts +47 -0
- package/packages/pi-agent-core/dist/token-audit.d.ts.map +1 -0
- package/packages/pi-agent-core/dist/token-audit.js +221 -0
- package/packages/pi-agent-core/dist/token-audit.js.map +1 -0
- package/packages/pi-agent-core/dist/types.d.ts +9 -0
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
- package/packages/pi-agent-core/src/agent-loop.ts +4 -1
- package/packages/pi-agent-core/src/agent.ts +8 -0
- package/packages/pi-agent-core/src/index.ts +2 -0
- package/packages/pi-agent-core/src/token-audit.test.ts +189 -0
- package/packages/pi-agent-core/src/token-audit.ts +287 -0
- package/packages/pi-agent-core/src/types.ts +14 -0
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
- package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/fake-model.js +27 -0
- package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
- package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/index.js +8 -0
- package/packages/pi-ai/dist/models/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
- package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/fake.js +319 -0
- package/packages/pi-ai/dist/providers/fake.js.map +1 -0
- package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
- package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
- package/packages/pi-ai/src/models/fake-model.ts +30 -0
- package/packages/pi-ai/src/models/index.ts +9 -0
- package/packages/pi-ai/src/providers/fake.ts +376 -0
- package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +32 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +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 +44 -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 +76 -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 +39 -1
- 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/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
- package/packages/pi-coding-agent/dist/core/model-registry.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/settings-manager.d.ts +24 -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 +33 -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/slash-commands.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
- package/packages/pi-coding-agent/dist/core/slash-commands.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/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 +54 -15
- 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.d.ts +26 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +112 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +51 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
- 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 +10 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +7 -6
- 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 +17 -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 +109 -17
- 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 +69 -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 +93 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +3 -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 +26 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +18 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.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.d.ts +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +48 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
- 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 +10 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +3 -2
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +36 -0
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +25 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +48 -7
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +89 -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 +42 -1
- package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +4 -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/settings-manager.ts +51 -1
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
- package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
- 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 +78 -15
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +59 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +160 -0
- 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 +10 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +10 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +122 -17
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +99 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +92 -3
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +28 -0
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +32 -2
- 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 +65 -0
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +14 -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/__tests__/style.test.d.ts +2 -0
- package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
- package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
- package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/index.d.ts +1 -0
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +2 -0
- package/packages/pi-tui/dist/index.js.map +1 -1
- package/packages/pi-tui/dist/style.d.ts +41 -0
- package/packages/pi-tui/dist/style.d.ts.map +1 -0
- package/packages/pi-tui/dist/style.js +158 -0
- package/packages/pi-tui/dist/style.js.map +1 -0
- package/packages/pi-tui/dist/tui.d.ts +0 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +21 -16
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
- package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
- package/packages/pi-tui/src/index.ts +9 -0
- package/packages/pi-tui/src/style.ts +225 -0
- package/packages/pi-tui/src/tui.ts +23 -16
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +18 -1
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +36 -27
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/src/resources/GSD-WORKFLOW.md +2 -2
- package/src/resources/extensions/claude-code-cli/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/templates.ts +38 -8
- package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -2
- package/src/resources/extensions/gsd/auto/loop.ts +151 -26
- package/src/resources/extensions/gsd/auto/phases.ts +289 -196
- package/src/resources/extensions/gsd/auto/resolve.ts +42 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +52 -44
- 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-dashboard.ts +57 -8
- 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 +28 -14
- 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 +237 -15
- package/src/resources/extensions/gsd/auto-supervisor.ts +7 -0
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +2 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +123 -0
- package/src/resources/extensions/gsd/auto.ts +110 -22
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +119 -2
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +50 -36
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +16 -5
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +34 -19
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +8 -1
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +10 -3
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +9 -2
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +386 -55
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +135 -1
- 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-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/custom-workflow-engine.ts +24 -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 +46 -8
- package/src/resources/extensions/gsd/graph.ts +12 -5
- package/src/resources/extensions/gsd/gsd-db.ts +168 -13
- package/src/resources/extensions/gsd/guided-flow.ts +150 -51
- 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/pr-evidence.ts +63 -5
- 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 +21 -19
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/execute-task.md +4 -2
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
- package/src/resources/extensions/gsd/quick.ts +37 -2
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +11 -2
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +516 -15
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +56 -13
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +184 -2
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +168 -6
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +97 -2
- 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-slice-composer.test.ts +3 -2
- 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 +55 -0
- 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 +117 -7
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +40 -2
- package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/detection.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +313 -0
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +5 -2
- package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +219 -0
- package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
- 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/integration/git-service.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +239 -1
- package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
- 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/plan-slice.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +45 -5
- 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 +19 -0
- package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/quick-external-gsd.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +38 -17
- package/src/resources/extensions/gsd/tests/right-sized-workflow-prompts.test.ts +192 -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-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/signal-handlers.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -1
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +101 -2
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +9 -0
- 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-tool-gating.test.ts +291 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +136 -4
- 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 -4
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +142 -0
- 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/working-output-messages.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +37 -6
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +1 -0
- 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 +167 -4
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
- 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/working-output-messages.ts +120 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
- package/src/resources/extensions/gsd/worktree-resolver.ts +85 -19
- package/packages/contracts/tsconfig.tsbuildinfo +0 -1
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +0 -97
- /package/dist/web/standalone/.next/static/{bQDK5_LtkGVS64AirQgQG → cWaxzf-sdbSSbbwYu8q7a}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{bQDK5_LtkGVS64AirQgQG → cWaxzf-sdbSSbbwYu8q7a}/_ssgManifest.js +0 -0
|
@@ -16,6 +16,13 @@ async function loadWorkflowExecutors(): Promise<typeof import("../tools/workflow
|
|
|
16
16
|
return import("../tools/workflow-tool-executors.js");
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
function toolWorkspaceRoot(ctx: unknown): string {
|
|
20
|
+
if (ctx && typeof ctx === "object" && typeof (ctx as { cwd?: unknown }).cwd === "string") {
|
|
21
|
+
return (ctx as { cwd: string }).cwd;
|
|
22
|
+
}
|
|
23
|
+
return process.cwd();
|
|
24
|
+
}
|
|
25
|
+
|
|
19
26
|
/**
|
|
20
27
|
* Register an alias tool that shares the same execute function as its canonical counterpart.
|
|
21
28
|
* The alias description and promptGuidelines direct the LLM to prefer the canonical name.
|
|
@@ -38,8 +45,8 @@ function registerAlias(pi: ExtensionAPI, toolDef: any, aliasName: string, canoni
|
|
|
38
45
|
});
|
|
39
46
|
}
|
|
40
47
|
|
|
41
|
-
function requirementRootWriteGuard(operation: string): { content: Array<{ type: "text"; text: string }>; details: Record<string, unknown>; isError: true } | null {
|
|
42
|
-
const guard = shouldBlockRootArtifactSaveInSnapshot(loadWriteGateSnapshot(
|
|
48
|
+
function requirementRootWriteGuard(operation: string, basePath: string): { content: Array<{ type: "text"; text: string }>; details: Record<string, unknown>; isError: true } | null {
|
|
49
|
+
const guard = shouldBlockRootArtifactSaveInSnapshot(loadWriteGateSnapshot(basePath), "REQUIREMENTS");
|
|
43
50
|
if (!guard.block) return null;
|
|
44
51
|
return {
|
|
45
52
|
content: [{ type: "text", text: `Error ${operation} requirement: ${guard.reason ?? "requirements write blocked"}` }],
|
|
@@ -65,7 +72,8 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
65
72
|
// ─── gsd_decision_save (formerly gsd_save_decision) ─────────────────────
|
|
66
73
|
|
|
67
74
|
const decisionSaveExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
68
|
-
const
|
|
75
|
+
const basePath = toolWorkspaceRoot(_ctx);
|
|
76
|
+
const dbAvailable = await ensureDbOpen(basePath);
|
|
69
77
|
if (!dbAvailable) {
|
|
70
78
|
return {
|
|
71
79
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot save decision." }],
|
|
@@ -84,7 +92,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
84
92
|
when_context: params.when_context,
|
|
85
93
|
made_by: params.made_by,
|
|
86
94
|
},
|
|
87
|
-
|
|
95
|
+
basePath,
|
|
88
96
|
);
|
|
89
97
|
return {
|
|
90
98
|
content: [{ type: "text" as const, text: `Saved decision ${id}` }],
|
|
@@ -152,9 +160,10 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
152
160
|
// ─── gsd_requirement_update (formerly gsd_update_requirement) ───────────
|
|
153
161
|
|
|
154
162
|
const requirementUpdateExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
155
|
-
const
|
|
163
|
+
const basePath = toolWorkspaceRoot(_ctx);
|
|
164
|
+
const gateBlock = requirementRootWriteGuard("update_requirement", basePath);
|
|
156
165
|
if (gateBlock) return gateBlock;
|
|
157
|
-
const dbAvailable = await ensureDbOpen();
|
|
166
|
+
const dbAvailable = await ensureDbOpen(basePath);
|
|
158
167
|
if (!dbAvailable) {
|
|
159
168
|
return {
|
|
160
169
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot update requirement." }],
|
|
@@ -170,7 +179,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
170
179
|
if (params.description !== undefined) updates.description = params.description;
|
|
171
180
|
if (params.primary_owner !== undefined) updates.primary_owner = params.primary_owner;
|
|
172
181
|
if (params.supporting_slices !== undefined) updates.supporting_slices = params.supporting_slices;
|
|
173
|
-
await updateRequirementInDb(params.id, updates,
|
|
182
|
+
await updateRequirementInDb(params.id, updates, basePath);
|
|
174
183
|
return {
|
|
175
184
|
content: [{ type: "text" as const, text: `Updated requirement ${params.id}` }],
|
|
176
185
|
details: { operation: "update_requirement", id: params.id } as any,
|
|
@@ -232,9 +241,10 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
232
241
|
// ─── gsd_requirement_save ─────────────────────────────────────────────
|
|
233
242
|
|
|
234
243
|
const requirementSaveExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
235
|
-
const
|
|
244
|
+
const basePath = toolWorkspaceRoot(_ctx);
|
|
245
|
+
const gateBlock = requirementRootWriteGuard("save_requirement", basePath);
|
|
236
246
|
if (gateBlock) return gateBlock;
|
|
237
|
-
const dbAvailable = await ensureDbOpen();
|
|
247
|
+
const dbAvailable = await ensureDbOpen(basePath);
|
|
238
248
|
if (!dbAvailable) {
|
|
239
249
|
return {
|
|
240
250
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot save requirement." }],
|
|
@@ -255,7 +265,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
255
265
|
validation: params.validation,
|
|
256
266
|
notes: params.notes,
|
|
257
267
|
},
|
|
258
|
-
|
|
268
|
+
basePath,
|
|
259
269
|
);
|
|
260
270
|
return {
|
|
261
271
|
content: [{ type: "text" as const, text: `Saved requirement ${result.id}` }],
|
|
@@ -335,7 +345,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
335
345
|
|
|
336
346
|
const summarySaveExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
337
347
|
const { executeSummarySave } = await loadWorkflowExecutors();
|
|
338
|
-
return executeSummarySave(params,
|
|
348
|
+
return executeSummarySave(params, toolWorkspaceRoot(_ctx));
|
|
339
349
|
};
|
|
340
350
|
|
|
341
351
|
const summarySaveTool = {
|
|
@@ -386,24 +396,24 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
386
396
|
|
|
387
397
|
const milestoneGenerateIdExecute = async (_toolCallId: string, _params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
388
398
|
try {
|
|
399
|
+
const basePath = toolWorkspaceRoot(_ctx);
|
|
389
400
|
// Claim a reserved ID if the guided-flow already previewed one to the user.
|
|
390
401
|
// This guarantees the ID shown in the UI matches the one materialised on disk.
|
|
391
402
|
const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId } = await import("../guided-flow.js");
|
|
392
403
|
const reserved = claimReservedId();
|
|
393
404
|
if (reserved) {
|
|
394
|
-
await ensureMilestoneDbRow(reserved);
|
|
405
|
+
await ensureMilestoneDbRow(reserved, basePath);
|
|
395
406
|
return {
|
|
396
407
|
content: [{ type: "text" as const, text: reserved }],
|
|
397
408
|
details: { operation: "generate_milestone_id", id: reserved, source: "reserved" } as any,
|
|
398
409
|
};
|
|
399
410
|
}
|
|
400
411
|
|
|
401
|
-
const basePath = process.cwd();
|
|
402
412
|
const existingIds = findMilestoneIds(basePath);
|
|
403
|
-
const uniqueEnabled = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
413
|
+
const uniqueEnabled = !!loadEffectiveGSDPreferences(basePath)?.preferences?.unique_milestone_ids;
|
|
404
414
|
const allIds = [...new Set([...existingIds, ...getReservedMilestoneIds()])];
|
|
405
415
|
const newId = nextMilestoneId(allIds, uniqueEnabled);
|
|
406
|
-
await ensureMilestoneDbRow(newId);
|
|
416
|
+
await ensureMilestoneDbRow(newId, basePath);
|
|
407
417
|
return {
|
|
408
418
|
content: [{ type: "text" as const, text: newId }],
|
|
409
419
|
details: { operation: "generate_milestone_id", id: newId, existingCount: existingIds.length, uniqueEnabled } as any,
|
|
@@ -423,8 +433,8 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
423
433
|
* later writes the full row. Silently skips if the DB isn't available yet
|
|
424
434
|
* (pre-migration).
|
|
425
435
|
*/
|
|
426
|
-
async function ensureMilestoneDbRow(milestoneId: string): Promise<void> {
|
|
427
|
-
const dbAvailable = await ensureDbOpen();
|
|
436
|
+
async function ensureMilestoneDbRow(milestoneId: string, basePath: string): Promise<void> {
|
|
437
|
+
const dbAvailable = await ensureDbOpen(basePath);
|
|
428
438
|
if (!dbAvailable) return;
|
|
429
439
|
try {
|
|
430
440
|
const { insertMilestone } = await import("../gsd-db.js");
|
|
@@ -471,7 +481,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
471
481
|
|
|
472
482
|
const planMilestoneExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
473
483
|
const { executePlanMilestone } = await loadWorkflowExecutors();
|
|
474
|
-
return executePlanMilestone(params,
|
|
484
|
+
return executePlanMilestone(params, toolWorkspaceRoot(_ctx));
|
|
475
485
|
};
|
|
476
486
|
|
|
477
487
|
const planMilestoneTool = {
|
|
@@ -541,7 +551,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
541
551
|
|
|
542
552
|
const planSliceExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
543
553
|
const { executePlanSlice } = await loadWorkflowExecutors();
|
|
544
|
-
return executePlanSlice(params,
|
|
554
|
+
return executePlanSlice(params, toolWorkspaceRoot(_ctx));
|
|
545
555
|
};
|
|
546
556
|
|
|
547
557
|
const planSliceTool = {
|
|
@@ -590,7 +600,8 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
590
600
|
// ─── gsd_plan_task (gsd_task_plan alias) ───────────────────────────────
|
|
591
601
|
|
|
592
602
|
const planTaskExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
593
|
-
const
|
|
603
|
+
const basePath = toolWorkspaceRoot(_ctx);
|
|
604
|
+
const dbAvailable = await ensureDbOpen(basePath);
|
|
594
605
|
if (!dbAvailable) {
|
|
595
606
|
return {
|
|
596
607
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot plan task." }],
|
|
@@ -599,7 +610,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
599
610
|
}
|
|
600
611
|
try {
|
|
601
612
|
const { handlePlanTask } = await import("../tools/plan-task.js");
|
|
602
|
-
const result = await handlePlanTask(params,
|
|
613
|
+
const result = await handlePlanTask(params, basePath);
|
|
603
614
|
if ("error" in result) {
|
|
604
615
|
return {
|
|
605
616
|
content: [{ type: "text" as const, text: `Error planning task: ${result.error}` }],
|
|
@@ -664,7 +675,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
664
675
|
|
|
665
676
|
const taskCompleteExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
666
677
|
const { executeTaskComplete } = await loadWorkflowExecutors();
|
|
667
|
-
return executeTaskComplete(params,
|
|
678
|
+
return executeTaskComplete(params, toolWorkspaceRoot(_ctx));
|
|
668
679
|
};
|
|
669
680
|
|
|
670
681
|
const taskCompleteTool = {
|
|
@@ -735,7 +746,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
735
746
|
|
|
736
747
|
const sliceCompleteExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
737
748
|
const { executeSliceComplete } = await loadWorkflowExecutors();
|
|
738
|
-
return executeSliceComplete(params,
|
|
749
|
+
return executeSliceComplete(params, toolWorkspaceRoot(_ctx));
|
|
739
750
|
};
|
|
740
751
|
|
|
741
752
|
const sliceCompleteTool = {
|
|
@@ -835,7 +846,8 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
835
846
|
// ─── gsd_skip_slice (#3477 / #3487) ───────────────────────────────────
|
|
836
847
|
|
|
837
848
|
const skipSliceExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
838
|
-
const
|
|
849
|
+
const basePath = toolWorkspaceRoot(_ctx);
|
|
850
|
+
const dbAvailable = await ensureDbOpen(basePath);
|
|
839
851
|
if (!dbAvailable) {
|
|
840
852
|
return {
|
|
841
853
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot skip slice." }],
|
|
@@ -868,7 +880,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
868
880
|
// Rebuild STATE.md so it reflects the skip immediately (#3477).
|
|
869
881
|
// Without this, /gsd auto reads stale STATE.md and resumes the skipped slice.
|
|
870
882
|
try {
|
|
871
|
-
const basePath = process.cwd();
|
|
872
883
|
const { rebuildState } = await import("../doctor.js");
|
|
873
884
|
await rebuildState(basePath);
|
|
874
885
|
} catch (err) {
|
|
@@ -928,7 +939,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
928
939
|
|
|
929
940
|
const milestoneCompleteExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
930
941
|
const { executeCompleteMilestone } = await loadWorkflowExecutors();
|
|
931
|
-
return executeCompleteMilestone(params,
|
|
942
|
+
return executeCompleteMilestone(params, toolWorkspaceRoot(_ctx));
|
|
932
943
|
};
|
|
933
944
|
|
|
934
945
|
const milestoneCompleteTool = {
|
|
@@ -974,7 +985,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
974
985
|
|
|
975
986
|
const milestoneValidateExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
976
987
|
const { executeValidateMilestone } = await loadWorkflowExecutors();
|
|
977
|
-
return executeValidateMilestone(params,
|
|
988
|
+
return executeValidateMilestone(params, toolWorkspaceRoot(_ctx));
|
|
978
989
|
};
|
|
979
990
|
|
|
980
991
|
const milestoneValidateTool = {
|
|
@@ -1012,7 +1023,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1012
1023
|
|
|
1013
1024
|
const replanSliceExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
1014
1025
|
const { executeReplanSlice } = await loadWorkflowExecutors();
|
|
1015
|
-
return executeReplanSlice(params,
|
|
1026
|
+
return executeReplanSlice(params, toolWorkspaceRoot(_ctx));
|
|
1016
1027
|
};
|
|
1017
1028
|
|
|
1018
1029
|
const replanSliceTool = {
|
|
@@ -1063,7 +1074,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1063
1074
|
|
|
1064
1075
|
const reassessRoadmapExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
1065
1076
|
const { executeReassessRoadmap } = await loadWorkflowExecutors();
|
|
1066
|
-
return executeReassessRoadmap(params,
|
|
1077
|
+
return executeReassessRoadmap(params, toolWorkspaceRoot(_ctx));
|
|
1067
1078
|
};
|
|
1068
1079
|
|
|
1069
1080
|
const reassessRoadmapTool = {
|
|
@@ -1122,7 +1133,8 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1122
1133
|
// Single-writer v3, Stream 3: reversibility tools for closed units.
|
|
1123
1134
|
|
|
1124
1135
|
const reopenTaskExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
1125
|
-
const
|
|
1136
|
+
const basePath = toolWorkspaceRoot(_ctx);
|
|
1137
|
+
const dbAvailable = await ensureDbOpen(basePath);
|
|
1126
1138
|
if (!dbAvailable) {
|
|
1127
1139
|
return {
|
|
1128
1140
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot reopen task." }],
|
|
@@ -1131,7 +1143,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1131
1143
|
}
|
|
1132
1144
|
try {
|
|
1133
1145
|
const { handleReopenTask } = await import("../tools/reopen-task.js");
|
|
1134
|
-
const result = await handleReopenTask(params,
|
|
1146
|
+
const result = await handleReopenTask(params, basePath);
|
|
1135
1147
|
if ("error" in result) {
|
|
1136
1148
|
return {
|
|
1137
1149
|
content: [{ type: "text" as const, text: `Error reopening task: ${result.error}` }],
|
|
@@ -1188,7 +1200,8 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1188
1200
|
// ─── gsd_slice_reopen (gsd_reopen_slice alias) ─────────────────────────
|
|
1189
1201
|
|
|
1190
1202
|
const reopenSliceExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
1191
|
-
const
|
|
1203
|
+
const basePath = toolWorkspaceRoot(_ctx);
|
|
1204
|
+
const dbAvailable = await ensureDbOpen(basePath);
|
|
1192
1205
|
if (!dbAvailable) {
|
|
1193
1206
|
return {
|
|
1194
1207
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot reopen slice." }],
|
|
@@ -1197,7 +1210,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1197
1210
|
}
|
|
1198
1211
|
try {
|
|
1199
1212
|
const { handleReopenSlice } = await import("../tools/reopen-slice.js");
|
|
1200
|
-
const result = await handleReopenSlice(params,
|
|
1213
|
+
const result = await handleReopenSlice(params, basePath);
|
|
1201
1214
|
if ("error" in result) {
|
|
1202
1215
|
return {
|
|
1203
1216
|
content: [{ type: "text" as const, text: `Error reopening slice: ${result.error}` }],
|
|
@@ -1254,7 +1267,8 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1254
1267
|
// ─── gsd_milestone_reopen (gsd_reopen_milestone alias) ─────────────────
|
|
1255
1268
|
|
|
1256
1269
|
const reopenMilestoneExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
1257
|
-
const
|
|
1270
|
+
const basePath = toolWorkspaceRoot(_ctx);
|
|
1271
|
+
const dbAvailable = await ensureDbOpen(basePath);
|
|
1258
1272
|
if (!dbAvailable) {
|
|
1259
1273
|
return {
|
|
1260
1274
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot reopen milestone." }],
|
|
@@ -1263,7 +1277,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1263
1277
|
}
|
|
1264
1278
|
try {
|
|
1265
1279
|
const { handleReopenMilestone } = await import("../tools/reopen-milestone.js");
|
|
1266
|
-
const result = await handleReopenMilestone(params,
|
|
1280
|
+
const result = await handleReopenMilestone(params, basePath);
|
|
1267
1281
|
if ("error" in result) {
|
|
1268
1282
|
return {
|
|
1269
1283
|
content: [{ type: "text" as const, text: `Error reopening milestone: ${result.error}` }],
|
|
@@ -1319,7 +1333,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1319
1333
|
|
|
1320
1334
|
const saveGateResultExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
1321
1335
|
const { executeSaveGateResult } = await loadWorkflowExecutors();
|
|
1322
|
-
return executeSaveGateResult(params,
|
|
1336
|
+
return executeSaveGateResult(params, toolWorkspaceRoot(_ctx));
|
|
1323
1337
|
};
|
|
1324
1338
|
|
|
1325
1339
|
const saveGateResultTool = {
|
|
@@ -8,6 +8,13 @@ import { DEFAULT_BASH_TIMEOUT_SECS } from "../constants.js";
|
|
|
8
8
|
import { setLogBasePath, logWarning } from "../workflow-logger.js";
|
|
9
9
|
import { resolveGsdPathContract } from "../paths.js";
|
|
10
10
|
|
|
11
|
+
function resolveToolWorkspaceRoot(ctx?: unknown): string {
|
|
12
|
+
if (ctx && typeof ctx === "object" && typeof (ctx as { cwd?: unknown }).cwd === "string") {
|
|
13
|
+
return (ctx as { cwd: string }).cwd;
|
|
14
|
+
}
|
|
15
|
+
return process.cwd();
|
|
16
|
+
}
|
|
17
|
+
|
|
11
18
|
/**
|
|
12
19
|
* Resolve the correct DB path for the current working directory.
|
|
13
20
|
* If `basePath` is inside a `.gsd/worktrees/<MID>/` directory, returns
|
|
@@ -51,7 +58,7 @@ export async function ensureDbOpen(basePath: string = process.cwd()): Promise<bo
|
|
|
51
58
|
|
|
52
59
|
export function registerDynamicTools(pi: ExtensionAPI): void {
|
|
53
60
|
const baseBash = createBashTool(process.cwd(), {
|
|
54
|
-
spawnHook: (ctx) =>
|
|
61
|
+
spawnHook: (ctx) => ctx,
|
|
55
62
|
});
|
|
56
63
|
const dynamicBash = {
|
|
57
64
|
...baseBash,
|
|
@@ -62,11 +69,15 @@ export function registerDynamicTools(pi: ExtensionAPI): void {
|
|
|
62
69
|
onUpdate?: unknown,
|
|
63
70
|
ctx?: unknown,
|
|
64
71
|
) => {
|
|
72
|
+
const basePath = resolveToolWorkspaceRoot(ctx);
|
|
73
|
+
const fresh = createBashTool(basePath, {
|
|
74
|
+
spawnHook: (spawnCtx) => ({ ...spawnCtx, cwd: basePath }),
|
|
75
|
+
});
|
|
65
76
|
const paramsWithTimeout = {
|
|
66
77
|
...params,
|
|
67
78
|
timeout: params.timeout ?? DEFAULT_BASH_TIMEOUT_SECS,
|
|
68
79
|
};
|
|
69
|
-
return (
|
|
80
|
+
return (fresh as any).execute(toolCallId, paramsWithTimeout, signal, onUpdate, ctx);
|
|
70
81
|
},
|
|
71
82
|
};
|
|
72
83
|
pi.registerTool(dynamicBash as any);
|
|
@@ -81,7 +92,7 @@ export function registerDynamicTools(pi: ExtensionAPI): void {
|
|
|
81
92
|
onUpdate?: unknown,
|
|
82
93
|
ctx?: unknown,
|
|
83
94
|
) => {
|
|
84
|
-
const fresh = createWriteTool(
|
|
95
|
+
const fresh = createWriteTool(resolveToolWorkspaceRoot(ctx));
|
|
85
96
|
return (fresh as any).execute(toolCallId, params, signal, onUpdate, ctx);
|
|
86
97
|
},
|
|
87
98
|
} as any);
|
|
@@ -96,7 +107,7 @@ export function registerDynamicTools(pi: ExtensionAPI): void {
|
|
|
96
107
|
onUpdate?: unknown,
|
|
97
108
|
ctx?: unknown,
|
|
98
109
|
) => {
|
|
99
|
-
const fresh = createReadTool(
|
|
110
|
+
const fresh = createReadTool(resolveToolWorkspaceRoot(ctx));
|
|
100
111
|
return (fresh as any).execute(toolCallId, params, signal, onUpdate, ctx);
|
|
101
112
|
},
|
|
102
113
|
} as any);
|
|
@@ -111,7 +122,7 @@ export function registerDynamicTools(pi: ExtensionAPI): void {
|
|
|
111
122
|
onUpdate?: unknown,
|
|
112
123
|
ctx?: unknown,
|
|
113
124
|
) => {
|
|
114
|
-
const fresh = createEditTool(
|
|
125
|
+
const fresh = createEditTool(resolveToolWorkspaceRoot(ctx));
|
|
115
126
|
return (fresh as any).execute(toolCallId, params, signal, onUpdate, ctx);
|
|
116
127
|
},
|
|
117
128
|
} as any);
|
|
@@ -6,23 +6,43 @@
|
|
|
6
6
|
import { Type } from "@sinclair/typebox";
|
|
7
7
|
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
8
8
|
|
|
9
|
+
function toolWorkspaceRoot(ctx: unknown): string {
|
|
10
|
+
if (ctx && typeof ctx === "object" && typeof (ctx as { cwd?: unknown }).cwd === "string") {
|
|
11
|
+
return (ctx as { cwd: string }).cwd;
|
|
12
|
+
}
|
|
13
|
+
return process.cwd();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async function loadContextModePreferences(baseDir: string) {
|
|
17
|
+
const [{ loadEffectiveGSDPreferences }, { logWarning }] = await Promise.all([
|
|
18
|
+
import("../preferences.js"),
|
|
19
|
+
import("../workflow-logger.js"),
|
|
20
|
+
]);
|
|
21
|
+
try {
|
|
22
|
+
return loadEffectiveGSDPreferences(baseDir)?.preferences ?? null;
|
|
23
|
+
} catch (err) {
|
|
24
|
+
logWarning("tool", `Context Mode tool could not load preferences: ${err instanceof Error ? err.message : String(err)}`);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
9
29
|
export function registerExecTools(pi: ExtensionAPI): void {
|
|
10
30
|
pi.registerTool({
|
|
11
31
|
name: "gsd_exec",
|
|
12
32
|
label: "Exec (Sandboxed)",
|
|
13
33
|
description:
|
|
14
|
-
"Run a short script (bash/node/python) in a subprocess.
|
|
34
|
+
"Run a short script (bash/node/python) in a subprocess. Capped stdout/stderr and metadata persist to " +
|
|
15
35
|
".gsd/exec/<id>.{stdout,stderr,meta.json}; only a short digest returns in context. Use " +
|
|
16
36
|
"this instead of reading many files or emitting large tool outputs — e.g. have the script " +
|
|
17
37
|
"count/grep/summarize and log the finding. Enabled by default; opt out via " +
|
|
18
38
|
"preferences.context_mode.enabled=false.",
|
|
19
39
|
promptSnippet:
|
|
20
|
-
"Run a bash/node/python script in a sandbox;
|
|
40
|
+
"Run a bash/node/python script in a sandbox; capped output is saved to disk and only a digest returns",
|
|
21
41
|
promptGuidelines: [
|
|
22
42
|
"Prefer gsd_exec for analyses that would otherwise read >3 files or produce large tool output.",
|
|
23
43
|
"Write scripts that log the finding (counts, matches, summaries) rather than raw dumps.",
|
|
24
44
|
"The digest is the last ~300 chars of stdout — size your log output accordingly.",
|
|
25
|
-
"Need
|
|
45
|
+
"Need persisted output? Read the stdout_path returned in details (file on local disk).",
|
|
26
46
|
],
|
|
27
47
|
parameters: Type.Object({
|
|
28
48
|
runtime: Type.Union(
|
|
@@ -40,20 +60,11 @@ export function registerExecTools(pi: ExtensionAPI): void {
|
|
|
40
60
|
),
|
|
41
61
|
}),
|
|
42
62
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
import("../preferences.js"),
|
|
46
|
-
import("../workflow-logger.js"),
|
|
47
|
-
]);
|
|
48
|
-
let prefs: ReturnType<typeof loadEffectiveGSDPreferences> | null = null;
|
|
49
|
-
try {
|
|
50
|
-
prefs = loadEffectiveGSDPreferences();
|
|
51
|
-
} catch (err) {
|
|
52
|
-
logWarning("tool", `gsd_exec could not load preferences: ${err instanceof Error ? err.message : String(err)}`);
|
|
53
|
-
}
|
|
63
|
+
const { executeGsdExec } = await import("../tools/exec-tool.js");
|
|
64
|
+
const baseDir = toolWorkspaceRoot(_ctx);
|
|
54
65
|
return executeGsdExec(params as Parameters<typeof executeGsdExec>[0], {
|
|
55
|
-
baseDir
|
|
56
|
-
preferences:
|
|
66
|
+
baseDir,
|
|
67
|
+
preferences: await loadContextModePreferences(baseDir),
|
|
57
68
|
});
|
|
58
69
|
},
|
|
59
70
|
});
|
|
@@ -67,7 +78,7 @@ export function registerExecTools(pi: ExtensionAPI): void {
|
|
|
67
78
|
promptSnippet: "Search prior gsd_exec runs by substring, runtime, or failing-only filter",
|
|
68
79
|
promptGuidelines: [
|
|
69
80
|
"Use this before re-running an expensive analysis — the prior run's stdout file may still answer.",
|
|
70
|
-
"The preview shows the trailing ~300 chars of stdout; read stdout_path for
|
|
81
|
+
"The preview shows the trailing ~300 chars of stdout; read stdout_path for persisted output.",
|
|
71
82
|
],
|
|
72
83
|
parameters: Type.Object({
|
|
73
84
|
query: Type.Optional(Type.String({ description: "Substring matched against id and purpose (case-insensitive)." })),
|
|
@@ -81,8 +92,10 @@ export function registerExecTools(pi: ExtensionAPI): void {
|
|
|
81
92
|
}),
|
|
82
93
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
83
94
|
const { executeExecSearch } = await import("../tools/exec-search-tool.js");
|
|
95
|
+
const baseDir = toolWorkspaceRoot(_ctx);
|
|
84
96
|
return executeExecSearch(params as Parameters<typeof executeExecSearch>[0], {
|
|
85
|
-
baseDir
|
|
97
|
+
baseDir,
|
|
98
|
+
preferences: await loadContextModePreferences(baseDir),
|
|
86
99
|
});
|
|
87
100
|
},
|
|
88
101
|
});
|
|
@@ -102,8 +115,10 @@ export function registerExecTools(pi: ExtensionAPI): void {
|
|
|
102
115
|
parameters: Type.Object({}),
|
|
103
116
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
104
117
|
const { executeResume } = await import("../tools/resume-tool.js");
|
|
118
|
+
const baseDir = toolWorkspaceRoot(_ctx);
|
|
105
119
|
return executeResume(params as Parameters<typeof executeResume>[0], {
|
|
106
|
-
baseDir
|
|
120
|
+
baseDir,
|
|
121
|
+
preferences: await loadContextModePreferences(baseDir),
|
|
107
122
|
});
|
|
108
123
|
},
|
|
109
124
|
});
|
|
@@ -4,6 +4,13 @@ import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
|
4
4
|
import { queryJournal } from "../journal.js";
|
|
5
5
|
import { logWarning } from "../workflow-logger.js";
|
|
6
6
|
|
|
7
|
+
function toolWorkspaceRoot(ctx: unknown): string {
|
|
8
|
+
if (ctx && typeof ctx === "object" && typeof (ctx as { cwd?: unknown }).cwd === "string") {
|
|
9
|
+
return (ctx as { cwd: string }).cwd;
|
|
10
|
+
}
|
|
11
|
+
return process.cwd();
|
|
12
|
+
}
|
|
13
|
+
|
|
7
14
|
export function registerJournalTools(pi: ExtensionAPI): void {
|
|
8
15
|
pi.registerTool({
|
|
9
16
|
name: "gsd_journal_query",
|
|
@@ -36,7 +43,7 @@ export function registerJournalTools(pi: ExtensionAPI): void {
|
|
|
36
43
|
if (params.after !== undefined) filters.after = params.after;
|
|
37
44
|
if (params.before !== undefined) filters.before = params.before;
|
|
38
45
|
|
|
39
|
-
const entries = queryJournal(
|
|
46
|
+
const entries = queryJournal(toolWorkspaceRoot(_ctx), filters);
|
|
40
47
|
const limited = entries.slice(0, params.limit ?? 100);
|
|
41
48
|
|
|
42
49
|
if (limited.length === 0) {
|
|
@@ -14,6 +14,13 @@ import {
|
|
|
14
14
|
executeMemoryQuery,
|
|
15
15
|
} from "../tools/memory-tools.js";
|
|
16
16
|
|
|
17
|
+
function toolWorkspaceRoot(ctx: unknown): string {
|
|
18
|
+
if (ctx && typeof ctx === "object" && typeof (ctx as { cwd?: unknown }).cwd === "string") {
|
|
19
|
+
return (ctx as { cwd: string }).cwd;
|
|
20
|
+
}
|
|
21
|
+
return process.cwd();
|
|
22
|
+
}
|
|
23
|
+
|
|
17
24
|
export function registerMemoryTools(pi: ExtensionAPI): void {
|
|
18
25
|
// ─── capture_thought ────────────────────────────────────────────────────
|
|
19
26
|
|
|
@@ -57,7 +64,7 @@ export function registerMemoryTools(pi: ExtensionAPI): void {
|
|
|
57
64
|
),
|
|
58
65
|
}),
|
|
59
66
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
60
|
-
const ok = await ensureDbOpen();
|
|
67
|
+
const ok = await ensureDbOpen(toolWorkspaceRoot(_ctx));
|
|
61
68
|
if (!ok) {
|
|
62
69
|
return {
|
|
63
70
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot capture memory." }],
|
|
@@ -108,7 +115,7 @@ export function registerMemoryTools(pi: ExtensionAPI): void {
|
|
|
108
115
|
),
|
|
109
116
|
}),
|
|
110
117
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
111
|
-
const ok = await ensureDbOpen();
|
|
118
|
+
const ok = await ensureDbOpen(toolWorkspaceRoot(_ctx));
|
|
112
119
|
if (!ok) {
|
|
113
120
|
return {
|
|
114
121
|
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot query memory." }],
|
|
@@ -149,7 +156,7 @@ export function registerMemoryTools(pi: ExtensionAPI): void {
|
|
|
149
156
|
], { description: "Only include edges with this relation type" })),
|
|
150
157
|
}),
|
|
151
158
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
152
|
-
const ok = await ensureDbOpen();
|
|
159
|
+
const ok = await ensureDbOpen(toolWorkspaceRoot(_ctx));
|
|
153
160
|
if (!ok) {
|
|
154
161
|
return {
|
|
155
162
|
content: [{ type: "text" as const, text: "Error: GSD database is not available." }],
|
|
@@ -4,6 +4,13 @@ import { Type } from "@sinclair/typebox";
|
|
|
4
4
|
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
5
5
|
import { ensureDbOpen } from "./dynamic-tools.js";
|
|
6
6
|
|
|
7
|
+
function toolWorkspaceRoot(ctx: unknown): string {
|
|
8
|
+
if (ctx && typeof ctx === "object" && typeof (ctx as { cwd?: unknown }).cwd === "string") {
|
|
9
|
+
return (ctx as { cwd: string }).cwd;
|
|
10
|
+
}
|
|
11
|
+
return process.cwd();
|
|
12
|
+
}
|
|
13
|
+
|
|
7
14
|
export function registerQueryTools(pi: ExtensionAPI): void {
|
|
8
15
|
pi.registerTool({
|
|
9
16
|
name: "gsd_milestone_status",
|
|
@@ -20,7 +27,7 @@ export function registerQueryTools(pi: ExtensionAPI): void {
|
|
|
20
27
|
milestoneId: Type.String({ description: "Milestone ID to query (e.g. M001)" }),
|
|
21
28
|
}),
|
|
22
29
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
23
|
-
const dbAvailable = await ensureDbOpen();
|
|
30
|
+
const dbAvailable = await ensureDbOpen(toolWorkspaceRoot(_ctx));
|
|
24
31
|
if (!dbAvailable) {
|
|
25
32
|
return {
|
|
26
33
|
content: [{ type: "text", text: "Error: GSD database is not available. Cannot read milestone status." }],
|
|
@@ -47,7 +54,7 @@ export function registerQueryTools(pi: ExtensionAPI): void {
|
|
|
47
54
|
],
|
|
48
55
|
parameters: Type.Object({}),
|
|
49
56
|
async execute(_toolCallId, _params, _signal, _onUpdate, _ctx) {
|
|
50
|
-
const dbAvailable = await ensureDbOpen();
|
|
57
|
+
const dbAvailable = await ensureDbOpen(toolWorkspaceRoot(_ctx));
|
|
51
58
|
if (!dbAvailable) {
|
|
52
59
|
return {
|
|
53
60
|
content: [{ type: "text", text: "Error: GSD database is not available. Cannot checkpoint." }],
|