@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
package/dist/index.js
CHANGED
|
@@ -1,50 +1,72 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
2
4
|
import { text } from "node:stream/consumers";
|
|
3
5
|
import { parseArgs } from "node:util";
|
|
4
6
|
import { asyncTry } from "@travisennis/stdlib/try";
|
|
5
7
|
import { isDefined } from "@travisennis/stdlib/typeguards";
|
|
8
|
+
import { Agent } from "./agent/index.js";
|
|
6
9
|
import { Cli } from "./cli.js";
|
|
7
10
|
import { CommandManager } from "./commands/manager.js";
|
|
8
|
-
import { config } from "./config.js";
|
|
11
|
+
import { config, } from "./config.js";
|
|
9
12
|
import { logger } from "./logger.js";
|
|
10
13
|
import { MessageHistory } from "./messages.js";
|
|
11
14
|
import { ModelManager } from "./models/manager.js";
|
|
12
15
|
import { isSupportedModel } from "./models/providers.js";
|
|
13
16
|
import { PromptManager } from "./prompts/manager.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
17
|
+
import { systemPrompt } from "./prompts.js";
|
|
18
|
+
import { NewRepl } from "./repl-new.js";
|
|
19
|
+
import { setTerminalTitle } from "./terminal/formatting.js";
|
|
16
20
|
import { select } from "./terminal/select-prompt.js";
|
|
17
21
|
import { TokenCounter } from "./tokens/counter.js";
|
|
18
22
|
import { TokenTracker } from "./tokens/tracker.js";
|
|
19
|
-
import {
|
|
23
|
+
import { initAgents, initTools, } from "./tools/index.js";
|
|
20
24
|
import { getPackageVersion } from "./version.js";
|
|
25
|
+
// Create workspace context from CLI arguments
|
|
26
|
+
export function createWorkspaceContext(addDirArgs = []) {
|
|
27
|
+
const primaryDir = process.cwd();
|
|
28
|
+
const allowedDirs = [
|
|
29
|
+
primaryDir,
|
|
30
|
+
"/tmp",
|
|
31
|
+
config.getAccessibleLogDir(),
|
|
32
|
+
path.join(os.homedir(), ".acai"),
|
|
33
|
+
...addDirArgs,
|
|
34
|
+
];
|
|
35
|
+
// Remove duplicates while preserving order
|
|
36
|
+
const uniqueDirs = allowedDirs.filter((dir, index, array) => array.indexOf(dir) === index);
|
|
37
|
+
return {
|
|
38
|
+
primaryDir,
|
|
39
|
+
allowedDirs: uniqueDirs,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
21
42
|
const helpText = `
|
|
22
43
|
Usage
|
|
23
44
|
$ acai <input>
|
|
24
45
|
|
|
25
46
|
Options
|
|
26
47
|
--model, -m Sets the model to use
|
|
27
|
-
--prompt, -p Sets the prompt
|
|
28
|
-
--oneshot, -o Run once and exit
|
|
48
|
+
--prompt, -p Sets the prompt (runs in CLI mode)
|
|
29
49
|
--continue Load the most recent conversation
|
|
30
50
|
--resume Select a recent conversation to resume
|
|
31
|
-
--
|
|
51
|
+
--add-dir Add additional working directory (can be used multiple times)
|
|
52
|
+
--no-skills Disable skills discovery and loading
|
|
53
|
+
|
|
32
54
|
--help, -h Show help
|
|
33
55
|
--version, -v Show version
|
|
34
56
|
|
|
35
57
|
Examples
|
|
36
58
|
$ acai --model anthopric:sonnet
|
|
37
59
|
$ acai -p "initial prompt"
|
|
38
|
-
$ acai -
|
|
60
|
+
$ acai --add-dir /path/to/project1 --add-dir /path/to/project2
|
|
39
61
|
`;
|
|
40
62
|
const parsed = parseArgs({
|
|
41
63
|
options: {
|
|
42
64
|
model: { type: "string", short: "m" },
|
|
43
65
|
prompt: { type: "string", short: "p" },
|
|
44
|
-
oneshot: { type: "boolean", short: "o", default: false },
|
|
45
66
|
continue: { type: "boolean", default: false },
|
|
46
67
|
resume: { type: "boolean", default: false },
|
|
47
|
-
|
|
68
|
+
"add-dir": { type: "string", multiple: true },
|
|
69
|
+
"no-skills": { type: "boolean", default: false },
|
|
48
70
|
help: { type: "boolean", short: "h" },
|
|
49
71
|
version: { type: "boolean", short: "v" },
|
|
50
72
|
},
|
|
@@ -52,6 +74,8 @@ const parsed = parseArgs({
|
|
|
52
74
|
});
|
|
53
75
|
const flags = parsed.values;
|
|
54
76
|
const input = parsed.positionals;
|
|
77
|
+
// Create workspace context from CLI arguments
|
|
78
|
+
const workspace = createWorkspaceContext(flags["add-dir"]);
|
|
55
79
|
/**
|
|
56
80
|
* Global error handler function.
|
|
57
81
|
* @param {Error} error - The error to be handled.
|
|
@@ -60,8 +84,56 @@ const input = parsed.positionals;
|
|
|
60
84
|
export function handleError(error) {
|
|
61
85
|
logger.error({ error: error }, error.message);
|
|
62
86
|
}
|
|
63
|
-
|
|
64
|
-
|
|
87
|
+
// Configuration constants
|
|
88
|
+
const DEFAULT_HISTORY_LIMIT = 10;
|
|
89
|
+
const CONTINUE_HISTORY_LIMIT = 1;
|
|
90
|
+
// Helper functions for main()
|
|
91
|
+
async function initializeAppState(appConfig, initialPromptInput, stdInPrompt, hasContinueOrResume) {
|
|
92
|
+
const appDir = config.app;
|
|
93
|
+
// Parallelize independent async operations
|
|
94
|
+
const [messageHistoryDir, modelManager] = await Promise.all([
|
|
95
|
+
appDir.ensurePath("message-history"),
|
|
96
|
+
initializeModelManager(appDir),
|
|
97
|
+
]);
|
|
98
|
+
// Initialize synchronous components
|
|
99
|
+
const tokenTracker = new TokenTracker();
|
|
100
|
+
const tokenCounter = new TokenCounter();
|
|
101
|
+
// Initialize dependent components
|
|
102
|
+
const messageHistory = await initializeMessageHistory(messageHistoryDir, modelManager, tokenTracker);
|
|
103
|
+
// Handle conversation history loading
|
|
104
|
+
await handleConversationHistory(messageHistory, messageHistoryDir, hasContinueOrResume);
|
|
105
|
+
// Setup prompt manager
|
|
106
|
+
const promptManager = new PromptManager(tokenCounter);
|
|
107
|
+
if (!hasContinueOrResume && isDefined(initialPromptInput)) {
|
|
108
|
+
promptManager.set(initialPromptInput);
|
|
109
|
+
}
|
|
110
|
+
if (stdInPrompt) {
|
|
111
|
+
promptManager.addContext(stdInPrompt);
|
|
112
|
+
}
|
|
113
|
+
const promptHistory = [];
|
|
114
|
+
const commands = new CommandManager({
|
|
115
|
+
promptManager,
|
|
116
|
+
modelManager,
|
|
117
|
+
messageHistory,
|
|
118
|
+
tokenTracker,
|
|
119
|
+
config,
|
|
120
|
+
tokenCounter,
|
|
121
|
+
promptHistory,
|
|
122
|
+
workspace,
|
|
123
|
+
});
|
|
124
|
+
await commands.initializeCommmands();
|
|
125
|
+
return {
|
|
126
|
+
appConfig,
|
|
127
|
+
modelManager,
|
|
128
|
+
tokenTracker,
|
|
129
|
+
tokenCounter,
|
|
130
|
+
messageHistory,
|
|
131
|
+
promptManager,
|
|
132
|
+
promptHistory,
|
|
133
|
+
commands,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
async function handleEarlyExits() {
|
|
65
137
|
if (flags.version === true) {
|
|
66
138
|
console.info(getPackageVersion());
|
|
67
139
|
process.exit(0);
|
|
@@ -70,25 +142,21 @@ async function main() {
|
|
|
70
142
|
console.info(helpText);
|
|
71
143
|
process.exit(0);
|
|
72
144
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
function validateCliArguments() {
|
|
76
148
|
if (flags.continue === true && flags.resume === true) {
|
|
77
149
|
console.error("Cannot use --continue and --resume flags together.");
|
|
78
150
|
process.exit(1);
|
|
79
151
|
}
|
|
152
|
+
}
|
|
153
|
+
async function determineInitialPrompt() {
|
|
80
154
|
const hasContinueOrResume = flags.continue === true || flags.resume === true;
|
|
81
|
-
if (hasContinueOrResume && flags.oneshot === true) {
|
|
82
|
-
console.error("Cannot use --continue or --resume with --oneshot.");
|
|
83
|
-
process.exit(1);
|
|
84
|
-
}
|
|
85
|
-
// --- Determine Initial Prompt (potential conflict) ---
|
|
86
155
|
const positionalPrompt = input.at(0);
|
|
87
156
|
let stdInPrompt;
|
|
88
157
|
// Check if there's data available on stdin
|
|
89
158
|
if (!process.stdin.isTTY) {
|
|
90
159
|
try {
|
|
91
|
-
// Non-TTY stdin means data is being piped in
|
|
92
160
|
stdInPrompt = await text(process.stdin);
|
|
93
161
|
}
|
|
94
162
|
catch (error) {
|
|
@@ -104,121 +172,214 @@ async function main() {
|
|
|
104
172
|
console.error("Cannot use --continue or --resume with an initial prompt.");
|
|
105
173
|
process.exit(1);
|
|
106
174
|
}
|
|
107
|
-
|
|
108
|
-
|
|
175
|
+
return { initialPromptInput, stdInPrompt, hasContinueOrResume };
|
|
176
|
+
}
|
|
177
|
+
async function initializeModelManager(appDir) {
|
|
109
178
|
const chosenModel = isSupportedModel(flags.model)
|
|
110
179
|
? flags.model
|
|
111
|
-
: "openrouter:glm-4.
|
|
180
|
+
: "openrouter:glm-4.6";
|
|
112
181
|
const modelManager = new ModelManager({
|
|
113
182
|
stateDir: await appDir.ensurePath("audit"),
|
|
114
183
|
});
|
|
115
184
|
modelManager.setModel("repl", chosenModel);
|
|
116
185
|
modelManager.setModel("cli", chosenModel);
|
|
117
|
-
modelManager.setModel("title-conversation",
|
|
118
|
-
modelManager.setModel("conversation-summarizer",
|
|
119
|
-
modelManager.setModel("tool-repair",
|
|
120
|
-
modelManager.setModel("conversation-analyzer",
|
|
186
|
+
modelManager.setModel("title-conversation", chosenModel);
|
|
187
|
+
modelManager.setModel("conversation-summarizer", chosenModel);
|
|
188
|
+
modelManager.setModel("tool-repair", chosenModel);
|
|
189
|
+
modelManager.setModel("conversation-analyzer", chosenModel);
|
|
121
190
|
modelManager.setModel("init-project", chosenModel);
|
|
122
|
-
modelManager.setModel("task-agent",
|
|
123
|
-
|
|
124
|
-
|
|
191
|
+
modelManager.setModel("task-agent", chosenModel);
|
|
192
|
+
modelManager.setModel("handoff-agent", chosenModel);
|
|
193
|
+
modelManager.setModel("edit-fix", chosenModel);
|
|
194
|
+
return modelManager;
|
|
195
|
+
}
|
|
196
|
+
async function initializeMessageHistory(messageHistoryDir, modelManager, tokenTracker) {
|
|
125
197
|
const messageHistory = new MessageHistory({
|
|
126
198
|
stateDir: messageHistoryDir,
|
|
127
199
|
modelManager,
|
|
128
200
|
tokenTracker,
|
|
129
201
|
});
|
|
130
|
-
messageHistory.on("update-title", (title) =>
|
|
202
|
+
messageHistory.on("update-title", (title) => setTerminalTitle(title));
|
|
203
|
+
return messageHistory;
|
|
204
|
+
}
|
|
205
|
+
async function handleConversationHistory(messageHistory, messageHistoryDir, _hasContinueOrResume) {
|
|
131
206
|
if (flags.continue === true) {
|
|
132
|
-
const histories = await MessageHistory.load(messageHistoryDir,
|
|
207
|
+
const histories = await MessageHistory.load(messageHistoryDir, CONTINUE_HISTORY_LIMIT);
|
|
133
208
|
const latestHistory = histories.at(0);
|
|
134
209
|
if (latestHistory) {
|
|
135
210
|
messageHistory.restore(latestHistory);
|
|
136
211
|
console.info(`Resuming conversation: ${latestHistory.title}`);
|
|
137
|
-
|
|
138
|
-
terminal.setTitle(latestHistory.title || `acai: ${process.cwd()}`);
|
|
212
|
+
setTerminalTitle(latestHistory.title || `acai: ${process.cwd()}`);
|
|
139
213
|
}
|
|
140
214
|
else {
|
|
141
215
|
logger.info("No previous conversation found to continue.");
|
|
142
216
|
}
|
|
143
217
|
}
|
|
144
218
|
else if (flags.resume === true) {
|
|
145
|
-
const histories = await MessageHistory.load(messageHistoryDir,
|
|
219
|
+
const histories = await MessageHistory.load(messageHistoryDir, DEFAULT_HISTORY_LIMIT);
|
|
146
220
|
if (histories.length > 0) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
221
|
+
try {
|
|
222
|
+
const choice = await select({
|
|
223
|
+
message: "Select a conversation to resume:",
|
|
224
|
+
choices: histories.map((h, index) => ({
|
|
225
|
+
name: `${index + 1}: ${h.title} (${h.updatedAt.toLocaleString()})`,
|
|
226
|
+
value: index,
|
|
227
|
+
description: `${h.messages.length} messages`,
|
|
228
|
+
})),
|
|
229
|
+
});
|
|
230
|
+
const selectedHistory = histories.at(choice);
|
|
231
|
+
if (selectedHistory) {
|
|
232
|
+
messageHistory.restore(selectedHistory);
|
|
233
|
+
logger.info(`Resuming conversation: ${selectedHistory.title}`);
|
|
234
|
+
setTerminalTitle(selectedHistory.title || `acai: ${process.cwd()}`);
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
logger.error("Selected history index out of bounds.");
|
|
238
|
+
}
|
|
161
239
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
240
|
+
catch (error) {
|
|
241
|
+
if (error instanceof Error &&
|
|
242
|
+
"isCanceled" in error &&
|
|
243
|
+
error.isCanceled === true) {
|
|
244
|
+
logger.info("Resume selection cancelled.");
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
throw error;
|
|
248
|
+
}
|
|
165
249
|
}
|
|
166
250
|
}
|
|
167
251
|
else {
|
|
168
252
|
logger.info("No previous conversations found to resume.");
|
|
169
253
|
}
|
|
170
254
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
promptManager.
|
|
255
|
+
}
|
|
256
|
+
async function runCliMode(state) {
|
|
257
|
+
const skillsEnabled = !flags["no-skills"] && (await config.getSkillsEnabled());
|
|
258
|
+
const cliProcess = new Cli({
|
|
259
|
+
promptManager: state.promptManager,
|
|
260
|
+
messageHistory: state.messageHistory,
|
|
261
|
+
modelManager: state.modelManager,
|
|
262
|
+
tokenTracker: state.tokenTracker,
|
|
263
|
+
tokenCounter: state.tokenCounter,
|
|
264
|
+
workspace,
|
|
265
|
+
skillsEnabled,
|
|
266
|
+
});
|
|
267
|
+
(await asyncTry(cliProcess.run())).recover(handleError);
|
|
268
|
+
}
|
|
269
|
+
async function runReplMode(state) {
|
|
270
|
+
const agent = new Agent({
|
|
271
|
+
messageHistory: state.messageHistory,
|
|
272
|
+
modelManager: state.modelManager,
|
|
273
|
+
tokenTracker: state.tokenTracker,
|
|
274
|
+
});
|
|
275
|
+
const repl = new NewRepl({
|
|
276
|
+
agent,
|
|
277
|
+
promptManager: state.promptManager,
|
|
278
|
+
config: state.appConfig,
|
|
279
|
+
messageHistory: state.messageHistory,
|
|
280
|
+
modelManager: state.modelManager,
|
|
281
|
+
tokenTracker: state.tokenTracker,
|
|
282
|
+
commands: state.commands,
|
|
283
|
+
tokenCounter: state.tokenCounter,
|
|
284
|
+
promptHistory: state.promptHistory,
|
|
285
|
+
workspace,
|
|
286
|
+
});
|
|
287
|
+
// Initialize TUI
|
|
288
|
+
await repl.init();
|
|
289
|
+
state.messageHistory.on("clear-history", () => {
|
|
290
|
+
logger.info("Resetting agent state.");
|
|
291
|
+
agent.resetState();
|
|
292
|
+
repl.rerender();
|
|
293
|
+
});
|
|
294
|
+
// Set interrupt callback
|
|
295
|
+
repl.setInterruptCallback(() => {
|
|
296
|
+
try {
|
|
297
|
+
state.messageHistory.save();
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
// Log but don't throw - we still want to abort the agent
|
|
301
|
+
logger.warn({ error }, "Failed to save message history on interrupt");
|
|
302
|
+
}
|
|
303
|
+
agent.abort();
|
|
304
|
+
});
|
|
305
|
+
// Initialize tools
|
|
306
|
+
const coreTools = await initTools({
|
|
307
|
+
tokenCounter: state.tokenCounter,
|
|
308
|
+
workspace,
|
|
309
|
+
modelManager: state.modelManager,
|
|
310
|
+
tokenTracker: state.tokenTracker,
|
|
311
|
+
});
|
|
312
|
+
const agentTools = await initAgents({
|
|
313
|
+
modelManager: state.modelManager,
|
|
314
|
+
tokenTracker: state.tokenTracker,
|
|
315
|
+
tokenCounter: state.tokenCounter,
|
|
316
|
+
workspace,
|
|
317
|
+
});
|
|
318
|
+
const completeToolDefs = {
|
|
319
|
+
...coreTools.toolDefs,
|
|
320
|
+
...agentTools.toolDefs,
|
|
321
|
+
};
|
|
322
|
+
const tools = {
|
|
323
|
+
toolDefs: completeToolDefs,
|
|
324
|
+
executors: new Map([...coreTools.executors, ...agentTools.executors]),
|
|
325
|
+
};
|
|
326
|
+
// Interactive loop
|
|
327
|
+
while (true) {
|
|
328
|
+
const userInput = await repl.getUserInput();
|
|
329
|
+
const projectConfig = await config.getConfig();
|
|
330
|
+
const activeTools = projectConfig.tools.activeTools;
|
|
331
|
+
const skillsEnabled = !flags["no-skills"] && (projectConfig.skills?.enabled ?? true);
|
|
332
|
+
try {
|
|
333
|
+
const results = agent.run({
|
|
334
|
+
systemPrompt: await systemPrompt({
|
|
335
|
+
type: projectConfig.systemPromptType,
|
|
336
|
+
activeTools,
|
|
337
|
+
allowedDirs: workspace.allowedDirs,
|
|
338
|
+
skillsEnabled,
|
|
339
|
+
}),
|
|
340
|
+
input: userInput,
|
|
341
|
+
toolDefs: tools.toolDefs,
|
|
342
|
+
activeTools,
|
|
343
|
+
executors: tools.executors,
|
|
344
|
+
abortSignal: agent.abortSignal,
|
|
345
|
+
});
|
|
346
|
+
for await (const result of results) {
|
|
347
|
+
repl.handle(result, agent.state);
|
|
348
|
+
}
|
|
349
|
+
state.messageHistory.save();
|
|
350
|
+
}
|
|
351
|
+
catch (_error) {
|
|
352
|
+
// Display error in the TUI by adding an error message to the chat
|
|
353
|
+
// repl.showError((error as Error).message || "Unknown error occurred");
|
|
354
|
+
}
|
|
176
355
|
}
|
|
177
|
-
|
|
178
|
-
|
|
356
|
+
}
|
|
357
|
+
async function main() {
|
|
358
|
+
try {
|
|
359
|
+
const appConfig = await config.ensureDefaultConfig("acai");
|
|
360
|
+
// Note: SIGINT/SIGTERM handlers are set up by CLI and REPL components
|
|
361
|
+
// as needed. We don't set a global handler here to avoid conflicts.
|
|
362
|
+
// Handle early exits
|
|
363
|
+
if (await handleEarlyExits())
|
|
364
|
+
return;
|
|
365
|
+
// Validate CLI arguments
|
|
366
|
+
validateCliArguments();
|
|
367
|
+
// Determine initial prompt
|
|
368
|
+
const { initialPromptInput, stdInPrompt, hasContinueOrResume } = await determineInitialPrompt();
|
|
369
|
+
// Initialize application state
|
|
370
|
+
const state = await initializeAppState(appConfig, initialPromptInput, stdInPrompt, hasContinueOrResume);
|
|
371
|
+
// Set terminal title after all validation is complete
|
|
372
|
+
setTerminalTitle(`acai: ${workspace.primaryDir}`);
|
|
373
|
+
// Handle CLI mode if initial prompt provided
|
|
374
|
+
if (isDefined(initialPromptInput)) {
|
|
375
|
+
return await runCliMode(state);
|
|
376
|
+
}
|
|
377
|
+
// Setup REPL mode
|
|
378
|
+
return await runReplMode(state);
|
|
179
379
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
promptManager,
|
|
184
|
-
modelManager,
|
|
185
|
-
terminal,
|
|
186
|
-
messageHistory,
|
|
187
|
-
tokenTracker,
|
|
188
|
-
config,
|
|
189
|
-
tokenCounter,
|
|
190
|
-
toolExecutor,
|
|
191
|
-
toolEvents,
|
|
192
|
-
promptHistory,
|
|
193
|
-
});
|
|
194
|
-
await commands.initializeCommmands();
|
|
195
|
-
if (flags.oneshot === true) {
|
|
196
|
-
const cliProcess = new Cli({
|
|
197
|
-
promptManager,
|
|
198
|
-
config: appConfig,
|
|
199
|
-
messageHistory,
|
|
200
|
-
modelManager,
|
|
201
|
-
tokenTracker,
|
|
202
|
-
tokenCounter,
|
|
203
|
-
});
|
|
204
|
-
return (await asyncTry(cliProcess.run())).recover(handleError);
|
|
380
|
+
catch (error) {
|
|
381
|
+
handleError(error);
|
|
382
|
+
process.exit(1);
|
|
205
383
|
}
|
|
206
|
-
const repl = new Repl({
|
|
207
|
-
promptManager,
|
|
208
|
-
terminal,
|
|
209
|
-
config: appConfig,
|
|
210
|
-
messageHistory,
|
|
211
|
-
modelManager,
|
|
212
|
-
tokenTracker,
|
|
213
|
-
commands,
|
|
214
|
-
tokenCounter,
|
|
215
|
-
toolEvents,
|
|
216
|
-
toolExecutor,
|
|
217
|
-
promptHistory,
|
|
218
|
-
showLastMessage: hasContinueOrResume
|
|
219
|
-
? !!(messageHistory.get() && messageHistory.get().length > 0)
|
|
220
|
-
: false,
|
|
221
|
-
});
|
|
222
|
-
return (await asyncTry(repl.run())).recover(handleError);
|
|
223
384
|
}
|
|
224
385
|
main();
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../source/logger.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../source/logger.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AAwDxB,eAAO,MAAM,MAAM,6BAIjB,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -1,24 +1,53 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import pino from "pino";
|
|
3
3
|
import { config } from "./config.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
// Create a lazy logger factory that only initializes when first used
|
|
5
|
+
let loggerInstance = null;
|
|
6
|
+
function createLogger() {
|
|
7
|
+
// Check if we're running in code interpreter context
|
|
8
|
+
// Try multiple detection methods:
|
|
9
|
+
// 1. Environment variable (primary method)
|
|
10
|
+
// 2. Check if we're running with Node.js permissions (fallback)
|
|
11
|
+
const isCodeInterpreter = process.env["ACAI_CODE_INTERPRETER"] === "true" ||
|
|
12
|
+
(typeof process.permission !== "undefined" &&
|
|
13
|
+
process.permission.has !== undefined);
|
|
14
|
+
if (isCodeInterpreter) {
|
|
15
|
+
// In code interpreter context, use a no-op logger to avoid noise in script output
|
|
16
|
+
return pino({
|
|
17
|
+
level: "silent", // Completely disable logging
|
|
18
|
+
enabled: false, // Disable the logger entirely
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
// Normal file-based logging
|
|
22
|
+
return pino({
|
|
23
|
+
level: process.env["LOG_LEVEL"] ?? "debug",
|
|
24
|
+
formatters: {
|
|
25
|
+
level: (label) => {
|
|
26
|
+
return { level: label.toUpperCase() };
|
|
27
|
+
},
|
|
12
28
|
},
|
|
13
|
-
|
|
14
|
-
},
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
29
|
+
timestamp: pino.stdTimeFunctions.isoTime,
|
|
30
|
+
}, pino.transport({
|
|
31
|
+
target: "pino-roll",
|
|
32
|
+
options: {
|
|
33
|
+
file: join(config.app.ensurePathSync("logs"), "acai.log"),
|
|
34
|
+
size: "10m",
|
|
35
|
+
symlink: true,
|
|
36
|
+
limit: {
|
|
37
|
+
count: 3,
|
|
38
|
+
},
|
|
39
|
+
mkdir: true,
|
|
21
40
|
},
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
function getLogger() {
|
|
44
|
+
if (!loggerInstance) {
|
|
45
|
+
loggerInstance = createLogger();
|
|
46
|
+
}
|
|
47
|
+
return loggerInstance;
|
|
48
|
+
}
|
|
49
|
+
export const logger = new Proxy({}, {
|
|
50
|
+
get(_target, prop) {
|
|
51
|
+
return getLogger()[prop];
|
|
22
52
|
},
|
|
23
|
-
|
|
24
|
-
}, transport);
|
|
53
|
+
});
|
package/dist/mentions.d.ts
CHANGED
|
@@ -3,9 +3,10 @@ import type { ContextItem } from "./prompts/manager.ts";
|
|
|
3
3
|
export declare class PromptError extends Error {
|
|
4
4
|
constructor(message: string, cause?: Error);
|
|
5
5
|
}
|
|
6
|
-
export declare function processPrompt(message: string, { baseDir, model }: {
|
|
6
|
+
export declare function processPrompt(message: string, { baseDir, model, pasteStore, }: {
|
|
7
7
|
baseDir: string;
|
|
8
8
|
model: ModelMetadata;
|
|
9
|
+
pasteStore?: Map<number, string>;
|
|
9
10
|
}): Promise<{
|
|
10
11
|
message: string;
|
|
11
12
|
context: ContextItem[];
|
package/dist/mentions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../source/mentions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsBxD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAI3C;AA+JD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,
|
|
1
|
+
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../source/mentions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsBxD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAI3C;AA+JD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,EACE,OAAO,EACP,KAAK,EACL,UAAU,GACX,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CA8GtD"}
|
package/dist/mentions.js
CHANGED
|
@@ -137,7 +137,7 @@ async function processUrlCommand(context) {
|
|
|
137
137
|
};
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
|
-
export async function processPrompt(message, { baseDir, model }) {
|
|
140
|
+
export async function processPrompt(message, { baseDir, model, pasteStore, }) {
|
|
141
141
|
const fileRegex = /@([^\s@]+(?:\.[\w\d]+))/g;
|
|
142
142
|
const urlRegex = /@(https?:\/\/[^\s]+)/g;
|
|
143
143
|
const shellRegex = /!`([^`]+)`/g;
|
|
@@ -171,6 +171,21 @@ export async function processPrompt(message, { baseDir, model }) {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
let processedMessage = message;
|
|
174
|
+
// Process paste placeholders
|
|
175
|
+
if (pasteStore && pasteStore.size > 0) {
|
|
176
|
+
const pasteRegex = /\[Paste #(\d+), (\d+) characters\]/g;
|
|
177
|
+
let match = pasteRegex.exec(processedMessage);
|
|
178
|
+
while (match !== null) {
|
|
179
|
+
const pasteId = Number.parseInt(match[1], 10);
|
|
180
|
+
const pasteContent = pasteStore.get(pasteId);
|
|
181
|
+
if (pasteContent) {
|
|
182
|
+
processedMessage = processedMessage.replace(match[0], pasteContent);
|
|
183
|
+
// Reset regex lastIndex since we modified the string
|
|
184
|
+
pasteRegex.lastIndex = 0;
|
|
185
|
+
}
|
|
186
|
+
match = pasteRegex.exec(processedMessage);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
174
189
|
// Process shell commands
|
|
175
190
|
for (const match of shellMatches) {
|
|
176
191
|
const command = match[1];
|
package/dist/messages.d.ts
CHANGED
|
@@ -11,6 +11,9 @@ It can be either an assistant message or a tool message.
|
|
|
11
11
|
*/
|
|
12
12
|
type ResponseMessage = AssistantModelMessage | ToolModelMessage;
|
|
13
13
|
type SavedMessageHistory = {
|
|
14
|
+
project: string;
|
|
15
|
+
sessionId: string;
|
|
16
|
+
modelId: string;
|
|
14
17
|
title: string;
|
|
15
18
|
createdAt: Date;
|
|
16
19
|
updatedAt: Date;
|
|
@@ -22,10 +25,13 @@ interface MessageHistoryEvents {
|
|
|
22
25
|
}
|
|
23
26
|
export declare class MessageHistory extends EventEmitter<MessageHistoryEvents> {
|
|
24
27
|
private history;
|
|
28
|
+
private sessionId;
|
|
29
|
+
private modelId;
|
|
25
30
|
private title;
|
|
26
31
|
private createdAt;
|
|
27
32
|
private updatedAt;
|
|
28
33
|
private stateDir;
|
|
34
|
+
private contextWindow;
|
|
29
35
|
private modelManager;
|
|
30
36
|
private tokenTracker;
|
|
31
37
|
constructor({ stateDir, modelManager, tokenTracker, }: {
|
|
@@ -33,18 +39,23 @@ export declare class MessageHistory extends EventEmitter<MessageHistoryEvents> {
|
|
|
33
39
|
modelManager: ModelManager;
|
|
34
40
|
tokenTracker: TokenTracker;
|
|
35
41
|
});
|
|
42
|
+
create(modelId: string): void;
|
|
36
43
|
private validMessage;
|
|
37
44
|
get(): ModelMessage[];
|
|
38
45
|
clear(): void;
|
|
46
|
+
setContextWindow(contextWindow: number): void;
|
|
47
|
+
getContextWindow(): number;
|
|
39
48
|
appendUserMessage(msg: string): void;
|
|
40
49
|
appendUserMessage(msg: UserModelMessage): void;
|
|
41
50
|
appendAssistantMessage(msg: string): void;
|
|
42
51
|
appendAssistantMessage(msg: AssistantModelMessage): void;
|
|
52
|
+
appendToolMessages(toolResultMessages: ToolModelMessage[]): void;
|
|
43
53
|
appendResponseMessages(responseMessages: ResponseMessage[]): void;
|
|
44
54
|
isEmpty(): boolean;
|
|
45
55
|
save(): Promise<void>;
|
|
46
56
|
private generateTitle;
|
|
47
57
|
getFirstUserMessage(): UserModelMessage | undefined;
|
|
58
|
+
getLastUserMessage(): UserModelMessage | undefined;
|
|
48
59
|
/**
|
|
49
60
|
* Extracts the last message from the conversation history for display purposes.
|
|
50
61
|
* Prioritizes assistant messages, falls back to user messages if no assistant messages exist.
|
package/dist/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../source/messages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../source/messages.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,aAAa,CAAC;AAYvC,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,SAAS,EAAE,kBAAkB;AAClC,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,IAAI,CAAC;AAEZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,CAAC;AAExD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,sBAAsB,EAAE,EACtC,MAAM,CAAC,EAAE,MAAM,GACd,gBAAgB,CAuBlB;AAcD;;;GAGG;AACH,KAAK,eAAe,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AAEhE,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B,CAAC;AAUF,UAAU,oBAAoB;IAC5B,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;IACzB,eAAe,EAAE,EAAE,CAAC;CACrB;AAED,qBAAa,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IACpE,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,EAAE,YAAY,CAAC;KAC5B;IAcD,MAAM,CAAC,OAAO,EAAE,MAAM;IAStB,OAAO,CAAC,YAAY;IAoBpB,GAAG;IAIH,KAAK;IAML,gBAAgB,CAAC,aAAa,EAAE,MAAM;IAOtC,gBAAgB;IAIhB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACpC,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAmB9C,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IACzC,sBAAsB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI;IAOxD,kBAAkB,CAAC,kBAAkB,EAAE,gBAAgB,EAAE;IAKzD,sBAAsB,CAAC,gBAAgB,EAAE,eAAe,EAAE;IAO1D,OAAO;IAID,IAAI;YA+DI,aAAa;IA6B3B,mBAAmB,IAAI,gBAAgB,GAAG,SAAS;IAOnD,kBAAkB,IAAI,gBAAgB,GAAG,SAAS;IAOlD;;;OAGG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;WA2ClB,IAAI,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAK,GACT,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAiGjC,OAAO,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI;CAajD"}
|