@travisennis/acai 0.0.8 → 0.0.10
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 +48 -729
- package/bin/acai +52 -0
- package/dist/agent/index.d.ts +12 -2
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +378 -168
- package/dist/agent/sub-agent.d.ts +23 -0
- package/dist/agent/sub-agent.d.ts.map +1 -0
- package/dist/agent/sub-agent.js +109 -0
- package/dist/cli/index.d.ts +26 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/{cli.js → cli/index.js} +84 -76
- package/dist/cli/stdin.d.ts +9 -0
- package/dist/cli/stdin.d.ts.map +1 -0
- package/dist/cli/stdin.js +37 -0
- package/dist/commands/copy/index.js +2 -2
- package/dist/commands/copy/utils.d.ts.map +1 -1
- package/dist/commands/copy/utils.js +15 -13
- package/dist/commands/generate-rules/index.d.ts +1 -1
- package/dist/commands/generate-rules/index.d.ts.map +1 -1
- package/dist/commands/generate-rules/index.js +16 -100
- package/dist/commands/generate-rules/service.d.ts +21 -0
- package/dist/commands/generate-rules/service.d.ts.map +1 -0
- package/dist/commands/generate-rules/service.js +103 -0
- package/dist/commands/handoff/index.js +2 -2
- package/dist/commands/health/index.js +1 -1
- package/dist/commands/health/utils.d.ts.map +1 -1
- package/dist/commands/health/utils.js +6 -0
- package/dist/commands/history/index.d.ts +1 -1
- package/dist/commands/history/index.d.ts.map +1 -1
- package/dist/commands/history/index.js +17 -18
- package/dist/commands/history/types.d.ts +38 -0
- package/dist/commands/history/types.d.ts.map +1 -1
- package/dist/commands/history/utils.d.ts.map +1 -1
- package/dist/commands/history/utils.js +63 -58
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +3 -8
- package/dist/commands/init-project/index.d.ts.map +1 -1
- package/dist/commands/init-project/index.js +3 -3
- package/dist/commands/init-project/utils.d.ts.map +1 -1
- package/dist/commands/init-project/utils.js +10 -2
- package/dist/commands/list-tools/index.d.ts.map +1 -1
- package/dist/commands/list-tools/index.js +7 -31
- package/dist/commands/manager.d.ts +2 -2
- package/dist/commands/manager.d.ts.map +1 -1
- package/dist/commands/manager.js +57 -33
- package/dist/commands/model/index.d.ts.map +1 -1
- package/dist/commands/model/index.js +20 -151
- package/dist/commands/model/model-panel.d.ts +4 -0
- package/dist/commands/model/model-panel.d.ts.map +1 -0
- package/dist/commands/model/model-panel.js +144 -0
- package/dist/commands/paste/index.d.ts.map +1 -1
- package/dist/commands/paste/index.js +59 -62
- package/dist/commands/paste/utils.d.ts.map +1 -1
- package/dist/commands/paste/utils.js +88 -58
- package/dist/commands/pickup/index.d.ts.map +1 -1
- package/dist/commands/pickup/index.js +6 -3
- package/dist/commands/pickup/utils.js +3 -3
- package/dist/commands/resources/index.d.ts.map +1 -1
- package/dist/commands/resources/index.js +33 -50
- package/dist/commands/review/index.d.ts.map +1 -1
- package/dist/commands/review/index.js +3 -117
- package/dist/commands/review/review-panel.d.ts +3 -0
- package/dist/commands/review/review-panel.d.ts.map +1 -0
- package/dist/commands/review/review-panel.js +186 -0
- package/dist/commands/review/utils.d.ts +9 -0
- package/dist/commands/review/utils.d.ts.map +1 -1
- package/dist/commands/review/utils.js +127 -68
- package/dist/commands/session/index.d.ts +1 -1
- package/dist/commands/session/index.d.ts.map +1 -1
- package/dist/commands/session/index.js +134 -112
- package/dist/commands/session/types.d.ts +7 -0
- package/dist/commands/session/types.d.ts.map +1 -1
- package/dist/commands/share/html-renderer.d.ts +25 -0
- package/dist/commands/share/html-renderer.d.ts.map +1 -0
- package/dist/commands/share/html-renderer.js +384 -0
- package/dist/commands/share/index.d.ts +3 -0
- package/dist/commands/share/index.d.ts.map +1 -0
- package/dist/commands/share/index.js +122 -0
- package/dist/commands/shell/index.d.ts.map +1 -1
- package/dist/commands/shell/index.js +16 -1
- package/dist/commands/types.d.ts +2 -2
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/{config.d.ts → config/index.d.ts} +20 -9
- package/dist/config/index.d.ts.map +1 -0
- package/dist/{config.js → config/index.js} +43 -42
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +75 -55
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +170 -127
- package/dist/middleware/cache.d.ts.map +1 -1
- package/dist/middleware/cache.js +18 -36
- package/dist/models/ai-config.d.ts +1 -0
- package/dist/models/ai-config.d.ts.map +1 -1
- package/dist/models/ai-config.js +4 -3
- package/dist/models/anthropic-provider.d.ts +2 -5
- package/dist/models/anthropic-provider.d.ts.map +1 -1
- package/dist/models/anthropic-provider.js +3 -70
- package/dist/models/deepseek-provider.d.ts +1 -0
- package/dist/models/deepseek-provider.d.ts.map +1 -1
- package/dist/models/google-provider.d.ts +2 -3
- package/dist/models/google-provider.d.ts.map +1 -1
- package/dist/models/google-provider.js +0 -26
- package/dist/models/groq-provider.d.ts +1 -0
- package/dist/models/groq-provider.d.ts.map +1 -1
- package/dist/models/manager.d.ts +13 -2
- package/dist/models/manager.d.ts.map +1 -1
- package/dist/models/manager.js +20 -8
- package/dist/models/openai-provider.d.ts +5 -5
- package/dist/models/openai-provider.d.ts.map +1 -1
- package/dist/models/openai-provider.js +27 -40
- package/dist/models/opencode-zen-provider.d.ts +8 -3
- package/dist/models/opencode-zen-provider.d.ts.map +1 -1
- package/dist/models/opencode-zen-provider.js +68 -11
- package/dist/models/openrouter-provider.d.ts +24 -30
- package/dist/models/openrouter-provider.d.ts.map +1 -1
- package/dist/models/openrouter-provider.js +92 -177
- package/dist/models/providers.d.ts +1 -1
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/models/xai-provider.d.ts +4 -3
- package/dist/models/xai-provider.d.ts.map +1 -1
- package/dist/models/xai-provider.js +18 -18
- package/dist/modes/manager.d.ts +23 -0
- package/dist/modes/manager.d.ts.map +1 -0
- package/dist/modes/manager.js +77 -0
- package/dist/modes/prompts.d.ts +2 -0
- package/dist/modes/prompts.d.ts.map +1 -0
- package/dist/modes/prompts.js +143 -0
- package/dist/prompts/mentions.d.ts +11 -0
- package/dist/prompts/mentions.d.ts.map +1 -0
- package/dist/{mentions.js → prompts/mentions.js} +21 -80
- package/dist/prompts/system-prompt.d.ts +26 -0
- package/dist/prompts/system-prompt.d.ts.map +1 -0
- package/dist/{prompts.js → prompts/system-prompt.js} +50 -22
- package/dist/repl/index.d.ts +174 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/{repl-new.js → repl/index.js} +399 -76
- package/dist/repl/project-status.d.ts +1 -0
- package/dist/repl/project-status.d.ts.map +1 -1
- package/dist/repl/project-status.js +4 -1
- package/dist/sessions/manager.d.ts +93 -1
- package/dist/sessions/manager.d.ts.map +1 -1
- package/dist/sessions/manager.js +264 -9
- package/dist/sessions/summary.d.ts +4 -0
- package/dist/sessions/summary.d.ts.map +1 -0
- package/dist/sessions/summary.js +30 -0
- package/dist/{skills.d.ts → skills/index.d.ts} +14 -2
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +294 -0
- package/dist/subagents/index.d.ts +15 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +231 -0
- package/dist/terminal/control.d.ts +1 -1
- package/dist/terminal/control.d.ts.map +1 -1
- package/dist/terminal/control.js +30 -9
- package/dist/terminal/east-asian-width.d.ts.map +1 -1
- package/dist/terminal/east-asian-width.js +404 -351
- package/dist/terminal/keys.d.ts +17 -0
- package/dist/terminal/keys.d.ts.map +1 -1
- package/dist/terminal/keys.js +37 -0
- package/dist/terminal/select-prompt.d.ts.map +1 -1
- package/dist/terminal/select-prompt.js +24 -12
- package/dist/terminal/string-width.d.ts.map +1 -1
- package/dist/terminal/string-width.js +25 -27
- package/dist/terminal/style.d.ts.map +1 -1
- package/dist/terminal/style.js +4 -7
- package/dist/terminal/supports-color.d.ts.map +1 -1
- package/dist/terminal/supports-color.js +41 -27
- package/dist/terminal/table/cell.d.ts +12 -0
- package/dist/terminal/table/cell.d.ts.map +1 -1
- package/dist/terminal/table/cell.js +40 -25
- package/dist/terminal/table/layout-manager.d.ts.map +1 -1
- package/dist/terminal/table/layout-manager.js +100 -68
- package/dist/terminal/table/utils.d.ts.map +1 -1
- package/dist/terminal/table/utils.js +17 -10
- package/dist/terminal/wrap-ansi.d.ts.map +1 -1
- package/dist/terminal/wrap-ansi.js +172 -103
- package/dist/tokens/tracker.d.ts +1 -0
- package/dist/tokens/tracker.d.ts.map +1 -1
- package/dist/tokens/tracker.js +3 -0
- package/dist/tools/agent.d.ts +27 -0
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +81 -0
- package/dist/tools/bash.d.ts +4 -3
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +343 -121
- package/dist/tools/code-search.d.ts +41 -0
- package/dist/tools/code-search.d.ts.map +1 -0
- package/dist/tools/code-search.js +195 -0
- package/dist/tools/directory-tree.d.ts +3 -3
- package/dist/tools/directory-tree.d.ts.map +1 -1
- package/dist/tools/directory-tree.js +8 -5
- package/dist/tools/dynamic-tool-loader.d.ts +2 -5
- package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-loader.js +20 -4
- package/dist/tools/edit-file.d.ts +7 -7
- package/dist/tools/edit-file.d.ts.map +1 -1
- package/dist/tools/edit-file.js +164 -66
- package/dist/tools/glob.d.ts +6 -6
- package/dist/tools/glob.d.ts.map +1 -1
- package/dist/tools/glob.js +95 -55
- package/dist/tools/grep.d.ts +15 -12
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +300 -192
- package/dist/tools/index.d.ts +143 -5
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +39 -24
- package/dist/tools/ls.d.ts +2 -2
- package/dist/tools/ls.d.ts.map +1 -1
- package/dist/tools/ls.js +7 -5
- package/dist/tools/read-file.d.ts +3 -3
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +74 -34
- package/dist/tools/save-file.d.ts +3 -3
- package/dist/tools/save-file.d.ts.map +1 -1
- package/dist/tools/save-file.js +11 -11
- package/dist/tools/skill.d.ts +23 -0
- package/dist/tools/skill.d.ts.map +1 -0
- package/dist/tools/skill.js +65 -0
- package/dist/tools/think.d.ts.map +1 -1
- package/dist/tools/think.js +2 -9
- package/dist/tools/utils.d.ts +2 -0
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +12 -0
- package/dist/tools/web-fetch.d.ts +62 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +429 -0
- package/dist/tools/web-search.d.ts +62 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +226 -0
- package/dist/tui/autocomplete/attachment-provider.d.ts +3 -6
- package/dist/tui/autocomplete/attachment-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/attachment-provider.js +25 -78
- package/dist/tui/autocomplete/base-provider.d.ts +1 -0
- package/dist/tui/autocomplete/base-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/combined-provider.d.ts +1 -4
- package/dist/tui/autocomplete/combined-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/combined-provider.js +3 -17
- package/dist/tui/autocomplete/command-provider.d.ts +1 -0
- package/dist/tui/autocomplete/command-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/command-provider.js +3 -0
- package/dist/tui/autocomplete/file-search-provider.d.ts +2 -1
- package/dist/tui/autocomplete/file-search-provider.d.ts.map +1 -1
- package/dist/tui/autocomplete/file-search-provider.js +36 -16
- package/dist/tui/autocomplete/skill-provider.d.ts +17 -0
- package/dist/tui/autocomplete/skill-provider.d.ts.map +1 -0
- package/dist/tui/autocomplete/skill-provider.js +49 -0
- package/dist/tui/autocomplete.d.ts +2 -2
- package/dist/tui/autocomplete.d.ts.map +1 -1
- package/dist/tui/autocomplete.js +3 -5
- package/dist/tui/components/assistant-message.d.ts.map +1 -1
- package/dist/tui/components/assistant-message.js +0 -4
- package/dist/tui/components/editor.d.ts +21 -2
- package/dist/tui/components/editor.d.ts.map +1 -1
- package/dist/tui/components/editor.js +228 -236
- package/dist/tui/components/footer.d.ts +6 -4
- package/dist/tui/components/footer.d.ts.map +1 -1
- package/dist/tui/components/footer.js +49 -25
- package/dist/tui/components/markdown.d.ts +8 -5
- package/dist/tui/components/markdown.d.ts.map +1 -1
- package/dist/tui/components/markdown.js +57 -39
- package/dist/tui/components/modal.d.ts.map +1 -1
- package/dist/tui/components/modal.js +35 -33
- package/dist/tui/components/notification.d.ts +13 -2
- package/dist/tui/components/notification.d.ts.map +1 -1
- package/dist/tui/components/notification.js +37 -2
- package/dist/tui/components/progress-bar.js +1 -1
- package/dist/tui/components/select-list.d.ts +1 -0
- package/dist/tui/components/select-list.d.ts.map +1 -1
- package/dist/tui/components/select-list.js +14 -11
- package/dist/tui/components/text.d.ts +16 -0
- package/dist/tui/components/text.d.ts.map +1 -1
- package/dist/tui/components/text.js +72 -57
- package/dist/tui/components/thinking-block.d.ts +9 -0
- package/dist/tui/components/thinking-block.d.ts.map +1 -1
- package/dist/tui/components/thinking-block.js +43 -11
- package/dist/tui/components/tool-execution.d.ts +5 -1
- package/dist/tui/components/tool-execution.d.ts.map +1 -1
- package/dist/tui/components/tool-execution.js +19 -10
- package/dist/tui/components/user-message.d.ts.map +1 -1
- package/dist/tui/components/user-message.js +0 -3
- package/dist/tui/components/welcome.js +2 -2
- package/dist/tui/editor-launcher.d.ts +13 -0
- package/dist/tui/editor-launcher.d.ts.map +1 -0
- package/dist/tui/editor-launcher.js +39 -0
- package/dist/tui/index.d.ts +3 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +1 -0
- package/dist/tui/terminal.d.ts +27 -0
- package/dist/tui/terminal.d.ts.map +1 -1
- package/dist/tui/terminal.js +144 -15
- package/dist/tui/tui.d.ts +43 -0
- package/dist/tui/tui.d.ts.map +1 -1
- package/dist/tui/tui.js +172 -41
- package/dist/utils/bash/parse.d.ts +19 -0
- package/dist/utils/bash/parse.d.ts.map +1 -0
- package/dist/utils/bash/parse.js +223 -0
- package/dist/utils/bash/quote.d.ts +6 -0
- package/dist/utils/bash/quote.d.ts.map +1 -0
- package/dist/utils/bash/quote.js +23 -0
- package/dist/utils/bash.d.ts.map +1 -1
- package/dist/utils/bash.js +211 -126
- package/dist/utils/command-protection.d.ts +28 -0
- package/dist/utils/command-protection.d.ts.map +1 -0
- package/dist/utils/command-protection.js +324 -0
- package/dist/utils/dedent.d.ts.map +1 -0
- package/dist/utils/env-expand.d.ts +2 -0
- package/dist/utils/env-expand.d.ts.map +1 -0
- package/dist/utils/env-expand.js +8 -0
- package/dist/utils/filesystem/path-display.d.ts +11 -0
- package/dist/utils/filesystem/path-display.d.ts.map +1 -0
- package/dist/utils/filesystem/path-display.js +32 -0
- package/dist/utils/filesystem/security.d.ts +2 -2
- package/dist/utils/filesystem/security.d.ts.map +1 -1
- package/dist/utils/filesystem/security.js +32 -31
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/{formatting.js → utils/formatting.js} +1 -1
- package/dist/utils/git.d.ts +4 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +30 -0
- package/dist/utils/glob.d.ts +1 -1
- package/dist/utils/glob.d.ts.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/{logger.js → utils/logger.js} +1 -1
- package/dist/utils/parsing.d.ts.map +1 -0
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +90 -37
- package/dist/utils/templates.d.ts +2 -0
- package/dist/utils/templates.d.ts.map +1 -0
- package/dist/utils/templates.js +24 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/{version.js → utils/version.js} +1 -1
- package/package.json +34 -25
- package/dist/cli.d.ts +0 -23
- package/dist/cli.d.ts.map +0 -1
- package/dist/commands/exit/index.d.ts +0 -10
- package/dist/commands/exit/index.d.ts.map +0 -1
- package/dist/commands/exit/index.js +0 -21
- package/dist/commands/exit/types.d.ts +0 -8
- package/dist/commands/exit/types.d.ts.map +0 -1
- package/dist/commands/exit/types.js +0 -1
- package/dist/commands/exit/utils.d.ts +0 -2
- package/dist/commands/exit/utils.d.ts.map +0 -1
- package/dist/commands/exit/utils.js +0 -13
- package/dist/commands/prompt/index.d.ts +0 -5
- package/dist/commands/prompt/index.d.ts.map +0 -1
- package/dist/commands/prompt/index.js +0 -126
- package/dist/commands/prompt/types.d.ts +0 -15
- package/dist/commands/prompt/types.d.ts.map +0 -1
- package/dist/commands/prompt/types.js +0 -1
- package/dist/commands/prompt/utils.d.ts +0 -12
- package/dist/commands/prompt/utils.d.ts.map +0 -1
- package/dist/commands/prompt/utils.js +0 -107
- package/dist/commands/reset/index.d.ts +0 -3
- package/dist/commands/reset/index.d.ts.map +0 -1
- package/dist/commands/reset/index.js +0 -25
- package/dist/commands/reset/types.d.ts +0 -1
- package/dist/commands/reset/types.d.ts.map +0 -1
- package/dist/commands/reset/types.js +0 -3
- package/dist/commands/save/index.d.ts +0 -3
- package/dist/commands/save/index.d.ts.map +0 -1
- package/dist/commands/save/index.js +0 -19
- package/dist/config.d.ts.map +0 -1
- package/dist/dedent.d.ts.map +0 -1
- package/dist/formatting.d.ts.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/mentions.d.ts +0 -14
- package/dist/mentions.d.ts.map +0 -1
- package/dist/parsing.d.ts.map +0 -1
- package/dist/prompts.d.ts +0 -10
- package/dist/prompts.d.ts.map +0 -1
- package/dist/repl-new.d.ts +0 -62
- package/dist/repl-new.d.ts.map +0 -1
- package/dist/skills.d.ts.map +0 -1
- package/dist/skills.js +0 -233
- package/dist/tui/autocomplete/path-provider.d.ts +0 -21
- package/dist/tui/autocomplete/path-provider.d.ts.map +0 -1
- package/dist/tui/autocomplete/path-provider.js +0 -164
- package/dist/version.d.ts.map +0 -1
- /package/dist/{dedent.d.ts → utils/dedent.d.ts} +0 -0
- /package/dist/{dedent.js → utils/dedent.js} +0 -0
- /package/dist/{formatting.d.ts → utils/formatting.d.ts} +0 -0
- /package/dist/{logger.d.ts → utils/logger.d.ts} +0 -0
- /package/dist/{parsing.d.ts → utils/parsing.d.ts} +0 -0
- /package/dist/{parsing.js → utils/parsing.js} +0 -0
- /package/dist/{version.d.ts → utils/version.d.ts} +0 -0
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
export function replaceArgumentPlaceholders(content, args) {
|
|
4
|
-
const allArguments = args.join(" ");
|
|
5
|
-
let replacementsMade = false;
|
|
6
|
-
let result = content;
|
|
7
|
-
for (let i = 0; i < args.length; i++) {
|
|
8
|
-
const placeholder = `$${i + 1}`;
|
|
9
|
-
if (result.includes(placeholder)) {
|
|
10
|
-
result = result.replaceAll(placeholder, args[i]);
|
|
11
|
-
replacementsMade = true;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
if (result.includes("$ARGUMENTS")) {
|
|
15
|
-
result = result.replaceAll("$ARGUMENTS", allArguments);
|
|
16
|
-
replacementsMade = true;
|
|
17
|
-
}
|
|
18
|
-
if (result.includes("{{INPUT}}")) {
|
|
19
|
-
result = result.replaceAll("{{INPUT}}", allArguments);
|
|
20
|
-
replacementsMade = true;
|
|
21
|
-
}
|
|
22
|
-
if (!replacementsMade && allArguments.trim().length > 0) {
|
|
23
|
-
result += `\n\n${allArguments}`;
|
|
24
|
-
}
|
|
25
|
-
return result;
|
|
26
|
-
}
|
|
27
|
-
export function parsePromptFile(content) {
|
|
28
|
-
const frontMatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---\s*(?:\n([\s\S]*))?$/);
|
|
29
|
-
if (!frontMatterMatch) {
|
|
30
|
-
return {
|
|
31
|
-
content,
|
|
32
|
-
metadata: {
|
|
33
|
-
description: content.split("\n")[0].trim().slice(0, 50) +
|
|
34
|
-
(content.split("\n")[0].trim().length > 50 ? "..." : ""),
|
|
35
|
-
enabled: true,
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
const yamlContent = frontMatterMatch[1];
|
|
40
|
-
const promptContent = frontMatterMatch[2] || "";
|
|
41
|
-
const defaultDescription = promptContent.split("\n")[0].trim().slice(0, 50) +
|
|
42
|
-
(promptContent.split("\n")[0].trim().length > 50 ? "..." : "");
|
|
43
|
-
let description = defaultDescription;
|
|
44
|
-
let enabled = true;
|
|
45
|
-
const descriptionMatch = yamlContent.match(/^description:\s*(.+)$/m);
|
|
46
|
-
if (descriptionMatch) {
|
|
47
|
-
description = descriptionMatch[1].trim();
|
|
48
|
-
}
|
|
49
|
-
const enabledMatch = yamlContent.match(/^enabled:\s*(true|false)$/im);
|
|
50
|
-
if (enabledMatch) {
|
|
51
|
-
enabled = enabledMatch[1].toLowerCase() === "true";
|
|
52
|
-
}
|
|
53
|
-
return {
|
|
54
|
-
content: promptContent,
|
|
55
|
-
metadata: {
|
|
56
|
-
description,
|
|
57
|
-
enabled,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
export async function findPrompt(promptName, config) {
|
|
62
|
-
const projectPromptDir = config.project.getPath("prompts");
|
|
63
|
-
const projectPath = path.join(projectPromptDir, `${promptName}.md`);
|
|
64
|
-
if (config.project.existsSync("prompts")) {
|
|
65
|
-
try {
|
|
66
|
-
const content = await readFile(projectPath, "utf8");
|
|
67
|
-
const parsed = parsePromptFile(content);
|
|
68
|
-
if (!parsed.metadata.enabled) {
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
return {
|
|
72
|
-
name: promptName,
|
|
73
|
-
description: parsed.metadata.description,
|
|
74
|
-
enabled: parsed.metadata.enabled,
|
|
75
|
-
path: projectPath,
|
|
76
|
-
type: "project",
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
if (error.code !== "ENOENT") {
|
|
81
|
-
throw error;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
const userPromptDir = config.app.getPath("prompts");
|
|
86
|
-
const userPath = path.join(userPromptDir, `${promptName}.md`);
|
|
87
|
-
try {
|
|
88
|
-
const content = await readFile(userPath, "utf8");
|
|
89
|
-
const parsed = parsePromptFile(content);
|
|
90
|
-
if (!parsed.metadata.enabled) {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
name: promptName,
|
|
95
|
-
description: parsed.metadata.description,
|
|
96
|
-
enabled: parsed.metadata.enabled,
|
|
97
|
-
path: userPath,
|
|
98
|
-
type: "user",
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
if (error.code !== "ENOENT") {
|
|
103
|
-
throw error;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return null;
|
|
107
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/reset/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,YAAY,GAAI,mDAG1B,cAAc,KAAG,WAsCnB,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { setTerminalTitle } from "../../terminal/control.js";
|
|
2
|
-
export const resetCommand = ({ modelManager, sessionManager: messageHistory, }) => {
|
|
3
|
-
return {
|
|
4
|
-
command: "/reset",
|
|
5
|
-
aliases: ["/new"],
|
|
6
|
-
description: "Saves the chat history and then resets it.",
|
|
7
|
-
getSubCommands: () => Promise.resolve([]),
|
|
8
|
-
async handle(_args, { tui, container, editor, }) {
|
|
9
|
-
if (!messageHistory.isEmpty()) {
|
|
10
|
-
await messageHistory.save();
|
|
11
|
-
messageHistory.create(modelManager.getModel("repl").modelId);
|
|
12
|
-
}
|
|
13
|
-
setTerminalTitle(`acai: ${process.cwd()}`);
|
|
14
|
-
container.clear();
|
|
15
|
-
editor.setText("");
|
|
16
|
-
// Reset footer state to clear usage/cost/steps/tools/time
|
|
17
|
-
const footer = tui.children.find((child) => child.constructor.name === "FooterComponent");
|
|
18
|
-
if (footer) {
|
|
19
|
-
footer.resetState();
|
|
20
|
-
}
|
|
21
|
-
tui.requestRender();
|
|
22
|
-
return "continue";
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../source/commands/reset/types.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/commands/save/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,WAAW,GAAI,qCAEzB,cAAc,KAAG,WAyBnB,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import style from "../../terminal/style.js";
|
|
2
|
-
import { Spacer, Text } from "../../tui/index.js";
|
|
3
|
-
export const saveCommand = ({ sessionManager: messageHistory, }) => {
|
|
4
|
-
return {
|
|
5
|
-
command: "/save",
|
|
6
|
-
description: "Saves the chat history.",
|
|
7
|
-
getSubCommands: () => Promise.resolve([]),
|
|
8
|
-
async handle(_args, { tui, container, editor, }) {
|
|
9
|
-
if (!messageHistory.isEmpty()) {
|
|
10
|
-
await messageHistory.save();
|
|
11
|
-
}
|
|
12
|
-
container.addChild(new Spacer(1));
|
|
13
|
-
container.addChild(new Text(style.green("Message history saved."), 0, 1));
|
|
14
|
-
tui.requestRender();
|
|
15
|
-
editor.setText("");
|
|
16
|
-
return "continue";
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
};
|
package/dist/config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../source/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,aAAa;;;;;8BAKI,MAAM,EAAE,GAAG,SAAS;;;;;;;;;4BAS3B,MAAM,EAAE;;;;CAIrB,CAAC;AAGX,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;iBA0CvB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAI3B,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAK1B,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOlD,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAOjC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/C,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;CAIrC;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;;YAOlB,WAAW;IAenB,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IAgBnC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAKpC,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBjD,eAAe,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IA4B/D,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7C,2BAA2B,IAAI,OAAO,CAAC,MAAM,CAAC;IAe9C,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1D,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC;IAY7C,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAcjD,cAAc;IActB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAe/D,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;CAKjB;AAGD,eAAO,MAAM,MAAM,eAAsB,CAAC"}
|
package/dist/dedent.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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/formatting.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../source/formatting.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;AAExD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,GACjB,MAAM,CAaR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,GACjB,MAAM,CAWR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIrE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,GACjB,MAAM,CAWR;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,MACG,CAAC;AAE7C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,MASjD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,GAAI,cAAc,MAAM,KAAG,MAuCrD,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAwC1C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,KAAG,MASvC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAGvD,CAAC"}
|
package/dist/logger.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../source/logger.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AAgDxB,eAAO,MAAM,MAAM,6BAIjB,CAAC"}
|
package/dist/mentions.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { ModelMetadata } from "./models/providers.ts";
|
|
2
|
-
import type { ContextItem } from "./prompts/manager.ts";
|
|
3
|
-
export declare class PromptError extends Error {
|
|
4
|
-
constructor(message: string, cause?: Error);
|
|
5
|
-
}
|
|
6
|
-
export declare function processPrompt(message: string, { baseDir, model, pasteStore, }: {
|
|
7
|
-
baseDir: string;
|
|
8
|
-
model: ModelMetadata;
|
|
9
|
-
pasteStore?: Map<number, string>;
|
|
10
|
-
}): Promise<{
|
|
11
|
-
message: string;
|
|
12
|
-
context: ContextItem[];
|
|
13
|
-
}>;
|
|
14
|
-
//# sourceMappingURL=mentions.d.ts.map
|
package/dist/mentions.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../source/mentions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAqBxD,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAI3C;AAwID,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,EACE,OAAO,EACP,KAAK,EACL,UAAU,GACX,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CAkFtD"}
|
package/dist/parsing.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parsing.d.ts","sourceRoot":"","sources":["../source/parsing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBtC,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,8CAE1D"}
|
package/dist/prompts.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { CompleteToolNames } from "./tools/index.ts";
|
|
2
|
-
type SystemPromptOptions = {
|
|
3
|
-
allowedDirs?: string[];
|
|
4
|
-
activeTools?: CompleteToolNames[];
|
|
5
|
-
includeRules?: boolean;
|
|
6
|
-
skillsEnabled?: boolean;
|
|
7
|
-
};
|
|
8
|
-
export declare function systemPrompt(options?: SystemPromptOptions): Promise<string>;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=prompts.d.ts.map
|
package/dist/prompts.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../source/prompts.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAwD1D,KAAK,mBAAmB,GAAG;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAIF,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,mBAmJ/D"}
|
package/dist/repl-new.d.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { Agent, AgentEvent, AgentState } from "./agent/index.ts";
|
|
2
|
-
import type { CommandManager } from "./commands/manager.ts";
|
|
3
|
-
import type { WorkspaceContext } from "./index.ts";
|
|
4
|
-
import type { ModelManager } from "./models/manager.ts";
|
|
5
|
-
import type { PromptManager } from "./prompts/manager.ts";
|
|
6
|
-
import type { SessionManager } from "./sessions/manager.ts";
|
|
7
|
-
import type { TokenCounter } from "./tokens/counter.ts";
|
|
8
|
-
import type { TokenTracker } from "./tokens/tracker.ts";
|
|
9
|
-
import type { CompleteToolSet } from "./tools/index.ts";
|
|
10
|
-
interface ReplOptions {
|
|
11
|
-
agent: Agent;
|
|
12
|
-
messageHistory: SessionManager;
|
|
13
|
-
promptManager: PromptManager;
|
|
14
|
-
modelManager: ModelManager;
|
|
15
|
-
tokenTracker: TokenTracker;
|
|
16
|
-
commands: CommandManager;
|
|
17
|
-
config: Record<PropertyKey, unknown>;
|
|
18
|
-
tokenCounter: TokenCounter;
|
|
19
|
-
promptHistory: string[];
|
|
20
|
-
workspace: WorkspaceContext;
|
|
21
|
-
tools?: CompleteToolSet;
|
|
22
|
-
}
|
|
23
|
-
export declare class NewRepl {
|
|
24
|
-
private options;
|
|
25
|
-
private tui;
|
|
26
|
-
private welcome;
|
|
27
|
-
private editor;
|
|
28
|
-
private chatContainer;
|
|
29
|
-
private statusContainer;
|
|
30
|
-
private footer;
|
|
31
|
-
private editorContainer;
|
|
32
|
-
private notification;
|
|
33
|
-
private isInitialized;
|
|
34
|
-
private onInputCallback?;
|
|
35
|
-
private loadingAnimation;
|
|
36
|
-
private onInterruptCallback?;
|
|
37
|
-
private onExitCallback?;
|
|
38
|
-
private lastSigintTime;
|
|
39
|
-
private exitNotificationTimer?;
|
|
40
|
-
private pendingTools;
|
|
41
|
-
private tools?;
|
|
42
|
-
private streamingComponent;
|
|
43
|
-
private thinkingBlockComponent;
|
|
44
|
-
constructor(options: ReplOptions);
|
|
45
|
-
init(): Promise<void>;
|
|
46
|
-
handle(event: AgentEvent, state: AgentState): Promise<void>;
|
|
47
|
-
private addMessageToChat;
|
|
48
|
-
getUserInput(): Promise<string>;
|
|
49
|
-
clearEditor(): void;
|
|
50
|
-
setInterruptCallback(callback: () => void): void;
|
|
51
|
-
setExitCallback(callback: (sessionId: string) => void): void;
|
|
52
|
-
rerender(): Promise<void>;
|
|
53
|
-
private reconstructSession;
|
|
54
|
-
private extractUserMessageText;
|
|
55
|
-
private renderAssistantMessage;
|
|
56
|
-
private extractToolCallsFromAssistant;
|
|
57
|
-
private createToolEvents;
|
|
58
|
-
private handleCtrlC;
|
|
59
|
-
stop(showExitMessage?: boolean): void;
|
|
60
|
-
}
|
|
61
|
-
export {};
|
|
62
|
-
//# sourceMappingURL=repl-new.d.ts.map
|
package/dist/repl-new.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repl-new.d.ts","sourceRoot":"","sources":["../source/repl-new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,UAAU,EACV,UAAU,EAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAkBxD,UAAU,WAAW;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,cAAc,CAAC,CAA8B;IACrD,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAiB;IAC/C,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,KAAK,CAAC,CAAkB;IAGhC,OAAO,CAAC,kBAAkB,CAA0C;IAGpE,OAAO,CAAC,sBAAsB,CAAuC;gBAEzD,OAAO,EAAE,WAAW;IAoC1B,IAAI;IAoJJ,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU;IAqKjD,OAAO,CAAC,gBAAgB;IAWlB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IASrC,WAAW,IAAI,IAAI;IAKnB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIhD,eAAe,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAItD,QAAQ;IAed,OAAO,CAAC,kBAAkB;IA6E1B,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,sBAAsB;IAmC9B,OAAO,CAAC,6BAA6B;IAwDrC,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,WAAW;IAwCnB,IAAI,CAAC,eAAe,UAAQ,GAAG,IAAI;CAoBpC"}
|
package/dist/skills.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../source/skills.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAwOD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,MAAM,SAAK,GACV,OAAO,CAAC,KAAK,EAAE,CAAC,CASlB;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAyDnD;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAkC7D"}
|
package/dist/skills.js
DELETED
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { readdir, readFile, stat } from "node:fs/promises";
|
|
2
|
-
import { homedir } from "node:os";
|
|
3
|
-
import { basename, dirname, join, resolve } from "node:path";
|
|
4
|
-
import { logger } from "./logger.js";
|
|
5
|
-
import { parseFrontMatter } from "./utils/yaml.js";
|
|
6
|
-
const CONFIG_DIR_NAME = ".acai";
|
|
7
|
-
// Validation functions
|
|
8
|
-
function validateSkillName(name, directoryName) {
|
|
9
|
-
// Check required field
|
|
10
|
-
if (!name) {
|
|
11
|
-
return { valid: false, error: "Name field is required" };
|
|
12
|
-
}
|
|
13
|
-
// Check length (1-64 characters)
|
|
14
|
-
if (name.length < 1 || name.length > 64) {
|
|
15
|
-
return { valid: false, error: "Name must be 1-64 characters long" };
|
|
16
|
-
}
|
|
17
|
-
// Check allowed characters (lowercase letters, numbers, hyphens)
|
|
18
|
-
if (!/^[a-z0-9-]+$/.test(name)) {
|
|
19
|
-
return {
|
|
20
|
-
valid: false,
|
|
21
|
-
error: "Name can only contain lowercase letters, numbers, and hyphens",
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
// Check no leading or trailing hyphens
|
|
25
|
-
if (name.startsWith("-") || name.endsWith("-")) {
|
|
26
|
-
return { valid: false, error: "Name cannot start or end with a hyphen" };
|
|
27
|
-
}
|
|
28
|
-
// Check no consecutive hyphens
|
|
29
|
-
if (name.includes("--")) {
|
|
30
|
-
return { valid: false, error: "Name cannot contain consecutive hyphens" };
|
|
31
|
-
}
|
|
32
|
-
// Check matches directory name
|
|
33
|
-
if (name !== directoryName) {
|
|
34
|
-
return {
|
|
35
|
-
valid: false,
|
|
36
|
-
error: `Name "${name}" must match directory name "${directoryName}"`,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
return { valid: true };
|
|
40
|
-
}
|
|
41
|
-
function validateSkillDescription(description) {
|
|
42
|
-
// Check required field
|
|
43
|
-
if (!description) {
|
|
44
|
-
return { valid: false, error: "Description field is required" };
|
|
45
|
-
}
|
|
46
|
-
// Check length (1-1024 characters)
|
|
47
|
-
if (description.length < 1 || description.length > 1024) {
|
|
48
|
-
return {
|
|
49
|
-
valid: false,
|
|
50
|
-
error: "Description must be 1-1024 characters long",
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
return { valid: true };
|
|
54
|
-
}
|
|
55
|
-
function parseFrontmatter(content) {
|
|
56
|
-
const { data, content: body } = parseFrontMatter(content);
|
|
57
|
-
// Type cast and validate required fields
|
|
58
|
-
const name = data["name"];
|
|
59
|
-
const description = data["description"];
|
|
60
|
-
// Set default empty values for optional fields
|
|
61
|
-
const frontmatter = {
|
|
62
|
-
name: name || "",
|
|
63
|
-
description: description || "",
|
|
64
|
-
license: data["license"] || undefined,
|
|
65
|
-
compatibility: data["compatibility"] || undefined,
|
|
66
|
-
metadata: data["metadata"] || undefined,
|
|
67
|
-
"allowed-tools": data["allowed-tools"] || undefined,
|
|
68
|
-
};
|
|
69
|
-
return { frontmatter, body };
|
|
70
|
-
}
|
|
71
|
-
async function loadSkillsFromDirInternal(dir, source, mode, useColonPath, subdir = "") {
|
|
72
|
-
const skills = [];
|
|
73
|
-
const fullDir = join(dir, subdir);
|
|
74
|
-
try {
|
|
75
|
-
const entries = await readdir(fullDir, { withFileTypes: true });
|
|
76
|
-
for (const entry of entries) {
|
|
77
|
-
// Skip hidden files and directories
|
|
78
|
-
if (entry.name.startsWith(".")) {
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
const entryPath = join(fullDir, entry.name);
|
|
82
|
-
// Skip symbolic links to avoid infinite recursion
|
|
83
|
-
try {
|
|
84
|
-
const stats = await stat(entryPath);
|
|
85
|
-
if (stats.isSymbolicLink()) {
|
|
86
|
-
continue;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
// If we can't stat, skip it
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
if (entry.isDirectory()) {
|
|
94
|
-
if (mode === "recursive") {
|
|
95
|
-
// Recursively scan subdirectories
|
|
96
|
-
const newSubdir = subdir ? join(subdir, entry.name) : entry.name;
|
|
97
|
-
const subSkills = await loadSkillsFromDirInternal(dir, source, mode, useColonPath, newSubdir);
|
|
98
|
-
skills.push(...subSkills);
|
|
99
|
-
}
|
|
100
|
-
else if (mode === "claude") {
|
|
101
|
-
// Claude mode: only check immediate subdirectories for SKILL.md
|
|
102
|
-
const skillPath = join(entryPath, "SKILL.md");
|
|
103
|
-
try {
|
|
104
|
-
const content = await readFile(skillPath, "utf8");
|
|
105
|
-
const { frontmatter } = parseFrontmatter(content);
|
|
106
|
-
// Validate required fields
|
|
107
|
-
const nameValidation = validateSkillName(frontmatter.name, entry.name);
|
|
108
|
-
if (!nameValidation.valid) {
|
|
109
|
-
logger.warn(`Invalid skill name in ${skillPath}: ${nameValidation.error}`);
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
const descriptionValidation = validateSkillDescription(frontmatter.description);
|
|
113
|
-
if (!descriptionValidation.valid) {
|
|
114
|
-
logger.warn(`Invalid skill description in ${skillPath}: ${descriptionValidation.error}`);
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
skills.push({
|
|
118
|
-
name: frontmatter.name,
|
|
119
|
-
description: frontmatter.description,
|
|
120
|
-
filePath: skillPath,
|
|
121
|
-
baseDir: entryPath,
|
|
122
|
-
source,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
logger.warn(error, `Failed to load skill from ${skillPath}:`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
else if (entry.isFile() &&
|
|
131
|
-
entry.name === "SKILL.md" &&
|
|
132
|
-
mode === "recursive") {
|
|
133
|
-
// Found a SKILL.md file in recursive mode
|
|
134
|
-
try {
|
|
135
|
-
const content = await readFile(entryPath, "utf8");
|
|
136
|
-
const { frontmatter } = parseFrontmatter(content);
|
|
137
|
-
// Validate required fields
|
|
138
|
-
const nameValidation = validateSkillName(frontmatter.name, basename(dirname(entryPath)));
|
|
139
|
-
if (!nameValidation.valid) {
|
|
140
|
-
logger.warn(`Invalid skill name in ${entryPath}: ${nameValidation.error}`);
|
|
141
|
-
continue;
|
|
142
|
-
}
|
|
143
|
-
const descriptionValidation = validateSkillDescription(frontmatter.description);
|
|
144
|
-
if (!descriptionValidation.valid) {
|
|
145
|
-
logger.warn(`Invalid skill description in ${entryPath}: ${descriptionValidation.error}`);
|
|
146
|
-
continue;
|
|
147
|
-
}
|
|
148
|
-
// Base directory is the directory containing the SKILL.md file
|
|
149
|
-
const baseDir = subdir ? join(dir, subdir) : dir;
|
|
150
|
-
skills.push({
|
|
151
|
-
name: frontmatter.name,
|
|
152
|
-
description: frontmatter.description,
|
|
153
|
-
filePath: entryPath,
|
|
154
|
-
baseDir,
|
|
155
|
-
source,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
logger.warn(error, `Failed to load skill from ${entryPath}:`);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
catch (error) {
|
|
165
|
-
// Directory doesn't exist or can't be read
|
|
166
|
-
if (error.code !== "ENOENT") {
|
|
167
|
-
logger.error(error, `Error reading skills directory ${fullDir}:`);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return skills;
|
|
171
|
-
}
|
|
172
|
-
export async function loadSkillsFromDir(options, subdir = "") {
|
|
173
|
-
const { dir, source, useColonPath = false } = options;
|
|
174
|
-
return await loadSkillsFromDirInternal(dir, source, "recursive", useColonPath, subdir);
|
|
175
|
-
}
|
|
176
|
-
export async function loadSkills() {
|
|
177
|
-
const skillMap = new Map();
|
|
178
|
-
// Codex: recursive, simple directory name
|
|
179
|
-
const codexUserDir = join(homedir(), ".codex", "skills");
|
|
180
|
-
for (const skill of await loadSkillsFromDirInternal(codexUserDir, "codex-user", "recursive", false)) {
|
|
181
|
-
skillMap.set(skill.name, skill);
|
|
182
|
-
}
|
|
183
|
-
// Claude: single level only
|
|
184
|
-
const claudeUserDir = join(homedir(), ".claude", "skills");
|
|
185
|
-
for (const skill of await loadSkillsFromDirInternal(claudeUserDir, "claude-user", "claude", false)) {
|
|
186
|
-
skillMap.set(skill.name, skill);
|
|
187
|
-
}
|
|
188
|
-
const claudeProjectDir = resolve(process.cwd(), ".claude", "skills");
|
|
189
|
-
for (const skill of await loadSkillsFromDirInternal(claudeProjectDir, "claude-project", "claude", false)) {
|
|
190
|
-
skillMap.set(skill.name, skill);
|
|
191
|
-
}
|
|
192
|
-
// acai: recursive, colon-separated path names
|
|
193
|
-
const globalSkillsDir = join(homedir(), CONFIG_DIR_NAME, "skills");
|
|
194
|
-
for (const skill of await loadSkillsFromDirInternal(globalSkillsDir, "user", "recursive", true)) {
|
|
195
|
-
skillMap.set(skill.name, skill);
|
|
196
|
-
}
|
|
197
|
-
const projectSkillsDir = resolve(process.cwd(), CONFIG_DIR_NAME, "skills");
|
|
198
|
-
for (const skill of await loadSkillsFromDirInternal(projectSkillsDir, "project", "recursive", true)) {
|
|
199
|
-
skillMap.set(skill.name, skill);
|
|
200
|
-
}
|
|
201
|
-
return Array.from(skillMap.values());
|
|
202
|
-
}
|
|
203
|
-
export function formatSkillsForPrompt(skills) {
|
|
204
|
-
if (skills.length === 0) {
|
|
205
|
-
return "";
|
|
206
|
-
}
|
|
207
|
-
const lines = [
|
|
208
|
-
"\n\n## Skills",
|
|
209
|
-
"",
|
|
210
|
-
"<skills_instructions>",
|
|
211
|
-
"When users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.",
|
|
212
|
-
"Use the readFile tool to load a skill's file when the task matches its description.",
|
|
213
|
-
"Skills may contain {baseDir} placeholders - replace them with the skill's base directory path.",
|
|
214
|
-
"</skills_instructions>",
|
|
215
|
-
"",
|
|
216
|
-
"<available_skills>",
|
|
217
|
-
];
|
|
218
|
-
for (const skill of skills) {
|
|
219
|
-
lines.push("<skill>");
|
|
220
|
-
lines.push("<name>");
|
|
221
|
-
lines.push(skill.name);
|
|
222
|
-
lines.push("</name>");
|
|
223
|
-
lines.push("<description>");
|
|
224
|
-
lines.push(skill.description);
|
|
225
|
-
lines.push("</description>");
|
|
226
|
-
lines.push("<location>");
|
|
227
|
-
lines.push(skill.filePath);
|
|
228
|
-
lines.push("</location>");
|
|
229
|
-
lines.push("</skill>");
|
|
230
|
-
}
|
|
231
|
-
lines.push("</available_skills>");
|
|
232
|
-
return lines.join("\n");
|
|
233
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { AutocompleteItem, AutocompleteProvider } from "./base-provider.ts";
|
|
2
|
-
export declare class PathProvider implements AutocompleteProvider {
|
|
3
|
-
protected allowedDirs: string[];
|
|
4
|
-
constructor(allowedDirs?: string[]);
|
|
5
|
-
getSuggestions(lines: string[], cursorLine: number, cursorCol: number): Promise<{
|
|
6
|
-
items: AutocompleteItem[];
|
|
7
|
-
prefix: string;
|
|
8
|
-
} | null>;
|
|
9
|
-
applyCompletion(lines: string[], cursorLine: number, cursorCol: number, item: AutocompleteItem, prefix: string): {
|
|
10
|
-
lines: string[];
|
|
11
|
-
cursorLine: number;
|
|
12
|
-
cursorCol: number;
|
|
13
|
-
};
|
|
14
|
-
getForceFileSuggestions(lines: string[], cursorLine: number, cursorCol: number): Promise<{
|
|
15
|
-
items: AutocompleteItem[];
|
|
16
|
-
prefix: string;
|
|
17
|
-
} | null>;
|
|
18
|
-
shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean;
|
|
19
|
-
protected getFileSuggestions(prefix: string): Promise<AutocompleteItem[]>;
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=path-provider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"path-provider.d.ts","sourceRoot":"","sources":["../../../source/tui/autocomplete/path-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAQ5B,qBAAa,YAAa,YAAW,oBAAoB;IACvD,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;gBAEpB,WAAW,GAAE,MAAM,EAAoB;IAI7C,cAAc,CAClB,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAoBhE,eAAe,CACb,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,MAAM,GACb;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAkBvD,uBAAuB,CAC3B,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAoBhE,2BAA2B,CACzB,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO;cAaM,kBAAkB,CAChC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAgH/B"}
|