@travisennis/acai 0.0.5 → 0.0.7
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 +190 -19
- package/bin/acai-wrapper.js +26 -0
- package/dist/agent/index.d.ts +132 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +434 -0
- package/dist/api/exa/index.js +1 -1
- package/dist/cli.d.ts +4 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +67 -40
- package/dist/commands/add-directory-command.d.ts +3 -0
- package/dist/commands/add-directory-command.d.ts.map +1 -0
- package/dist/commands/add-directory-command.js +54 -0
- package/dist/commands/application-log-command.d.ts +1 -1
- package/dist/commands/application-log-command.d.ts.map +1 -1
- package/dist/commands/application-log-command.js +18 -20
- package/dist/commands/clear-command.d.ts +1 -1
- package/dist/commands/clear-command.d.ts.map +1 -1
- package/dist/commands/clear-command.js +7 -3
- package/dist/commands/compact-command.d.ts.map +1 -1
- package/dist/commands/compact-command.js +9 -5
- package/dist/commands/context-command.d.ts +3 -0
- package/dist/commands/context-command.d.ts.map +1 -0
- package/dist/commands/context-command.js +124 -0
- package/dist/commands/copy-command.d.ts.map +1 -1
- package/dist/commands/copy-command.js +14 -5
- package/dist/commands/edit-command.d.ts +1 -1
- package/dist/commands/edit-command.d.ts.map +1 -1
- package/dist/commands/edit-command.js +21 -34
- package/dist/commands/edit-prompt-command.d.ts +1 -1
- package/dist/commands/edit-prompt-command.d.ts.map +1 -1
- package/dist/commands/edit-prompt-command.js +18 -15
- package/dist/commands/exit-command.d.ts +1 -4
- package/dist/commands/exit-command.d.ts.map +1 -1
- package/dist/commands/exit-command.js +9 -5
- package/dist/commands/files-command.d.ts +1 -1
- package/dist/commands/files-command.d.ts.map +1 -1
- package/dist/commands/files-command.js +20 -16
- package/dist/commands/generate-rules-command.d.ts +1 -1
- package/dist/commands/generate-rules-command.d.ts.map +1 -1
- package/dist/commands/generate-rules-command.js +307 -39
- package/dist/commands/handoff-command.d.ts +3 -0
- package/dist/commands/handoff-command.d.ts.map +1 -0
- package/dist/commands/handoff-command.js +191 -0
- package/dist/commands/health-command.d.ts +1 -1
- package/dist/commands/health-command.d.ts.map +1 -1
- package/dist/commands/health-command.js +49 -27
- package/dist/commands/help-command.d.ts +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +25 -5
- package/dist/commands/history-command.d.ts +3 -0
- package/dist/commands/history-command.d.ts.map +1 -0
- package/dist/commands/history-command.js +458 -0
- package/dist/commands/init-command.d.ts +1 -1
- package/dist/commands/init-command.d.ts.map +1 -1
- package/dist/commands/init-command.js +40 -22
- package/dist/commands/last-log-command.d.ts +1 -1
- package/dist/commands/last-log-command.d.ts.map +1 -1
- package/dist/commands/last-log-command.js +15 -15
- package/dist/commands/list-directories-command.d.ts +3 -0
- package/dist/commands/list-directories-command.d.ts.map +1 -0
- package/dist/commands/list-directories-command.js +35 -0
- package/dist/commands/list-tools-command.d.ts.map +1 -1
- package/dist/commands/list-tools-command.js +61 -21
- package/dist/commands/manager.d.ts +9 -4
- package/dist/commands/manager.d.ts.map +1 -1
- package/dist/commands/manager.js +64 -39
- package/dist/commands/model-command.d.ts.map +1 -1
- package/dist/commands/model-command.js +201 -66
- package/dist/commands/paste-command.d.ts +1 -1
- package/dist/commands/paste-command.d.ts.map +1 -1
- package/dist/commands/paste-command.js +23 -9
- package/dist/commands/pickup-command.d.ts +3 -0
- package/dist/commands/pickup-command.d.ts.map +1 -0
- package/dist/commands/pickup-command.js +109 -0
- package/dist/commands/prompt-command.d.ts +19 -1
- package/dist/commands/prompt-command.d.ts.map +1 -1
- package/dist/commands/prompt-command.js +191 -98
- package/dist/commands/remove-directory-command.d.ts +3 -0
- package/dist/commands/remove-directory-command.d.ts.map +1 -0
- package/dist/commands/remove-directory-command.js +55 -0
- package/dist/commands/reset-command.d.ts +1 -1
- package/dist/commands/reset-command.d.ts.map +1 -1
- package/dist/commands/reset-command.js +8 -5
- package/dist/commands/rules-command.d.ts +1 -1
- package/dist/commands/rules-command.d.ts.map +1 -1
- package/dist/commands/rules-command.js +25 -22
- package/dist/commands/save-command.d.ts +1 -1
- package/dist/commands/save-command.d.ts.map +1 -1
- package/dist/commands/save-command.js +8 -3
- package/dist/commands/shell-command.d.ts.map +1 -1
- package/dist/commands/shell-command.js +45 -24
- package/dist/commands/types.d.ts +9 -7
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/usage-command.d.ts +1 -1
- package/dist/commands/usage-command.d.ts.map +1 -1
- package/dist/commands/usage-command.js +18 -7
- package/dist/config.d.ts +21 -11
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +90 -63
- package/dist/execution/index.d.ts +17 -2
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +62 -20
- package/dist/formatting.d.ts +127 -0
- package/dist/formatting.d.ts.map +1 -1
- package/dist/formatting.js +201 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +263 -102
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +47 -18
- package/dist/mentions.d.ts +2 -1
- package/dist/mentions.d.ts.map +1 -1
- package/dist/mentions.js +16 -1
- package/dist/messages.d.ts +11 -0
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +122 -21
- package/dist/middleware/cache.d.ts +3 -0
- package/dist/middleware/cache.d.ts.map +1 -0
- package/dist/middleware/cache.js +53 -0
- package/dist/middleware/index.d.ts +1 -0
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +1 -0
- package/dist/models/ai-config.d.ts +4 -2
- package/dist/models/ai-config.d.ts.map +1 -1
- package/dist/models/ai-config.js +12 -2
- package/dist/models/anthropic-provider.d.ts.map +1 -1
- package/dist/models/anthropic-provider.js +3 -67
- package/dist/models/deepseek-provider.d.ts.map +1 -1
- package/dist/models/deepseek-provider.js +0 -2
- package/dist/models/google-provider.d.ts.map +1 -1
- package/dist/models/google-provider.js +0 -3
- package/dist/models/groq-provider.d.ts.map +1 -1
- package/dist/models/groq-provider.js +0 -1
- package/dist/models/manager.d.ts +2 -1
- package/dist/models/manager.d.ts.map +1 -1
- package/dist/models/manager.js +26 -2
- package/dist/models/openai-provider.d.ts.map +1 -1
- package/dist/models/openai-provider.js +0 -4
- package/dist/models/openrouter-provider.d.ts +16 -22
- package/dist/models/openrouter-provider.d.ts.map +1 -1
- package/dist/models/openrouter-provider.js +175 -236
- package/dist/models/providers.d.ts +4 -14
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/models/providers.js +1 -57
- package/dist/models/xai-provider.d.ts.map +1 -1
- package/dist/models/xai-provider.js +0 -2
- package/dist/prompts.d.ts +10 -4
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +447 -70
- package/dist/repl/project-status-line.d.ts +3 -0
- package/dist/repl/project-status-line.d.ts.map +1 -0
- package/dist/repl/project-status-line.js +61 -0
- package/dist/repl/tool-call-repair.d.ts.map +1 -1
- package/dist/repl/tool-call-repair.js +8 -4
- package/dist/repl-new.d.ts +51 -0
- package/dist/repl-new.d.ts.map +1 -0
- package/dist/repl-new.js +354 -0
- package/dist/skills.d.ts +20 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +192 -0
- package/dist/terminal/control.d.ts +55 -0
- package/dist/terminal/control.d.ts.map +1 -0
- package/dist/terminal/control.js +109 -0
- package/dist/terminal/default-theme.d.ts +1 -1
- package/dist/terminal/default-theme.d.ts.map +1 -1
- package/dist/terminal/default-theme.js +24 -28
- package/dist/terminal/formatting.d.ts +23 -25
- package/dist/terminal/formatting.d.ts.map +1 -1
- package/dist/terminal/formatting.js +35 -52
- package/dist/terminal/highlight/index.d.ts.map +1 -1
- package/dist/terminal/highlight/index.js +3 -6
- package/dist/terminal/highlight/theme.d.ts.map +1 -1
- package/dist/terminal/highlight/theme.js +2 -6
- package/dist/terminal/index.d.ts +2 -94
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/index.js +2 -370
- package/dist/terminal/markdown.js +10 -5
- package/dist/terminal/select-prompt.d.ts +2 -2
- package/dist/terminal/select-prompt.d.ts.map +1 -1
- package/dist/terminal/select-prompt.js +47 -39
- package/dist/terminal/strip-ansi.js +4 -4
- package/dist/terminal/table/cell.d.ts +114 -0
- package/dist/terminal/table/cell.d.ts.map +1 -0
- package/dist/terminal/table/cell.js +407 -0
- package/dist/terminal/table/debug.d.ts +15 -0
- package/dist/terminal/table/debug.d.ts.map +1 -0
- package/dist/terminal/table/debug.js +32 -0
- package/dist/terminal/table/index.d.ts +3 -0
- package/dist/terminal/table/index.d.ts.map +1 -0
- package/dist/terminal/table/index.js +2 -0
- package/dist/terminal/table/layout-manager.d.ts +27 -0
- package/dist/terminal/table/layout-manager.d.ts.map +1 -0
- package/dist/terminal/table/layout-manager.js +257 -0
- package/dist/terminal/table/table.d.ts +9 -0
- package/dist/terminal/table/table.d.ts.map +1 -0
- package/dist/terminal/table/table.js +97 -0
- package/dist/terminal/table/utils.d.ts +63 -0
- package/dist/terminal/table/utils.d.ts.map +1 -0
- package/dist/terminal/table/utils.js +326 -0
- package/dist/tokens/threshold.d.ts +20 -0
- package/dist/tokens/threshold.d.ts.map +1 -0
- package/dist/tokens/threshold.js +67 -0
- package/dist/tools/advanced-edit-file.d.ts +69 -0
- package/dist/tools/advanced-edit-file.d.ts.map +1 -0
- package/dist/tools/advanced-edit-file.js +285 -0
- package/dist/tools/agent.d.ts +16 -5
- package/dist/tools/agent.d.ts.map +1 -1
- package/dist/tools/agent.js +86 -59
- package/dist/tools/bash.d.ts +23 -12
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +243 -128
- package/dist/tools/batch.d.ts +34 -0
- package/dist/tools/batch.d.ts.map +1 -0
- package/dist/tools/batch.js +174 -0
- package/dist/tools/code-interpreter.d.ts +21 -9
- package/dist/tools/code-interpreter.d.ts.map +1 -1
- package/dist/tools/code-interpreter.js +151 -134
- package/dist/tools/delete-file.d.ts +17 -10
- package/dist/tools/delete-file.d.ts.map +1 -1
- package/dist/tools/delete-file.js +60 -97
- package/dist/tools/directory-tree.d.ts +17 -12
- package/dist/tools/directory-tree.d.ts.map +1 -1
- package/dist/tools/directory-tree.js +57 -48
- package/dist/tools/dynamic-tool-loader.d.ts +16 -10
- package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-loader.js +122 -130
- package/dist/tools/dynamic-tool-parser.d.ts +1 -0
- package/dist/tools/dynamic-tool-parser.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-parser.js +1 -0
- package/dist/tools/edit-file.d.ts +35 -15
- package/dist/tools/edit-file.d.ts.map +1 -1
- package/dist/tools/edit-file.js +127 -114
- package/dist/tools/glob.d.ts +36 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +154 -0
- package/dist/tools/grep.d.ts +73 -12
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +425 -165
- package/dist/tools/index.d.ts +220 -126
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +284 -135
- package/dist/tools/llm-edit-fixer.d.ts +24 -0
- package/dist/tools/llm-edit-fixer.d.ts.map +1 -0
- package/dist/tools/llm-edit-fixer.js +136 -0
- package/dist/tools/move-file.d.ts +19 -7
- package/dist/tools/move-file.d.ts.map +1 -1
- package/dist/tools/move-file.js +48 -34
- package/dist/tools/read-file.d.ts +47 -9
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +84 -70
- package/dist/tools/read-multiple-files.d.ts +17 -6
- package/dist/tools/read-multiple-files.d.ts.map +1 -1
- package/dist/tools/read-multiple-files.js +132 -72
- package/dist/tools/save-file.d.ts +45 -12
- package/dist/tools/save-file.d.ts.map +1 -1
- package/dist/tools/save-file.js +76 -101
- package/dist/tools/think.d.ts +15 -7
- package/dist/tools/think.d.ts.map +1 -1
- package/dist/tools/think.js +34 -20
- package/dist/tools/types.d.ts +8 -10
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +9 -0
- package/dist/tools/utils.d.ts +14 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +16 -0
- package/dist/tools/web-fetch.d.ts +11 -4
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +39 -38
- package/dist/tools/web-search.d.ts +15 -6
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +64 -31
- package/dist/tui/autocomplete.d.ts +44 -0
- package/dist/tui/autocomplete.d.ts.map +1 -0
- package/dist/tui/autocomplete.js +466 -0
- package/dist/tui/components/assistant-message.d.ts +18 -0
- package/dist/tui/components/assistant-message.d.ts.map +1 -0
- package/dist/tui/components/assistant-message.js +29 -0
- package/dist/tui/components/box.d.ts +20 -0
- package/dist/tui/components/box.d.ts.map +1 -0
- package/dist/tui/components/box.js +81 -0
- package/dist/tui/components/editor.d.ts +106 -0
- package/dist/tui/components/editor.d.ts.map +1 -0
- package/dist/tui/components/editor.js +1220 -0
- package/dist/tui/components/footer.d.ts +12 -0
- package/dist/tui/components/footer.d.ts.map +1 -0
- package/dist/tui/components/footer.js +209 -0
- package/dist/tui/components/header.d.ts +21 -0
- package/dist/tui/components/header.d.ts.map +1 -0
- package/dist/tui/components/header.js +63 -0
- package/dist/tui/components/input.d.ts +14 -0
- package/dist/tui/components/input.d.ts.map +1 -0
- package/dist/tui/components/input.js +122 -0
- package/dist/tui/components/loader.d.ts +23 -0
- package/dist/tui/components/loader.d.ts.map +1 -0
- package/dist/tui/components/loader.js +45 -0
- package/dist/tui/components/markdown.d.ts +106 -0
- package/dist/tui/components/markdown.d.ts.map +1 -0
- package/dist/tui/components/markdown.js +586 -0
- package/dist/tui/components/modal.d.ts +29 -0
- package/dist/tui/components/modal.d.ts.map +1 -0
- package/dist/tui/components/modal.js +263 -0
- package/dist/tui/components/progress-bar.d.ts +19 -0
- package/dist/tui/components/progress-bar.d.ts.map +1 -0
- package/dist/tui/components/progress-bar.js +78 -0
- package/dist/tui/components/prompt-status.d.ts +17 -0
- package/dist/tui/components/prompt-status.d.ts.map +1 -0
- package/dist/tui/components/prompt-status.js +26 -0
- package/dist/tui/components/select-list.d.ts +48 -0
- package/dist/tui/components/select-list.d.ts.map +1 -0
- package/dist/tui/components/select-list.js +207 -0
- package/dist/tui/components/spacer.d.ts +16 -0
- package/dist/tui/components/spacer.d.ts.map +1 -0
- package/dist/tui/components/spacer.js +27 -0
- package/dist/tui/components/table.d.ts +27 -0
- package/dist/tui/components/table.d.ts.map +1 -0
- package/dist/tui/components/table.js +125 -0
- package/dist/tui/components/text.d.ts +26 -0
- package/dist/tui/components/text.d.ts.map +1 -0
- package/dist/tui/components/text.js +143 -0
- package/dist/tui/components/thinking-block.d.ts +14 -0
- package/dist/tui/components/thinking-block.d.ts.map +1 -0
- package/dist/tui/components/thinking-block.js +33 -0
- package/dist/tui/components/tool-execution.d.ts +21 -0
- package/dist/tui/components/tool-execution.d.ts.map +1 -0
- package/dist/tui/components/tool-execution.js +161 -0
- package/dist/tui/components/user-message.d.ts +9 -0
- package/dist/tui/components/user-message.d.ts.map +1 -0
- package/dist/tui/components/user-message.js +23 -0
- package/dist/tui/components/welcome.d.ts +6 -0
- package/dist/tui/components/welcome.d.ts.map +1 -0
- package/dist/tui/components/welcome.js +30 -0
- package/dist/tui/index.d.ts +18 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +22 -0
- package/dist/tui/terminal.d.ts +38 -0
- package/dist/tui/terminal.d.ts.map +1 -0
- package/dist/tui/terminal.js +94 -0
- package/dist/tui/tui.d.ts +69 -0
- package/dist/tui/tui.d.ts.map +1 -0
- package/dist/tui/tui.js +204 -0
- package/dist/tui/utils.d.ts +24 -0
- package/dist/tui/utils.d.ts.map +1 -0
- package/dist/tui/utils.js +111 -0
- package/dist/utils/bash.d.ts +7 -0
- package/dist/utils/bash.d.ts.map +1 -0
- package/dist/{tools/bash-utils.js → utils/bash.js} +31 -12
- package/dist/utils/{filesystem.d.ts → filesystem/operations.d.ts} +1 -1
- package/dist/utils/filesystem/operations.d.ts.map +1 -0
- package/dist/utils/filesystem/security.d.ts +9 -0
- package/dist/utils/filesystem/security.d.ts.map +1 -0
- package/dist/{tools/filesystem-utils.js → utils/filesystem/security.js} +93 -21
- package/dist/utils/funcs.d.ts +6 -0
- package/dist/utils/funcs.d.ts.map +1 -0
- package/dist/utils/funcs.js +6 -0
- package/dist/utils/generators.d.ts +3 -0
- package/dist/utils/generators.d.ts.map +1 -0
- package/dist/utils/generators.js +25 -0
- package/dist/{tools/git-utils.d.ts → utils/git.d.ts} +1 -1
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/{tools/git-utils.js → utils/git.js} +0 -6
- package/dist/utils/glob.js +1 -1
- package/dist/utils/iterables.d.ts +2 -0
- package/dist/utils/iterables.d.ts.map +1 -0
- package/dist/utils/iterables.js +6 -0
- package/dist/utils/{zod-utils.d.ts → zod.d.ts} +1 -1
- package/dist/utils/zod.d.ts.map +1 -0
- package/package.json +21 -21
- package/dist/conversation-analyzer.d.ts +0 -11
- package/dist/conversation-analyzer.d.ts.map +0 -1
- package/dist/conversation-analyzer.js +0 -88
- package/dist/repl/display-tool-messages.d.ts +0 -4
- package/dist/repl/display-tool-messages.d.ts.map +0 -1
- package/dist/repl/display-tool-messages.js +0 -55
- package/dist/repl/display-tool-use.d.ts +0 -14
- package/dist/repl/display-tool-use.d.ts.map +0 -1
- package/dist/repl/display-tool-use.js +0 -63
- package/dist/repl/get-prompt-header.d.ts +0 -8
- package/dist/repl/get-prompt-header.d.ts.map +0 -1
- package/dist/repl/get-prompt-header.js +0 -38
- package/dist/repl-prompt.d.ts +0 -15
- package/dist/repl-prompt.d.ts.map +0 -1
- package/dist/repl-prompt.js +0 -147
- package/dist/repl.d.ts +0 -31
- package/dist/repl.d.ts.map +0 -1
- package/dist/repl.js +0 -310
- package/dist/terminal/checkbox-prompt.d.ts +0 -36
- package/dist/terminal/checkbox-prompt.d.ts.map +0 -1
- package/dist/terminal/checkbox-prompt.js +0 -362
- package/dist/terminal/editor-prompt.d.ts +0 -10
- package/dist/terminal/editor-prompt.d.ts.map +0 -1
- package/dist/terminal/editor-prompt.js +0 -61
- package/dist/terminal/errors.d.ts +0 -19
- package/dist/terminal/errors.d.ts.map +0 -1
- package/dist/terminal/errors.js +0 -37
- package/dist/terminal/input-prompt.d.ts +0 -16
- package/dist/terminal/input-prompt.d.ts.map +0 -1
- package/dist/terminal/input-prompt.js +0 -181
- package/dist/terminal/search-prompt.d.ts +0 -20
- package/dist/terminal/search-prompt.d.ts.map +0 -1
- package/dist/terminal/search-prompt.js +0 -279
- package/dist/terminal/types.d.ts +0 -35
- package/dist/terminal/types.d.ts.map +0 -1
- package/dist/terminal/types.js +0 -1
- package/dist/tokens/manage-output.d.ts +0 -34
- package/dist/tokens/manage-output.d.ts.map +0 -1
- package/dist/tokens/manage-output.js +0 -44
- package/dist/tool-executor.d.ts +0 -28
- package/dist/tool-executor.d.ts.map +0 -1
- package/dist/tool-executor.js +0 -74
- package/dist/tools/bash-utils.d.ts +0 -7
- package/dist/tools/bash-utils.d.ts.map +0 -1
- package/dist/tools/file-editing-utils.d.ts +0 -2
- package/dist/tools/file-editing-utils.d.ts.map +0 -1
- package/dist/tools/file-editing-utils.js +0 -135
- package/dist/tools/filesystem-utils.d.ts +0 -7
- package/dist/tools/filesystem-utils.d.ts.map +0 -1
- package/dist/tools/git-utils.d.ts.map +0 -1
- package/dist/utils/filesystem.d.ts.map +0 -1
- package/dist/utils/zod-utils.d.ts.map +0 -1
- /package/dist/utils/{filesystem.js → filesystem/operations.js} +0 -0
- /package/dist/utils/{zod-utils.js → zod.js} +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Component } from "../tui.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Spacer component that renders empty lines
|
|
4
|
+
*/
|
|
5
|
+
export declare class Spacer implements Component {
|
|
6
|
+
private lines;
|
|
7
|
+
private customBgRgb?;
|
|
8
|
+
constructor(lines?: number, customBgRgb?: {
|
|
9
|
+
r: number;
|
|
10
|
+
g: number;
|
|
11
|
+
b: number;
|
|
12
|
+
});
|
|
13
|
+
setLines(lines: number): void;
|
|
14
|
+
render(width: number): string[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=spacer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spacer.d.ts","sourceRoot":"","sources":["../../../source/tui/components/spacer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,qBAAa,MAAO,YAAW,SAAS;IACtC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAC,CAAsC;gBAE9C,KAAK,SAAI,EAAE,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAKxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAgBhC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import style from "../../terminal/style.js";
|
|
2
|
+
/**
|
|
3
|
+
* Spacer component that renders empty lines
|
|
4
|
+
*/
|
|
5
|
+
export class Spacer {
|
|
6
|
+
lines;
|
|
7
|
+
customBgRgb;
|
|
8
|
+
constructor(lines = 1, customBgRgb) {
|
|
9
|
+
this.lines = lines;
|
|
10
|
+
this.customBgRgb = customBgRgb;
|
|
11
|
+
}
|
|
12
|
+
setLines(lines) {
|
|
13
|
+
this.lines = lines;
|
|
14
|
+
}
|
|
15
|
+
render(width) {
|
|
16
|
+
const result = [];
|
|
17
|
+
for (let i = 0; i < this.lines; i++) {
|
|
18
|
+
let line = " ".repeat(width);
|
|
19
|
+
// Apply background color if specified
|
|
20
|
+
if (this.customBgRgb) {
|
|
21
|
+
line = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(line);
|
|
22
|
+
}
|
|
23
|
+
result.push(line);
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Component } from "../tui.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Table component - displays tabular data with proper formatting and wrapping
|
|
4
|
+
*/
|
|
5
|
+
export declare class TableComponent implements Component {
|
|
6
|
+
private data;
|
|
7
|
+
private headers?;
|
|
8
|
+
private colWidths?;
|
|
9
|
+
private width?;
|
|
10
|
+
private cachedOutput?;
|
|
11
|
+
private cachedData?;
|
|
12
|
+
private cachedHeaders?;
|
|
13
|
+
private cachedColWidths?;
|
|
14
|
+
private cachedWidth?;
|
|
15
|
+
constructor(data: (string | number)[][], options: {
|
|
16
|
+
headers?: string[];
|
|
17
|
+
colWidths?: number[];
|
|
18
|
+
width?: number;
|
|
19
|
+
});
|
|
20
|
+
setData(data: (string | number)[][]): void;
|
|
21
|
+
setHeaders(headers?: string[]): void;
|
|
22
|
+
setColWidths(colWidths?: number[]): void;
|
|
23
|
+
setWidth(width: number): void;
|
|
24
|
+
private invalidateCache;
|
|
25
|
+
render(width: number): string[];
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../source/tui/components/table.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,OAAO,CAAC,CAAW;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,KAAK,CAAC,CAAS;IAGvB,OAAO,CAAC,YAAY,CAAC,CAAW;IAChC,OAAO,CAAC,UAAU,CAAC,CAAwB;IAC3C,OAAO,CAAC,aAAa,CAAC,CAAW;IACjC,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,WAAW,CAAC,CAAS;gBAG3B,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,EAC3B,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAQvE,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI;IAK1C,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAKpC,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAKxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,OAAO,CAAC,eAAe;IAQvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAiGhC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Table } from "../../terminal/table/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Table component - displays tabular data with proper formatting and wrapping
|
|
4
|
+
*/
|
|
5
|
+
export class TableComponent {
|
|
6
|
+
data;
|
|
7
|
+
headers;
|
|
8
|
+
colWidths;
|
|
9
|
+
width;
|
|
10
|
+
// Cache for rendered output
|
|
11
|
+
cachedOutput;
|
|
12
|
+
cachedData;
|
|
13
|
+
cachedHeaders;
|
|
14
|
+
cachedColWidths;
|
|
15
|
+
cachedWidth;
|
|
16
|
+
constructor(data, options) {
|
|
17
|
+
this.data = data;
|
|
18
|
+
this.headers = options.headers;
|
|
19
|
+
this.colWidths = options.colWidths;
|
|
20
|
+
this.width = options.width;
|
|
21
|
+
}
|
|
22
|
+
setData(data) {
|
|
23
|
+
this.data = data;
|
|
24
|
+
this.invalidateCache();
|
|
25
|
+
}
|
|
26
|
+
setHeaders(headers) {
|
|
27
|
+
this.headers = headers;
|
|
28
|
+
this.invalidateCache();
|
|
29
|
+
}
|
|
30
|
+
setColWidths(colWidths) {
|
|
31
|
+
this.colWidths = colWidths;
|
|
32
|
+
this.invalidateCache();
|
|
33
|
+
}
|
|
34
|
+
setWidth(width) {
|
|
35
|
+
this.width = width;
|
|
36
|
+
this.invalidateCache();
|
|
37
|
+
}
|
|
38
|
+
invalidateCache() {
|
|
39
|
+
this.cachedOutput = undefined;
|
|
40
|
+
this.cachedData = undefined;
|
|
41
|
+
this.cachedHeaders = undefined;
|
|
42
|
+
this.cachedColWidths = undefined;
|
|
43
|
+
this.cachedWidth = undefined;
|
|
44
|
+
}
|
|
45
|
+
render(width) {
|
|
46
|
+
// Use provided width if specified, otherwise use component width
|
|
47
|
+
const renderWidth = this.width || width;
|
|
48
|
+
// Check cache
|
|
49
|
+
if (this.cachedOutput &&
|
|
50
|
+
this.cachedData === this.data &&
|
|
51
|
+
this.cachedHeaders === this.headers &&
|
|
52
|
+
this.cachedColWidths === this.colWidths &&
|
|
53
|
+
this.cachedWidth === renderWidth) {
|
|
54
|
+
return this.cachedOutput;
|
|
55
|
+
}
|
|
56
|
+
if (this.data.length === 0) {
|
|
57
|
+
this.cachedOutput = [];
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
// Determine number of columns from data or header
|
|
61
|
+
let colCount = this.headers?.length;
|
|
62
|
+
if (colCount === undefined) {
|
|
63
|
+
colCount = this.data.length > 0 && this.data[0] ? this.data[0].length : 1;
|
|
64
|
+
}
|
|
65
|
+
// Calculate column widths based on terminal width
|
|
66
|
+
const padding = 5; // Account for table borders and padding
|
|
67
|
+
const availableWidth = Math.max(20, renderWidth - padding);
|
|
68
|
+
let computedColWidths;
|
|
69
|
+
if (this.colWidths && this.colWidths.length === colCount) {
|
|
70
|
+
// Use provided percentages
|
|
71
|
+
computedColWidths = this.colWidths.map((percent) => Math.max(10, Math.floor((percent / 100) * availableWidth)));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Distribute width evenly with minimum width per column
|
|
75
|
+
const minColWidth = 15;
|
|
76
|
+
const maxColsThatFit = Math.floor(availableWidth / minColWidth);
|
|
77
|
+
const actualColCount = Math.min(colCount, maxColsThatFit);
|
|
78
|
+
if (actualColCount === 1) {
|
|
79
|
+
computedColWidths = [availableWidth];
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Calculate base width and distribute remaining pixels
|
|
83
|
+
const baseWidth = Math.floor(availableWidth / actualColCount);
|
|
84
|
+
const remainder = availableWidth % actualColCount;
|
|
85
|
+
computedColWidths = Array(actualColCount).fill(baseWidth);
|
|
86
|
+
// Distribute remainder pixels to first few columns
|
|
87
|
+
for (let i = 0; i < remainder && i < actualColCount; i++) {
|
|
88
|
+
computedColWidths[i] = (computedColWidths[i] || 0) + 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// If we have fewer computed widths than columns, extend the array
|
|
92
|
+
while (computedColWidths.length < colCount) {
|
|
93
|
+
computedColWidths.push(minColWidth);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const table = new Table({
|
|
97
|
+
head: this.headers,
|
|
98
|
+
colWidths: computedColWidths,
|
|
99
|
+
wordWrap: true,
|
|
100
|
+
wrapOnWordBoundary: true,
|
|
101
|
+
});
|
|
102
|
+
// Ensure all data rows have the same number of columns
|
|
103
|
+
const normalizedData = this.data.map((row) => {
|
|
104
|
+
if (row.length < colCount) {
|
|
105
|
+
// Pad with empty strings if row has fewer columns
|
|
106
|
+
return [...row, ...Array(colCount - row.length).fill("")];
|
|
107
|
+
}
|
|
108
|
+
if (row.length > colCount) {
|
|
109
|
+
// Truncate if row has more columns
|
|
110
|
+
return row.slice(0, colCount);
|
|
111
|
+
}
|
|
112
|
+
return row;
|
|
113
|
+
});
|
|
114
|
+
table.push(...normalizedData);
|
|
115
|
+
const tableString = table.toString();
|
|
116
|
+
const result = tableString.split("\n");
|
|
117
|
+
// Update cache
|
|
118
|
+
this.cachedOutput = result;
|
|
119
|
+
this.cachedData = this.data;
|
|
120
|
+
this.cachedHeaders = this.headers;
|
|
121
|
+
this.cachedColWidths = this.colWidths;
|
|
122
|
+
this.cachedWidth = renderWidth;
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Component } from "../tui.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Text component - displays multi-line text with word wrapping
|
|
4
|
+
*/
|
|
5
|
+
export declare class Text implements Component {
|
|
6
|
+
private text;
|
|
7
|
+
private paddingX;
|
|
8
|
+
private paddingY;
|
|
9
|
+
private customBgRgb?;
|
|
10
|
+
private cachedText?;
|
|
11
|
+
private cachedWidth?;
|
|
12
|
+
private cachedLines?;
|
|
13
|
+
constructor(text?: string, paddingX?: number, paddingY?: number, customBgRgb?: {
|
|
14
|
+
r: number;
|
|
15
|
+
g: number;
|
|
16
|
+
b: number;
|
|
17
|
+
});
|
|
18
|
+
setText(text: string): void;
|
|
19
|
+
setCustomBgRgb(customBgRgb?: {
|
|
20
|
+
r: number;
|
|
21
|
+
g: number;
|
|
22
|
+
b: number;
|
|
23
|
+
}): void;
|
|
24
|
+
render(width: number): string[];
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +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;CA4IhC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import style from "../../terminal/style.js";
|
|
2
|
+
import { visibleWidth } from "../utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* Text component - displays multi-line text with word wrapping
|
|
5
|
+
*/
|
|
6
|
+
export class Text {
|
|
7
|
+
text;
|
|
8
|
+
paddingX; // Left/right padding
|
|
9
|
+
paddingY; // Top/bottom padding
|
|
10
|
+
customBgRgb;
|
|
11
|
+
// Cache for rendered output
|
|
12
|
+
cachedText;
|
|
13
|
+
cachedWidth;
|
|
14
|
+
cachedLines;
|
|
15
|
+
constructor(text = "", paddingX = 1, paddingY = 1, customBgRgb) {
|
|
16
|
+
this.text = text;
|
|
17
|
+
this.paddingX = paddingX;
|
|
18
|
+
this.paddingY = paddingY;
|
|
19
|
+
this.customBgRgb = customBgRgb;
|
|
20
|
+
}
|
|
21
|
+
setText(text) {
|
|
22
|
+
this.text = text;
|
|
23
|
+
// Invalidate cache when text changes
|
|
24
|
+
this.cachedText = undefined;
|
|
25
|
+
this.cachedWidth = undefined;
|
|
26
|
+
this.cachedLines = undefined;
|
|
27
|
+
}
|
|
28
|
+
setCustomBgRgb(customBgRgb) {
|
|
29
|
+
this.customBgRgb = customBgRgb;
|
|
30
|
+
// Invalidate cache when color changes
|
|
31
|
+
this.cachedText = undefined;
|
|
32
|
+
this.cachedWidth = undefined;
|
|
33
|
+
this.cachedLines = undefined;
|
|
34
|
+
}
|
|
35
|
+
render(width) {
|
|
36
|
+
// Check cache
|
|
37
|
+
if (this.cachedLines &&
|
|
38
|
+
this.cachedText === this.text &&
|
|
39
|
+
this.cachedWidth === width) {
|
|
40
|
+
return this.cachedLines;
|
|
41
|
+
}
|
|
42
|
+
// Calculate available width for content (subtract horizontal padding)
|
|
43
|
+
const contentWidth = Math.max(1, width - this.paddingX * 2);
|
|
44
|
+
// Don't render anything if there's no actual text
|
|
45
|
+
if (!this.text || this.text.trim() === "") {
|
|
46
|
+
const result = [];
|
|
47
|
+
// Update cache
|
|
48
|
+
this.cachedText = this.text;
|
|
49
|
+
this.cachedWidth = width;
|
|
50
|
+
this.cachedLines = result;
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
// Replace tabs with 3 spaces for consistent rendering
|
|
54
|
+
const normalizedText = this.text.replace(/\t/g, " ");
|
|
55
|
+
const lines = [];
|
|
56
|
+
const textLines = normalizedText.split("\n");
|
|
57
|
+
for (const line of textLines) {
|
|
58
|
+
// Measure visible length (strip ANSI codes)
|
|
59
|
+
const visibleLineLength = visibleWidth(line);
|
|
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
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Add padding to each line
|
|
101
|
+
const leftPad = " ".repeat(this.paddingX);
|
|
102
|
+
const paddedLines = [];
|
|
103
|
+
for (const line of lines) {
|
|
104
|
+
// Calculate visible length (strip ANSI codes)
|
|
105
|
+
const visibleLength = visibleWidth(line);
|
|
106
|
+
// Right padding to fill to width (accounting for left padding and content)
|
|
107
|
+
const rightPadLength = Math.max(0, width - this.paddingX - visibleLength);
|
|
108
|
+
const rightPad = " ".repeat(rightPadLength);
|
|
109
|
+
let paddedLine = leftPad + line + rightPad;
|
|
110
|
+
// Apply background color if specified
|
|
111
|
+
if (this.customBgRgb) {
|
|
112
|
+
paddedLine = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(paddedLine);
|
|
113
|
+
}
|
|
114
|
+
paddedLines.push(paddedLine);
|
|
115
|
+
}
|
|
116
|
+
// Add top padding (empty lines)
|
|
117
|
+
const emptyLine = " ".repeat(width);
|
|
118
|
+
const topPadding = [];
|
|
119
|
+
for (let i = 0; i < this.paddingY; i++) {
|
|
120
|
+
let emptyPaddedLine = emptyLine;
|
|
121
|
+
if (this.customBgRgb) {
|
|
122
|
+
emptyPaddedLine = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(emptyPaddedLine);
|
|
123
|
+
}
|
|
124
|
+
topPadding.push(emptyPaddedLine);
|
|
125
|
+
}
|
|
126
|
+
// Add bottom padding (empty lines)
|
|
127
|
+
const bottomPadding = [];
|
|
128
|
+
for (let i = 0; i < this.paddingY; i++) {
|
|
129
|
+
let emptyPaddedLine = emptyLine;
|
|
130
|
+
if (this.customBgRgb) {
|
|
131
|
+
emptyPaddedLine = style.bgRgb(this.customBgRgb.r, this.customBgRgb.g, this.customBgRgb.b)(emptyPaddedLine);
|
|
132
|
+
}
|
|
133
|
+
bottomPadding.push(emptyPaddedLine);
|
|
134
|
+
}
|
|
135
|
+
// Combine top padding, content, and bottom padding
|
|
136
|
+
const result = [...topPadding, ...paddedLines, ...bottomPadding];
|
|
137
|
+
// Update cache
|
|
138
|
+
this.cachedText = this.text;
|
|
139
|
+
this.cachedWidth = width;
|
|
140
|
+
this.cachedLines = result;
|
|
141
|
+
return result.length > 0 ? result : [""];
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Container } from "../tui.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Component that renders a thinking block
|
|
4
|
+
*/
|
|
5
|
+
export declare class ThinkingBlockComponent extends Container {
|
|
6
|
+
private contentContainer;
|
|
7
|
+
constructor(message?: {
|
|
8
|
+
content: string;
|
|
9
|
+
});
|
|
10
|
+
updateContent(message: {
|
|
11
|
+
content: string;
|
|
12
|
+
}): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=thinking-block.d.ts.map
|
|
@@ -0,0 +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;gBAExB,OAAO,CAAC,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB;IAYD,aAAa,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAkBlD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import style from "../../terminal/style.js";
|
|
2
|
+
import { Container } from "../tui.js";
|
|
3
|
+
import { Markdown } from "./markdown.js";
|
|
4
|
+
import { Spacer } from "./spacer.js";
|
|
5
|
+
/**
|
|
6
|
+
* Component that renders a thinking block
|
|
7
|
+
*/
|
|
8
|
+
export class ThinkingBlockComponent extends Container {
|
|
9
|
+
contentContainer;
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super();
|
|
12
|
+
// Container for text/thinking content
|
|
13
|
+
this.contentContainer = new Container();
|
|
14
|
+
this.addChild(this.contentContainer);
|
|
15
|
+
if (message) {
|
|
16
|
+
this.updateContent(message);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
updateContent(message) {
|
|
20
|
+
// Clear content container
|
|
21
|
+
this.contentContainer.clear();
|
|
22
|
+
if (message.content.length > 0) {
|
|
23
|
+
this.contentContainer.addChild(new Spacer(1));
|
|
24
|
+
}
|
|
25
|
+
const content = message.content;
|
|
26
|
+
// Assistant text messages with no background - trim the text
|
|
27
|
+
// Set paddingY=0 to avoid extra spacing before tool executions
|
|
28
|
+
this.contentContainer.addChild(new Markdown(style.dim(content.trim()), {
|
|
29
|
+
paddingX: 1,
|
|
30
|
+
paddingY: 0,
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ToolEvent } from "../../agent/index.ts";
|
|
2
|
+
import { Container, type TUI } from "../index.ts";
|
|
3
|
+
export declare class ToolExecutionComponent extends Container {
|
|
4
|
+
private tui;
|
|
5
|
+
private contentContainer;
|
|
6
|
+
private loaderComponent;
|
|
7
|
+
private toolName;
|
|
8
|
+
private events;
|
|
9
|
+
constructor(tui: TUI, events: ToolEvent[]);
|
|
10
|
+
update(events: ToolEvent[]): void;
|
|
11
|
+
private renderDisplay;
|
|
12
|
+
private getToolCallStartComponent;
|
|
13
|
+
private handleToolStartMessage;
|
|
14
|
+
private handleToolInitMessage;
|
|
15
|
+
private handleToolUpdateMessage;
|
|
16
|
+
private handleToolCompletionMessage;
|
|
17
|
+
private handleToolErrorMessage;
|
|
18
|
+
private processEventsInOrder;
|
|
19
|
+
private getEventIndex;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=tool-execution.d.ts.map
|
|
@@ -0,0 +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,EACL,SAAS,EAKT,KAAK,GAAG,EACT,MAAM,aAAa,CAAC;AAUrB,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAc;gBAEhB,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;IAczC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE;IAS1B,OAAO,CAAC,aAAa;IAiErB,OAAO,CAAC,yBAAyB;IA0DjC,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,aAAa;CAkBtB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { capitalize } from "../../formatting.js";
|
|
2
|
+
import style from "../../terminal/style.js";
|
|
3
|
+
import { Container, Loader, Markdown, Spacer, Text, } from "../index.js";
|
|
4
|
+
const bgColor = {
|
|
5
|
+
r: 52,
|
|
6
|
+
g: 53,
|
|
7
|
+
b: 65,
|
|
8
|
+
};
|
|
9
|
+
export class ToolExecutionComponent extends Container {
|
|
10
|
+
tui;
|
|
11
|
+
contentContainer;
|
|
12
|
+
loaderComponent;
|
|
13
|
+
toolName;
|
|
14
|
+
events;
|
|
15
|
+
constructor(tui, events) {
|
|
16
|
+
super();
|
|
17
|
+
this.tui = tui;
|
|
18
|
+
this.loaderComponent = null;
|
|
19
|
+
this.toolName = events[0].name;
|
|
20
|
+
this.events = events;
|
|
21
|
+
// Container for text/thinking content
|
|
22
|
+
this.contentContainer = new Container();
|
|
23
|
+
this.addChild(this.contentContainer);
|
|
24
|
+
this.renderDisplay();
|
|
25
|
+
}
|
|
26
|
+
update(events) {
|
|
27
|
+
this.events = events;
|
|
28
|
+
// Clear content container
|
|
29
|
+
this.contentContainer.clear();
|
|
30
|
+
this.renderDisplay();
|
|
31
|
+
}
|
|
32
|
+
renderDisplay() {
|
|
33
|
+
// Build display from complete event history with proper ordering
|
|
34
|
+
const processedEvents = this.processEventsInOrder();
|
|
35
|
+
const currentStatus = processedEvents.at(-1)?.type ?? "tool-call-start";
|
|
36
|
+
this.contentContainer.addChild(new Spacer(1));
|
|
37
|
+
this.contentContainer.addChild(new Spacer(1, bgColor));
|
|
38
|
+
for (let i = 0; i < processedEvents.length; i++) {
|
|
39
|
+
const event = processedEvents[i];
|
|
40
|
+
const eventType = event.type;
|
|
41
|
+
switch (eventType) {
|
|
42
|
+
case "tool-call-start":
|
|
43
|
+
this.getToolCallStartComponent(event, currentStatus);
|
|
44
|
+
break;
|
|
45
|
+
case "tool-call-init":
|
|
46
|
+
this.contentContainer.addChild(new Text(`→ ${this.handleToolInitMessage(event.msg)}`, 1, 0, bgColor));
|
|
47
|
+
break;
|
|
48
|
+
case "tool-call-update":
|
|
49
|
+
this.contentContainer.addChild(new Markdown(this.handleToolUpdateMessage(event.msg), {
|
|
50
|
+
paddingX: 3,
|
|
51
|
+
customBgRgb: bgColor,
|
|
52
|
+
}));
|
|
53
|
+
break;
|
|
54
|
+
case "tool-call-end":
|
|
55
|
+
this.contentContainer.addChild(new Text(`└ ${this.handleToolCompletionMessage(event.msg)}`, 1, 0, bgColor));
|
|
56
|
+
break;
|
|
57
|
+
case "tool-call-error":
|
|
58
|
+
this.contentContainer.addChild(new Text(`└ ${this.handleToolErrorMessage(event.msg)}`, 1, 0, bgColor));
|
|
59
|
+
break;
|
|
60
|
+
default: {
|
|
61
|
+
eventType;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
this.contentContainer.addChild(new Spacer(1, bgColor));
|
|
66
|
+
this.contentContainer.addChild(new Spacer(1));
|
|
67
|
+
}
|
|
68
|
+
getToolCallStartComponent(event, currentStatus) {
|
|
69
|
+
switch (currentStatus) {
|
|
70
|
+
case "tool-call-start":
|
|
71
|
+
this.contentContainer.addChild(new Text(`${style.blue.bold("●")} ${this.handleToolStartMessage(event)}`, 1, 0, bgColor));
|
|
72
|
+
break;
|
|
73
|
+
case "tool-call-init":
|
|
74
|
+
case "tool-call-update":
|
|
75
|
+
if (!this.loaderComponent) {
|
|
76
|
+
this.loaderComponent = new Loader(this.tui, this.handleToolStartMessage(event), bgColor);
|
|
77
|
+
this.contentContainer.addChild(this.loaderComponent);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.loaderComponent.setMessage(this.handleToolStartMessage(event));
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
case "tool-call-end":
|
|
84
|
+
if (this.loaderComponent) {
|
|
85
|
+
this.loaderComponent.stop();
|
|
86
|
+
this.loaderComponent = null;
|
|
87
|
+
}
|
|
88
|
+
this.contentContainer.addChild(new Text(`${style.green.bold("●")} ${this.handleToolStartMessage(event)}`, 1, 0, bgColor));
|
|
89
|
+
break;
|
|
90
|
+
case "tool-call-error":
|
|
91
|
+
if (this.loaderComponent) {
|
|
92
|
+
this.loaderComponent.stop();
|
|
93
|
+
this.loaderComponent = null;
|
|
94
|
+
}
|
|
95
|
+
this.contentContainer.addChild(new Text(`${style.red.bold("●")} ${this.handleToolStartMessage(event)}`, 1, 0, bgColor));
|
|
96
|
+
break;
|
|
97
|
+
default:
|
|
98
|
+
currentStatus;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
handleToolStartMessage(event) {
|
|
102
|
+
const message = event.msg;
|
|
103
|
+
let result = `${style.bold(capitalize(this.toolName))} `;
|
|
104
|
+
result += message.trim() ? `${style.bold(message)} ` : "";
|
|
105
|
+
result += style.dim(JSON.stringify(event.args).slice(0, 50));
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
handleToolInitMessage(message) {
|
|
109
|
+
return style.bold(message);
|
|
110
|
+
}
|
|
111
|
+
handleToolUpdateMessage(message) {
|
|
112
|
+
return message;
|
|
113
|
+
}
|
|
114
|
+
handleToolCompletionMessage(message) {
|
|
115
|
+
return style.bold(message);
|
|
116
|
+
}
|
|
117
|
+
handleToolErrorMessage(message) {
|
|
118
|
+
return style.bold.red(message);
|
|
119
|
+
}
|
|
120
|
+
processEventsInOrder() {
|
|
121
|
+
const events = [...this.events];
|
|
122
|
+
const processed = [];
|
|
123
|
+
// Ensure we have a tool-call-start event for this specific tool call
|
|
124
|
+
// Events are grouped by toolCallId, so we need to check for start events
|
|
125
|
+
// that match the current tool call's ID
|
|
126
|
+
const toolCallId = events[0]?.toolCallId;
|
|
127
|
+
const hasStartEvent = events.some((event) => event.type === "tool-call-start" && event.toolCallId === toolCallId);
|
|
128
|
+
if (!hasStartEvent && events.length > 0) {
|
|
129
|
+
// Create synthetic start event using the first event's name
|
|
130
|
+
const firstEvent = events[0];
|
|
131
|
+
processed.push({
|
|
132
|
+
type: "tool-call-start",
|
|
133
|
+
name: firstEvent.name,
|
|
134
|
+
toolCallId: firstEvent.toolCallId,
|
|
135
|
+
msg: "",
|
|
136
|
+
args: firstEvent.args,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
processed.push(...events);
|
|
140
|
+
processed.sort((a, b) => this.getEventIndex(a) - this.getEventIndex(b));
|
|
141
|
+
return processed;
|
|
142
|
+
}
|
|
143
|
+
getEventIndex(event) {
|
|
144
|
+
const eventType = event.type;
|
|
145
|
+
switch (eventType) {
|
|
146
|
+
case "tool-call-start":
|
|
147
|
+
return 0;
|
|
148
|
+
case "tool-call-init":
|
|
149
|
+
return 1;
|
|
150
|
+
case "tool-call-update":
|
|
151
|
+
return 2;
|
|
152
|
+
case "tool-call-end":
|
|
153
|
+
case "tool-call-error":
|
|
154
|
+
return 3;
|
|
155
|
+
default: {
|
|
156
|
+
eventType;
|
|
157
|
+
return -1;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
@@ -0,0 +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;AAItC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAW;gBAEf,IAAI,EAAE,MAAM;CAiBzB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Container } from "../tui.js";
|
|
2
|
+
import { Markdown } from "./markdown.js";
|
|
3
|
+
import { Spacer } from "./spacer.js";
|
|
4
|
+
/**
|
|
5
|
+
* Component that renders a user message
|
|
6
|
+
*/
|
|
7
|
+
export class UserMessageComponent extends Container {
|
|
8
|
+
markdown;
|
|
9
|
+
constructor(text) {
|
|
10
|
+
super();
|
|
11
|
+
this.addChild(new Spacer(1));
|
|
12
|
+
// User messages with dark gray background
|
|
13
|
+
this.markdown = new Markdown(text, {
|
|
14
|
+
customBgRgb: {
|
|
15
|
+
r: 52,
|
|
16
|
+
g: 53,
|
|
17
|
+
b: 65,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
this.addChild(this.markdown);
|
|
21
|
+
this.addChild(new Spacer(1));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../../source/tui/components/welcome.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,qBAAa,OAAQ,YAAW,SAAS;IACvC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAiChC,OAAO,CAAC,OAAO;CAUhB"}
|