@travisennis/acai 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +225 -6
- package/dist/api/exa/index.d.ts +177 -0
- package/dist/api/exa/index.d.ts.map +1 -0
- package/dist/api/exa/index.js +439 -0
- package/dist/cli.d.ts +3 -2
- package/dist/cli.d.ts.map +1 -0
- package/dist/commands/application-log-command.d.ts +1 -0
- package/dist/commands/application-log-command.d.ts.map +1 -0
- package/dist/commands/application-log-command.js +5 -3
- package/dist/commands/clear-command.d.ts +1 -0
- package/dist/commands/clear-command.d.ts.map +1 -0
- package/dist/commands/clear-command.js +2 -3
- package/dist/commands/compact-command.d.ts +1 -0
- package/dist/commands/compact-command.d.ts.map +1 -0
- package/dist/commands/compact-command.js +1 -1
- package/dist/commands/copy-command.d.ts +1 -0
- package/dist/commands/copy-command.d.ts.map +1 -0
- package/dist/commands/copy-command.js +3 -2
- package/dist/commands/edit-command.d.ts +1 -0
- package/dist/commands/edit-command.d.ts.map +1 -0
- package/dist/commands/edit-command.js +7 -5
- package/dist/commands/edit-prompt-command.d.ts +2 -1
- package/dist/commands/edit-prompt-command.d.ts.map +1 -0
- package/dist/commands/edit-prompt-command.js +15 -7
- package/dist/commands/exit-command.d.ts +13 -2
- package/dist/commands/exit-command.d.ts.map +1 -0
- package/dist/commands/exit-command.js +14 -2
- package/dist/commands/files-command.d.ts +1 -0
- package/dist/commands/files-command.d.ts.map +1 -0
- package/dist/commands/files-command.js +9 -8
- package/dist/commands/generate-rules-command.d.ts +1 -0
- package/dist/commands/generate-rules-command.d.ts.map +1 -0
- package/dist/commands/generate-rules-command.js +4 -3
- package/dist/commands/health-command.d.ts +3 -1
- package/dist/commands/health-command.d.ts.map +1 -0
- package/dist/commands/health-command.js +42 -5
- package/dist/commands/help-command.d.ts +1 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +2 -3
- package/dist/commands/init-command.d.ts +1 -0
- package/dist/commands/init-command.d.ts.map +1 -0
- package/dist/commands/init-command.js +1 -2
- package/dist/commands/last-log-command.d.ts +1 -0
- package/dist/commands/last-log-command.d.ts.map +1 -0
- package/dist/commands/last-log-command.js +12 -17
- package/dist/commands/list-tools-command.d.ts +3 -0
- package/dist/commands/list-tools-command.d.ts.map +1 -0
- package/dist/commands/list-tools-command.js +61 -0
- package/dist/commands/manager.d.ts +7 -2
- package/dist/commands/manager.d.ts.map +1 -0
- package/dist/commands/manager.js +43 -6
- package/dist/commands/model-command.d.ts +1 -0
- package/dist/commands/model-command.d.ts.map +1 -0
- package/dist/commands/model-command.js +5 -5
- package/dist/commands/paste-command.d.ts +1 -0
- package/dist/commands/paste-command.d.ts.map +1 -0
- package/dist/commands/paste-command.js +6 -5
- package/dist/commands/prompt-command.d.ts +2 -1
- package/dist/commands/prompt-command.d.ts.map +1 -0
- package/dist/commands/prompt-command.js +62 -8
- package/dist/commands/reset-command.d.ts +1 -0
- package/dist/commands/reset-command.d.ts.map +1 -0
- package/dist/commands/reset-command.js +1 -1
- package/dist/commands/rules-command.d.ts +1 -0
- package/dist/commands/rules-command.d.ts.map +1 -0
- package/dist/commands/rules-command.js +5 -3
- package/dist/commands/save-command.d.ts +1 -0
- package/dist/commands/save-command.d.ts.map +1 -0
- package/dist/commands/save-command.js +1 -1
- package/dist/commands/shell-command.d.ts +3 -0
- package/dist/commands/shell-command.d.ts.map +1 -0
- package/dist/commands/shell-command.js +60 -0
- package/dist/commands/types.d.ts +9 -6
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/usage-command.d.ts +1 -0
- package/dist/commands/usage-command.d.ts.map +1 -0
- package/dist/commands/usage-command.js +2 -3
- package/dist/config.d.ts +22 -34
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +61 -15
- package/dist/conversation-analyzer.d.ts +2 -1
- package/dist/conversation-analyzer.d.ts.map +1 -0
- package/dist/dedent.d.ts +1 -0
- package/dist/dedent.d.ts.map +1 -0
- package/dist/execution/index.d.ts +112 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +432 -0
- package/dist/formatting.d.ts +2 -13
- package/dist/formatting.d.ts.map +1 -0
- package/dist/formatting.js +5 -64
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -4
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/mentions.d.ts +4 -0
- package/dist/mentions.d.ts.map +1 -0
- package/dist/mentions.js +42 -10
- package/dist/messages.d.ts +8 -20
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +33 -53
- package/dist/middleware/audit-message.d.ts +1 -0
- package/dist/middleware/audit-message.d.ts.map +1 -0
- package/dist/middleware/index.d.ts +1 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/rate-limit.d.ts +1 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/models/ai-config.d.ts +1 -0
- package/dist/models/ai-config.d.ts.map +1 -0
- package/dist/models/anthropic-provider.d.ts +1 -0
- package/dist/models/anthropic-provider.d.ts.map +1 -0
- package/dist/models/deepseek-provider.d.ts +1 -0
- package/dist/models/deepseek-provider.d.ts.map +1 -0
- package/dist/models/google-provider.d.ts +1 -0
- package/dist/models/google-provider.d.ts.map +1 -0
- package/dist/models/groq-provider.d.ts +20 -0
- package/dist/models/groq-provider.d.ts.map +1 -0
- package/dist/models/groq-provider.js +31 -0
- package/dist/models/manager.d.ts +1 -0
- package/dist/models/manager.d.ts.map +1 -0
- package/dist/models/openai-provider.d.ts +2 -1
- package/dist/models/openai-provider.d.ts.map +1 -0
- package/dist/models/openrouter-provider.d.ts +31 -22
- package/dist/models/openrouter-provider.d.ts.map +1 -0
- package/dist/models/openrouter-provider.js +115 -1
- package/dist/models/providers.d.ts +4 -5
- package/dist/models/providers.d.ts.map +1 -0
- package/dist/models/providers.js +7 -3
- package/dist/models/xai-provider.d.ts +1 -0
- package/dist/models/xai-provider.d.ts.map +1 -0
- package/dist/parsing.d.ts +2 -1
- package/dist/parsing.d.ts.map +1 -0
- package/dist/prompts/manager.d.ts +14 -2
- package/dist/prompts/manager.d.ts.map +1 -0
- package/dist/prompts.d.ts +1 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +17 -11
- package/dist/repl/display-tool-messages.d.ts +4 -0
- package/dist/repl/display-tool-messages.d.ts.map +1 -0
- package/dist/repl/display-tool-messages.js +55 -0
- package/dist/repl/display-tool-use.d.ts +14 -0
- package/dist/repl/display-tool-use.d.ts.map +1 -0
- package/dist/repl/display-tool-use.js +63 -0
- package/dist/repl/get-prompt-header.d.ts +8 -0
- package/dist/repl/get-prompt-header.d.ts.map +1 -0
- package/dist/repl/get-prompt-header.js +38 -0
- package/dist/repl/tool-call-repair.d.ts +4 -0
- package/dist/repl/tool-call-repair.d.ts.map +1 -0
- package/dist/repl/tool-call-repair.js +50 -0
- package/dist/repl-prompt.d.ts +1 -0
- package/dist/repl-prompt.d.ts.map +1 -0
- package/dist/repl.d.ts +8 -4
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +108 -252
- package/dist/terminal/ansi-styles.d.ts +77 -0
- package/dist/terminal/ansi-styles.d.ts.map +1 -0
- package/dist/terminal/ansi-styles.js +215 -0
- package/dist/terminal/checkbox-prompt.d.ts +36 -0
- package/dist/terminal/checkbox-prompt.d.ts.map +1 -0
- package/dist/terminal/checkbox-prompt.js +362 -0
- package/dist/terminal/default-theme.d.ts +6 -0
- package/dist/terminal/default-theme.d.ts.map +1 -0
- package/dist/terminal/default-theme.js +182 -0
- package/dist/terminal/east-asian-width.d.ts +8 -0
- package/dist/terminal/east-asian-width.d.ts.map +1 -0
- package/dist/terminal/east-asian-width.js +409 -0
- package/dist/terminal/editor-prompt.d.ts +10 -0
- package/dist/terminal/editor-prompt.d.ts.map +1 -0
- package/dist/terminal/editor-prompt.js +61 -0
- package/dist/terminal/errors.d.ts +19 -0
- package/dist/terminal/errors.d.ts.map +1 -0
- package/dist/terminal/errors.js +37 -0
- package/dist/terminal/formatting.d.ts +1 -11
- package/dist/terminal/formatting.d.ts.map +1 -0
- package/dist/terminal/formatting.js +4 -20
- package/dist/terminal/highlight/index.d.ts +53 -0
- package/dist/terminal/highlight/index.d.ts.map +1 -0
- package/dist/terminal/highlight/index.js +90 -0
- package/dist/terminal/highlight/theme.d.ts +233 -0
- package/dist/terminal/highlight/theme.d.ts.map +1 -0
- package/dist/terminal/highlight/theme.js +83 -0
- package/dist/terminal/index.d.ts +16 -9
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +42 -126
- package/dist/terminal/input-prompt.d.ts +16 -0
- package/dist/terminal/input-prompt.d.ts.map +1 -0
- package/dist/terminal/input-prompt.js +181 -0
- package/dist/terminal/markdown-utils.d.ts +1 -0
- package/dist/terminal/markdown-utils.d.ts.map +1 -0
- package/dist/terminal/markdown.d.ts +1 -0
- package/dist/terminal/markdown.d.ts.map +1 -0
- package/dist/terminal/markdown.js +17 -12
- package/dist/terminal/search-prompt.d.ts +20 -0
- package/dist/terminal/search-prompt.d.ts.map +1 -0
- package/dist/terminal/search-prompt.js +279 -0
- package/dist/terminal/select-prompt.d.ts +26 -0
- package/dist/terminal/select-prompt.d.ts.map +1 -0
- package/dist/terminal/select-prompt.js +298 -0
- package/dist/terminal/string-width.d.ts +7 -0
- package/dist/terminal/string-width.d.ts.map +1 -0
- package/dist/terminal/string-width.js +61 -0
- package/dist/terminal/strip-ansi.d.ts +2 -0
- package/dist/terminal/strip-ansi.d.ts.map +1 -0
- package/dist/terminal/strip-ansi.js +20 -0
- package/dist/terminal/style.d.ts +191 -0
- package/dist/terminal/style.d.ts.map +1 -0
- package/dist/terminal/style.js +259 -0
- package/dist/terminal/supports-color.d.ts +1 -0
- package/dist/terminal/supports-color.d.ts.map +1 -0
- package/dist/terminal/supports-hyperlinks.d.ts +1 -3
- package/dist/terminal/supports-hyperlinks.d.ts.map +1 -0
- package/dist/terminal/supports-hyperlinks.js +1 -1
- package/dist/terminal/types.d.ts +1 -37
- package/dist/terminal/types.d.ts.map +1 -0
- package/dist/terminal/wrap-ansi.d.ts +8 -0
- package/dist/terminal/wrap-ansi.d.ts.map +1 -0
- package/dist/terminal/wrap-ansi.js +190 -0
- package/dist/{token-utils.d.ts → tokens/counter.d.ts} +1 -0
- package/dist/tokens/counter.d.ts.map +1 -0
- package/dist/{token-utils.js → tokens/counter.js} +1 -1
- package/dist/tokens/manage-output.d.ts +34 -0
- package/dist/tokens/manage-output.d.ts.map +1 -0
- package/dist/tokens/manage-output.js +44 -0
- package/dist/{token-tracker.d.ts → tokens/tracker.d.ts} +1 -0
- package/dist/tokens/tracker.d.ts.map +1 -0
- package/dist/tool-executor.d.ts +28 -0
- package/dist/tool-executor.d.ts.map +1 -0
- package/dist/tool-executor.js +74 -0
- package/dist/tools/agent.d.ts +3 -2
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +7 -4
- package/dist/tools/bash-utils.d.ts +7 -0
- package/dist/tools/bash-utils.d.ts.map +1 -0
- package/dist/tools/bash-utils.js +212 -0
- package/dist/tools/bash.d.ts +9 -7
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +95 -212
- package/dist/tools/code-interpreter.d.ts +1 -0
- package/dist/tools/code-interpreter.d.ts.map +1 -0
- package/dist/tools/code-interpreter.js +33 -8
- package/dist/tools/delete-file.d.ts +5 -3
- package/dist/tools/delete-file.d.ts.map +1 -0
- package/dist/tools/delete-file.js +47 -33
- package/dist/tools/directory-tree.d.ts +10 -1
- package/dist/tools/directory-tree.d.ts.map +1 -0
- package/dist/tools/directory-tree.js +91 -8
- package/dist/tools/dynamic-tool-loader.d.ts +12 -0
- package/dist/tools/dynamic-tool-loader.d.ts.map +1 -0
- package/dist/tools/dynamic-tool-loader.js +280 -0
- package/dist/tools/dynamic-tool-parser.d.ts +20 -0
- package/dist/tools/dynamic-tool-parser.d.ts.map +1 -0
- package/dist/tools/dynamic-tool-parser.js +21 -0
- package/dist/tools/edit-file.d.ts +10 -2
- package/dist/tools/edit-file.d.ts.map +1 -0
- package/dist/tools/edit-file.js +117 -40
- package/dist/tools/file-editing-utils.d.ts +2 -0
- package/dist/tools/file-editing-utils.d.ts.map +1 -0
- package/dist/tools/file-editing-utils.js +135 -0
- package/dist/tools/filesystem-utils.d.ts +6 -21
- package/dist/tools/filesystem-utils.d.ts.map +1 -0
- package/dist/tools/filesystem-utils.js +96 -148
- package/dist/tools/git-utils.d.ts +1 -0
- package/dist/tools/git-utils.d.ts.map +1 -0
- package/dist/tools/grep.d.ts +5 -3
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +67 -27
- package/dist/tools/index.d.ts +10 -14
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +33 -22
- package/dist/tools/move-file.d.ts +1 -0
- package/dist/tools/move-file.d.ts.map +1 -0
- package/dist/tools/move-file.js +12 -5
- package/dist/tools/read-file.d.ts +2 -1
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +13 -6
- package/dist/tools/read-multiple-files.d.ts +2 -1
- package/dist/tools/read-multiple-files.d.ts.map +1 -0
- package/dist/tools/read-multiple-files.js +90 -9
- package/dist/tools/save-file.d.ts +5 -3
- package/dist/tools/save-file.d.ts.map +1 -0
- package/dist/tools/save-file.js +64 -36
- package/dist/tools/think.d.ts +1 -0
- package/dist/tools/think.d.ts.map +1 -0
- package/dist/tools/think.js +5 -1
- package/dist/tools/types.d.ts +14 -1
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/web-fetch.d.ts +4 -2
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +2 -2
- package/dist/tools/web-search.d.ts +2 -1
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +46 -11
- package/dist/utils/filesystem.d.ts +23 -0
- package/dist/utils/filesystem.d.ts.map +1 -0
- package/dist/utils/filesystem.js +140 -0
- package/dist/utils/filetype-detection.d.ts +3 -0
- package/dist/utils/filetype-detection.d.ts.map +1 -0
- package/dist/utils/filetype-detection.js +112 -0
- package/dist/utils/glob.d.ts +52 -0
- package/dist/utils/glob.d.ts.map +1 -0
- package/dist/utils/glob.js +376 -0
- package/dist/utils/ignore.d.ts +104 -0
- package/dist/utils/ignore.d.ts.map +1 -0
- package/dist/utils/ignore.js +649 -0
- package/dist/utils/process.d.ts +10 -1
- package/dist/utils/process.d.ts.map +1 -0
- package/dist/utils/process.js +104 -5
- package/dist/utils/zod-utils.d.ts +4 -0
- package/dist/utils/zod-utils.d.ts.map +1 -0
- package/dist/utils/zod-utils.js +7 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.d.ts.map +1 -0
- package/package.json +32 -30
- package/dist/tools/command-validation.d.ts +0 -12
- package/dist/tools/command-validation.js +0 -113
- /package/dist/{token-tracker.js → tokens/tracker.js} +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
// import { createOpenAI } from "@ai-sdk/openai";
|
|
1
2
|
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
|
|
3
|
+
import { openrouter } from "@openrouter/ai-sdk-provider";
|
|
2
4
|
import { objectKeys } from "@travisennis/stdlib/object";
|
|
3
5
|
import { customProvider } from "ai";
|
|
4
6
|
const openRouterClient = createOpenAICompatible({
|
|
@@ -11,6 +13,16 @@ const openRouterClient = createOpenAICompatible({
|
|
|
11
13
|
"X-Title": "acai",
|
|
12
14
|
},
|
|
13
15
|
});
|
|
16
|
+
// const openRouterResponseClient = createOpenAI({
|
|
17
|
+
// // biome-ignore lint/style/useNamingConvention: third-party controlled
|
|
18
|
+
// baseURL: "https://openrouter.ai/api/alpha",
|
|
19
|
+
// name: "openrouter",
|
|
20
|
+
// apiKey: process.env["OPENROUTER_API_KEY"] ?? "",
|
|
21
|
+
// headers: {
|
|
22
|
+
// "HTTP-Referer": "https://github.com/travisennis/acai-ts",
|
|
23
|
+
// "X-Title": "acai",
|
|
24
|
+
// },
|
|
25
|
+
// });
|
|
14
26
|
const openrouterModels = {
|
|
15
27
|
"deepseek-v3": openRouterClient("deepseek/deepseek-chat-v3-0324"),
|
|
16
28
|
"deepseek-v3-1": openRouterClient("deepseek/deepseek-chat-v3.1"),
|
|
@@ -20,19 +32,30 @@ const openrouterModels = {
|
|
|
20
32
|
"gemini-flash25": openRouterClient("google/gemini-2.5-flash"),
|
|
21
33
|
"gemini-pro25": openRouterClient("google/gemini-2.5-pro"),
|
|
22
34
|
sonnet4: openRouterClient("anthropic/claude-sonnet-4"),
|
|
35
|
+
"sonnet-4.5": openRouterClient("anthropic/claude-sonnet-4.5"),
|
|
23
36
|
opus4: openRouterClient("anthropic/claude-opus-4"),
|
|
24
37
|
"opus-4.1": openRouterClient("anthropic/claude-opus-4.1"),
|
|
25
38
|
"gpt-4.1": openRouterClient("openai/gpt-4.1"),
|
|
26
39
|
"kimi-k2": openRouterClient("moonshotai/kimi-k2:nitro"),
|
|
27
40
|
"kimi-k2-free": openRouterClient("moonshotai/kimi-k2:free"),
|
|
41
|
+
"kimi-k2-0905": openRouterClient("moonshotai/kimi-k2-0905"),
|
|
28
42
|
"devstral-medium": openRouterClient("mistralai/devstral-medium"),
|
|
29
43
|
"qwen3-coder": openRouterClient("qwen/qwen3-coder"),
|
|
30
44
|
"qwen3-coder-free": openRouterClient("qwen/qwen3-coder:free"),
|
|
45
|
+
"qwen3-coder-plus": openRouterClient("qwen/qwen3-coder-plus"),
|
|
46
|
+
"qwen3-max": openRouterClient("qwen/qwen3-max"),
|
|
47
|
+
"glm-4.6": openRouterClient("z-ai/glm-4.6"),
|
|
31
48
|
"glm-4.5": openRouterClient("z-ai/glm-4.5"),
|
|
32
49
|
"gpt-5": openRouterClient("openai/gpt-5"),
|
|
33
50
|
"gpt-5-mini": openRouterClient("openai/gpt-5-mini"),
|
|
34
51
|
"gpt-oss-120b": openRouterClient("openai/gpt-oss-120b"),
|
|
35
|
-
"grok-code-fast-1":
|
|
52
|
+
"grok-code-fast-1": openrouter("x-ai/grok-code-fast-1", {
|
|
53
|
+
parallelToolCalls: false,
|
|
54
|
+
}),
|
|
55
|
+
"grok-4-fast-free": openrouter("x-ai/grok-4-fast:free", {
|
|
56
|
+
parallelToolCalls: false,
|
|
57
|
+
}),
|
|
58
|
+
"gpt-5-codex": openRouterClient("openai/gpt-5-codex"),
|
|
36
59
|
};
|
|
37
60
|
export const openrouterModelNames = objectKeys(openrouterModels).map((key) => `openrouter:${key}`);
|
|
38
61
|
export const openrouterProvider = {
|
|
@@ -172,6 +195,19 @@ export const openrouterModelRegistry = {
|
|
|
172
195
|
costPerOutputToken: 0,
|
|
173
196
|
category: "balanced",
|
|
174
197
|
},
|
|
198
|
+
"openrouter:sonnet-4.5": {
|
|
199
|
+
id: "openrouter:sonnet-4.5",
|
|
200
|
+
provider: "openrouter",
|
|
201
|
+
contextWindow: 1000000,
|
|
202
|
+
maxOutputTokens: 64000,
|
|
203
|
+
defaultTemperature: 1.0,
|
|
204
|
+
promptFormat: "markdown",
|
|
205
|
+
supportsReasoning: true,
|
|
206
|
+
supportsToolCalling: true,
|
|
207
|
+
costPerInputToken: 0.000003,
|
|
208
|
+
costPerOutputToken: 0.000015,
|
|
209
|
+
category: "powerful",
|
|
210
|
+
},
|
|
175
211
|
"openrouter:gpt-4.1": {
|
|
176
212
|
id: "openrouter:gpt-4.1",
|
|
177
213
|
provider: "openrouter",
|
|
@@ -211,6 +247,19 @@ export const openrouterModelRegistry = {
|
|
|
211
247
|
costPerOutputToken: 0,
|
|
212
248
|
category: "balanced",
|
|
213
249
|
},
|
|
250
|
+
"openrouter:kimi-k2-0905": {
|
|
251
|
+
id: "openrouter:kimi-k2-0905",
|
|
252
|
+
provider: "openrouter",
|
|
253
|
+
contextWindow: 262144,
|
|
254
|
+
maxOutputTokens: 8192,
|
|
255
|
+
defaultTemperature: 0.6,
|
|
256
|
+
promptFormat: "markdown",
|
|
257
|
+
supportsReasoning: false,
|
|
258
|
+
supportsToolCalling: true,
|
|
259
|
+
costPerInputToken: 0.0000006,
|
|
260
|
+
costPerOutputToken: 0.0000025,
|
|
261
|
+
category: "balanced",
|
|
262
|
+
},
|
|
214
263
|
"openrouter:devstral-medium": {
|
|
215
264
|
id: "openrouter:devstral-medium",
|
|
216
265
|
provider: "openrouter",
|
|
@@ -250,6 +299,45 @@ export const openrouterModelRegistry = {
|
|
|
250
299
|
costPerOutputToken: 0.000002,
|
|
251
300
|
category: "balanced",
|
|
252
301
|
},
|
|
302
|
+
"openrouter:qwen3-coder-plus": {
|
|
303
|
+
id: "openrouter:qwen3-coder-plus",
|
|
304
|
+
provider: "openrouter",
|
|
305
|
+
contextWindow: 128000,
|
|
306
|
+
maxOutputTokens: 65536,
|
|
307
|
+
defaultTemperature: 0.7,
|
|
308
|
+
promptFormat: "markdown",
|
|
309
|
+
supportsReasoning: false,
|
|
310
|
+
supportsToolCalling: true,
|
|
311
|
+
costPerInputToken: 0.000001,
|
|
312
|
+
costPerOutputToken: 0.000005,
|
|
313
|
+
category: "powerful",
|
|
314
|
+
},
|
|
315
|
+
"openrouter:qwen3-max": {
|
|
316
|
+
id: "openrouter:qwen3-max",
|
|
317
|
+
provider: "openrouter",
|
|
318
|
+
contextWindow: 256000,
|
|
319
|
+
maxOutputTokens: 32768,
|
|
320
|
+
defaultTemperature: 0.7,
|
|
321
|
+
promptFormat: "markdown",
|
|
322
|
+
supportsReasoning: false,
|
|
323
|
+
supportsToolCalling: true,
|
|
324
|
+
costPerInputToken: 0.0000012,
|
|
325
|
+
costPerOutputToken: 0.000006,
|
|
326
|
+
category: "powerful",
|
|
327
|
+
},
|
|
328
|
+
"openrouter:glm-4.6": {
|
|
329
|
+
id: "openrouter:glm-4.6",
|
|
330
|
+
provider: "openrouter",
|
|
331
|
+
contextWindow: 200000,
|
|
332
|
+
maxOutputTokens: 128000,
|
|
333
|
+
defaultTemperature: 0.6,
|
|
334
|
+
promptFormat: "markdown",
|
|
335
|
+
supportsReasoning: true,
|
|
336
|
+
supportsToolCalling: true,
|
|
337
|
+
costPerInputToken: 0.0000006,
|
|
338
|
+
costPerOutputToken: 0.0000022,
|
|
339
|
+
category: "balanced",
|
|
340
|
+
},
|
|
253
341
|
"openrouter:glm-4.5": {
|
|
254
342
|
id: "openrouter:glm-4.5",
|
|
255
343
|
provider: "openrouter",
|
|
@@ -276,6 +364,19 @@ export const openrouterModelRegistry = {
|
|
|
276
364
|
costPerOutputToken: 0.00001,
|
|
277
365
|
category: "powerful",
|
|
278
366
|
},
|
|
367
|
+
"openrouter:gpt-5-codex": {
|
|
368
|
+
id: "openrouter:gpt-5-codex",
|
|
369
|
+
provider: "openrouter",
|
|
370
|
+
contextWindow: 400000,
|
|
371
|
+
maxOutputTokens: 128000,
|
|
372
|
+
defaultTemperature: -1,
|
|
373
|
+
promptFormat: "xml",
|
|
374
|
+
supportsReasoning: true,
|
|
375
|
+
supportsToolCalling: true,
|
|
376
|
+
costPerInputToken: 0.00000125,
|
|
377
|
+
costPerOutputToken: 0.00001,
|
|
378
|
+
category: "powerful",
|
|
379
|
+
},
|
|
279
380
|
"openrouter:gpt-5-mini": {
|
|
280
381
|
id: "openrouter:gpt-5-mini",
|
|
281
382
|
provider: "openrouter",
|
|
@@ -315,4 +416,17 @@ export const openrouterModelRegistry = {
|
|
|
315
416
|
costPerOutputToken: 0.0000002903936,
|
|
316
417
|
category: "fast",
|
|
317
418
|
},
|
|
419
|
+
"openrouter:grok-4-fast-free": {
|
|
420
|
+
id: "openrouter:grok-4-fast-free",
|
|
421
|
+
provider: "openrouter",
|
|
422
|
+
contextWindow: 2000000,
|
|
423
|
+
maxOutputTokens: 64000,
|
|
424
|
+
defaultTemperature: 0.5,
|
|
425
|
+
promptFormat: "markdown",
|
|
426
|
+
supportsReasoning: true,
|
|
427
|
+
supportsToolCalling: true,
|
|
428
|
+
costPerInputToken: 0,
|
|
429
|
+
costPerOutputToken: 0,
|
|
430
|
+
category: "fast",
|
|
431
|
+
},
|
|
318
432
|
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const providers: readonly ["anthropic", "openai", "google", "deepseek", "openrouter", "xai"];
|
|
1
|
+
export declare const providers: readonly ["anthropic", "openai", "google", "groq", "deepseek", "openrouter", "xai"];
|
|
3
2
|
export type ModelProvider = (typeof providers)[number];
|
|
4
|
-
export declare const models: readonly ("anthropic:opus" | "anthropic:sonnet" | "anthropic:sonnet37" | "anthropic:sonnet37-token-efficient-tools" | "anthropic:sonnet37-128k" | "anthropic:sonnet35" | "anthropic:haiku" | "deepseek:deepseek-chat" | "deepseek:deepseek-reasoner" | "google:flash25lite" | "google:pro25" | "google:flash25" | "
|
|
5
|
-
export type ModelName = (typeof models)[number] | (`xai:${string}` & {}) | (`openai:${string}` & {}) | (`anthropic:${string}` & {}) | (`google:${string}` & {}) | (`deepseek:${string}` & {}) | (`openrouter:${string}` & {});
|
|
3
|
+
export declare const models: readonly ("anthropic:opus" | "anthropic:sonnet" | "anthropic:sonnet37" | "anthropic:sonnet37-token-efficient-tools" | "anthropic:sonnet37-128k" | "anthropic:sonnet35" | "anthropic:haiku" | "deepseek:deepseek-chat" | "deepseek:deepseek-reasoner" | "google:flash25lite" | "google:pro25" | "google:flash25" | "groq:kimi-k2-instruct-0905" | "openai:gpt-4.1" | "openai:o3" | "openai:o4-mini" | "openai:codex-mini" | "openrouter:gpt-4.1" | "openrouter:gpt-5-codex" | "openrouter:gpt-5-mini" | "openrouter:gpt-5" | "openrouter:deepseek-v3" | "openrouter:deepseek-v3-1" | "openrouter:deepseek-r1" | "openrouter:deepseek-v3-free" | "openrouter:deepseek-r1-free" | "openrouter:gemini-flash25" | "openrouter:gemini-pro25" | "openrouter:sonnet4" | "openrouter:sonnet-4.5" | "openrouter:opus4" | "openrouter:opus-4.1" | "openrouter:kimi-k2" | "openrouter:kimi-k2-free" | "openrouter:kimi-k2-0905" | "openrouter:devstral-medium" | "openrouter:qwen3-coder" | "openrouter:qwen3-coder-free" | "openrouter:qwen3-coder-plus" | "openrouter:qwen3-max" | "openrouter:glm-4.6" | "openrouter:glm-4.5" | "openrouter:gpt-oss-120b" | "openrouter:grok-code-fast-1" | "openrouter:grok-4-fast-free" | "xai:grok3" | "xai:grok3-mini")[];
|
|
4
|
+
export type ModelName = (typeof models)[number] | (`xai:${string}` & {}) | (`openai:${string}` & {}) | (`anthropic:${string}` & {}) | (`google:${string}` & {}) | (`groq:${string}` & {}) | (`deepseek:${string}` & {}) | (`openrouter:${string}` & {});
|
|
6
5
|
export declare function isSupportedModel(model: unknown): model is ModelName;
|
|
7
6
|
export declare function languageModel(model: ModelName): import("@ai-sdk/provider").LanguageModelV2;
|
|
8
7
|
export interface ModelMetadata<T = ModelName> {
|
|
@@ -19,7 +18,6 @@ export interface ModelMetadata<T = ModelName> {
|
|
|
19
18
|
category: "fast" | "balanced" | "powerful";
|
|
20
19
|
}
|
|
21
20
|
export declare const modelRegistry: Record<ModelName, ModelMetadata>;
|
|
22
|
-
export declare const ModelSelectionSchema: z.ZodEnum<[string, ...string[]]>;
|
|
23
21
|
export declare function getModelsByProvider(): Record<ModelProvider, ModelMetadata[]>;
|
|
24
22
|
export declare function getModelsById(): Record<ModelName, string>;
|
|
25
23
|
export declare function getModelInfo(modelName: ModelName): ModelMetadata | undefined;
|
|
@@ -31,3 +29,4 @@ export declare function getRecommendedModels(options: {
|
|
|
31
29
|
requiresReasoning?: boolean;
|
|
32
30
|
speedPriority?: boolean;
|
|
33
31
|
}): ModelName[];
|
|
32
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../source/models/providers.ts"],"names":[],"mappings":"AAsCA,eAAO,MAAM,SAAS,qFAQZ,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAYvD,eAAO,MAAM,MAAM,srCAQT,CAAC;AAEX,MAAM,MAAM,SAAS,GACjB,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,GACvB,CAAC,OAAO,MAAM,EAAE,GAAG,EAAE,CAAC,GACtB,CAAC,UAAU,MAAM,EAAE,GAAG,EAAE,CAAC,GACzB,CAAC,aAAa,MAAM,EAAE,GAAG,EAAE,CAAC,GAC5B,CAAC,UAAU,MAAM,EAAE,GAAG,EAAE,CAAC,GACzB,CAAC,QAAQ,MAAM,EAAE,GAAG,EAAE,CAAC,GACvB,CAAC,YAAY,MAAM,EAAE,GAAG,EAAE,CAAC,GAC3B,CAAC,cAAc,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAElC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAYnE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,8CAE7C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,SAAS;IAC1C,EAAE,EAAE,CAAC,CAAC;IACN,QAAQ,EAAE,aAAa,CAAC;IAGxB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;IAC7C,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;CAC5C;AAGD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,CAQ1D,CAAC;AAGF,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAgB5E;AAED,wBAAgB,aAAa,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CASzD;AAGD,wBAAgB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,CAE5E;AAGD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GACzC,aAAa,EAAE,CAIjB;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE5D;AAGD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,SAAS,CAEtE;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,SAAS,EAAE,CAkBd"}
|
package/dist/models/providers.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { isString } from "@travisennis/stdlib/typeguards";
|
|
2
2
|
import { createProviderRegistry } from "ai";
|
|
3
|
-
import { z } from "zod";
|
|
4
3
|
import { anthropicModelNames, anthropicModelRegistry, anthropicProvider, } from "./anthropic-provider.js";
|
|
5
4
|
import { deepseekModelNames, deepseekModelRegistry, deepseekProvider, } from "./deepseek-provider.js";
|
|
6
5
|
import { googleModelNames, googleModelRegistry, googleProvider, } from "./google-provider.js";
|
|
6
|
+
import { groqModelNames, groqModelRegistry, groqProvider, } from "./groq-provider.js";
|
|
7
7
|
import { openaiModelNames, openaiModelRegistry, openaiProvider, } from "./openai-provider.js";
|
|
8
8
|
import { openrouterModelNames, openrouterModelRegistry, openrouterProvider, } from "./openrouter-provider.js";
|
|
9
9
|
import { xaiModelNames, xaiModelRegistry, xaiProvider, } from "./xai-provider.js";
|
|
@@ -11,6 +11,7 @@ export const providers = [
|
|
|
11
11
|
"anthropic",
|
|
12
12
|
"openai",
|
|
13
13
|
"google",
|
|
14
|
+
"groq",
|
|
14
15
|
"deepseek",
|
|
15
16
|
"openrouter",
|
|
16
17
|
"xai",
|
|
@@ -19,6 +20,7 @@ const registry = createProviderRegistry({
|
|
|
19
20
|
...anthropicProvider,
|
|
20
21
|
...deepseekProvider,
|
|
21
22
|
...googleProvider,
|
|
23
|
+
...groqProvider,
|
|
22
24
|
...openaiProvider,
|
|
23
25
|
...openrouterProvider,
|
|
24
26
|
...xaiProvider,
|
|
@@ -27,6 +29,7 @@ export const models = [
|
|
|
27
29
|
...anthropicModelNames,
|
|
28
30
|
...openaiModelNames,
|
|
29
31
|
...googleModelNames,
|
|
32
|
+
...groqModelNames,
|
|
30
33
|
...deepseekModelNames,
|
|
31
34
|
...openrouterModelNames,
|
|
32
35
|
...xaiModelNames,
|
|
@@ -38,6 +41,7 @@ export function isSupportedModel(model) {
|
|
|
38
41
|
model.startsWith("anthropic:") ||
|
|
39
42
|
model.startsWith("openai:") ||
|
|
40
43
|
model.startsWith("google:") ||
|
|
44
|
+
model.startsWith("groq:") ||
|
|
41
45
|
model.startsWith("xai:") ||
|
|
42
46
|
model.startsWith("deepseek:"))));
|
|
43
47
|
}
|
|
@@ -49,18 +53,18 @@ export const modelRegistry = {
|
|
|
49
53
|
...anthropicModelRegistry,
|
|
50
54
|
...openaiModelRegistry,
|
|
51
55
|
...googleModelRegistry,
|
|
56
|
+
...groqModelRegistry,
|
|
52
57
|
...deepseekModelRegistry,
|
|
53
58
|
...openrouterModelRegistry,
|
|
54
59
|
...xaiModelRegistry,
|
|
55
60
|
};
|
|
56
|
-
// Schema for validating model selection
|
|
57
|
-
export const ModelSelectionSchema = z.enum(Object.keys(modelRegistry));
|
|
58
61
|
// Get available models grouped by provider
|
|
59
62
|
export function getModelsByProvider() {
|
|
60
63
|
const result = {
|
|
61
64
|
anthropic: [],
|
|
62
65
|
openai: [],
|
|
63
66
|
google: [],
|
|
67
|
+
groq: [],
|
|
64
68
|
deepseek: [],
|
|
65
69
|
openrouter: [],
|
|
66
70
|
xai: [],
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xai-provider.d.ts","sourceRoot":"","sources":["../../source/models/xai-provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAQpD,QAAA,MAAM,SAAS;;;CAGL,CAAC;AAEX,KAAK,SAAS,GAAG,OAAO,MAAM,OAAO,SAAS,EAAE,CAAC;AAEjD,eAAO,MAAM,aAAa,EAAE,SAAS,EAEpC,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;CAKvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE;KAC5B,CAAC,IAAI,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;CA4B3C,CAAC"}
|
package/dist/parsing.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
export declare function jsonParser<T extends z.ZodTypeAny>(input: T): z.
|
|
2
|
+
export declare function jsonParser<T extends z.ZodTypeAny>(input: T): z.ZodPipe<z.ZodTransform<any, unknown>, T>;
|
|
3
|
+
//# sourceMappingURL=parsing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import type { UserModelMessage } from "ai";
|
|
2
2
|
import { type UserMessageContentItem } from "../messages.ts";
|
|
3
|
-
import type { TokenCounter } from "../
|
|
3
|
+
import type { TokenCounter } from "../tokens/counter.ts";
|
|
4
4
|
export type ContextItem = UserMessageContentItem;
|
|
5
|
-
export
|
|
5
|
+
export interface PromptManagerApi {
|
|
6
|
+
set(prompt: string): void;
|
|
7
|
+
get(): string;
|
|
8
|
+
getUserMessage(): UserModelMessage;
|
|
9
|
+
isPending(): boolean;
|
|
10
|
+
addContext(item: ContextItem): void;
|
|
11
|
+
hasContext(): boolean;
|
|
12
|
+
clearContext(): void;
|
|
13
|
+
clearAll(): void;
|
|
14
|
+
getContextTokenCount(): number;
|
|
15
|
+
}
|
|
16
|
+
export declare class PromptManager implements PromptManagerApi {
|
|
6
17
|
private prompt;
|
|
7
18
|
private context;
|
|
8
19
|
private tokenCounter;
|
|
@@ -18,3 +29,4 @@ export declare class PromptManager {
|
|
|
18
29
|
clearAll(): void;
|
|
19
30
|
getContextTokenCount(): number;
|
|
20
31
|
}
|
|
32
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../source/prompts/manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,gBAAgB,EAAE,MAAM,IAAI,CAAC;AACrD,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,IAAI,MAAM,CAAC;IACd,cAAc,IAAI,gBAAgB,CAAC;IACnC,SAAS,IAAI,OAAO,CAAC;IACrB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACpC,UAAU,IAAI,OAAO,CAAC;IACtB,YAAY,IAAI,IAAI,CAAC;IACrB,QAAQ,IAAI,IAAI,CAAC;IACjB,oBAAoB,IAAI,MAAM,CAAC;CAChC;AAED,qBAAa,aAAc,YAAW,gBAAgB;IACpD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAe;gBAEvB,YAAY,EAAE,YAAY;IAMtC,GAAG,CAAC,MAAM,EAAE,MAAM;IAIlB,GAAG;IAQH,cAAc,IAAI,gBAAgB;IAmBlC,OAAO,CAAC,8BAA8B;IAoBtC,SAAS;IAIT,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAInC,UAAU;IAIV,YAAY;IAIZ,QAAQ;IAKR,oBAAoB,IAAI,MAAM;CAY/B"}
|
package/dist/prompts.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../source/prompts.ts"],"names":[],"mappings":"AAiJA,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE;IAC3C,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,mBAkBA;AAED,wBAAsB,eAAe,oBAYpC"}
|
package/dist/prompts.js
CHANGED
|
@@ -3,11 +3,11 @@ import { platform } from "node:os";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { config } from "./config.js";
|
|
5
5
|
import { dedent } from "./dedent.js";
|
|
6
|
+
import { getShell } from "./terminal/index.js";
|
|
6
7
|
import { AgentTool } from "./tools/agent.js";
|
|
7
8
|
import { BashTool } from "./tools/bash.js";
|
|
8
9
|
import { CodeInterpreterTool } from "./tools/code-interpreter.js";
|
|
9
10
|
import { DeleteFileTool } from "./tools/delete-file.js";
|
|
10
|
-
import { DirectoryTreeTool } from "./tools/directory-tree.js";
|
|
11
11
|
import { EditFileTool } from "./tools/edit-file.js";
|
|
12
12
|
import { getCurrentBranch, inGitDirectory } from "./tools/git-utils.js";
|
|
13
13
|
import { GrepTool } from "./tools/grep.js";
|
|
@@ -33,7 +33,7 @@ async function instructions() {
|
|
|
33
33
|
}
|
|
34
34
|
return `## Core Principles
|
|
35
35
|
|
|
36
|
-
- **CLI-Optimized**: Be concise and direct - responses appear in a terminal.
|
|
36
|
+
- **CLI-Optimized**: Be concise and direct - responses appear in a terminal. Be extremely concise. Sacrifice grammar for the sake of concision.
|
|
37
37
|
- **Progressive Problem Solving**: Work through problems methodically until resolution.
|
|
38
38
|
- **User Authority**: NEVER commit changes or add dependencies without explicit user approval.
|
|
39
39
|
- **Security-First**: Prioritize secure coding practices in all suggestions.
|
|
@@ -66,12 +66,12 @@ function toolUsage() {
|
|
|
66
66
|
return `## Tool Usage Guidelines
|
|
67
67
|
|
|
68
68
|
### Information Gathering
|
|
69
|
-
-
|
|
69
|
+
- Prefer targeted queries: use \`${GrepTool.name}\` for code pattern searches and \`${ReadMultipleFilesTool.name}\` to fetch files. Avoid full directory dumps for large repositories.
|
|
70
70
|
- Use \`${ReadFileTool.name}\` or \`${ReadMultipleFilesTool.name}\` for file contents if filenames are provided in the prompt
|
|
71
71
|
- Use \`${GrepTool.name}\` for code pattern searches
|
|
72
72
|
- Use \`${WebFetchTool.name}\` for text-based URLs provided in the prompt
|
|
73
73
|
- Use \`${WebSearchTool.name}\` for external research (e.g., libraries, errors)
|
|
74
|
-
- Use \`${AgentTool.name}\` for iterative keyword/file searches. Use this if you need to explore the project
|
|
74
|
+
- Use \`${AgentTool.name}\` for iterative keyword/file searches. Use this if you need to explore the project to find what you are looking for.
|
|
75
75
|
- If file contents or URLs are provided in the prompt, use them directly without re-fetching
|
|
76
76
|
- Always verify file contents before suggesting changes unless provided in the prompt
|
|
77
77
|
|
|
@@ -85,16 +85,20 @@ function toolUsage() {
|
|
|
85
85
|
- Outline multi-step tasks before execution
|
|
86
86
|
|
|
87
87
|
### Bash Commands (\`${BashTool.name}\`)
|
|
88
|
-
- Execute
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
|
|
88
|
+
- Execute commands with a sandboxed executor that supports pipes (|), conditional chaining (&&, ||, ;), and redirection (> >> < 2> 2>>).
|
|
89
|
+
- Run single commands or compose multi-step flows using shell operators.
|
|
90
|
+
- For large gh/git messages with newlines:
|
|
91
|
+
1. Create temp file with ${SaveFileTool.name} in the project's .tmp directory
|
|
92
|
+
2. Use git commit --file path/to/temp/file or gh pr create --title "Title of PR" --body-file path/to/temp/file
|
|
93
|
+
- Note: The .tmp directory in the current working directory is deleted each time the agent shuts down.
|
|
94
|
+
- Commands execute only within the project directory; always use absolute paths.
|
|
95
|
+
- Avoid interactive commands; prefer non-interactive flags (e.g., npm init -y).
|
|
92
96
|
|
|
93
97
|
### Code Interpreter (\`${CodeInterpreterTool.name}\`)
|
|
94
98
|
- Executes JavaScript code in a separate Node.js process using Node's Permission Model
|
|
95
99
|
- By default, the child process has no permissions except read/write within the current working directory
|
|
96
100
|
- Returns stdout, stderr, and exitCode
|
|
97
|
-
- Use console.log/console.error to produce
|
|
101
|
+
- Use console.log/console.error to produce output`;
|
|
98
102
|
}
|
|
99
103
|
function escalationProcedures() {
|
|
100
104
|
return `## Escalation
|
|
@@ -120,14 +124,16 @@ async function environmentInfo() {
|
|
|
120
124
|
const gitDirectory = await inGitDirectory();
|
|
121
125
|
let gitSection = `- **Is directory a git repo**: ${gitDirectory ? "Yes" : "No"}`;
|
|
122
126
|
if (gitDirectory) {
|
|
123
|
-
gitSection += `\n- **
|
|
127
|
+
gitSection += `\n- **Current git branch**: ${await getCurrentBranch()}`;
|
|
124
128
|
}
|
|
125
129
|
return `## Environment
|
|
126
130
|
|
|
127
131
|
- **Current working directory**: ${process.cwd()}. [Use this value directly instead of calling the \`${BashTool.name}(pwd)\` tool unless you have a specific reason to verify it].
|
|
128
132
|
${gitSection}
|
|
129
133
|
- **Platform**: ${platform()}
|
|
130
|
-
- **
|
|
134
|
+
- **Shell**: ${getShell()}
|
|
135
|
+
- **Today's date**: ${(new Date()).toISOString()}
|
|
136
|
+
- Note: The .tmp directory in the current working directory is deleted each time the agent shuts down.`;
|
|
131
137
|
}
|
|
132
138
|
export async function systemPrompt(options) {
|
|
133
139
|
const { supportsToolCalling = true } = options ?? {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-tool-messages.d.ts","sourceRoot":"","sources":["../../source/repl/display-tool-messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,QAiC1E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { logger } from "../logger.js";
|
|
2
|
+
import { isMarkdown } from "../terminal/markdown-utils.js";
|
|
3
|
+
import style from "../terminal/style.js";
|
|
4
|
+
export function displayToolMessages(messages, terminal) {
|
|
5
|
+
const isError = messages[messages.length - 1]?.event === "tool-error";
|
|
6
|
+
const indicator = isError ? style.red.bold("●") : style.blue.bold("●");
|
|
7
|
+
const initMessage = messages.find((m) => m.event === "tool-init")?.data ?? "Tool Execution";
|
|
8
|
+
terminal.write(`${indicator} `);
|
|
9
|
+
terminal.writeln(initMessage);
|
|
10
|
+
for (const msg of messages) {
|
|
11
|
+
switch (msg.event) {
|
|
12
|
+
case "tool-update":
|
|
13
|
+
handleToolUpdateMessage(msg.data, terminal);
|
|
14
|
+
break;
|
|
15
|
+
case "tool-completion":
|
|
16
|
+
handleToolCompletionMessage(String(msg.data), terminal);
|
|
17
|
+
break;
|
|
18
|
+
case "tool-error":
|
|
19
|
+
handleToolErrorMessage(String(msg.data), terminal);
|
|
20
|
+
break;
|
|
21
|
+
case "tool-init":
|
|
22
|
+
break;
|
|
23
|
+
default:
|
|
24
|
+
logger.debug(`Unhandled tool message event: ${msg.event}`);
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
terminal.lineBreak();
|
|
29
|
+
}
|
|
30
|
+
function handleToolUpdateMessage(data, terminal) {
|
|
31
|
+
if (data.secondary && data.secondary.length > 0) {
|
|
32
|
+
const content = data.secondary.join("\n");
|
|
33
|
+
if (content.trim().length !== 0) {
|
|
34
|
+
terminal.header(`${data.primary}`);
|
|
35
|
+
if (isMarkdown(content)) {
|
|
36
|
+
terminal.display(content, true);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
terminal.write(style.green(content));
|
|
40
|
+
terminal.lineBreak();
|
|
41
|
+
}
|
|
42
|
+
terminal.hr();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
terminal.header(`${data.primary}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function handleToolCompletionMessage(data, terminal) {
|
|
50
|
+
terminal.display(`└── ${style.bold(data)}`);
|
|
51
|
+
}
|
|
52
|
+
function handleToolErrorMessage(data, terminal) {
|
|
53
|
+
terminal.write("└── ");
|
|
54
|
+
terminal.error(data);
|
|
55
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Terminal } from "../terminal/index.ts";
|
|
2
|
+
interface MinimalStep {
|
|
3
|
+
toolResults: Array<{
|
|
4
|
+
toolName: string;
|
|
5
|
+
}>;
|
|
6
|
+
toolCalls: Array<{
|
|
7
|
+
toolName: string;
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
export declare function displayToolUse(result: {
|
|
11
|
+
steps: MinimalStep[];
|
|
12
|
+
}, terminal: Terminal): void;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=display-tool-use.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-tool-use.d.ts","sourceRoot":"","sources":["../../source/repl/display-tool-use.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrD,UAAU,WAAW;IACnB,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzC,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxC;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,EAChC,QAAQ,EAAE,QAAQ,QA0EnB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import style from "../terminal/style.js";
|
|
2
|
+
export function displayToolUse(result, terminal) {
|
|
3
|
+
const toolsCalled = [];
|
|
4
|
+
const toolColors = new Map();
|
|
5
|
+
const styleColors = [
|
|
6
|
+
"red",
|
|
7
|
+
"green",
|
|
8
|
+
"yellow",
|
|
9
|
+
"blue",
|
|
10
|
+
"magenta",
|
|
11
|
+
"cyan",
|
|
12
|
+
"white",
|
|
13
|
+
"gray",
|
|
14
|
+
"redBright",
|
|
15
|
+
"greenBright",
|
|
16
|
+
"yellowBright",
|
|
17
|
+
"blueBright",
|
|
18
|
+
"magentaBright",
|
|
19
|
+
"cyanBright",
|
|
20
|
+
"whiteBright",
|
|
21
|
+
"blackBright",
|
|
22
|
+
];
|
|
23
|
+
terminal.writeln(style.dim(`Steps: ${result.steps.length}`));
|
|
24
|
+
for (const step of result.steps) {
|
|
25
|
+
let currentToolCalls = [];
|
|
26
|
+
if (step.toolResults.length > 0) {
|
|
27
|
+
currentToolCalls = step.toolResults;
|
|
28
|
+
}
|
|
29
|
+
else if (step.toolCalls.length > 0) {
|
|
30
|
+
currentToolCalls = step.toolCalls;
|
|
31
|
+
}
|
|
32
|
+
for (const toolCallOrResult of currentToolCalls) {
|
|
33
|
+
const toolName = toolCallOrResult.toolName;
|
|
34
|
+
if (!toolColors.has(toolName)) {
|
|
35
|
+
const availableColors = styleColors.filter((color) => !Array.from(toolColors.values()).some((c) => c === style[color]));
|
|
36
|
+
const color = availableColors.length > 0
|
|
37
|
+
? (availableColors[Math.floor(Math.random() * availableColors.length)] ?? "white")
|
|
38
|
+
: "white";
|
|
39
|
+
toolColors.set(toolName, style[color]);
|
|
40
|
+
}
|
|
41
|
+
toolsCalled.push(toolName);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (toolsCalled.length > 0) {
|
|
45
|
+
terminal.lineBreak();
|
|
46
|
+
terminal.writeln(style.dim("Tools:"));
|
|
47
|
+
for (const toolCalled of toolsCalled) {
|
|
48
|
+
const colorFn = toolColors.get(toolCalled) ?? style.white;
|
|
49
|
+
terminal.write(`${colorFn("██")} `);
|
|
50
|
+
}
|
|
51
|
+
terminal.lineBreak();
|
|
52
|
+
const uniqueTools = new Set(toolsCalled);
|
|
53
|
+
for (const [index, toolCalled] of Array.from(uniqueTools).entries()) {
|
|
54
|
+
const colorFn = toolColors.get(toolCalled) ?? style.white;
|
|
55
|
+
terminal.write(colorFn(toolCalled));
|
|
56
|
+
if (index < new Set(toolsCalled).size - 1) {
|
|
57
|
+
terminal.write(" - ");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
terminal.lineBreak();
|
|
61
|
+
terminal.lineBreak();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Terminal } from "../terminal/index.ts";
|
|
2
|
+
export declare function getPromptHeader(args: {
|
|
3
|
+
terminal: Terminal;
|
|
4
|
+
modelId: string;
|
|
5
|
+
contextWindow: number;
|
|
6
|
+
currentContextWindow: number;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=get-prompt-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-prompt-header.d.ts","sourceRoot":"","sources":["../../source/repl/get-prompt-header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAuCrD,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import style from "../terminal/style.js";
|
|
2
|
+
import { getCurrentBranch, getDiffStat, getGitStatus, hasUncommittedChanges, inGitDirectory, } from "../tools/git-utils.js";
|
|
3
|
+
async function getProjectStatusLine() {
|
|
4
|
+
const currentDir = process.cwd().split("/").pop() || process.cwd();
|
|
5
|
+
const branch = await getCurrentBranch();
|
|
6
|
+
let gitStatus = "";
|
|
7
|
+
if (branch) {
|
|
8
|
+
const hasChanges = await hasUncommittedChanges();
|
|
9
|
+
const asterisk = hasChanges ? "*" : "";
|
|
10
|
+
gitStatus = ` ${style.gray(branch + asterisk)}`;
|
|
11
|
+
}
|
|
12
|
+
if (await inGitDirectory()) {
|
|
13
|
+
const stats = await getDiffStat();
|
|
14
|
+
const fileChanges = await getGitStatus();
|
|
15
|
+
let fileStatus = "";
|
|
16
|
+
if (fileChanges.added)
|
|
17
|
+
fileStatus += ` +${fileChanges.added}`;
|
|
18
|
+
if (fileChanges.modified)
|
|
19
|
+
fileStatus += ` ~${fileChanges.modified}`;
|
|
20
|
+
if (fileChanges.deleted)
|
|
21
|
+
fileStatus += ` -${fileChanges.deleted}`;
|
|
22
|
+
if (fileChanges.untracked)
|
|
23
|
+
fileStatus += ` ?${fileChanges.untracked}`;
|
|
24
|
+
gitStatus +=
|
|
25
|
+
" " +
|
|
26
|
+
`${style.dim("[")}${style.yellow(fileStatus.trim())} ` +
|
|
27
|
+
`${style.green(`+${stats.insertions}`)} ` +
|
|
28
|
+
`${style.red(`-${stats.deletions}`)}${style.dim("]")}`;
|
|
29
|
+
}
|
|
30
|
+
return `${style.blue(currentDir)}${gitStatus}`;
|
|
31
|
+
}
|
|
32
|
+
export async function getPromptHeader(args) {
|
|
33
|
+
const { terminal, modelId, contextWindow, currentContextWindow } = args;
|
|
34
|
+
terminal.hr();
|
|
35
|
+
terminal.writeln(await getProjectStatusLine());
|
|
36
|
+
terminal.writeln(style.dim(modelId));
|
|
37
|
+
terminal.displayProgressBar(currentContextWindow, contextWindow);
|
|
38
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ToolCallRepairFunction, type ToolSet } from "ai";
|
|
2
|
+
import type { ModelManager } from "../models/manager.js";
|
|
3
|
+
export declare const toolCallRepair: (modelManager: ModelManager) => ToolCallRepairFunction<ToolSet>;
|
|
4
|
+
//# sourceMappingURL=tool-call-repair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-call-repair.d.ts","sourceRoot":"","sources":["../../source/repl/tool-call-repair.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,OAAO,EACb,MAAM,IAAI,CAAC;AAIZ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoCzD,eAAO,MAAM,cAAc,GAAI,cAAc,YAAY,oCA0CxD,CAAC"}
|