@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
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Standalone input prompt (inquirer-like)
|
|
4
|
-
* - TypeScript version
|
|
5
|
-
*/
|
|
6
|
-
import * as readline from "node:readline";
|
|
7
|
-
import { isAbortError, isCancelError, PromptAbortError, PromptCancelError, } from "./errors.js";
|
|
8
|
-
import style from "./style.js";
|
|
9
|
-
/**
|
|
10
|
-
* Enhanced input validation with built-in and custom validation
|
|
11
|
-
*/
|
|
12
|
-
function validateInput(input, options) {
|
|
13
|
-
const { validate, required, minLength, maxLength, default: defaultValue, } = options;
|
|
14
|
-
// Handle empty input
|
|
15
|
-
const trimmedInput = input.trim();
|
|
16
|
-
if (!trimmedInput && !defaultValue) {
|
|
17
|
-
if (required) {
|
|
18
|
-
return "Input is required";
|
|
19
|
-
}
|
|
20
|
-
return true; // Allow empty if not required
|
|
21
|
-
}
|
|
22
|
-
// Use default value if input is empty
|
|
23
|
-
const finalInput = trimmedInput || defaultValue || "";
|
|
24
|
-
// Length validations
|
|
25
|
-
if (minLength && finalInput.length < minLength) {
|
|
26
|
-
return `Input must be at least ${minLength} characters`;
|
|
27
|
-
}
|
|
28
|
-
if (maxLength && finalInput.length > maxLength) {
|
|
29
|
-
return `Input must be at most ${maxLength} characters`;
|
|
30
|
-
}
|
|
31
|
-
// Custom validation
|
|
32
|
-
if (validate) {
|
|
33
|
-
return validate(finalInput);
|
|
34
|
-
}
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Create a managed readline interface with proper cleanup
|
|
39
|
-
*/
|
|
40
|
-
function createReadlineInterface() {
|
|
41
|
-
const rl = readline.createInterface({
|
|
42
|
-
input: process.stdin,
|
|
43
|
-
output: process.stdout,
|
|
44
|
-
terminal: true,
|
|
45
|
-
});
|
|
46
|
-
let cleanedUp = false;
|
|
47
|
-
const cleanup = () => {
|
|
48
|
-
if (cleanedUp)
|
|
49
|
-
return;
|
|
50
|
-
cleanedUp = true;
|
|
51
|
-
rl.close();
|
|
52
|
-
};
|
|
53
|
-
return { rl, cleanup };
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Non-blocking question wrapper using Promise
|
|
57
|
-
*/
|
|
58
|
-
function askQuestion(rl, prompt) {
|
|
59
|
-
return new Promise((resolve) => {
|
|
60
|
-
rl.question(prompt, resolve);
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Main prompt function with retry logic for validation
|
|
65
|
-
*/
|
|
66
|
-
async function promptWithRetry(rl, prompt, options) {
|
|
67
|
-
const { validate, required, minLength, maxLength, default: defaultValue, } = options;
|
|
68
|
-
while (true) {
|
|
69
|
-
try {
|
|
70
|
-
const answer = await askQuestion(rl, prompt);
|
|
71
|
-
const validationResult = validateInput(answer, {
|
|
72
|
-
validate,
|
|
73
|
-
required,
|
|
74
|
-
minLength,
|
|
75
|
-
maxLength,
|
|
76
|
-
default: defaultValue,
|
|
77
|
-
});
|
|
78
|
-
if (validationResult === true) {
|
|
79
|
-
// Determine final answer
|
|
80
|
-
let finalAnswer = answer.trim();
|
|
81
|
-
if (!finalAnswer && defaultValue !== undefined) {
|
|
82
|
-
finalAnswer = defaultValue;
|
|
83
|
-
}
|
|
84
|
-
return finalAnswer;
|
|
85
|
-
}
|
|
86
|
-
// Show validation error and retry
|
|
87
|
-
console.log(style.red(validationResult));
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
if (isAbortError(error) || isCancelError(error)) {
|
|
91
|
-
throw error;
|
|
92
|
-
}
|
|
93
|
-
// Handle other errors appropriately
|
|
94
|
-
throw new Error("Failed to read input", { cause: error });
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
export async function input({ message = "Enter value", default: defaultValue, validate, required = false, minLength, maxLength, signal, } = {}) {
|
|
99
|
-
if (!process.stdin.isTTY) {
|
|
100
|
-
throw new Error("TTY required");
|
|
101
|
-
}
|
|
102
|
-
const { rl, cleanup } = createReadlineInterface();
|
|
103
|
-
let cleanupCalled = false;
|
|
104
|
-
const ensureCleanup = () => {
|
|
105
|
-
if (!cleanupCalled) {
|
|
106
|
-
cleanupCalled = true;
|
|
107
|
-
cleanup();
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
try {
|
|
111
|
-
return await new Promise((resolve, reject) => {
|
|
112
|
-
const prompt = defaultValue
|
|
113
|
-
? `${message} (${defaultValue}): `
|
|
114
|
-
: `${message}: `;
|
|
115
|
-
// Handle abort signal
|
|
116
|
-
if (signal) {
|
|
117
|
-
signal.addEventListener("abort", () => {
|
|
118
|
-
ensureCleanup();
|
|
119
|
-
reject(new PromptAbortError());
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
// Handle SIGINT (Ctrl+C)
|
|
123
|
-
rl.on("SIGINT", () => {
|
|
124
|
-
ensureCleanup();
|
|
125
|
-
reject(new PromptCancelError());
|
|
126
|
-
});
|
|
127
|
-
// Start the prompt process
|
|
128
|
-
promptWithRetry(rl, prompt, {
|
|
129
|
-
message,
|
|
130
|
-
default: defaultValue,
|
|
131
|
-
validate,
|
|
132
|
-
required,
|
|
133
|
-
minLength,
|
|
134
|
-
maxLength,
|
|
135
|
-
signal,
|
|
136
|
-
})
|
|
137
|
-
.then((result) => {
|
|
138
|
-
ensureCleanup();
|
|
139
|
-
resolve(result);
|
|
140
|
-
})
|
|
141
|
-
.catch((error) => {
|
|
142
|
-
ensureCleanup();
|
|
143
|
-
reject(error);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
ensureCleanup();
|
|
149
|
-
throw error;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// Quick test when run directly
|
|
153
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
154
|
-
(async () => {
|
|
155
|
-
try {
|
|
156
|
-
const name = await input({
|
|
157
|
-
message: "What is your name",
|
|
158
|
-
default: "Anonymous",
|
|
159
|
-
validate: (txt) => (txt.length < 2 ? "Name too short" : true),
|
|
160
|
-
required: true,
|
|
161
|
-
minLength: 2,
|
|
162
|
-
});
|
|
163
|
-
console.log("Hello,", name);
|
|
164
|
-
process.exit(0);
|
|
165
|
-
}
|
|
166
|
-
catch (err) {
|
|
167
|
-
if (isCancelError(err)) {
|
|
168
|
-
console.error("Cancelled");
|
|
169
|
-
process.exit(2);
|
|
170
|
-
}
|
|
171
|
-
else if (isAbortError(err)) {
|
|
172
|
-
console.error("Aborted");
|
|
173
|
-
process.exit(3);
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
console.error(err);
|
|
177
|
-
process.exit(1);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
})();
|
|
181
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Standalone search prompt (inquirer-like)
|
|
4
|
-
* - TypeScript version
|
|
5
|
-
*/
|
|
6
|
-
interface ChoiceObject<T = unknown> {
|
|
7
|
-
name: string;
|
|
8
|
-
value: T;
|
|
9
|
-
disabled?: boolean;
|
|
10
|
-
}
|
|
11
|
-
export type Choice<T = unknown> = string | ChoiceObject<T>;
|
|
12
|
-
export interface SearchOptions<T = unknown> {
|
|
13
|
-
message?: string;
|
|
14
|
-
source: (input: string) => Promise<Choice<T>[]>;
|
|
15
|
-
pageSize?: number;
|
|
16
|
-
signal?: AbortSignal;
|
|
17
|
-
}
|
|
18
|
-
export declare function search<T = unknown>({ message, source, pageSize, signal, }: SearchOptions<T>): Promise<T>;
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=search-prompt.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-prompt.d.ts","sourceRoot":"","sources":["../../source/terminal/search-prompt.ts"],"names":[],"mappings":";AACA;;;GAGG;AAQH,UAAU,YAAY,CAAC,CAAC,GAAG,OAAO;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAQ3D,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA8CD,wBAAsB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,EACxC,OAAkB,EAClB,MAAM,EACN,QAAY,EACZ,MAAM,GACP,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAsO/B"}
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Standalone search prompt (inquirer-like)
|
|
4
|
-
* - TypeScript version
|
|
5
|
-
*/
|
|
6
|
-
// ANSI helpers
|
|
7
|
-
const ESC = "\x1b[";
|
|
8
|
-
const hideCursor = () => process.stdout.write(`${ESC}?25l`);
|
|
9
|
-
const showCursor = () => process.stdout.write(`${ESC}?25h`);
|
|
10
|
-
const clearLine = () => process.stdout.write("\x1b[2K\r");
|
|
11
|
-
function normalizeChoice(choice) {
|
|
12
|
-
if (typeof choice === "string") {
|
|
13
|
-
return { name: choice, value: choice, disabled: false };
|
|
14
|
-
}
|
|
15
|
-
const { name, value, disabled = false } = choice;
|
|
16
|
-
return { name, value, disabled };
|
|
17
|
-
}
|
|
18
|
-
function render(choices, pointerIndex, pageStart, pageSize, prompt, searchInput) {
|
|
19
|
-
const visible = choices.slice(pageStart, pageStart + pageSize);
|
|
20
|
-
const lines = [];
|
|
21
|
-
lines.push(`${prompt}${searchInput ? ` (search: ${searchInput})` : ""}`);
|
|
22
|
-
for (let i = 0; i < visible.length; i++) {
|
|
23
|
-
const actualIndex = pageStart + i;
|
|
24
|
-
const ch = visible[i];
|
|
25
|
-
const prefix = actualIndex === pointerIndex ? "›" : " ";
|
|
26
|
-
if (ch.disabled) {
|
|
27
|
-
lines.push(` ${prefix} ${ch.name} (disabled)`);
|
|
28
|
-
}
|
|
29
|
-
else if (actualIndex === pointerIndex) {
|
|
30
|
-
lines.push(`\x1b[36m ${prefix} ${ch.name}\x1b[0m`);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
lines.push(` ${prefix} ${ch.name}`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (choices.length > pageSize) {
|
|
37
|
-
const pageCount = Math.ceil(choices.length / pageSize);
|
|
38
|
-
const currentPage = Math.ceil(pageStart / pageSize) + 1;
|
|
39
|
-
lines.push(`\x1b[2mPage ${currentPage}/${pageCount}\x1b[0m`);
|
|
40
|
-
}
|
|
41
|
-
return lines.join("\n");
|
|
42
|
-
}
|
|
43
|
-
export async function search({ message = "Search", source, pageSize = 7, signal, }) {
|
|
44
|
-
const stdin = process.stdin;
|
|
45
|
-
const stdout = process.stdout;
|
|
46
|
-
if (!stdin.isTTY)
|
|
47
|
-
throw new Error("TTY required");
|
|
48
|
-
stdin.setRawMode(true);
|
|
49
|
-
stdin.resume();
|
|
50
|
-
stdin.setEncoding("utf8");
|
|
51
|
-
let searchInput = "";
|
|
52
|
-
let choices = [];
|
|
53
|
-
let pointer = 0;
|
|
54
|
-
let pageStart = 0;
|
|
55
|
-
let lastSourceCall = null;
|
|
56
|
-
let previousOutputLines = 0;
|
|
57
|
-
function renderToScreen() {
|
|
58
|
-
clearLine();
|
|
59
|
-
// Move cursor to beginning of line
|
|
60
|
-
stdout.write("\x1b[0G");
|
|
61
|
-
stdout.write("\x1b[0J"); // clear from cursor to end of screen
|
|
62
|
-
// Clear previous output by moving up and clearing lines
|
|
63
|
-
for (let i = 0; i < previousOutputLines; i++) {
|
|
64
|
-
stdout.write("\x1b[1A"); // Move up one line
|
|
65
|
-
stdout.write("\x1b[2K"); // Clear the entire line
|
|
66
|
-
}
|
|
67
|
-
const out = render(choices, pointer, pageStart, pageSize, message, searchInput);
|
|
68
|
-
// Count lines in current output
|
|
69
|
-
previousOutputLines = out.split("\n").length;
|
|
70
|
-
stdout.write(`${out}\n`);
|
|
71
|
-
}
|
|
72
|
-
function move(delta) {
|
|
73
|
-
const len = choices.length;
|
|
74
|
-
if (len === 0)
|
|
75
|
-
return;
|
|
76
|
-
let newIndex = pointer;
|
|
77
|
-
do {
|
|
78
|
-
newIndex = (newIndex + delta + len) % len;
|
|
79
|
-
} while (choices[newIndex]?.disabled && newIndex !== pointer);
|
|
80
|
-
pointer = newIndex;
|
|
81
|
-
// Update pageStart to snap to page boundaries
|
|
82
|
-
const currentPage = Math.floor(pointer / pageSize);
|
|
83
|
-
pageStart = currentPage * pageSize;
|
|
84
|
-
// Ensure pageStart is within bounds
|
|
85
|
-
pageStart = Math.max(0, Math.min(pageStart, choices.length - pageSize));
|
|
86
|
-
renderToScreen();
|
|
87
|
-
}
|
|
88
|
-
async function updateChoices(input) {
|
|
89
|
-
// Cancel previous source call if still in progress
|
|
90
|
-
if (lastSourceCall) {
|
|
91
|
-
// We can't actually cancel the promise, but we can ignore its result
|
|
92
|
-
lastSourceCall.catch(() => { });
|
|
93
|
-
}
|
|
94
|
-
const sourcePromise = source(input);
|
|
95
|
-
lastSourceCall = sourcePromise.then(() => { });
|
|
96
|
-
try {
|
|
97
|
-
const newChoices = await sourcePromise;
|
|
98
|
-
choices = newChoices.map(normalizeChoice);
|
|
99
|
-
// Reset pointer to first selectable choice
|
|
100
|
-
pointer = 0;
|
|
101
|
-
if (choices.length > 0) {
|
|
102
|
-
for (let i = 0; i < choices.length; i++) {
|
|
103
|
-
if (!choices[i].disabled) {
|
|
104
|
-
pointer = i;
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
pageStart = 0;
|
|
110
|
-
renderToScreen();
|
|
111
|
-
}
|
|
112
|
-
catch (_error) {
|
|
113
|
-
// Handle source errors gracefully
|
|
114
|
-
choices = [];
|
|
115
|
-
pointer = 0;
|
|
116
|
-
pageStart = 0;
|
|
117
|
-
renderToScreen();
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
return new Promise((resolve, reject) => {
|
|
121
|
-
let resolved = false;
|
|
122
|
-
function cleanup() {
|
|
123
|
-
if (resolved)
|
|
124
|
-
return;
|
|
125
|
-
resolved = true;
|
|
126
|
-
stdin.setRawMode(false);
|
|
127
|
-
stdin.pause();
|
|
128
|
-
stdin.removeListener("data", onData);
|
|
129
|
-
showCursor();
|
|
130
|
-
}
|
|
131
|
-
// Handle abort signal
|
|
132
|
-
if (signal) {
|
|
133
|
-
signal.addEventListener("abort", () => {
|
|
134
|
-
cleanup();
|
|
135
|
-
const err = new Error("AbortError");
|
|
136
|
-
err.name = "AbortError";
|
|
137
|
-
reject(err);
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
function onData(key) {
|
|
141
|
-
if (key === "\u0003") {
|
|
142
|
-
cleanup();
|
|
143
|
-
stdout.write("\n");
|
|
144
|
-
const err = new Error("Cancelled");
|
|
145
|
-
err.isCanceled = true;
|
|
146
|
-
reject(err);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
if (key === "\r" || key === "\n") {
|
|
150
|
-
if (choices.length === 0) {
|
|
151
|
-
// No choices available, just return
|
|
152
|
-
cleanup();
|
|
153
|
-
stdout.write("\n");
|
|
154
|
-
const err = new Error("No choices available");
|
|
155
|
-
err.isCanceled = true;
|
|
156
|
-
reject(err);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
const chosen = choices[pointer];
|
|
160
|
-
if (chosen && !chosen.disabled) {
|
|
161
|
-
cleanup();
|
|
162
|
-
stdout.write("\n");
|
|
163
|
-
resolve(chosen.value);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
if (key === "\x1b[A") {
|
|
169
|
-
move(-1);
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
if (key === "\x1b[B") {
|
|
173
|
-
move(1);
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
if (key === "\x1b[H" || key === "\x1b[1~") {
|
|
177
|
-
if (choices.length > 0) {
|
|
178
|
-
for (let i = 0; i < choices.length; i++) {
|
|
179
|
-
if (!choices[i].disabled) {
|
|
180
|
-
pointer = i;
|
|
181
|
-
break;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
// Update pageStart to snap to page boundaries
|
|
185
|
-
const currentPage = Math.floor(pointer / pageSize);
|
|
186
|
-
pageStart = currentPage * pageSize;
|
|
187
|
-
pageStart = Math.max(0, Math.min(pageStart, choices.length - pageSize));
|
|
188
|
-
renderToScreen();
|
|
189
|
-
}
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
if (key === "\x1b[F" || key === "\x1b[4~") {
|
|
193
|
-
if (choices.length > 0) {
|
|
194
|
-
for (let i = choices.length - 1; i >= 0; i--) {
|
|
195
|
-
if (!choices[i].disabled) {
|
|
196
|
-
pointer = i;
|
|
197
|
-
break;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
// Update pageStart to snap to page boundaries
|
|
201
|
-
const currentPage = Math.floor(pointer / pageSize);
|
|
202
|
-
pageStart = currentPage * pageSize;
|
|
203
|
-
pageStart = Math.max(0, Math.min(pageStart, choices.length - pageSize));
|
|
204
|
-
renderToScreen();
|
|
205
|
-
}
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
if (key === "\x7f" || key === "\b") {
|
|
209
|
-
if (searchInput.length > 0) {
|
|
210
|
-
searchInput = searchInput.slice(0, -1);
|
|
211
|
-
updateChoices(searchInput);
|
|
212
|
-
}
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
if (key && key >= " " && key <= "~") {
|
|
216
|
-
searchInput += key;
|
|
217
|
-
updateChoices(searchInput);
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
hideCursor();
|
|
222
|
-
// Initial render with empty search
|
|
223
|
-
updateChoices("");
|
|
224
|
-
stdin.on("data", onData);
|
|
225
|
-
process.on("exit", () => {
|
|
226
|
-
if (!resolved) {
|
|
227
|
-
cleanup();
|
|
228
|
-
stdout.write("\n");
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
// Quick test when run directly
|
|
234
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
235
|
-
(async () => {
|
|
236
|
-
try {
|
|
237
|
-
const res = await search({
|
|
238
|
-
message: "Search for fruit",
|
|
239
|
-
source: async (input) => {
|
|
240
|
-
// Simulate async search
|
|
241
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
242
|
-
const fruits = [
|
|
243
|
-
"Apple",
|
|
244
|
-
"Banana",
|
|
245
|
-
"Cherry",
|
|
246
|
-
"Date",
|
|
247
|
-
"Elderberry",
|
|
248
|
-
"Fig",
|
|
249
|
-
"Grapes",
|
|
250
|
-
"Honeydew",
|
|
251
|
-
"Orange",
|
|
252
|
-
];
|
|
253
|
-
if (!input) {
|
|
254
|
-
return fruits.slice(0, 5);
|
|
255
|
-
}
|
|
256
|
-
return fruits
|
|
257
|
-
.filter((fruit) => fruit.toLowerCase().includes(input.toLowerCase()))
|
|
258
|
-
.slice(0, 10);
|
|
259
|
-
},
|
|
260
|
-
pageSize: 5,
|
|
261
|
-
});
|
|
262
|
-
console.log("You selected:", res);
|
|
263
|
-
process.exit(0);
|
|
264
|
-
}
|
|
265
|
-
catch (err) {
|
|
266
|
-
if (err &&
|
|
267
|
-
typeof err === "object" &&
|
|
268
|
-
"isCanceled" in err &&
|
|
269
|
-
err.isCanceled) {
|
|
270
|
-
console.error("Canceled");
|
|
271
|
-
process.exit(2);
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
console.error(err);
|
|
275
|
-
process.exit(1);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
})();
|
|
279
|
-
}
|
package/dist/terminal/types.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Terminal theme options
|
|
3
|
-
*/
|
|
4
|
-
type TerminalTheme = "dark" | "light" | "system";
|
|
5
|
-
/**
|
|
6
|
-
* Terminal configuration
|
|
7
|
-
*/
|
|
8
|
-
export interface TerminalConfig {
|
|
9
|
-
/**
|
|
10
|
-
* Terminal color theme
|
|
11
|
-
*/
|
|
12
|
-
theme: TerminalTheme;
|
|
13
|
-
/**
|
|
14
|
-
* Whether to use colors in output
|
|
15
|
-
*/
|
|
16
|
-
useColors: boolean;
|
|
17
|
-
/**
|
|
18
|
-
* Whether to show progress indicators
|
|
19
|
-
*/
|
|
20
|
-
showProgressIndicators: boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Whether to enable syntax highlighting for code
|
|
23
|
-
*/
|
|
24
|
-
codeHighlighting: boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Maximum terminal height (rows)
|
|
27
|
-
*/
|
|
28
|
-
maxHeight?: number | undefined;
|
|
29
|
-
/**
|
|
30
|
-
* Maximum terminal width (columns)
|
|
31
|
-
*/
|
|
32
|
-
maxWidth?: number | undefined;
|
|
33
|
-
}
|
|
34
|
-
export {};
|
|
35
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../source/terminal/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IAErB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B"}
|
package/dist/terminal/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { TokenCounter } from "./counter.ts";
|
|
2
|
-
/**
|
|
3
|
-
* Interface for options when managing output
|
|
4
|
-
*/
|
|
5
|
-
interface ManageOutputOptions {
|
|
6
|
-
tokenCounter: TokenCounter;
|
|
7
|
-
threshold?: number;
|
|
8
|
-
truncate?: boolean;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Interface for the result of managing output
|
|
12
|
-
*/
|
|
13
|
-
interface TruncatedOutput {
|
|
14
|
-
content: string;
|
|
15
|
-
tokenCount: number;
|
|
16
|
-
truncated: true;
|
|
17
|
-
warning: string;
|
|
18
|
-
}
|
|
19
|
-
interface Output {
|
|
20
|
-
content: string;
|
|
21
|
-
tokenCount: number;
|
|
22
|
-
truncated: false;
|
|
23
|
-
warning?: string;
|
|
24
|
-
}
|
|
25
|
-
type ManagedOutput = Output | TruncatedOutput;
|
|
26
|
-
/**
|
|
27
|
-
* Manages output by counting tokens and optionally truncating if over threshold.
|
|
28
|
-
* @param input - The input string to manage
|
|
29
|
-
* @param options - Configuration for management
|
|
30
|
-
* @returns Managed output details
|
|
31
|
-
*/
|
|
32
|
-
export declare function manageOutput(input: string, options: ManageOutputOptions): ManagedOutput;
|
|
33
|
-
export {};
|
|
34
|
-
//# sourceMappingURL=manage-output.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manage-output.d.ts","sourceRoot":"","sources":["../../source/tokens/manage-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,UAAU,mBAAmB;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,MAAM;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,aAAa,GAAG,MAAM,GAAG,eAAe,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,mBAAmB,GAC3B,aAAa,CA2Cf"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manages output by counting tokens and optionally truncating if over threshold.
|
|
3
|
-
* @param input - The input string to manage
|
|
4
|
-
* @param options - Configuration for management
|
|
5
|
-
* @returns Managed output details
|
|
6
|
-
*/
|
|
7
|
-
export function manageOutput(input, options) {
|
|
8
|
-
const { threshold = 8000, truncate = true } = options;
|
|
9
|
-
if (!input) {
|
|
10
|
-
return { content: input, tokenCount: 0, truncated: false };
|
|
11
|
-
}
|
|
12
|
-
let tokenCount;
|
|
13
|
-
try {
|
|
14
|
-
tokenCount = options.tokenCounter.count(input);
|
|
15
|
-
}
|
|
16
|
-
catch (error) {
|
|
17
|
-
console.warn(`Token counting failed: ${error}. Using fallback.`);
|
|
18
|
-
// Fallback: Rough estimate (4 chars ~1 token)
|
|
19
|
-
tokenCount = Math.ceil(input.length / 4);
|
|
20
|
-
}
|
|
21
|
-
if (tokenCount <= threshold) {
|
|
22
|
-
return { content: input, tokenCount, truncated: false };
|
|
23
|
-
}
|
|
24
|
-
const _exceededBy = tokenCount - threshold;
|
|
25
|
-
let truncatedContent = input;
|
|
26
|
-
let truncated = false;
|
|
27
|
-
if (truncate) {
|
|
28
|
-
// Simple truncation: Cut to approx threshold tokens, add ellipsis
|
|
29
|
-
// For better UX, could be smarter (e.g., by lines for grep, preserve JSON)
|
|
30
|
-
// But keep general for now
|
|
31
|
-
const targetLength = threshold * 4; // Rough char estimate
|
|
32
|
-
truncatedContent = `${input.slice(0, targetLength)}\n\n[Output truncated at ~${threshold} tokens (${_exceededBy} tokens omitted)]`;
|
|
33
|
-
truncated = true;
|
|
34
|
-
}
|
|
35
|
-
const warning = truncated
|
|
36
|
-
? `Warning: Output exceeds token threshold (${threshold}). Tokens: ${tokenCount}. ${truncate ? "Truncated." : "Full output returned—consider summarizing."}`
|
|
37
|
-
: undefined;
|
|
38
|
-
return {
|
|
39
|
-
content: truncatedContent,
|
|
40
|
-
tokenCount,
|
|
41
|
-
truncated,
|
|
42
|
-
warning,
|
|
43
|
-
};
|
|
44
|
-
}
|
package/dist/tool-executor.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
interface AskContext {
|
|
2
|
-
toolName: string;
|
|
3
|
-
toolCallId: string;
|
|
4
|
-
message: string;
|
|
5
|
-
choices: {
|
|
6
|
-
accept: string;
|
|
7
|
-
acceptAll: string;
|
|
8
|
-
reject: string;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
export type AskResponse = {
|
|
12
|
-
result: "accept" | "accept-all";
|
|
13
|
-
reason?: string;
|
|
14
|
-
} | {
|
|
15
|
-
result: "reject";
|
|
16
|
-
reason: string;
|
|
17
|
-
};
|
|
18
|
-
export declare class ToolExecutor {
|
|
19
|
-
private autoAcceptAll;
|
|
20
|
-
private autoAcceptMap;
|
|
21
|
-
constructor(autoAcceptAll: boolean);
|
|
22
|
-
autoAccept(toolName: string): boolean;
|
|
23
|
-
ask(ctx: AskContext, { abortSignal }: {
|
|
24
|
-
abortSignal?: AbortSignal;
|
|
25
|
-
}): Promise<AskResponse>;
|
|
26
|
-
}
|
|
27
|
-
export {};
|
|
28
|
-
//# sourceMappingURL=tool-executor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../source/tool-executor.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,aAAa,CAA8B;gBAEvC,aAAa,EAAE,OAAO;IAIlC,UAAU,CAAC,QAAQ,EAAE,MAAM;IAIrB,GAAG,CACP,GAAG,EAAE,UAAU,EACf,EAAE,WAAW,EAAE,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GAC7C,OAAO,CAAC,WAAW,CAAC;CAgExB"}
|