@travisennis/acai 0.0.4 → 0.0.6
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 +229 -8
- package/dist/agent/index.d.ts +119 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +406 -0
- package/dist/agent/manual-loop.d.ts +41 -0
- package/dist/agent/manual-loop.d.ts.map +1 -0
- package/dist/agent/manual-loop.js +278 -0
- package/dist/api/exa/index.d.ts +177 -0
- package/dist/api/exa/index.d.ts.map +1 -0
- package/dist/api/exa/index.js +439 -0
- package/dist/cli.d.ts +5 -2
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +27 -33
- 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 +85 -0
- package/dist/commands/application-log-command.d.ts +1 -0
- package/dist/commands/application-log-command.d.ts.map +1 -0
- package/dist/commands/application-log-command.js +39 -3
- package/dist/commands/clear-command.d.ts +1 -0
- package/dist/commands/clear-command.d.ts.map +1 -0
- package/dist/commands/clear-command.js +10 -3
- package/dist/commands/compact-command.d.ts +1 -0
- package/dist/commands/compact-command.d.ts.map +1 -0
- package/dist/commands/compact-command.js +16 -3
- 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 +183 -0
- package/dist/commands/copy-command.d.ts +1 -0
- package/dist/commands/copy-command.d.ts.map +1 -0
- package/dist/commands/copy-command.js +31 -2
- package/dist/commands/edit-command.d.ts +1 -0
- package/dist/commands/edit-command.d.ts.map +1 -0
- package/dist/commands/edit-command.js +40 -5
- package/dist/commands/edit-prompt-command.d.ts +2 -1
- package/dist/commands/edit-prompt-command.d.ts.map +1 -0
- package/dist/commands/edit-prompt-command.js +43 -7
- package/dist/commands/exit-command.d.ts +13 -2
- package/dist/commands/exit-command.d.ts.map +1 -0
- package/dist/commands/exit-command.js +34 -2
- package/dist/commands/files-command.d.ts +1 -0
- package/dist/commands/files-command.d.ts.map +1 -0
- package/dist/commands/files-command.js +66 -8
- package/dist/commands/generate-rules-command.d.ts +1 -0
- package/dist/commands/generate-rules-command.d.ts.map +1 -0
- package/dist/commands/generate-rules-command.js +315 -4
- 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 +202 -0
- package/dist/commands/health-command.d.ts +3 -1
- package/dist/commands/health-command.d.ts.map +1 -0
- package/dist/commands/health-command.js +160 -6
- package/dist/commands/help-command.d.ts +1 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +30 -3
- 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 +534 -0
- package/dist/commands/init-command.d.ts +2 -1
- package/dist/commands/init-command.d.ts.map +1 -0
- package/dist/commands/init-command.js +56 -20
- package/dist/commands/last-log-command.d.ts +1 -0
- package/dist/commands/last-log-command.d.ts.map +1 -0
- package/dist/commands/last-log-command.js +39 -17
- 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 +48 -0
- package/dist/commands/list-tools-command.d.ts +3 -0
- package/dist/commands/list-tools-command.d.ts.map +1 -0
- package/dist/commands/list-tools-command.js +124 -0
- package/dist/commands/manager.d.ts +20 -3
- package/dist/commands/manager.d.ts.map +1 -0
- package/dist/commands/manager.js +123 -26
- package/dist/commands/model-command.d.ts +23 -0
- package/dist/commands/model-command.d.ts.map +1 -0
- package/dist/commands/model-command.js +261 -5
- package/dist/commands/paste-command.d.ts +1 -0
- package/dist/commands/paste-command.d.ts.map +1 -0
- package/dist/commands/paste-command.js +98 -5
- 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 +161 -0
- package/dist/commands/prompt-command.d.ts +2 -1
- package/dist/commands/prompt-command.d.ts.map +1 -0
- package/dist/commands/prompt-command.js +178 -9
- 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 +87 -0
- package/dist/commands/reset-command.d.ts +2 -1
- package/dist/commands/reset-command.d.ts.map +1 -0
- package/dist/commands/reset-command.js +14 -3
- package/dist/commands/rules-command.d.ts +1 -0
- package/dist/commands/rules-command.d.ts.map +1 -0
- package/dist/commands/rules-command.js +70 -3
- package/dist/commands/save-command.d.ts +1 -0
- package/dist/commands/save-command.d.ts.map +1 -0
- package/dist/commands/save-command.js +13 -1
- package/dist/commands/shell-command.d.ts +3 -0
- package/dist/commands/shell-command.d.ts.map +1 -0
- package/dist/commands/shell-command.js +128 -0
- package/dist/commands/types.d.ts +16 -8
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/usage-command.d.ts +1 -0
- package/dist/commands/usage-command.d.ts.map +1 -0
- package/dist/commands/usage-command.js +24 -3
- package/dist/config.d.ts +21 -34
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +55 -15
- package/dist/dedent.d.ts +1 -0
- package/dist/dedent.d.ts.map +1 -0
- package/dist/execution/index.d.ts +112 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +432 -0
- package/dist/formatting.d.ts +107 -10
- package/dist/formatting.d.ts.map +1 -0
- package/dist/formatting.js +150 -62
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +150 -38
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +47 -18
- package/dist/mentions.d.ts +6 -1
- package/dist/mentions.d.ts.map +1 -0
- package/dist/mentions.js +58 -11
- package/dist/messages.d.ts +16 -20
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +89 -72
- package/dist/middleware/audit-message.d.ts +1 -0
- package/dist/middleware/audit-message.d.ts.map +1 -0
- 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 +2 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +1 -0
- package/dist/middleware/rate-limit.d.ts +1 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/models/ai-config.d.ts +5 -2
- package/dist/models/ai-config.d.ts.map +1 -0
- package/dist/models/ai-config.js +12 -2
- package/dist/models/anthropic-provider.d.ts +1 -0
- package/dist/models/anthropic-provider.d.ts.map +1 -0
- package/dist/models/anthropic-provider.js +3 -60
- package/dist/models/deepseek-provider.d.ts +1 -0
- package/dist/models/deepseek-provider.d.ts.map +1 -0
- package/dist/models/google-provider.d.ts +1 -0
- package/dist/models/google-provider.d.ts.map +1 -0
- package/dist/models/groq-provider.d.ts +20 -0
- package/dist/models/groq-provider.d.ts.map +1 -0
- package/dist/models/groq-provider.js +31 -0
- package/dist/models/manager.d.ts +3 -1
- package/dist/models/manager.d.ts.map +1 -0
- package/dist/models/manager.js +26 -2
- package/dist/models/openai-provider.d.ts +2 -1
- package/dist/models/openai-provider.d.ts.map +1 -0
- package/dist/models/openrouter-provider.d.ts +25 -23
- package/dist/models/openrouter-provider.d.ts.map +1 -0
- package/dist/models/openrouter-provider.js +181 -122
- package/dist/models/providers.d.ts +4 -5
- package/dist/models/providers.d.ts.map +1 -0
- package/dist/models/providers.js +7 -3
- package/dist/models/xai-provider.d.ts +1 -0
- package/dist/models/xai-provider.d.ts.map +1 -0
- package/dist/parsing.d.ts +2 -1
- package/dist/parsing.d.ts.map +1 -0
- package/dist/prompts/manager.d.ts +14 -2
- package/dist/prompts/manager.d.ts.map +1 -0
- package/dist/prompts.d.ts +2 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +65 -12
- package/dist/repl/display-tool-messages.d.ts +4 -0
- package/dist/repl/display-tool-messages.d.ts.map +1 -0
- package/dist/repl/display-tool-messages.js +58 -0
- package/dist/repl/display-tool-use.d.ts +14 -0
- package/dist/repl/display-tool-use.d.ts.map +1 -0
- package/dist/repl/display-tool-use.js +63 -0
- package/dist/repl/get-prompt-header.d.ts +8 -0
- package/dist/repl/get-prompt-header.d.ts.map +1 -0
- package/dist/repl/get-prompt-header.js +9 -0
- package/dist/repl/project-status-line.d.ts +2 -0
- package/dist/repl/project-status-line.d.ts.map +1 -0
- package/dist/repl/project-status-line.js +31 -0
- package/dist/repl/prompt.d.ts +21 -0
- package/dist/repl/prompt.d.ts.map +1 -0
- package/dist/{repl-prompt.js → repl/prompt.js} +119 -22
- package/dist/repl/tool-call-repair.d.ts +4 -0
- package/dist/repl/tool-call-repair.d.ts.map +1 -0
- package/dist/repl/tool-call-repair.js +54 -0
- package/dist/repl-new.d.ts +53 -0
- package/dist/repl-new.d.ts.map +1 -0
- package/dist/repl-new.js +374 -0
- package/dist/repl.d.ts +9 -7
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +142 -378
- package/dist/terminal/ansi-styles.d.ts +77 -0
- package/dist/terminal/ansi-styles.d.ts.map +1 -0
- package/dist/terminal/ansi-styles.js +215 -0
- package/dist/terminal/checkbox-prompt.d.ts +36 -0
- package/dist/terminal/checkbox-prompt.d.ts.map +1 -0
- package/dist/terminal/checkbox-prompt.js +368 -0
- package/dist/terminal/default-theme.d.ts +6 -0
- package/dist/terminal/default-theme.d.ts.map +1 -0
- package/dist/terminal/default-theme.js +182 -0
- package/dist/terminal/east-asian-width.d.ts +8 -0
- package/dist/terminal/east-asian-width.d.ts.map +1 -0
- package/dist/terminal/east-asian-width.js +409 -0
- package/dist/terminal/editor-prompt.d.ts +10 -0
- package/dist/terminal/editor-prompt.d.ts.map +1 -0
- package/dist/terminal/editor-prompt.js +61 -0
- package/dist/terminal/errors.d.ts +19 -0
- package/dist/terminal/errors.d.ts.map +1 -0
- package/dist/terminal/errors.js +37 -0
- package/dist/terminal/formatting.d.ts +1 -11
- package/dist/terminal/formatting.d.ts.map +1 -0
- package/dist/terminal/formatting.js +4 -20
- package/dist/terminal/highlight/index.d.ts +53 -0
- package/dist/terminal/highlight/index.d.ts.map +1 -0
- package/dist/terminal/highlight/index.js +90 -0
- package/dist/terminal/highlight/theme.d.ts +233 -0
- package/dist/terminal/highlight/theme.d.ts.map +1 -0
- package/dist/terminal/highlight/theme.js +83 -0
- package/dist/terminal/index.d.ts +23 -9
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +136 -126
- package/dist/terminal/input-prompt.d.ts +17 -0
- package/dist/terminal/input-prompt.d.ts.map +1 -0
- package/dist/terminal/input-prompt.js +181 -0
- package/dist/terminal/markdown-utils.d.ts +1 -0
- package/dist/terminal/markdown-utils.d.ts.map +1 -0
- package/dist/terminal/markdown.d.ts +1 -0
- package/dist/terminal/markdown.d.ts.map +1 -0
- package/dist/terminal/markdown.js +20 -12
- package/dist/terminal/search-prompt.d.ts +20 -0
- package/dist/terminal/search-prompt.d.ts.map +1 -0
- package/dist/terminal/search-prompt.js +280 -0
- package/dist/terminal/select-prompt.d.ts +26 -0
- package/dist/terminal/select-prompt.d.ts.map +1 -0
- package/dist/terminal/select-prompt.js +306 -0
- package/dist/terminal/string-width.d.ts +7 -0
- package/dist/terminal/string-width.d.ts.map +1 -0
- package/dist/terminal/string-width.js +61 -0
- package/dist/terminal/strip-ansi.d.ts +2 -0
- package/dist/terminal/strip-ansi.d.ts.map +1 -0
- package/dist/terminal/strip-ansi.js +20 -0
- package/dist/terminal/style.d.ts +191 -0
- package/dist/terminal/style.d.ts.map +1 -0
- package/dist/terminal/style.js +259 -0
- package/dist/terminal/supports-color.d.ts +1 -0
- package/dist/terminal/supports-color.d.ts.map +1 -0
- package/dist/terminal/supports-hyperlinks.d.ts +1 -3
- package/dist/terminal/supports-hyperlinks.d.ts.map +1 -0
- package/dist/terminal/supports-hyperlinks.js +1 -1
- package/dist/terminal/types.d.ts +1 -37
- package/dist/terminal/types.d.ts.map +1 -0
- package/dist/terminal/wrap-ansi.d.ts +8 -0
- package/dist/terminal/wrap-ansi.d.ts.map +1 -0
- package/dist/terminal/wrap-ansi.js +190 -0
- package/dist/{token-utils.d.ts → tokens/counter.d.ts} +1 -0
- package/dist/tokens/counter.d.ts.map +1 -0
- package/dist/{token-utils.js → tokens/counter.js} +1 -1
- package/dist/tokens/threshold.d.ts +35 -0
- package/dist/tokens/threshold.d.ts.map +1 -0
- package/dist/tokens/threshold.js +85 -0
- package/dist/{token-tracker.d.ts → tokens/tracker.d.ts} +1 -0
- package/dist/tokens/tracker.d.ts.map +1 -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 +281 -0
- package/dist/tools/agent.d.ts +19 -7
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +70 -54
- package/dist/tools/bash-utils.d.ts +7 -0
- package/dist/tools/bash-utils.d.ts.map +1 -0
- package/dist/tools/bash-utils.js +220 -0
- package/dist/tools/bash.d.ts +25 -14
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +87 -251
- package/dist/tools/code-interpreter.d.ts +22 -10
- package/dist/tools/code-interpreter.d.ts.map +1 -0
- package/dist/tools/code-interpreter.js +146 -210
- package/dist/tools/delete-file.d.ts +18 -9
- package/dist/tools/delete-file.d.ts.map +1 -0
- package/dist/tools/delete-file.js +55 -85
- package/dist/tools/directory-tree.d.ts +26 -6
- package/dist/tools/directory-tree.d.ts.map +1 -0
- package/dist/tools/directory-tree.js +109 -28
- package/dist/tools/dynamic-tool-loader.d.ts +22 -0
- package/dist/tools/dynamic-tool-loader.d.ts.map +1 -0
- package/dist/tools/dynamic-tool-loader.js +272 -0
- package/dist/tools/dynamic-tool-parser.d.ts +21 -0
- package/dist/tools/dynamic-tool-parser.d.ts.map +1 -0
- package/dist/tools/dynamic-tool-parser.js +22 -0
- package/dist/tools/edit-file.d.ts +41 -13
- package/dist/tools/edit-file.d.ts.map +1 -0
- package/dist/tools/edit-file.js +173 -96
- package/dist/tools/filesystem-utils.d.ts +7 -21
- package/dist/tools/filesystem-utils.d.ts.map +1 -0
- package/dist/tools/filesystem-utils.js +111 -149
- package/dist/tools/git-utils.d.ts +1 -0
- package/dist/tools/git-utils.d.ts.map +1 -0
- package/dist/tools/glob.d.ts +36 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +143 -0
- package/dist/tools/grep.d.ts +76 -13
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +420 -135
- package/dist/tools/index.d.ts +207 -133
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +245 -127
- package/dist/tools/llm-edit-fixer.d.ts +25 -0
- package/dist/tools/llm-edit-fixer.d.ts.map +1 -0
- package/dist/tools/llm-edit-fixer.js +150 -0
- package/dist/tools/move-file.d.ts +20 -7
- package/dist/tools/move-file.d.ts.map +1 -0
- package/dist/tools/move-file.js +43 -29
- package/dist/tools/read-file.d.ts +49 -10
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +79 -67
- package/dist/tools/read-multiple-files.d.ts +19 -7
- package/dist/tools/read-multiple-files.d.ts.map +1 -0
- package/dist/tools/read-multiple-files.js +117 -33
- package/dist/tools/save-file.d.ts +46 -11
- package/dist/tools/save-file.d.ts.map +1 -0
- package/dist/tools/save-file.js +63 -78
- package/dist/tools/think.d.ts +16 -7
- package/dist/tools/think.d.ts.map +1 -0
- package/dist/tools/think.js +34 -22
- package/dist/tools/types.d.ts +18 -11
- package/dist/tools/types.d.ts.map +1 -0
- 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 +15 -6
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +40 -39
- package/dist/tools/web-search.d.ts +17 -7
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +86 -33
- 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/editor.d.ts +51 -0
- package/dist/tui/components/editor.d.ts.map +1 -0
- package/dist/tui/components/editor.js +758 -0
- package/dist/tui/components/footer.d.ts +24 -0
- package/dist/tui/components/footer.d.ts.map +1 -0
- package/dist/tui/components/footer.js +197 -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 +19 -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 +103 -0
- package/dist/tui/components/markdown.d.ts.map +1 -0
- package/dist/tui/components/markdown.js +533 -0
- package/dist/tui/components/modal.d.ts +40 -0
- package/dist/tui/components/modal.d.ts.map +1 -0
- package/dist/tui/components/modal.js +292 -0
- package/dist/tui/components/prompt-status.d.ts +16 -0
- package/dist/tui/components/prompt-status.d.ts.map +1 -0
- package/dist/tui/components/prompt-status.js +21 -0
- package/dist/tui/components/select-list.d.ts +22 -0
- package/dist/tui/components/select-list.d.ts.map +1 -0
- package/dist/tui/components/select-list.js +143 -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/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 +30 -0
- package/dist/tui/components/tool-execution.d.ts +17 -0
- package/dist/tui/components/tool-execution.d.ts.map +1 -0
- package/dist/tui/components/tool-execution.js +153 -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 +21 -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 +14 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +18 -0
- package/dist/tui/terminal.d.ts +37 -0
- package/dist/tui/terminal.d.ts.map +1 -0
- package/dist/tui/terminal.js +104 -0
- package/dist/tui/tui.d.ts +67 -0
- package/dist/tui/tui.d.ts.map +1 -0
- package/dist/tui/tui.js +184 -0
- package/dist/tui/utils.d.ts +19 -0
- package/dist/tui/utils.d.ts.map +1 -0
- package/dist/tui/utils.js +31 -0
- package/dist/utils/filesystem.d.ts +23 -0
- package/dist/utils/filesystem.d.ts.map +1 -0
- package/dist/utils/filesystem.js +140 -0
- package/dist/utils/filetype-detection.d.ts +3 -0
- package/dist/utils/filetype-detection.d.ts.map +1 -0
- package/dist/utils/filetype-detection.js +112 -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/utils/glob.d.ts +52 -0
- package/dist/utils/glob.d.ts.map +1 -0
- package/dist/utils/glob.js +376 -0
- package/dist/utils/ignore.d.ts +104 -0
- package/dist/utils/ignore.d.ts.map +1 -0
- package/dist/utils/ignore.js +649 -0
- 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/process.d.ts +3 -2
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +17 -2
- package/dist/utils/zod-utils.d.ts +4 -0
- package/dist/utils/zod-utils.d.ts.map +1 -0
- package/dist/utils/zod-utils.js +7 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +34 -32
- package/dist/conversation-analyzer.d.ts +0 -10
- package/dist/conversation-analyzer.js +0 -88
- package/dist/repl-prompt.d.ts +0 -14
- package/dist/tools/command-validation.d.ts +0 -11
- package/dist/tools/command-validation.js +0 -45
- /package/dist/{token-tracker.js → tokens/tracker.js} +0 -0
package/dist/mentions.js
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { isString } from "@travisennis/stdlib/typeguards";
|
|
4
|
+
import { initExecutionEnvironment } from "./execution/index.js";
|
|
4
5
|
import { formatFile, formatUrl } from "./formatting.js";
|
|
5
6
|
import { readUrl } from "./tools/web-fetch.js";
|
|
6
|
-
|
|
7
|
+
class ShellCommandError extends Error {
|
|
8
|
+
command;
|
|
9
|
+
exitCode;
|
|
10
|
+
output;
|
|
11
|
+
constructor(message, command, exitCode, output) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = "ShellCommandError";
|
|
14
|
+
this.command = command;
|
|
15
|
+
this.exitCode = exitCode;
|
|
16
|
+
this.output = output;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class PromptError extends Error {
|
|
20
|
+
constructor(message, cause) {
|
|
21
|
+
super(message, { cause });
|
|
22
|
+
this.name = "PromptError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
7
25
|
// Helper function to recursively read all files in a directory
|
|
8
26
|
async function readDirectoryRecursive(dirPath, format) {
|
|
9
27
|
const allContents = [];
|
|
@@ -77,19 +95,23 @@ async function processFileCommand(context) {
|
|
|
77
95
|
}
|
|
78
96
|
async function processShellCommand(command) {
|
|
79
97
|
try {
|
|
80
|
-
const
|
|
81
|
-
|
|
98
|
+
const execEnv = await initExecutionEnvironment();
|
|
99
|
+
const { output, exitCode } = await execEnv.executeCommand(command, {
|
|
100
|
+
throwOnError: true,
|
|
82
101
|
});
|
|
83
|
-
if (
|
|
84
|
-
return
|
|
102
|
+
if (exitCode === 0) {
|
|
103
|
+
return output;
|
|
85
104
|
}
|
|
86
|
-
|
|
105
|
+
throw new ShellCommandError(`Command failed with exit code ${exitCode}`, command, exitCode, output);
|
|
87
106
|
}
|
|
88
107
|
catch (error) {
|
|
108
|
+
if (error instanceof ShellCommandError) {
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
89
111
|
if (error instanceof Error) {
|
|
90
|
-
|
|
112
|
+
throw new ShellCommandError(`Command execution failed: ${error.message}`, command, undefined, undefined);
|
|
91
113
|
}
|
|
92
|
-
|
|
114
|
+
throw new ShellCommandError("Command execution failed with unknown error", command, undefined, undefined);
|
|
93
115
|
}
|
|
94
116
|
}
|
|
95
117
|
// Returns the formatted string or an error message string
|
|
@@ -115,7 +137,7 @@ async function processUrlCommand(context) {
|
|
|
115
137
|
};
|
|
116
138
|
}
|
|
117
139
|
}
|
|
118
|
-
export async function processPrompt(message, { baseDir, model }) {
|
|
140
|
+
export async function processPrompt(message, { baseDir, model, pasteStore, }) {
|
|
119
141
|
const fileRegex = /@([^\s@]+(?:\.[\w\d]+))/g;
|
|
120
142
|
const urlRegex = /@(https?:\/\/[^\s]+)/g;
|
|
121
143
|
const shellRegex = /!`([^`]+)`/g;
|
|
@@ -149,12 +171,37 @@ export async function processPrompt(message, { baseDir, model }) {
|
|
|
149
171
|
}
|
|
150
172
|
}
|
|
151
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
|
+
}
|
|
152
189
|
// Process shell commands
|
|
153
190
|
for (const match of shellMatches) {
|
|
154
191
|
const command = match[1];
|
|
155
192
|
if (command) {
|
|
156
|
-
|
|
157
|
-
|
|
193
|
+
try {
|
|
194
|
+
const output = await processShellCommand(command);
|
|
195
|
+
processedMessage = processedMessage.replace(match[0], output);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
if (error instanceof ShellCommandError) {
|
|
199
|
+
// Wrap shell command errors in PromptError
|
|
200
|
+
throw new PromptError(`Shell command failed: ${error.message}`, error);
|
|
201
|
+
}
|
|
202
|
+
// For other errors, wrap them in PromptError
|
|
203
|
+
throw new PromptError(`Unexpected error executing command: ${error instanceof Error ? error.message : "Unknown error"}`, error instanceof Error ? error : undefined);
|
|
204
|
+
}
|
|
158
205
|
}
|
|
159
206
|
}
|
|
160
207
|
// Wait for all mentions to be processed
|
package/dist/messages.d.ts
CHANGED
|
@@ -2,16 +2,18 @@ import EventEmitter from "node:events";
|
|
|
2
2
|
import { type AssistantModelMessage, type ImagePart, // Added ImagePart
|
|
3
3
|
type ModelMessage, type ToolModelMessage, type UserModelMessage } from "ai";
|
|
4
4
|
import type { ModelManager } from "./models/manager.ts";
|
|
5
|
-
import type { TokenTracker } from "./
|
|
5
|
+
import type { TokenTracker } from "./tokens/tracker.ts";
|
|
6
6
|
export type UserMessageContentItem = string | ImagePart;
|
|
7
7
|
export declare function createUserMessage(contentItems: UserMessageContentItem[], prompt?: string): UserModelMessage;
|
|
8
|
-
export declare function createAssistantMessage(content: string): AssistantModelMessage;
|
|
9
8
|
/**
|
|
10
9
|
A message that was generated during the generation process.
|
|
11
10
|
It can be either an assistant message or a tool message.
|
|
12
11
|
*/
|
|
13
12
|
type ResponseMessage = AssistantModelMessage | ToolModelMessage;
|
|
14
|
-
|
|
13
|
+
type SavedMessageHistory = {
|
|
14
|
+
project: string;
|
|
15
|
+
sessionId: string;
|
|
16
|
+
modelId: string;
|
|
15
17
|
title: string;
|
|
16
18
|
createdAt: Date;
|
|
17
19
|
updatedAt: Date;
|
|
@@ -23,6 +25,8 @@ interface MessageHistoryEvents {
|
|
|
23
25
|
}
|
|
24
26
|
export declare class MessageHistory extends EventEmitter<MessageHistoryEvents> {
|
|
25
27
|
private history;
|
|
28
|
+
private sessionId;
|
|
29
|
+
private modelId;
|
|
26
30
|
private title;
|
|
27
31
|
private createdAt;
|
|
28
32
|
private updatedAt;
|
|
@@ -34,6 +38,7 @@ export declare class MessageHistory extends EventEmitter<MessageHistoryEvents> {
|
|
|
34
38
|
modelManager: ModelManager;
|
|
35
39
|
tokenTracker: TokenTracker;
|
|
36
40
|
});
|
|
41
|
+
create(modelId: string): void;
|
|
37
42
|
private validMessage;
|
|
38
43
|
get(): ModelMessage[];
|
|
39
44
|
clear(): void;
|
|
@@ -41,29 +46,20 @@ export declare class MessageHistory extends EventEmitter<MessageHistoryEvents> {
|
|
|
41
46
|
appendUserMessage(msg: UserModelMessage): void;
|
|
42
47
|
appendAssistantMessage(msg: string): void;
|
|
43
48
|
appendAssistantMessage(msg: AssistantModelMessage): void;
|
|
49
|
+
appendToolMessages(toolResultMessages: ToolModelMessage[]): void;
|
|
44
50
|
appendResponseMessages(responseMessages: ResponseMessage[]): void;
|
|
45
51
|
isEmpty(): boolean;
|
|
46
52
|
save(): Promise<void>;
|
|
47
53
|
private generateTitle;
|
|
48
54
|
getFirstUserMessage(): UserModelMessage | undefined;
|
|
55
|
+
getLastUserMessage(): UserModelMessage | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Extracts the last message from the conversation history for display purposes.
|
|
58
|
+
* Prioritizes assistant messages, falls back to user messages if no assistant messages exist.
|
|
59
|
+
*/
|
|
60
|
+
getLastMessage(): string | null;
|
|
49
61
|
static load(stateDir: string, count?: number): Promise<SavedMessageHistory[]>;
|
|
50
62
|
restore(savedHistory: SavedMessageHistory): void;
|
|
51
63
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Normalizes an array of messages for API consumption by:
|
|
54
|
-
* 1. Filtering out progress-type messages
|
|
55
|
-
* 2. Processing user and assistant messages
|
|
56
|
-
* 3. Handling tool results by either:
|
|
57
|
-
* - Adding them as new messages if they're the first tool result
|
|
58
|
-
* - Adding them as new messages if the previous message wasn't a tool result
|
|
59
|
-
* - Merging them with the previous message if it was also a tool result
|
|
60
|
-
*
|
|
61
|
-
* This consolidation of sequential tool results into a single message
|
|
62
|
-
* ensures proper formatting for API consumption while maintaining the
|
|
63
|
-
* logical flow of the conversation.
|
|
64
|
-
*
|
|
65
|
-
* @param messages - Array of messages to normalize
|
|
66
|
-
* @returns Normalized array of user and assistant messages ready for API
|
|
67
|
-
*/
|
|
68
|
-
export declare function normalizeMessagesForApi(messages: ModelMessage[]): ModelMessage[];
|
|
69
64
|
export {};
|
|
65
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../source/messages.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,aAAa,CAAC;AAIvC,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,SAAS,EAAE,kBAAkB;AAClC,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,IAAI,CAAC;AACZ,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,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;IAaD,MAAM,CAAC,OAAO,EAAE,MAAM;IAStB,OAAO,CAAC,YAAY;IAoBpB,GAAG;IAIH,KAAK;IAKL,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;YAoBI,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;IA6EjC,OAAO,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI;CAajD"}
|
package/dist/messages.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
1
2
|
import EventEmitter from "node:events";
|
|
2
|
-
import { readdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
-
import { join } from "node:path";
|
|
3
|
+
import { readdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
4
|
+
import { basename, join } from "node:path";
|
|
4
5
|
import { isString } from "@travisennis/stdlib/typeguards";
|
|
5
6
|
import { generateText, } from "ai";
|
|
6
7
|
export function createUserMessage(contentItems, prompt) {
|
|
@@ -25,7 +26,7 @@ export function createUserMessage(contentItems, prompt) {
|
|
|
25
26
|
content: messageParts,
|
|
26
27
|
};
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
+
function createAssistantMessage(content) {
|
|
29
30
|
return {
|
|
30
31
|
role: "assistant",
|
|
31
32
|
content: [
|
|
@@ -38,6 +39,8 @@ export function createAssistantMessage(content) {
|
|
|
38
39
|
}
|
|
39
40
|
export class MessageHistory extends EventEmitter {
|
|
40
41
|
history;
|
|
42
|
+
sessionId;
|
|
43
|
+
modelId;
|
|
41
44
|
title;
|
|
42
45
|
createdAt;
|
|
43
46
|
updatedAt;
|
|
@@ -47,6 +50,8 @@ export class MessageHistory extends EventEmitter {
|
|
|
47
50
|
constructor({ stateDir, modelManager, tokenTracker, }) {
|
|
48
51
|
super();
|
|
49
52
|
this.history = [];
|
|
53
|
+
this.sessionId = randomUUID();
|
|
54
|
+
this.modelId = "";
|
|
50
55
|
this.title = "";
|
|
51
56
|
this.createdAt = new Date();
|
|
52
57
|
this.updatedAt = new Date();
|
|
@@ -54,6 +59,14 @@ export class MessageHistory extends EventEmitter {
|
|
|
54
59
|
this.modelManager = modelManager;
|
|
55
60
|
this.tokenTracker = tokenTracker;
|
|
56
61
|
}
|
|
62
|
+
create(modelId) {
|
|
63
|
+
this.clear();
|
|
64
|
+
this.modelId = modelId;
|
|
65
|
+
this.sessionId = randomUUID();
|
|
66
|
+
this.title = "";
|
|
67
|
+
this.createdAt = new Date();
|
|
68
|
+
this.updatedAt = new Date();
|
|
69
|
+
}
|
|
57
70
|
validMessage(msg) {
|
|
58
71
|
// Filter out messages with empty content arrays
|
|
59
72
|
if (Array.isArray(msg.content) && msg.content.length === 0) {
|
|
@@ -96,6 +109,10 @@ export class MessageHistory extends EventEmitter {
|
|
|
96
109
|
const msgObj = isString(msg) ? createAssistantMessage(msg) : msg;
|
|
97
110
|
this.history.push(msgObj);
|
|
98
111
|
}
|
|
112
|
+
appendToolMessages(toolResultMessages) {
|
|
113
|
+
this.updatedAt = new Date();
|
|
114
|
+
this.history.push(...toolResultMessages);
|
|
115
|
+
}
|
|
99
116
|
appendResponseMessages(responseMessages) {
|
|
100
117
|
this.updatedAt = new Date();
|
|
101
118
|
// Filter out messages with empty content arrays
|
|
@@ -107,10 +124,13 @@ export class MessageHistory extends EventEmitter {
|
|
|
107
124
|
}
|
|
108
125
|
async save() {
|
|
109
126
|
const msgHistoryDir = this.stateDir;
|
|
110
|
-
const
|
|
111
|
-
const fileName = `message-history-${timestamp}.json`;
|
|
127
|
+
const fileName = `message-history-${this.sessionId}.json`;
|
|
112
128
|
const filePath = join(msgHistoryDir, fileName);
|
|
129
|
+
const project = basename(process.cwd());
|
|
113
130
|
const output = {
|
|
131
|
+
project,
|
|
132
|
+
sessionId: this.sessionId,
|
|
133
|
+
modelId: this.modelId,
|
|
114
134
|
title: this.title,
|
|
115
135
|
createdAt: this.createdAt,
|
|
116
136
|
updatedAt: this.updatedAt,
|
|
@@ -129,6 +149,7 @@ export class MessageHistory extends EventEmitter {
|
|
|
129
149
|
const { text, usage } = await generateText({
|
|
130
150
|
model: this.modelManager.getModel(app),
|
|
131
151
|
system: systemPrompt,
|
|
152
|
+
maxOutputTokens: 100,
|
|
132
153
|
prompt: `Request:\n${message}\nTitle:`,
|
|
133
154
|
});
|
|
134
155
|
this.tokenTracker.trackUsage(app, usage);
|
|
@@ -145,19 +166,70 @@ export class MessageHistory extends EventEmitter {
|
|
|
145
166
|
const firstUser = this.get().find((msg) => msg.role === "user");
|
|
146
167
|
return firstUser;
|
|
147
168
|
}
|
|
169
|
+
getLastUserMessage() {
|
|
170
|
+
const userMsg = this.history.findLast((value) => value.role === "user");
|
|
171
|
+
return userMsg;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Extracts the last message from the conversation history for display purposes.
|
|
175
|
+
* Prioritizes assistant messages, falls back to user messages if no assistant messages exist.
|
|
176
|
+
*/
|
|
177
|
+
getLastMessage() {
|
|
178
|
+
const messages = this.get();
|
|
179
|
+
if (messages.length === 0) {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
// Find the last assistant message, or fall back to last user message
|
|
183
|
+
const reversedMessages = [...messages].reverse();
|
|
184
|
+
const lastAssistant = reversedMessages.find((msg) => msg.role === "assistant");
|
|
185
|
+
const lastUser = reversedMessages.find((msg) => msg.role === "user");
|
|
186
|
+
const targetMessage = lastAssistant || lastUser;
|
|
187
|
+
if (!targetMessage) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
// Extract text content from the message
|
|
191
|
+
if (Array.isArray(targetMessage.content)) {
|
|
192
|
+
const textParts = targetMessage.content.filter((part) => part.type === "text" && part.text.trim().length > 0);
|
|
193
|
+
if (textParts.length === 0) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
return textParts.map((part) => part.text).join("\n");
|
|
197
|
+
}
|
|
198
|
+
// Handle string content (though this should be rare with current implementation)
|
|
199
|
+
if (typeof targetMessage.content === "string" &&
|
|
200
|
+
targetMessage.content.trim().length > 0) {
|
|
201
|
+
return targetMessage.content;
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
148
205
|
static async load(stateDir, count = 10) {
|
|
149
206
|
try {
|
|
150
207
|
const files = await readdir(stateDir);
|
|
151
|
-
const messageHistoryFiles = files
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
208
|
+
const messageHistoryFiles = files.filter((file) => file.startsWith("message-history-") && file.endsWith(".json"));
|
|
209
|
+
// Get file stats and sort by modification time (newest first)
|
|
210
|
+
const fileStatsPromises = messageHistoryFiles.map(async (fileName) => {
|
|
211
|
+
const filePath = join(stateDir, fileName);
|
|
212
|
+
try {
|
|
213
|
+
const fileStat = await stat(filePath);
|
|
214
|
+
return {
|
|
215
|
+
fileName,
|
|
216
|
+
filePath,
|
|
217
|
+
modifiedTime: fileStat.mtime,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
console.error(`Error getting stats for file ${filePath}:`, error);
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
const fileStats = await Promise.all(fileStatsPromises);
|
|
226
|
+
// Filter out null results and sort by modification time (newest first)
|
|
227
|
+
const sortedFiles = fileStats
|
|
228
|
+
.filter((stat) => stat !== null)
|
|
229
|
+
.sort((a, b) => b.modifiedTime.getTime() - a.modifiedTime.getTime())
|
|
230
|
+
.slice(0, count)
|
|
231
|
+
.map((stat) => stat.fileName);
|
|
232
|
+
const fileReadPromises = sortedFiles.map(async (fileName) => {
|
|
161
233
|
const filePath = join(stateDir, fileName);
|
|
162
234
|
try {
|
|
163
235
|
const content = await readFile(filePath, "utf-8");
|
|
@@ -177,11 +249,8 @@ export class MessageHistory extends EventEmitter {
|
|
|
177
249
|
return null; // Return null for failed reads/parses
|
|
178
250
|
});
|
|
179
251
|
const results = await Promise.all(fileReadPromises);
|
|
180
|
-
// Filter out null results (
|
|
181
|
-
|
|
182
|
-
return results
|
|
183
|
-
.filter((result) => result !== null)
|
|
184
|
-
.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
|
|
252
|
+
// Filter out null results and return them (already sorted by file modification time)
|
|
253
|
+
return results.filter((result) => result !== null);
|
|
185
254
|
}
|
|
186
255
|
catch (error) {
|
|
187
256
|
// Handle cases where the directory might not exist or other readdir errors
|
|
@@ -207,55 +276,3 @@ export class MessageHistory extends EventEmitter {
|
|
|
207
276
|
this.history = [...savedHistory.messages]; // Use the correct internal property name and create a copy
|
|
208
277
|
}
|
|
209
278
|
}
|
|
210
|
-
/**
|
|
211
|
-
* Normalizes an array of messages for API consumption by:
|
|
212
|
-
* 1. Filtering out progress-type messages
|
|
213
|
-
* 2. Processing user and assistant messages
|
|
214
|
-
* 3. Handling tool results by either:
|
|
215
|
-
* - Adding them as new messages if they're the first tool result
|
|
216
|
-
* - Adding them as new messages if the previous message wasn't a tool result
|
|
217
|
-
* - Merging them with the previous message if it was also a tool result
|
|
218
|
-
*
|
|
219
|
-
* This consolidation of sequential tool results into a single message
|
|
220
|
-
* ensures proper formatting for API consumption while maintaining the
|
|
221
|
-
* logical flow of the conversation.
|
|
222
|
-
*
|
|
223
|
-
* @param messages - Array of messages to normalize
|
|
224
|
-
* @returns Normalized array of user and assistant messages ready for API
|
|
225
|
-
*/
|
|
226
|
-
export function normalizeMessagesForApi(messages) {
|
|
227
|
-
const result = [];
|
|
228
|
-
for (const message of messages) {
|
|
229
|
-
switch (message.role) {
|
|
230
|
-
case "user": {
|
|
231
|
-
result.push(message);
|
|
232
|
-
continue;
|
|
233
|
-
}
|
|
234
|
-
case "tool": {
|
|
235
|
-
// If the last message is not a tool result, add it to the result
|
|
236
|
-
const lastMessage = result.at(-1);
|
|
237
|
-
if (!lastMessage ||
|
|
238
|
-
lastMessage.role === "assistant" ||
|
|
239
|
-
!Array.isArray(lastMessage.content) ||
|
|
240
|
-
lastMessage.content[0]?.type !== "tool-result") {
|
|
241
|
-
result.push(message);
|
|
242
|
-
continue;
|
|
243
|
-
}
|
|
244
|
-
// Otherwise, merge the current message with the last message
|
|
245
|
-
result[result.indexOf(lastMessage)] = {
|
|
246
|
-
...lastMessage,
|
|
247
|
-
// biome-ignore lint/suspicious/noExplicitAny: can't figure out type
|
|
248
|
-
content: [...lastMessage.content, ...message.content], // #FIXME figure out what type this should be
|
|
249
|
-
};
|
|
250
|
-
continue;
|
|
251
|
-
}
|
|
252
|
-
case "assistant": {
|
|
253
|
-
result.push(message);
|
|
254
|
-
continue;
|
|
255
|
-
}
|
|
256
|
-
default:
|
|
257
|
-
continue;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
return result;
|
|
261
|
-
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-message.d.ts","sourceRoot":"","sources":["../../source/middleware/audit-message.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,yBAAyB,EAI1B,MAAM,kBAAkB,CAAC;AAmC1B,eAAO,MAAM,YAAY,GAAI,oBAG1B;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb,8BAoFA,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../source/middleware/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,kBAAkB,CAAC;AAsB1B,eAAO,MAAM,eAAe,EAAE,yBAyC7B,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
function applyCaching(input) {
|
|
2
|
+
input.providerOptions = {
|
|
3
|
+
anthropic: { cacheControl: { type: "ephemeral" } },
|
|
4
|
+
openrouter: {
|
|
5
|
+
// biome-ignore lint/style/useNamingConvention: third-party
|
|
6
|
+
cache_control: { type: "ephemeral" },
|
|
7
|
+
cacheControl: { type: "ephemeral" },
|
|
8
|
+
},
|
|
9
|
+
bedrock: {
|
|
10
|
+
cachePoint: { type: "ephemeral" },
|
|
11
|
+
},
|
|
12
|
+
openaiCompatible: {
|
|
13
|
+
// biome-ignore lint/style/useNamingConvention: third-party
|
|
14
|
+
cache_control: { type: "ephemeral" },
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export const cacheMiddleware = {
|
|
19
|
+
transformParams: async ({ params, model }) => {
|
|
20
|
+
const providerId = model.provider;
|
|
21
|
+
const modelId = model.modelId;
|
|
22
|
+
if (providerId === "anthropic" ||
|
|
23
|
+
modelId.includes("anthropic") ||
|
|
24
|
+
modelId.includes("claude")) {
|
|
25
|
+
const msgs = params.prompt;
|
|
26
|
+
const system = msgs.filter((msg) => msg.role === "system").at(0);
|
|
27
|
+
if (system) {
|
|
28
|
+
applyCaching(system);
|
|
29
|
+
}
|
|
30
|
+
// Get the last two user messages for caching
|
|
31
|
+
const userMessages = msgs.filter((msg) => msg.role === "user");
|
|
32
|
+
const lastTwoUserMessages = userMessages.slice(-2);
|
|
33
|
+
// Mark both the latest and second-to-last user messages as ephemeral
|
|
34
|
+
for (const userMessage of lastTwoUserMessages) {
|
|
35
|
+
const content = userMessage.content;
|
|
36
|
+
if (Array.isArray(content)) {
|
|
37
|
+
const finalContent = content.at(-1);
|
|
38
|
+
if (finalContent) {
|
|
39
|
+
applyCaching(finalContent);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const tools = params.tools;
|
|
44
|
+
if (tools) {
|
|
45
|
+
const lastTool = tools.at(-1);
|
|
46
|
+
if (lastTool?.type === "function") {
|
|
47
|
+
applyCaching(lastTool);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return params;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/middleware/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../source/middleware/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGlE,eAAO,MAAM,yBAAyB,GAAI,wBAEvC;IACD,iBAAiB,EAAE,MAAM,CAAC;CAC3B,KAAG,yBAgBH,CAAC"}
|
|
@@ -7,6 +7,9 @@ export declare class AiConfig {
|
|
|
7
7
|
modelMetadata: ModelMetadata;
|
|
8
8
|
prompt: string;
|
|
9
9
|
});
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
maxOutputTokens(): number;
|
|
11
|
+
temperature(): number | undefined;
|
|
12
|
+
topP(): 1 | undefined;
|
|
13
|
+
providerOptions(): SharedV2ProviderMetadata;
|
|
12
14
|
}
|
|
15
|
+
//# sourceMappingURL=ai-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-config.d.ts","sourceRoot":"","sources":["../../source/models/ai-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA2CpD,qBAAa,QAAQ;IACnB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAS;gBACX,EACV,aAAa,EACb,MAAM,GACP,EAAE;QAAE,aAAa,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAKnD,eAAe;IAUf,WAAW;IAKX,IAAI;IAMJ,eAAe,IAAI,wBAAwB;CA2C5C"}
|
package/dist/models/ai-config.js
CHANGED
|
@@ -34,7 +34,7 @@ export class AiConfig {
|
|
|
34
34
|
this.modelMetadata = modelMetadata;
|
|
35
35
|
this.prompt = prompt;
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
maxOutputTokens() {
|
|
38
38
|
const modelConfig = this.modelMetadata;
|
|
39
39
|
const thinkingLevel = calculateThinkingLevel(this.prompt);
|
|
40
40
|
const maxTokens = modelConfig.provider === "anthropic" && modelConfig.supportsReasoning
|
|
@@ -42,7 +42,17 @@ export class AiConfig {
|
|
|
42
42
|
: modelConfig.maxOutputTokens;
|
|
43
43
|
return maxTokens;
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
temperature() {
|
|
46
|
+
const temp = this.modelMetadata.defaultTemperature;
|
|
47
|
+
return temp > -1 ? temp : undefined;
|
|
48
|
+
}
|
|
49
|
+
topP() {
|
|
50
|
+
const modelId = this.modelMetadata.id;
|
|
51
|
+
if (modelId.toLowerCase().includes("qwen"))
|
|
52
|
+
return 1;
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
providerOptions() {
|
|
46
56
|
const modelConfig = this.modelMetadata;
|
|
47
57
|
const thinkingLevel = calculateThinkingLevel(this.prompt);
|
|
48
58
|
if (modelConfig.supportsReasoning && thinkingLevel.effort !== "none") {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../../source/models/anthropic-provider.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,eAAe;;;;;;;;CAuBX,CAAC;AAEX,KAAK,SAAS,GAAG,aAAa,MAAM,OAAO,eAAe,EAAE,CAAC;AAE7D,eAAO,MAAM,mBAAmB,EAAE,SAAS,EAE1C,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;CAK7B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE;KAClC,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CA6F3C,CAAC"}
|