@travisennis/acai 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +186 -17
- package/bin/acai-wrapper.js +26 -0
- package/dist/agent/index.d.ts +15 -2
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +202 -174
- package/dist/api/exa/index.js +1 -1
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -7
- package/dist/commands/add-directory-command.d.ts +1 -1
- package/dist/commands/add-directory-command.d.ts.map +1 -1
- package/dist/commands/add-directory-command.js +1 -32
- package/dist/commands/application-log-command.d.ts +1 -1
- package/dist/commands/application-log-command.d.ts.map +1 -1
- package/dist/commands/application-log-command.js +2 -38
- package/dist/commands/clear-command.d.ts +1 -1
- package/dist/commands/clear-command.d.ts.map +1 -1
- package/dist/commands/clear-command.js +1 -5
- package/dist/commands/compact-command.d.ts.map +1 -1
- package/dist/commands/compact-command.js +0 -9
- package/dist/commands/context-command.d.ts +1 -1
- package/dist/commands/context-command.d.ts.map +1 -1
- package/dist/commands/context-command.js +13 -72
- package/dist/commands/copy-command.d.ts.map +1 -1
- package/dist/commands/copy-command.js +0 -19
- package/dist/commands/edit-command.d.ts +1 -1
- package/dist/commands/edit-command.d.ts.map +1 -1
- package/dist/commands/edit-command.js +3 -49
- package/dist/commands/edit-prompt-command.d.ts +1 -1
- package/dist/commands/edit-prompt-command.d.ts.map +1 -1
- package/dist/commands/edit-prompt-command.js +1 -26
- package/dist/commands/exit-command.d.ts +1 -4
- package/dist/commands/exit-command.d.ts.map +1 -1
- package/dist/commands/exit-command.js +2 -18
- package/dist/commands/files-command.d.ts +1 -1
- package/dist/commands/files-command.d.ts.map +1 -1
- package/dist/commands/files-command.js +1 -54
- package/dist/commands/generate-rules-command.d.ts +1 -1
- package/dist/commands/generate-rules-command.d.ts.map +1 -1
- package/dist/commands/generate-rules-command.js +18 -60
- package/dist/commands/handoff-command.d.ts.map +1 -1
- package/dist/commands/handoff-command.js +0 -11
- package/dist/commands/health-command.d.ts +1 -1
- package/dist/commands/health-command.d.ts.map +1 -1
- package/dist/commands/health-command.js +8 -103
- package/dist/commands/help-command.d.ts +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +6 -14
- package/dist/commands/history-command.d.ts +1 -1
- package/dist/commands/history-command.d.ts.map +1 -1
- package/dist/commands/history-command.js +30 -106
- package/dist/commands/init-command.d.ts +1 -1
- package/dist/commands/init-command.d.ts.map +1 -1
- package/dist/commands/init-command.js +4 -23
- package/dist/commands/last-log-command.d.ts +1 -1
- package/dist/commands/last-log-command.d.ts.map +1 -1
- package/dist/commands/last-log-command.js +1 -28
- package/dist/commands/list-directories-command.d.ts +1 -1
- package/dist/commands/list-directories-command.d.ts.map +1 -1
- package/dist/commands/list-directories-command.js +1 -14
- package/dist/commands/list-tools-command.d.ts.map +1 -1
- package/dist/commands/list-tools-command.js +55 -78
- package/dist/commands/manager.d.ts +1 -8
- package/dist/commands/manager.d.ts.map +1 -1
- package/dist/commands/manager.js +7 -42
- package/dist/commands/model-command.d.ts +0 -22
- package/dist/commands/model-command.d.ts.map +1 -1
- package/dist/commands/model-command.js +5 -126
- package/dist/commands/paste-command.d.ts +1 -1
- package/dist/commands/paste-command.d.ts.map +1 -1
- package/dist/commands/paste-command.js +1 -79
- package/dist/commands/pickup-command.d.ts.map +1 -1
- package/dist/commands/pickup-command.js +3 -55
- package/dist/commands/prompt-command.d.ts +19 -1
- package/dist/commands/prompt-command.d.ts.map +1 -1
- package/dist/commands/prompt-command.js +172 -194
- package/dist/commands/remove-directory-command.d.ts +1 -1
- package/dist/commands/remove-directory-command.d.ts.map +1 -1
- package/dist/commands/remove-directory-command.js +1 -33
- package/dist/commands/reset-command.d.ts +1 -1
- package/dist/commands/reset-command.d.ts.map +1 -1
- package/dist/commands/reset-command.js +3 -11
- package/dist/commands/rules-command.d.ts +1 -1
- package/dist/commands/rules-command.d.ts.map +1 -1
- package/dist/commands/rules-command.js +1 -63
- package/dist/commands/save-command.d.ts +1 -1
- package/dist/commands/save-command.d.ts.map +1 -1
- package/dist/commands/save-command.js +1 -8
- package/dist/commands/shell-command.d.ts.map +1 -1
- package/dist/commands/shell-command.js +1 -48
- package/dist/commands/types.d.ts +0 -3
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/usage-command.d.ts +1 -1
- package/dist/commands/usage-command.d.ts.map +1 -1
- package/dist/commands/usage-command.js +5 -16
- package/dist/config.d.ts +17 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +86 -53
- package/dist/execution/index.d.ts +17 -2
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +62 -20
- package/dist/formatting.d.ts +19 -0
- package/dist/formatting.d.ts.map +1 -1
- package/dist/formatting.js +54 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +212 -153
- package/dist/messages.d.ts +3 -0
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +67 -3
- 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.map +1 -1
- package/dist/models/deepseek-provider.js +0 -2
- package/dist/models/google-provider.d.ts.map +1 -1
- package/dist/models/google-provider.js +0 -3
- package/dist/models/groq-provider.d.ts.map +1 -1
- package/dist/models/groq-provider.js +0 -1
- package/dist/models/openai-provider.d.ts.map +1 -1
- package/dist/models/openai-provider.js +0 -4
- package/dist/models/openrouter-provider.d.ts +10 -9
- package/dist/models/openrouter-provider.d.ts.map +1 -1
- package/dist/models/openrouter-provider.js +82 -88
- package/dist/models/providers.d.ts +4 -14
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/models/providers.js +1 -57
- package/dist/models/xai-provider.d.ts.map +1 -1
- package/dist/models/xai-provider.js +0 -2
- package/dist/prompts.d.ts +9 -4
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +427 -99
- package/dist/repl/project-status-line.d.ts +1 -0
- package/dist/repl/project-status-line.d.ts.map +1 -1
- package/dist/repl/project-status-line.js +57 -27
- package/dist/repl-new.d.ts +0 -2
- package/dist/repl-new.d.ts.map +1 -1
- package/dist/repl-new.js +34 -54
- package/dist/skills.d.ts +20 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +192 -0
- package/dist/terminal/control.d.ts +55 -0
- package/dist/terminal/control.d.ts.map +1 -0
- package/dist/terminal/control.js +109 -0
- package/dist/terminal/default-theme.d.ts +1 -1
- package/dist/terminal/default-theme.d.ts.map +1 -1
- package/dist/terminal/default-theme.js +24 -28
- package/dist/terminal/formatting.d.ts +23 -25
- package/dist/terminal/formatting.d.ts.map +1 -1
- package/dist/terminal/formatting.js +35 -52
- package/dist/terminal/highlight/index.d.ts.map +1 -1
- package/dist/terminal/highlight/index.js +3 -6
- package/dist/terminal/highlight/theme.d.ts.map +1 -1
- package/dist/terminal/highlight/theme.js +2 -6
- package/dist/terminal/index.d.ts +2 -101
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/index.js +2 -464
- package/dist/terminal/markdown.js +7 -5
- package/dist/terminal/strip-ansi.js +4 -4
- package/dist/terminal/table/cell.d.ts +114 -0
- package/dist/terminal/table/cell.d.ts.map +1 -0
- package/dist/terminal/table/cell.js +407 -0
- package/dist/terminal/table/debug.d.ts +15 -0
- package/dist/terminal/table/debug.d.ts.map +1 -0
- package/dist/terminal/table/debug.js +32 -0
- package/dist/terminal/table/index.d.ts +3 -0
- package/dist/terminal/table/index.d.ts.map +1 -0
- package/dist/terminal/table/index.js +2 -0
- package/dist/terminal/table/layout-manager.d.ts +27 -0
- package/dist/terminal/table/layout-manager.d.ts.map +1 -0
- package/dist/terminal/table/layout-manager.js +257 -0
- package/dist/terminal/table/table.d.ts +9 -0
- package/dist/terminal/table/table.d.ts.map +1 -0
- package/dist/terminal/table/table.js +97 -0
- package/dist/terminal/table/utils.d.ts +63 -0
- package/dist/terminal/table/utils.d.ts.map +1 -0
- package/dist/terminal/table/utils.js +326 -0
- package/dist/tokens/threshold.d.ts +6 -21
- package/dist/tokens/threshold.d.ts.map +1 -1
- package/dist/tokens/threshold.js +13 -31
- package/dist/tools/advanced-edit-file.d.ts.map +1 -1
- package/dist/tools/advanced-edit-file.js +5 -1
- package/dist/tools/agent.d.ts.map +1 -1
- package/dist/tools/agent.js +19 -5
- package/dist/tools/bash.d.ts +3 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +204 -42
- package/dist/tools/batch.d.ts +34 -0
- package/dist/tools/batch.d.ts.map +1 -0
- package/dist/tools/batch.js +174 -0
- package/dist/tools/code-interpreter.d.ts.map +1 -1
- package/dist/tools/code-interpreter.js +25 -9
- package/dist/tools/delete-file.d.ts.map +1 -1
- package/dist/tools/delete-file.js +9 -2
- package/dist/tools/directory-tree.d.ts +0 -6
- package/dist/tools/directory-tree.d.ts.map +1 -1
- package/dist/tools/directory-tree.js +29 -18
- package/dist/tools/dynamic-tool-loader.d.ts +0 -4
- package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-loader.js +2 -2
- package/dist/tools/edit-file.d.ts.map +1 -1
- package/dist/tools/edit-file.js +16 -3
- package/dist/tools/glob.d.ts.map +1 -1
- package/dist/tools/glob.js +24 -13
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +40 -25
- package/dist/tools/index.d.ts +17 -3
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +43 -1
- package/dist/tools/llm-edit-fixer.d.ts +0 -1
- package/dist/tools/llm-edit-fixer.d.ts.map +1 -1
- package/dist/tools/llm-edit-fixer.js +14 -28
- package/dist/tools/move-file.d.ts.map +1 -1
- package/dist/tools/move-file.js +8 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +32 -23
- package/dist/tools/read-multiple-files.d.ts.map +1 -1
- package/dist/tools/read-multiple-files.js +102 -45
- package/dist/tools/save-file.d.ts +4 -4
- package/dist/tools/save-file.d.ts.map +1 -1
- package/dist/tools/save-file.js +20 -2
- package/dist/tools/think.d.ts.map +1 -1
- package/dist/tools/think.js +7 -1
- package/dist/tools/types.d.ts +5 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +1 -1
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +24 -9
- 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 +81 -0
- package/dist/tui/components/editor.d.ts +60 -5
- package/dist/tui/components/editor.d.ts.map +1 -1
- package/dist/tui/components/editor.js +577 -115
- package/dist/tui/components/footer.d.ts +0 -12
- package/dist/tui/components/footer.d.ts.map +1 -1
- package/dist/tui/components/footer.js +19 -7
- 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/loader.d.ts +5 -1
- package/dist/tui/components/loader.d.ts.map +1 -1
- package/dist/tui/components/loader.js +2 -2
- package/dist/tui/components/markdown.d.ts +26 -23
- package/dist/tui/components/markdown.d.ts.map +1 -1
- package/dist/tui/components/markdown.js +107 -54
- 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 +0 -29
- package/dist/tui/components/progress-bar.d.ts +19 -0
- package/dist/tui/components/progress-bar.d.ts.map +1 -0
- package/dist/tui/components/progress-bar.js +78 -0
- package/dist/tui/components/prompt-status.d.ts +2 -1
- package/dist/tui/components/prompt-status.d.ts.map +1 -1
- package/dist/tui/components/prompt-status.js +7 -2
- package/dist/tui/components/select-list.d.ts +27 -1
- package/dist/tui/components/select-list.d.ts.map +1 -1
- package/dist/tui/components/select-list.js +93 -29
- 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 +8 -4
- package/dist/tui/components/tool-execution.d.ts.map +1 -1
- package/dist/tui/components/tool-execution.js +88 -80
- package/dist/tui/components/user-message.d.ts.map +1 -1
- package/dist/tui/components/user-message.js +6 -4
- package/dist/tui/index.d.ts +9 -5
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +5 -1
- package/dist/tui/terminal.d.ts +2 -1
- package/dist/tui/terminal.d.ts.map +1 -1
- package/dist/tui/terminal.js +28 -38
- package/dist/tui/tui.d.ts +2 -0
- package/dist/tui/tui.d.ts.map +1 -1
- package/dist/tui/tui.js +53 -33
- package/dist/tui/utils.d.ts +5 -0
- package/dist/tui/utils.d.ts.map +1 -1
- package/dist/tui/utils.js +81 -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/{zod-utils.d.ts → zod.d.ts} +1 -1
- package/dist/utils/zod.d.ts.map +1 -0
- package/package.json +17 -17
- 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/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/prompt.d.ts +0 -21
- package/dist/repl/prompt.d.ts.map +0 -1
- package/dist/repl/prompt.js +0 -244
- 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/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/terminal/types.js +0 -1
- package/dist/tools/bash-utils.d.ts.map +0 -1
- package/dist/tools/filesystem-utils.d.ts.map +0 -1
- package/dist/tools/git-utils.d.ts.map +0 -1
- package/dist/utils/filesystem.d.ts.map +0 -1
- package/dist/utils/zod-utils.d.ts.map +0 -1
- /package/dist/utils/{filesystem.js → filesystem/operations.js} +0 -0
- /package/dist/utils/{zod-utils.js → zod.js} +0 -0
package/README.md
CHANGED
|
@@ -10,27 +10,30 @@ Acai is a powerful **AI-driven command-line interface (CLI) tool** designed to a
|
|
|
10
10
|
|
|
11
11
|
### Core Functionality:
|
|
12
12
|
|
|
13
|
-
* **Interactive AI Assistant:** Engage in a conversational REPL (Read-Eval-Print Loop) to get assistance with coding, debugging, refactoring, and more.
|
|
13
|
+
* **Interactive AI Assistant:** Engage in a conversational REPL (Read-Eval-Print Loop) or TUI (Terminal User Interface) to get assistance with coding, debugging, refactoring, and more.
|
|
14
14
|
* **Codebase Interaction:** Read, edit, and navigate files; search code; and understand project structure.
|
|
15
15
|
* **Git Integration:** Generate conventional commits, review pull requests, and manage local changes.
|
|
16
16
|
* **Extensible Tooling:** Utilizes a suite of internal tools (e.g., `bash`, `codeInterpreter`, `webSearch`) to perform actions.
|
|
17
17
|
* **Multi-Model Support:** Seamlessly switch between various AI providers (e.g., OpenAI, Google, Anthropic, DeepSeek, Groq, OpenRouter).
|
|
18
18
|
* **Context Management:** Automatically incorporates relevant file content, clipboard data, and conversation history into AI prompts.
|
|
19
19
|
* **Configurable & Learnable:** Customize behavior through project-specific rules and learn from user corrections.
|
|
20
|
+
* **Terminal User Interface:** Modern TUI with modal dialogs, autocomplete, and rich text formatting.
|
|
20
21
|
|
|
21
22
|
## ✨ Features
|
|
22
23
|
|
|
23
|
-
* **Conversational REPL:** Intuitive command-line interface for interacting with the AI.
|
|
24
|
+
* **Conversational REPL/TUI:** Intuitive command-line interface and modern terminal UI for interacting with the AI.
|
|
24
25
|
* **File System Operations:** Read, write, edit, move, and delete files.
|
|
25
26
|
* **File & Directory Mentions:** Include file contents and entire directories in prompts using `@filename` and `@dirname` syntax.
|
|
26
|
-
* **Code Navigation & Analysis:**
|
|
27
|
+
* **Code Navigation & Analysis:** Advanced file searching and code analysis capabilities.
|
|
27
28
|
* **Git Workflow Automation:** Streamline commit messages and code reviews.
|
|
28
29
|
* **Web Integration:** Perform web searches and fetch content from URLs.
|
|
29
|
-
* **Extensible Commands:** A rich set of built-in commands (`/
|
|
30
|
+
* **Extensible Commands:** A rich set of built-in commands (`/help`, `/model`, `/usage`, `/list-tools`, etc.).
|
|
30
31
|
* **Token Usage Tracking:** Monitor AI token consumption.
|
|
31
32
|
* **Configurable AI Models:** Easily switch between different LLM providers and models.
|
|
32
|
-
* **Shell Integration:** Execute shell commands inline using `!`command`` syntax.
|
|
33
|
+
* **Shell Integration:** Execute shell commands inline using `!`command`` syntax or via `/shell` command.
|
|
33
34
|
* **Dynamic Tools:** Create and load custom tools from JavaScript files in your project or user directory.
|
|
35
|
+
* **Multi-workspace Support:** Work across multiple project directories simultaneously.
|
|
36
|
+
* **Skills System:** Discover and load specialized instruction files for specific tasks (PDF extraction, database migrations, etc.).
|
|
34
37
|
|
|
35
38
|
## 🛠️ Technologies Used
|
|
36
39
|
|
|
@@ -187,6 +190,12 @@ acai -p "What files contain the term 'toolCallRepair'?"
|
|
|
187
190
|
|
|
188
191
|
# Pipe input
|
|
189
192
|
echo "How many TypeScript files are in this project?" | acai
|
|
193
|
+
|
|
194
|
+
# Disable skills discovery
|
|
195
|
+
acai --no-skills
|
|
196
|
+
|
|
197
|
+
# Add additional working directories
|
|
198
|
+
acai --add-dir /path/to/project1 --add-dir /path/to/project2
|
|
190
199
|
```
|
|
191
200
|
|
|
192
201
|
Once in the REPL, you can type your prompts or use commands:
|
|
@@ -216,6 +225,54 @@ You can reference files and directories directly in your prompts:
|
|
|
216
225
|
- `@http://example.com` - Fetch and include web content
|
|
217
226
|
- ``!`command` `` - Execute shell command and include output
|
|
218
227
|
|
|
228
|
+
### Prompt Arguments
|
|
229
|
+
|
|
230
|
+
Pass dynamic values to commands using argument placeholders in custom prompts:
|
|
231
|
+
|
|
232
|
+
#### All arguments with `$ARGUMENTS`
|
|
233
|
+
|
|
234
|
+
The `$ARGUMENTS` placeholder captures all arguments passed to the command:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# Command definition
|
|
238
|
+
echo 'Fix issue #$ARGUMENTS following our coding standards' > .acai/prompts/fix-issue.md
|
|
239
|
+
|
|
240
|
+
# Usage
|
|
241
|
+
> /fix-issue 123 high-priority
|
|
242
|
+
# $ARGUMENTS becomes: "123 high-priority"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
#### Individual arguments with `$1`, `$2`, `$3`, etc.
|
|
246
|
+
|
|
247
|
+
Access specific arguments individually using positional parameters (similar to shell scripts):
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Command definition
|
|
251
|
+
echo 'Review PR #$1 with priority $2 and assign to $3' > .acai/prompts/review-pr.md
|
|
252
|
+
|
|
253
|
+
# Usage
|
|
254
|
+
> /review-pr 456 high alice
|
|
255
|
+
# $1 becomes "456", $2 becomes "high", $3 becomes "alice"
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Use positional arguments when you need to:
|
|
259
|
+
- Access arguments individually in different parts of your command
|
|
260
|
+
- Provide defaults for missing arguments
|
|
261
|
+
- Build more structured commands with specific parameter roles
|
|
262
|
+
|
|
263
|
+
#### Backward compatibility with `{{INPUT}}`
|
|
264
|
+
|
|
265
|
+
The legacy `{{INPUT}}` placeholder is still supported and works the same as `$ARGUMENTS`:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
# Command definition
|
|
269
|
+
echo 'Analyze the following code: {{INPUT}}' > .acai/prompts/analyze.md
|
|
270
|
+
|
|
271
|
+
# Usage
|
|
272
|
+
> /analyze src/file.ts
|
|
273
|
+
# {{INPUT}} becomes: "src/file.ts"
|
|
274
|
+
```
|
|
275
|
+
|
|
219
276
|
**Note:** Using `-p/--prompt` runs in CLI mode (one-shot execution), while running without a prompt starts interactive REPL mode.
|
|
220
277
|
|
|
221
278
|
For a list of available commands, type `/help` within the REPL.
|
|
@@ -225,23 +282,27 @@ For a list of available commands, type `/help` within the REPL.
|
|
|
225
282
|
- `/help` - Shows usage information
|
|
226
283
|
- `/reset` - Saves chat history and resets the conversation
|
|
227
284
|
- `/save` - Saves chat history
|
|
228
|
-
- `/compact` - Saves, summarizes and resets the chat history
|
|
229
285
|
- `/exit` or `/bye` - Exits and saves chat history
|
|
230
|
-
- `/files [pattern]` - Select files interactively or by pattern, adding content to prompt
|
|
231
286
|
- `/init` - Generate or improve `AGENTS.md`
|
|
232
|
-
- `/editPrompt` - Edit the current prompt
|
|
233
287
|
- `/paste` - Add clipboard contents to the next prompt
|
|
234
|
-
- `/prompt <name
|
|
235
|
-
- `/rules [view|add <text>|edit]` - View or edit persistent project rules/memories (formerly /memory)
|
|
288
|
+
- `/prompt <name> [arguments...]` - Load saved prompts with optional arguments. Project prompts override user prompts. Supports argument placeholders (`$ARGUMENTS`, `$1`, `$2`, etc.) in prompt files.
|
|
236
289
|
- `/model [provider:model|category|provider]` - List or switch models
|
|
237
290
|
- `/usage` - Show token usage breakdown
|
|
238
291
|
- `/clear` - Clears the terminal screen for the current session
|
|
239
|
-
- `/lastLog` - Show the last application log entries
|
|
240
|
-
- `/appLog` - Show or follow the application log
|
|
241
292
|
- `/generateRules` - Analyze the current conversation and suggest project rules
|
|
242
|
-
- `/edit <path> "<change description>"` - Edit a file with AI assistance
|
|
243
293
|
- `/copy` - Copy the last assistant response to the system clipboard
|
|
244
294
|
- `/list-tools` or `/lt` - List all available static and dynamic tools
|
|
295
|
+
- `/add-dir <path>` - Add additional working directory
|
|
296
|
+
- `/list-dirs` - List all working directories
|
|
297
|
+
- `/remove-dir <path>` - Remove a working directory
|
|
298
|
+
- `/context` - Manage context selections
|
|
299
|
+
- `/health` - Check system health and dependencies
|
|
300
|
+
- `/history` - View and manage conversation history
|
|
301
|
+
- `/pickup` - Resume a previous conversation
|
|
302
|
+
- `/handoff` - Hand off conversation to another agent
|
|
303
|
+
- `/shell` - Execute shell commands
|
|
304
|
+
|
|
305
|
+
**Note**: Some commands mentioned in older documentation (like `/files`, `/edit`, `/compact`, `/rules`, `/lastLog`, `/appLog`) are currently disabled in the codebase.
|
|
245
306
|
|
|
246
307
|
Clipboard notes:
|
|
247
308
|
- macOS: uses `pbcopy`
|
|
@@ -465,6 +526,105 @@ Available tools:
|
|
|
465
526
|
Total: 14 static, 2 dynamic
|
|
466
527
|
```
|
|
467
528
|
|
|
529
|
+
## Skills System
|
|
530
|
+
|
|
531
|
+
Acai includes a powerful skills system that allows you to create and use specialized instruction files for specific tasks. Skills are markdown files with YAML frontmatter that provide detailed instructions for particular domains (e.g., database migrations, PDF extraction, code review).
|
|
532
|
+
|
|
533
|
+
### How Skills Work
|
|
534
|
+
|
|
535
|
+
1. **Discovery**: At startup, Acai scans multiple locations for skills
|
|
536
|
+
2. **Listing**: Available skills are listed in the system prompt
|
|
537
|
+
3. **On-demand loading**: When a task matches a skill's description, the agent uses the `read` tool to load the skill file
|
|
538
|
+
4. **Execution**: The agent follows the instructions in the skill file
|
|
539
|
+
|
|
540
|
+
### Skill File Format
|
|
541
|
+
|
|
542
|
+
Skills are markdown files named `SKILL.md` with YAML frontmatter:
|
|
543
|
+
|
|
544
|
+
```markdown
|
|
545
|
+
---
|
|
546
|
+
description: Extract text and tables from PDF files
|
|
547
|
+
name: pdf-extract # Optional, defaults to directory name
|
|
548
|
+
---
|
|
549
|
+
|
|
550
|
+
# PDF Processing Instructions
|
|
551
|
+
|
|
552
|
+
1. Use `pdftotext` to extract plain text
|
|
553
|
+
2. For tables, use `tabula-py` or similar
|
|
554
|
+
3. Always verify extraction quality
|
|
555
|
+
|
|
556
|
+
Scripts are in: {baseDir}/scripts/
|
|
557
|
+
Configuration: {baseDir}/config.json
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
**Required fields:**
|
|
561
|
+
- `description`: Short description shown in system prompt
|
|
562
|
+
|
|
563
|
+
**Optional fields:**
|
|
564
|
+
- `name`: Override the skill name (defaults to directory name or colon-separated path)
|
|
565
|
+
|
|
566
|
+
**Placeholder:**
|
|
567
|
+
- `{baseDir}`: Replaced with the skill's base directory path
|
|
568
|
+
|
|
569
|
+
### Skill Locations
|
|
570
|
+
|
|
571
|
+
Skills are loaded from these locations (later sources override earlier ones):
|
|
572
|
+
|
|
573
|
+
1. `~/.codex/skills/**/SKILL.md` (Codex CLI user skills)
|
|
574
|
+
2. `~/.claude/skills/*/SKILL.md` (Claude Code user skills)
|
|
575
|
+
3. `<cwd>/.claude/skills/*/SKILL.md` (Claude Code project skills)
|
|
576
|
+
4. `~/.acai/skills/**/SKILL.md` (Acai user skills)
|
|
577
|
+
5. `<cwd>/.acai/skills/**/SKILL.md` (Acai project skills)
|
|
578
|
+
|
|
579
|
+
### Directory Structure
|
|
580
|
+
|
|
581
|
+
Skills can be organized hierarchically with colon-separated names:
|
|
582
|
+
|
|
583
|
+
```
|
|
584
|
+
~/.acai/skills/
|
|
585
|
+
├── pdf-extract/
|
|
586
|
+
│ ├── SKILL.md # Becomes "pdf-extract" skill
|
|
587
|
+
│ └── scripts/ # Optional: supporting files
|
|
588
|
+
├── db/
|
|
589
|
+
│ └── migrate/
|
|
590
|
+
│ └── SKILL.md # Becomes "db:migrate" skill
|
|
591
|
+
└── aws/
|
|
592
|
+
└── s3/
|
|
593
|
+
└── upload/
|
|
594
|
+
└── SKILL.md # Becomes "aws:s3:upload" skill
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
### Compatibility
|
|
598
|
+
|
|
599
|
+
Acai's skills system is compatible with:
|
|
600
|
+
- **Pi Native Format**: `~/.acai/skills/**/SKILL.md` (recursive, colon-separated paths)
|
|
601
|
+
- **Claude Code Format**: `~/.claude/skills/*/SKILL.md` (single level only)
|
|
602
|
+
- **Codex CLI Format**: `~/.codex/skills/**/SKILL.md` (recursive, simple names)
|
|
603
|
+
|
|
604
|
+
### Configuration
|
|
605
|
+
|
|
606
|
+
Skills are enabled by default. You can disable them via:
|
|
607
|
+
|
|
608
|
+
1. **CLI flag**: `acai --no-skills`
|
|
609
|
+
2. **Settings file**: Add to `~/.acai/acai.json` or `.acai/acai.json`:
|
|
610
|
+
```json
|
|
611
|
+
{
|
|
612
|
+
"skills": {
|
|
613
|
+
"enabled": false
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
### Usage Example
|
|
619
|
+
|
|
620
|
+
1. **Agent startup**: Scans all skill locations
|
|
621
|
+
2. **System prompt**: Lists available skills
|
|
622
|
+
3. **User request**: "Extract text from this PDF"
|
|
623
|
+
4. **Agent matches**: Sees "pdf-extract: Extract text and tables from PDF files"
|
|
624
|
+
5. **Skill loading**: Uses `read` tool to load `~/.acai/skills/pdf-extract/SKILL.md`
|
|
625
|
+
6. **Placeholder substitution**: Replaces `{baseDir}` with skill directory path
|
|
626
|
+
7. **Execution**: Follows instructions in skill file
|
|
627
|
+
|
|
468
628
|
## Configuration
|
|
469
629
|
|
|
470
630
|
### Project Configuration
|
|
@@ -479,6 +639,9 @@ Acai supports project-specific configuration through a `.acai/acai.json` file in
|
|
|
479
639
|
"notify": true, // Optional: Enable system notifications (default: false)
|
|
480
640
|
"tools": {
|
|
481
641
|
"maxTokens": 30000 // Optional: Global max token limit for tools
|
|
642
|
+
},
|
|
643
|
+
"skills": {
|
|
644
|
+
"enabled": true // Optional: Enable/disable skills discovery (default: true)
|
|
482
645
|
}
|
|
483
646
|
}
|
|
484
647
|
```
|
|
@@ -486,7 +649,7 @@ Acai supports project-specific configuration through a `.acai/acai.json` file in
|
|
|
486
649
|
### Project-Specific Customization
|
|
487
650
|
|
|
488
651
|
- **Rules/Guidelines**: Add project-specific AI behavior rules in `AGENTS.md`
|
|
489
|
-
- **Custom Prompts**: Store reusable prompts in `.acai/prompts
|
|
652
|
+
- **Custom Prompts**: Store reusable prompts in `.acai/prompts/`. Supports argument placeholders (`$ARGUMENTS`, `$1`, `$2`, etc.) for dynamic content.
|
|
490
653
|
- **Context Selections**: Save file/directory selections in `.acai/context/`
|
|
491
654
|
- **Memory/Rules**: Persistent project rules stored in `.acai/rules/`
|
|
492
655
|
|
|
@@ -562,6 +725,7 @@ Here's a list of useful `npm` scripts for development:
|
|
|
562
725
|
| `npm run knip` | Detects unused files, dependencies, and exports. |
|
|
563
726
|
| `npm run check` | Interactively checks for and updates outdated npm packages. |
|
|
564
727
|
| `npm run cpd` | Checks for copy-pasted code using `jscpd`. |
|
|
728
|
+
| `npm run typecheck` | Type checks the codebase without emitting files. |
|
|
565
729
|
|
|
566
730
|
### Code Structure
|
|
567
731
|
|
|
@@ -571,15 +735,20 @@ The project is organized as follows:
|
|
|
571
735
|
.
|
|
572
736
|
├── .acai/ # Internal configuration, context, and temporary files
|
|
573
737
|
├── source/ # Main application source code
|
|
738
|
+
│ ├── agent/ # Agent loop and manual execution
|
|
739
|
+
│ ├── api/ # External API integrations (e.g., Exa)
|
|
574
740
|
│ ├── cli.ts # CLI entry point
|
|
575
|
-
│ ├──
|
|
576
|
-
│ ├──
|
|
741
|
+
│ ├── commands/ # Implementations of REPL commands
|
|
742
|
+
│ ├── execution/ # Command execution utilities
|
|
577
743
|
│ ├── middleware/ # AI request/response middleware (logging, rate limiting)
|
|
578
744
|
│ ├── models/ # AI model providers and management
|
|
579
745
|
│ ├── prompts/ # Prompt generation and management
|
|
746
|
+
│ ├── repl/ # REPL interface components
|
|
580
747
|
│ ├── terminal/ # Terminal output formatting and rendering
|
|
748
|
+
│ ├── tui/ # Terminal User Interface components
|
|
581
749
|
│ ├── tools/ # AI-callable tools (filesystem, git, web, bash, etc.)
|
|
582
|
-
│
|
|
750
|
+
│ ├── tokens/ # Token counting and tracking
|
|
751
|
+
│ └── utils/ # Utility functions
|
|
583
752
|
├── test/ # Unit tests
|
|
584
753
|
├── ARCHITECTURE.md # Detailed architectural overview and flow diagrams
|
|
585
754
|
├── AGENTS.md # Project-specific AI rules and guidelines
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node --experimental-vm-modules
|
|
2
|
+
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { dirname, resolve } from 'node:path';
|
|
6
|
+
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
|
|
10
|
+
// Path to the main entry point
|
|
11
|
+
const mainScript = resolve(__dirname, '../dist/index.js');
|
|
12
|
+
|
|
13
|
+
// Spawn the main script with the same arguments
|
|
14
|
+
const child = spawn(process.execPath, ['--experimental-vm-modules', mainScript, ...process.argv.slice(2)], {
|
|
15
|
+
stdio: 'inherit',
|
|
16
|
+
env: process.env,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
child.on('error', (err) => {
|
|
20
|
+
console.error('Failed to start subprocess:', err);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
child.on('exit', (code) => {
|
|
25
|
+
process.exit(code || 0);
|
|
26
|
+
});
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { MessageHistory } from "../messages.ts";
|
|
|
4
4
|
import type { ModelManager } from "../models/manager.ts";
|
|
5
5
|
import type { ModelMetadata } from "../models/providers.ts";
|
|
6
6
|
import type { TokenTracker } from "../tokens/tracker.ts";
|
|
7
|
-
import type { CompleteToolSet } from "../tools/index.ts";
|
|
7
|
+
import type { CompleteToolNames, CompleteToolSet } from "../tools/index.ts";
|
|
8
8
|
type AgentOptions = {
|
|
9
9
|
modelManager: ModelManager;
|
|
10
10
|
tokenTracker: TokenTracker;
|
|
@@ -17,6 +17,7 @@ type RunOptions = {
|
|
|
17
17
|
systemPrompt: string;
|
|
18
18
|
input: string;
|
|
19
19
|
toolDefs: CompleteToolSet;
|
|
20
|
+
activeTools?: CompleteToolNames[];
|
|
20
21
|
executors: Map<keyof CompleteToolSet, ToolExecuteFunction<unknown, string>>;
|
|
21
22
|
abortSignal?: AbortSignal;
|
|
22
23
|
};
|
|
@@ -26,6 +27,12 @@ export type ToolEvent = {
|
|
|
26
27
|
toolCallId: string;
|
|
27
28
|
msg: string;
|
|
28
29
|
args: unknown;
|
|
30
|
+
} | {
|
|
31
|
+
type: "tool-call-init";
|
|
32
|
+
name: string;
|
|
33
|
+
toolCallId: string;
|
|
34
|
+
msg: string;
|
|
35
|
+
args: unknown;
|
|
29
36
|
} | {
|
|
30
37
|
type: "tool-call-update";
|
|
31
38
|
name: string;
|
|
@@ -45,6 +52,11 @@ export type ToolEvent = {
|
|
|
45
52
|
msg: string;
|
|
46
53
|
args: unknown;
|
|
47
54
|
};
|
|
55
|
+
type ToolCallLifeCycle = {
|
|
56
|
+
type: "tool-call-lifecycle";
|
|
57
|
+
toolCallId: string;
|
|
58
|
+
events: ToolEvent[];
|
|
59
|
+
};
|
|
48
60
|
export type AgentEvent = {
|
|
49
61
|
type: "agent-start";
|
|
50
62
|
} | {
|
|
@@ -81,7 +93,7 @@ export type AgentEvent = {
|
|
|
81
93
|
type: "message-end";
|
|
82
94
|
role: "assistant";
|
|
83
95
|
content: string;
|
|
84
|
-
} |
|
|
96
|
+
} | ToolCallLifeCycle;
|
|
85
97
|
export type AgentState = {
|
|
86
98
|
modelId: string;
|
|
87
99
|
modelConfig: ModelMetadata;
|
|
@@ -114,6 +126,7 @@ export declare class Agent {
|
|
|
114
126
|
run(args: RunOptions): AsyncGenerator<AgentEvent>;
|
|
115
127
|
abort(): void;
|
|
116
128
|
resetState(): AgentState;
|
|
129
|
+
private processToolEvent;
|
|
117
130
|
}
|
|
118
131
|
export {};
|
|
119
132
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,IAAI,CAAC;AACZ,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,IAAI,CAAC;AACZ,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,IAAI,CAAC;AAGZ,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAI5E,KAAK,YAAY,GAAG;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;CAC1D,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,SAAS,EAAE,GAAG,CAAC,MAAM,eAAe,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,SAAS,GACjB;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;CACf,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;CACf,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;CACf,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;CACf,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEN,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAElB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAExC;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAErB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAE3D,iBAAiB,CAAC;AActB,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,aAAa,CAAC;IAC3B,KAAK,EAAE;QACL,WAAW,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzC,SAAS,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACxC,EAAE,CAAC;IACJ,KAAK,EAAE;SAAG,CAAC,IAAI,MAAM,kBAAkB,CAAC,CAAC,GAAG,MAAM;KAAE,CAAC;IACrD,UAAU,EAAE;SAAG,CAAC,IAAI,MAAM,kBAAkB,CAAC,CAAC,GAAG,MAAM;KAAE,CAAC;IAC1D,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC;AAEF,qBAAa,KAAK;IAChB,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,IAAI,EAAE,YAAY;IAM9B,IAAI,KAAK,eAER;IAED,IAAI,WAAW,gBAEd;IAEM,GAAG,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;IA4XxD,KAAK;IAML,UAAU;IAiCV,OAAO,CAAC,gBAAgB;CAyBzB"}
|