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":"loader.js","sourceRoot":"","sources":["../../src/components/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TUI } from \"../tui.js\";\nimport { Text } from \"./text.js\";\n\n// ─── ANSI helpers ─────────────────────────────────────────────────────────────\n\nconst ESC = \"\\x1b[\";\nconst RESET = \"\\x1b[0m\";\nconst DIM = \"\\x1b[2m\";\nconst BOLD = \"\\x1b[1m\";\n\n/** 24-bit foreground color */\nfunction rgb(r: number, g: number, b: number, s: string): string {\n\treturn `${ESC}38;2;${r};${g};${b}m${s}${RESET}`;\n}\n\n/** Interpolate between two RGB colors at position t ∈ [0,1] */\nfunction lerpColor(\n\tr1: number, g1: number, b1: number,\n\tr2: number, g2: number, b2: number,\n\tt: number,\n): [number, number, number] {\n\treturn [\n\t\tMath.round(r1 + (r2 - r1) * t),\n\t\tMath.round(g1 + (g2 - g1) * t),\n\t\tMath.round(b1 + (b2 - b1) * t),\n\t];\n}\n\n// ─── Timing constants ─────────────────────────────────────────────────────────\n\nconst TYPING_SPEED = 55; // ms per character typed\nconst HOLD_TIME = 5000; // ms to hold the full word\nconst ERASE_SPEED = 35; // ms per character erased\n\n// ─── Phase type ───────────────────────────────────────────────────────────────\n\ntype Phase = \"typing\" | \"hold\" | \"erase\";\n\n/**\n * Loader component — braille spinner + animated word cycling.\n *\n * Each word types in character by character (typewriter), holds with a moving\n * blue→cyan shimmer gradient, then erases right-to-left before the next word.\n */\nexport class Loader extends Text {\n\t// ── spinner ───────────────────────────────────────────────────────────────\n\tprivate frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\tprivate currentFrame = 0;\n\tprivate spinnerIntervalId: NodeJS.Timeout | null = null;\n\tprivate ui: TUI | null = null;\n\n\t// ── message state ─────────────────────────────────────────────────────────\n\tprivate message: string = \"\";\n\n\t// ── word animation ────────────────────────────────────────────────────────\n\tprivate cycleMessages: string[] | null = null;\n\tprivate cycleIndex = 0;\n\tprivate phase: Phase = \"typing\";\n\tprivate visibleChars = 0;\n\tprivate wordAnimId: NodeJS.Timeout | null = null;\n\n\t// ── shimmer gradient: theme blueHigh → blueXhigh ─────────────────────────\n\tprivate readonly gradStart: [number, number, number] = [147, 197, 253]; // #93c5fd (blue-300)\n\tprivate readonly gradEnd: [number, number, number] = [191, 219, 254]; // #bfdbfe (blue-200)\n\n\t// Shimmer ticks independently at ~40ms for smooth gradient movement\n\tprivate shimmerTick = 0;\n\tprivate shimmerIntervalId: NodeJS.Timeout | null = null;\n\n\tconstructor(\n\t\tui: TUI,\n\t\tprivate spinnerColorFn: (str: string) => string,\n\t\tprivate _messageColorFn: (str: string) => string,\n\t\tmessage: string = \"Loading…\",\n\t) {\n\t\tsuper(\"\", 1, 0);\n\t\tthis.ui = ui;\n\t\tthis.message = message;\n\t\tthis.start();\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [\"\", ...super.render(width)];\n\t}\n\n\t// ── public API ────────────────────────────────────────────────────────────\n\n\tsetCycleMessages(messages: string[], _intervalMs = 3000) {\n\t\tthis.cycleMessages = [...messages];\n\t\tthis.cycleIndex = 0;\n\t\tthis.message = this.cycleMessages[0];\n\t\tif (this.spinnerIntervalId) {\n\t\t\tthis.startWordAnimation();\n\t\t}\n\t\tthis.updateDisplay();\n\t}\n\n\tclearCycleMessages() {\n\t\tthis.stopWordAnimation();\n\t\tthis.cycleMessages = null;\n\t}\n\n\tsetMessage(message: string) {\n\t\t// When an explicit message is set externally (e.g. \"Waiting for approval…\"),\n\t\t// pause the cycle so it doesn't immediately overwrite the override.\n\t\tthis.stopWordAnimation();\n\t\tthis.cycleMessages = null;\n\t\tthis.message = message;\n\t\tthis.updateDisplay();\n\t}\n\n\tresumeCycle() {\n\t\tif (this.cycleMessages && !this.wordAnimId) {\n\t\t\tthis.startWordAnimation();\n\t\t}\n\t}\n\n\tstart() {\n\t\tif (this.spinnerIntervalId) clearInterval(this.spinnerIntervalId);\n\t\tthis.spinnerIntervalId = setInterval(() => {\n\t\t\tthis.currentFrame = (this.currentFrame + 1) % this.frames.length;\n\t\t\tthis.updateDisplay();\n\t\t}, 80);\n\n\t\t// Shimmer ticks independently at ~40ms for smooth gradient movement\n\t\tif (this.shimmerIntervalId) clearInterval(this.shimmerIntervalId);\n\t\tthis.shimmerIntervalId = setInterval(() => {\n\t\t\tthis.shimmerTick++;\n\t\t\tif (this.cycleMessages) this.updateDisplay();\n\t\t}, 40);\n\n\t\tif (this.cycleMessages) {\n\t\t\tthis.startWordAnimation();\n\t\t} else {\n\t\t\tthis.updateDisplay();\n\t\t}\n\t}\n\n\tstop() {\n\t\tif (this.spinnerIntervalId) { clearInterval(this.spinnerIntervalId); this.spinnerIntervalId = null; }\n\t\tif (this.shimmerIntervalId) { clearInterval(this.shimmerIntervalId); this.shimmerIntervalId = null; }\n\t\tthis.stopWordAnimation();\n\t}\n\n\tdispose() {\n\t\tthis.stop();\n\t\tthis.ui = null;\n\t}\n\n\t// ── word animation internals ──────────────────────────────────────────────\n\n\tprivate startWordAnimation() {\n\t\tthis.stopWordAnimation();\n\t\tthis.phase = \"typing\";\n\t\tthis.visibleChars = 0;\n\t\tthis.scheduleWordTick();\n\t}\n\n\tprivate stopWordAnimation() {\n\t\tif (this.wordAnimId) { clearTimeout(this.wordAnimId); this.wordAnimId = null; }\n\t}\n\n\tprivate scheduleWordTick() {\n\t\tconst word = this.currentWord();\n\n\t\tif (this.phase === \"typing\") {\n\t\t\tif (this.visibleChars < word.length) {\n\t\t\t\tthis.wordAnimId = setTimeout(() => {\n\t\t\t\t\tthis.visibleChars++;\n\t\t\t\t\tthis.updateDisplay();\n\t\t\t\t\tthis.scheduleWordTick();\n\t\t\t\t}, TYPING_SPEED);\n\t\t\t} else {\n\t\t\t\t// Full word shown → hold\n\t\t\t\tthis.phase = \"hold\";\n\t\t\t\tthis.wordAnimId = setTimeout(() => {\n\t\t\t\t\tthis.phase = \"erase\";\n\t\t\t\t\tthis.scheduleWordTick();\n\t\t\t\t}, HOLD_TIME);\n\t\t\t}\n\t\t} else if (this.phase === \"erase\") {\n\t\t\tif (this.visibleChars > 0) {\n\t\t\t\tthis.wordAnimId = setTimeout(() => {\n\t\t\t\t\tthis.visibleChars--;\n\t\t\t\t\tthis.updateDisplay();\n\t\t\t\t\tthis.scheduleWordTick();\n\t\t\t\t}, ERASE_SPEED);\n\t\t\t} else {\n\t\t\t\t// Advance to next word\n\t\t\t\tif (this.cycleMessages) {\n\t\t\t\t\tthis.cycleIndex = (this.cycleIndex + 1) % this.cycleMessages.length;\n\t\t\t\t\tthis.message = this.cycleMessages[this.cycleIndex];\n\t\t\t\t}\n\t\t\t\tthis.phase = \"typing\";\n\t\t\t\tthis.scheduleWordTick();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate currentWord(): string {\n\t\treturn this.message;\n\t}\n\n\t// ── rendering ─────────────────────────────────────────────────────────────\n\n\tprivate renderAnimatedWord(): string {\n\t\tconst word = this.currentWord();\n\t\tconst visible = word.slice(0, this.visibleChars);\n\t\tif (!visible) return DIM + \" \" + RESET;\n\n\t\t// Each char gets a colour position that travels through the gradient.\n\t\t// The \"wave\" offset shifts every shimmerTick for a moving shimmer.\n\t\tlet out = \"\";\n\t\tfor (let i = 0; i < visible.length; i++) {\n\t\t\tconst wave = (i / Math.max(word.length - 1, 1));\n\t\t\t// Slow rightward drift\n\t\t\tconst drift = (this.shimmerTick * 0.025) % 1;\n\t\t\tconst t = ((wave + drift) % 1);\n\t\t\tconst [r, g, b] = lerpColor(...this.gradStart, ...this.gradEnd, t);\n\n\t\t\t// Last char being typed gets a bright flash\n\t\t\tconst isEdge = (this.phase === \"typing\" && i === visible.length - 1);\n\t\t\tconst char = isEdge\n\t\t\t\t? `${BOLD}${rgb(255, 255, 255, visible[i])}`\n\t\t\t\t: rgb(r, g, b, visible[i]);\n\t\t\tout += char;\n\t\t}\n\t\treturn out;\n\t}\n\n\tprivate updateDisplay() {\n\t\tconst frame = this.frames[this.currentFrame];\n\t\tconst spinner = this.spinnerColorFn(frame);\n\t\tconst text = this.cycleMessages\n\t\t\t? this.renderAnimatedWord()\n\t\t\t: this._messageColorFn(this.message);\n\t\tthis.setText(`${spinner} ${text}`);\n\t\tif (this.ui) this.ui.requestRender();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/components/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TUI } from \"../tui.js\";\nimport { Text } from \"./text.js\";\n\n// ─── ANSI helpers ─────────────────────────────────────────────────────────────\n\nconst ESC = \"\\x1b[\";\nconst RESET = \"\\x1b[0m\";\nconst DIM = \"\\x1b[2m\";\nconst BOLD = \"\\x1b[1m\";\n\n/** 24-bit foreground color */\nfunction rgb(r: number, g: number, b: number, s: string): string {\n\treturn `${ESC}38;2;${r};${g};${b}m${s}${RESET}`;\n}\n\n/** Interpolate between two RGB colors at position t ∈ [0,1] */\nfunction lerpColor(\n\tr1: number, g1: number, b1: number,\n\tr2: number, g2: number, b2: number,\n\tt: number,\n): [number, number, number] {\n\treturn [\n\t\tMath.round(r1 + (r2 - r1) * t),\n\t\tMath.round(g1 + (g2 - g1) * t),\n\t\tMath.round(b1 + (b2 - b1) * t),\n\t];\n}\n\n// ─── Timing constants ─────────────────────────────────────────────────────────\n\nconst TYPING_SPEED = 55; // ms per character typed\nconst HOLD_TIME = 5000; // ms to hold the full word\nconst ERASE_SPEED = 35; // ms per character erased\n\n// ─── Phase type ───────────────────────────────────────────────────────────────\n\ntype Phase = \"typing\" | \"hold\" | \"erase\";\n\n/**\n * Loader component — braille spinner + animated word cycling.\n *\n * Each word types in character by character (typewriter), holds with a moving\n * blue→cyan shimmer gradient, then erases right-to-left before the next word.\n */\nexport class Loader extends Text {\n\t// ── spinner ───────────────────────────────────────────────────────────────\n\tprivate frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n\tprivate currentFrame = 0;\n\tprivate spinnerIntervalId: NodeJS.Timeout | null = null;\n\tprivate ui: TUI | null = null;\n\n\t// ── message state ─────────────────────────────────────────────────────────\n\tprivate message: string = \"\";\n\n\t// ── word animation ────────────────────────────────────────────────────────\n\tprivate cycleMessages: string[] | null = null;\n\tprivate cycleIndex = 0;\n\tprivate phase: Phase = \"typing\";\n\tprivate visibleChars = 0;\n\tprivate wordAnimId: NodeJS.Timeout | null = null;\n\n\t// ── shimmer gradient: derived from messageColorFn accent ─────────────────\n\t// Parsed lazily from a sample render of _messageColorFn so it tracks the live theme.\n\tprivate gradStart: [number, number, number] = [147, 197, 253]; // fallback blue-300\n\tprivate gradEnd: [number, number, number] = [191, 219, 254]; // fallback blue-200\n\tprivate gradParsed = false;\n\n\t// Shimmer ticks independently at ~40ms for smooth gradient movement\n\tprivate shimmerTick = 0;\n\tprivate shimmerIntervalId: NodeJS.Timeout | null = null;\n\n\tconstructor(\n\t\tui: TUI,\n\t\tprivate spinnerColorFn: (str: string) => string,\n\t\tprivate _messageColorFn: (str: string) => string,\n\t\tmessage: string = \"Loading…\",\n\t) {\n\t\tsuper(\"\", 1, 0);\n\t\tthis.ui = ui;\n\t\tthis.message = message;\n\t\tthis.start();\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [\"\", ...super.render(width)];\n\t}\n\n\t// ── public API ────────────────────────────────────────────────────────────\n\n\tsetCycleMessages(messages: string[], _intervalMs = 3000) {\n\t\tthis.cycleMessages = [...messages];\n\t\tthis.cycleIndex = 0;\n\t\tthis.message = this.cycleMessages[0];\n\t\tif (this.spinnerIntervalId) {\n\t\t\tthis.startWordAnimation();\n\t\t}\n\t\tthis.updateDisplay();\n\t}\n\n\tclearCycleMessages() {\n\t\tthis.stopWordAnimation();\n\t\tthis.cycleMessages = null;\n\t}\n\n\tsetMessage(message: string) {\n\t\t// When an explicit message is set externally (e.g. \"Waiting for approval…\"),\n\t\t// pause the cycle so it doesn't immediately overwrite the override.\n\t\tthis.stopWordAnimation();\n\t\tthis.cycleMessages = null;\n\t\tthis.message = message;\n\t\tthis.updateDisplay();\n\t}\n\n\tresumeCycle() {\n\t\tif (this.cycleMessages && !this.wordAnimId) {\n\t\t\tthis.startWordAnimation();\n\t\t}\n\t}\n\n\tstart() {\n\t\tif (this.spinnerIntervalId) clearInterval(this.spinnerIntervalId);\n\t\tthis.spinnerIntervalId = setInterval(() => {\n\t\t\tthis.currentFrame = (this.currentFrame + 1) % this.frames.length;\n\t\t\tthis.updateDisplay();\n\t\t}, 80);\n\n\t\t// Shimmer ticks independently at ~40ms for smooth gradient movement\n\t\tif (this.shimmerIntervalId) clearInterval(this.shimmerIntervalId);\n\t\tthis.shimmerIntervalId = setInterval(() => {\n\t\t\tthis.shimmerTick++;\n\t\t\tif (this.cycleMessages) this.updateDisplay();\n\t\t}, 40);\n\n\t\tif (this.cycleMessages) {\n\t\t\tthis.startWordAnimation();\n\t\t} else {\n\t\t\tthis.updateDisplay();\n\t\t}\n\t}\n\n\tstop() {\n\t\tif (this.spinnerIntervalId) { clearInterval(this.spinnerIntervalId); this.spinnerIntervalId = null; }\n\t\tif (this.shimmerIntervalId) { clearInterval(this.shimmerIntervalId); this.shimmerIntervalId = null; }\n\t\tthis.stopWordAnimation();\n\t}\n\n\tdispose() {\n\t\tthis.stop();\n\t\tthis.ui = null;\n\t}\n\n\t// ── word animation internals ──────────────────────────────────────────────\n\n\tprivate startWordAnimation() {\n\t\tthis.stopWordAnimation();\n\t\tthis.phase = \"typing\";\n\t\tthis.visibleChars = 0;\n\t\tthis.scheduleWordTick();\n\t}\n\n\tprivate stopWordAnimation() {\n\t\tif (this.wordAnimId) { clearTimeout(this.wordAnimId); this.wordAnimId = null; }\n\t}\n\n\tprivate scheduleWordTick() {\n\t\tconst word = this.currentWord();\n\n\t\tif (this.phase === \"typing\") {\n\t\t\tif (this.visibleChars < word.length) {\n\t\t\t\tthis.wordAnimId = setTimeout(() => {\n\t\t\t\t\tthis.visibleChars++;\n\t\t\t\t\tthis.updateDisplay();\n\t\t\t\t\tthis.scheduleWordTick();\n\t\t\t\t}, TYPING_SPEED);\n\t\t\t} else {\n\t\t\t\t// Full word shown → hold\n\t\t\t\tthis.phase = \"hold\";\n\t\t\t\tthis.wordAnimId = setTimeout(() => {\n\t\t\t\t\tthis.phase = \"erase\";\n\t\t\t\t\tthis.scheduleWordTick();\n\t\t\t\t}, HOLD_TIME);\n\t\t\t}\n\t\t} else if (this.phase === \"erase\") {\n\t\t\tif (this.visibleChars > 0) {\n\t\t\t\tthis.wordAnimId = setTimeout(() => {\n\t\t\t\t\tthis.visibleChars--;\n\t\t\t\t\tthis.updateDisplay();\n\t\t\t\t\tthis.scheduleWordTick();\n\t\t\t\t}, ERASE_SPEED);\n\t\t\t} else {\n\t\t\t\t// Advance to next word\n\t\t\t\tif (this.cycleMessages) {\n\t\t\t\t\tthis.cycleIndex = (this.cycleIndex + 1) % this.cycleMessages.length;\n\t\t\t\t\tthis.message = this.cycleMessages[this.cycleIndex];\n\t\t\t\t}\n\t\t\t\tthis.phase = \"typing\";\n\t\t\t\tthis.scheduleWordTick();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate currentWord(): string {\n\t\treturn this.message;\n\t}\n\n\t// ── rendering ─────────────────────────────────────────────────────────────\n\n\t/** Parse the accent color from the theme's messageColorFn and build a shimmer gradient. */\n\tprivate parseGradient(): void {\n\t\ttry {\n\t\t\t// Render a single char through the accent color function and extract the RGB escape\n\t\t\tconst sample = this._messageColorFn(\"x\");\n\t\t\tconst m = sample.match(/\\x1b\\[38;2;(\\d+);(\\d+);(\\d+)m/);\n\t\t\tif (!m) return;\n\t\t\tconst r = parseInt(m[1]), g = parseInt(m[2]), b = parseInt(m[3]);\n\t\t\t// gradStart = accent lightened slightly, gradEnd = accent lightened more\n\t\t\tthis.gradStart = [\n\t\t\t\tMath.min(255, Math.round(r + (255 - r) * 0.15)),\n\t\t\t\tMath.min(255, Math.round(g + (255 - g) * 0.15)),\n\t\t\t\tMath.min(255, Math.round(b + (255 - b) * 0.15)),\n\t\t\t];\n\t\t\tthis.gradEnd = [\n\t\t\t\tMath.min(255, Math.round(r + (255 - r) * 0.40)),\n\t\t\t\tMath.min(255, Math.round(g + (255 - g) * 0.40)),\n\t\t\t\tMath.min(255, Math.round(b + (255 - b) * 0.40)),\n\t\t\t];\n\t\t\tthis.gradParsed = true;\n\t\t} catch {\n\t\t\t// keep fallback blue gradient\n\t\t}\n\t}\n\n\tprivate renderAnimatedWord(): string {\n\t\tif (!this.gradParsed) this.parseGradient();\n\t\tconst word = this.currentWord();\n\t\tconst visible = word.slice(0, this.visibleChars);\n\t\tif (!visible) return DIM + \" \" + RESET;\n\n\t\t// Each char gets a colour position that travels through the gradient.\n\t\t// The \"wave\" offset shifts every shimmerTick for a moving shimmer.\n\t\tlet out = \"\";\n\t\tfor (let i = 0; i < visible.length; i++) {\n\t\t\tconst wave = (i / Math.max(word.length - 1, 1));\n\t\t\t// Slow rightward drift\n\t\t\tconst drift = (this.shimmerTick * 0.025) % 1;\n\t\t\tconst t = ((wave + drift) % 1);\n\t\t\tconst [r, g, b] = lerpColor(...this.gradStart, ...this.gradEnd, t);\n\n\t\t\t// Last char being typed gets a bright flash\n\t\t\tconst isEdge = (this.phase === \"typing\" && i === visible.length - 1);\n\t\t\tconst char = isEdge\n\t\t\t\t? `${BOLD}${rgb(255, 255, 255, visible[i])}`\n\t\t\t\t: rgb(r, g, b, visible[i]);\n\t\t\tout += char;\n\t\t}\n\t\treturn out;\n\t}\n\n\tprivate updateDisplay() {\n\t\tconst frame = this.frames[this.currentFrame];\n\t\tconst spinner = this.spinnerColorFn(frame);\n\t\tconst text = this.cycleMessages\n\t\t\t? this.renderAnimatedWord()\n\t\t\t: this._messageColorFn(this.message);\n\t\tthis.setText(`${spinner} ${text}`);\n\t\tif (this.ui) this.ui.requestRender();\n\t}\n}\n"]}
|
|
@@ -59,9 +59,11 @@ export class Loader extends Text {
|
|
|
59
59
|
private visibleChars = 0;
|
|
60
60
|
private wordAnimId: NodeJS.Timeout | null = null;
|
|
61
61
|
|
|
62
|
-
// ── shimmer gradient:
|
|
63
|
-
|
|
64
|
-
private
|
|
62
|
+
// ── shimmer gradient: derived from messageColorFn accent ─────────────────
|
|
63
|
+
// Parsed lazily from a sample render of _messageColorFn so it tracks the live theme.
|
|
64
|
+
private gradStart: [number, number, number] = [147, 197, 253]; // fallback blue-300
|
|
65
|
+
private gradEnd: [number, number, number] = [191, 219, 254]; // fallback blue-200
|
|
66
|
+
private gradParsed = false;
|
|
65
67
|
|
|
66
68
|
// Shimmer ticks independently at ~40ms for smooth gradient movement
|
|
67
69
|
private shimmerTick = 0;
|
|
@@ -203,7 +205,33 @@ export class Loader extends Text {
|
|
|
203
205
|
|
|
204
206
|
// ── rendering ─────────────────────────────────────────────────────────────
|
|
205
207
|
|
|
208
|
+
/** Parse the accent color from the theme's messageColorFn and build a shimmer gradient. */
|
|
209
|
+
private parseGradient(): void {
|
|
210
|
+
try {
|
|
211
|
+
// Render a single char through the accent color function and extract the RGB escape
|
|
212
|
+
const sample = this._messageColorFn("x");
|
|
213
|
+
const m = sample.match(/\x1b\[38;2;(\d+);(\d+);(\d+)m/);
|
|
214
|
+
if (!m) return;
|
|
215
|
+
const r = parseInt(m[1]), g = parseInt(m[2]), b = parseInt(m[3]);
|
|
216
|
+
// gradStart = accent lightened slightly, gradEnd = accent lightened more
|
|
217
|
+
this.gradStart = [
|
|
218
|
+
Math.min(255, Math.round(r + (255 - r) * 0.15)),
|
|
219
|
+
Math.min(255, Math.round(g + (255 - g) * 0.15)),
|
|
220
|
+
Math.min(255, Math.round(b + (255 - b) * 0.15)),
|
|
221
|
+
];
|
|
222
|
+
this.gradEnd = [
|
|
223
|
+
Math.min(255, Math.round(r + (255 - r) * 0.40)),
|
|
224
|
+
Math.min(255, Math.round(g + (255 - g) * 0.40)),
|
|
225
|
+
Math.min(255, Math.round(b + (255 - b) * 0.40)),
|
|
226
|
+
];
|
|
227
|
+
this.gradParsed = true;
|
|
228
|
+
} catch {
|
|
229
|
+
// keep fallback blue gradient
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
206
233
|
private renderAnimatedWord(): string {
|
|
234
|
+
if (!this.gradParsed) this.parseGradient();
|
|
207
235
|
const word = this.currentWord();
|
|
208
236
|
const visible = word.slice(0, this.visibleChars);
|
|
209
237
|
if (!visible) return DIM + " " + RESET;
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
export * from "./rpc-types.js";
|
|
8
8
|
export { serializeJsonLine, attachJsonlLineReader } from "./jsonl.js";
|
|
9
9
|
export { RpcClient } from "./rpc-client.js";
|
|
10
|
-
export type { RpcClientOptions, RpcEventListener, SdkAgentEvent } from "./rpc-client.js";
|
|
10
|
+
export type { RpcClientOptions, RpcEventListener, RpcExitListener, SdkAgentEvent } from "./rpc-client.js";
|
|
@@ -54,6 +54,7 @@ export interface RpcClientOptions {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
export type RpcEventListener = (event: SdkAgentEvent) => void;
|
|
57
|
+
export type RpcExitListener = (code: number | null, signal: NodeJS.Signals | null) => void;
|
|
57
58
|
|
|
58
59
|
// ============================================================================
|
|
59
60
|
// RPC Client
|
|
@@ -64,6 +65,7 @@ export class RpcClient {
|
|
|
64
65
|
private stopReadingStdout: (() => void) | null = null;
|
|
65
66
|
private _stderrHandler?: (data: Buffer) => void;
|
|
66
67
|
private eventListeners: RpcEventListener[] = [];
|
|
68
|
+
private exitListeners: RpcExitListener[] = [];
|
|
67
69
|
private pendingRequests: Map<string, { resolve: (response: RpcResponse) => void; reject: (error: Error) => void }> =
|
|
68
70
|
new Map();
|
|
69
71
|
private requestId = 0;
|
|
@@ -114,6 +116,9 @@ export class RpcClient {
|
|
|
114
116
|
|
|
115
117
|
// Detect unexpected subprocess exit and reject all pending requests
|
|
116
118
|
this.process.on("exit", (code, signal) => {
|
|
119
|
+
for (const listener of this.exitListeners) {
|
|
120
|
+
listener(code, signal);
|
|
121
|
+
}
|
|
117
122
|
if (this.pendingRequests.size > 0) {
|
|
118
123
|
const reason = signal ? `signal ${signal}` : `code ${code}`;
|
|
119
124
|
const error = new Error(`Agent process exited unexpectedly (${reason}). Stderr: ${this.stderr}`);
|
|
@@ -178,6 +183,30 @@ export class RpcClient {
|
|
|
178
183
|
};
|
|
179
184
|
}
|
|
180
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Subscribe to subprocess exit events.
|
|
188
|
+
*/
|
|
189
|
+
onExit(listener: RpcExitListener): () => void {
|
|
190
|
+
this.exitListeners.push(listener);
|
|
191
|
+
return () => {
|
|
192
|
+
const index = this.exitListeners.indexOf(listener);
|
|
193
|
+
if (index !== -1) {
|
|
194
|
+
this.exitListeners.splice(index, 1);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Write a raw JSONL line to stdin.
|
|
201
|
+
* Used for non-RPC protocol messages like approval responses.
|
|
202
|
+
*/
|
|
203
|
+
writeRawLine(line: string): void {
|
|
204
|
+
if (!this.process?.stdin) {
|
|
205
|
+
throw new Error("Client not started");
|
|
206
|
+
}
|
|
207
|
+
this.process.stdin.write(line.endsWith("\n") ? line : `${line}\n`);
|
|
208
|
+
}
|
|
209
|
+
|
|
181
210
|
/**
|
|
182
211
|
* Async generator that yields agent events as they arrive.
|
|
183
212
|
*
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
// ============================================================================
|
|
15
15
|
|
|
16
16
|
/** Thinking budget level (inlined from agent-core) */
|
|
17
|
-
export type ThinkingLevel = "off" | "
|
|
17
|
+
export type ThinkingLevel = "off" | "low" | "medium" | "high" | "xhigh";
|
|
18
18
|
|
|
19
19
|
/** Image attachment (inlined from pi-ai) */
|
|
20
20
|
export interface ImageContent {
|
|
@@ -68,7 +68,7 @@ export type ThemeJson = Static<typeof ThemeJsonSchema>;
|
|
|
68
68
|
export type ThemeColor = "accent" | "border" | "borderAccent" | "borderMuted" | "success" | "error" | "warning" | "violet" | "muted" | "dim" | "text" | "thinkingText" | "userMessageText" | "customMessageText" | "customMessageLabel" | "toolTitle" | "toolOutput" | "mdHeading" | "mdLink" | "mdLinkUrl" | "mdCode" | "mdCodeBlock" | "mdCodeBlockBorder" | "mdQuote" | "mdQuoteBorder" | "mdHr" | "mdListBullet" | "toolDiffAdded" | "toolDiffRemoved" | "toolDiffContext" | "syntaxComment" | "syntaxKeyword" | "syntaxFunction" | "syntaxVariable" | "syntaxString" | "syntaxNumber" | "syntaxType" | "syntaxOperator" | "syntaxPunctuation" | "thinkingOff" | "thinkingMinimal" | "thinkingLow" | "thinkingMedium" | "thinkingHigh" | "thinkingXhigh" | "bashMode";
|
|
69
69
|
export type ThemeBg = "selectedBg" | "userMessageBg" | "customMessageBg" | "toolPendingBg" | "toolSuccessBg" | "toolErrorBg";
|
|
70
70
|
type ColorMode = "truecolor" | "256color";
|
|
71
|
-
export declare const THEME_ACCENT_PRESETS: readonly ["default", "golden-yellow", "blue", "green", "violet", "red"];
|
|
71
|
+
export declare const THEME_ACCENT_PRESETS: readonly ["default", "claude", "golden-yellow", "blue", "green", "violet", "red"];
|
|
72
72
|
export type ThemeAccentPreset = (typeof THEME_ACCENT_PRESETS)[number];
|
|
73
73
|
export interface ThemeAccentInfo {
|
|
74
74
|
label: string;
|
|
@@ -100,7 +100,7 @@ export declare class Theme {
|
|
|
100
100
|
getFgAnsi(color: ThemeColor): string;
|
|
101
101
|
getBgAnsi(color: ThemeBg): string;
|
|
102
102
|
getColorMode(): ColorMode;
|
|
103
|
-
getThinkingBorderColor(level: "off" | "
|
|
103
|
+
getThinkingBorderColor(level: "off" | "low" | "medium" | "high" | "xhigh" | "adaptive"): (str: string) => string;
|
|
104
104
|
getBashModeBorderColor(): (str: string) => string;
|
|
105
105
|
}
|
|
106
106
|
export declare function getAvailableThemes(): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AA4BtD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwEnB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAIvD,MAAM,MAAM,UAAU,GACnB,QAAQ,GACR,QAAQ,GACR,cAAc,GACd,aAAa,GACb,SAAS,GACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,GACL,MAAM,GACN,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,WAAW,GACX,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,aAAa,GACb,mBAAmB,GACnB,SAAS,GACT,eAAe,GACf,MAAM,GACN,cAAc,GACd,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,mBAAmB,GACnB,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,UAAU,CAAC;AAEd,MAAM,MAAM,OAAO,GAChB,YAAY,GACZ,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,aAAa,CAAC;AAEjB,KAAK,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAE1C,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/theme/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -90,14 +90,20 @@ const ThemeJsonSchema = Type.Object({
|
|
|
90
90
|
})),
|
|
91
91
|
});
|
|
92
92
|
const validateThemeJson = TypeCompiler.Compile(ThemeJsonSchema);
|
|
93
|
-
export const THEME_ACCENT_PRESETS = ["default", "golden-yellow", "blue", "green", "violet", "red"];
|
|
93
|
+
export const THEME_ACCENT_PRESETS = ["default", "claude", "golden-yellow", "blue", "green", "violet", "red"];
|
|
94
94
|
const THEME_ACCENT_INFO = {
|
|
95
95
|
default: {
|
|
96
96
|
label: "Default",
|
|
97
|
-
description: "Use the active theme
|
|
97
|
+
description: "Use the active theme's native accent colors.",
|
|
98
98
|
accent: undefined,
|
|
99
99
|
thinking: undefined,
|
|
100
100
|
},
|
|
101
|
+
claude: {
|
|
102
|
+
label: "Claude orange",
|
|
103
|
+
description: "Warm orange Claude accent (#F97316).",
|
|
104
|
+
accent: "#F97316",
|
|
105
|
+
thinking: ["#7C2D12", "#C2410C", "#EA580C", "#F97316", "#FB923C", "#FDBA74"],
|
|
106
|
+
},
|
|
101
107
|
"golden-yellow": {
|
|
102
108
|
label: "Golden yellow",
|
|
103
109
|
description: "Warm amber accent (#F59E0B).",
|
|
@@ -375,9 +381,7 @@ export class Theme {
|
|
|
375
381
|
case "off":
|
|
376
382
|
return (str) => this.fg("thinkingOff", str);
|
|
377
383
|
case "adaptive":
|
|
378
|
-
return (str) => this.fg("
|
|
379
|
-
case "minimal":
|
|
380
|
-
return (str) => this.fg("thinkingMinimal", str);
|
|
384
|
+
return (str) => this.fg("accent", str);
|
|
381
385
|
case "low":
|
|
382
386
|
return (str) => this.fg("thinkingLow", str);
|
|
383
387
|
case "medium":
|
|
@@ -980,7 +984,7 @@ export function getLanguageFromPath(filePath) {
|
|
|
980
984
|
};
|
|
981
985
|
return extToLang[ext];
|
|
982
986
|
}
|
|
983
|
-
// File path detection regex
|
|
987
|
+
// File path detection regex - matches strings that look like file paths:
|
|
984
988
|
// - Contains a `/` or `\` separator, OR
|
|
985
989
|
// - Ends with a known file extension
|
|
986
990
|
const FILE_PATH_PATTERN = /^(?:\.{0,2}\/|~\/|[a-zA-Z]:\\)[\w\-./\\]+$|^[\w\-./]+\.(?:ts|tsx|js|jsx|json|md|yaml|yml|toml|css|scss|html|py|rs|go|rb|java|c|cpp|h|hpp|sh|bash|zsh|sql|graphql|proto|xml|svg|txt|env|lock|cfg|ini|conf|log|gitignore|dockerignore|editorconfig|prettierrc|eslintrc)$/;
|