lsd-pi 1.2.4 → 1.3.6
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 +22 -16
- package/dist/app-paths.d.ts +4 -0
- package/dist/app-paths.js +4 -0
- package/dist/bedrock-auth.d.ts +4 -0
- package/dist/bedrock-auth.js +4 -0
- package/dist/bundled-extension-paths.d.ts +4 -0
- package/dist/bundled-extension-paths.js +4 -0
- package/dist/cli-theme.d.ts +2 -2
- package/dist/cli-theme.js +13 -14
- package/dist/cli.js +43 -3
- package/dist/codex-rotate-settings.d.ts +4 -0
- package/dist/codex-rotate-settings.js +4 -0
- package/dist/help-text.d.ts +4 -0
- package/dist/help-text.js +4 -0
- package/dist/lsd-brand.d.ts +4 -0
- package/dist/lsd-brand.js +4 -0
- package/dist/onboarding-llm.d.ts +5 -0
- package/dist/onboarding-llm.js +5 -0
- package/dist/project-sessions.d.ts +4 -0
- package/dist/project-sessions.js +4 -0
- package/dist/resources/agents/generic.md +1 -0
- package/dist/resources/agents/scout.md +8 -1
- package/dist/resources/agents/worker.md +1 -0
- package/dist/resources/extensions/ask-user-questions.js +70 -0
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +6 -16
- package/dist/resources/extensions/browser-tools/tools/codegen.js +5 -5
- package/dist/resources/extensions/browser-tools/tools/navigation.js +107 -178
- package/dist/resources/extensions/browser-tools/tools/network-mock.js +112 -167
- package/dist/resources/extensions/browser-tools/tools/pages.js +182 -234
- package/dist/resources/extensions/browser-tools/tools/refs.js +202 -461
- package/dist/resources/extensions/browser-tools/tools/session.js +176 -323
- package/dist/resources/extensions/browser-tools/tools/state-persistence.js +91 -154
- package/dist/resources/extensions/browser-tools/utils.js +1 -1
- package/dist/resources/extensions/mac-tools/index.js +19 -34
- package/dist/resources/extensions/memory/index.js +20 -2
- package/dist/resources/extensions/shared/interview-ui.js +103 -20
- package/dist/resources/extensions/slash-commands/extension-manifest.json +2 -2
- package/dist/resources/extensions/slash-commands/fast.js +73 -0
- package/dist/resources/extensions/slash-commands/index.js +2 -0
- package/dist/resources/extensions/slash-commands/plan.js +54 -28
- package/dist/resources/extensions/slash-commands/tools.js +40 -4
- package/dist/resources/extensions/subagent/agent-switcher-component.js +208 -0
- package/dist/resources/extensions/subagent/agent-switcher-model.js +107 -0
- package/dist/resources/extensions/subagent/background-job-manager.js +24 -6
- package/dist/resources/extensions/subagent/background-runner.js +4 -0
- package/dist/resources/extensions/subagent/in-process-runner.js +387 -0
- package/dist/resources/extensions/subagent/index.js +715 -370
- package/dist/resources/extensions/subagent/launch-helpers.js +19 -5
- package/dist/resources/extensions/subagent/legacy-runner.js +503 -0
- package/dist/resources/extensions/voice/index.js +96 -36
- package/dist/resources/extensions/voice/push-to-talk.js +26 -0
- package/dist/shared-paths.d.ts +4 -0
- package/dist/shared-paths.js +4 -0
- package/dist/shared-preferences.d.ts +4 -0
- package/dist/shared-preferences.js +4 -0
- package/dist/startup-model-validation.d.ts +1 -1
- package/dist/startup-timings.d.ts +4 -0
- package/dist/startup-timings.js +4 -0
- package/dist/update-check.d.ts +4 -0
- package/dist/update-check.js +4 -0
- package/dist/update-cmd.d.ts +4 -0
- package/dist/update-cmd.js +4 -0
- package/dist/welcome-screen.js +4 -4
- package/dist/wizard.d.ts +4 -0
- package/dist/wizard.js +4 -0
- package/package.json +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +28 -0
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +105 -5
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/types.d.ts +13 -2
- 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.ts +142 -6
- package/packages/pi-agent-core/src/types.ts +12 -3
- package/packages/pi-ai/dist/adaptive/classifier.d.ts +29 -0
- package/packages/pi-ai/dist/adaptive/classifier.d.ts.map +1 -0
- package/packages/pi-ai/dist/adaptive/classifier.js +72 -0
- package/packages/pi-ai/dist/adaptive/classifier.js.map +1 -0
- package/packages/pi-ai/dist/adaptive/classifier.test.d.ts +2 -0
- package/packages/pi-ai/dist/adaptive/classifier.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/adaptive/classifier.test.js +32 -0
- package/packages/pi-ai/dist/adaptive/classifier.test.js.map +1 -0
- package/packages/pi-ai/dist/index.d.ts +1 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.js +0 -2
- package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +0 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.js +0 -4
- package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-vertex.js +0 -5
- package/packages/pi-ai/dist/providers/google-vertex.js.map +1 -1
- package/packages/pi-ai/dist/providers/google.js +0 -5
- package/packages/pi-ai/dist/providers/google.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts +35 -2
- package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.js +32 -6
- package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.js +127 -16
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +0 -1
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.d.ts +9 -2
- package/packages/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses.fast-mode.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/openai-responses.fast-mode.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/openai-responses.fast-mode.test.js +67 -0
- package/packages/pi-ai/dist/providers/openai-responses.fast-mode.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/openai-responses.js +21 -3
- package/packages/pi-ai/dist/providers/openai-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-shared.d.ts +0 -1
- package/packages/pi-ai/dist/providers/openai-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-shared.js +0 -4
- package/packages/pi-ai/dist/providers/openai-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +2 -1
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +6 -2
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/src/adaptive/classifier.test.ts +38 -0
- package/packages/pi-ai/src/adaptive/classifier.ts +107 -0
- package/packages/pi-ai/src/index.ts +1 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.ts +0 -2
- package/packages/pi-ai/src/providers/anthropic-shared.ts +0 -2
- package/packages/pi-ai/src/providers/azure-openai-responses.ts +1 -1
- package/packages/pi-ai/src/providers/google-gemini-cli.ts +0 -4
- package/packages/pi-ai/src/providers/google-vertex.ts +0 -5
- package/packages/pi-ai/src/providers/google.ts +0 -5
- package/packages/pi-ai/src/providers/openai-codex-responses.test.ts +143 -20
- package/packages/pi-ai/src/providers/openai-codex-responses.ts +48 -7
- package/packages/pi-ai/src/providers/openai-completions.ts +1 -2
- package/packages/pi-ai/src/providers/openai-responses.fast-mode.test.ts +73 -0
- package/packages/pi-ai/src/providers/openai-responses.ts +27 -4
- package/packages/pi-ai/src/providers/openai-shared.ts +0 -3
- package/packages/pi-ai/src/providers/simple-options.ts +2 -1
- package/packages/pi-ai/src/types.ts +6 -2
- package/packages/pi-coding-agent/dist/cli/args.js +2 -2
- package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +7 -2
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +53 -20
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/keybindings.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/keybindings.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/keybindings.js +2 -0
- package/packages/pi-coding-agent/dist/core/keybindings.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp.md +3 -1
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +36 -8
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.test.js +37 -0
- package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts +8 -0
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +4 -0
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +18 -7
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.fast-mode.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.fast-mode.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.fast-mode.test.js +35 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.fast-mode.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js +32 -2
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.js +4 -1
- package/packages/pi-coding-agent/dist/core/skills.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 +2 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +12 -3
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tool-priority.d.ts +4 -0
- package/packages/pi-coding-agent/dist/core/tool-priority.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tool-priority.js +18 -0
- package/packages/pi-coding-agent/dist/core/tool-priority.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tool-priority.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tool-priority.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tool-priority.test.js +27 -0
- package/packages/pi-coding-agent/dist/core/tool-priority.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/grep.js +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +2 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/pty.d.ts +10 -1
- package/packages/pi-coding-agent/dist/core/tools/pty.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/pty.js +29 -3
- package/packages/pi-coding-agent/dist/core/tools/pty.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-summary-line.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-summary-line.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-summary-line.test.js +26 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-summary-line.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/btw-overlay.d.ts +45 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/btw-overlay.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/btw-overlay.js +314 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/btw-overlay.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/btw-overlay.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/btw-overlay.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/btw-overlay.test.js +122 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/btw-overlay.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/embedded-terminal.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/embedded-terminal.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +2 -0
- 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 +19 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +11 -2
- 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 +49 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js +1 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +6 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +18 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.d.ts +13 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.js +49 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-summary-line.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.js +197 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.js.map +1 -0
- 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 +106 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +7 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +3 -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 +4 -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 +88 -2
- 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 +41 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +2 -2
- 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 +10 -6
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/print-mode.js +6 -0
- package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +20 -0
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/path-display.test.js +15 -0
- package/packages/pi-coding-agent/dist/tests/path-display.test.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/cli/args.ts +2 -2
- package/packages/pi-coding-agent/src/core/agent-session.ts +58 -21
- package/packages/pi-coding-agent/src/core/keybindings.ts +4 -1
- package/packages/pi-coding-agent/src/core/lsp/lsp.md +3 -1
- package/packages/pi-coding-agent/src/core/sdk.test.ts +45 -0
- package/packages/pi-coding-agent/src/core/sdk.ts +39 -8
- package/packages/pi-coding-agent/src/core/session-manager.ts +12 -0
- package/packages/pi-coding-agent/src/core/settings-manager.fast-mode.test.ts +46 -0
- package/packages/pi-coding-agent/src/core/settings-manager.ts +50 -9
- package/packages/pi-coding-agent/src/core/skills.ts +4 -1
- package/packages/pi-coding-agent/src/core/slash-commands.ts +2 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +14 -3
- package/packages/pi-coding-agent/src/core/tool-priority.test.ts +30 -0
- package/packages/pi-coding-agent/src/core/tool-priority.ts +17 -0
- package/packages/pi-coding-agent/src/core/tools/grep.ts +1 -1
- package/packages/pi-coding-agent/src/core/tools/index.ts +3 -0
- package/packages/pi-coding-agent/src/core/tools/pty.ts +45 -6
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-summary-line.test.ts +31 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/btw-overlay.test.ts +172 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/btw-overlay.ts +402 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/embedded-terminal.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +18 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +63 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/thinking-selector.ts +1 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1154 -1136
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-summary-line.ts +64 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.ts +228 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +494 -389
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +7 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +3 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +103 -3
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +60 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +11 -7
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +1 -1
- package/packages/pi-coding-agent/src/modes/print-mode.ts +6 -0
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +29 -0
- package/packages/pi-coding-agent/src/tests/path-display.test.ts +17 -0
- package/packages/pi-tui/dist/components/loader.d.ts +5 -2
- package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/loader.js +33 -3
- package/packages/pi-tui/dist/components/loader.js.map +1 -1
- package/packages/pi-tui/src/components/loader.ts +31 -3
- package/packages/rpc-client/src/index.ts +1 -1
- package/packages/rpc-client/src/rpc-client.ts +29 -0
- package/packages/rpc-client/src/rpc-types.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +2 -2
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +10 -6
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/agents/generic.md +1 -0
- package/src/resources/agents/scout.md +8 -1
- package/src/resources/agents/worker.md +1 -0
- package/src/resources/extensions/ask-user-questions.ts +88 -0
- package/src/resources/extensions/bg-shell/bg-shell-tool.ts +6 -16
- package/src/resources/extensions/browser-tools/tools/codegen.ts +5 -5
- package/src/resources/extensions/browser-tools/tools/navigation.ts +118 -196
- package/src/resources/extensions/browser-tools/tools/network-mock.ts +114 -205
- package/src/resources/extensions/browser-tools/tools/pages.ts +183 -237
- package/src/resources/extensions/browser-tools/tools/refs.ts +193 -507
- package/src/resources/extensions/browser-tools/tools/session.ts +182 -321
- package/src/resources/extensions/browser-tools/tools/state-persistence.ts +94 -172
- package/src/resources/extensions/browser-tools/utils.ts +1 -1
- package/src/resources/extensions/mac-tools/index.ts +19 -34
- package/src/resources/extensions/memory/index.ts +22 -2
- package/src/resources/extensions/shared/interview-ui.ts +108 -15
- package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +61 -0
- package/src/resources/extensions/shared/tests/custom-ui-fallbacks.test.ts +46 -0
- package/src/resources/extensions/slash-commands/extension-manifest.json +2 -2
- package/src/resources/extensions/slash-commands/fast.ts +89 -0
- package/src/resources/extensions/slash-commands/index.ts +2 -0
- package/src/resources/extensions/slash-commands/plan.ts +59 -30
- package/src/resources/extensions/slash-commands/tools.ts +43 -4
- package/src/resources/extensions/subagent/agent-switcher-component.ts +228 -0
- package/src/resources/extensions/subagent/agent-switcher-model.ts +160 -0
- package/src/resources/extensions/subagent/background-job-manager.ts +57 -6
- package/src/resources/extensions/subagent/background-runner.ts +8 -0
- package/src/resources/extensions/subagent/background-types.ts +4 -0
- package/src/resources/extensions/subagent/in-process-runner.ts +534 -0
- package/src/resources/extensions/subagent/index.ts +998 -493
- package/src/resources/extensions/subagent/launch-helpers.ts +15 -4
- package/src/resources/extensions/subagent/legacy-runner.ts +607 -0
- package/src/resources/extensions/voice/index.ts +308 -238
- package/src/resources/extensions/voice/push-to-talk.ts +42 -0
- package/src/resources/extensions/voice/tests/push-to-talk.test.ts +109 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tBox,\n\tContainer,\n\tgetCapabilities,\n\tImage,\n\timageFallback,\n\tSpacer,\n\tText,\n\ttype TUI,\n\ttruncateToWidth,\n} from \"@gsd/pi-tui\";\nimport stripAnsi from \"strip-ansi\";\nimport type { ToolDefinition } from \"../../../core/extensions/types.js\";\nimport { computeEditDiff, type EditDiffError, type EditDiffResult } from \"../../../core/tools/edit-diff.js\";\nimport { allTools } from \"../../../core/tools/index.js\";\nimport { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from \"../../../core/tools/truncate.js\";\nimport { convertToPng } from \"../../../utils/image-convert.js\";\nimport { sanitizeBinaryOutput } from \"../../../utils/shell.js\";\nimport { renderTerminalText } from \"../../../utils/terminal-serializer.js\";\nimport { getLanguageFromPath, highlightCode, theme } from \"../theme/theme.js\";\nimport { type EditorScheme, editorLink } from \"../utils/editor-link.js\";\nimport { shortenPath } from \"../utils/shorten-path.js\";\nimport { renderDiff } from \"./diff.js\";\nimport { keyHint } from \"./keybinding-hints.js\";\nimport { truncateToVisualLines } from \"./visual-truncate.js\";\n\n// Preview line limit for bash when not expanded\nconst BASH_PREVIEW_LINES = 5;\n// Flash interval for tool status spinner (ms)\nconst SPINNER_INTERVAL_MS = 150;\n\n// Spinner animation frames\nconst SPINNER_FRAMES = [\"◯\", \"◔\", \"◑\", \"◕\", \"●\"];\nlet spinnerFrame = 0;\n\n// During partial write tool-call streaming, re-highlight the first N lines fully\n// to keep multiline tokenization mostly correct without re-highlighting the full file.\nconst WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;\n\n/**\n * Replace tabs with spaces for consistent rendering\n */\nfunction replaceTabs(text: string): string {\n\treturn text.replace(/\\t/g, \" \");\n}\n\n/**\n * Normalize control characters for terminal preview rendering.\n * Keep tool arguments unchanged, sanitize only display text.\n */\nfunction normalizeDisplayText(text: string): string {\n\treturn text.replace(/\\r/g, \"\");\n}\n\n/** Safely coerce value to string for display. Returns null if invalid type. */\nfunction str(value: unknown): string | null {\n\tif (typeof value === \"string\") return value;\n\tif (value == null) return \"\";\n\treturn null; // Invalid type\n}\n\n/**\n * Returns true if the bash output indicates a privilege escalation failure\n * that the agent process cannot resolve (sudo blocked, EPERM on root-owned files, etc.).\n */\nfunction isBashPrivilegeError(output: string, command: string): boolean {\n\t// Already handled by OS sandbox-policy path\n\tif (/sandbox blocked this operation/i.test(output)) return false;\n\t// sudo explicitly rejected by OS\n\tif (/sudo.*operation not permitted/i.test(output)) return true;\n\tif (/command exited with code 126/i.test(output) && /sudo/i.test(output)) return true;\n\t// npm / other tools hitting root-owned cache files\n\tif (/cache folder contains root-owned files/i.test(output)) return true;\n\t// Generic EPERM when command involves sudo\n\tif (/EPERM|operation not permitted/i.test(output) && /sudo/i.test(command)) return true;\n\t// Permission denied when command involves sudo\n\tif (/permission denied/i.test(output) && /sudo/i.test(command)) return true;\n\treturn false;\n}\n\nexport interface ToolExecutionOptions {\n\tshowImages?: boolean; // default: true (only used if terminal supports images)\n\trenderMode?: \"minimal\" | \"normal\";\n\teditorScheme?: EditorScheme; // URI scheme for Cmd+click file links (default: \"auto\")\n}\n\ntype WriteHighlightCache = {\n\trawPath: string | null;\n\tlang: string;\n\trawContent: string;\n\tnormalizedLines: string[];\n\thighlightedLines: string[];\n};\n\n/**\n * Component that renders a tool call with its result (updateable)\n */\nexport class ToolExecutionComponent extends Container {\n\tprivate contentBox: Box; // Used for custom tools and bash visual truncation\n\tprivate contentText: Text; // For built-in tools (with its own padding/bg)\n\tprivate imageComponents: Image[] = [];\n\tprivate imageSpacers: Spacer[] = [];\n\tprivate toolName: string;\n\tprivate args: any;\n\tprivate expanded = false;\n\tprivate renderMode: \"minimal\" | \"normal\";\n\tprivate showImages: boolean;\n\tprivate editorScheme: EditorScheme;\n\tprivate isPartial = true;\n\tprivate toolDefinition?: ToolDefinition;\n\tprivate ui: TUI;\n\tprivate cwd: string;\n\tprivate result?: {\n\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\tisError: boolean;\n\t\tdetails?: any;\n\t};\n\t// Cached edit diff preview (computed when args arrive, before tool executes)\n\tprivate editDiffPreview?: EditDiffResult | EditDiffError;\n\tprivate editDiffArgsKey?: string; // Track which args the preview is for\n\t// Cached converted images for Kitty protocol (which requires PNG), keyed by index\n\tprivate convertedImages: Map<number, { data: string; mimeType: string }> = new Map();\n\t// Incremental syntax highlighting cache for write tool call args\n\tprivate writeHighlightCache?: WriteHighlightCache;\n\t// When true, this component intentionally renders no lines\n\tprivate hideComponent = false;\n\n\t// Tool status spinner state\n\tprivate spinnerTimer: NodeJS.Timeout | null = null;\n\tprivate spinnerFrame = 0;\n\n\tconstructor(\n\t\ttoolName: string,\n\t\targs: any,\n\t\toptions: ToolExecutionOptions = {},\n\t\ttoolDefinition: ToolDefinition | undefined,\n\t\tui: TUI,\n\t\tcwd: string = process.cwd(),\n\t) {\n\t\tsuper();\n\t\tthis.toolName = toolName;\n\t\tthis.args = args;\n\t\tthis.showImages = options.showImages ?? true;\n\t\tthis.renderMode = options.renderMode ?? \"normal\";\n\t\tthis.editorScheme = options.editorScheme ?? \"auto\";\n\t\tthis.toolDefinition = toolDefinition;\n\t\tthis.ui = ui;\n\t\tthis.cwd = cwd;\n\n\t\t// Always create both - contentBox for custom tools/bash, contentText for other built-ins\n\t\tthis.contentBox = new Box(1, 0, (text: string) => theme.bg(\"toolPendingBg\", text));\n\t\tthis.contentText = new Text(\"\", 1, 0, (text: string) => theme.bg(\"toolPendingBg\", text));\n\n\t\t// Use contentBox for bash (visual truncation) or custom tools with custom renderers\n\t\t// Use contentText for built-in tools (including overrides without custom renderers)\n\t\tif (toolName === \"bash\" || (toolDefinition && !this.shouldUseBuiltInRenderer())) {\n\t\t\tthis.addChild(this.contentBox);\n\t\t} else {\n\t\t\tthis.addChild(this.contentText);\n\t\t}\n\n\t\tthis.updateDisplay();\n\t}\n\n\t/**\n\t * Check if we should use built-in rendering for this tool.\n\t * Returns true if the tool name is a built-in AND either there's no toolDefinition\n\t * or the toolDefinition doesn't provide custom renderers.\n\t */\n\tprivate shouldUseBuiltInRenderer(): boolean {\n\t\tconst isBuiltInName = this.toolName in allTools;\n\t\tconst hasCustomRenderers = this.toolDefinition?.renderCall || this.toolDefinition?.renderResult;\n\t\treturn isBuiltInName && !hasCustomRenderers;\n\t}\n\n\tupdateArgs(args: any): void {\n\t\tthis.args = args;\n\t\tif (this.toolName === \"write\" && this.isPartial) {\n\t\t\tthis.updateWriteHighlightCacheIncremental();\n\t\t}\n\t\tthis.updateDisplay();\n\t}\n\n\tprivate highlightSingleLine(line: string, lang: string): string {\n\t\tconst highlighted = highlightCode(line, lang);\n\t\treturn highlighted[0] ?? \"\";\n\t}\n\n\tprivate refreshWriteHighlightPrefix(cache: WriteHighlightCache): void {\n\t\tconst prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);\n\t\tif (prefixCount === 0) return;\n\n\t\tconst prefixSource = cache.normalizedLines.slice(0, prefixCount).join(\"\\n\");\n\t\tconst prefixHighlighted = highlightCode(prefixSource, cache.lang);\n\t\tfor (let i = 0; i < prefixCount; i++) {\n\t\t\tcache.highlightedLines[i] =\n\t\t\t\tprefixHighlighted[i] ?? this.highlightSingleLine(cache.normalizedLines[i] ?? \"\", cache.lang);\n\t\t}\n\t}\n\n\tprivate rebuildWriteHighlightCacheFull(rawPath: string | null, fileContent: string): void {\n\t\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\t\tif (!lang) {\n\t\t\tthis.writeHighlightCache = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tconst displayContent = normalizeDisplayText(fileContent);\n\t\tconst normalized = replaceTabs(displayContent);\n\t\tthis.writeHighlightCache = {\n\t\t\trawPath,\n\t\t\tlang,\n\t\t\trawContent: fileContent,\n\t\t\tnormalizedLines: normalized.split(\"\\n\"),\n\t\t\thighlightedLines: highlightCode(normalized, lang),\n\t\t};\n\t}\n\n\tprivate updateWriteHighlightCacheIncremental(): void {\n\t\tconst rawPath = str(this.args?.file_path ?? this.args?.path);\n\t\tconst fileContent = str(this.args?.content);\n\t\tif (rawPath === null || fileContent === null) {\n\t\t\tthis.writeHighlightCache = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\t\tif (!lang) {\n\t\t\tthis.writeHighlightCache = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.writeHighlightCache) {\n\t\t\tthis.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\t\t\treturn;\n\t\t}\n\n\t\tconst cache = this.writeHighlightCache;\n\t\tif (cache.lang !== lang || cache.rawPath !== rawPath) {\n\t\t\tthis.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!fileContent.startsWith(cache.rawContent)) {\n\t\t\tthis.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\t\t\treturn;\n\t\t}\n\n\t\tif (fileContent.length === cache.rawContent.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst deltaRaw = fileContent.slice(cache.rawContent.length);\n\t\tconst deltaDisplay = normalizeDisplayText(deltaRaw);\n\t\tconst deltaNormalized = replaceTabs(deltaDisplay);\n\t\tcache.rawContent = fileContent;\n\n\t\tif (cache.normalizedLines.length === 0) {\n\t\t\tcache.normalizedLines.push(\"\");\n\t\t\tcache.highlightedLines.push(\"\");\n\t\t}\n\n\t\tconst segments = deltaNormalized.split(\"\\n\");\n\t\tconst lastIndex = cache.normalizedLines.length - 1;\n\t\tcache.normalizedLines[lastIndex] += segments[0];\n\t\tcache.highlightedLines[lastIndex] = this.highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);\n\n\t\tfor (let i = 1; i < segments.length; i++) {\n\t\t\tcache.normalizedLines.push(segments[i]);\n\t\t\tcache.highlightedLines.push(this.highlightSingleLine(segments[i], cache.lang));\n\t\t}\n\n\t\tthis.refreshWriteHighlightPrefix(cache);\n\t}\n\n\t/**\n\t * Signal that args are complete (tool is about to execute).\n\t * This triggers diff computation for edit tool.\n\t */\n\tsetArgsComplete(): void {\n\t\tif (this.toolName === \"write\") {\n\t\t\tconst rawPath = str(this.args?.file_path ?? this.args?.path);\n\t\t\tconst fileContent = str(this.args?.content);\n\t\t\tif (rawPath !== null && fileContent !== null) {\n\t\t\t\tthis.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\t\t\t}\n\t\t}\n\t\tthis.maybeComputeEditDiff();\n\t}\n\n\t/**\n\t * Compute edit diff preview when we have complete args.\n\t * This runs async and updates display when done.\n\t */\n\tprivate maybeComputeEditDiff(): void {\n\t\tif (this.toolName !== \"edit\") return;\n\n\t\tconst path = this.args?.path;\n\t\tconst oldText = this.args?.oldText;\n\t\tconst newText = this.args?.newText;\n\n\t\t// Need all three params to compute diff\n\t\tif (!path || oldText === undefined || newText === undefined) return;\n\n\t\t// Create a key to track which args this computation is for\n\t\tconst argsKey = JSON.stringify({ path, oldText, newText });\n\n\t\t// Skip if we already computed for these exact args\n\t\tif (this.editDiffArgsKey === argsKey) return;\n\n\t\tthis.editDiffArgsKey = argsKey;\n\n\t\t// Compute diff async\n\t\tcomputeEditDiff(path, oldText, newText, this.cwd).then((result) => {\n\t\t\t// Only update if args haven't changed since we started\n\t\t\tif (this.editDiffArgsKey === argsKey) {\n\t\t\t\tthis.editDiffPreview = result;\n\t\t\t\tthis.updateDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}\n\t\t});\n\t}\n\n\tupdateResult(\n\t\tresult: {\n\t\t\tcontent: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\t\tdetails?: any;\n\t\t\tisError: boolean;\n\t\t},\n\t\tisPartial = false,\n\t): void {\n\t\tthis.result = result;\n\t\tthis.isPartial = isPartial;\n\n\t\tif (this.toolName === \"write\" && !isPartial) {\n\t\t\tconst rawPath = str(this.args?.file_path ?? this.args?.path);\n\t\t\tconst fileContent = str(this.args?.content);\n\t\t\tif (rawPath !== null && fileContent !== null) {\n\t\t\t\tthis.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n\t\t\t}\n\t\t}\n\t\tthis.updateDisplay();\n\t\t// Convert non-PNG images to PNG for Kitty protocol (async)\n\t\tthis.maybeConvertImagesForKitty();\n\t}\n\n\t/**\n\t * Convert non-PNG images to PNG for Kitty graphics protocol.\n\t * Kitty requires PNG format (f=100), so JPEG/GIF/WebP won't display.\n\t */\n\tprivate maybeConvertImagesForKitty(): void {\n\t\tconst caps = getCapabilities();\n\t\t// Only needed for Kitty protocol\n\t\tif (caps.images !== \"kitty\") return;\n\t\tif (!this.result) return;\n\n\t\tconst imageBlocks = this.result.content?.filter((c: any) => c.type === \"image\") || [];\n\n\t\tfor (let i = 0; i < imageBlocks.length; i++) {\n\t\t\tconst img = imageBlocks[i];\n\t\t\tif (!img.data || !img.mimeType) continue;\n\t\t\t// Skip if already PNG or already converted\n\t\t\tif (img.mimeType === \"image/png\") continue;\n\t\t\tif (this.convertedImages.has(i)) continue;\n\n\t\t\t// Convert async\n\t\t\tconst index = i;\n\t\t\tconvertToPng(img.data, img.mimeType).then((converted) => {\n\t\t\t\tif (converted) {\n\t\t\t\t\tthis.convertedImages.set(index, converted);\n\t\t\t\t\tthis.updateDisplay();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tsetExpanded(expanded: boolean): void {\n\t\tthis.expanded = expanded;\n\t\tthis.updateDisplay();\n\t}\n\n\tsetRenderMode(mode: \"minimal\" | \"normal\"): void {\n\t\tif (this.renderMode !== mode) {\n\t\t\tthis.renderMode = mode;\n\t\t\tthis.updateDisplay();\n\t\t}\n\t}\n\n\tsetEditorScheme(scheme: EditorScheme): void {\n\t\tthis.editorScheme = scheme;\n\t\tthis.updateDisplay();\n\t}\n\n\tsetShowImages(show: boolean): void {\n\t\tthis.showImages = show;\n\t\tthis.updateDisplay();\n\t}\n\n\tdispose(): void {\n\t\tif (this.spinnerTimer) {\n\t\t\tclearInterval(this.spinnerTimer);\n\t\t\tthis.spinnerTimer = null;\n\t\t}\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t\tthis.updateDisplay();\n\t}\n\n\toverride render(width: number): string[] {\n\t\tif (this.hideComponent) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [...super.render(width), \"\"];\n\t}\n\n\tprivate updateDisplay(): void {\n\t\t// Status indicator with circle\n\t\tlet statusIndicator = \"\";\n\t\tlet statusColor = \"\";\n\n\t\tif (this.isPartial) {\n\t\t\t// Loading spinner - start timer on first partial render\n\t\t\tif (!this.spinnerTimer) {\n\t\t\t\tthis.spinnerTimer = setInterval(() => {\n\t\t\t\t\tthis.spinnerFrame = (this.spinnerFrame + 1) % SPINNER_FRAMES.length;\n\t\t\t\t\tthis.updateDisplay();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}, SPINNER_INTERVAL_MS);\n\t\t\t}\n\t\t\tstatusIndicator = SPINNER_FRAMES[this.spinnerFrame];\n\t\t} else {\n\t\t\t// Stop spinner when no longer partial\n\t\t\tif (this.spinnerTimer) {\n\t\t\t\tclearInterval(this.spinnerTimer);\n\t\t\t\tthis.spinnerTimer = null;\n\t\t\t}\n\t\t\tif (this.result?.isError) {\n\t\t\t\t// Failed - red circle\n\t\t\t\tstatusIndicator = theme.fg(\"error\", \"●\");\n\t\t\t\tstatusColor = \"error\";\n\t\t\t} else {\n\t\t\t\t// Success - green circle\n\t\t\t\tstatusIndicator = theme.fg(\"success\", \"●\");\n\t\t\t\tstatusColor = \"success\";\n\t\t\t}\n\t\t}\n\n\t\tconst useBuiltInRenderer = this.shouldUseBuiltInRenderer();\n\t\tlet customRendererHasContent = false;\n\t\tthis.hideComponent = false;\n\n\t\t// Use built-in rendering for built-in tools (or overrides without custom renderers)\n\t\tif (useBuiltInRenderer) {\n\t\t\tif (this.toolName === \"bash\") {\n\t\t\t\t// Bash uses Box with visual line truncation - no background\n\t\t\t\tthis.contentBox.setBgFn((text: string) => text);\n\t\t\t\tthis.contentBox.clear();\n\t\t\t\tthis.renderBashContent(statusIndicator);\n\t\t\t} else {\n\t\t\t\t// Other built-in tools: use Text directly with caching - no background\n\t\t\t\tthis.contentText.setCustomBgFn((text: string) => text);\n\t\t\t\tthis.contentText.setText(this.formatToolExecution(statusIndicator));\n\t\t\t}\n\t\t} else if (this.toolDefinition) {\n\t\t\t// Custom tools use Box for flexible component rendering - no background\n\t\t\tthis.contentBox.setBgFn((text: string) => text);\n\t\t\tthis.contentBox.clear();\n\n\t\t\t// Render call component\n\t\t\tif (this.toolDefinition.renderCall) {\n\t\t\t\ttry {\n\t\t\t\t\tconst callComponent = this.toolDefinition.renderCall(this.args, theme, { statusIndicator });\n\t\t\t\t\tif (callComponent !== undefined) {\n\t\t\t\t\t\tthis.contentBox.addChild(callComponent);\n\t\t\t\t\t\tcustomRendererHasContent = true;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Fall back to default on error\n\t\t\t\t\tthis.contentBox.addChild(new Text(theme.fg(\"toolTitle\", theme.bold(this.toolName)), 0, 0));\n\t\t\t\t\tcustomRendererHasContent = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No custom renderCall, show tool name\n\t\t\t\tthis.contentBox.addChild(new Text(theme.fg(\"toolTitle\", theme.bold(this.toolName)), 0, 0));\n\t\t\t\tcustomRendererHasContent = true;\n\t\t\t}\n\n\t\t\t// Render result component if we have a result\n\t\t\tif (this.result && this.toolDefinition.renderResult) {\n\t\t\t\ttry {\n\t\t\t\t\tif (this.shouldHideCollapsedPreview()) {\n\t\t\t\t\t\tconst output = this.getTextOutput();\n\t\t\t\t\t\tconst hasDetails = output.trim().length > 0 || this.imageComponents.length > 0 || this.result.details !== undefined;\n\t\t\t\t\t\tconst collapsedHint = this.collapsedHintWithPrefix(\"\\n\");\n\t\t\t\t\t\tif (hasDetails && collapsedHint) {\n\t\t\t\t\t\t\tthis.contentBox.addChild(new Text(collapsedHint, 0, 0));\n\t\t\t\t\t\t\tcustomRendererHasContent = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst resultComponent = this.toolDefinition.renderResult(\n\t\t\t\t\t\t\t{ content: this.result.content as any, details: this.result.details },\n\t\t\t\t\t\t\t{ expanded: this.expanded, isPartial: this.isPartial },\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (resultComponent !== undefined) {\n\t\t\t\t\t\t\tthis.contentBox.addChild(resultComponent);\n\t\t\t\t\t\t\tcustomRendererHasContent = true;\n\t\t\t\t\t\t\t// bg_shell: show /bg hint after start/list/digest actions\n\t\t\t\t\t\t\tif (this.toolName === 'bg_shell' && this.result && !this.isPartial) {\n\t\t\t\t\t\t\t\tconst details = this.result.details as Record<string, unknown> | undefined;\n\t\t\t\t\t\t\t\tconst action = details?.action as string | undefined;\n\t\t\t\t\t\t\t\tif (action === 'start' || action === 'list' || action === 'digest') {\n\t\t\t\t\t\t\t\t\tthis.contentBox.addChild(new Text(\n\t\t\t\t\t\t\t\t\t\t'\\n' + theme.fg('muted', 'Tip: run /bg to manage background processes'),\n\t\t\t\t\t\t\t\t\t\t0, 0,\n\t\t\t\t\t\t\t\t\t));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Fall back to showing raw output on error\n\t\t\t\t\tconst output = this.getTextOutput();\n\t\t\t\t\tif (output) {\n\t\t\t\t\t\tthis.contentBox.addChild(new Text(theme.fg(\"toolOutput\", output), 0, 0));\n\t\t\t\t\t\tcustomRendererHasContent = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (this.result) {\n\t\t\t\t// Has result but no custom renderResult\n\t\t\t\tconst output = this.getTextOutput();\n\t\t\t\tif (output) {\n\t\t\t\t\tif (this.shouldHideCollapsedPreview()) {\n\t\t\t\t\t\tconst collapsedHint = this.collapsedHintWithPrefix(\"\\n\");\n\t\t\t\t\t\tif (collapsedHint) {\n\t\t\t\t\t\t\tthis.contentBox.addChild(new Text(collapsedHint, 0, 0));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.contentBox.addChild(new Text(theme.fg(\"toolOutput\", output), 0, 0));\n\t\t\t\t\t}\n\t\t\t\t\tcustomRendererHasContent = true;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Unknown tool with no registered definition - show generic fallback\n\t\t\tthis.contentText.setCustomBgFn((text: string) => text);\n\t\t\tthis.contentText.setText(this.formatToolExecution(statusIndicator));\n\t\t}\n\n\t\t// Handle images (same for both custom and built-in)\n\t\tfor (const img of this.imageComponents) {\n\t\t\tthis.removeChild(img);\n\t\t}\n\t\tthis.imageComponents = [];\n\t\tfor (const spacer of this.imageSpacers) {\n\t\t\tthis.removeChild(spacer);\n\t\t}\n\t\tthis.imageSpacers = [];\n\n\t\tif (this.result) {\n\t\t\tconst imageBlocks = this.result.content?.filter((c: any) => c.type === \"image\") || [];\n\t\t\tconst caps = getCapabilities();\n\n\t\t\tfor (let i = 0; i < imageBlocks.length; i++) {\n\t\t\t\tconst img = imageBlocks[i];\n\t\t\t\tif (caps.images && this.showImages && img.data && img.mimeType) {\n\t\t\t\t\t// Use converted PNG for Kitty protocol if available\n\t\t\t\t\tconst converted = this.convertedImages.get(i);\n\t\t\t\t\tconst imageData = converted?.data ?? img.data;\n\t\t\t\t\tconst imageMimeType = converted?.mimeType ?? img.mimeType;\n\n\t\t\t\t\t// For Kitty, skip non-PNG images that haven't been converted yet\n\t\t\t\t\tif (caps.images === \"kitty\" && imageMimeType !== \"image/png\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst spacer = new Spacer(1);\n\t\t\t\t\tthis.addChild(spacer);\n\t\t\t\t\tthis.imageSpacers.push(spacer);\n\t\t\t\t\tconst imageComponent = new Image(\n\t\t\t\t\t\timageData,\n\t\t\t\t\t\timageMimeType,\n\t\t\t\t\t\t{ fallbackColor: (s: string) => theme.fg(\"toolOutput\", s) },\n\t\t\t\t\t\t{ maxWidthCells: 60 },\n\t\t\t\t\t);\n\t\t\t\t\timageComponent.setOnDimensionsResolved(() => {\n\t\t\t\t\t\tthis.updateDisplay();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t});\n\t\t\t\t\tthis.imageComponents.push(imageComponent);\n\t\t\t\t\tthis.addChild(imageComponent);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!useBuiltInRenderer && this.toolDefinition) {\n\t\t\tthis.hideComponent = !customRendererHasContent && this.imageComponents.length === 0;\n\t\t}\n\t}\n\n\t/**\n\t * Render bash content using visual line truncation (like bash-execution.ts)\n\t */\n\tprivate renderBashContent(statusIndicator: string): void {\n\t\tconst command = str(this.args?.command);\n\t\tconst timeout = this.args?.timeout as number | undefined;\n\t\tconst body = new Container();\n\n\t\tthis.contentBox.addChild(body);\n\n\t\tconst timeoutSuffix = timeout ? theme.fg(\"muted\", ` (timeout ${timeout}s)`) : \"\";\n\t\tconst sandboxBadge = this.result?.details?.sandboxed ? ` ${theme.fg(\"success\", \"[sandboxed]\")}` : \"\";\n\t\tconst toolLabel = theme.fg(\"toolTitle\", theme.bold(\"bash\"));\n\t\tconst shellPrompt = theme.fg(\"muted\", \"$ \");\n\n\t\t// Always show only the first meaningful non-comment line in the header.\n\t\t// The full command is shown below the header when expanded.\n\t\tlet commandDisplay: string;\n\t\tlet commandLines: string[] = [];\n\t\tlet isMultiLine = false;\n\t\tif (command === null) {\n\t\t\tcommandDisplay = theme.fg(\"error\", \"[invalid arg]\");\n\t\t} else if (!command) {\n\t\t\tcommandDisplay = theme.fg(\"toolOutput\", \"...\");\n\t\t} else {\n\t\t\tcommandLines = command.split(\"\\n\");\n\t\t\tisMultiLine = commandLines.length > 1;\n\t\t\tconst firstMeaningful = commandLines.find((l) => l.trim() && !l.trim().startsWith(\"#\")) ?? commandLines[0];\n\t\t\tconst suffix = isMultiLine ? theme.fg(\"muted\", \" …\") : \"\";\n\t\t\tcommandDisplay = theme.fg(\"toolOutput\", firstMeaningful ?? \"\") + suffix;\n\t\t}\n\n\t\tbody.addChild(new Text(`${statusIndicator} ${toolLabel} ${shellPrompt}${commandDisplay}${timeoutSuffix}${sandboxBadge}`, 0, 0));\n\n\t\t// When expanded, show the full command below the header (only for multi-line commands)\n\t\tif (this.expanded && isMultiLine) {\n\t\t\tconst fullCommand = commandLines.map((line) => theme.fg(\"toolOutput\", line)).join(\"\\n\");\n\t\t\tbody.addChild(new Text(`\\n${fullCommand}`, 0, 0));\n\t\t}\n\n\t\tif (this.result) {\n\t\t\tconst output = this.getTextOutput().trim();\n\n\t\t\tif (output) {\n\t\t\t\tconst styledOutput = output\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.map((line) => theme.fg(\"toolOutput\", line))\n\t\t\t\t\t.join(\"\\n\");\n\n\t\t\t\tif (this.expanded) {\n\t\t\t\t\tbody.addChild(new Text(`\\n${styledOutput}`, 0, 0));\n\t\t\t\t} else if (this.renderMode === \"minimal\") {\n\t\t\t\t\tconst collapsedHint = this.collapsedHintWithPrefix(\"\\n\");\n\t\t\t\t\tif (collapsedHint) {\n\t\t\t\t\t\tbody.addChild(new Text(collapsedHint, 1, 0));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet cachedWidth: number | undefined;\n\t\t\t\t\tlet cachedLines: string[] | undefined;\n\t\t\t\t\tlet cachedSkipped: number | undefined;\n\n\t\t\t\t\tbody.addChild({\n\t\t\t\t\t\trender: (width: number) => {\n\t\t\t\t\t\t\tif (cachedLines === undefined || cachedWidth !== width) {\n\t\t\t\t\t\t\t\tconst result = truncateToVisualLines(styledOutput, BASH_PREVIEW_LINES, Math.max(1, width - 1));\n\t\t\t\t\t\t\t\tcachedLines = result.visualLines.map((line) => ` ${line}`);\n\t\t\t\t\t\t\t\tcachedSkipped = result.skippedCount;\n\t\t\t\t\t\t\t\tcachedWidth = width;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cachedSkipped && cachedSkipped > 0) {\n\t\t\t\t\t\t\t\tconst hint = theme.fg(\"muted\", `... (${cachedSkipped} earlier lines)`);\n\t\t\t\t\t\t\t\treturn [\"\", truncateToWidth(` ${hint}`, width, \"...\"), ...cachedLines];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [\"\", ...cachedLines];\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinvalidate: () => {\n\t\t\t\t\t\t\tcachedWidth = undefined;\n\t\t\t\t\t\t\tcachedLines = undefined;\n\t\t\t\t\t\t\tcachedSkipped = undefined;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst truncation = this.result.details?.truncation;\n\t\t\tconst fullOutputPath = this.result.details?.fullOutputPath;\n\t\t\tif (truncation?.truncated || fullOutputPath) {\n\t\t\t\tconst warnings: string[] = [];\n\t\t\t\tif (fullOutputPath) {\n\t\t\t\t\twarnings.push(`Full output: ${fullOutputPath}`);\n\t\t\t\t}\n\t\t\t\tif (truncation?.truncated) {\n\t\t\t\t\tif (truncation.truncatedBy === \"lines\") {\n\t\t\t\t\t\twarnings.push(`Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\twarnings.push(\n\t\t\t\t\t\t\t`Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbody.addChild(new Text(`\\n${theme.fg(\"warning\", `[${warnings.join(\". \")}]`)}`, 0, 0));\n\t\t\t}\n\n\t\t\t// Privilege escalation error — agent cannot sudo, show manual step callout\n\t\t\tif (this.result.isError && command !== null && isBashPrivilegeError(output, command)) {\n\t\t\t\tbody.addChild(\n\t\t\t\t\tnew Text(\n\t\t\t\t\t\t`\\n${theme.fg(\"warning\", \"⚠ This command requires elevated privileges the agent cannot use.\")}\\n${theme.fg(\"muted\", `Run it manually in your terminal:\\n ${command}`)}`,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getTextOutput(): string {\n\t\tif (!this.result) return \"\";\n\n\t\tconst textBlocks = this.result.content?.filter((c: any) => c.type === \"text\") || [];\n\t\tconst imageBlocks = this.result.content?.filter((c: any) => c.type === \"image\") || [];\n\n\tlet output = textBlocks\n\t\t\t.map((c: any) => {\n\t\t\t\t// Use sanitizeBinaryOutput to handle binary data that crashes string-width\n\t\t\t\treturn sanitizeBinaryOutput(c.text || \"\");\n\t\t\t})\n\t\t\t.join(\"\\n\");\n\n\t\tif (this.toolName === \"bash\") {\n\t\t\toutput = renderTerminalText(output);\n\t\t} else {\n\t\t\toutput = output.replace(/\\r/g, \"\");\n\t\t\toutput = stripAnsi(output);\n\t\t}\n\n\t\tconst caps = getCapabilities();\n\t\tif (imageBlocks.length > 0 && (!caps.images || !this.showImages)) {\n\t\t\tconst imageIndicators = imageBlocks\n\t\t\t\t.map((img: any) => {\n\t\t\t\t\treturn imageFallback(img.mimeType);\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\");\n\t\t\toutput = output ? `${output}\\n${imageIndicators}` : imageIndicators;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tprivate shouldHideCollapsedPreview(): boolean {\n\t\t// Always hide preview for read tool when not expanded (like Claude Code)\n\t\t// For other tools, only hide in minimal mode without errors\n\t\tif (this.toolName === \"read\") {\n\t\t\treturn !this.expanded && !this.result?.isError;\n\t\t}\n\t\treturn !this.expanded && this.renderMode === \"minimal\" && !this.result?.isError;\n\t}\n\n\tprivate collapsedExpandHint(_label?: string): string {\n\t\treturn \"\"; // hint is shown in editor bottom border instead\n\t}\n\n\tprivate collapsedHintWithPrefix(prefix = \"\\n\\n\"): string {\n\t\tconst hint = this.collapsedExpandHint();\n\t\treturn hint ? `${prefix}${hint}` : \"\";\n\t}\n\n\tprivate collapsedFirstLine(output: string): string | undefined {\n\t\tconst first = output.split(\"\\n\").map((line) => line.trim()).find(Boolean);\n\t\treturn first ? truncateToWidth(first, 120, \"...\") : undefined;\n\t}\n\n\tprivate formatToolExecution(statusIndicator: string): string {\n\t\tlet text = \"\";\n\t\tconst invalidArg = theme.fg(\"error\", \"[invalid arg]\");\n\t\tconst hideCollapsedPreview = this.shouldHideCollapsedPreview();\n\n\t\tif (this.toolName === \"read\") {\n\t\t\tconst rawPath = str(this.args?.file_path ?? this.args?.path);\n\t\t\tconst path = rawPath !== null ? shortenPath(rawPath) : null;\n\t\t\tconst offset = this.args?.offset;\n\t\t\tconst limit = this.args?.limit;\n\n\t\t\tconst startLine = offset ?? 1;\n\t\t\tconst endLine = limit !== undefined ? startLine + limit - 1 : \"\";\n\t\t\tconst lineNum = offset !== undefined ? startLine : undefined;\n\n\t\t\tlet styledPath = path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\");\n\t\t\tif (rawPath && path) {\n\t\t\t\tstyledPath = editorLink(rawPath, styledPath, { cwd: this.cwd, line: lineNum, scheme: this.editorScheme });\n\t\t\t}\n\t\t\tlet pathDisplay = styledPath;\n\t\t\tif (offset !== undefined || limit !== undefined) {\n\t\t\t\tpathDisplay += theme.fg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n\t\t\t}\n\n\t\t\ttext = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"read\"))} ${pathDisplay}`;\n\n\t\t\tif (this.result) {\n\t\t\t\tconst rawOutput = this.getTextOutput();\n\t\t\t\t// Strip hashline prefixes (e.g. \"1#BQ:content\") for TUI display\n\t\t\t\tconst output = rawOutput.replace(/^(\\s*)\\d+#[ZPMQVRWSNKTXJBYH]{2}:/gm, \"$1\");\n\t\t\t\tconst rawPath = str(this.args?.file_path ?? this.args?.path);\n\t\t\t\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\t\t\t\tconst lines = lang ? highlightCode(replaceTabs(output), lang) : output.split(\"\\n\");\n\n\t\t\t\tif (hideCollapsedPreview) {\n\t\t\t\t\tif (output.trim()) {\n\t\t\t\t\t\ttext += this.collapsedHintWithPrefix();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst maxLines = this.expanded ? lines.length : 10;\n\t\t\t\t\tconst displayLines = lines.slice(0, maxLines);\n\t\t\t\t\tconst remaining = lines.length - maxLines;\n\n\t\t\t\t\ttext +=\n\t\t\t\t\t\t\"\\n\\n\" +\n\t\t\t\t\t\tdisplayLines\n\t\t\t\t\t\t\t.map((line: string) => (lang ? replaceTabs(line) : theme.fg(\"toolOutput\", replaceTabs(line))))\n\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\tif (remaining > 0) {\n\t\t\t\t\t\ttext += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst truncation = this.result.details?.truncation;\n\t\t\t\tif (truncation?.truncated) {\n\t\t\t\t\tif (truncation.firstLineExceedsLimit) {\n\t\t\t\t\t\ttext +=\n\t\t\t\t\t\t\t\"\\n\" +\n\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t\t\t\t`[First line exceeds ${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit]`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t} else if (truncation.truncatedBy === \"lines\") {\n\t\t\t\t\t\ttext +=\n\t\t\t\t\t\t\t\"\\n\" +\n\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t\t\t\t`[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines (${truncation.maxLines ?? DEFAULT_MAX_LINES} line limit)]`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext +=\n\t\t\t\t\t\t\t\"\\n\" +\n\t\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t\t\t\t`[Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)]`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.toolName === \"write\") {\n\t\t\tconst rawPath = str(this.args?.file_path ?? this.args?.path);\n\t\t\tconst fileContent = str(this.args?.content);\n\t\t\tconst path = rawPath !== null ? shortenPath(rawPath) : null;\n\n\t\t\tlet writePathDisplay = path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\");\n\t\t\tif (rawPath && path) {\n\t\t\t\twritePathDisplay = editorLink(rawPath, writePathDisplay, { cwd: this.cwd, scheme: this.editorScheme });\n\t\t\t}\n\t\t\ttext = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"write\"))} ${writePathDisplay}`;\n\n\t\t\tif (fileContent === null) {\n\t\t\t\ttext += `\\n\\n${theme.fg(\"error\", \"[invalid content arg - expected string]\")}`;\n\t\t\t} else if (fileContent) {\n\t\t\t\tconst lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\n\t\t\t\tlet lines: string[];\n\t\t\t\tif (lang) {\n\t\t\t\t\tconst cache = this.writeHighlightCache;\n\t\t\t\t\tif (cache && cache.lang === lang && cache.rawPath === rawPath && cache.rawContent === fileContent) {\n\t\t\t\t\t\tlines = cache.highlightedLines;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst displayContent = normalizeDisplayText(fileContent);\n\t\t\t\t\t\tconst normalized = replaceTabs(displayContent);\n\t\t\t\t\t\tlines = highlightCode(normalized, lang);\n\t\t\t\t\t\tthis.writeHighlightCache = {\n\t\t\t\t\t\t\trawPath,\n\t\t\t\t\t\t\tlang,\n\t\t\t\t\t\t\trawContent: fileContent,\n\t\t\t\t\t\t\tnormalizedLines: normalized.split(\"\\n\"),\n\t\t\t\t\t\t\thighlightedLines: lines,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlines = normalizeDisplayText(fileContent).split(\"\\n\");\n\t\t\t\t\tthis.writeHighlightCache = undefined;\n\t\t\t\t}\n\n\t\t\t\tif (hideCollapsedPreview) {\n\t\t\t\t\ttext += this.collapsedHintWithPrefix();\n\t\t\t\t} else {\n\t\t\t\t\tconst totalLines = lines.length;\n\t\t\t\t\tconst maxLines = this.expanded ? lines.length : 10;\n\t\t\t\t\tconst displayLines = lines.slice(0, maxLines);\n\t\t\t\t\tconst remaining = lines.length - maxLines;\n\n\t\t\t\t\ttext +=\n\t\t\t\t\t\t\"\\n\\n\" +\n\t\t\t\t\t\tdisplayLines.map((line: string) => (lang ? line : theme.fg(\"toolOutput\", replaceTabs(line)))).join(\"\\n\");\n\t\t\t\t\tif (remaining > 0) {\n\t\t\t\t\t\ttext += theme.fg(\"muted\", `\\n... (${remaining} more lines, ${totalLines} total)`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Show error if tool execution failed\n\t\t\tif (this.result?.isError) {\n\t\t\t\tconst errorText = this.getTextOutput();\n\t\t\t\tif (errorText) {\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"error\", errorText)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.toolName === \"edit\") {\n\t\t\tconst rawPath = str(this.args?.file_path ?? this.args?.path);\n\t\t\tconst path = rawPath !== null ? shortenPath(rawPath) : null;\n\n\t\t\t// Build path display, appending :line if we have diff info\n\t\t\tconst firstChangedLine =\n\t\t\t\t(this.editDiffPreview && \"firstChangedLine\" in this.editDiffPreview\n\t\t\t\t\t? this.editDiffPreview.firstChangedLine\n\t\t\t\t\t: undefined) ||\n\t\t\t\t(this.result && !this.result.isError ? this.result.details?.firstChangedLine : undefined);\n\n\t\t\tlet styledEditPath = path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\");\n\t\t\tif (rawPath && path) {\n\t\t\t\tstyledEditPath = editorLink(rawPath, styledEditPath, {\n\t\t\t\t\tcwd: this.cwd,\n\t\t\t\t\tline: firstChangedLine ?? undefined,\n\t\t\t\t\tscheme: this.editorScheme,\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet pathDisplay = styledEditPath;\n\t\t\tif (firstChangedLine) {\n\t\t\t\tpathDisplay += theme.fg(\"warning\", `:${firstChangedLine}`);\n\t\t\t}\n\n\t\t\ttext = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"edit\"))} ${pathDisplay}`;\n\n\t\t\tif (this.result?.isError) {\n\t\t\t\t// Show error from result\n\t\t\t\tconst errorText = this.getTextOutput();\n\t\t\t\tif (errorText) {\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"error\", errorText)}`;\n\t\t\t\t}\n\t\t\t} else if (this.result?.details?.diff) {\n\t\t\t\t// Tool executed successfully - use the diff from result\n\t\t\t\t// This takes priority over editDiffPreview which may have a stale error\n\t\t\t\t// due to race condition (async preview computed after file was modified)\n\t\t\t\ttext += hideCollapsedPreview\n\t\t\t\t\t? this.collapsedHintWithPrefix()\n\t\t\t\t\t: `\\n\\n${renderDiff(this.result.details.diff, { filePath: rawPath ?? undefined })}`;\n\t\t\t} else if (this.editDiffPreview) {\n\t\t\t\t// Use cached diff preview (before tool executes)\n\t\t\t\tif (\"error\" in this.editDiffPreview) {\n\t\t\t\t\ttext += `\\n\\n${theme.fg(\"error\", this.editDiffPreview.error)}`;\n\t\t\t\t} else if (this.editDiffPreview.diff) {\n\t\t\t\t\ttext += hideCollapsedPreview\n\t\t\t\t\t\t? this.collapsedHintWithPrefix()\n\t\t\t\t\t\t: `\\n\\n${renderDiff(this.editDiffPreview.diff, { filePath: rawPath ?? undefined })}`;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.toolName === \"ls\") {\n\t\t\tconst rawPath = str(this.args?.path);\n\t\t\tconst path = rawPath !== null ? shortenPath(rawPath || \".\") : null;\n\t\t\tconst limit = this.args?.limit;\n\n\t\t\tlet lsPathDisplay = path === null ? invalidArg : theme.fg(\"accent\", path);\n\t\t\tif (path && rawPath !== null) {\n\t\t\t\tlsPathDisplay = editorLink(rawPath || \".\", lsPathDisplay, { cwd: this.cwd, scheme: this.editorScheme });\n\t\t\t}\n\t\t\ttext = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"ls\"))} ${lsPathDisplay}`;\n\t\t\tif (limit !== undefined) {\n\t\t\t\ttext += theme.fg(\"toolOutput\", ` (limit ${limit})`);\n\t\t\t}\n\n\t\t\tif (this.result) {\n\t\t\t\tconst output = this.getTextOutput().trim();\n\t\t\t\tif (output) {\n\t\t\t\t\tif (hideCollapsedPreview) {\n\t\t\t\t\t\ttext += this.collapsedHintWithPrefix();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst lines = output.split(\"\\n\");\n\t\t\t\t\t\tconst maxLines = this.expanded ? lines.length : 20;\n\t\t\t\t\t\tconst displayLines = lines.slice(0, maxLines);\n\t\t\t\t\t\tconst remaining = lines.length - maxLines;\n\n\t\t\t\t\t\ttext += `\\n\\n${displayLines.map((line: string) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n\t\t\t\t\t\tif (remaining > 0) {\n\t\t\t\t\t\t\ttext += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst entryLimit = this.result.details?.entryLimitReached;\n\t\t\t\tconst truncation = this.result.details?.truncation;\n\t\t\t\tif (entryLimit || truncation?.truncated) {\n\t\t\t\t\tconst warnings: string[] = [];\n\t\t\t\t\tif (entryLimit) {\n\t\t\t\t\t\twarnings.push(`${entryLimit} entries limit`);\n\t\t\t\t\t}\n\t\t\t\t\tif (truncation?.truncated) {\n\t\t\t\t\t\twarnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);\n\t\t\t\t\t}\n\t\t\t\t\ttext += `\\n${theme.fg(\"warning\", `[Truncated: ${warnings.join(\", \")}]`)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.toolName === \"find\") {\n\t\t\tconst pattern = str(this.args?.pattern);\n\t\t\tconst rawPath = str(this.args?.path);\n\t\t\tconst path = rawPath !== null ? shortenPath(rawPath || \".\") : null;\n\t\t\tconst limit = this.args?.limit;\n\n\t\t\tlet findPathDisplay = path === null ? invalidArg : path;\n\t\t\tif (path && rawPath !== null) {\n\t\t\t\tfindPathDisplay = editorLink(rawPath || \".\", theme.fg(\"accent\", findPathDisplay), { cwd: this.cwd, scheme: this.editorScheme });\n\t\t\t} else {\n\t\t\t\tfindPathDisplay = theme.fg(\"accent\", findPathDisplay);\n\t\t\t}\n\t\t\ttext =\n\t\t\t\t`${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"find\"))}` +\n\t\t\t\t\" \" +\n\t\t\t\t(pattern === null ? invalidArg : theme.fg(\"accent\", pattern || \"\")) +\n\t\t\t\ttheme.fg(\"toolOutput\", \" in \") +\n\t\t\t\tfindPathDisplay;\n\t\t\tif (limit !== undefined) {\n\t\t\t\ttext += theme.fg(\"toolOutput\", ` (limit ${limit})`);\n\t\t\t}\n\n\t\t\tif (this.result) {\n\t\t\t\tconst output = this.getTextOutput().trim();\n\t\t\t\tif (output) {\n\t\t\t\t\tif (hideCollapsedPreview) {\n\t\t\t\t\t\ttext += this.collapsedHintWithPrefix();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst lines = output.split(\"\\n\");\n\t\t\t\t\t\tconst maxLines = this.expanded ? lines.length : 20;\n\t\t\t\t\t\tconst displayLines = lines.slice(0, maxLines);\n\t\t\t\t\t\tconst remaining = lines.length - maxLines;\n\n\t\t\t\t\t\ttext += `\\n\\n${displayLines.map((line: string) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n\t\t\t\t\t\tif (remaining > 0) {\n\t\t\t\t\t\t\ttext += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst resultLimit = this.result.details?.resultLimitReached;\n\t\t\t\tconst truncation = this.result.details?.truncation;\n\t\t\t\tif (resultLimit || truncation?.truncated) {\n\t\t\t\t\tconst warnings: string[] = [];\n\t\t\t\t\tif (resultLimit) {\n\t\t\t\t\t\twarnings.push(`${resultLimit} results limit`);\n\t\t\t\t\t}\n\t\t\t\t\tif (truncation?.truncated) {\n\t\t\t\t\t\twarnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);\n\t\t\t\t\t}\n\t\t\t\t\ttext += `\\n${theme.fg(\"warning\", `[Truncated: ${warnings.join(\", \")}]`)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.toolName === \"grep\") {\n\t\t\tconst pattern = str(this.args?.pattern);\n\t\t\tconst rawPath = str(this.args?.path);\n\t\t\tconst path = rawPath !== null ? shortenPath(rawPath || \".\") : null;\n\t\t\tconst glob = str(this.args?.glob);\n\t\t\tconst limit = this.args?.limit;\n\n\t\t\tlet grepPathDisplay = path === null ? invalidArg : path;\n\t\t\tif (path && rawPath !== null) {\n\t\t\t\tgrepPathDisplay = editorLink(rawPath || \".\", theme.fg(\"accent\", grepPathDisplay), { cwd: this.cwd, scheme: this.editorScheme });\n\t\t\t} else {\n\t\t\t\tgrepPathDisplay = theme.fg(\"accent\", grepPathDisplay);\n\t\t\t}\n\t\t\ttext =\n\t\t\t\t`${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"grep\"))}` +\n\t\t\t\t\" \" +\n\t\t\t\t(pattern === null ? invalidArg : theme.fg(\"accent\", `/${pattern || \"\"}/`)) +\n\t\t\t\ttheme.fg(\"toolOutput\", \" in \") +\n\t\t\t\tgrepPathDisplay;\n\t\t\tif (glob) {\n\t\t\t\ttext += theme.fg(\"toolOutput\", ` (${glob})`);\n\t\t\t}\n\t\t\tif (limit !== undefined) {\n\t\t\t\ttext += theme.fg(\"toolOutput\", ` limit ${limit}`);\n\t\t\t}\n\n\t\t\tif (this.result) {\n\t\t\t\tconst output = this.getTextOutput().trim();\n\t\t\t\tif (output) {\n\t\t\t\t\tif (hideCollapsedPreview) {\n\t\t\t\t\t\ttext += this.collapsedHintWithPrefix();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst lines = output.split(\"\\n\");\n\t\t\t\t\t\tconst maxLines = this.expanded ? lines.length : 15;\n\t\t\t\t\t\tconst displayLines = lines.slice(0, maxLines);\n\t\t\t\t\t\tconst remaining = lines.length - maxLines;\n\n\t\t\t\t\t\ttext += `\\n\\n${displayLines.map((line: string) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n\t\t\t\t\t\tif (remaining > 0) {\n\t\t\t\t\t\t\ttext += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst matchLimit = this.result.details?.matchLimitReached;\n\t\t\t\tconst truncation = this.result.details?.truncation;\n\t\t\t\tconst linesTruncated = this.result.details?.linesTruncated;\n\t\t\t\tif (matchLimit || truncation?.truncated || linesTruncated) {\n\t\t\t\t\tconst warnings: string[] = [];\n\t\t\t\t\tif (matchLimit) {\n\t\t\t\t\t\twarnings.push(`${matchLimit} matches limit`);\n\t\t\t\t\t}\n\t\t\t\t\tif (truncation?.truncated) {\n\t\t\t\t\t\twarnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);\n\t\t\t\t\t}\n\t\t\t\t\tif (linesTruncated) {\n\t\t\t\t\t\twarnings.push(\"some lines truncated\");\n\t\t\t\t\t}\n\t\t\t\t\ttext += `\\n${theme.fg(\"warning\", `[Truncated: ${warnings.join(\", \")}]`)}`;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.toolName === \"web_search\") {\n\t\t\t// Server-side Anthropic web search\n\t\t\ttext = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"web search\"))}`;\n\n\t\t\tif (process.env.PI_OFFLINE === \"1\") {\n\t\t\t\ttext += \"\\n\\n\" + theme.fg(\"muted\", \"\\u{1F50C} Offline \\u{2014} web search unavailable\");\n\t\t\t} else if (this.result) {\n\t\t\t\tconst output = this.getTextOutput().trim();\n\t\t\t\tif (output) {\n\t\t\t\t\tif (hideCollapsedPreview) {\n\t\t\t\t\t\ttext += this.collapsedHintWithPrefix();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst lines = output.split(\"\\n\");\n\t\t\t\t\t\tconst maxLines = this.expanded ? lines.length : 10;\n\t\t\t\t\t\tconst displayLines = lines.slice(0, maxLines);\n\t\t\t\t\t\tconst remaining = lines.length - maxLines;\n\n\t\t\t\t\t\ttext += `\\n\\n${displayLines.map((line: string) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n\t\t\t\t\t\tif (remaining > 0) {\n\t\t\t\t\t\t\ttext += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (this.toolName === \"lsp\") {\n\t\t\tconst action = this.args?.action as string | undefined;\n\t\t\tconst file = this.args?.file as string | undefined;\n\t\t\tconst line = this.args?.line as number | undefined;\n\t\t\tconst symbol = this.args?.symbol as string | undefined;\n\t\t\tconst query = this.args?.query as string | undefined;\n\t\t\tconst newName = this.args?.new_name as string | undefined;\n\n\t\t\ttext = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"lsp\"))}`;\n\t\t\tif (action) text += ` ${theme.fg(\"accent\", action)}`;\n\t\t\tif (file) {\n\t\t\t\tconst shortFile = shortenPath(file);\n\t\t\t\tlet styledFile = theme.fg(\"muted\", shortFile);\n\t\t\t\tif (file && shortFile) {\n\t\t\t\t\tstyledFile = editorLink(file, styledFile, { cwd: this.cwd, line, scheme: this.editorScheme });\n\t\t\t\t}\n\t\t\t\ttext += ` ${styledFile}`;\n\t\t\t\tif (line !== undefined) text += theme.fg(\"warning\", `:${line}`);\n\t\t\t}\n\t\t\tif (symbol) text += ` ${theme.fg(\"toolOutput\", symbol)}`;\n\t\t\tif (query) text += ` ${theme.fg(\"muted\", `\"${query}\"`)}`;\n\t\t\tif (newName) text += ` → ${theme.fg(\"accent\", newName)}`;\n\n\t\t\tif (this.result) {\n\t\t\t\tconst output = this.getTextOutput().trim();\n\t\t\t\tif (output) {\n\t\t\t\t\tif (hideCollapsedPreview) {\n\t\t\t\t\t\ttext += this.collapsedHintWithPrefix();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst lines = output.split(\"\\n\");\n\t\t\t\t\t\tconst maxLines = this.expanded ? lines.length : 10;\n\t\t\t\t\t\tconst displayLines = lines.slice(0, maxLines);\n\t\t\t\t\t\tconst remaining = lines.length - maxLines;\n\t\t\t\t\t\ttext += `\\n\\n${displayLines.map((l: string) => theme.fg(\"toolOutput\", l)).join(\"\\n\")}`;\n\t\t\t\t\t\tif (remaining > 0) text += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Generic tool (shouldn't reach here for custom tools)\n\t\t\ttext = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(this.toolName))}`;\n\n\t\t\tconst content = JSON.stringify(this.args, null, 2);\n\t\t\ttext += hideCollapsedPreview ? this.collapsedHintWithPrefix() : `\\n\\n${content}`;\n\t\t\tconst output = this.getTextOutput();\n\t\t\tif (output && !hideCollapsedPreview) {\n\t\t\t\ttext += `\\n${output}`;\n\t\t\t}\n\t\t}\n\n\t\treturn text;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Box,\n Container,\n getCapabilities,\n Image,\n imageFallback,\n Spacer,\n Text,\n type TUI,\n truncateToWidth,\n} from \"@gsd/pi-tui\";\nimport stripAnsi from \"strip-ansi\";\nimport type { ToolDefinition } from \"../../../core/extensions/types.js\";\nimport { computeEditDiff, type EditDiffError, type EditDiffResult } from \"../../../core/tools/edit-diff.js\";\nimport { allTools } from \"../../../core/tools/index.js\";\nimport { shouldCollapse } from \"../../../core/tool-priority.js\";\nimport { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize } from \"../../../core/tools/truncate.js\";\nimport { convertToPng } from \"../../../utils/image-convert.js\";\nimport { sanitizeBinaryOutput } from \"../../../utils/shell.js\";\nimport { renderTerminalText } from \"../../../utils/terminal-serializer.js\";\nimport { getLanguageFromPath, highlightCode, theme } from \"../theme/theme.js\";\nimport { type EditorScheme, editorLink } from \"../utils/editor-link.js\";\nimport { shortenPath } from \"../utils/shorten-path.js\";\nimport { renderDiff } from \"./diff.js\";\nimport { keyHint } from \"./keybinding-hints.js\";\nimport { truncateToVisualLines } from \"./visual-truncate.js\";\n\n// Preview line limit for bash when not expanded\nconst BASH_PREVIEW_LINES = 5;\n// Flash interval for tool status spinner (ms)\nconst SPINNER_INTERVAL_MS = 150;\n\n// Spinner animation frames\nconst SPINNER_FRAMES = [\"◯\", \"◔\", \"◑\", \"◕\", \"●\"];\nlet spinnerFrame = 0;\n\n// During partial write tool-call streaming, re-highlight the first N lines fully\n// to keep multiline tokenization mostly correct without re-highlighting the full file.\nconst WRITE_PARTIAL_FULL_HIGHLIGHT_LINES = 50;\n\n/**\n * Replace tabs with spaces for consistent rendering\n */\nfunction replaceTabs(text: string): string {\n return text.replace(/\\t/g, \" \");\n}\n\n/**\n * Normalize control characters for terminal preview rendering.\n * Keep tool arguments unchanged, sanitize only display text.\n */\nfunction normalizeDisplayText(text: string): string {\n return text.replace(/\\r/g, \"\");\n}\n\n/** Safely coerce value to string for display. Returns null if invalid type. */\nfunction str(value: unknown): string | null {\n if (typeof value === \"string\") return value;\n if (value == null) return \"\";\n return null; // Invalid type\n}\n\n/**\n * Returns true if the bash output indicates a privilege escalation failure\n * that the agent process cannot resolve (sudo blocked, EPERM on root-owned files, etc.).\n */\nfunction isBashPrivilegeError(output: string, command: string): boolean {\n // Already handled by OS sandbox-policy path\n if (/sandbox blocked this operation/i.test(output)) return false;\n // sudo explicitly rejected by OS\n if (/sudo.*operation not permitted/i.test(output)) return true;\n if (/command exited with code 126/i.test(output) && /sudo/i.test(output)) return true;\n // npm / other tools hitting root-owned cache files\n if (/cache folder contains root-owned files/i.test(output)) return true;\n // Generic EPERM when command involves sudo\n if (/EPERM|operation not permitted/i.test(output) && /sudo/i.test(command)) return true;\n // Permission denied when command involves sudo\n if (/permission denied/i.test(output) && /sudo/i.test(command)) return true;\n return false;\n}\n\nexport interface ToolExecutionOptions {\n showImages?: boolean; // default: true (only used if terminal supports images)\n renderMode?: \"minimal\" | \"normal\";\n editorScheme?: EditorScheme; // URI scheme for Cmd+click file links (default: \"auto\")\n}\n\ntype WriteHighlightCache = {\n rawPath: string | null;\n lang: string;\n rawContent: string;\n normalizedLines: string[];\n highlightedLines: string[];\n};\n\n/**\n * Component that renders a tool call with its result (updateable)\n */\nexport class ToolExecutionComponent extends Container {\n private contentBox: Box; // Used for custom tools and bash visual truncation\n private contentText: Text; // For built-in tools (with its own padding/bg)\n private imageComponents: Image[] = [];\n private imageSpacers: Spacer[] = [];\n private toolName: string;\n private args: any;\n private expanded = false;\n private renderMode: \"minimal\" | \"normal\";\n private showImages: boolean;\n private editorScheme: EditorScheme;\n private isPartial = true;\n private toolDefinition?: ToolDefinition;\n private ui: TUI;\n private cwd: string;\n private result?: {\n content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n isError: boolean;\n details?: any;\n };\n // Cached edit diff preview (computed when args arrive, before tool executes)\n private editDiffPreview?: EditDiffResult | EditDiffError;\n private editDiffArgsKey?: string; // Track which args the preview is for\n // Cached converted images for Kitty protocol (which requires PNG), keyed by index\n private convertedImages: Map<number, { data: string; mimeType: string }> = new Map();\n // Incremental syntax highlighting cache for write tool call args\n private writeHighlightCache?: WriteHighlightCache;\n // When true, this component intentionally renders no lines\n private hideComponent = false;\n private manuallyHidden = false;\n private startTime = Date.now();\n\n // Tool status spinner state\n private spinnerTimer: NodeJS.Timeout | null = null;\n private spinnerFrame = 0;\n\n constructor(\n toolName: string,\n args: any,\n options: ToolExecutionOptions = {},\n toolDefinition: ToolDefinition | undefined,\n ui: TUI,\n cwd: string = process.cwd(),\n ) {\n super();\n this.toolName = toolName;\n this.args = args;\n this.showImages = options.showImages ?? true;\n this.renderMode = options.renderMode ?? \"normal\";\n this.editorScheme = options.editorScheme ?? \"auto\";\n this.toolDefinition = toolDefinition;\n this.ui = ui;\n this.cwd = cwd;\n\n // Always create both - contentBox for custom tools/bash, contentText for other built-ins\n this.contentBox = new Box(1, 0, (text: string) => theme.bg(\"toolPendingBg\", text));\n this.contentText = new Text(\"\", 1, 0, (text: string) => theme.bg(\"toolPendingBg\", text));\n\n // Use contentBox for bash (visual truncation) or custom tools with custom renderers\n // Use contentText for built-in tools (including overrides without custom renderers)\n if (toolName === \"bash\" || (toolDefinition && !this.shouldUseBuiltInRenderer())) {\n this.addChild(this.contentBox);\n } else {\n this.addChild(this.contentText);\n }\n\n this.updateDisplay();\n }\n\n /**\n * Check if we should use built-in rendering for this tool.\n * Returns true if the tool name is a built-in AND either there's no toolDefinition\n * or the toolDefinition doesn't provide custom renderers.\n */\n private shouldUseBuiltInRenderer(): boolean {\n const isBuiltInName = this.toolName in allTools;\n const hasCustomRenderers = this.toolDefinition?.renderCall || this.toolDefinition?.renderResult;\n return isBuiltInName && !hasCustomRenderers;\n }\n\n updateArgs(args: any): void {\n this.args = args;\n if (this.toolName === \"write\" && this.isPartial) {\n this.updateWriteHighlightCacheIncremental();\n }\n this.updateDisplay();\n }\n\n private highlightSingleLine(line: string, lang: string): string {\n const highlighted = highlightCode(line, lang);\n return highlighted[0] ?? \"\";\n }\n\n private refreshWriteHighlightPrefix(cache: WriteHighlightCache): void {\n const prefixCount = Math.min(WRITE_PARTIAL_FULL_HIGHLIGHT_LINES, cache.normalizedLines.length);\n if (prefixCount === 0) return;\n\n const prefixSource = cache.normalizedLines.slice(0, prefixCount).join(\"\\n\");\n const prefixHighlighted = highlightCode(prefixSource, cache.lang);\n for (let i = 0; i < prefixCount; i++) {\n cache.highlightedLines[i] =\n prefixHighlighted[i] ?? this.highlightSingleLine(cache.normalizedLines[i] ?? \"\", cache.lang);\n }\n }\n\n private rebuildWriteHighlightCacheFull(rawPath: string | null, fileContent: string): void {\n const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n if (!lang) {\n this.writeHighlightCache = undefined;\n return;\n }\n\n const displayContent = normalizeDisplayText(fileContent);\n const normalized = replaceTabs(displayContent);\n this.writeHighlightCache = {\n rawPath,\n lang,\n rawContent: fileContent,\n normalizedLines: normalized.split(\"\\n\"),\n highlightedLines: highlightCode(normalized, lang),\n };\n }\n\n private updateWriteHighlightCacheIncremental(): void {\n const rawPath = str(this.args?.file_path ?? this.args?.path);\n const fileContent = str(this.args?.content);\n if (rawPath === null || fileContent === null) {\n this.writeHighlightCache = undefined;\n return;\n }\n\n const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n if (!lang) {\n this.writeHighlightCache = undefined;\n return;\n }\n\n if (!this.writeHighlightCache) {\n this.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n return;\n }\n\n const cache = this.writeHighlightCache;\n if (cache.lang !== lang || cache.rawPath !== rawPath) {\n this.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n return;\n }\n\n if (!fileContent.startsWith(cache.rawContent)) {\n this.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n return;\n }\n\n if (fileContent.length === cache.rawContent.length) {\n return;\n }\n\n const deltaRaw = fileContent.slice(cache.rawContent.length);\n const deltaDisplay = normalizeDisplayText(deltaRaw);\n const deltaNormalized = replaceTabs(deltaDisplay);\n cache.rawContent = fileContent;\n\n if (cache.normalizedLines.length === 0) {\n cache.normalizedLines.push(\"\");\n cache.highlightedLines.push(\"\");\n }\n\n const segments = deltaNormalized.split(\"\\n\");\n const lastIndex = cache.normalizedLines.length - 1;\n cache.normalizedLines[lastIndex] += segments[0];\n cache.highlightedLines[lastIndex] = this.highlightSingleLine(cache.normalizedLines[lastIndex], cache.lang);\n\n for (let i = 1; i < segments.length; i++) {\n cache.normalizedLines.push(segments[i]);\n cache.highlightedLines.push(this.highlightSingleLine(segments[i], cache.lang));\n }\n\n this.refreshWriteHighlightPrefix(cache);\n }\n\n /**\n * Signal that args are complete (tool is about to execute).\n * This triggers diff computation for edit tool.\n */\n setArgsComplete(): void {\n if (this.toolName === \"write\") {\n const rawPath = str(this.args?.file_path ?? this.args?.path);\n const fileContent = str(this.args?.content);\n if (rawPath !== null && fileContent !== null) {\n this.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n }\n }\n this.maybeComputeEditDiff();\n }\n\n /**\n * Compute edit diff preview when we have complete args.\n * This runs async and updates display when done.\n */\n private maybeComputeEditDiff(): void {\n if (this.toolName !== \"edit\") return;\n\n const path = this.args?.path;\n const oldText = this.args?.oldText;\n const newText = this.args?.newText;\n\n // Need all three params to compute diff\n if (!path || oldText === undefined || newText === undefined) return;\n\n // Create a key to track which args this computation is for\n const argsKey = JSON.stringify({ path, oldText, newText });\n\n // Skip if we already computed for these exact args\n if (this.editDiffArgsKey === argsKey) return;\n\n this.editDiffArgsKey = argsKey;\n\n // Compute diff async\n computeEditDiff(path, oldText, newText, this.cwd).then((result) => {\n // Only update if args haven't changed since we started\n if (this.editDiffArgsKey === argsKey) {\n this.editDiffPreview = result;\n this.updateDisplay();\n this.ui.requestRender();\n }\n });\n }\n\n updateResult(\n result: {\n content: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n details?: any;\n isError: boolean;\n },\n isPartial = false,\n ): void {\n this.result = result;\n this.isPartial = isPartial;\n\n if (this.toolName === \"write\" && !isPartial) {\n const rawPath = str(this.args?.file_path ?? this.args?.path);\n const fileContent = str(this.args?.content);\n if (rawPath !== null && fileContent !== null) {\n this.rebuildWriteHighlightCacheFull(rawPath, fileContent);\n }\n }\n this.updateDisplay();\n // Convert non-PNG images to PNG for Kitty protocol (async)\n this.maybeConvertImagesForKitty();\n }\n\n /**\n * Convert non-PNG images to PNG for Kitty graphics protocol.\n * Kitty requires PNG format (f=100), so JPEG/GIF/WebP won't display.\n */\n private maybeConvertImagesForKitty(): void {\n const caps = getCapabilities();\n // Only needed for Kitty protocol\n if (caps.images !== \"kitty\") return;\n if (!this.result) return;\n\n const imageBlocks = this.result.content?.filter((c: any) => c.type === \"image\") || [];\n\n for (let i = 0; i < imageBlocks.length; i++) {\n const img = imageBlocks[i];\n if (!img.data || !img.mimeType) continue;\n // Skip if already PNG or already converted\n if (img.mimeType === \"image/png\") continue;\n if (this.convertedImages.has(i)) continue;\n\n // Convert async\n const index = i;\n convertToPng(img.data, img.mimeType).then((converted) => {\n if (converted) {\n this.convertedImages.set(index, converted);\n this.updateDisplay();\n this.ui.requestRender();\n }\n });\n }\n }\n\n setExpanded(expanded: boolean): void {\n this.expanded = expanded;\n this.updateDisplay();\n }\n\n setHidden(hidden: boolean): void {\n this.manuallyHidden = hidden;\n this.updateDisplay();\n }\n\n isHidden(): boolean {\n return this.hideComponent;\n }\n\n getElapsed(): number {\n return Date.now() - this.startTime;\n }\n\n shouldHideWhenCollapsed(): boolean {\n return !this.isPartial && shouldCollapse(this.toolName, this.result?.isError ?? false);\n }\n\n setRenderMode(mode: \"minimal\" | \"normal\"): void {\n if (this.renderMode !== mode) {\n this.renderMode = mode;\n this.updateDisplay();\n }\n }\n\n setEditorScheme(scheme: EditorScheme): void {\n this.editorScheme = scheme;\n this.updateDisplay();\n }\n\n setShowImages(show: boolean): void {\n this.showImages = show;\n this.updateDisplay();\n }\n\n dispose(): void {\n if (this.spinnerTimer) {\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = null;\n }\n }\n\n override invalidate(): void {\n super.invalidate();\n this.updateDisplay();\n }\n\n override render(width: number): string[] {\n if (this.hideComponent) {\n return [];\n }\n return [...super.render(width), \"\"];\n }\n\n private updateDisplay(): void {\n // Status indicator with circle\n let statusIndicator = \"\";\n let statusColor = \"\";\n\n if (this.isPartial) {\n // Loading spinner - start timer on first partial render\n if (!this.spinnerTimer) {\n this.spinnerTimer = setInterval(() => {\n this.spinnerFrame = (this.spinnerFrame + 1) % SPINNER_FRAMES.length;\n this.updateDisplay();\n this.ui.requestRender();\n }, SPINNER_INTERVAL_MS);\n }\n statusIndicator = SPINNER_FRAMES[this.spinnerFrame];\n } else {\n // Stop spinner when no longer partial\n if (this.spinnerTimer) {\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = null;\n }\n if (this.result?.isError) {\n // Failed - red circle\n statusIndicator = theme.fg(\"error\", \"●\");\n statusColor = \"error\";\n } else {\n // Success - green circle\n statusIndicator = theme.fg(\"success\", \"●\");\n statusColor = \"success\";\n }\n }\n\n const useBuiltInRenderer = this.shouldUseBuiltInRenderer();\n let customRendererHasContent = false;\n\n // Use built-in rendering for built-in tools (or overrides without custom renderers)\n if (useBuiltInRenderer) {\n if (this.toolName === \"bash\") {\n // Bash uses Box with visual line truncation - no background\n this.contentBox.setBgFn((text: string) => text);\n this.contentBox.clear();\n this.renderBashContent(statusIndicator);\n } else {\n // Other built-in tools: use Text directly with caching - no background\n this.contentText.setCustomBgFn((text: string) => text);\n this.contentText.setText(this.formatToolExecution(statusIndicator));\n }\n } else if (this.toolDefinition) {\n // Custom tools use Box for flexible component rendering - no background\n this.contentBox.setBgFn((text: string) => text);\n this.contentBox.clear();\n\n // Render call component\n if (this.toolDefinition.renderCall) {\n try {\n const callComponent = this.toolDefinition.renderCall(this.args, theme, { statusIndicator });\n if (callComponent !== undefined) {\n this.contentBox.addChild(callComponent);\n customRendererHasContent = true;\n }\n } catch {\n // Fall back to default on error\n this.contentBox.addChild(new Text(theme.fg(\"toolTitle\", theme.bold(this.toolName)), 0, 0));\n customRendererHasContent = true;\n }\n } else {\n // No custom renderCall, show tool name\n this.contentBox.addChild(new Text(theme.fg(\"toolTitle\", theme.bold(this.toolName)), 0, 0));\n customRendererHasContent = true;\n }\n\n // Render result component if we have a result\n if (this.result && this.toolDefinition.renderResult) {\n try {\n if (this.shouldHideCollapsedPreview()) {\n const output = this.getTextOutput();\n const hasDetails = output.trim().length > 0 || this.imageComponents.length > 0 || this.result.details !== undefined;\n const collapsedHint = this.collapsedHintWithPrefix(\"\\n\");\n if (hasDetails && collapsedHint) {\n this.contentBox.addChild(new Text(collapsedHint, 0, 0));\n customRendererHasContent = true;\n }\n } else {\n const resultComponent = this.toolDefinition.renderResult(\n { content: this.result.content as any, details: this.result.details },\n { expanded: this.expanded, isPartial: this.isPartial },\n theme,\n );\n if (resultComponent !== undefined) {\n this.contentBox.addChild(resultComponent);\n customRendererHasContent = true;\n // bg_shell: show /bg hint after start/list/digest actions\n if (this.toolName === 'bg_shell' && this.result && !this.isPartial) {\n const details = this.result.details as Record<string, unknown> | undefined;\n const action = details?.action as string | undefined;\n if (action === 'start' || action === 'list' || action === 'digest') {\n this.contentBox.addChild(new Text(\n '\\n' + theme.fg('muted', 'Tip: run /bg to manage background processes'),\n 0, 0,\n ));\n }\n }\n }\n }\n } catch {\n // Fall back to showing raw output on error\n const output = this.getTextOutput();\n if (output) {\n this.contentBox.addChild(new Text(theme.fg(\"toolOutput\", output), 0, 0));\n customRendererHasContent = true;\n }\n }\n } else if (this.result) {\n // Has result but no custom renderResult\n const output = this.getTextOutput();\n if (output) {\n if (this.shouldHideCollapsedPreview()) {\n const collapsedHint = this.collapsedHintWithPrefix(\"\\n\");\n if (collapsedHint) {\n this.contentBox.addChild(new Text(collapsedHint, 0, 0));\n }\n } else {\n this.contentBox.addChild(new Text(theme.fg(\"toolOutput\", output), 0, 0));\n }\n customRendererHasContent = true;\n }\n }\n } else {\n // Unknown tool with no registered definition - show generic fallback\n this.contentText.setCustomBgFn((text: string) => text);\n this.contentText.setText(this.formatToolExecution(statusIndicator));\n }\n\n // Handle images (same for both custom and built-in)\n for (const img of this.imageComponents) {\n this.removeChild(img);\n }\n this.imageComponents = [];\n for (const spacer of this.imageSpacers) {\n this.removeChild(spacer);\n }\n this.imageSpacers = [];\n\n if (this.result) {\n const imageBlocks = this.result.content?.filter((c: any) => c.type === \"image\") || [];\n const caps = getCapabilities();\n\n for (let i = 0; i < imageBlocks.length; i++) {\n const img = imageBlocks[i];\n if (caps.images && this.showImages && img.data && img.mimeType) {\n // Use converted PNG for Kitty protocol if available\n const converted = this.convertedImages.get(i);\n const imageData = converted?.data ?? img.data;\n const imageMimeType = converted?.mimeType ?? img.mimeType;\n\n // For Kitty, skip non-PNG images that haven't been converted yet\n if (caps.images === \"kitty\" && imageMimeType !== \"image/png\") {\n continue;\n }\n\n const spacer = new Spacer(1);\n this.addChild(spacer);\n this.imageSpacers.push(spacer);\n const imageComponent = new Image(\n imageData,\n imageMimeType,\n { fallbackColor: (s: string) => theme.fg(\"toolOutput\", s) },\n { maxWidthCells: 60 },\n );\n imageComponent.setOnDimensionsResolved(() => {\n this.updateDisplay();\n this.ui.requestRender();\n });\n this.imageComponents.push(imageComponent);\n this.addChild(imageComponent);\n }\n }\n }\n\n const computedHidden = !useBuiltInRenderer && this.toolDefinition ? !customRendererHasContent && this.imageComponents.length === 0 : false;\n this.hideComponent = this.manuallyHidden || computedHidden;\n }\n\n /**\n * Render bash content using visual line truncation (like bash-execution.ts)\n */\n private renderBashContent(statusIndicator: string): void {\n const command = str(this.args?.command);\n const timeout = this.args?.timeout as number | undefined;\n const body = new Container();\n\n this.contentBox.addChild(body);\n\n const timeoutSuffix = timeout ? theme.fg(\"muted\", ` (timeout ${timeout}s)`) : \"\";\n const sandboxBadge = this.result?.details?.sandboxed ? ` ${theme.fg(\"success\", \"[sandboxed]\")}` : \"\";\n const toolLabel = theme.fg(\"toolTitle\", theme.bold(\"bash\"));\n const shellPrompt = theme.fg(\"muted\", \"$ \");\n\n // Always show only the first meaningful non-comment line in the header.\n // The full command is shown below the header when expanded.\n let commandDisplay: string;\n let commandLines: string[] = [];\n let isMultiLine = false;\n if (command === null) {\n commandDisplay = theme.fg(\"error\", \"[invalid arg]\");\n } else if (!command) {\n commandDisplay = theme.fg(\"toolOutput\", \"...\");\n } else {\n commandLines = command.split(\"\\n\");\n isMultiLine = commandLines.length > 1;\n const firstMeaningful = commandLines.find((l) => l.trim() && !l.trim().startsWith(\"#\")) ?? commandLines[0];\n const suffix = isMultiLine ? theme.fg(\"muted\", \" …\") : \"\";\n commandDisplay = theme.fg(\"toolOutput\", firstMeaningful ?? \"\") + suffix;\n }\n\n body.addChild(new Text(`${statusIndicator} ${toolLabel} ${shellPrompt}${commandDisplay}${timeoutSuffix}${sandboxBadge}`, 0, 0));\n\n // When expanded, show the full command below the header (only for multi-line commands)\n if (this.expanded && isMultiLine) {\n const fullCommand = commandLines.map((line) => theme.fg(\"toolOutput\", line)).join(\"\\n\");\n body.addChild(new Text(`\\n${fullCommand}`, 0, 0));\n }\n\n if (this.result) {\n const output = this.getTextOutput().trim();\n\n if (output) {\n const styledOutput = output\n .split(\"\\n\")\n .map((line) => theme.fg(\"toolOutput\", line))\n .join(\"\\n\");\n\n if (this.expanded) {\n body.addChild(new Text(`\\n${styledOutput}`, 0, 0));\n } else if (this.renderMode === \"minimal\") {\n const collapsedHint = this.collapsedHintWithPrefix(\"\\n\");\n if (collapsedHint) {\n body.addChild(new Text(collapsedHint, 1, 0));\n }\n } else {\n let cachedWidth: number | undefined;\n let cachedLines: string[] | undefined;\n let cachedSkipped: number | undefined;\n\n body.addChild({\n render: (width: number) => {\n if (cachedLines === undefined || cachedWidth !== width) {\n const result = truncateToVisualLines(styledOutput, BASH_PREVIEW_LINES, Math.max(1, width - 1));\n cachedLines = result.visualLines.map((line) => ` ${line}`);\n cachedSkipped = result.skippedCount;\n cachedWidth = width;\n }\n if (cachedSkipped && cachedSkipped > 0) {\n const hint = theme.fg(\"muted\", `... (${cachedSkipped} earlier lines)`);\n return [\"\", truncateToWidth(` ${hint}`, width, \"...\"), ...cachedLines];\n }\n return [\"\", ...cachedLines];\n },\n invalidate: () => {\n cachedWidth = undefined;\n cachedLines = undefined;\n cachedSkipped = undefined;\n },\n });\n }\n }\n\n const truncation = this.result.details?.truncation;\n const fullOutputPath = this.result.details?.fullOutputPath;\n if (truncation?.truncated || fullOutputPath) {\n const warnings: string[] = [];\n if (fullOutputPath) {\n warnings.push(`Full output: ${fullOutputPath}`);\n }\n if (truncation?.truncated) {\n if (truncation.truncatedBy === \"lines\") {\n warnings.push(`Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines`);\n } else {\n warnings.push(\n `Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)`,\n );\n }\n }\n body.addChild(new Text(`\\n${theme.fg(\"warning\", `[${warnings.join(\". \")}]`)}`, 0, 0));\n }\n\n // Privilege escalation error — agent cannot sudo, show manual step callout\n if (this.result.isError && command !== null && isBashPrivilegeError(output, command)) {\n body.addChild(\n new Text(\n `\\n${theme.fg(\"warning\", \"⚠ This command requires elevated privileges the agent cannot use.\")}\\n${theme.fg(\"muted\", `Run it manually in your terminal:\\n ${command}`)}`,\n 0,\n 0,\n ),\n );\n }\n }\n }\n\n private getTextOutput(): string {\n if (!this.result) return \"\";\n\n const textBlocks = this.result.content?.filter((c: any) => c.type === \"text\") || [];\n const imageBlocks = this.result.content?.filter((c: any) => c.type === \"image\") || [];\n\n let output = textBlocks\n .map((c: any) => {\n // Use sanitizeBinaryOutput to handle binary data that crashes string-width\n return sanitizeBinaryOutput(c.text || \"\");\n })\n .join(\"\\n\");\n\n if (this.toolName === \"bash\") {\n output = renderTerminalText(output);\n } else {\n output = output.replace(/\\r/g, \"\");\n output = stripAnsi(output);\n }\n\n const caps = getCapabilities();\n if (imageBlocks.length > 0 && (!caps.images || !this.showImages)) {\n const imageIndicators = imageBlocks\n .map((img: any) => {\n return imageFallback(img.mimeType);\n })\n .join(\"\\n\");\n output = output ? `${output}\\n${imageIndicators}` : imageIndicators;\n }\n\n return output;\n }\n\n private shouldHideCollapsedPreview(): boolean {\n // Always hide preview for read tool when not expanded (like Claude Code)\n // For other tools, only hide in minimal mode without errors\n if (this.toolName === \"read\") {\n return !this.expanded && !this.result?.isError;\n }\n return !this.expanded && this.renderMode === \"minimal\" && !this.result?.isError;\n }\n\n private collapsedExpandHint(_label?: string): string {\n return \"\"; // hint is shown in editor bottom border instead\n }\n\n private collapsedHintWithPrefix(prefix = \"\\n\\n\"): string {\n const hint = this.collapsedExpandHint();\n return hint ? `${prefix}${hint}` : \"\";\n }\n\n private collapsedFirstLine(output: string): string | undefined {\n const first = output.split(\"\\n\").map((line) => line.trim()).find(Boolean);\n return first ? truncateToWidth(first, 120, \"...\") : undefined;\n }\n\n private formatToolExecution(statusIndicator: string): string {\n let text = \"\";\n const invalidArg = theme.fg(\"error\", \"[invalid arg]\");\n const hideCollapsedPreview = this.shouldHideCollapsedPreview();\n\n if (this.toolName === \"read\") {\n const rawPath = str(this.args?.file_path ?? this.args?.path);\n const path = rawPath !== null ? shortenPath(rawPath) : null;\n const offset = this.args?.offset;\n const limit = this.args?.limit;\n\n const startLine = offset ?? 1;\n const endLine = limit !== undefined ? startLine + limit - 1 : \"\";\n const lineNum = offset !== undefined ? startLine : undefined;\n\n let styledPath = path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\");\n if (rawPath && path) {\n styledPath = editorLink(rawPath, styledPath, { cwd: this.cwd, line: lineNum, scheme: this.editorScheme });\n }\n let pathDisplay = styledPath;\n if (offset !== undefined || limit !== undefined) {\n pathDisplay += theme.fg(\"warning\", `:${startLine}${endLine ? `-${endLine}` : \"\"}`);\n }\n\n text = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"read\"))} ${pathDisplay}`;\n\n if (this.result) {\n const rawOutput = this.getTextOutput();\n // Strip hashline prefixes (e.g. \"1#BQ:content\") for TUI display\n const output = rawOutput.replace(/^(\\s*)\\d+#[ZPMQVRWSNKTXJBYH]{2}:/gm, \"$1\");\n const rawPath = str(this.args?.file_path ?? this.args?.path);\n const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n const lines = lang ? highlightCode(replaceTabs(output), lang) : output.split(\"\\n\");\n\n if (hideCollapsedPreview) {\n if (output.trim()) {\n text += this.collapsedHintWithPrefix();\n }\n } else {\n const maxLines = this.expanded ? lines.length : 10;\n const displayLines = lines.slice(0, maxLines);\n const remaining = lines.length - maxLines;\n\n text +=\n \"\\n\\n\" +\n displayLines\n .map((line: string) => (lang ? replaceTabs(line) : theme.fg(\"toolOutput\", replaceTabs(line))))\n .join(\"\\n\");\n if (remaining > 0) {\n text += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n }\n }\n\n const truncation = this.result.details?.truncation;\n if (truncation?.truncated) {\n if (truncation.firstLineExceedsLimit) {\n text +=\n \"\\n\" +\n theme.fg(\n \"warning\",\n `[First line exceeds ${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit]`,\n );\n } else if (truncation.truncatedBy === \"lines\") {\n text +=\n \"\\n\" +\n theme.fg(\n \"warning\",\n `[Truncated: showing ${truncation.outputLines} of ${truncation.totalLines} lines (${truncation.maxLines ?? DEFAULT_MAX_LINES} line limit)]`,\n );\n } else {\n text +=\n \"\\n\" +\n theme.fg(\n \"warning\",\n `[Truncated: ${truncation.outputLines} lines shown (${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit)]`,\n );\n }\n }\n }\n } else if (this.toolName === \"write\") {\n const rawPath = str(this.args?.file_path ?? this.args?.path);\n const fileContent = str(this.args?.content);\n const path = rawPath !== null ? shortenPath(rawPath) : null;\n\n let writePathDisplay = path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\");\n if (rawPath && path) {\n writePathDisplay = editorLink(rawPath, writePathDisplay, { cwd: this.cwd, scheme: this.editorScheme });\n }\n text = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"write\"))} ${writePathDisplay}`;\n\n if (fileContent === null) {\n text += `\\n\\n${theme.fg(\"error\", \"[invalid content arg - expected string]\")}`;\n } else if (fileContent) {\n const lang = rawPath ? getLanguageFromPath(rawPath) : undefined;\n\n let lines: string[];\n if (lang) {\n const cache = this.writeHighlightCache;\n if (cache && cache.lang === lang && cache.rawPath === rawPath && cache.rawContent === fileContent) {\n lines = cache.highlightedLines;\n } else {\n const displayContent = normalizeDisplayText(fileContent);\n const normalized = replaceTabs(displayContent);\n lines = highlightCode(normalized, lang);\n this.writeHighlightCache = {\n rawPath,\n lang,\n rawContent: fileContent,\n normalizedLines: normalized.split(\"\\n\"),\n highlightedLines: lines,\n };\n }\n } else {\n lines = normalizeDisplayText(fileContent).split(\"\\n\");\n this.writeHighlightCache = undefined;\n }\n\n if (hideCollapsedPreview) {\n text += this.collapsedHintWithPrefix();\n } else {\n const totalLines = lines.length;\n const maxLines = this.expanded ? lines.length : 10;\n const displayLines = lines.slice(0, maxLines);\n const remaining = lines.length - maxLines;\n\n text +=\n \"\\n\\n\" +\n displayLines.map((line: string) => (lang ? line : theme.fg(\"toolOutput\", replaceTabs(line)))).join(\"\\n\");\n if (remaining > 0) {\n text += theme.fg(\"muted\", `\\n... (${remaining} more lines, ${totalLines} total)`);\n }\n }\n }\n\n // Show error if tool execution failed\n if (this.result?.isError) {\n const errorText = this.getTextOutput();\n if (errorText) {\n text += `\\n\\n${theme.fg(\"error\", errorText)}`;\n }\n }\n } else if (this.toolName === \"edit\") {\n const rawPath = str(this.args?.file_path ?? this.args?.path);\n const path = rawPath !== null ? shortenPath(rawPath) : null;\n\n // Build path display, appending :line if we have diff info\n const firstChangedLine =\n (this.editDiffPreview && \"firstChangedLine\" in this.editDiffPreview\n ? this.editDiffPreview.firstChangedLine\n : undefined) ||\n (this.result && !this.result.isError ? this.result.details?.firstChangedLine : undefined);\n\n let styledEditPath = path === null ? invalidArg : path ? theme.fg(\"accent\", path) : theme.fg(\"toolOutput\", \"...\");\n if (rawPath && path) {\n styledEditPath = editorLink(rawPath, styledEditPath, {\n cwd: this.cwd,\n line: firstChangedLine ?? undefined,\n scheme: this.editorScheme,\n });\n }\n let pathDisplay = styledEditPath;\n if (firstChangedLine) {\n pathDisplay += theme.fg(\"warning\", `:${firstChangedLine}`);\n }\n\n text = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"edit\"))} ${pathDisplay}`;\n\n if (this.result?.isError) {\n // Show error from result\n const errorText = this.getTextOutput();\n if (errorText) {\n text += `\\n\\n${theme.fg(\"error\", errorText)}`;\n }\n } else if (this.result?.details?.diff) {\n // Tool executed successfully - use the diff from result\n // This takes priority over editDiffPreview which may have a stale error\n // due to race condition (async preview computed after file was modified)\n text += hideCollapsedPreview\n ? this.collapsedHintWithPrefix()\n : `\\n\\n${renderDiff(this.result.details.diff, { filePath: rawPath ?? undefined })}`;\n } else if (this.editDiffPreview) {\n // Use cached diff preview (before tool executes)\n if (\"error\" in this.editDiffPreview) {\n text += `\\n\\n${theme.fg(\"error\", this.editDiffPreview.error)}`;\n } else if (this.editDiffPreview.diff) {\n text += hideCollapsedPreview\n ? this.collapsedHintWithPrefix()\n : `\\n\\n${renderDiff(this.editDiffPreview.diff, { filePath: rawPath ?? undefined })}`;\n }\n }\n } else if (this.toolName === \"ls\") {\n const rawPath = str(this.args?.path);\n const path = rawPath !== null ? shortenPath(rawPath || \".\") : null;\n const limit = this.args?.limit;\n\n let lsPathDisplay = path === null ? invalidArg : theme.fg(\"accent\", path);\n if (path && rawPath !== null) {\n lsPathDisplay = editorLink(rawPath || \".\", lsPathDisplay, { cwd: this.cwd, scheme: this.editorScheme });\n }\n text = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"ls\"))} ${lsPathDisplay}`;\n if (limit !== undefined) {\n text += theme.fg(\"toolOutput\", ` (limit ${limit})`);\n }\n\n if (this.result) {\n const output = this.getTextOutput().trim();\n if (output) {\n if (hideCollapsedPreview) {\n text += this.collapsedHintWithPrefix();\n } else {\n const lines = output.split(\"\\n\");\n const maxLines = this.expanded ? lines.length : 20;\n const displayLines = lines.slice(0, maxLines);\n const remaining = lines.length - maxLines;\n\n text += `\\n\\n${displayLines.map((line: string) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n if (remaining > 0) {\n text += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n }\n }\n }\n\n const entryLimit = this.result.details?.entryLimitReached;\n const truncation = this.result.details?.truncation;\n if (entryLimit || truncation?.truncated) {\n const warnings: string[] = [];\n if (entryLimit) {\n warnings.push(`${entryLimit} entries limit`);\n }\n if (truncation?.truncated) {\n warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);\n }\n text += `\\n${theme.fg(\"warning\", `[Truncated: ${warnings.join(\", \")}]`)}`;\n }\n }\n } else if (this.toolName === \"find\") {\n const pattern = str(this.args?.pattern);\n const rawPath = str(this.args?.path);\n const path = rawPath !== null ? shortenPath(rawPath || \".\") : null;\n const limit = this.args?.limit;\n\n let findPathDisplay = path === null ? invalidArg : path;\n if (path && rawPath !== null) {\n findPathDisplay = editorLink(rawPath || \".\", theme.fg(\"accent\", findPathDisplay), { cwd: this.cwd, scheme: this.editorScheme });\n } else {\n findPathDisplay = theme.fg(\"accent\", findPathDisplay);\n }\n text =\n `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"find\"))}` +\n \" \" +\n (pattern === null ? invalidArg : theme.fg(\"accent\", pattern || \"\")) +\n theme.fg(\"toolOutput\", \" in \") +\n findPathDisplay;\n if (limit !== undefined) {\n text += theme.fg(\"toolOutput\", ` (limit ${limit})`);\n }\n\n if (this.result) {\n const output = this.getTextOutput().trim();\n if (output) {\n if (hideCollapsedPreview) {\n text += this.collapsedHintWithPrefix();\n } else {\n const lines = output.split(\"\\n\");\n const maxLines = this.expanded ? lines.length : 20;\n const displayLines = lines.slice(0, maxLines);\n const remaining = lines.length - maxLines;\n\n text += `\\n\\n${displayLines.map((line: string) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n if (remaining > 0) {\n text += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n }\n }\n }\n\n const resultLimit = this.result.details?.resultLimitReached;\n const truncation = this.result.details?.truncation;\n if (resultLimit || truncation?.truncated) {\n const warnings: string[] = [];\n if (resultLimit) {\n warnings.push(`${resultLimit} results limit`);\n }\n if (truncation?.truncated) {\n warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);\n }\n text += `\\n${theme.fg(\"warning\", `[Truncated: ${warnings.join(\", \")}]`)}`;\n }\n }\n } else if (this.toolName === \"grep\") {\n const pattern = str(this.args?.pattern);\n const rawPath = str(this.args?.path);\n const path = rawPath !== null ? shortenPath(rawPath || \".\") : null;\n const glob = str(this.args?.glob);\n const limit = this.args?.limit;\n\n let grepPathDisplay = path === null ? invalidArg : path;\n if (path && rawPath !== null) {\n grepPathDisplay = editorLink(rawPath || \".\", theme.fg(\"accent\", grepPathDisplay), { cwd: this.cwd, scheme: this.editorScheme });\n } else {\n grepPathDisplay = theme.fg(\"accent\", grepPathDisplay);\n }\n text =\n `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"grep\"))}` +\n \" \" +\n (pattern === null ? invalidArg : theme.fg(\"accent\", `/${pattern || \"\"}/`)) +\n theme.fg(\"toolOutput\", \" in \") +\n grepPathDisplay;\n if (glob) {\n text += theme.fg(\"toolOutput\", ` (${glob})`);\n }\n if (limit !== undefined) {\n text += theme.fg(\"toolOutput\", ` limit ${limit}`);\n }\n\n if (this.result) {\n const output = this.getTextOutput().trim();\n if (output) {\n if (hideCollapsedPreview) {\n text += this.collapsedHintWithPrefix();\n } else {\n const lines = output.split(\"\\n\");\n const maxLines = this.expanded ? lines.length : 15;\n const displayLines = lines.slice(0, maxLines);\n const remaining = lines.length - maxLines;\n\n text += `\\n\\n${displayLines.map((line: string) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n if (remaining > 0) {\n text += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n }\n }\n }\n\n const matchLimit = this.result.details?.matchLimitReached;\n const truncation = this.result.details?.truncation;\n const linesTruncated = this.result.details?.linesTruncated;\n if (matchLimit || truncation?.truncated || linesTruncated) {\n const warnings: string[] = [];\n if (matchLimit) {\n warnings.push(`${matchLimit} matches limit`);\n }\n if (truncation?.truncated) {\n warnings.push(`${formatSize(truncation.maxBytes ?? DEFAULT_MAX_BYTES)} limit`);\n }\n if (linesTruncated) {\n warnings.push(\"some lines truncated\");\n }\n text += `\\n${theme.fg(\"warning\", `[Truncated: ${warnings.join(\", \")}]`)}`;\n }\n }\n } else if (this.toolName === \"web_search\") {\n // Server-side Anthropic web search\n text = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"web search\"))}`;\n\n if (process.env.PI_OFFLINE === \"1\") {\n text += \"\\n\\n\" + theme.fg(\"muted\", \"\\u{1F50C} Offline \\u{2014} web search unavailable\");\n } else if (this.result) {\n const output = this.getTextOutput().trim();\n if (output) {\n if (hideCollapsedPreview) {\n text += this.collapsedHintWithPrefix();\n } else {\n const lines = output.split(\"\\n\");\n const maxLines = this.expanded ? lines.length : 10;\n const displayLines = lines.slice(0, maxLines);\n const remaining = lines.length - maxLines;\n\n text += `\\n\\n${displayLines.map((line: string) => theme.fg(\"toolOutput\", line)).join(\"\\n\")}`;\n if (remaining > 0) {\n text += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n }\n }\n }\n }\n } else if (this.toolName === \"lsp\") {\n const action = this.args?.action as string | undefined;\n const file = this.args?.file as string | undefined;\n const line = this.args?.line as number | undefined;\n const symbol = this.args?.symbol as string | undefined;\n const query = this.args?.query as string | undefined;\n const newName = this.args?.new_name as string | undefined;\n\n text = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(\"lsp\"))}`;\n if (action) text += ` ${theme.fg(\"accent\", action)}`;\n if (file) {\n const shortFile = shortenPath(file);\n let styledFile = theme.fg(\"muted\", shortFile);\n if (file && shortFile) {\n styledFile = editorLink(file, styledFile, { cwd: this.cwd, line, scheme: this.editorScheme });\n }\n text += ` ${styledFile}`;\n if (line !== undefined) text += theme.fg(\"warning\", `:${line}`);\n }\n if (symbol) text += ` ${theme.fg(\"toolOutput\", symbol)}`;\n if (query) text += ` ${theme.fg(\"muted\", `\"${query}\"`)}`;\n if (newName) text += ` → ${theme.fg(\"accent\", newName)}`;\n\n if (this.result) {\n const output = this.getTextOutput().trim();\n if (output) {\n if (hideCollapsedPreview) {\n text += this.collapsedHintWithPrefix();\n } else {\n const lines = output.split(\"\\n\");\n const maxLines = this.expanded ? lines.length : 10;\n const displayLines = lines.slice(0, maxLines);\n const remaining = lines.length - maxLines;\n text += `\\n\\n${displayLines.map((l: string) => theme.fg(\"toolOutput\", l)).join(\"\\n\")}`;\n if (remaining > 0) text += theme.fg(\"muted\", `\\n... (${remaining} more lines)`);\n }\n }\n }\n } else {\n // Generic tool (shouldn't reach here for custom tools)\n text = `${statusIndicator} ${theme.fg(\"toolTitle\", theme.bold(this.toolName))}`;\n\n const content = JSON.stringify(this.args, null, 2);\n text += hideCollapsedPreview ? this.collapsedHintWithPrefix() : `\\n\\n${content}`;\n const output = this.getTextOutput();\n if (output && !hideCollapsedPreview) {\n text += `\\n${output}`;\n }\n }\n\n return text;\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Container } from "@gsd/pi-tui";
|
|
2
|
+
export declare class ToolSummaryLine extends Container {
|
|
3
|
+
private tools;
|
|
4
|
+
private hidden;
|
|
5
|
+
private contentText;
|
|
6
|
+
constructor();
|
|
7
|
+
addTool(name: string, elapsed: number): void;
|
|
8
|
+
setHidden(hidden: boolean): void;
|
|
9
|
+
invalidate(): void;
|
|
10
|
+
render(width: number): string[];
|
|
11
|
+
private updateDisplay;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=tool-summary-line.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-summary-line.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-summary-line.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAQ,MAAM,aAAa,CAAC;AAS9C,qBAAa,eAAgB,SAAQ,SAAS;IAC7C,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAO;;IAQ1B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAK5C,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIvB,UAAU,IAAI,IAAI;IAKlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAOxC,OAAO,CAAC,aAAa;CAsBrB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Container, Text } from "@gsd/pi-tui";
|
|
2
|
+
import { theme } from "../theme/theme.js";
|
|
3
|
+
export class ToolSummaryLine extends Container {
|
|
4
|
+
constructor() {
|
|
5
|
+
super();
|
|
6
|
+
this.tools = [];
|
|
7
|
+
this.hidden = false;
|
|
8
|
+
this.contentText = new Text("", 1, 0);
|
|
9
|
+
this.addChild(this.contentText);
|
|
10
|
+
}
|
|
11
|
+
addTool(name, elapsed) {
|
|
12
|
+
this.tools.push({ name, elapsed });
|
|
13
|
+
this.updateDisplay();
|
|
14
|
+
}
|
|
15
|
+
setHidden(hidden) {
|
|
16
|
+
this.hidden = hidden;
|
|
17
|
+
}
|
|
18
|
+
invalidate() {
|
|
19
|
+
super.invalidate();
|
|
20
|
+
this.updateDisplay();
|
|
21
|
+
}
|
|
22
|
+
render(width) {
|
|
23
|
+
if (this.hidden || this.tools.length === 0) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
return super.render(width);
|
|
27
|
+
}
|
|
28
|
+
updateDisplay() {
|
|
29
|
+
if (this.tools.length === 0) {
|
|
30
|
+
this.contentText.setText("");
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const counts = new Map();
|
|
34
|
+
let totalElapsed = 0;
|
|
35
|
+
for (const tool of this.tools) {
|
|
36
|
+
counts.set(tool.name, (counts.get(tool.name) ?? 0) + 1);
|
|
37
|
+
totalElapsed += tool.elapsed;
|
|
38
|
+
}
|
|
39
|
+
const groupedTools = [...counts.entries()]
|
|
40
|
+
.map(([name, count]) => (count > 1 ? `${name} ×${count}` : name))
|
|
41
|
+
.join(" · ");
|
|
42
|
+
const elapsed = (totalElapsed / 1000).toFixed(1);
|
|
43
|
+
const indicator = theme.fg("success", "●");
|
|
44
|
+
const title = theme.fg("toolTitle", theme.bold("collapsed tools"));
|
|
45
|
+
const details = theme.fg("muted", `${groupedTools} · ${elapsed}s`);
|
|
46
|
+
this.contentText.setText(`${indicator} ${title} ${details}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=tool-summary-line.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-summary-line.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/tool-summary-line.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAO1C,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAK7C;QACC,KAAK,EAAE,CAAC;QALD,UAAK,GAAoB,EAAE,CAAC;QAC5B,WAAM,GAAG,KAAK,CAAC;QAKtB,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,OAAe;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED,SAAS,CAAC,MAAe;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAEQ,UAAU;QAClB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAEQ,MAAM,CAAC,KAAa;QAC5B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,CAAC;QACX,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEO,aAAa;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7B,OAAO;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC;QAC9B,CAAC;QAED,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAChE,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,MAAM,OAAO,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,YAAY,MAAM,OAAO,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;CACD","sourcesContent":["import { Container, Text } from \"@gsd/pi-tui\";\n\nimport { theme } from \"../theme/theme.js\";\n\ninterface CollapsedTool {\n\tname: string;\n\telapsed: number;\n}\n\nexport class ToolSummaryLine extends Container {\n\tprivate tools: CollapsedTool[] = [];\n\tprivate hidden = false;\n\tprivate contentText: Text;\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.contentText = new Text(\"\", 1, 0);\n\t\tthis.addChild(this.contentText);\n\t}\n\n\taddTool(name: string, elapsed: number): void {\n\t\tthis.tools.push({ name, elapsed });\n\t\tthis.updateDisplay();\n\t}\n\n\tsetHidden(hidden: boolean): void {\n\t\tthis.hidden = hidden;\n\t}\n\n\toverride invalidate(): void {\n\t\tsuper.invalidate();\n\t\tthis.updateDisplay();\n\t}\n\n\toverride render(width: number): string[] {\n\t\tif (this.hidden || this.tools.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn super.render(width);\n\t}\n\n\tprivate updateDisplay(): void {\n\t\tif (this.tools.length === 0) {\n\t\t\tthis.contentText.setText(\"\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst counts = new Map<string, number>();\n\t\tlet totalElapsed = 0;\n\t\tfor (const tool of this.tools) {\n\t\t\tcounts.set(tool.name, (counts.get(tool.name) ?? 0) + 1);\n\t\t\ttotalElapsed += tool.elapsed;\n\t\t}\n\n\t\tconst groupedTools = [...counts.entries()]\n\t\t\t.map(([name, count]) => (count > 1 ? `${name} ×${count}` : name))\n\t\t\t.join(\" · \");\n\t\tconst elapsed = (totalElapsed / 1000).toFixed(1);\n\t\tconst indicator = theme.fg(\"success\", \"●\");\n\t\tconst title = theme.fg(\"toolTitle\", theme.bold(\"collapsed tools\"));\n\t\tconst details = theme.fg(\"muted\", `${groupedTools} · ${elapsed}s`);\n\t\tthis.contentText.setText(`${indicator} ${title} ${details}`);\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-controller.collapsed-tool-summary.test.d.ts","sourceRoot":"","sources":["../../../../../src/modes/interactive/controllers/__tests__/chat-controller.collapsed-tool-summary.test.ts"],"names":[],"mappings":""}
|