gsd-pi 2.81.0 → 2.82.0
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 +36 -24
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/gsd/auto/loop.js +111 -8
- package/dist/resources/extensions/gsd/auto/phases.js +190 -97
- package/dist/resources/extensions/gsd/auto/run-unit.js +66 -3
- package/dist/resources/extensions/gsd/auto/session.js +9 -0
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +43 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +182 -178
- package/dist/resources/extensions/gsd/auto-dispatch.js +14 -11
- package/dist/resources/extensions/gsd/auto-post-unit.js +7 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +6 -181
- package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -0
- package/dist/resources/extensions/gsd/auto-start.js +20 -23
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +33 -5
- package/dist/resources/extensions/gsd/auto-verification.js +12 -6
- package/dist/resources/extensions/gsd/auto-worktree.js +8 -0
- package/dist/resources/extensions/gsd/auto.js +265 -76
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +13 -6
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +8 -2
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +4 -8
- package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +4 -10
- package/dist/resources/extensions/gsd/commands/handlers/parallel.js +9 -0
- package/dist/resources/extensions/gsd/git-service.js +2 -1
- package/dist/resources/extensions/gsd/gsd-db.js +7 -23
- package/dist/resources/extensions/gsd/health-widget-core.js +1 -1
- package/dist/resources/extensions/gsd/health-widget.js +4 -10
- package/dist/resources/extensions/gsd/markdown-renderer.js +0 -95
- package/dist/resources/extensions/gsd/native-git-bridge.js +14 -14
- package/dist/resources/extensions/gsd/notification-overlay.js +35 -40
- package/dist/resources/extensions/gsd/parallel-merge.js +53 -30
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +25 -33
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +14 -12
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
- package/dist/resources/extensions/gsd/prompts/discuss.md +20 -2
- package/dist/resources/extensions/gsd/recovery-classification.js +15 -1
- package/dist/resources/extensions/gsd/session-lock.js +40 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +131 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +247 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +50 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +87 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.js +50 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +124 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-worker.js +32 -0
- package/dist/resources/extensions/gsd/state-reconciliation/errors.js +41 -0
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +99 -0
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +24 -0
- package/dist/resources/extensions/gsd/state-reconciliation/spawn-gate.js +43 -0
- package/dist/resources/extensions/gsd/state-reconciliation/types.js +3 -0
- package/dist/resources/extensions/gsd/state-reconciliation.js +5 -26
- package/dist/resources/extensions/gsd/tui/render-kit.js +74 -0
- package/dist/resources/extensions/gsd/watch/header-renderer.js +92 -69
- package/dist/resources/extensions/gsd/watch/splash-palette.js +10 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +2 -2
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +722 -316
- package/dist/resources/extensions/gsd/worktree-telemetry.js +3 -1
- 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 +9 -9
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- 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/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 +9 -9
- package/dist/web/standalone/.next/server/middleware-build-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/welcome-screen.d.ts +0 -7
- package/dist/welcome-screen.js +60 -69
- package/package.json +1 -1
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/package.json +2 -2
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +47 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +76 -9
- 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/__tests__/user-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +40 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +30 -29
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +10 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.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 +13 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +58 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +12 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -41
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +0 -1
- 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 +86 -82
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts +35 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +152 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts +16 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js +73 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +12 -8
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- 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 +105 -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 +27 -26
- 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 +9 -6
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +56 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +113 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +48 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +10 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +43 -42
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +14 -14
- package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +64 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +13 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +15 -42
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +84 -104
- package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +196 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tui-style-kit.ts +94 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +14 -9
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +23 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +106 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +27 -26
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +9 -6
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +14 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.js +9 -6
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +20 -1
- package/packages/pi-tui/src/overlay-layout.ts +10 -7
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +105 -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 +27 -26
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/gsd/auto/loop-deps.ts +9 -5
- package/src/resources/extensions/gsd/auto/loop.ts +113 -9
- package/src/resources/extensions/gsd/auto/phases.ts +144 -19
- package/src/resources/extensions/gsd/auto/run-unit.ts +69 -4
- package/src/resources/extensions/gsd/auto/session.ts +10 -0
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +82 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +230 -183
- package/src/resources/extensions/gsd/auto-dispatch.ts +15 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +7 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +7 -209
- package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
- package/src/resources/extensions/gsd/auto-start.ts +22 -22
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +51 -0
- package/src/resources/extensions/gsd/auto-verification.ts +12 -6
- package/src/resources/extensions/gsd/auto-worktree.ts +8 -0
- package/src/resources/extensions/gsd/auto.ts +295 -75
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +21 -6
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +6 -2
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +5 -8
- package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +4 -10
- package/src/resources/extensions/gsd/commands/handlers/parallel.ts +12 -0
- package/src/resources/extensions/gsd/git-service.ts +2 -0
- package/src/resources/extensions/gsd/gsd-db.ts +7 -23
- package/src/resources/extensions/gsd/health-widget-core.ts +1 -1
- package/src/resources/extensions/gsd/health-widget.ts +6 -10
- package/src/resources/extensions/gsd/journal.ts +2 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +4 -95
- package/src/resources/extensions/gsd/native-git-bridge.ts +14 -13
- package/src/resources/extensions/gsd/notification-overlay.ts +50 -46
- package/src/resources/extensions/gsd/parallel-merge.ts +61 -34
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +33 -35
- package/src/resources/extensions/gsd/prompts/complete-slice.md +14 -12
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
- package/src/resources/extensions/gsd/prompts/discuss.md +20 -2
- package/src/resources/extensions/gsd/recovery-classification.ts +18 -1
- package/src/resources/extensions/gsd/session-lock.ts +41 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +172 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +337 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +69 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +109 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.ts +68 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +185 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-worker.ts +46 -0
- package/src/resources/extensions/gsd/state-reconciliation/errors.ts +67 -0
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +142 -0
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +27 -0
- package/src/resources/extensions/gsd/state-reconciliation/spawn-gate.ts +60 -0
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +83 -0
- package/src/resources/extensions/gsd/state-reconciliation.ts +21 -53
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +654 -176
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +291 -4
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +16 -1
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +28 -1
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +20 -2
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/header-renderer.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +26 -0
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +116 -24
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +46 -11
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +78 -41
- package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +12 -217
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -1
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +65 -58
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +952 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +121 -1
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +158 -58
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +572 -118
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +59 -2
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +18 -0
- package/src/resources/extensions/gsd/tui/render-kit.ts +109 -0
- package/src/resources/extensions/gsd/watch/header-renderer.ts +121 -79
- package/src/resources/extensions/gsd/watch/splash-palette.ts +11 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +2 -2
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +1151 -524
- package/src/resources/extensions/gsd/worktree-telemetry.ts +7 -2
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1544
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → S44UQTFCUdA44dkjfYt6S}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → S44UQTFCUdA44dkjfYt6S}/_ssgManifest.js +0 -0
|
@@ -93,7 +93,6 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
93
93
|
private shouldRenderCompactSuccess;
|
|
94
94
|
getRollupPhase(): ToolExecutionPhase | null;
|
|
95
95
|
private getPhaseLabel;
|
|
96
|
-
private getCompactSummary;
|
|
97
96
|
private getCompactAction;
|
|
98
97
|
private getTargetMetadata;
|
|
99
98
|
private getCompactTarget;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"AAEA,OAAO,EAEN,SAAS,EAQT,KAAK,GAAG,EAGR,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AA0ExE,MAAM,MAAM,kBAAkB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAiMF,MAAM,WAAW,oBAAoB;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACpD,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,MAAM,CAAC,CAIb;IAEF,OAAO,CAAC,eAAe,CAAC,CAAiC;IACzD,OAAO,CAAC,eAAe,CAAC,CAAS;IAEjC,OAAO,CAAC,eAAe,CAA8D;IAGrF,OAAO,CAAC,uBAAuB,CAA2C;IAE1E,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAElD,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,KAAK,kBAAkB,GAE7B;gBAGA,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,oBAAoB,YAAK,EAClC,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,EAAE,EAAE,GAAG,EACP,GAAG,GAAE,MAAsB;IA2B5B;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAOhC,OAAO,IAAI,IAAI;IASf,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAQ3B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,8BAA8B;IAkBtC,OAAO,CAAC,oCAAoC;IAyD5C;;;OAGG;IACH,eAAe,IAAI,IAAI;IAWvB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA6B5B,YAAY,CACX,MAAM,EAAE;QACP,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClF,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,OAAO,EAAE,OAAO,CAAC;KACjB,EACD,SAAS,UAAQ,GACf,IAAI;IAkBP;;;;;;OAMG;IACH,sBAAsB,IAAI,IAAI;IAW9B;;OAEG;IACH,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBzC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA2BlC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKpC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKzB,UAAU,IAAI,IAAI;IAKlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAmDxC,OAAO,CAAC,0BAA0B;IAMlC,cAAc,IAAI,kBAAkB,GAAG,IAAI;IAc3C,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,aAAa;IAoKrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmFzB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,mBAAmB;CA8W3B;AAED,qBAAa,yBAA0B,SAAQ,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,kBAAkB,EAAE;IAIzD,SAAS,IAAI,kBAAkB,EAAE;IAIxB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAgBxC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// GSD-2
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Interactive terminal tool execution renderer for commands, tool calls, diffs, images, and summaries.
|
|
2
3
|
import { Box, Container, getCapabilities, Image, imageFallback, Spacer, style, Text, truncateToWidth, visibleWidth, } from "@gsd/pi-tui";
|
|
3
4
|
import stripAnsi from "strip-ansi";
|
|
4
5
|
import { computeEditDiff } from "../../../core/tools/edit-diff.js";
|
|
@@ -10,6 +11,7 @@ import { getLanguageFromPath, highlightCode, theme } from "../theme/theme.js";
|
|
|
10
11
|
import { shortenPath } from "../utils/shorten-path.js";
|
|
11
12
|
import { renderDiff } from "./diff.js";
|
|
12
13
|
import { keyHint } from "./keybinding-hints.js";
|
|
14
|
+
import { renderCommandCard, renderToolLineCard, renderTranscriptCard } from "./transcript-design.js";
|
|
13
15
|
import { truncateToVisualLines } from "./visual-truncate.js";
|
|
14
16
|
// Preview line limit for bash when not expanded
|
|
15
17
|
const BASH_PREVIEW_LINES = 5;
|
|
@@ -68,54 +70,6 @@ function prettifyToolName(name, label) {
|
|
|
68
70
|
.map((word) => (word.length === 0 ? word : word[0].toUpperCase() + word.slice(1)))
|
|
69
71
|
.join(" ");
|
|
70
72
|
}
|
|
71
|
-
function trimOuterBlankLines(lines) {
|
|
72
|
-
let start = 0;
|
|
73
|
-
let end = lines.length;
|
|
74
|
-
while (start < end && lines[start].trim().length === 0)
|
|
75
|
-
start++;
|
|
76
|
-
while (end > start && lines[end - 1].trim().length === 0)
|
|
77
|
-
end--;
|
|
78
|
-
return lines.slice(start, end);
|
|
79
|
-
}
|
|
80
|
-
function renderToolFrame(contentLines, width, opts) {
|
|
81
|
-
const outerWidth = Math.max(20, width);
|
|
82
|
-
const contentWidth = Math.max(1, outerWidth - 2); // "│ " + content
|
|
83
|
-
const borderColor = opts.tone === "error" ? "toolError" : opts.tone === "pending" ? "toolRunning" : "toolSuccess";
|
|
84
|
-
const topColor = borderColor;
|
|
85
|
-
const labelColor = opts.tone === "error" ? "toolError" : opts.tone === "pending" ? "toolRunning" : "toolSuccess";
|
|
86
|
-
const statusColor = opts.tone === "error" ? "toolError" : opts.tone === "pending" ? "toolRunning" : "toolSuccess";
|
|
87
|
-
const leftStyled = theme.fg(labelColor, theme.bold(opts.label));
|
|
88
|
-
const rightStyled = theme.fg(statusColor, opts.status);
|
|
89
|
-
const titleWidth = Math.max(1, outerWidth - 4);
|
|
90
|
-
const gap = Math.max(1, titleWidth - visibleWidth(leftStyled) - visibleWidth(rightStyled));
|
|
91
|
-
const headerRow = `${leftStyled}${" ".repeat(gap)}${rightStyled}`;
|
|
92
|
-
const headerPad = Math.max(0, titleWidth - visibleWidth(headerRow));
|
|
93
|
-
const sourceLines = trimOuterBlankLines(contentLines);
|
|
94
|
-
const bodyLines = (sourceLines.length > 0 ? sourceLines : [""]).map((line) => {
|
|
95
|
-
const clipped = truncateToWidth(line, contentWidth, "");
|
|
96
|
-
return clipped;
|
|
97
|
-
});
|
|
98
|
-
return style()
|
|
99
|
-
.border("rounded")
|
|
100
|
-
.borderColor((line) => theme.fg(line.startsWith("─") ? topColor : borderColor, line))
|
|
101
|
-
.title(headerRow + " ".repeat(headerPad))
|
|
102
|
-
.render(bodyLines, outerWidth);
|
|
103
|
-
}
|
|
104
|
-
function renderCollapsedToolRow(label, status, width, tone) {
|
|
105
|
-
const outerWidth = Math.max(20, width);
|
|
106
|
-
const contentWidth = Math.max(1, outerWidth - 2);
|
|
107
|
-
const statusColor = tone === "success" ? "toolSuccess" : "toolMuted";
|
|
108
|
-
const labelStyled = theme.fg(statusColor, label);
|
|
109
|
-
const statusStyled = theme.fg(statusColor, status);
|
|
110
|
-
const labelWidth = Math.max(1, contentWidth - visibleWidth(statusStyled) - 1);
|
|
111
|
-
const clippedLabel = truncateToWidth(labelStyled, labelWidth, "");
|
|
112
|
-
const gap = Math.max(1, contentWidth - visibleWidth(clippedLabel) - visibleWidth(statusStyled));
|
|
113
|
-
const line = `${clippedLabel}${" ".repeat(gap)}${statusStyled}`;
|
|
114
|
-
return style()
|
|
115
|
-
.border("minimal")
|
|
116
|
-
.borderColor((text) => theme.fg(statusColor, text))
|
|
117
|
-
.render([line], outerWidth);
|
|
118
|
-
}
|
|
119
73
|
const COMPACT_ARG_VALUE_LIMIT = 60;
|
|
120
74
|
const GENERIC_OUTPUT_PREVIEW_LINES = 10;
|
|
121
75
|
const GENERIC_ARGS_JSON_PREVIEW_LINES = 10;
|
|
@@ -153,6 +107,42 @@ function formatToolTarget(target) {
|
|
|
153
107
|
}
|
|
154
108
|
return appendLineOrRange(displayPath, target);
|
|
155
109
|
}
|
|
110
|
+
function directDetailsTarget(details, action) {
|
|
111
|
+
if (!details || typeof details !== "object")
|
|
112
|
+
return undefined;
|
|
113
|
+
const record = details;
|
|
114
|
+
const rawPath = record.resolvedPath ?? record.inputPath ?? record.file_path ?? record.path;
|
|
115
|
+
if (typeof rawPath !== "string" || rawPath.trim().length === 0)
|
|
116
|
+
return undefined;
|
|
117
|
+
const target = {
|
|
118
|
+
kind: "file",
|
|
119
|
+
action,
|
|
120
|
+
resolvedPath: typeof record.resolvedPath === "string" ? record.resolvedPath : rawPath,
|
|
121
|
+
inputPath: typeof record.inputPath === "string" ? record.inputPath : rawPath,
|
|
122
|
+
};
|
|
123
|
+
if (typeof record.line === "number") {
|
|
124
|
+
target.line = record.line;
|
|
125
|
+
}
|
|
126
|
+
const range = record.range;
|
|
127
|
+
if (range && typeof range === "object") {
|
|
128
|
+
const rangeRecord = range;
|
|
129
|
+
target.range = {
|
|
130
|
+
start: typeof rangeRecord.start === "number" ? rangeRecord.start : undefined,
|
|
131
|
+
end: typeof rangeRecord.end === "number" ? rangeRecord.end : undefined,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return target;
|
|
135
|
+
}
|
|
136
|
+
function firstStringArg(args, keys) {
|
|
137
|
+
for (const key of keys) {
|
|
138
|
+
const value = str(args[key]);
|
|
139
|
+
if (value === null)
|
|
140
|
+
continue;
|
|
141
|
+
if (value)
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
return "";
|
|
145
|
+
}
|
|
156
146
|
function formatArgsPathTarget(path, args) {
|
|
157
147
|
if (!path)
|
|
158
148
|
return undefined;
|
|
@@ -552,19 +542,42 @@ export class ToolExecutionComponent extends Container {
|
|
|
552
542
|
const contentWidth = Math.max(1, frameWidth - 4);
|
|
553
543
|
const frameTone = this.result?.isError ? "error" : this.isPartial || !this.result ? "pending" : "success";
|
|
554
544
|
const elapsed = formatElapsed((this.endedAt ?? Date.now()) - this.startedAt);
|
|
555
|
-
const
|
|
545
|
+
const statusWord = this.isPartial || !this.result ? "running" : this.result.isError ? "failed" : "success";
|
|
546
|
+
const frameStatus = `${statusWord} · ${elapsed}`;
|
|
556
547
|
const parsed = parseMcpToolName(this.toolName);
|
|
557
548
|
const frameLabel = parsed
|
|
558
549
|
? `${parsed.server}·${parsed.tool}`
|
|
559
550
|
: prettifyToolName(this.toolName, this.toolDefinition?.label) || "unknown";
|
|
560
|
-
|
|
561
|
-
|
|
551
|
+
const recommendedTone = frameTone === "pending" ? "running" : frameTone === "error" ? "error" : "success";
|
|
552
|
+
if (this.normalizedToolName === "bash" && !this.expanded && !this.result?.isError) {
|
|
553
|
+
const command = str(this.args?.command);
|
|
554
|
+
return [
|
|
555
|
+
"",
|
|
556
|
+
...renderCommandCard(command && command.length > 0 ? formatCommandPreview(command) : frameLabel, frameWidth, {
|
|
557
|
+
status: frameStatus,
|
|
558
|
+
tone: recommendedTone,
|
|
559
|
+
}),
|
|
560
|
+
];
|
|
561
|
+
}
|
|
562
|
+
const hasImages = this.result?.content?.some((block) => block.type === "image") ?? false;
|
|
563
|
+
if (!this.expanded && !this.result?.isError && !hasImages) {
|
|
564
|
+
const compactTarget = this.getCompactTarget();
|
|
565
|
+
return [
|
|
566
|
+
"",
|
|
567
|
+
...renderToolLineCard(frameLabel, compactTarget, frameWidth, {
|
|
568
|
+
status: frameStatus,
|
|
569
|
+
tone: recommendedTone,
|
|
570
|
+
hidden: !this.isPartial && !!this.result,
|
|
571
|
+
}),
|
|
572
|
+
];
|
|
562
573
|
}
|
|
563
574
|
const lines = super.render(contentWidth);
|
|
564
|
-
const framed =
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
tone:
|
|
575
|
+
const framed = renderTranscriptCard(lines, frameWidth, {
|
|
576
|
+
title: frameLabel,
|
|
577
|
+
right: frameStatus,
|
|
578
|
+
tone: recommendedTone,
|
|
579
|
+
footerLeft: this.expanded ? "output expanded" : undefined,
|
|
580
|
+
footerRight: this.expanded ? "ctrl+o collapse" : undefined,
|
|
568
581
|
});
|
|
569
582
|
return framed.length > 0 ? ["", ...framed] : framed;
|
|
570
583
|
}
|
|
@@ -608,14 +621,6 @@ export class ToolExecutionComponent extends Container {
|
|
|
608
621
|
return "Finalization";
|
|
609
622
|
return "Other tool actions";
|
|
610
623
|
}
|
|
611
|
-
getCompactSummary(frameLabel) {
|
|
612
|
-
if (this.normalizedToolName === "bash") {
|
|
613
|
-
const command = str(this.args?.command);
|
|
614
|
-
return command ? `bash ${formatCommandPreview(command)}` : frameLabel;
|
|
615
|
-
}
|
|
616
|
-
const target = this.getCompactTarget();
|
|
617
|
-
return target ? `${this.getCompactAction()} ${target}` : frameLabel;
|
|
618
|
-
}
|
|
619
624
|
getCompactAction() {
|
|
620
625
|
const target = this.getTargetMetadata();
|
|
621
626
|
if (target?.action)
|
|
@@ -624,14 +629,16 @@ export class ToolExecutionComponent extends Container {
|
|
|
624
629
|
}
|
|
625
630
|
getTargetMetadata() {
|
|
626
631
|
const target = this.result?.details?.target;
|
|
627
|
-
|
|
632
|
+
if (target && typeof target === "object")
|
|
633
|
+
return target;
|
|
634
|
+
return directDetailsTarget(this.result?.details, this.normalizedToolName);
|
|
628
635
|
}
|
|
629
636
|
getCompactTarget() {
|
|
630
637
|
const metadata = this.getTargetMetadata();
|
|
631
638
|
const metadataTarget = metadata ? formatToolTarget(metadata) : undefined;
|
|
632
639
|
if (metadataTarget)
|
|
633
640
|
return metadataTarget;
|
|
634
|
-
const path =
|
|
641
|
+
const path = firstStringArg(this.args ?? {}, ["file_path", "path", "notebook_path"]);
|
|
635
642
|
if (path === null)
|
|
636
643
|
return undefined;
|
|
637
644
|
if (this.normalizedToolName === "read" || this.normalizedToolName === "hashline_read") {
|
|
@@ -641,16 +648,20 @@ export class ToolExecutionComponent extends Container {
|
|
|
641
648
|
return path ? shortenPath(path) : undefined;
|
|
642
649
|
}
|
|
643
650
|
if (this.normalizedToolName === "ls") {
|
|
644
|
-
return shortenPath(path
|
|
651
|
+
return path ? shortenPath(path) : undefined;
|
|
645
652
|
}
|
|
646
653
|
if (this.normalizedToolName === "find") {
|
|
647
654
|
const pattern = str(this.args?.pattern);
|
|
648
|
-
|
|
655
|
+
if (pattern)
|
|
656
|
+
return path ? `${pattern} in ${shortenPath(path)}` : pattern;
|
|
657
|
+
return path ? shortenPath(path) : undefined;
|
|
649
658
|
}
|
|
650
659
|
if (this.normalizedToolName === "grep") {
|
|
651
660
|
const pattern = str(this.args?.pattern);
|
|
652
661
|
const glob = str(this.args?.glob);
|
|
653
|
-
const label = pattern ? `${pattern} in ${shortenPath(path
|
|
662
|
+
const label = pattern ? (path ? `${pattern} in ${shortenPath(path)}` : pattern) : path ? shortenPath(path) : undefined;
|
|
663
|
+
if (!label)
|
|
664
|
+
return glob || undefined;
|
|
654
665
|
return glob ? `${label} (${glob})` : label;
|
|
655
666
|
}
|
|
656
667
|
return undefined;
|
|
@@ -1194,23 +1205,15 @@ export class ToolExecutionComponent extends Container {
|
|
|
1194
1205
|
}
|
|
1195
1206
|
else {
|
|
1196
1207
|
// Generic tool / MCP tool without a registered renderer.
|
|
1197
|
-
//
|
|
1198
|
-
//
|
|
1199
|
-
// cleanly. GSD-registered MCP tools have already had their prefix
|
|
1200
|
-
// stripped upstream in partial-builder.ts and won't reach this branch.
|
|
1201
|
-
const parsed = parseMcpToolName(this.toolName);
|
|
1202
|
-
const displayName = parsed
|
|
1203
|
-
? parsed.tool
|
|
1204
|
-
: prettifyToolName(this.toolName, this.toolDefinition?.label);
|
|
1205
|
-
const serverPrefix = parsed ? theme.fg("muted", `${parsed.server}\u00b7`) : "";
|
|
1206
|
-
text = serverPrefix + theme.fg("toolTitle", theme.bold(displayName));
|
|
1208
|
+
// The frame header already contains the tool identity, so the body
|
|
1209
|
+
// should show only arguments and output.
|
|
1207
1210
|
const argsText = formatCompactArgs(this.args, this.expanded);
|
|
1208
1211
|
if (argsText) {
|
|
1209
1212
|
if (argsText.includes("\n")) {
|
|
1210
|
-
text
|
|
1213
|
+
text = theme.fg("toolOutput", argsText);
|
|
1211
1214
|
}
|
|
1212
1215
|
else {
|
|
1213
|
-
text
|
|
1216
|
+
text = theme.fg("toolOutput", argsText);
|
|
1214
1217
|
}
|
|
1215
1218
|
}
|
|
1216
1219
|
if (this.result) {
|
|
@@ -1220,7 +1223,8 @@ export class ToolExecutionComponent extends Container {
|
|
|
1220
1223
|
const maxLines = this.expanded ? lines.length : GENERIC_OUTPUT_PREVIEW_LINES;
|
|
1221
1224
|
const displayLines = lines.slice(0, maxLines);
|
|
1222
1225
|
const remaining = lines.length - maxLines;
|
|
1223
|
-
|
|
1226
|
+
const outputText = displayLines.map((line) => theme.fg("toolOutput", line)).join("\n");
|
|
1227
|
+
text += `${text ? "\n\n" : ""}${outputText}`;
|
|
1224
1228
|
if (remaining > 0) {
|
|
1225
1229
|
text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("expandTools", "to expand")})`;
|
|
1226
1230
|
}
|