@travisennis/acai 0.0.6 → 0.0.8
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 +225 -39
- package/dist/agent/index.d.ts +30 -21
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +237 -198
- package/dist/cli.d.ts +4 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +56 -18
- package/dist/commands/add-directory/index.d.ts +3 -0
- package/dist/commands/add-directory/index.d.ts.map +1 -0
- package/dist/commands/add-directory/index.js +50 -0
- package/dist/commands/add-directory/types.d.ts +6 -0
- package/dist/commands/add-directory/types.d.ts.map +1 -0
- package/dist/commands/add-directory/utils.d.ts +3 -0
- package/dist/commands/add-directory/utils.d.ts.map +1 -0
- package/dist/commands/add-directory/utils.js +15 -0
- package/dist/commands/clear/index.d.ts +3 -0
- package/dist/commands/clear/index.d.ts.map +1 -0
- package/dist/commands/{clear-command.js → clear/index.js} +1 -7
- package/dist/commands/copy/index.d.ts +3 -0
- package/dist/commands/copy/index.d.ts.map +1 -0
- package/dist/commands/copy/index.js +39 -0
- package/dist/commands/copy/types.d.ts +3 -0
- package/dist/commands/copy/types.d.ts.map +1 -0
- package/dist/commands/copy/types.js +1 -0
- package/dist/commands/copy/utils.d.ts +3 -0
- package/dist/commands/copy/utils.d.ts.map +1 -0
- package/dist/commands/copy/utils.js +22 -0
- package/dist/commands/exit/index.d.ts +10 -0
- package/dist/commands/exit/index.d.ts.map +1 -0
- package/dist/commands/exit/index.js +21 -0
- package/dist/commands/exit/types.d.ts +8 -0
- package/dist/commands/exit/types.d.ts.map +1 -0
- package/dist/commands/exit/types.js +1 -0
- package/dist/commands/exit/utils.d.ts +2 -0
- package/dist/commands/exit/utils.d.ts.map +1 -0
- package/dist/commands/exit/utils.js +13 -0
- package/dist/commands/generate-rules/index.d.ts +3 -0
- package/dist/commands/generate-rules/index.d.ts.map +1 -0
- package/dist/commands/{generate-rules-command.js → generate-rules/index.js} +65 -147
- package/dist/commands/generate-rules/utils.d.ts +5 -0
- package/dist/commands/generate-rules/utils.d.ts.map +1 -0
- package/dist/commands/generate-rules/utils.js +25 -0
- package/dist/commands/handoff/index.d.ts +3 -0
- package/dist/commands/handoff/index.d.ts.map +1 -0
- package/dist/commands/handoff/index.js +97 -0
- package/dist/commands/handoff/utils.d.ts +4 -0
- package/dist/commands/handoff/utils.d.ts.map +1 -0
- package/dist/commands/handoff/utils.js +123 -0
- package/dist/commands/health/index.d.ts +3 -0
- package/dist/commands/health/index.d.ts.map +1 -0
- package/dist/commands/health/index.js +56 -0
- package/dist/commands/health/utils.d.ts +15 -0
- package/dist/commands/health/utils.d.ts.map +1 -0
- package/dist/commands/health/utils.js +52 -0
- package/dist/commands/help/index.d.ts +3 -0
- package/dist/commands/help/index.d.ts.map +1 -0
- package/dist/commands/{help-command.js → help/index.js} +6 -14
- package/dist/commands/history/index.d.ts +3 -0
- package/dist/commands/history/index.d.ts.map +1 -0
- package/dist/commands/{history-command.js → history/index.js} +40 -200
- package/dist/commands/history/types.d.ts +11 -0
- package/dist/commands/history/types.d.ts.map +1 -0
- package/dist/commands/history/types.js +1 -0
- package/dist/commands/history/utils.d.ts +4 -0
- package/dist/commands/history/utils.d.ts.map +1 -0
- package/dist/commands/history/utils.js +86 -0
- package/dist/commands/init/index.d.ts +3 -0
- package/dist/commands/init/index.d.ts.map +1 -0
- package/dist/commands/{init-command.js → init/index.js} +17 -27
- package/dist/commands/init-project/index.d.ts +3 -0
- package/dist/commands/init-project/index.d.ts.map +1 -0
- package/dist/commands/init-project/index.js +51 -0
- package/dist/commands/init-project/utils.d.ts +9 -0
- package/dist/commands/init-project/utils.d.ts.map +1 -0
- package/dist/commands/init-project/utils.js +43 -0
- package/dist/commands/list-directories/index.d.ts +3 -0
- package/dist/commands/list-directories/index.d.ts.map +1 -0
- package/dist/commands/{list-directories-command.js → list-directories/index.js} +2 -15
- package/dist/commands/list-tools/index.d.ts +3 -0
- package/dist/commands/list-tools/index.d.ts.map +1 -0
- package/dist/commands/list-tools/index.js +89 -0
- package/dist/commands/manager.d.ts +2 -9
- package/dist/commands/manager.d.ts.map +1 -1
- package/dist/commands/manager.js +38 -83
- package/dist/commands/model/index.d.ts +3 -0
- package/dist/commands/model/index.d.ts.map +1 -0
- package/dist/commands/model/index.js +182 -0
- package/dist/commands/model/utils.d.ts +3 -0
- package/dist/commands/model/utils.d.ts.map +1 -0
- package/dist/commands/model/utils.js +5 -0
- package/dist/commands/paste/index.d.ts +3 -0
- package/dist/commands/paste/index.d.ts.map +1 -0
- package/dist/commands/paste/index.js +94 -0
- package/dist/commands/paste/utils.d.ts +5 -0
- package/dist/commands/paste/utils.d.ts.map +1 -0
- package/dist/commands/paste/utils.js +86 -0
- package/dist/commands/pickup/index.d.ts +3 -0
- package/dist/commands/pickup/index.d.ts.map +1 -0
- package/dist/commands/pickup/index.js +138 -0
- package/dist/commands/pickup/types.d.ts +6 -0
- package/dist/commands/pickup/types.d.ts.map +1 -0
- package/dist/commands/pickup/types.js +1 -0
- package/dist/commands/pickup/utils.d.ts +7 -0
- package/dist/commands/pickup/utils.d.ts.map +1 -0
- package/dist/commands/pickup/utils.js +56 -0
- package/dist/commands/prompt/index.d.ts +5 -0
- package/dist/commands/prompt/index.d.ts.map +1 -0
- package/dist/commands/prompt/index.js +126 -0
- package/dist/commands/prompt/types.d.ts +15 -0
- package/dist/commands/prompt/types.d.ts.map +1 -0
- package/dist/commands/prompt/types.js +1 -0
- package/dist/commands/prompt/utils.d.ts +12 -0
- package/dist/commands/prompt/utils.d.ts.map +1 -0
- package/dist/commands/prompt/utils.js +107 -0
- package/dist/commands/remove-directory/index.d.ts +3 -0
- package/dist/commands/remove-directory/index.d.ts.map +1 -0
- package/dist/commands/{remove-directory-command.js → remove-directory/index.js} +3 -35
- package/dist/commands/reset/index.d.ts +3 -0
- package/dist/commands/reset/index.d.ts.map +1 -0
- package/dist/commands/{reset-command.js → reset/index.js} +8 -11
- package/dist/commands/reset/types.d.ts +1 -0
- package/dist/commands/reset/types.d.ts.map +1 -0
- package/dist/commands/reset/types.js +3 -0
- package/dist/commands/resources/index.d.ts +3 -0
- package/dist/commands/resources/index.d.ts.map +1 -0
- package/dist/commands/resources/index.js +84 -0
- package/dist/commands/review/index.d.ts +3 -0
- package/dist/commands/review/index.d.ts.map +1 -0
- package/dist/commands/review/index.js +126 -0
- package/dist/commands/review/types.d.ts +12 -0
- package/dist/commands/review/types.d.ts.map +1 -0
- package/dist/commands/review/types.js +1 -0
- package/dist/commands/review/utils.d.ts +4 -0
- package/dist/commands/review/utils.d.ts.map +1 -0
- package/dist/commands/review/utils.js +87 -0
- package/dist/commands/save/index.d.ts +3 -0
- package/dist/commands/save/index.d.ts.map +1 -0
- package/dist/commands/{save-command.js → save/index.js} +3 -10
- package/dist/commands/session/index.d.ts +3 -0
- package/dist/commands/session/index.d.ts.map +1 -0
- package/dist/commands/session/index.js +197 -0
- package/dist/commands/session/types.d.ts +13 -0
- package/dist/commands/session/types.d.ts.map +1 -0
- package/dist/commands/session/types.js +7 -0
- package/dist/commands/shell/index.d.ts +3 -0
- package/dist/commands/shell/index.d.ts.map +1 -0
- package/dist/commands/{shell-command.js → shell/index.js} +4 -51
- package/dist/commands/types.d.ts +2 -5
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/config.d.ts +36 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +118 -60
- package/dist/dedent.d.ts.map +1 -1
- package/dist/dedent.js +7 -7
- package/dist/execution/index.d.ts +18 -2
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +119 -81
- package/dist/formatting.d.ts +46 -0
- package/dist/formatting.d.ts.map +1 -1
- package/dist/formatting.js +94 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +299 -177
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +4 -11
- package/dist/mentions.d.ts.map +1 -1
- package/dist/mentions.js +3 -53
- package/dist/middleware/audit-message.d.ts +2 -2
- package/dist/middleware/audit-message.d.ts.map +1 -1
- package/dist/middleware/audit-message.js +40 -2
- package/dist/middleware/cache.d.ts +2 -2
- package/dist/middleware/cache.d.ts.map +1 -1
- package/dist/middleware/cache.js +111 -27
- package/dist/middleware/rate-limit.d.ts +2 -2
- package/dist/middleware/rate-limit.d.ts.map +1 -1
- package/dist/middleware/rate-limit.js +1 -0
- package/dist/models/ai-config.d.ts.map +1 -1
- package/dist/models/ai-config.js +46 -29
- package/dist/models/anthropic-provider.d.ts +14 -13
- package/dist/models/anthropic-provider.d.ts.map +1 -1
- package/dist/models/anthropic-provider.js +0 -7
- package/dist/models/deepseek-provider.d.ts +9 -8
- 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 +10 -9
- 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 +8 -7
- package/dist/models/groq-provider.d.ts.map +1 -1
- package/dist/models/groq-provider.js +0 -1
- package/dist/models/manager.d.ts +7 -4
- package/dist/models/manager.d.ts.map +1 -1
- package/dist/models/manager.js +5 -25
- package/dist/models/openai-provider.d.ts +11 -10
- package/dist/models/openai-provider.d.ts.map +1 -1
- package/dist/models/openai-provider.js +0 -4
- package/dist/models/opencode-zen-provider.d.ts +23 -0
- package/dist/models/opencode-zen-provider.d.ts.map +1 -0
- package/dist/models/opencode-zen-provider.js +76 -0
- package/dist/models/openrouter-provider.d.ts +34 -28
- package/dist/models/openrouter-provider.d.ts.map +1 -1
- package/dist/models/openrouter-provider.js +148 -139
- package/dist/models/providers.d.ts +6 -16
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/models/providers.js +8 -58
- package/dist/models/xai-provider.d.ts +9 -8
- package/dist/models/xai-provider.d.ts.map +1 -1
- package/dist/models/xai-provider.js +0 -2
- package/dist/prompts/manager.d.ts +1 -1
- package/dist/prompts/manager.d.ts.map +1 -1
- package/dist/prompts/manager.js +1 -1
- package/dist/prompts.d.ts +8 -4
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +155 -177
- package/dist/repl/project-status.d.ts +19 -0
- package/dist/repl/project-status.d.ts.map +1 -0
- package/dist/repl/project-status.js +78 -0
- package/dist/repl-new.d.ts +15 -6
- package/dist/repl-new.d.ts.map +1 -1
- package/dist/repl-new.js +266 -83
- package/dist/{messages.d.ts → sessions/manager.d.ts} +13 -4
- package/dist/sessions/manager.d.ts.map +1 -0
- package/dist/{messages.js → sessions/manager.js} +126 -16
- package/dist/skills.d.ts +16 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +233 -0
- package/dist/terminal/control.d.ts +56 -0
- package/dist/terminal/control.d.ts.map +1 -0
- package/dist/terminal/control.js +111 -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 -26
- package/dist/terminal/formatting.d.ts.map +1 -1
- package/dist/terminal/formatting.js +35 -53
- 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 -101
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/index.js +2 -464
- package/dist/terminal/keys.d.ts +211 -0
- package/dist/terminal/keys.d.ts.map +1 -0
- package/dist/terminal/keys.js +546 -0
- package/dist/terminal/segmenter.d.ts +6 -0
- package/dist/terminal/segmenter.d.ts.map +1 -0
- package/dist/terminal/segmenter.js +11 -0
- package/dist/terminal/select-prompt.d.ts.map +1 -1
- package/dist/terminal/select-prompt.js +9 -21
- package/dist/terminal/string-width.d.ts.map +1 -1
- package/dist/terminal/string-width.js +40 -21
- package/dist/terminal/strip-ansi.d.ts.map +1 -1
- package/dist/terminal/strip-ansi.js +9 -15
- 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/tracker.d.ts.map +1 -1
- package/dist/tokens/tracker.js +58 -16
- package/dist/tools/bash.d.ts +11 -11
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +189 -81
- package/dist/tools/directory-tree.d.ts +9 -13
- package/dist/tools/directory-tree.d.ts.map +1 -1
- package/dist/tools/directory-tree.js +90 -60
- package/dist/tools/dynamic-tool-loader.d.ts +22 -8
- package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-loader.js +41 -46
- package/dist/tools/edit-file.d.ts +6 -16
- package/dist/tools/edit-file.d.ts.map +1 -1
- package/dist/tools/edit-file.js +22 -66
- package/dist/tools/glob.d.ts +15 -16
- package/dist/tools/glob.d.ts.map +1 -1
- package/dist/tools/glob.js +78 -109
- package/dist/tools/grep.d.ts +19 -22
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +61 -93
- package/dist/tools/index.d.ts +202 -167
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +17 -273
- package/dist/tools/ls.d.ts +26 -0
- package/dist/tools/ls.d.ts.map +1 -0
- package/dist/tools/ls.js +80 -0
- package/dist/tools/read-file.d.ts +15 -15
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +52 -76
- package/dist/tools/save-file.d.ts +8 -8
- package/dist/tools/save-file.d.ts.map +1 -1
- package/dist/tools/save-file.js +42 -53
- package/dist/tools/think.d.ts +4 -4
- package/dist/tools/think.d.ts.map +1 -1
- package/dist/tools/think.js +9 -32
- package/dist/tools/types.d.ts +5 -21
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +0 -9
- package/dist/tui/autocomplete/attachment-provider.d.ts +18 -0
- package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -0
- package/dist/tui/autocomplete/attachment-provider.js +159 -0
- package/dist/tui/autocomplete/base-provider.d.ts +17 -0
- package/dist/tui/autocomplete/base-provider.d.ts.map +1 -0
- package/dist/tui/autocomplete/base-provider.js +1 -0
- package/dist/tui/autocomplete/combined-provider.d.ts +20 -0
- package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -0
- package/dist/tui/autocomplete/combined-provider.js +61 -0
- package/dist/tui/autocomplete/command-provider.d.ts +20 -0
- package/dist/tui/autocomplete/command-provider.d.ts.map +1 -0
- package/dist/tui/autocomplete/command-provider.js +90 -0
- package/dist/tui/autocomplete/file-search-provider.d.ts +16 -0
- package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -0
- package/dist/tui/autocomplete/file-search-provider.js +123 -0
- package/dist/tui/autocomplete/path-provider.d.ts +21 -0
- package/dist/tui/autocomplete/path-provider.d.ts.map +1 -0
- package/dist/tui/autocomplete/path-provider.js +164 -0
- package/dist/tui/autocomplete/utils.d.ts +16 -0
- package/dist/tui/autocomplete/utils.d.ts.map +1 -0
- package/dist/tui/autocomplete/utils.js +137 -0
- package/dist/tui/autocomplete.d.ts +12 -43
- package/dist/tui/autocomplete.d.ts.map +1 -1
- package/dist/tui/autocomplete.js +20 -465
- package/dist/tui/components/assistant-message.js +1 -1
- 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 +87 -0
- package/dist/tui/components/editor.d.ts +61 -7
- package/dist/tui/components/editor.d.ts.map +1 -1
- package/dist/tui/components/editor.js +630 -127
- package/dist/tui/components/footer.d.ts +19 -18
- package/dist/tui/components/footer.d.ts.map +1 -1
- package/dist/tui/components/footer.js +90 -185
- 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.map +1 -1
- package/dist/tui/components/input.js +8 -7
- package/dist/tui/components/loader.d.ts +6 -1
- package/dist/tui/components/loader.d.ts.map +1 -1
- package/dist/tui/components/loader.js +8 -3
- package/dist/tui/components/markdown.d.ts +31 -27
- package/dist/tui/components/markdown.d.ts.map +1 -1
- package/dist/tui/components/markdown.js +131 -67
- package/dist/tui/components/modal.d.ts +0 -11
- package/dist/tui/components/modal.d.ts.map +1 -1
- package/dist/tui/components/modal.js +9 -37
- package/dist/tui/components/notification.d.ts +28 -0
- package/dist/tui/components/notification.d.ts.map +1 -0
- package/dist/tui/components/notification.js +63 -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 +66 -0
- package/dist/tui/components/select-list.d.ts +12 -1
- package/dist/tui/components/select-list.d.ts.map +1 -1
- package/dist/tui/components/select-list.js +73 -32
- package/dist/tui/components/spacer.d.ts +1 -1
- package/dist/tui/components/spacer.d.ts.map +1 -1
- package/dist/tui/components/spacer.js +2 -2
- 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/thinking-block.d.ts.map +1 -1
- package/dist/tui/components/thinking-block.js +4 -1
- package/dist/tui/components/tool-execution.d.ts +7 -6
- package/dist/tui/components/tool-execution.d.ts.map +1 -1
- package/dist/tui/components/tool-execution.js +81 -85
- package/dist/tui/components/user-message.d.ts.map +1 -1
- package/dist/tui/components/user-message.js +6 -4
- package/dist/tui/components/welcome.d.ts +8 -1
- package/dist/tui/components/welcome.d.ts.map +1 -1
- package/dist/tui/components/welcome.js +45 -6
- package/dist/tui/index.d.ts +12 -6
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +7 -3
- package/dist/tui/terminal.d.ts +4 -3
- package/dist/tui/terminal.d.ts.map +1 -1
- package/dist/tui/terminal.js +43 -49
- package/dist/tui/tui.d.ts +3 -0
- package/dist/tui/tui.d.ts.map +1 -1
- package/dist/tui/tui.js +58 -43
- package/dist/tui/utils.d.ts +5 -0
- package/dist/tui/utils.d.ts.map +1 -1
- package/dist/tui/utils.js +80 -1
- package/dist/{tools/bash-utils.d.ts → utils/bash.d.ts} +3 -3
- package/dist/utils/bash.d.ts.map +1 -0
- package/dist/{tools/bash-utils.js → utils/bash.js} +22 -11
- package/dist/utils/{filesystem.d.ts → filesystem/operations.d.ts} +1 -1
- package/dist/utils/filesystem/operations.d.ts.map +1 -0
- package/dist/{tools/filesystem-utils.d.ts → utils/filesystem/security.d.ts} +3 -2
- package/dist/utils/filesystem/security.d.ts.map +1 -0
- package/dist/{tools/filesystem-utils.js → utils/filesystem/security.js} +62 -4
- 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/{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/yaml.d.ts +11 -0
- package/dist/utils/yaml.d.ts.map +1 -0
- package/dist/utils/yaml.js +207 -0
- package/dist/utils/{zod-utils.d.ts → zod.d.ts} +2 -1
- package/dist/utils/zod.d.ts.map +1 -0
- package/dist/utils/zod.js +24 -0
- package/package.json +31 -29
- package/dist/agent/manual-loop.d.ts +0 -41
- package/dist/agent/manual-loop.d.ts.map +0 -1
- package/dist/agent/manual-loop.js +0 -278
- package/dist/api/exa/index.d.ts +0 -177
- package/dist/api/exa/index.d.ts.map +0 -1
- package/dist/api/exa/index.js +0 -439
- package/dist/commands/add-directory-command.d.ts +0 -3
- package/dist/commands/add-directory-command.d.ts.map +0 -1
- package/dist/commands/add-directory-command.js +0 -85
- package/dist/commands/application-log-command.d.ts +0 -3
- package/dist/commands/application-log-command.d.ts.map +0 -1
- package/dist/commands/application-log-command.js +0 -79
- package/dist/commands/clear-command.d.ts +0 -3
- package/dist/commands/clear-command.d.ts.map +0 -1
- package/dist/commands/compact-command.d.ts +0 -3
- package/dist/commands/compact-command.d.ts.map +0 -1
- package/dist/commands/compact-command.js +0 -64
- package/dist/commands/context-command.d.ts +0 -3
- package/dist/commands/context-command.d.ts.map +0 -1
- package/dist/commands/context-command.js +0 -183
- package/dist/commands/copy-command.d.ts +0 -3
- package/dist/commands/copy-command.d.ts.map +0 -1
- package/dist/commands/copy-command.js +0 -80
- package/dist/commands/edit-command.d.ts +0 -3
- package/dist/commands/edit-command.d.ts.map +0 -1
- package/dist/commands/edit-command.js +0 -88
- package/dist/commands/edit-prompt-command.d.ts +0 -3
- package/dist/commands/edit-prompt-command.d.ts.map +0 -1
- package/dist/commands/edit-prompt-command.js +0 -61
- package/dist/commands/exit-command.d.ts +0 -13
- package/dist/commands/exit-command.d.ts.map +0 -1
- package/dist/commands/exit-command.js +0 -46
- package/dist/commands/files-command.d.ts +0 -3
- package/dist/commands/files-command.d.ts.map +0 -1
- package/dist/commands/files-command.js +0 -121
- package/dist/commands/generate-rules-command.d.ts +0 -3
- package/dist/commands/generate-rules-command.d.ts.map +0 -1
- package/dist/commands/handoff-command.d.ts +0 -3
- package/dist/commands/handoff-command.d.ts.map +0 -1
- package/dist/commands/handoff-command.js +0 -202
- package/dist/commands/health-command.d.ts +0 -4
- package/dist/commands/health-command.d.ts.map +0 -1
- package/dist/commands/health-command.js +0 -213
- package/dist/commands/help-command.d.ts +0 -3
- package/dist/commands/help-command.d.ts.map +0 -1
- package/dist/commands/history-command.d.ts +0 -3
- package/dist/commands/history-command.d.ts.map +0 -1
- package/dist/commands/init-command.d.ts +0 -3
- package/dist/commands/init-command.d.ts.map +0 -1
- package/dist/commands/last-log-command.d.ts +0 -3
- package/dist/commands/last-log-command.d.ts.map +0 -1
- package/dist/commands/last-log-command.js +0 -98
- package/dist/commands/list-directories-command.d.ts +0 -3
- package/dist/commands/list-directories-command.d.ts.map +0 -1
- package/dist/commands/list-tools-command.d.ts +0 -3
- package/dist/commands/list-tools-command.d.ts.map +0 -1
- package/dist/commands/list-tools-command.js +0 -124
- package/dist/commands/model-command.d.ts +0 -25
- package/dist/commands/model-command.d.ts.map +0 -1
- package/dist/commands/model-command.js +0 -340
- package/dist/commands/paste-command.d.ts +0 -3
- package/dist/commands/paste-command.d.ts.map +0 -1
- package/dist/commands/paste-command.js +0 -277
- package/dist/commands/pickup-command.d.ts +0 -3
- package/dist/commands/pickup-command.d.ts.map +0 -1
- package/dist/commands/pickup-command.js +0 -161
- package/dist/commands/prompt-command.d.ts +0 -3
- package/dist/commands/prompt-command.d.ts.map +0 -1
- package/dist/commands/prompt-command.js +0 -280
- package/dist/commands/remove-directory-command.d.ts +0 -3
- package/dist/commands/remove-directory-command.d.ts.map +0 -1
- package/dist/commands/reset-command.d.ts +0 -3
- package/dist/commands/reset-command.d.ts.map +0 -1
- package/dist/commands/rules-command.d.ts +0 -3
- package/dist/commands/rules-command.d.ts.map +0 -1
- package/dist/commands/rules-command.js +0 -135
- package/dist/commands/save-command.d.ts +0 -3
- package/dist/commands/save-command.d.ts.map +0 -1
- package/dist/commands/shell-command.d.ts +0 -3
- package/dist/commands/shell-command.d.ts.map +0 -1
- package/dist/commands/usage-command.d.ts +0 -3
- package/dist/commands/usage-command.d.ts.map +0 -1
- package/dist/commands/usage-command.js +0 -42
- package/dist/messages.d.ts.map +0 -1
- 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 -58
- 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 -9
- package/dist/repl/project-status-line.d.ts +0 -2
- package/dist/repl/project-status-line.d.ts.map +0 -1
- package/dist/repl/project-status-line.js +0 -31
- package/dist/repl/prompt.d.ts +0 -21
- package/dist/repl/prompt.d.ts.map +0 -1
- package/dist/repl/prompt.js +0 -244
- package/dist/repl/tool-call-repair.d.ts +0 -4
- package/dist/repl/tool-call-repair.d.ts.map +0 -1
- package/dist/repl/tool-call-repair.js +0 -54
- package/dist/repl.d.ts +0 -29
- package/dist/repl.d.ts.map +0 -1
- package/dist/repl.js +0 -218
- 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 -368
- 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 -17
- package/dist/terminal/input-prompt.d.ts.map +0 -1
- package/dist/terminal/input-prompt.js +0 -181
- package/dist/terminal/markdown.d.ts +0 -2
- package/dist/terminal/markdown.d.ts.map +0 -1
- package/dist/terminal/markdown.js +0 -118
- 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 -280
- package/dist/terminal/types.d.ts +0 -35
- package/dist/terminal/types.d.ts.map +0 -1
- package/dist/tokens/threshold.d.ts +0 -35
- package/dist/tokens/threshold.d.ts.map +0 -1
- package/dist/tokens/threshold.js +0 -85
- package/dist/tools/advanced-edit-file.d.ts +0 -69
- package/dist/tools/advanced-edit-file.d.ts.map +0 -1
- package/dist/tools/advanced-edit-file.js +0 -281
- package/dist/tools/agent.d.ts +0 -29
- package/dist/tools/agent.d.ts.map +0 -1
- package/dist/tools/agent.js +0 -103
- package/dist/tools/bash-utils.d.ts.map +0 -1
- package/dist/tools/code-interpreter.d.ts +0 -25
- package/dist/tools/code-interpreter.d.ts.map +0 -1
- package/dist/tools/code-interpreter.js +0 -167
- package/dist/tools/delete-file.d.ts +0 -24
- package/dist/tools/delete-file.d.ts.map +0 -1
- package/dist/tools/delete-file.js +0 -70
- package/dist/tools/dynamic-tool-parser.d.ts +0 -21
- package/dist/tools/dynamic-tool-parser.d.ts.map +0 -1
- package/dist/tools/dynamic-tool-parser.js +0 -22
- package/dist/tools/filesystem-utils.d.ts.map +0 -1
- package/dist/tools/git-utils.d.ts.map +0 -1
- package/dist/tools/llm-edit-fixer.d.ts +0 -25
- package/dist/tools/llm-edit-fixer.d.ts.map +0 -1
- package/dist/tools/llm-edit-fixer.js +0 -150
- package/dist/tools/move-file.d.ts +0 -26
- package/dist/tools/move-file.d.ts.map +0 -1
- package/dist/tools/move-file.js +0 -58
- package/dist/tools/read-multiple-files.d.ts +0 -26
- package/dist/tools/read-multiple-files.d.ts.map +0 -1
- package/dist/tools/read-multiple-files.js +0 -139
- package/dist/tools/web-fetch.d.ts +0 -56
- package/dist/tools/web-fetch.d.ts.map +0 -1
- package/dist/tools/web-fetch.js +0 -247
- package/dist/tools/web-search.d.ts +0 -23
- package/dist/tools/web-search.d.ts.map +0 -1
- package/dist/tools/web-search.js +0 -133
- package/dist/tui/components/prompt-status.d.ts +0 -16
- package/dist/tui/components/prompt-status.d.ts.map +0 -1
- package/dist/tui/components/prompt-status.js +0 -21
- package/dist/utils/filesystem.d.ts.map +0 -1
- package/dist/utils/zod-utils.d.ts.map +0 -1
- package/dist/utils/zod-utils.js +0 -7
- /package/dist/{terminal → commands/add-directory}/types.js +0 -0
- /package/dist/utils/{filesystem.js → filesystem/operations.js} +0 -0
package/dist/config.js
CHANGED
|
@@ -1,9 +1,28 @@
|
|
|
1
|
-
import { mkdirSync } from "node:fs";
|
|
1
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { jsonParser } from "./parsing.js";
|
|
7
|
+
export const defaultConfig = {
|
|
8
|
+
loop: {
|
|
9
|
+
maxIterations: 200,
|
|
10
|
+
},
|
|
11
|
+
tools: {
|
|
12
|
+
activeTools: undefined,
|
|
13
|
+
maxTokens: 30000,
|
|
14
|
+
maxResults: 30,
|
|
15
|
+
dynamicTools: {
|
|
16
|
+
enabled: true,
|
|
17
|
+
maxTools: 10,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
notify: true,
|
|
21
|
+
readOnlyFiles: [],
|
|
22
|
+
skills: {
|
|
23
|
+
enabled: true,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
7
26
|
// Type definitions
|
|
8
27
|
const ProjectConfigSchema = z.object({
|
|
9
28
|
logs: z
|
|
@@ -13,41 +32,40 @@ const ProjectConfigSchema = z.object({
|
|
|
13
32
|
.optional(),
|
|
14
33
|
loop: z
|
|
15
34
|
.object({
|
|
16
|
-
maxIterations: z.number().default(
|
|
17
|
-
parallelTools: z.boolean().default(true),
|
|
18
|
-
maxDurationMs: z.number().default(0),
|
|
35
|
+
maxIterations: z.number().default(defaultConfig.loop.maxIterations),
|
|
19
36
|
})
|
|
20
37
|
.optional()
|
|
21
|
-
.default(
|
|
22
|
-
maxIterations: 90,
|
|
23
|
-
parallelTools: true,
|
|
24
|
-
maxDurationMs: 0,
|
|
25
|
-
}),
|
|
38
|
+
.default(defaultConfig.loop),
|
|
26
39
|
tools: z
|
|
27
40
|
.object({
|
|
28
|
-
|
|
29
|
-
|
|
41
|
+
activeTools: z.array(z.string()).optional(),
|
|
42
|
+
maxTokens: z.number().default(defaultConfig.tools.maxTokens),
|
|
43
|
+
maxResults: z.number().default(defaultConfig.tools.maxResults),
|
|
30
44
|
dynamicTools: z
|
|
31
45
|
.object({
|
|
32
|
-
enabled: z
|
|
33
|
-
|
|
46
|
+
enabled: z
|
|
47
|
+
.boolean()
|
|
48
|
+
.default(defaultConfig.tools.dynamicTools.enabled),
|
|
49
|
+
maxTools: z
|
|
50
|
+
.number()
|
|
51
|
+
.default(defaultConfig.tools.dynamicTools.maxTools),
|
|
34
52
|
})
|
|
35
53
|
.optional()
|
|
36
|
-
.default(
|
|
37
|
-
enabled: true,
|
|
38
|
-
maxTools: 10,
|
|
39
|
-
}),
|
|
54
|
+
.default(defaultConfig.tools.dynamicTools),
|
|
40
55
|
})
|
|
41
56
|
.optional()
|
|
42
|
-
.default(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
57
|
+
.default(defaultConfig.tools),
|
|
58
|
+
notify: z.boolean().optional().default(defaultConfig.notify),
|
|
59
|
+
readOnlyFiles: z
|
|
60
|
+
.array(z.string())
|
|
61
|
+
.optional()
|
|
62
|
+
.default(defaultConfig.readOnlyFiles),
|
|
63
|
+
skills: z
|
|
64
|
+
.object({
|
|
65
|
+
enabled: z.boolean().optional().default(defaultConfig.skills.enabled),
|
|
66
|
+
})
|
|
67
|
+
.optional()
|
|
68
|
+
.default(defaultConfig.skills),
|
|
51
69
|
});
|
|
52
70
|
export class DirectoryProvider {
|
|
53
71
|
baseDir;
|
|
@@ -69,6 +87,22 @@ export class DirectoryProvider {
|
|
|
69
87
|
mkdirSync(dirPath, { recursive: true });
|
|
70
88
|
return dirPath;
|
|
71
89
|
}
|
|
90
|
+
// Check if directory exists without creating it
|
|
91
|
+
async exists(subdir) {
|
|
92
|
+
const dirPath = this.getPath(subdir);
|
|
93
|
+
try {
|
|
94
|
+
await fs.access(dirPath);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Synchronous version of exists check
|
|
102
|
+
existsSync(subdir) {
|
|
103
|
+
const dirPath = this.getPath(subdir);
|
|
104
|
+
return existsSync(dirPath);
|
|
105
|
+
}
|
|
72
106
|
}
|
|
73
107
|
export class ConfigManager {
|
|
74
108
|
project;
|
|
@@ -89,8 +123,8 @@ export class ConfigManager {
|
|
|
89
123
|
throw error;
|
|
90
124
|
}
|
|
91
125
|
}
|
|
92
|
-
//
|
|
93
|
-
async
|
|
126
|
+
// Get merged configuration (project overrides app)
|
|
127
|
+
async getConfig() {
|
|
94
128
|
const appConfigPath = path.join(this.app.getPath(), "acai.json");
|
|
95
129
|
const projectConfigPath = path.join(this.project.getPath(), "acai.json");
|
|
96
130
|
const appConfig = await this._readConfig(appConfigPath);
|
|
@@ -101,17 +135,55 @@ export class ConfigManager {
|
|
|
101
135
|
};
|
|
102
136
|
return ProjectConfigSchema.parse(mergedConfig);
|
|
103
137
|
}
|
|
104
|
-
|
|
105
|
-
|
|
138
|
+
// Skills settings helpers
|
|
139
|
+
async getSkillsEnabled() {
|
|
140
|
+
const projectConfig = await this.getConfig();
|
|
141
|
+
return projectConfig.skills?.enabled ?? true;
|
|
142
|
+
}
|
|
143
|
+
async setSkillsEnabled(enabled) {
|
|
144
|
+
const configPath = path.join(this.app.getPath(), "acai.json");
|
|
145
|
+
let configData = {};
|
|
106
146
|
try {
|
|
107
|
-
|
|
147
|
+
const data = await fs.readFile(configPath, "utf8");
|
|
148
|
+
configData = jsonParser(ProjectConfigSchema.partial()).parse(data);
|
|
108
149
|
}
|
|
109
150
|
catch (error) {
|
|
110
|
-
if (error.code
|
|
111
|
-
|
|
151
|
+
if (error.code !== "ENOENT") {
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!configData.skills) {
|
|
156
|
+
configData.skills = { enabled: true };
|
|
157
|
+
}
|
|
158
|
+
configData.skills.enabled = enabled;
|
|
159
|
+
await this.app.ensurePath();
|
|
160
|
+
await fs.writeFile(configPath, JSON.stringify(configData, null, 2));
|
|
161
|
+
}
|
|
162
|
+
async readAgentsFiles() {
|
|
163
|
+
const files = [];
|
|
164
|
+
const agentsPaths = [
|
|
165
|
+
{
|
|
166
|
+
absolute: path.join(this.app.getPath(), "AGENTS.md"),
|
|
167
|
+
relative: "~/.acai/AGENTS.md",
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
absolute: path.join(process.cwd(), "AGENTS.md"),
|
|
171
|
+
relative: "./AGENTS.md",
|
|
172
|
+
},
|
|
173
|
+
];
|
|
174
|
+
for (const { absolute, relative } of agentsPaths) {
|
|
175
|
+
try {
|
|
176
|
+
const content = await fs.readFile(absolute, "utf8");
|
|
177
|
+
files.push({
|
|
178
|
+
path: relative,
|
|
179
|
+
content,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
catch (_error) {
|
|
183
|
+
// ignore
|
|
112
184
|
}
|
|
113
|
-
throw error;
|
|
114
185
|
}
|
|
186
|
+
return files;
|
|
115
187
|
}
|
|
116
188
|
async writeAgentsFile(rules) {
|
|
117
189
|
const agentsPath = path.join(process.cwd(), "AGENTS.md");
|
|
@@ -139,6 +211,10 @@ export class ConfigManager {
|
|
|
139
211
|
}
|
|
140
212
|
}
|
|
141
213
|
async writeProjectLearnedRulesFile(rules) {
|
|
214
|
+
// Only write project rules if the project directory exists
|
|
215
|
+
if (!(await this.project.exists())) {
|
|
216
|
+
return; // Silently return if project directory doesn't exist
|
|
217
|
+
}
|
|
142
218
|
const rulesDir = await this.project.ensurePath("rules");
|
|
143
219
|
const rulesPath = path.join(rulesDir, "learned-rules.md");
|
|
144
220
|
try {
|
|
@@ -177,50 +253,32 @@ export class ConfigManager {
|
|
|
177
253
|
throw error;
|
|
178
254
|
}
|
|
179
255
|
}
|
|
180
|
-
//
|
|
181
|
-
async
|
|
256
|
+
// Private helper for reading app config
|
|
257
|
+
async _readAppConfig(configName) {
|
|
182
258
|
const configPath = path.join(this.app.getPath(), `${configName}.json`);
|
|
183
259
|
try {
|
|
184
260
|
const data = await fs.readFile(configPath, "utf8");
|
|
185
|
-
return JSON.parse(data);
|
|
261
|
+
return ProjectConfigSchema.parse(JSON.parse(data));
|
|
186
262
|
}
|
|
187
263
|
catch (error) {
|
|
188
264
|
if (error.code === "ENOENT") {
|
|
189
|
-
return
|
|
265
|
+
return ProjectConfigSchema.parse(defaultConfig);
|
|
190
266
|
}
|
|
191
267
|
throw error;
|
|
192
268
|
}
|
|
193
269
|
}
|
|
194
|
-
|
|
270
|
+
// Ensure default app configuration exists
|
|
271
|
+
async ensureDefaultConfig(configName) {
|
|
195
272
|
const configPath = path.join(this.app.getPath(), `${configName}.json`);
|
|
196
273
|
try {
|
|
197
274
|
await fs.access(configPath);
|
|
198
|
-
return await this.
|
|
275
|
+
return await this._readAppConfig(configName);
|
|
199
276
|
}
|
|
200
277
|
catch {
|
|
201
278
|
// Create directory and default config if missing
|
|
202
279
|
await this.app.ensurePath();
|
|
203
|
-
const defaultConfig = {
|
|
204
|
-
logs: {
|
|
205
|
-
path: path.join(this.app.getPath(), "logs", "current.log"),
|
|
206
|
-
},
|
|
207
|
-
loop: {
|
|
208
|
-
maxIterations: 90,
|
|
209
|
-
parallelTools: true,
|
|
210
|
-
maxDurationMs: 0,
|
|
211
|
-
},
|
|
212
|
-
tools: {
|
|
213
|
-
maxTokens: 30000,
|
|
214
|
-
maxResults: 30,
|
|
215
|
-
dynamicTools: {
|
|
216
|
-
enabled: true,
|
|
217
|
-
maxTools: 10,
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
notify: true,
|
|
221
|
-
};
|
|
222
280
|
await fs.writeFile(configPath, JSON.stringify(defaultConfig, null, 2));
|
|
223
|
-
return defaultConfig;
|
|
281
|
+
return ProjectConfigSchema.parse(defaultConfig);
|
|
224
282
|
}
|
|
225
283
|
}
|
|
226
284
|
async writeAppConfig(configName, data) {
|
package/dist/dedent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dedent.d.ts","sourceRoot":"","sources":["../source/dedent.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;AAI9E,eAAO,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"dedent.d.ts","sourceRoot":"","sources":["../source/dedent.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;AAI9E,eAAO,MAAM,MAAM,EAAE,MA+CpB,CAAC"}
|
package/dist/dedent.js
CHANGED
|
@@ -3,13 +3,13 @@ export const dedent = (strings, ...values) => {
|
|
|
3
3
|
// Perform interpolation
|
|
4
4
|
let result = "";
|
|
5
5
|
for (let i = 0; i < strings.raw.length; i++) {
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
const raw = strings.raw[i] ?? "";
|
|
7
|
+
// handle escaped newlines, backticks, and interpolation characters
|
|
8
|
+
const next = raw
|
|
9
|
+
.replace(/\\\n[ \t]*/g, "")
|
|
10
|
+
.replace(/\\`/g, "`")
|
|
11
|
+
.replace(/\\\$/g, "$")
|
|
12
|
+
.replace(/\\\{/g, "{");
|
|
13
13
|
result += next;
|
|
14
14
|
if (i < values.length) {
|
|
15
15
|
result += values[i];
|
|
@@ -37,17 +37,26 @@ interface BackgroundProcessOptions extends ExecutionOptions {
|
|
|
37
37
|
onExit?: (code: number | null) => void;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
* Background process handle
|
|
40
|
+
* Background process handle (public interface)
|
|
41
41
|
*/
|
|
42
42
|
interface BackgroundProcess {
|
|
43
43
|
pid: number;
|
|
44
44
|
kill: () => boolean;
|
|
45
45
|
isRunning: boolean;
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Tracked background process with project information
|
|
49
|
+
*/
|
|
50
|
+
interface TrackedBackgroundProcess extends BackgroundProcess {
|
|
51
|
+
originalCwd: string;
|
|
52
|
+
startTime: Date;
|
|
53
|
+
command: string;
|
|
54
|
+
}
|
|
47
55
|
/**
|
|
48
56
|
* Execution environment manager
|
|
49
57
|
*/
|
|
50
58
|
interface ExecutionConfig {
|
|
59
|
+
/** Value for NODE_ENV environment variable (defaults to "production") */
|
|
51
60
|
env?: string;
|
|
52
61
|
execution?: {
|
|
53
62
|
cwd?: string;
|
|
@@ -78,6 +87,14 @@ export declare class ExecutionEnvironment {
|
|
|
78
87
|
* Execute a command in the background
|
|
79
88
|
*/
|
|
80
89
|
executeCommandInBackground(command: string, options?: BackgroundProcessOptions): BackgroundProcess;
|
|
90
|
+
/**
|
|
91
|
+
* Get background processes for a specific project directory
|
|
92
|
+
*/
|
|
93
|
+
getBackgroundProcessesForProject(projectRoot: string): TrackedBackgroundProcess[];
|
|
94
|
+
/**
|
|
95
|
+
* Kill all background processes for a specific project directory
|
|
96
|
+
*/
|
|
97
|
+
killBackgroundProcessesForProject(projectRoot: string): void;
|
|
81
98
|
/**
|
|
82
99
|
* Kill all running background processes
|
|
83
100
|
*/
|
|
@@ -107,6 +124,5 @@ export declare class ExecutionEnvironment {
|
|
|
107
124
|
* Initialize the execution environment
|
|
108
125
|
*/
|
|
109
126
|
export declare function initExecutionEnvironment(config?: ExecutionConfig): Promise<ExecutionEnvironment>;
|
|
110
|
-
export declare function setupProcessCleanup(executionEnv: ExecutionEnvironment): void;
|
|
111
127
|
export {};
|
|
112
128
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/execution/index.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,gBAAgB;IACxB,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mGAAmG;IACnG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0CAA0C;IAC1C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,UAAU,wBAAyB,SAAQ,gBAAgB;IACzD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAwBD;;GAEG;AACH,UAAU,eAAe;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;KAC1C,CAAC;CACH;AAwBD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/execution/index.ts"],"names":[],"mappings":"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"}
|
package/dist/execution/index.js
CHANGED
|
@@ -56,9 +56,10 @@ export class ExecutionEnvironment {
|
|
|
56
56
|
constructor(config = {}) {
|
|
57
57
|
this.config = config;
|
|
58
58
|
this.workingDirectory = config.execution?.cwd || process.cwd();
|
|
59
|
-
// Set up environment variables
|
|
59
|
+
// Set up environment variables - filter out undefined values from process.env
|
|
60
|
+
const filteredEnv = Object.fromEntries(Object.entries(process.env).filter((entry) => entry[1] !== undefined));
|
|
60
61
|
this.environmentVariables = {
|
|
61
|
-
...
|
|
62
|
+
...filteredEnv,
|
|
62
63
|
// biome-ignore lint/style/useNamingConvention: environment variable.
|
|
63
64
|
NODE_ENV: config.env || "production",
|
|
64
65
|
...(config.execution?.env || {}),
|
|
@@ -130,6 +131,23 @@ export class ExecutionEnvironment {
|
|
|
130
131
|
});
|
|
131
132
|
return;
|
|
132
133
|
}
|
|
134
|
+
let settled = false;
|
|
135
|
+
let abortHandler;
|
|
136
|
+
const settle = (result, shouldReject, error) => {
|
|
137
|
+
if (settled)
|
|
138
|
+
return;
|
|
139
|
+
settled = true;
|
|
140
|
+
// Clean up abort listener
|
|
141
|
+
if (abortHandler) {
|
|
142
|
+
options.abortSignal?.removeEventListener("abort", abortHandler);
|
|
143
|
+
}
|
|
144
|
+
if (shouldReject && error) {
|
|
145
|
+
reject(error);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
resolve(result);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
133
151
|
const childProcess = exec(command, {
|
|
134
152
|
cwd,
|
|
135
153
|
env,
|
|
@@ -145,65 +163,50 @@ export class ExecutionEnvironment {
|
|
|
145
163
|
? `${stdout}${stderr ? stderr : ""}`
|
|
146
164
|
: stdout;
|
|
147
165
|
if (error) {
|
|
166
|
+
const exitCode = error.code ?? 1;
|
|
148
167
|
logger.error({
|
|
149
168
|
error: error.message,
|
|
150
|
-
exitCode
|
|
169
|
+
exitCode,
|
|
151
170
|
duration,
|
|
152
171
|
}, `Command execution failed: ${command}`);
|
|
153
|
-
|
|
172
|
+
settle({
|
|
154
173
|
output: preserveOutputOnError ? output : "",
|
|
155
|
-
exitCode
|
|
174
|
+
exitCode,
|
|
156
175
|
error,
|
|
157
176
|
command,
|
|
158
177
|
duration,
|
|
159
|
-
};
|
|
160
|
-
if (throwOnError) {
|
|
161
|
-
reject(error);
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
resolve(result);
|
|
165
|
-
}
|
|
178
|
+
}, throwOnError, error);
|
|
166
179
|
}
|
|
167
180
|
else {
|
|
168
181
|
logger.debug({
|
|
169
182
|
duration,
|
|
170
183
|
outputLength: output.length,
|
|
171
184
|
}, `Command executed successfully: ${command}`);
|
|
172
|
-
|
|
185
|
+
settle({
|
|
173
186
|
output,
|
|
174
187
|
exitCode: 0,
|
|
175
188
|
command,
|
|
176
189
|
duration,
|
|
177
|
-
});
|
|
190
|
+
}, false);
|
|
178
191
|
}
|
|
179
192
|
});
|
|
180
193
|
// Handle abort signal
|
|
181
194
|
if (options.abortSignal) {
|
|
182
|
-
|
|
195
|
+
abortHandler = () => {
|
|
183
196
|
logger.warn({ command, pid: childProcess.pid }, "Command execution aborted");
|
|
184
197
|
childProcess.kill("SIGTERM");
|
|
185
198
|
const error = new Error("Command execution aborted");
|
|
186
|
-
|
|
187
|
-
output:
|
|
199
|
+
settle({
|
|
200
|
+
output: "",
|
|
188
201
|
exitCode: 1,
|
|
189
202
|
error,
|
|
190
203
|
command,
|
|
191
204
|
duration: Date.now() - startTime,
|
|
192
|
-
};
|
|
193
|
-
if (throwOnError) {
|
|
194
|
-
reject(error);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
resolve(result);
|
|
198
|
-
}
|
|
205
|
+
}, throwOnError, error);
|
|
199
206
|
};
|
|
200
207
|
options.abortSignal.addEventListener("abort", abortHandler, {
|
|
201
208
|
once: true,
|
|
202
209
|
});
|
|
203
|
-
// Clean up abort listener when process completes
|
|
204
|
-
childProcess.on("exit", () => {
|
|
205
|
-
options.abortSignal?.removeEventListener("abort", abortHandler);
|
|
206
|
-
});
|
|
207
210
|
}
|
|
208
211
|
});
|
|
209
212
|
}
|
|
@@ -211,28 +214,40 @@ export class ExecutionEnvironment {
|
|
|
211
214
|
* Execute a command in the background
|
|
212
215
|
*/
|
|
213
216
|
executeCommandInBackground(command, options = {}) {
|
|
217
|
+
const cwd = options.cwd || this.workingDirectory;
|
|
218
|
+
// Create the tracked process first
|
|
219
|
+
const trackedProcess = {
|
|
220
|
+
pid: -1, // Will be set after spawn
|
|
221
|
+
kill: () => false, // Will be set after spawn
|
|
222
|
+
isRunning: true,
|
|
223
|
+
originalCwd: cwd,
|
|
224
|
+
startTime: new Date(),
|
|
225
|
+
command,
|
|
226
|
+
};
|
|
214
227
|
// Validate command for safety
|
|
215
228
|
this.validateCommand(command);
|
|
216
|
-
const cwd = options.cwd || this.workingDirectory;
|
|
217
229
|
const env = {
|
|
218
230
|
...this.environmentVariables,
|
|
219
231
|
...ttySizeEnv(),
|
|
220
232
|
...(options.env || {}),
|
|
221
233
|
};
|
|
222
|
-
const shell = options.shell ||
|
|
223
|
-
this.config.execution?.shell ||
|
|
224
|
-
process.env["SHELL"] ||
|
|
225
|
-
"bash";
|
|
234
|
+
const shell = options.shell || this.config.execution?.shell || getShell();
|
|
226
235
|
logger.debug({
|
|
227
236
|
command,
|
|
228
237
|
cwd,
|
|
229
238
|
shell,
|
|
230
239
|
hasAbortSignal: !!options.abortSignal,
|
|
231
240
|
}, "Executing command in background");
|
|
232
|
-
// Check if already aborted
|
|
241
|
+
// Check if already aborted - return a dead process handle for consistency
|
|
233
242
|
if (options.abortSignal?.aborted) {
|
|
234
243
|
logger.warn({ command }, "Background command execution aborted before starting");
|
|
235
|
-
|
|
244
|
+
return {
|
|
245
|
+
pid: -1,
|
|
246
|
+
kill: () => false,
|
|
247
|
+
get isRunning() {
|
|
248
|
+
return false;
|
|
249
|
+
},
|
|
250
|
+
};
|
|
236
251
|
}
|
|
237
252
|
// Spawn the process
|
|
238
253
|
const childProcess = spawn(command, [], {
|
|
@@ -244,6 +259,25 @@ export class ExecutionEnvironment {
|
|
|
244
259
|
});
|
|
245
260
|
const pid = childProcess.pid ?? -1;
|
|
246
261
|
let isRunning = true;
|
|
262
|
+
// Update tracked process with actual PID, isRunning getter, and kill function
|
|
263
|
+
trackedProcess.pid = pid;
|
|
264
|
+
Object.defineProperty(trackedProcess, "isRunning", {
|
|
265
|
+
get: () => isRunning,
|
|
266
|
+
enumerable: true,
|
|
267
|
+
});
|
|
268
|
+
trackedProcess.kill = () => {
|
|
269
|
+
if (isRunning) {
|
|
270
|
+
childProcess.kill();
|
|
271
|
+
isRunning = false;
|
|
272
|
+
this.backgroundProcesses.delete(pid);
|
|
273
|
+
// Clean up abort listener
|
|
274
|
+
if (abortHandler) {
|
|
275
|
+
options.abortSignal?.removeEventListener("abort", abortHandler);
|
|
276
|
+
}
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
return false;
|
|
280
|
+
};
|
|
247
281
|
// Set up output handlers
|
|
248
282
|
if (childProcess.stdout) {
|
|
249
283
|
childProcess.stdout.on("data", (data) => {
|
|
@@ -292,28 +326,46 @@ export class ExecutionEnvironment {
|
|
|
292
326
|
once: true,
|
|
293
327
|
});
|
|
294
328
|
}
|
|
295
|
-
// Create the process handle
|
|
329
|
+
// Create the public process handle with getter for live isRunning state
|
|
296
330
|
const backgroundProcess = {
|
|
297
331
|
pid,
|
|
298
|
-
kill:
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
isRunning = false;
|
|
302
|
-
this.backgroundProcesses.delete(pid);
|
|
303
|
-
// Clean up abort listener
|
|
304
|
-
if (abortHandler) {
|
|
305
|
-
options.abortSignal?.removeEventListener("abort", abortHandler);
|
|
306
|
-
}
|
|
307
|
-
return true;
|
|
308
|
-
}
|
|
309
|
-
return false;
|
|
332
|
+
kill: trackedProcess.kill,
|
|
333
|
+
get isRunning() {
|
|
334
|
+
return isRunning;
|
|
310
335
|
},
|
|
311
|
-
isRunning: true,
|
|
312
336
|
};
|
|
313
337
|
// Track the process
|
|
314
|
-
this.backgroundProcesses.set(pid,
|
|
338
|
+
this.backgroundProcesses.set(pid, trackedProcess);
|
|
315
339
|
return backgroundProcess;
|
|
316
340
|
}
|
|
341
|
+
/**
|
|
342
|
+
* Get background processes for a specific project directory
|
|
343
|
+
*/
|
|
344
|
+
getBackgroundProcessesForProject(projectRoot) {
|
|
345
|
+
const processes = [];
|
|
346
|
+
for (const process of this.backgroundProcesses.values()) {
|
|
347
|
+
// Check if process was started in or under the project root
|
|
348
|
+
if (process.originalCwd.startsWith(projectRoot)) {
|
|
349
|
+
processes.push(process);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return processes;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Kill all background processes for a specific project directory
|
|
356
|
+
*/
|
|
357
|
+
killBackgroundProcessesForProject(projectRoot) {
|
|
358
|
+
const processes = this.getBackgroundProcessesForProject(projectRoot);
|
|
359
|
+
logger.info(`Killing ${processes.length} background processes for project: ${projectRoot}`);
|
|
360
|
+
for (const process of processes) {
|
|
361
|
+
try {
|
|
362
|
+
process.kill();
|
|
363
|
+
}
|
|
364
|
+
catch (error) {
|
|
365
|
+
logger.warn(error, `Failed to kill process ${process.pid}`);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
317
369
|
/**
|
|
318
370
|
* Kill all running background processes
|
|
319
371
|
*/
|
|
@@ -388,45 +440,31 @@ export async function initExecutionEnvironment(config = {}) {
|
|
|
388
440
|
try {
|
|
389
441
|
const executionEnv = new ExecutionEnvironment(config);
|
|
390
442
|
await executionEnv.initialize();
|
|
443
|
+
// Set up cleanup for background processes
|
|
444
|
+
setupProcessCleanup(executionEnv);
|
|
391
445
|
logger.info("Execution environment initialized successfully");
|
|
392
446
|
return executionEnv;
|
|
393
447
|
}
|
|
394
448
|
catch (error) {
|
|
395
449
|
logger.error(error, "Failed to initialize execution environment");
|
|
396
450
|
// Return a minimal execution environment even if initialization failed
|
|
397
|
-
|
|
451
|
+
const executionEnv = new ExecutionEnvironment(config);
|
|
452
|
+
setupProcessCleanup(executionEnv);
|
|
453
|
+
return executionEnv;
|
|
398
454
|
}
|
|
399
455
|
}
|
|
400
|
-
//
|
|
401
|
-
|
|
402
|
-
// let args: string[] = [];
|
|
403
|
-
// const useShellOption = false;
|
|
404
|
-
// if (platformName === "win32") {
|
|
405
|
-
// const { execSync } = await import("node:child_process");
|
|
406
|
-
// try {
|
|
407
|
-
// execSync("where wsl", { stdio: "ignore" });
|
|
408
|
-
// cmd = "wsl.exe";
|
|
409
|
-
// args = ["--", command];
|
|
410
|
-
// } catch {
|
|
411
|
-
// cmd = "powershell.exe";
|
|
412
|
-
// args = ["-NoProfile", "-NonInteractive", "-Command", command];
|
|
413
|
-
// }
|
|
414
|
-
// } else {
|
|
415
|
-
// const shell = process.env["SHELL"] || "/bin/bash";
|
|
416
|
-
// cmd = shell;
|
|
417
|
-
// args = ["-c", command];
|
|
418
|
-
// }
|
|
456
|
+
// Track registered execution environments for cleanup
|
|
457
|
+
const registeredForCleanup = new WeakSet();
|
|
419
458
|
// Set up cleanup on process exit
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
process.exit(0);
|
|
427
|
-
});
|
|
428
|
-
process.on("SIGTERM", () => {
|
|
459
|
+
function setupProcessCleanup(executionEnv) {
|
|
460
|
+
if (registeredForCleanup.has(executionEnv)) {
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
registeredForCleanup.add(executionEnv);
|
|
464
|
+
const cleanup = () => {
|
|
429
465
|
executionEnv.killAllBackgroundProcesses();
|
|
430
|
-
|
|
431
|
-
|
|
466
|
+
};
|
|
467
|
+
process.on("exit", cleanup);
|
|
468
|
+
process.on("SIGINT", cleanup);
|
|
469
|
+
process.on("SIGTERM", cleanup);
|
|
432
470
|
}
|