@travisennis/acai 0.0.9 → 0.0.11
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 +51 -760
- 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 +380 -199
- 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 -77
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +2 -1
- package/dist/cli/stdin.d.ts.map +1 -0
- package/dist/{stdin.js → cli/stdin.js} +11 -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 -101
- package/dist/commands/generate-rules/service.d.ts +22 -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 +3 -2
- 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 +2 -1
- 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 +55 -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 +15 -1
- 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 +124 -135
- 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 +148 -141
- 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 +2 -5
- package/dist/models/openai-provider.d.ts.map +1 -1
- package/dist/models/openai-provider.js +0 -52
- package/dist/models/opencode-go-provider.d.ts +25 -0
- package/dist/models/opencode-go-provider.d.ts.map +1 -0
- package/dist/models/opencode-go-provider.js +78 -0
- package/dist/models/opencode-zen-provider.d.ts +7 -3
- package/dist/models/opencode-zen-provider.d.ts.map +1 -1
- package/dist/models/opencode-zen-provider.js +49 -10
- package/dist/models/openrouter-provider.d.ts +27 -31
- package/dist/models/openrouter-provider.d.ts.map +1 -1
- package/dist/models/openrouter-provider.js +121 -180
- package/dist/models/providers.d.ts +3 -3
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/models/providers.js +6 -0
- 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 +24 -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 +142 -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} +55 -85
- package/dist/{prompts.d.ts → prompts/system-prompt.d.ts} +7 -2
- package/dist/prompts/system-prompt.d.ts.map +1 -0
- package/dist/{prompts.js → prompts/system-prompt.js} +31 -16
- 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} +397 -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 +92 -0
- package/dist/sessions/manager.d.ts.map +1 -1
- package/dist/sessions/manager.js +262 -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/index.d.ts +29 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +294 -0
- package/dist/subagents/index.d.ts +16 -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 +3 -3
- 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 +1 -1
- 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 +174 -105
- 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/apply-patch.d.ts +62 -0
- package/dist/tools/apply-patch.d.ts.map +1 -0
- package/dist/tools/apply-patch.js +377 -0
- package/dist/tools/bash.d.ts +4 -3
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +349 -141
- 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 +3 -6
- 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 +292 -85
- package/dist/tools/glob.d.ts +6 -6
- package/dist/tools/glob.d.ts.map +1 -1
- package/dist/tools/glob.js +110 -63
- package/dist/tools/grep.d.ts +15 -12
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +315 -193
- package/dist/tools/index.d.ts +114 -9
- 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 +4 -6
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +84 -39
- 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 +36 -31
- 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 +50 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +446 -0
- package/dist/tools/web-search.d.ts +44 -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 +37 -17
- 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/utils.d.ts +2 -1
- package/dist/tui/autocomplete/utils.d.ts.map +1 -1
- package/dist/tui/autocomplete/utils.js +25 -23
- 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 +18 -3
- package/dist/tui/components/editor.d.ts.map +1 -1
- package/dist/tui/components/editor.js +211 -237
- 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 +10 -7
- 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 +36 -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.d.ts +2 -1
- package/dist/tui/components/welcome.d.ts.map +1 -1
- package/dist/tui/components/welcome.js +2 -2
- package/dist/tui/editor-launcher.d.ts +3 -2
- package/dist/tui/editor-launcher.d.ts.map +1 -1
- package/dist/tui/index.d.ts +0 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/terminal.d.ts.map +1 -1
- package/dist/tui/terminal.js +10 -2
- package/dist/tui/tui.d.ts +43 -0
- package/dist/tui/tui.d.ts.map +1 -1
- package/dist/tui/tui.js +166 -41
- package/dist/tui/utils.d.ts +1 -5
- package/dist/tui/utils.d.ts.map +1 -1
- package/dist/tui/utils.js +271 -44
- 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 +28 -30
- 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 +35 -26
- package/dist/cli.d.ts +0 -23
- package/dist/cli.d.ts.map +0 -1
- package/dist/commands/add-directory/types.d.ts +0 -6
- package/dist/commands/add-directory/types.d.ts.map +0 -1
- package/dist/commands/add-directory/types.js +0 -1
- package/dist/commands/copy/types.d.ts +0 -3
- package/dist/commands/copy/types.d.ts.map +0 -1
- package/dist/commands/copy/types.js +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 -122
- 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/review/types.d.ts +0 -12
- package/dist/commands/review/types.d.ts.map +0 -1
- package/dist/commands/review/types.js +0 -1
- 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.map +0 -1
- package/dist/repl-new.d.ts +0 -65
- package/dist/repl-new.d.ts.map +0 -1
- package/dist/skills.d.ts +0 -16
- package/dist/skills.d.ts.map +0 -1
- package/dist/skills.js +0 -233
- package/dist/stdin.d.ts.map +0 -1
- 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/utils/iterables.d.ts +0 -2
- package/dist/utils/iterables.d.ts.map +0 -1
- package/dist/utils/iterables.js +0 -6
- 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,5 +1,5 @@
|
|
|
1
1
|
import type { Component } from "../tui.ts";
|
|
2
|
-
|
|
2
|
+
interface WelcomeOptions {
|
|
3
3
|
type?: "default" | "simple";
|
|
4
4
|
}
|
|
5
5
|
export declare class Welcome implements Component {
|
|
@@ -10,4 +10,5 @@ export declare class Welcome implements Component {
|
|
|
10
10
|
private renderDefault;
|
|
11
11
|
private getLogo;
|
|
12
12
|
}
|
|
13
|
+
export {};
|
|
13
14
|
//# sourceMappingURL=welcome.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../../source/tui/components/welcome.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,
|
|
1
|
+
{"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../../source/tui/components/welcome.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC7B;AAED,qBAAa,OAAQ,YAAW,SAAS;IACvC,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,GAAE,cAAmB;IAIxC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAQ/B,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,OAAO;CAUhB"}
|
|
@@ -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;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { Terminal } from "./terminal.ts";
|
|
2
|
-
|
|
2
|
+
interface EditorLaunchOptions {
|
|
3
3
|
initialContent?: string;
|
|
4
4
|
postfix?: string;
|
|
5
5
|
terminal: Terminal;
|
|
6
6
|
signal?: AbortSignal;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
interface EditorLaunchResult {
|
|
9
9
|
content: string;
|
|
10
10
|
aborted: boolean;
|
|
11
11
|
}
|
|
12
12
|
export declare function launchEditor(options: EditorLaunchOptions): Promise<EditorLaunchResult>;
|
|
13
|
+
export {};
|
|
13
14
|
//# sourceMappingURL=editor-launcher.d.ts.map
|
|
@@ -1 +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,
|
|
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,UAAU,mBAAmB;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA0C7B"}
|
package/dist/tui/index.d.ts
CHANGED
|
@@ -14,7 +14,6 @@ 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 type { EditorLaunchOptions, EditorLaunchResult, } from "./editor-launcher.ts";
|
|
18
17
|
export { launchEditor } from "./editor-launcher.ts";
|
|
19
18
|
export { ProcessTerminal, type ProcessTerminalOptions } from "./terminal.ts";
|
|
20
19
|
export { Container, TUI } from "./tui.ts";
|
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;AACpE,
|
|
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,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"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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"}
|
package/dist/tui/terminal.js
CHANGED
|
@@ -50,6 +50,9 @@ export class ProcessTerminal {
|
|
|
50
50
|
this.inputStream.resume();
|
|
51
51
|
// Enable bracketed paste mode - terminal will wrap pastes in \x1b[200~ ... \x1b[201~
|
|
52
52
|
process.stdout.write("\x1b[?2004h");
|
|
53
|
+
// Enable mouse tracking (SGR mode) so trackpad scroll sends mouse events
|
|
54
|
+
// instead of being translated into arrow key sequences
|
|
55
|
+
process.stdout.write("\x1b[?1000h\x1b[?1006h");
|
|
53
56
|
// Create bound listeners so we can properly remove them later
|
|
54
57
|
this.boundInputListener = (data) => {
|
|
55
58
|
onInput(typeof data === "string" ? data : data.toString("utf8"));
|
|
@@ -59,7 +62,7 @@ export class ProcessTerminal {
|
|
|
59
62
|
};
|
|
60
63
|
this.attachListeners();
|
|
61
64
|
this.sigintHandler = () => {
|
|
62
|
-
// Let the custom editor.onCtrlC handler in
|
|
65
|
+
// Let the custom editor.onCtrlC handler in Repl handle Ctrl+C
|
|
63
66
|
// This prevents a race condition where stop() gets called without the exit message
|
|
64
67
|
};
|
|
65
68
|
process.on("SIGINT", this.sigintHandler);
|
|
@@ -88,6 +91,7 @@ export class ProcessTerminal {
|
|
|
88
91
|
process.on("exit", () => {
|
|
89
92
|
process.stdout.write("\x1b[?25h");
|
|
90
93
|
process.stdout.write("\x1b[?2004l");
|
|
94
|
+
process.stdout.write("\x1b[?1000l\x1b[?1006l");
|
|
91
95
|
process.stdout.write("\x1b[0m");
|
|
92
96
|
if (this.inputStream.setRawMode) {
|
|
93
97
|
this.inputStream.setRawMode(this.wasRaw);
|
|
@@ -97,6 +101,7 @@ export class ProcessTerminal {
|
|
|
97
101
|
process.on("uncaughtException", (error) => {
|
|
98
102
|
process.stdout.write("\x1b[?25h");
|
|
99
103
|
process.stdout.write("\x1b[?2004l");
|
|
104
|
+
process.stdout.write("\x1b[?1000l\x1b[?1006l");
|
|
100
105
|
process.stdout.write("\x1b[0m");
|
|
101
106
|
if (this.inputStream.setRawMode) {
|
|
102
107
|
this.inputStream.setRawMode(this.wasRaw);
|
|
@@ -124,8 +129,9 @@ export class ProcessTerminal {
|
|
|
124
129
|
process.off("SIGINT", this.sigintHandler);
|
|
125
130
|
this.sigintHandler = undefined;
|
|
126
131
|
}
|
|
127
|
-
// Disable bracketed paste mode
|
|
132
|
+
// Disable bracketed paste mode and mouse tracking
|
|
128
133
|
process.stdout.write("\x1b[?2004l");
|
|
134
|
+
process.stdout.write("\x1b[?1000l\x1b[?1006l");
|
|
129
135
|
// Remove event handlers using the exact references that were added
|
|
130
136
|
if (this.boundInputListener) {
|
|
131
137
|
this.inputStream.removeListener("data", this.boundInputListener);
|
|
@@ -189,6 +195,7 @@ export class ProcessTerminal {
|
|
|
189
195
|
process.stdout.write("\x1b[0m");
|
|
190
196
|
process.stdout.write("\x1b[?25h");
|
|
191
197
|
process.stdout.write("\x1b[?2004l");
|
|
198
|
+
process.stdout.write("\x1b[?1000l\x1b[?1006l");
|
|
192
199
|
}
|
|
193
200
|
exitExternalMode() {
|
|
194
201
|
if (!this.inExternalMode || this.stopped)
|
|
@@ -200,6 +207,7 @@ export class ProcessTerminal {
|
|
|
200
207
|
this.inputStream.setEncoding("utf8");
|
|
201
208
|
this.inputStream.resume();
|
|
202
209
|
process.stdout.write("\x1b[?2004h");
|
|
210
|
+
process.stdout.write("\x1b[?1000h\x1b[?1006h");
|
|
203
211
|
process.stdout.write("\x1b[?25l");
|
|
204
212
|
this.attachListeners();
|
|
205
213
|
if (this.resumeCallback) {
|
package/dist/tui/tui.d.ts
CHANGED
|
@@ -24,6 +24,11 @@ export interface Component {
|
|
|
24
24
|
* and col is 0-indexed column position
|
|
25
25
|
*/
|
|
26
26
|
getCursorPosition?(): [number, number] | null;
|
|
27
|
+
/**
|
|
28
|
+
* Optional method to indicate the component wants to handle Tab/Shift+Tab
|
|
29
|
+
* navigation keys itself, preventing the TUI from intercepting them.
|
|
30
|
+
*/
|
|
31
|
+
wantsNavigationKeys?(): boolean;
|
|
27
32
|
}
|
|
28
33
|
export { visibleWidth };
|
|
29
34
|
/**
|
|
@@ -33,11 +38,20 @@ export declare class Container implements Component {
|
|
|
33
38
|
children: Component[];
|
|
34
39
|
addChild(component: Component): void;
|
|
35
40
|
removeChild(component: Component): void;
|
|
41
|
+
insertChildBefore(beforeComponent: Component, newComponent: Component): void;
|
|
36
42
|
clear(): void;
|
|
37
43
|
render(width: number): string[];
|
|
38
44
|
}
|
|
39
45
|
/**
|
|
40
46
|
* TUI - Main class for managing terminal UI with differential rendering
|
|
47
|
+
*
|
|
48
|
+
* The TUI splits its children into two regions:
|
|
49
|
+
* - Scrollable content: children added before setFixedFooterStart()
|
|
50
|
+
* - Fixed footer: children added after setFixedFooterStart()
|
|
51
|
+
*
|
|
52
|
+
* The scrollable content region supports virtual scrolling via trackpad/mouse
|
|
53
|
+
* wheel. The fixed footer (editor, footer bar, notifications) is always
|
|
54
|
+
* pinned to the bottom of the terminal.
|
|
41
55
|
*/
|
|
42
56
|
export declare class TUI extends Container {
|
|
43
57
|
private terminal;
|
|
@@ -46,14 +60,43 @@ export declare class TUI extends Container {
|
|
|
46
60
|
private isRendering;
|
|
47
61
|
private renderAgain;
|
|
48
62
|
private activeModal;
|
|
63
|
+
private scrollOffset;
|
|
64
|
+
private lastScrollableHeight;
|
|
65
|
+
private fixedFooterIndex;
|
|
66
|
+
private isUserScrolledUp;
|
|
49
67
|
onCtrlC?: () => void;
|
|
68
|
+
onCtrlD?: () => void;
|
|
69
|
+
onReconstructSession?: () => void;
|
|
70
|
+
onCtrlN?: () => void;
|
|
71
|
+
onCtrlO?: () => void;
|
|
72
|
+
/** Callback invoked when Ctrl+M is pressed - opens model selector. */
|
|
73
|
+
onCtrlM?: () => void;
|
|
74
|
+
onCtrlR?: () => void;
|
|
75
|
+
onShiftTab?: () => void;
|
|
50
76
|
constructor(terminal: Terminal);
|
|
77
|
+
/**
|
|
78
|
+
* Mark the boundary between scrollable content and fixed footer.
|
|
79
|
+
* All children added after this call will be rendered as fixed
|
|
80
|
+
* footer content pinned to the bottom of the terminal.
|
|
81
|
+
*/
|
|
82
|
+
setFixedFooterStart(): void;
|
|
51
83
|
setFocus(component: Component | null): void;
|
|
84
|
+
/**
|
|
85
|
+
* Get the underlying terminal instance for external mode operations.
|
|
86
|
+
* Used primarily for spawning external editors.
|
|
87
|
+
*/
|
|
88
|
+
getTerminal(): Terminal;
|
|
52
89
|
start(): void;
|
|
53
90
|
stop(): void;
|
|
54
91
|
requestRender(): void;
|
|
55
92
|
private inBracketedPaste;
|
|
93
|
+
private focusedComponentWantsNavigation;
|
|
56
94
|
private handleInput;
|
|
95
|
+
private handleMouseEvent;
|
|
96
|
+
scrollToBottom(): void;
|
|
97
|
+
private getFixedFooterHeight;
|
|
98
|
+
private renderScrollableContent;
|
|
99
|
+
private renderFixedFooter;
|
|
57
100
|
private doRender;
|
|
58
101
|
/**
|
|
59
102
|
* Show a modal dialog
|
package/dist/tui/tui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../source/tui/tui.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../source/tui/tui.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAEhC;;OAEG;IACH,WAAW,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAE9C;;;OAGG;IACH,mBAAmB,CAAC,IAAI,OAAO,CAAC;CACjC;AAED,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB;;GAEG;AACH,qBAAa,SAAU,YAAW,SAAS;IACzC,QAAQ,EAAE,SAAS,EAAE,CAAM;IAE3B,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIpC,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAOvC,iBAAiB,CAAC,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,GAAG,IAAI;IAS5E,KAAK,IAAI,IAAI;IAIb,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;CAGhC;AAED;;;;;;;;;;GAUG;AAGH,qBAAa,GAAI,SAAQ,SAAS;IAChC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IAE1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,sEAAsE;IAC/D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;gBAEnB,QAAQ,EAAE,QAAQ;IAK9B;;;;OAIG;IACH,mBAAmB,IAAI,IAAI;IAI3B,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAI3C;;;OAGG;IACH,WAAW,IAAI,QAAQ;IAIvB,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IAKZ,aAAa,IAAI,IAAI;IAarB,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,+BAA+B;IAIvC,OAAO,CAAC,WAAW;IAyFnB,OAAO,CAAC,gBAAgB;IAiCxB,cAAc,IAAI,IAAI;IAWtB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,QAAQ;IAoFhB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAK7B;;OAEG;IACH,SAAS,IAAI,IAAI;IAKjB;;OAEG;IACH,aAAa,IAAI,OAAO;CAGzB"}
|