@travisennis/acai 0.0.8 → 0.0.10
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 +48 -729
- package/bin/acai +52 -0
- package/dist/agent/index.d.ts +12 -2
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +378 -168
- package/dist/agent/sub-agent.d.ts +23 -0
- package/dist/agent/sub-agent.d.ts.map +1 -0
- package/dist/agent/sub-agent.js +109 -0
- package/dist/cli/index.d.ts +26 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/{cli.js → cli/index.js} +84 -76
- package/dist/cli/stdin.d.ts +9 -0
- package/dist/cli/stdin.d.ts.map +1 -0
- package/dist/cli/stdin.js +37 -0
- package/dist/commands/copy/index.js +2 -2
- package/dist/commands/copy/utils.d.ts.map +1 -1
- package/dist/commands/copy/utils.js +15 -13
- package/dist/commands/generate-rules/index.d.ts +1 -1
- package/dist/commands/generate-rules/index.d.ts.map +1 -1
- package/dist/commands/generate-rules/index.js +16 -100
- package/dist/commands/generate-rules/service.d.ts +21 -0
- package/dist/commands/generate-rules/service.d.ts.map +1 -0
- package/dist/commands/generate-rules/service.js +103 -0
- package/dist/commands/handoff/index.js +2 -2
- package/dist/commands/health/index.js +1 -1
- package/dist/commands/health/utils.d.ts.map +1 -1
- package/dist/commands/health/utils.js +6 -0
- package/dist/commands/history/index.d.ts +1 -1
- package/dist/commands/history/index.d.ts.map +1 -1
- package/dist/commands/history/index.js +17 -18
- package/dist/commands/history/types.d.ts +38 -0
- package/dist/commands/history/types.d.ts.map +1 -1
- package/dist/commands/history/utils.d.ts.map +1 -1
- package/dist/commands/history/utils.js +63 -58
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +3 -8
- package/dist/commands/init-project/index.d.ts.map +1 -1
- package/dist/commands/init-project/index.js +3 -3
- package/dist/commands/init-project/utils.d.ts.map +1 -1
- package/dist/commands/init-project/utils.js +10 -2
- package/dist/commands/list-tools/index.d.ts.map +1 -1
- package/dist/commands/list-tools/index.js +7 -31
- package/dist/commands/manager.d.ts +2 -2
- package/dist/commands/manager.d.ts.map +1 -1
- package/dist/commands/manager.js +57 -33
- package/dist/commands/model/index.d.ts.map +1 -1
- package/dist/commands/model/index.js +20 -151
- package/dist/commands/model/model-panel.d.ts +4 -0
- package/dist/commands/model/model-panel.d.ts.map +1 -0
- package/dist/commands/model/model-panel.js +144 -0
- package/dist/commands/paste/index.d.ts.map +1 -1
- package/dist/commands/paste/index.js +59 -62
- package/dist/commands/paste/utils.d.ts.map +1 -1
- package/dist/commands/paste/utils.js +88 -58
- package/dist/commands/pickup/index.d.ts.map +1 -1
- package/dist/commands/pickup/index.js +6 -3
- package/dist/commands/pickup/utils.js +3 -3
- package/dist/commands/resources/index.d.ts.map +1 -1
- package/dist/commands/resources/index.js +33 -50
- package/dist/commands/review/index.d.ts.map +1 -1
- package/dist/commands/review/index.js +3 -117
- package/dist/commands/review/review-panel.d.ts +3 -0
- package/dist/commands/review/review-panel.d.ts.map +1 -0
- package/dist/commands/review/review-panel.js +186 -0
- package/dist/commands/review/utils.d.ts +9 -0
- package/dist/commands/review/utils.d.ts.map +1 -1
- package/dist/commands/review/utils.js +127 -68
- package/dist/commands/session/index.d.ts +1 -1
- package/dist/commands/session/index.d.ts.map +1 -1
- package/dist/commands/session/index.js +134 -112
- package/dist/commands/session/types.d.ts +7 -0
- package/dist/commands/session/types.d.ts.map +1 -1
- package/dist/commands/share/html-renderer.d.ts +25 -0
- package/dist/commands/share/html-renderer.d.ts.map +1 -0
- package/dist/commands/share/html-renderer.js +384 -0
- package/dist/commands/share/index.d.ts +3 -0
- package/dist/commands/share/index.d.ts.map +1 -0
- package/dist/commands/share/index.js +122 -0
- package/dist/commands/shell/index.d.ts.map +1 -1
- package/dist/commands/shell/index.js +16 -1
- package/dist/commands/types.d.ts +2 -2
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/{config.d.ts → config/index.d.ts} +20 -9
- package/dist/config/index.d.ts.map +1 -0
- package/dist/{config.js → config/index.js} +43 -42
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +75 -55
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +170 -127
- package/dist/middleware/cache.d.ts.map +1 -1
- package/dist/middleware/cache.js +18 -36
- package/dist/models/ai-config.d.ts +1 -0
- package/dist/models/ai-config.d.ts.map +1 -1
- package/dist/models/ai-config.js +4 -3
- package/dist/models/anthropic-provider.d.ts +2 -5
- package/dist/models/anthropic-provider.d.ts.map +1 -1
- package/dist/models/anthropic-provider.js +3 -70
- package/dist/models/deepseek-provider.d.ts +1 -0
- package/dist/models/deepseek-provider.d.ts.map +1 -1
- package/dist/models/google-provider.d.ts +2 -3
- package/dist/models/google-provider.d.ts.map +1 -1
- package/dist/models/google-provider.js +0 -26
- package/dist/models/groq-provider.d.ts +1 -0
- package/dist/models/groq-provider.d.ts.map +1 -1
- package/dist/models/manager.d.ts +13 -2
- package/dist/models/manager.d.ts.map +1 -1
- package/dist/models/manager.js +20 -8
- package/dist/models/openai-provider.d.ts +5 -5
- package/dist/models/openai-provider.d.ts.map +1 -1
- package/dist/models/openai-provider.js +27 -40
- package/dist/models/opencode-zen-provider.d.ts +8 -3
- package/dist/models/opencode-zen-provider.d.ts.map +1 -1
- package/dist/models/opencode-zen-provider.js +68 -11
- package/dist/models/openrouter-provider.d.ts +24 -30
- package/dist/models/openrouter-provider.d.ts.map +1 -1
- package/dist/models/openrouter-provider.js +92 -177
- package/dist/models/providers.d.ts +1 -1
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/models/xai-provider.d.ts +4 -3
- package/dist/models/xai-provider.d.ts.map +1 -1
- package/dist/models/xai-provider.js +18 -18
- package/dist/modes/manager.d.ts +23 -0
- package/dist/modes/manager.d.ts.map +1 -0
- package/dist/modes/manager.js +77 -0
- package/dist/modes/prompts.d.ts +2 -0
- package/dist/modes/prompts.d.ts.map +1 -0
- package/dist/modes/prompts.js +143 -0
- package/dist/prompts/mentions.d.ts +11 -0
- package/dist/prompts/mentions.d.ts.map +1 -0
- package/dist/{mentions.js → prompts/mentions.js} +21 -80
- package/dist/prompts/system-prompt.d.ts +26 -0
- package/dist/prompts/system-prompt.d.ts.map +1 -0
- package/dist/{prompts.js → prompts/system-prompt.js} +50 -22
- package/dist/repl/index.d.ts +174 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/{repl-new.js → repl/index.js} +399 -76
- package/dist/repl/project-status.d.ts +1 -0
- package/dist/repl/project-status.d.ts.map +1 -1
- package/dist/repl/project-status.js +4 -1
- package/dist/sessions/manager.d.ts +93 -1
- package/dist/sessions/manager.d.ts.map +1 -1
- package/dist/sessions/manager.js +264 -9
- package/dist/sessions/summary.d.ts +4 -0
- package/dist/sessions/summary.d.ts.map +1 -0
- package/dist/sessions/summary.js +30 -0
- package/dist/{skills.d.ts → skills/index.d.ts} +14 -2
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +294 -0
- package/dist/subagents/index.d.ts +15 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +231 -0
- package/dist/terminal/control.d.ts +1 -1
- package/dist/terminal/control.d.ts.map +1 -1
- package/dist/terminal/control.js +30 -9
- package/dist/terminal/east-asian-width.d.ts.map +1 -1
- package/dist/terminal/east-asian-width.js +404 -351
- package/dist/terminal/keys.d.ts +17 -0
- package/dist/terminal/keys.d.ts.map +1 -1
- package/dist/terminal/keys.js +37 -0
- package/dist/terminal/select-prompt.d.ts.map +1 -1
- package/dist/terminal/select-prompt.js +24 -12
- package/dist/terminal/string-width.d.ts.map +1 -1
- package/dist/terminal/string-width.js +25 -27
- package/dist/terminal/style.d.ts.map +1 -1
- package/dist/terminal/style.js +4 -7
- package/dist/terminal/supports-color.d.ts.map +1 -1
- package/dist/terminal/supports-color.js +41 -27
- package/dist/terminal/table/cell.d.ts +12 -0
- package/dist/terminal/table/cell.d.ts.map +1 -1
- package/dist/terminal/table/cell.js +40 -25
- package/dist/terminal/table/layout-manager.d.ts.map +1 -1
- package/dist/terminal/table/layout-manager.js +100 -68
- package/dist/terminal/table/utils.d.ts.map +1 -1
- package/dist/terminal/table/utils.js +17 -10
- package/dist/terminal/wrap-ansi.d.ts.map +1 -1
- package/dist/terminal/wrap-ansi.js +172 -103
- package/dist/tokens/tracker.d.ts +1 -0
- package/dist/tokens/tracker.d.ts.map +1 -1
- package/dist/tokens/tracker.js +3 -0
- package/dist/tools/agent.d.ts +27 -0
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +81 -0
- package/dist/tools/bash.d.ts +4 -3
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +343 -121
- package/dist/tools/code-search.d.ts +41 -0
- package/dist/tools/code-search.d.ts.map +1 -0
- package/dist/tools/code-search.js +195 -0
- package/dist/tools/directory-tree.d.ts +3 -3
- package/dist/tools/directory-tree.d.ts.map +1 -1
- package/dist/tools/directory-tree.js +8 -5
- package/dist/tools/dynamic-tool-loader.d.ts +2 -5
- package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-loader.js +20 -4
- package/dist/tools/edit-file.d.ts +7 -7
- package/dist/tools/edit-file.d.ts.map +1 -1
- package/dist/tools/edit-file.js +164 -66
- package/dist/tools/glob.d.ts +6 -6
- package/dist/tools/glob.d.ts.map +1 -1
- package/dist/tools/glob.js +95 -55
- package/dist/tools/grep.d.ts +15 -12
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +300 -192
- package/dist/tools/index.d.ts +143 -5
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +39 -24
- package/dist/tools/ls.d.ts +2 -2
- package/dist/tools/ls.d.ts.map +1 -1
- package/dist/tools/ls.js +7 -5
- package/dist/tools/read-file.d.ts +3 -3
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +74 -34
- package/dist/tools/save-file.d.ts +3 -3
- package/dist/tools/save-file.d.ts.map +1 -1
- package/dist/tools/save-file.js +11 -11
- package/dist/tools/skill.d.ts +23 -0
- package/dist/tools/skill.d.ts.map +1 -0
- package/dist/tools/skill.js +65 -0
- package/dist/tools/think.d.ts.map +1 -1
- package/dist/tools/think.js +2 -9
- package/dist/tools/utils.d.ts +2 -0
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +12 -0
- package/dist/tools/web-fetch.d.ts +62 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +429 -0
- package/dist/tools/web-search.d.ts +62 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +226 -0
- package/dist/tui/autocomplete/attachment-provider.d.ts +3 -6
- package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/attachment-provider.js +25 -78
- package/dist/tui/autocomplete/base-provider.d.ts +1 -0
- package/dist/tui/autocomplete/base-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/combined-provider.d.ts +1 -4
- package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/combined-provider.js +3 -17
- package/dist/tui/autocomplete/command-provider.d.ts +1 -0
- package/dist/tui/autocomplete/command-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/command-provider.js +3 -0
- package/dist/tui/autocomplete/file-search-provider.d.ts +2 -1
- package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/file-search-provider.js +36 -16
- package/dist/tui/autocomplete/skill-provider.d.ts +17 -0
- package/dist/tui/autocomplete/skill-provider.d.ts.map +1 -0
- package/dist/tui/autocomplete/skill-provider.js +49 -0
- package/dist/tui/autocomplete.d.ts +2 -2
- package/dist/tui/autocomplete.d.ts.map +1 -1
- package/dist/tui/autocomplete.js +3 -5
- package/dist/tui/components/assistant-message.d.ts.map +1 -1
- package/dist/tui/components/assistant-message.js +0 -4
- package/dist/tui/components/editor.d.ts +21 -2
- package/dist/tui/components/editor.d.ts.map +1 -1
- package/dist/tui/components/editor.js +228 -236
- package/dist/tui/components/footer.d.ts +6 -4
- package/dist/tui/components/footer.d.ts.map +1 -1
- package/dist/tui/components/footer.js +49 -25
- package/dist/tui/components/markdown.d.ts +8 -5
- package/dist/tui/components/markdown.d.ts.map +1 -1
- package/dist/tui/components/markdown.js +57 -39
- package/dist/tui/components/modal.d.ts.map +1 -1
- package/dist/tui/components/modal.js +35 -33
- package/dist/tui/components/notification.d.ts +13 -2
- package/dist/tui/components/notification.d.ts.map +1 -1
- package/dist/tui/components/notification.js +37 -2
- package/dist/tui/components/progress-bar.js +1 -1
- package/dist/tui/components/select-list.d.ts +1 -0
- package/dist/tui/components/select-list.d.ts.map +1 -1
- package/dist/tui/components/select-list.js +14 -11
- package/dist/tui/components/text.d.ts +16 -0
- package/dist/tui/components/text.d.ts.map +1 -1
- package/dist/tui/components/text.js +72 -57
- package/dist/tui/components/thinking-block.d.ts +9 -0
- package/dist/tui/components/thinking-block.d.ts.map +1 -1
- package/dist/tui/components/thinking-block.js +43 -11
- package/dist/tui/components/tool-execution.d.ts +5 -1
- package/dist/tui/components/tool-execution.d.ts.map +1 -1
- package/dist/tui/components/tool-execution.js +19 -10
- package/dist/tui/components/user-message.d.ts.map +1 -1
- package/dist/tui/components/user-message.js +0 -3
- package/dist/tui/components/welcome.js +2 -2
- package/dist/tui/editor-launcher.d.ts +13 -0
- package/dist/tui/editor-launcher.d.ts.map +1 -0
- package/dist/tui/editor-launcher.js +39 -0
- package/dist/tui/index.d.ts +3 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +1 -0
- package/dist/tui/terminal.d.ts +27 -0
- package/dist/tui/terminal.d.ts.map +1 -1
- package/dist/tui/terminal.js +144 -15
- package/dist/tui/tui.d.ts +43 -0
- package/dist/tui/tui.d.ts.map +1 -1
- package/dist/tui/tui.js +172 -41
- package/dist/utils/bash/parse.d.ts +19 -0
- package/dist/utils/bash/parse.d.ts.map +1 -0
- package/dist/utils/bash/parse.js +223 -0
- package/dist/utils/bash/quote.d.ts +6 -0
- package/dist/utils/bash/quote.d.ts.map +1 -0
- package/dist/utils/bash/quote.js +23 -0
- package/dist/utils/bash.d.ts.map +1 -1
- package/dist/utils/bash.js +211 -126
- package/dist/utils/command-protection.d.ts +28 -0
- package/dist/utils/command-protection.d.ts.map +1 -0
- package/dist/utils/command-protection.js +324 -0
- package/dist/utils/dedent.d.ts.map +1 -0
- package/dist/utils/env-expand.d.ts +2 -0
- package/dist/utils/env-expand.d.ts.map +1 -0
- package/dist/utils/env-expand.js +8 -0
- package/dist/utils/filesystem/path-display.d.ts +11 -0
- package/dist/utils/filesystem/path-display.d.ts.map +1 -0
- package/dist/utils/filesystem/path-display.js +32 -0
- package/dist/utils/filesystem/security.d.ts +2 -2
- package/dist/utils/filesystem/security.d.ts.map +1 -1
- package/dist/utils/filesystem/security.js +32 -31
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/{formatting.js → utils/formatting.js} +1 -1
- package/dist/utils/git.d.ts +4 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +30 -0
- package/dist/utils/glob.d.ts +1 -1
- package/dist/utils/glob.d.ts.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/{logger.js → utils/logger.js} +1 -1
- package/dist/utils/parsing.d.ts.map +1 -0
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +90 -37
- package/dist/utils/templates.d.ts +2 -0
- package/dist/utils/templates.d.ts.map +1 -0
- package/dist/utils/templates.js +24 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/{version.js → utils/version.js} +1 -1
- package/package.json +34 -25
- package/dist/cli.d.ts +0 -23
- package/dist/cli.d.ts.map +0 -1
- package/dist/commands/exit/index.d.ts +0 -10
- package/dist/commands/exit/index.d.ts.map +0 -1
- package/dist/commands/exit/index.js +0 -21
- package/dist/commands/exit/types.d.ts +0 -8
- package/dist/commands/exit/types.d.ts.map +0 -1
- package/dist/commands/exit/types.js +0 -1
- package/dist/commands/exit/utils.d.ts +0 -2
- package/dist/commands/exit/utils.d.ts.map +0 -1
- package/dist/commands/exit/utils.js +0 -13
- package/dist/commands/prompt/index.d.ts +0 -5
- package/dist/commands/prompt/index.d.ts.map +0 -1
- package/dist/commands/prompt/index.js +0 -126
- package/dist/commands/prompt/types.d.ts +0 -15
- package/dist/commands/prompt/types.d.ts.map +0 -1
- package/dist/commands/prompt/types.js +0 -1
- package/dist/commands/prompt/utils.d.ts +0 -12
- package/dist/commands/prompt/utils.d.ts.map +0 -1
- package/dist/commands/prompt/utils.js +0 -107
- package/dist/commands/reset/index.d.ts +0 -3
- package/dist/commands/reset/index.d.ts.map +0 -1
- package/dist/commands/reset/index.js +0 -25
- package/dist/commands/reset/types.d.ts +0 -1
- package/dist/commands/reset/types.d.ts.map +0 -1
- package/dist/commands/reset/types.js +0 -3
- package/dist/commands/save/index.d.ts +0 -3
- package/dist/commands/save/index.d.ts.map +0 -1
- package/dist/commands/save/index.js +0 -19
- package/dist/config.d.ts.map +0 -1
- package/dist/dedent.d.ts.map +0 -1
- package/dist/formatting.d.ts.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/mentions.d.ts +0 -14
- package/dist/mentions.d.ts.map +0 -1
- package/dist/parsing.d.ts.map +0 -1
- package/dist/prompts.d.ts +0 -10
- package/dist/prompts.d.ts.map +0 -1
- package/dist/repl-new.d.ts +0 -62
- package/dist/repl-new.d.ts.map +0 -1
- package/dist/skills.d.ts.map +0 -1
- package/dist/skills.js +0 -233
- package/dist/tui/autocomplete/path-provider.d.ts +0 -21
- package/dist/tui/autocomplete/path-provider.d.ts.map +0 -1
- package/dist/tui/autocomplete/path-provider.js +0 -164
- package/dist/version.d.ts.map +0 -1
- /package/dist/{dedent.d.ts → utils/dedent.d.ts} +0 -0
- /package/dist/{dedent.js → utils/dedent.js} +0 -0
- /package/dist/{formatting.d.ts → utils/formatting.d.ts} +0 -0
- /package/dist/{logger.d.ts → utils/logger.d.ts} +0 -0
- /package/dist/{parsing.d.ts → utils/parsing.d.ts} +0 -0
- /package/dist/{parsing.js → utils/parsing.js} +0 -0
- /package/dist/{version.d.ts → utils/version.d.ts} +0 -0
|
@@ -21,6 +21,22 @@ export declare class Text implements Component {
|
|
|
21
21
|
g: number;
|
|
22
22
|
b: number;
|
|
23
23
|
}): void;
|
|
24
|
+
/**
|
|
25
|
+
* Apply background color to a line if customBgRgb is set
|
|
26
|
+
*/
|
|
27
|
+
private applyBackground;
|
|
28
|
+
/**
|
|
29
|
+
* Create an empty padded line (for top/bottom padding)
|
|
30
|
+
*/
|
|
31
|
+
private createEmptyPaddedLine;
|
|
32
|
+
/**
|
|
33
|
+
* Wrap a single line of text to fit within contentWidth
|
|
34
|
+
*/
|
|
35
|
+
private wrapLine;
|
|
36
|
+
/**
|
|
37
|
+
* Truncate a word to fit within contentWidth
|
|
38
|
+
*/
|
|
39
|
+
private truncateWord;
|
|
24
40
|
render(width: number): string[];
|
|
25
41
|
}
|
|
26
42
|
//# sourceMappingURL=text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../source/tui/components/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C;;GAEG;AACH,qBAAa,IAAK,YAAW,SAAS;IACpC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAsC;IAG1D,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAW;gBAG7B,IAAI,SAAK,EACT,QAAQ,SAAI,EACZ,QAAQ,SAAI,EACZ,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAQnD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,cAAc,CAAC,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../source/tui/components/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C;;GAEG;AACH,qBAAa,IAAK,YAAW,SAAS;IACpC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAsC;IAG1D,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAW;gBAG7B,IAAI,SAAK,EACT,QAAQ,SAAI,EACZ,QAAQ,SAAI,EACZ,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAQnD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,cAAc,CAAC,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQvE;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAoChB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAwEhC"}
|
|
@@ -32,6 +32,72 @@ export class Text {
|
|
|
32
32
|
this.cachedWidth = undefined;
|
|
33
33
|
this.cachedLines = undefined;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Apply background color to a line if customBgRgb is set
|
|
37
|
+
*/
|
|
38
|
+
applyBackground(line) {
|
|
39
|
+
if (!this.customBgRgb) {
|
|
40
|
+
return line;
|
|
41
|
+
}
|
|
42
|
+
return style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(line);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create an empty padded line (for top/bottom padding)
|
|
46
|
+
*/
|
|
47
|
+
createEmptyPaddedLine(width) {
|
|
48
|
+
const emptyLine = " ".repeat(width);
|
|
49
|
+
return this.applyBackground(emptyLine);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Wrap a single line of text to fit within contentWidth
|
|
53
|
+
*/
|
|
54
|
+
wrapLine(line, contentWidth) {
|
|
55
|
+
const lines = [];
|
|
56
|
+
const visibleLineLength = visibleWidth(line);
|
|
57
|
+
if (visibleLineLength <= contentWidth) {
|
|
58
|
+
lines.push(line);
|
|
59
|
+
return lines;
|
|
60
|
+
}
|
|
61
|
+
// Word wrap
|
|
62
|
+
const words = line.split(" ");
|
|
63
|
+
let currentLine = "";
|
|
64
|
+
for (const word of words) {
|
|
65
|
+
const currentVisible = visibleWidth(currentLine);
|
|
66
|
+
// If word is too long, truncate it
|
|
67
|
+
const finalWord = this.truncateWord(word, contentWidth);
|
|
68
|
+
if (currentVisible === 0) {
|
|
69
|
+
currentLine = finalWord;
|
|
70
|
+
}
|
|
71
|
+
else if (currentVisible + 1 + visibleWidth(finalWord) <= contentWidth) {
|
|
72
|
+
currentLine += ` ${finalWord}`;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
lines.push(currentLine);
|
|
76
|
+
currentLine = finalWord;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (currentLine.length > 0) {
|
|
80
|
+
lines.push(currentLine);
|
|
81
|
+
}
|
|
82
|
+
return lines;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Truncate a word to fit within contentWidth
|
|
86
|
+
*/
|
|
87
|
+
truncateWord(word, contentWidth) {
|
|
88
|
+
const wordVisible = visibleWidth(word);
|
|
89
|
+
if (wordVisible <= contentWidth) {
|
|
90
|
+
return word;
|
|
91
|
+
}
|
|
92
|
+
let truncated = "";
|
|
93
|
+
for (const char of word) {
|
|
94
|
+
if (visibleWidth(truncated + char) > contentWidth) {
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
truncated += char;
|
|
98
|
+
}
|
|
99
|
+
return truncated;
|
|
100
|
+
}
|
|
35
101
|
render(width) {
|
|
36
102
|
// Check cache
|
|
37
103
|
if (this.cachedLines &&
|
|
@@ -55,47 +121,8 @@ export class Text {
|
|
|
55
121
|
const lines = [];
|
|
56
122
|
const textLines = normalizedText.split("\n");
|
|
57
123
|
for (const line of textLines) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (visibleLineLength <= contentWidth) {
|
|
61
|
-
lines.push(line);
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
// Word wrap
|
|
65
|
-
const words = line.split(" ");
|
|
66
|
-
let currentLine = "";
|
|
67
|
-
for (const word of words) {
|
|
68
|
-
const currentVisible = visibleWidth(currentLine);
|
|
69
|
-
const wordVisible = visibleWidth(word);
|
|
70
|
-
// If word is too long, truncate it
|
|
71
|
-
let finalWord = word;
|
|
72
|
-
if (wordVisible > contentWidth) {
|
|
73
|
-
// Truncate word to fit
|
|
74
|
-
let truncated = "";
|
|
75
|
-
for (const char of word) {
|
|
76
|
-
if (visibleWidth(truncated + char) > contentWidth) {
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
truncated += char;
|
|
80
|
-
}
|
|
81
|
-
finalWord = truncated;
|
|
82
|
-
}
|
|
83
|
-
if (currentVisible === 0) {
|
|
84
|
-
currentLine = finalWord;
|
|
85
|
-
}
|
|
86
|
-
else if (currentVisible + 1 + visibleWidth(finalWord) <=
|
|
87
|
-
contentWidth) {
|
|
88
|
-
currentLine += ` ${finalWord}`;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
lines.push(currentLine);
|
|
92
|
-
currentLine = finalWord;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (currentLine.length > 0) {
|
|
96
|
-
lines.push(currentLine);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
124
|
+
const wrappedLines = this.wrapLine(line, contentWidth);
|
|
125
|
+
lines.push(...wrappedLines);
|
|
99
126
|
}
|
|
100
127
|
// Add padding to each line
|
|
101
128
|
const leftPad = " ".repeat(this.paddingX);
|
|
@@ -106,31 +133,19 @@ export class Text {
|
|
|
106
133
|
// Right padding to fill to width (accounting for left padding and content)
|
|
107
134
|
const rightPadLength = Math.max(0, width - this.paddingX - visibleLength);
|
|
108
135
|
const rightPad = " ".repeat(rightPadLength);
|
|
109
|
-
|
|
136
|
+
const paddedLine = leftPad + line + rightPad;
|
|
110
137
|
// Apply background color if specified
|
|
111
|
-
|
|
112
|
-
paddedLine = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(paddedLine);
|
|
113
|
-
}
|
|
114
|
-
paddedLines.push(paddedLine);
|
|
138
|
+
paddedLines.push(this.applyBackground(paddedLine));
|
|
115
139
|
}
|
|
116
140
|
// Add top padding (empty lines)
|
|
117
|
-
const emptyLine = " ".repeat(width);
|
|
118
141
|
const topPadding = [];
|
|
119
142
|
for (let i = 0; i < this.paddingY; i++) {
|
|
120
|
-
|
|
121
|
-
if (this.customBgRgb) {
|
|
122
|
-
emptyPaddedLine = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(emptyPaddedLine);
|
|
123
|
-
}
|
|
124
|
-
topPadding.push(emptyPaddedLine);
|
|
143
|
+
topPadding.push(this.createEmptyPaddedLine(width));
|
|
125
144
|
}
|
|
126
145
|
// Add bottom padding (empty lines)
|
|
127
146
|
const bottomPadding = [];
|
|
128
147
|
for (let i = 0; i < this.paddingY; i++) {
|
|
129
|
-
|
|
130
|
-
if (this.customBgRgb) {
|
|
131
|
-
emptyPaddedLine = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(emptyPaddedLine);
|
|
132
|
-
}
|
|
133
|
-
bottomPadding.push(emptyPaddedLine);
|
|
148
|
+
bottomPadding.push(this.createEmptyPaddedLine(width));
|
|
134
149
|
}
|
|
135
150
|
// Combine top padding, content, and bottom padding
|
|
136
151
|
const result = [...topPadding, ...paddedLines, ...bottomPadding];
|
|
@@ -4,11 +4,20 @@ import { Container } from "../tui.ts";
|
|
|
4
4
|
*/
|
|
5
5
|
export declare class ThinkingBlockComponent extends Container {
|
|
6
6
|
private contentContainer;
|
|
7
|
+
private verboseMode;
|
|
8
|
+
private lastContent;
|
|
9
|
+
private isThinking;
|
|
10
|
+
private thinkingComplete;
|
|
7
11
|
constructor(message?: {
|
|
8
12
|
content: string;
|
|
13
|
+
}, options?: {
|
|
14
|
+
verboseMode?: boolean;
|
|
9
15
|
});
|
|
10
16
|
updateContent(message: {
|
|
11
17
|
content: string;
|
|
12
18
|
}): void;
|
|
19
|
+
endThinking(): void;
|
|
20
|
+
setVerboseMode(verboseMode: boolean): void;
|
|
21
|
+
private renderContent;
|
|
13
22
|
}
|
|
14
23
|
//# sourceMappingURL=thinking-block.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinking-block.d.ts","sourceRoot":"","sources":["../../../source/tui/components/thinking-block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;
|
|
1
|
+
{"version":3,"file":"thinking-block.d.ts","sourceRoot":"","sources":["../../../source/tui/components/thinking-block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAS;gBAG/B,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAC7B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAcrC,aAAa,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMjD,WAAW,IAAI,IAAI;IAMnB,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAK1C,OAAO,CAAC,aAAa;CA6BtB"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import style from "../../terminal/style.js";
|
|
2
2
|
import { Container } from "../tui.js";
|
|
3
3
|
import { Markdown } from "./markdown.js";
|
|
4
|
-
import {
|
|
4
|
+
import { Text } from "./text.js";
|
|
5
5
|
/**
|
|
6
6
|
* Component that renders a thinking block
|
|
7
7
|
*/
|
|
8
8
|
export class ThinkingBlockComponent extends Container {
|
|
9
9
|
contentContainer;
|
|
10
|
-
|
|
10
|
+
verboseMode;
|
|
11
|
+
lastContent = "";
|
|
12
|
+
isThinking = false;
|
|
13
|
+
thinkingComplete = false;
|
|
14
|
+
constructor(message, options) {
|
|
11
15
|
super();
|
|
16
|
+
this.verboseMode = options?.verboseMode ?? false;
|
|
12
17
|
// Container for text/thinking content
|
|
13
18
|
this.contentContainer = new Container();
|
|
14
19
|
this.addChild(this.contentContainer);
|
|
@@ -17,17 +22,44 @@ export class ThinkingBlockComponent extends Container {
|
|
|
17
22
|
}
|
|
18
23
|
}
|
|
19
24
|
updateContent(message) {
|
|
25
|
+
this.lastContent = message.content;
|
|
26
|
+
this.isThinking = true;
|
|
27
|
+
this.renderContent();
|
|
28
|
+
}
|
|
29
|
+
endThinking() {
|
|
30
|
+
this.isThinking = false;
|
|
31
|
+
this.thinkingComplete = true;
|
|
32
|
+
this.renderContent();
|
|
33
|
+
}
|
|
34
|
+
setVerboseMode(verboseMode) {
|
|
35
|
+
this.verboseMode = verboseMode;
|
|
36
|
+
this.renderContent();
|
|
37
|
+
}
|
|
38
|
+
renderContent() {
|
|
20
39
|
// Clear content container
|
|
21
40
|
this.contentContainer.clear();
|
|
22
|
-
|
|
23
|
-
|
|
41
|
+
const content = this.lastContent;
|
|
42
|
+
if (this.verboseMode) {
|
|
43
|
+
// Verbose mode: show full thinking content
|
|
44
|
+
this.contentContainer.addChild(new Markdown(style.dim(content.trim()), {
|
|
45
|
+
paddingX: 1,
|
|
46
|
+
paddingY: 0,
|
|
47
|
+
}));
|
|
24
48
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
49
|
+
else if (this.isThinking) {
|
|
50
|
+
// Non-verbose mode: show animated "Thinking"
|
|
51
|
+
this.contentContainer.addChild(new Text(style.dim(`Thinking ${generateRandomChars(10, lowercase)}`), 1, 0));
|
|
52
|
+
}
|
|
53
|
+
else if (this.thinkingComplete) {
|
|
54
|
+
// Non-verbose mode: show "Thinking ✓" when complete
|
|
55
|
+
this.contentContainer.addChild(new Text(style.dim("Thinking ✓"), 1, 0));
|
|
56
|
+
}
|
|
57
|
+
// If not verbose and not thinking, show nothing
|
|
32
58
|
}
|
|
33
59
|
}
|
|
60
|
+
// const uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
61
|
+
const lowercase = "abcdefghijklmnopqrstuvwxyz";
|
|
62
|
+
function generateRandomChars(length, charset) {
|
|
63
|
+
const chars = charset ?? "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
64
|
+
return Array.from({ length }, () => chars[Math.floor(Math.random() * chars.length)]).join("");
|
|
65
|
+
}
|
|
@@ -5,8 +5,12 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
5
5
|
private loaderComponent;
|
|
6
6
|
private toolName;
|
|
7
7
|
private events;
|
|
8
|
-
|
|
8
|
+
private verboseMode;
|
|
9
|
+
constructor(events: ToolEvent[], options?: {
|
|
10
|
+
verboseMode?: boolean;
|
|
11
|
+
});
|
|
9
12
|
update(events: ToolEvent[]): void;
|
|
13
|
+
setVerboseMode(verboseMode: boolean): void;
|
|
10
14
|
private renderDisplay;
|
|
11
15
|
private getToolCallStartComponent;
|
|
12
16
|
private handleToolStartMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../source/tui/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAA6B,MAAM,aAAa,CAAC;AAWnE,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAc;
|
|
1
|
+
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../../source/tui/components/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAA6B,MAAM,aAAa,CAAC;AAWnE,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAU;gBAEjB,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAcpE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE;IAK1B,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAK1C,OAAO,CAAC,aAAa;IAiDrB,OAAO,CAAC,yBAAyB;IA6CjC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,aAAa;CActB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { capitalize } from "../../formatting.js";
|
|
2
1
|
import style from "../../terminal/style.js";
|
|
2
|
+
import { capitalize } from "../../utils/formatting.js";
|
|
3
3
|
import { Container, Spacer, Text } from "../index.js";
|
|
4
4
|
const bgColor = {
|
|
5
5
|
r: 52,
|
|
@@ -11,11 +11,13 @@ export class ToolExecutionComponent extends Container {
|
|
|
11
11
|
loaderComponent;
|
|
12
12
|
toolName;
|
|
13
13
|
events;
|
|
14
|
-
|
|
14
|
+
verboseMode;
|
|
15
|
+
constructor(events, options) {
|
|
15
16
|
super();
|
|
16
17
|
this.loaderComponent = null;
|
|
17
18
|
this.toolName = events[0].name;
|
|
18
19
|
this.events = events;
|
|
20
|
+
this.verboseMode = options?.verboseMode ?? false;
|
|
19
21
|
// Container for text/thinking content
|
|
20
22
|
this.contentContainer = new Container();
|
|
21
23
|
this.addChild(this.contentContainer);
|
|
@@ -23,16 +25,20 @@ export class ToolExecutionComponent extends Container {
|
|
|
23
25
|
}
|
|
24
26
|
update(events) {
|
|
25
27
|
this.events = events;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
this.renderDisplay();
|
|
29
|
+
}
|
|
30
|
+
setVerboseMode(verboseMode) {
|
|
31
|
+
this.verboseMode = verboseMode;
|
|
28
32
|
this.renderDisplay();
|
|
29
33
|
}
|
|
30
34
|
renderDisplay() {
|
|
35
|
+
// Clear content container before rendering
|
|
36
|
+
this.contentContainer.clear();
|
|
37
|
+
// Add spacer with background color for visual separation
|
|
38
|
+
this.contentContainer.addChild(new Spacer(1, bgColor));
|
|
31
39
|
// Build display from complete event history with proper ordering
|
|
32
40
|
const processedEvents = this.processEventsInOrder();
|
|
33
41
|
const currentStatus = processedEvents.at(-1)?.type ?? "tool-call-start";
|
|
34
|
-
this.contentContainer.addChild(new Spacer(1));
|
|
35
|
-
this.contentContainer.addChild(new Spacer(1, bgColor));
|
|
36
42
|
for (let i = 0; i < processedEvents.length; i++) {
|
|
37
43
|
const event = processedEvents[i];
|
|
38
44
|
const eventType = event.type;
|
|
@@ -41,21 +47,24 @@ export class ToolExecutionComponent extends Container {
|
|
|
41
47
|
this.getToolCallStartComponent(event, currentStatus);
|
|
42
48
|
break;
|
|
43
49
|
case "tool-call-end":
|
|
44
|
-
//
|
|
45
|
-
if (event.msg) {
|
|
50
|
+
// Only render output in verbose mode
|
|
51
|
+
if (this.verboseMode && event.msg) {
|
|
46
52
|
this.contentContainer.addChild(this.renderOutputDisplay(event.msg));
|
|
47
53
|
}
|
|
48
54
|
break;
|
|
49
55
|
case "tool-call-error":
|
|
50
|
-
|
|
56
|
+
// Only render error in verbose mode
|
|
57
|
+
if (this.verboseMode) {
|
|
58
|
+
this.contentContainer.addChild(new Text(`└ ${this.handleToolErrorMessage(event.msg)}`, 1, 0, bgColor));
|
|
59
|
+
}
|
|
51
60
|
break;
|
|
52
61
|
default: {
|
|
53
62
|
eventType;
|
|
54
63
|
}
|
|
55
64
|
}
|
|
56
65
|
}
|
|
66
|
+
// Add trailing spacer with background color
|
|
57
67
|
this.contentContainer.addChild(new Spacer(1, bgColor));
|
|
58
|
-
this.contentContainer.addChild(new Spacer(1));
|
|
59
68
|
}
|
|
60
69
|
getToolCallStartComponent(event, currentStatus) {
|
|
61
70
|
switch (currentStatus) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-message.d.ts","sourceRoot":"","sources":["../../../source/tui/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"user-message.d.ts","sourceRoot":"","sources":["../../../source/tui/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAW;gBAEf,IAAI,EAAE,MAAM;CAazB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Container } from "../tui.js";
|
|
2
2
|
import { Markdown } from "./markdown.js";
|
|
3
|
-
import { Spacer } from "./spacer.js";
|
|
4
3
|
/**
|
|
5
4
|
* Component that renders a user message
|
|
6
5
|
*/
|
|
@@ -8,7 +7,6 @@ export class UserMessageComponent extends Container {
|
|
|
8
7
|
markdown;
|
|
9
8
|
constructor(text) {
|
|
10
9
|
super();
|
|
11
|
-
this.addChild(new Spacer(1));
|
|
12
10
|
// User messages with dark gray background
|
|
13
11
|
this.markdown = new Markdown(text, {
|
|
14
12
|
customBgRgb: {
|
|
@@ -18,6 +16,5 @@ export class UserMessageComponent extends Container {
|
|
|
18
16
|
},
|
|
19
17
|
});
|
|
20
18
|
this.addChild(this.markdown);
|
|
21
|
-
this.addChild(new Spacer(1));
|
|
22
19
|
}
|
|
23
20
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { dedent } from "../../dedent.js";
|
|
2
1
|
import style from "../../terminal/style.js";
|
|
3
|
-
import {
|
|
2
|
+
import { dedent } from "../../utils/dedent.js";
|
|
3
|
+
import { getPackageVersion } from "../../utils/version.js";
|
|
4
4
|
import { BoxComponent } from "./box.js";
|
|
5
5
|
export class Welcome {
|
|
6
6
|
options;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Terminal } from "./terminal.ts";
|
|
2
|
+
export interface EditorLaunchOptions {
|
|
3
|
+
initialContent?: string;
|
|
4
|
+
postfix?: string;
|
|
5
|
+
terminal: Terminal;
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
}
|
|
8
|
+
export interface EditorLaunchResult {
|
|
9
|
+
content: string;
|
|
10
|
+
aborted: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function launchEditor(options: EditorLaunchOptions): Promise<EditorLaunchResult>;
|
|
13
|
+
//# sourceMappingURL=editor-launcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-launcher.d.ts","sourceRoot":"","sources":["../../source/tui/editor-launcher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA0C7B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
export async function launchEditor(options) {
|
|
6
|
+
const { initialContent = "", postfix = ".txt", terminal, signal } = options;
|
|
7
|
+
if (signal?.aborted) {
|
|
8
|
+
return { content: "", aborted: true };
|
|
9
|
+
}
|
|
10
|
+
const tempDir = await mkdtemp(join(tmpdir(), "acai-editor-"));
|
|
11
|
+
const tempFile = join(tempDir, `edit${postfix}`);
|
|
12
|
+
let enteredExternalMode = false;
|
|
13
|
+
try {
|
|
14
|
+
await writeFile(tempFile, initialContent);
|
|
15
|
+
terminal.enterExternalMode();
|
|
16
|
+
enteredExternalMode = true;
|
|
17
|
+
const editor = process.env["EDITOR"] || process.env["VISUAL"] || "vi";
|
|
18
|
+
const result = spawnSync(editor, [tempFile], {
|
|
19
|
+
stdio: "inherit",
|
|
20
|
+
});
|
|
21
|
+
if (signal?.aborted) {
|
|
22
|
+
return { content: "", aborted: true };
|
|
23
|
+
}
|
|
24
|
+
if (result.error) {
|
|
25
|
+
throw result.error;
|
|
26
|
+
}
|
|
27
|
+
if (result.status !== 0) {
|
|
28
|
+
throw new Error(`Editor exited with code ${result.status}`);
|
|
29
|
+
}
|
|
30
|
+
const content = await readFile(tempFile, "utf-8");
|
|
31
|
+
return { content, aborted: false };
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
if (enteredExternalMode) {
|
|
35
|
+
terminal.exitExternalMode();
|
|
36
|
+
}
|
|
37
|
+
await rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
38
|
+
}
|
|
39
|
+
}
|
package/dist/tui/index.d.ts
CHANGED
|
@@ -14,7 +14,9 @@ export { Spacer } from "./components/spacer.ts";
|
|
|
14
14
|
export { TableComponent } from "./components/table.ts";
|
|
15
15
|
export { Text } from "./components/text.ts";
|
|
16
16
|
export { UserMessageComponent } from "./components/user-message.ts";
|
|
17
|
-
export {
|
|
17
|
+
export type { EditorLaunchOptions, EditorLaunchResult, } from "./editor-launcher.ts";
|
|
18
|
+
export { launchEditor } from "./editor-launcher.ts";
|
|
19
|
+
export { ProcessTerminal, type ProcessTerminalOptions } from "./terminal.ts";
|
|
18
20
|
export { Container, TUI } from "./tui.ts";
|
|
19
21
|
export { visibleWidth } from "./utils.ts";
|
|
20
22
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/tui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/tui/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAEvG,YAAY,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/tui/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAEvG,YAAY,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,YAAY,EACV,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/tui/index.js
CHANGED
|
@@ -15,6 +15,7 @@ export { Spacer } from "./components/spacer.js";
|
|
|
15
15
|
export { TableComponent } from "./components/table.js";
|
|
16
16
|
export { Text } from "./components/text.js";
|
|
17
17
|
export { UserMessageComponent } from "./components/user-message.js";
|
|
18
|
+
export { launchEditor } from "./editor-launcher.js";
|
|
18
19
|
// Terminal interface and implementations
|
|
19
20
|
export { ProcessTerminal } from "./terminal.js";
|
|
20
21
|
export { Container, TUI } from "./tui.js";
|
package/dist/tui/terminal.d.ts
CHANGED
|
@@ -13,9 +13,20 @@ export interface Terminal {
|
|
|
13
13
|
clearLine(): void;
|
|
14
14
|
clearFromCursor(): void;
|
|
15
15
|
clearScreen(): void;
|
|
16
|
+
enterExternalMode(): void;
|
|
17
|
+
exitExternalMode(): void;
|
|
18
|
+
background(): void;
|
|
19
|
+
isInExternalMode(): boolean;
|
|
20
|
+
onResume(callback: () => void): void;
|
|
21
|
+
}
|
|
22
|
+
export interface ProcessTerminalOptions {
|
|
23
|
+
useTty?: boolean;
|
|
16
24
|
}
|
|
17
25
|
/**
|
|
18
26
|
* Real terminal using process.stdin/stdout
|
|
27
|
+
*
|
|
28
|
+
* When useTty is true (for piped stdin scenarios), input is read from /dev/tty
|
|
29
|
+
* instead of process.stdin, allowing interactive input after piped content.
|
|
19
30
|
*/
|
|
20
31
|
export declare class ProcessTerminal implements Terminal {
|
|
21
32
|
private wasRaw;
|
|
@@ -23,7 +34,18 @@ export declare class ProcessTerminal implements Terminal {
|
|
|
23
34
|
private boundInputListener?;
|
|
24
35
|
private boundResizeListener?;
|
|
25
36
|
private stopped;
|
|
37
|
+
private inExternalMode;
|
|
38
|
+
private resumeCallback?;
|
|
39
|
+
private inputStream;
|
|
40
|
+
private ttyFd?;
|
|
41
|
+
private useTty;
|
|
42
|
+
constructor(options?: ProcessTerminalOptions);
|
|
43
|
+
private handleSigCont;
|
|
26
44
|
start(onInput: (data: string) => void, onResize: () => void): void;
|
|
45
|
+
private attachListeners;
|
|
46
|
+
private detachListeners;
|
|
47
|
+
private setupCrashCleanup;
|
|
48
|
+
private closeTtyFd;
|
|
27
49
|
stop(): void;
|
|
28
50
|
write(data: string): void;
|
|
29
51
|
get columns(): number;
|
|
@@ -34,5 +56,10 @@ export declare class ProcessTerminal implements Terminal {
|
|
|
34
56
|
clearLine(): void;
|
|
35
57
|
clearFromCursor(): void;
|
|
36
58
|
clearScreen(): void;
|
|
59
|
+
enterExternalMode(): void;
|
|
60
|
+
exitExternalMode(): void;
|
|
61
|
+
background(): void;
|
|
62
|
+
isInExternalMode(): boolean;
|
|
63
|
+
onResume(callback: () => void): void;
|
|
37
64
|
}
|
|
38
65
|
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../source/tui/terminal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../source/tui/terminal.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,QAAQ;IAEvB,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAGnE,IAAI,IAAI,IAAI,CAAC;IAGb,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1B,IAAI,OAAO,IAAI,MAAM,CAAC;IACtB,IAAI,IAAI,IAAI,MAAM,CAAC;IAGnB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,UAAU,IAAI,IAAI,CAAC;IACnB,UAAU,IAAI,IAAI,CAAC;IAGnB,SAAS,IAAI,IAAI,CAAC;IAClB,eAAe,IAAI,IAAI,CAAC;IACxB,WAAW,IAAI,IAAI,CAAC;IAGpB,iBAAiB,IAAI,IAAI,CAAC;IAC1B,gBAAgB,IAAI,IAAI,CAAC;IACzB,UAAU,IAAI,IAAI,CAAC;IACnB,gBAAgB,IAAI,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,kBAAkB,CAAC,CAAkC;IAC7D,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAU;gBAEZ,OAAO,GAAE,sBAA2B;IAKhD,OAAO,CAAC,aAAa,CAInB;IAEF,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAqDlE,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,UAAU;IAWlB,IAAI,IAAI,IAAI;IAiCZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW3B,UAAU,IAAI,IAAI;IAIlB,UAAU,IAAI,IAAI;IAIlB,SAAS,IAAI,IAAI;IAIjB,eAAe,IAAI,IAAI;IAIvB,WAAW,IAAI,IAAI;IAInB,iBAAiB,IAAI,IAAI;IAkBzB,gBAAgB,IAAI,IAAI;IAsBxB,UAAU,IAAI,IAAI;IAKlB,gBAAgB,IAAI,OAAO;IAI3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAGrC"}
|