@travisennis/acai 0.0.11 → 0.0.13
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 +5 -5
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +2 -5
- package/dist/commands/history/types.d.ts +3 -2
- package/dist/commands/history/types.d.ts.map +1 -1
- package/dist/commands/init-project/utils.d.ts +0 -1
- package/dist/commands/init-project/utils.d.ts.map +1 -1
- package/dist/commands/init-project/utils.js +1 -12
- package/dist/commands/manager.d.ts.map +1 -1
- package/dist/commands/manager.js +6 -19
- package/dist/commands/resources/index.d.ts.map +1 -1
- package/dist/commands/resources/index.js +4 -1
- package/dist/commands/session/index.d.ts.map +1 -1
- package/dist/commands/session/index.js +6 -0
- package/dist/commands/session/types.d.ts +1 -0
- package/dist/commands/session/types.d.ts.map +1 -1
- package/dist/commands/share/html-renderer.d.ts.map +1 -1
- package/dist/commands/share/html-renderer.js +54 -48
- package/dist/commands/tools/index.d.ts +3 -0
- package/dist/commands/tools/index.d.ts.map +1 -0
- package/dist/commands/tools/index.js +191 -0
- package/dist/commands/tools/templates.d.ts +6 -0
- package/dist/commands/tools/templates.d.ts.map +1 -0
- package/dist/commands/tools/templates.js +97 -0
- package/dist/config/index.d.ts +5 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +42 -6
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -68
- package/dist/models/anthropic-provider.d.ts +1 -1
- package/dist/models/deepseek-provider.d.ts +3 -3
- package/dist/models/deepseek-provider.js +17 -17
- package/dist/models/google-provider.d.ts +2 -4
- package/dist/models/google-provider.d.ts.map +1 -1
- package/dist/models/google-provider.js +2 -17
- package/dist/models/groq-provider.d.ts +2 -4
- package/dist/models/groq-provider.d.ts.map +1 -1
- package/dist/models/groq-provider.js +3 -21
- package/dist/models/manager.d.ts +1 -10
- package/dist/models/manager.d.ts.map +1 -1
- package/dist/models/manager.js +2 -2
- package/dist/models/opencode-go-provider.d.ts +11 -1
- package/dist/models/opencode-go-provider.d.ts.map +1 -1
- package/dist/models/opencode-go-provider.js +130 -0
- package/dist/models/opencode-zen-provider.d.ts +3 -3
- package/dist/models/opencode-zen-provider.d.ts.map +1 -1
- package/dist/models/opencode-zen-provider.js +26 -32
- package/dist/models/openrouter-provider.d.ts +4 -15
- package/dist/models/openrouter-provider.d.ts.map +1 -1
- package/dist/models/openrouter-provider.js +26 -169
- package/dist/models/providers.d.ts +1 -1
- package/dist/models/providers.d.ts.map +1 -1
- package/dist/models/xai-provider.d.ts +1 -2
- package/dist/models/xai-provider.d.ts.map +1 -1
- package/dist/models/xai-provider.js +0 -13
- package/dist/prompts/manager.d.ts.map +1 -1
- package/dist/prompts/manager.js +5 -1
- package/dist/prompts/system-prompt.d.ts +1 -2
- package/dist/prompts/system-prompt.d.ts.map +1 -1
- package/dist/prompts/system-prompt.js +26 -15
- package/dist/repl/index.d.ts +28 -13
- package/dist/repl/index.d.ts.map +1 -1
- package/dist/repl/index.js +242 -305
- package/dist/skills/activated-tracker.d.ts +11 -0
- package/dist/skills/activated-tracker.d.ts.map +1 -0
- package/dist/skills/activated-tracker.js +16 -0
- package/dist/skills/index.d.ts +12 -2
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +127 -71
- package/dist/terminal/control.d.ts +1 -21
- package/dist/terminal/control.d.ts.map +1 -1
- package/dist/terminal/control.js +1 -32
- package/dist/terminal/formatting.d.ts +0 -33
- package/dist/terminal/formatting.d.ts.map +1 -1
- package/dist/terminal/formatting.js +0 -91
- package/dist/terminal/highlight/theme.d.ts +0 -37
- package/dist/terminal/highlight/theme.d.ts.map +1 -1
- package/dist/terminal/highlight/theme.js +1 -79
- package/dist/terminal/keys.d.ts +0 -97
- package/dist/terminal/keys.d.ts.map +1 -1
- package/dist/terminal/keys.js +0 -194
- package/dist/terminal/select-prompt.d.ts.map +1 -1
- package/dist/terminal/select-prompt.js +65 -51
- package/dist/terminal/style.d.ts +1 -1
- package/dist/terminal/style.d.ts.map +1 -1
- package/dist/terminal/supports-color.d.ts.map +1 -1
- package/dist/terminal/supports-color.js +38 -20
- package/dist/terminal/supports-hyperlinks.d.ts +3 -0
- package/dist/terminal/supports-hyperlinks.d.ts.map +1 -1
- package/dist/terminal/supports-hyperlinks.js +72 -31
- package/dist/terminal/table/layout-manager.d.ts +0 -20
- package/dist/terminal/table/layout-manager.d.ts.map +1 -1
- package/dist/terminal/table/layout-manager.js +68 -44
- package/dist/terminal/table/utils.d.ts +0 -1
- package/dist/terminal/table/utils.d.ts.map +1 -1
- package/dist/terminal/table/utils.js +2 -4
- package/dist/tools/apply-patch.d.ts +5 -3
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +154 -123
- package/dist/tools/bash.d.ts +4 -4
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +27 -13
- package/dist/tools/dynamic-tool-loader.d.ts +17 -3
- package/dist/tools/dynamic-tool-loader.d.ts.map +1 -1
- package/dist/tools/dynamic-tool-loader.js +360 -81
- package/dist/tools/edit-file.d.ts +2 -2
- package/dist/tools/index.d.ts +27 -151
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +16 -21
- package/dist/tools/read-file.d.ts +8 -8
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +32 -13
- package/dist/tools/save-file.d.ts +4 -4
- package/dist/tools/skill.d.ts +2 -1
- package/dist/tools/skill.d.ts.map +1 -1
- package/dist/tools/skill.js +64 -14
- package/dist/tools/types.d.ts +8 -2
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/web-fetch.d.ts +8 -12
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +86 -44
- package/dist/tools/web-search.d.ts +4 -8
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +41 -33
- package/dist/tui/autocomplete/utils.d.ts +0 -15
- package/dist/tui/autocomplete/utils.d.ts.map +1 -1
- package/dist/tui/autocomplete/utils.js +0 -85
- package/dist/tui/autocomplete.d.ts +1 -1
- package/dist/tui/autocomplete.d.ts.map +1 -1
- package/dist/tui/autocomplete.js +1 -1
- package/dist/tui/components/editor.d.ts +12 -0
- package/dist/tui/components/editor.d.ts.map +1 -1
- package/dist/tui/components/editor.js +181 -195
- package/dist/tui/components/footer.d.ts +0 -2
- package/dist/tui/components/footer.d.ts.map +1 -1
- package/dist/tui/components/footer.js +1 -17
- package/dist/tui/components/input.d.ts +4 -0
- package/dist/tui/components/input.d.ts.map +1 -1
- package/dist/tui/components/input.js +33 -31
- package/dist/tui/components/markdown.d.ts +30 -0
- package/dist/tui/components/markdown.d.ts.map +1 -1
- package/dist/tui/components/markdown.js +274 -242
- package/dist/tui/components/modal.d.ts.map +1 -1
- package/dist/tui/components/modal.js +11 -11
- package/dist/tui/components/select-list.d.ts +5 -0
- package/dist/tui/components/select-list.d.ts.map +1 -1
- package/dist/tui/components/select-list.js +69 -98
- package/dist/tui/components/table.d.ts +6 -0
- package/dist/tui/components/table.d.ts.map +1 -1
- package/dist/tui/components/table.js +61 -52
- package/dist/tui/index.d.ts +1 -8
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +0 -8
- package/dist/tui/tui.d.ts +9 -0
- package/dist/tui/tui.d.ts.map +1 -1
- package/dist/tui/tui.js +78 -48
- package/dist/tui/utils.d.ts +7 -0
- package/dist/tui/utils.d.ts.map +1 -1
- package/dist/tui/utils.js +117 -53
- package/dist/utils/bash.d.ts.map +1 -1
- package/dist/utils/bash.js +121 -104
- package/dist/utils/binary-output.d.ts +32 -0
- package/dist/utils/binary-output.d.ts.map +1 -0
- package/dist/utils/binary-output.js +127 -0
- package/dist/utils/command-protection.d.ts +3 -2
- package/dist/utils/command-protection.d.ts.map +1 -1
- package/dist/utils/command-protection.js +121 -29
- package/dist/utils/filesystem/operations.d.ts +0 -15
- package/dist/utils/filesystem/operations.d.ts.map +1 -1
- package/dist/utils/filesystem/operations.js +1 -38
- package/dist/utils/filesystem/security.d.ts.map +1 -1
- package/dist/utils/filesystem/security.js +22 -15
- package/dist/utils/filetype-detection.d.ts +0 -1
- package/dist/utils/filetype-detection.d.ts.map +1 -1
- package/dist/utils/filetype-detection.js +0 -12
- package/dist/utils/formatting.d.ts +0 -30
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +0 -44
- package/dist/utils/git.d.ts +4 -6
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +36 -46
- package/dist/utils/ignore.d.ts +1 -1
- package/dist/utils/ignore.d.ts.map +1 -1
- package/dist/utils/ignore.js +1 -1
- package/dist/utils/parsing.d.ts +1 -1
- package/dist/utils/parsing.d.ts.map +1 -1
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +77 -79
- package/dist/utils/yaml.d.ts +0 -1
- package/dist/utils/yaml.d.ts.map +1 -1
- package/dist/utils/yaml.js +80 -89
- package/dist/utils/zod.d.ts +0 -3
- package/dist/utils/zod.d.ts.map +1 -1
- package/dist/utils/zod.js +0 -7
- package/package.json +32 -29
- package/dist/agent/sub-agent.d.ts +0 -23
- package/dist/agent/sub-agent.d.ts.map +0 -1
- package/dist/agent/sub-agent.js +0 -109
- package/dist/commands/add-directory/index.d.ts +0 -3
- package/dist/commands/add-directory/index.d.ts.map +0 -1
- package/dist/commands/add-directory/index.js +0 -50
- package/dist/commands/add-directory/utils.d.ts +0 -3
- package/dist/commands/add-directory/utils.d.ts.map +0 -1
- package/dist/commands/add-directory/utils.js +0 -15
- package/dist/commands/clear/index.d.ts +0 -3
- package/dist/commands/clear/index.d.ts.map +0 -1
- package/dist/commands/clear/index.js +0 -13
- package/dist/commands/generate-rules/index.d.ts +0 -3
- package/dist/commands/generate-rules/index.d.ts.map +0 -1
- package/dist/commands/generate-rules/index.js +0 -206
- package/dist/commands/generate-rules/service.d.ts +0 -22
- package/dist/commands/generate-rules/service.d.ts.map +0 -1
- package/dist/commands/generate-rules/service.js +0 -103
- package/dist/commands/generate-rules/utils.d.ts +0 -5
- package/dist/commands/generate-rules/utils.d.ts.map +0 -1
- package/dist/commands/generate-rules/utils.js +0 -25
- package/dist/commands/handoff/index.d.ts +0 -3
- package/dist/commands/handoff/index.d.ts.map +0 -1
- package/dist/commands/handoff/index.js +0 -97
- package/dist/commands/handoff/utils.d.ts +0 -4
- package/dist/commands/handoff/utils.d.ts.map +0 -1
- package/dist/commands/handoff/utils.js +0 -123
- package/dist/commands/list-directories/index.d.ts +0 -3
- package/dist/commands/list-directories/index.d.ts.map +0 -1
- package/dist/commands/list-directories/index.js +0 -35
- package/dist/commands/pickup/index.d.ts +0 -3
- package/dist/commands/pickup/index.d.ts.map +0 -1
- package/dist/commands/pickup/index.js +0 -141
- package/dist/commands/pickup/types.d.ts +0 -6
- package/dist/commands/pickup/types.d.ts.map +0 -1
- package/dist/commands/pickup/types.js +0 -1
- package/dist/commands/pickup/utils.d.ts +0 -7
- package/dist/commands/pickup/utils.d.ts.map +0 -1
- package/dist/commands/pickup/utils.js +0 -56
- package/dist/commands/remove-directory/index.d.ts +0 -3
- package/dist/commands/remove-directory/index.d.ts.map +0 -1
- package/dist/commands/remove-directory/index.js +0 -55
- package/dist/commands/review/index.d.ts +0 -3
- package/dist/commands/review/index.d.ts.map +0 -1
- package/dist/commands/review/index.js +0 -12
- package/dist/commands/review/review-panel.d.ts +0 -3
- package/dist/commands/review/review-panel.d.ts.map +0 -1
- package/dist/commands/review/review-panel.js +0 -186
- package/dist/commands/review/utils.d.ts +0 -18
- package/dist/commands/review/utils.d.ts.map +0 -1
- package/dist/commands/review/utils.js +0 -146
- package/dist/commands/shell/index.d.ts +0 -3
- package/dist/commands/shell/index.d.ts.map +0 -1
- package/dist/commands/shell/index.js +0 -96
- package/dist/modes/manager.d.ts +0 -24
- package/dist/modes/manager.d.ts.map +0 -1
- package/dist/modes/manager.js +0 -77
- package/dist/modes/prompts.d.ts +0 -2
- package/dist/modes/prompts.d.ts.map +0 -1
- package/dist/modes/prompts.js +0 -142
- package/dist/subagents/index.d.ts +0 -16
- package/dist/subagents/index.d.ts.map +0 -1
- package/dist/subagents/index.js +0 -231
- package/dist/terminal/index.d.ts +0 -9
- package/dist/terminal/index.d.ts.map +0 -1
- package/dist/terminal/index.js +0 -8
- package/dist/tools/agent.d.ts +0 -27
- package/dist/tools/agent.d.ts.map +0 -1
- package/dist/tools/agent.js +0 -81
- package/dist/tools/directory-tree.d.ts +0 -28
- package/dist/tools/directory-tree.d.ts.map +0 -1
- package/dist/tools/directory-tree.js +0 -152
- package/dist/tools/glob.d.ts +0 -35
- package/dist/tools/glob.d.ts.map +0 -1
- package/dist/tools/glob.js +0 -159
- package/dist/tools/grep.d.ts +0 -100
- package/dist/tools/grep.d.ts.map +0 -1
- package/dist/tools/grep.js +0 -601
- package/dist/tools/ls.d.ts +0 -26
- package/dist/tools/ls.d.ts.map +0 -1
- package/dist/tools/ls.js +0 -82
- package/dist/tui/components/header.d.ts +0 -21
- package/dist/tui/components/header.d.ts.map +0 -1
- package/dist/tui/components/header.js +0 -63
- package/dist/utils/bash/parse.d.ts +0 -19
- package/dist/utils/bash/parse.d.ts.map +0 -1
- package/dist/utils/bash/parse.js +0 -223
- package/dist/utils/bash/quote.d.ts +0 -6
- package/dist/utils/bash/quote.d.ts.map +0 -1
- package/dist/utils/bash/quote.js +0 -23
- package/dist/utils/generators.d.ts +0 -3
- package/dist/utils/generators.d.ts.map +0 -1
- package/dist/utils/generators.js +0 -25
- package/dist/utils/glob.d.ts +0 -52
- package/dist/utils/glob.d.ts.map +0 -1
- package/dist/utils/glob.js +0 -376
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function nodeTemplate(name: string, description: string): string;
|
|
2
|
+
export declare function bashTemplate(name: string, description: string): string;
|
|
3
|
+
export declare function zshTemplate(name: string, description: string): string;
|
|
4
|
+
export declare function textSchemaTemplate(name: string, description: string): string;
|
|
5
|
+
export declare function textCompanionTemplate(name: string): string;
|
|
6
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../source/commands/tools/templates.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA2BtE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAuBtE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAuBrE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAe1D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export function nodeTemplate(name, description) {
|
|
2
|
+
return `#!/usr/bin/env node
|
|
3
|
+
|
|
4
|
+
const TOOL_ACTION = process.env.TOOL_ACTION;
|
|
5
|
+
|
|
6
|
+
if (TOOL_ACTION === 'describe') {
|
|
7
|
+
console.log(JSON.stringify({
|
|
8
|
+
name: '${name}',
|
|
9
|
+
description: '${description}',
|
|
10
|
+
parameters: [],
|
|
11
|
+
needsApproval: false,
|
|
12
|
+
}, null, 2));
|
|
13
|
+
process.exit(0);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (TOOL_ACTION === 'execute') {
|
|
17
|
+
let data = '';
|
|
18
|
+
process.stdin.setEncoding('utf8');
|
|
19
|
+
process.stdin.on('data', (chunk) => { data += chunk; });
|
|
20
|
+
process.stdin.on('end', () => {
|
|
21
|
+
const params = JSON.parse(data);
|
|
22
|
+
// Your tool logic here
|
|
23
|
+
console.log('Hello from ${name}');
|
|
24
|
+
process.exit(0);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
}
|
|
29
|
+
export function bashTemplate(name, description) {
|
|
30
|
+
return `#!/bin/bash
|
|
31
|
+
|
|
32
|
+
action="\${TOOL_ACTION}"
|
|
33
|
+
|
|
34
|
+
if [ "$action" = "describe" ]; then
|
|
35
|
+
cat << 'EOF'
|
|
36
|
+
name: ${name}
|
|
37
|
+
description: ${description}
|
|
38
|
+
EOF
|
|
39
|
+
exit 0
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if [ "$action" = "execute" ]; then
|
|
43
|
+
# Read key-value params from stdin
|
|
44
|
+
while IFS='=' read -r key value; do
|
|
45
|
+
declare "$key"="$value"
|
|
46
|
+
done
|
|
47
|
+
# Your tool logic here
|
|
48
|
+
echo "Hello from ${name}"
|
|
49
|
+
exit 0
|
|
50
|
+
fi
|
|
51
|
+
`;
|
|
52
|
+
}
|
|
53
|
+
export function zshTemplate(name, description) {
|
|
54
|
+
return `#!/bin/zsh
|
|
55
|
+
|
|
56
|
+
action="\${TOOL_ACTION}"
|
|
57
|
+
|
|
58
|
+
if [ "$action" = "describe" ]; then
|
|
59
|
+
cat << 'EOF'
|
|
60
|
+
name: ${name}
|
|
61
|
+
description: ${description}
|
|
62
|
+
EOF
|
|
63
|
+
exit 0
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
if [ "$action" = "execute" ]; then
|
|
67
|
+
# Read key-value params from stdin
|
|
68
|
+
while IFS='=' read -r key value; do
|
|
69
|
+
declare "$key"="$value"
|
|
70
|
+
done
|
|
71
|
+
# Your tool logic here
|
|
72
|
+
echo "Hello from ${name}"
|
|
73
|
+
exit 0
|
|
74
|
+
fi
|
|
75
|
+
`;
|
|
76
|
+
}
|
|
77
|
+
export function textSchemaTemplate(name, description) {
|
|
78
|
+
return `name: ${name}
|
|
79
|
+
description: ${description}
|
|
80
|
+
`;
|
|
81
|
+
}
|
|
82
|
+
export function textCompanionTemplate(name) {
|
|
83
|
+
return `#!/bin/bash
|
|
84
|
+
# Companion script for ${name}.tool
|
|
85
|
+
# Modify this script to implement your tool logic
|
|
86
|
+
|
|
87
|
+
action="\${TOOL_ACTION}"
|
|
88
|
+
|
|
89
|
+
if [ "$action" = "execute" ]; then
|
|
90
|
+
while IFS='=' read -r key value; do
|
|
91
|
+
declare "$key"="$value"
|
|
92
|
+
done
|
|
93
|
+
echo "Hello from ${name}"
|
|
94
|
+
exit 0
|
|
95
|
+
fi
|
|
96
|
+
`;
|
|
97
|
+
}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
export declare function parseSkillsPath(skillsPath: string): string[];
|
|
2
3
|
export declare const defaultConfig: {
|
|
3
4
|
readonly loop: {
|
|
4
5
|
readonly maxIterations: 200;
|
|
@@ -16,11 +17,12 @@ export declare const defaultConfig: {
|
|
|
16
17
|
readonly readOnlyFiles: string[];
|
|
17
18
|
readonly skills: {
|
|
18
19
|
readonly enabled: true;
|
|
20
|
+
readonly path: "";
|
|
19
21
|
};
|
|
20
22
|
readonly devtools: {
|
|
21
23
|
readonly enabled: false;
|
|
22
24
|
};
|
|
23
|
-
readonly
|
|
25
|
+
readonly allowedDirs: string[];
|
|
24
26
|
readonly env: Record<string, string>;
|
|
25
27
|
};
|
|
26
28
|
declare const ConfigSchema: z.ZodObject<{
|
|
@@ -43,8 +45,9 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
43
45
|
readOnlyFiles: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
44
46
|
skills: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
45
47
|
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
48
|
+
path: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
46
49
|
}, z.core.$strip>>>;
|
|
47
|
-
|
|
50
|
+
allowedDirs: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
48
51
|
devtools: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
49
52
|
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
50
53
|
}, z.core.$strip>>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../source/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAa5D;AAED,eAAO,MAAM,aAAa;;;;;8BAKI,MAAM,EAAE,GAAG,SAAS;;;;;;;;;4BAS3B,MAAM,EAAE;;;;;;;;0BAQV,MAAM,EAAE;kBAChB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAGX,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsDhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,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;IAChC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,cAAc,CAAS;;YAOjB,WAAW;IAcnB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA6C5B,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;IAgC/D,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7C,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAYvC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAc3C,cAAc;IActB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAexD,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/config/index.js
CHANGED
|
@@ -4,6 +4,22 @@ import { homedir } from "node:os";
|
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { jsonParser } from "../utils/parsing.js";
|
|
7
|
+
const PATH_SEPARATOR = process.platform === "win32" ? ";" : ":";
|
|
8
|
+
export function parseSkillsPath(skillsPath) {
|
|
9
|
+
if (!skillsPath)
|
|
10
|
+
return [];
|
|
11
|
+
const paths = skillsPath
|
|
12
|
+
.split(PATH_SEPARATOR)
|
|
13
|
+
.map((p) => p.trim())
|
|
14
|
+
.filter((p) => p.length > 0)
|
|
15
|
+
.map((p) => {
|
|
16
|
+
if (p.startsWith("~")) {
|
|
17
|
+
return path.join(homedir(), p.slice(1));
|
|
18
|
+
}
|
|
19
|
+
return path.resolve(p);
|
|
20
|
+
});
|
|
21
|
+
return [...new Set(paths)];
|
|
22
|
+
}
|
|
7
23
|
export const defaultConfig = {
|
|
8
24
|
loop: {
|
|
9
25
|
maxIterations: 200,
|
|
@@ -21,11 +37,12 @@ export const defaultConfig = {
|
|
|
21
37
|
readOnlyFiles: [],
|
|
22
38
|
skills: {
|
|
23
39
|
enabled: true,
|
|
40
|
+
path: "",
|
|
24
41
|
},
|
|
25
42
|
devtools: {
|
|
26
43
|
enabled: false,
|
|
27
44
|
},
|
|
28
|
-
|
|
45
|
+
allowedDirs: [],
|
|
29
46
|
env: {},
|
|
30
47
|
};
|
|
31
48
|
// Type definitions
|
|
@@ -68,13 +85,14 @@ const ConfigSchema = z.object({
|
|
|
68
85
|
skills: z
|
|
69
86
|
.object({
|
|
70
87
|
enabled: z.boolean().optional().default(defaultConfig.skills.enabled),
|
|
88
|
+
path: z.string().optional().default(defaultConfig.skills.path),
|
|
71
89
|
})
|
|
72
90
|
.optional()
|
|
73
91
|
.default(defaultConfig.skills),
|
|
74
|
-
|
|
75
|
-
.
|
|
92
|
+
allowedDirs: z
|
|
93
|
+
.array(z.string())
|
|
76
94
|
.optional()
|
|
77
|
-
.default(defaultConfig.
|
|
95
|
+
.default(defaultConfig.allowedDirs),
|
|
78
96
|
devtools: z
|
|
79
97
|
.object({
|
|
80
98
|
enabled: z.boolean().optional().default(defaultConfig.devtools.enabled),
|
|
@@ -136,7 +154,8 @@ export class ConfigManager {
|
|
|
136
154
|
return jsonParser(ConfigSchema).parse(data);
|
|
137
155
|
}
|
|
138
156
|
catch (error) {
|
|
139
|
-
|
|
157
|
+
const code = error.code;
|
|
158
|
+
if (code === "ENOENT" || code === "EPERM" || code === "EACCES") {
|
|
140
159
|
return {};
|
|
141
160
|
}
|
|
142
161
|
throw error;
|
|
@@ -156,10 +175,23 @@ export class ConfigManager {
|
|
|
156
175
|
...appConfig.env,
|
|
157
176
|
...projectConfig.env,
|
|
158
177
|
};
|
|
178
|
+
const mergedAllowedDirs = [
|
|
179
|
+
...(appConfig.allowedDirs ?? []),
|
|
180
|
+
...(projectConfig.allowedDirs ?? []),
|
|
181
|
+
];
|
|
182
|
+
const mergedSkills = {
|
|
183
|
+
...appConfig.skills,
|
|
184
|
+
...projectConfig.skills,
|
|
185
|
+
path: [appConfig.skills?.path, projectConfig.skills?.path]
|
|
186
|
+
.filter((p) => !!p)
|
|
187
|
+
.join(PATH_SEPARATOR),
|
|
188
|
+
};
|
|
159
189
|
const mergedConfig = {
|
|
160
190
|
...appConfig,
|
|
161
191
|
...projectConfig,
|
|
162
192
|
env: mergedEnv,
|
|
193
|
+
allowedDirs: mergedAllowedDirs,
|
|
194
|
+
skills: mergedSkills,
|
|
163
195
|
};
|
|
164
196
|
const result = ConfigSchema.parse(mergedConfig);
|
|
165
197
|
this.cachedConfig = result;
|
|
@@ -184,7 +216,7 @@ export class ConfigManager {
|
|
|
184
216
|
}
|
|
185
217
|
}
|
|
186
218
|
if (!configData.skills) {
|
|
187
|
-
configData.skills = { enabled: true };
|
|
219
|
+
configData.skills = { enabled: true, path: "" };
|
|
188
220
|
}
|
|
189
221
|
configData.skills.enabled = enabled;
|
|
190
222
|
await this.app.ensurePath();
|
|
@@ -197,6 +229,10 @@ export class ConfigManager {
|
|
|
197
229
|
absolute: path.join(this.app.getPath(), "AGENTS.md"),
|
|
198
230
|
relative: "~/.acai/AGENTS.md",
|
|
199
231
|
},
|
|
232
|
+
{
|
|
233
|
+
absolute: path.join(homedir(), ".config", "AGENTS.md"),
|
|
234
|
+
relative: "~/.config/AGENTS.md",
|
|
235
|
+
},
|
|
200
236
|
{
|
|
201
237
|
absolute: path.join(process.cwd(), "AGENTS.md"),
|
|
202
238
|
relative: "./AGENTS.md",
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { SessionManager } from "./sessions/manager.ts";
|
|
3
|
+
import { setTerminalTitle } from "./terminal/control.ts";
|
|
4
|
+
import { select } from "./terminal/select-prompt.ts";
|
|
2
5
|
export interface WorkspaceContext {
|
|
3
6
|
primaryDir: string;
|
|
4
7
|
allowedDirs: string[];
|
|
@@ -22,5 +25,16 @@ declare const flags: {
|
|
|
22
25
|
*/
|
|
23
26
|
export declare function handleError(error: Error): void;
|
|
24
27
|
export type Flags = typeof flags;
|
|
28
|
+
export declare function handleConversationHistory(sessionManager: SessionManager, sessionsDir: string, _hasContinueOrResume: boolean, resumeSessionId: string | undefined, continueFlag?: boolean, resumeFlag?: boolean, selectFn?: typeof select, setTitleFn?: typeof setTerminalTitle): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Expands a leading tilde in a path to the user's home directory.
|
|
31
|
+
* If the path does not start with ~, it is returned unchanged.
|
|
32
|
+
*/
|
|
33
|
+
export declare function expandTildePath(dir: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Resolves a path (expanding tilde if present) and adds it to a list
|
|
36
|
+
* of directories if it is not already present.
|
|
37
|
+
*/
|
|
38
|
+
export declare function addUniqueDir(dir: string, dirs: string[]): void;
|
|
25
39
|
export {};
|
|
26
40
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":";AAuBA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAYrD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAGD,wBAAgB,sBAAsB,CACpC,UAAU,GAAE,MAAM,EAAO,GACxB,gBAAgB,CAsBlB;AAoDD,QAAA,MAAM,KAAK;;;;;;;;;;CAAyB,CAAC;AAMrC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE9C;AAED,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC;AAyOjC,wBAAsB,yBAAyB,CAC7C,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,MAAM,EACnB,oBAAoB,EAAE,OAAO,EAC7B,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,YAAY,UAAiB,EAC7B,UAAU,UAAe,EACzB,QAAQ,gBAAS,EACjB,UAAU,0BAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAWf;AAgRD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAK9D"}
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import { Agent } from "./agent/index.js";
|
|
|
9
9
|
import { Cli } from "./cli/index.js";
|
|
10
10
|
import { readStdinWithLimits } from "./cli/stdin.js";
|
|
11
11
|
import { CommandManager } from "./commands/manager.js";
|
|
12
|
-
import { config } from "./config/index.js";
|
|
12
|
+
import { config, parseSkillsPath, } from "./config/index.js";
|
|
13
13
|
import { ModelManager } from "./models/manager.js";
|
|
14
14
|
import { isSupportedModel } from "./models/providers.js";
|
|
15
15
|
import { PromptManager } from "./prompts/manager.js";
|
|
@@ -22,7 +22,7 @@ import { setTerminalTitle } from "./terminal/control.js";
|
|
|
22
22
|
import { select } from "./terminal/select-prompt.js";
|
|
23
23
|
import { TokenCounter } from "./tokens/counter.js";
|
|
24
24
|
import { TokenTracker } from "./tokens/tracker.js";
|
|
25
|
-
import { initTools } from "./tools/index.js";
|
|
25
|
+
import { getActivatedSkillsTracker, initTools, } from "./tools/index.js";
|
|
26
26
|
import { logger } from "./utils/logger.js";
|
|
27
27
|
import { getPackageVersion } from "./utils/version.js";
|
|
28
28
|
// Create workspace context from CLI arguments
|
|
@@ -221,7 +221,7 @@ async function determineInitialPrompt() {
|
|
|
221
221
|
async function initializeModelManager(appDir) {
|
|
222
222
|
const chosenModel = isSupportedModel(flags.model)
|
|
223
223
|
? flags.model
|
|
224
|
-
: "opencode-go:
|
|
224
|
+
: "opencode-go:deepseek-v4-flash"; // DEFAULT MODEL
|
|
225
225
|
const projectConfig = await config.getConfig();
|
|
226
226
|
const devtoolsEnabled = projectConfig.devtools?.enabled ?? false;
|
|
227
227
|
const modelManager = new ModelManager({
|
|
@@ -232,10 +232,9 @@ async function initializeModelManager(appDir) {
|
|
|
232
232
|
modelManager.setModel("cli", chosenModel);
|
|
233
233
|
modelManager.setModel("title-conversation", chosenModel);
|
|
234
234
|
modelManager.setModel("conversation-summarizer", chosenModel);
|
|
235
|
-
modelManager.setModel("tool-repair", "openai:gpt-5.
|
|
235
|
+
modelManager.setModel("tool-repair", "openai:gpt-5.4-mini");
|
|
236
236
|
modelManager.setModel("conversation-analyzer", chosenModel);
|
|
237
237
|
modelManager.setModel("init-project", chosenModel);
|
|
238
|
-
modelManager.setModel("handoff-agent", chosenModel);
|
|
239
238
|
return modelManager;
|
|
240
239
|
}
|
|
241
240
|
async function initializeSessionManager(sessionsDir, modelManager, tokenTracker) {
|
|
@@ -254,69 +253,74 @@ async function initializeSessionManager(sessionsDir, modelManager, tokenTracker)
|
|
|
254
253
|
});
|
|
255
254
|
return sessionManager;
|
|
256
255
|
}
|
|
257
|
-
async function handleConversationHistory(sessionManager, sessionsDir, _hasContinueOrResume, resumeSessionId) {
|
|
258
|
-
if (
|
|
256
|
+
export async function handleConversationHistory(sessionManager, sessionsDir, _hasContinueOrResume, resumeSessionId, continueFlag = flags.continue, resumeFlag = flags.resume, selectFn = select, setTitleFn = setTerminalTitle) {
|
|
257
|
+
if (continueFlag === true) {
|
|
258
|
+
await handleContinue(sessionManager, sessionsDir, selectFn, setTitleFn);
|
|
259
|
+
}
|
|
260
|
+
else if (resumeFlag === true) {
|
|
261
|
+
await handleResume(sessionManager, sessionsDir, resumeSessionId, setTitleFn);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
async function handleContinue(sessionManager, sessionsDir, selectFn, setTitleFn) {
|
|
265
|
+
const histories = await SessionManager.load(sessionsDir, DEFAULT_HISTORY_LIMIT);
|
|
266
|
+
if (histories.length === 0) {
|
|
267
|
+
logger.info("No previous conversations found to continue.");
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
const choice = await selectFn({
|
|
272
|
+
message: "Select a conversation to resume:",
|
|
273
|
+
choices: histories.map((h, index) => ({
|
|
274
|
+
name: `${index + 1}: ${h.title} [${h.sessionId}] (${h.updatedAt.toLocaleString()})`,
|
|
275
|
+
value: index,
|
|
276
|
+
description: `${h.messages.length} messages`,
|
|
277
|
+
})),
|
|
278
|
+
});
|
|
279
|
+
const selectedHistory = histories.at(choice);
|
|
280
|
+
if (selectedHistory) {
|
|
281
|
+
sessionManager.restore(selectedHistory);
|
|
282
|
+
logger.info(`Resuming conversation: ${selectedHistory.title}`);
|
|
283
|
+
setTitleFn(selectedHistory.title || `acai: ${process.cwd()}`);
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
logger.error("Selected history index out of bounds.");
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
if (error instanceof Error &&
|
|
291
|
+
"isCanceled" in error &&
|
|
292
|
+
error.isCanceled === true) {
|
|
293
|
+
logger.info("Resume selection cancelled.");
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
throw error;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
async function handleResume(sessionManager, sessionsDir, resumeSessionId, setTitleFn) {
|
|
301
|
+
if (resumeSessionId) {
|
|
259
302
|
const histories = await SessionManager.load(sessionsDir, DEFAULT_HISTORY_LIMIT);
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
name: `${index + 1}: ${h.title} [${h.sessionId}] (${h.updatedAt.toLocaleString()})`,
|
|
266
|
-
value: index,
|
|
267
|
-
description: `${h.messages.length} messages`,
|
|
268
|
-
})),
|
|
269
|
-
});
|
|
270
|
-
const selectedHistory = histories.at(choice);
|
|
271
|
-
if (selectedHistory) {
|
|
272
|
-
sessionManager.restore(selectedHistory);
|
|
273
|
-
logger.info(`Resuming conversation: ${selectedHistory.title}`);
|
|
274
|
-
setTerminalTitle(selectedHistory.title || `acai: ${process.cwd()}`);
|
|
275
|
-
}
|
|
276
|
-
else {
|
|
277
|
-
logger.error("Selected history index out of bounds.");
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
catch (error) {
|
|
281
|
-
if (error instanceof Error &&
|
|
282
|
-
"isCanceled" in error &&
|
|
283
|
-
error.isCanceled === true) {
|
|
284
|
-
logger.info("Resume selection cancelled.");
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
throw error;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
303
|
+
const targetHistory = histories.find((h) => h.sessionId === resumeSessionId);
|
|
304
|
+
if (targetHistory) {
|
|
305
|
+
sessionManager.restore(targetHistory);
|
|
306
|
+
logger.info(`Resuming conversation: ${targetHistory.title}`);
|
|
307
|
+
setTitleFn(targetHistory.title || `acai: ${process.cwd()}`);
|
|
290
308
|
}
|
|
291
309
|
else {
|
|
292
|
-
|
|
310
|
+
console.error(`Session not found: ${resumeSessionId}`);
|
|
311
|
+
process.exit(1);
|
|
293
312
|
}
|
|
294
313
|
}
|
|
295
|
-
else
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
setTerminalTitle(targetHistory.title || `acai: ${process.cwd()}`);
|
|
303
|
-
}
|
|
304
|
-
else {
|
|
305
|
-
console.error(`Session not found: ${resumeSessionId}`);
|
|
306
|
-
process.exit(1);
|
|
307
|
-
}
|
|
314
|
+
else {
|
|
315
|
+
const histories = await SessionManager.load(sessionsDir, 1); // read the most recent session
|
|
316
|
+
const latestHistory = histories.at(0);
|
|
317
|
+
if (latestHistory) {
|
|
318
|
+
sessionManager.restore(latestHistory);
|
|
319
|
+
console.info(`Resuming conversation: ${latestHistory.title}`);
|
|
320
|
+
setTitleFn(latestHistory.title || `acai: ${process.cwd()}`);
|
|
308
321
|
}
|
|
309
322
|
else {
|
|
310
|
-
|
|
311
|
-
const latestHistory = histories.at(0);
|
|
312
|
-
if (latestHistory) {
|
|
313
|
-
sessionManager.restore(latestHistory);
|
|
314
|
-
console.info(`Resuming conversation: ${latestHistory.title}`);
|
|
315
|
-
setTerminalTitle(latestHistory.title || `acai: ${process.cwd()}`);
|
|
316
|
-
}
|
|
317
|
-
else {
|
|
318
|
-
logger.info("No previous conversation found to resume.");
|
|
319
|
-
}
|
|
323
|
+
logger.info("No previous conversation found to resume.");
|
|
320
324
|
}
|
|
321
325
|
}
|
|
322
326
|
}
|
|
@@ -337,6 +341,7 @@ function setupReplEventHandlers(repl, agent, sessionManager, noSession) {
|
|
|
337
341
|
logger.info("Resetting agent state.");
|
|
338
342
|
agent.resetState();
|
|
339
343
|
agent.setConfig(await config.getConfig());
|
|
344
|
+
getActivatedSkillsTracker().reset();
|
|
340
345
|
void repl.rerender();
|
|
341
346
|
});
|
|
342
347
|
repl.setInterruptCallback(async () => {
|
|
@@ -352,7 +357,6 @@ function setupReplEventHandlers(repl, agent, sessionManager, noSession) {
|
|
|
352
357
|
});
|
|
353
358
|
repl.setExitCallback(async (_sessionId) => {
|
|
354
359
|
if (!sessionManager.isEmpty()) {
|
|
355
|
-
await repl.triggerRuleGeneration();
|
|
356
360
|
writeExitSummary(sessionManager, noSession);
|
|
357
361
|
}
|
|
358
362
|
});
|
|
@@ -448,6 +452,26 @@ async function runReplMode(state, stdinWasPiped, noSession) {
|
|
|
448
452
|
await handleStdinPrompt(state, agent, repl, tools, activeTools, systemPromptResult, noSession);
|
|
449
453
|
await runInteractiveLoop(repl, agent, tools, activeTools, systemPromptResult, noSession, state.sessionManager, state.appConfig.loop.maxIterations);
|
|
450
454
|
}
|
|
455
|
+
/**
|
|
456
|
+
* Expands a leading tilde in a path to the user's home directory.
|
|
457
|
+
* If the path does not start with ~, it is returned unchanged.
|
|
458
|
+
*/
|
|
459
|
+
export function expandTildePath(dir) {
|
|
460
|
+
if (dir.startsWith("~/") || dir === "~") {
|
|
461
|
+
return path.join(os.homedir(), dir.slice(1));
|
|
462
|
+
}
|
|
463
|
+
return dir;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Resolves a path (expanding tilde if present) and adds it to a list
|
|
467
|
+
* of directories if it is not already present.
|
|
468
|
+
*/
|
|
469
|
+
export function addUniqueDir(dir, dirs) {
|
|
470
|
+
const resolvedDir = path.resolve(expandTildePath(dir));
|
|
471
|
+
if (!dirs.includes(resolvedDir)) {
|
|
472
|
+
dirs.push(resolvedDir);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
451
475
|
async function main() {
|
|
452
476
|
try {
|
|
453
477
|
const appConfig = await config.ensureDefaultConfig("acai");
|
|
@@ -462,14 +486,20 @@ async function main() {
|
|
|
462
486
|
const { initialPromptInput, stdinContent, hasContinueOrResume, resumeSessionId, } = await determineInitialPrompt();
|
|
463
487
|
// Initialize application state
|
|
464
488
|
const state = await initializeAppState(appConfig, initialPromptInput, stdinContent, hasContinueOrResume, resumeSessionId);
|
|
489
|
+
// Add config-sourced allowed directories (merged from app and project configs)
|
|
490
|
+
const mergedConfig = await config.getConfig();
|
|
491
|
+
for (const dir of mergedConfig.allowedDirs ?? []) {
|
|
492
|
+
addUniqueDir(dir, workspace.allowedDirs);
|
|
493
|
+
}
|
|
494
|
+
// Add configured skills paths to allowed directories so scripts within
|
|
495
|
+
// them can be executed by the Bash tool.
|
|
496
|
+
for (const resolvedDir of parseSkillsPath(mergedConfig.skills?.path ?? "")) {
|
|
497
|
+
addUniqueDir(resolvedDir, workspace.allowedDirs);
|
|
498
|
+
}
|
|
465
499
|
// Add logs directory to allowed directories if configured
|
|
466
|
-
const logsPath =
|
|
500
|
+
const logsPath = mergedConfig.logs?.path;
|
|
467
501
|
if (logsPath) {
|
|
468
|
-
|
|
469
|
-
const expandedLogsPath = logsPath.startsWith("~/") || logsPath === "~"
|
|
470
|
-
? path.join(os.homedir(), logsPath.slice(1))
|
|
471
|
-
: logsPath;
|
|
472
|
-
const logsDir = path.dirname(path.resolve(expandedLogsPath));
|
|
502
|
+
const logsDir = path.dirname(path.resolve(expandTildePath(logsPath)));
|
|
473
503
|
if (!workspace.allowedDirs.includes(logsDir)) {
|
|
474
504
|
workspace.allowedDirs.push(logsDir);
|
|
475
505
|
}
|
|
@@ -8,7 +8,7 @@ type ModelName = `anthropic:${keyof typeof anthropicModels}`;
|
|
|
8
8
|
export declare const anthropicModelNames: ModelName[];
|
|
9
9
|
export declare const anthropicProvider: {
|
|
10
10
|
anthropic: import("@ai-sdk/provider").ProviderV3 & {
|
|
11
|
-
languageModel(modelId: "
|
|
11
|
+
languageModel(modelId: "haiku" | "opus" | "sonnet"): import("@ai-sdk/provider").LanguageModelV3;
|
|
12
12
|
embeddingModel(modelId: string): import("@ai-sdk/provider").EmbeddingModelV3;
|
|
13
13
|
imageModel(modelId: string): import("@ai-sdk/provider").ImageModelV3;
|
|
14
14
|
transcriptionModel(modelId: string): import("@ai-sdk/provider").TranscriptionModelV3;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ModelMetadata } from "./providers.ts";
|
|
2
2
|
declare const deepseekModels: {
|
|
3
|
-
readonly "deepseek-
|
|
4
|
-
readonly "deepseek-
|
|
3
|
+
readonly "deepseek-v4-flash": import("@ai-sdk/provider").LanguageModelV3;
|
|
4
|
+
readonly "deepseek-v4-pro": import("@ai-sdk/provider").LanguageModelV3;
|
|
5
5
|
};
|
|
6
6
|
type ModelName = `deepseek:${keyof typeof deepseekModels}`;
|
|
7
7
|
export declare const deepseekModelNames: ModelName[];
|
|
8
8
|
export declare const deepseekProvider: {
|
|
9
9
|
deepseek: import("@ai-sdk/provider").ProviderV3 & {
|
|
10
|
-
languageModel(modelId: "deepseek-
|
|
10
|
+
languageModel(modelId: "deepseek-v4-flash" | "deepseek-v4-pro"): import("@ai-sdk/provider").LanguageModelV3;
|
|
11
11
|
embeddingModel(modelId: string): import("@ai-sdk/provider").EmbeddingModelV3;
|
|
12
12
|
imageModel(modelId: string): import("@ai-sdk/provider").ImageModelV3;
|
|
13
13
|
transcriptionModel(modelId: string): import("@ai-sdk/provider").TranscriptionModelV3;
|
|
@@ -2,8 +2,8 @@ import { deepseek as originalDeepseek } from "@ai-sdk/deepseek";
|
|
|
2
2
|
import { objectKeys } from "@travisennis/stdlib/object";
|
|
3
3
|
import { customProvider } from "ai";
|
|
4
4
|
const deepseekModels = {
|
|
5
|
-
"deepseek-
|
|
6
|
-
"deepseek-
|
|
5
|
+
"deepseek-v4-flash": originalDeepseek("deepseek-v4-flash"),
|
|
6
|
+
"deepseek-v4-pro": originalDeepseek("deepseek-v4-pro"),
|
|
7
7
|
};
|
|
8
8
|
export const deepseekModelNames = objectKeys(deepseekModels).map((key) => `deepseek:${key}`);
|
|
9
9
|
export const deepseekProvider = {
|
|
@@ -13,28 +13,28 @@ export const deepseekProvider = {
|
|
|
13
13
|
}),
|
|
14
14
|
};
|
|
15
15
|
export const deepseekModelRegistry = {
|
|
16
|
-
"deepseek:deepseek-
|
|
17
|
-
id: "deepseek:deepseek-
|
|
16
|
+
"deepseek:deepseek-v4-flash": {
|
|
17
|
+
id: "deepseek:deepseek-v4-flash",
|
|
18
18
|
provider: "deepseek",
|
|
19
|
-
contextWindow:
|
|
20
|
-
maxOutputTokens:
|
|
19
|
+
contextWindow: 1000000,
|
|
20
|
+
maxOutputTokens: 384000,
|
|
21
21
|
defaultTemperature: 0.3,
|
|
22
22
|
promptFormat: "bracket",
|
|
23
|
-
supportsReasoning:
|
|
23
|
+
supportsReasoning: true,
|
|
24
24
|
supportsToolCalling: true,
|
|
25
|
-
costPerInputToken: 0.
|
|
26
|
-
costPerOutputToken: 0.
|
|
25
|
+
costPerInputToken: 0.00000014,
|
|
26
|
+
costPerOutputToken: 0.00000028,
|
|
27
27
|
},
|
|
28
|
-
"deepseek:deepseek-
|
|
29
|
-
id: "deepseek:deepseek-
|
|
28
|
+
"deepseek:deepseek-v4-pro": {
|
|
29
|
+
id: "deepseek:deepseek-v4-pro",
|
|
30
30
|
provider: "deepseek",
|
|
31
|
-
contextWindow:
|
|
32
|
-
maxOutputTokens:
|
|
33
|
-
defaultTemperature: 0.
|
|
31
|
+
contextWindow: 1000000,
|
|
32
|
+
maxOutputTokens: 384000,
|
|
33
|
+
defaultTemperature: 0.3,
|
|
34
34
|
promptFormat: "bracket",
|
|
35
35
|
supportsReasoning: true,
|
|
36
|
-
supportsToolCalling: true,
|
|
37
|
-
costPerInputToken: 0.
|
|
38
|
-
costPerOutputToken: 0.
|
|
36
|
+
supportsToolCalling: true,
|
|
37
|
+
costPerInputToken: 0.000000435,
|
|
38
|
+
costPerOutputToken: 0.00000087,
|
|
39
39
|
},
|
|
40
40
|
};
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import type { ModelMetadata } from "./providers.ts";
|
|
2
|
-
declare const googleModels: {
|
|
3
|
-
readonly flash25lite: import("@ai-sdk/provider").LanguageModelV3;
|
|
4
|
-
};
|
|
2
|
+
declare const googleModels: {};
|
|
5
3
|
type ModelName = `google:${keyof typeof googleModels}`;
|
|
6
4
|
export declare const googleModelNames: ModelName[];
|
|
7
5
|
export declare const googleProvider: {
|
|
8
6
|
google: import("@ai-sdk/provider").ProviderV3 & {
|
|
9
|
-
languageModel(modelId:
|
|
7
|
+
languageModel(modelId: never): import("@ai-sdk/provider").LanguageModelV3;
|
|
10
8
|
embeddingModel(modelId: string): import("@ai-sdk/provider").EmbeddingModelV3;
|
|
11
9
|
imageModel(modelId: string): import("@ai-sdk/provider").ImageModelV3;
|
|
12
10
|
transcriptionModel(modelId: string): import("@ai-sdk/provider").TranscriptionModelV3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-provider.d.ts","sourceRoot":"","sources":["../../source/models/google-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"google-provider.d.ts","sourceRoot":"","sources":["../../source/models/google-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,QAAA,MAAM,YAAY,IAAc,CAAC;AAEjC,KAAK,SAAS,GAAG,UAAU,MAAM,OAAO,YAAY,EAAE,CAAC;AAEvD,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAEvC,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;CAK1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,SAAS,EACT,aAAa,CAAC,SAAS,CAAC,CAC2B,CAAC"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { google as originalGoogle } from "@ai-sdk/google";
|
|
2
2
|
import { objectKeys } from "@travisennis/stdlib/object";
|
|
3
3
|
import { customProvider } from "ai";
|
|
4
|
-
const googleModels = {
|
|
5
|
-
flash25lite: originalGoogle("gemini-2.5-flash-lite-preview-06-17"),
|
|
6
|
-
};
|
|
4
|
+
const googleModels = {};
|
|
7
5
|
export const googleModelNames = objectKeys(googleModels).map((key) => `google:${key}`);
|
|
8
6
|
export const googleProvider = {
|
|
9
7
|
google: customProvider({
|
|
@@ -11,17 +9,4 @@ export const googleProvider = {
|
|
|
11
9
|
fallbackProvider: originalGoogle,
|
|
12
10
|
}),
|
|
13
11
|
};
|
|
14
|
-
export const googleModelRegistry = {
|
|
15
|
-
"google:flash25lite": {
|
|
16
|
-
id: "google:flash25lite",
|
|
17
|
-
provider: "google",
|
|
18
|
-
contextWindow: 1000000,
|
|
19
|
-
maxOutputTokens: 8192,
|
|
20
|
-
defaultTemperature: 0.3,
|
|
21
|
-
promptFormat: "markdown",
|
|
22
|
-
supportsReasoning: false,
|
|
23
|
-
supportsToolCalling: true,
|
|
24
|
-
costPerInputToken: 0,
|
|
25
|
-
costPerOutputToken: 0,
|
|
26
|
-
},
|
|
27
|
-
};
|
|
12
|
+
export const googleModelRegistry = {};
|