@autonsh/cli 0.18.0 → 0.19.1

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.
Files changed (121) hide show
  1. package/dist/chat.d.ts +1 -1
  2. package/dist/chat.js +177 -119
  3. package/dist/chat.js.map +1 -1
  4. package/dist/completion.d.ts +2 -0
  5. package/dist/completion.js +379 -0
  6. package/dist/completion.js.map +1 -0
  7. package/dist/config-validation.d.ts +10 -0
  8. package/dist/config-validation.js +101 -0
  9. package/dist/config-validation.js.map +1 -0
  10. package/dist/config.d.ts +9 -3
  11. package/dist/config.js +23 -11
  12. package/dist/config.js.map +1 -1
  13. package/dist/doctor.d.ts +18 -0
  14. package/dist/doctor.js +409 -0
  15. package/dist/doctor.js.map +1 -0
  16. package/dist/errors.d.ts +22 -0
  17. package/dist/errors.js +60 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/index.js +62 -64
  20. package/dist/index.js.map +1 -1
  21. package/dist/input.d.ts +43 -0
  22. package/dist/input.js +288 -0
  23. package/dist/input.js.map +1 -0
  24. package/dist/llm/factory.d.ts +5 -0
  25. package/dist/llm/factory.js +54 -0
  26. package/dist/llm/factory.js.map +1 -0
  27. package/dist/llm/index.d.ts +9 -0
  28. package/dist/llm/index.js +11 -0
  29. package/dist/llm/index.js.map +1 -0
  30. package/dist/llm/provider.d.ts +27 -0
  31. package/dist/llm/provider.js +98 -0
  32. package/dist/llm/provider.js.map +1 -0
  33. package/dist/llm/providers/anthropic.d.ts +23 -0
  34. package/dist/llm/providers/anthropic.js +198 -0
  35. package/dist/llm/providers/anthropic.js.map +1 -0
  36. package/dist/llm/providers/google.d.ts +31 -0
  37. package/dist/llm/providers/google.js +190 -0
  38. package/dist/llm/providers/google.js.map +1 -0
  39. package/dist/llm/providers/ollama.d.ts +21 -0
  40. package/dist/llm/providers/ollama.js +157 -0
  41. package/dist/llm/providers/ollama.js.map +1 -0
  42. package/dist/llm/providers/openai-compatible.d.ts +22 -0
  43. package/dist/llm/providers/openai-compatible.js +175 -0
  44. package/dist/llm/providers/openai-compatible.js.map +1 -0
  45. package/dist/llm/providers/openai.d.ts +20 -0
  46. package/dist/llm/providers/openai.js +167 -0
  47. package/dist/llm/providers/openai.js.map +1 -0
  48. package/dist/llm/registry.d.ts +19 -0
  49. package/dist/llm/registry.js +421 -0
  50. package/dist/llm/registry.js.map +1 -0
  51. package/dist/llm/types.d.ts +174 -0
  52. package/dist/llm/types.js +3 -0
  53. package/dist/llm/types.js.map +1 -0
  54. package/dist/login.d.ts +1 -1
  55. package/dist/login.js +14 -14
  56. package/dist/login.js.map +1 -1
  57. package/dist/mcp/client.d.ts +36 -0
  58. package/dist/mcp/client.js +199 -0
  59. package/dist/mcp/client.js.map +1 -0
  60. package/dist/mcp/config.d.ts +10 -0
  61. package/dist/mcp/config.js +43 -0
  62. package/dist/mcp/config.js.map +1 -0
  63. package/dist/mcp/index.d.ts +4 -0
  64. package/dist/mcp/index.js +6 -0
  65. package/dist/mcp/index.js.map +1 -0
  66. package/dist/mcp/types.d.ts +104 -0
  67. package/dist/mcp/types.js +3 -0
  68. package/dist/mcp/types.js.map +1 -0
  69. package/dist/model.d.ts +3 -14
  70. package/dist/model.js +131 -91
  71. package/dist/model.js.map +1 -1
  72. package/dist/ollama.d.ts +10 -0
  73. package/dist/ollama.js +11 -0
  74. package/dist/ollama.js.map +1 -0
  75. package/dist/repomap.d.ts +37 -0
  76. package/dist/repomap.js +431 -0
  77. package/dist/repomap.js.map +1 -0
  78. package/dist/skills/index.d.ts +3 -0
  79. package/dist/skills/index.js +5 -0
  80. package/dist/skills/index.js.map +1 -0
  81. package/dist/skills/registry.d.ts +16 -0
  82. package/dist/skills/registry.js +128 -0
  83. package/dist/skills/registry.js.map +1 -0
  84. package/dist/skills/types.d.ts +48 -0
  85. package/dist/skills/types.js +3 -0
  86. package/dist/skills/types.js.map +1 -0
  87. package/dist/statusline.d.ts +21 -0
  88. package/dist/statusline.js +69 -0
  89. package/dist/statusline.js.map +1 -0
  90. package/dist/streaming.d.ts +25 -0
  91. package/dist/streaming.js +94 -0
  92. package/dist/streaming.js.map +1 -0
  93. package/dist/theme.d.ts +54 -0
  94. package/dist/theme.js +115 -0
  95. package/dist/theme.js.map +1 -0
  96. package/dist/tools/builtin.d.ts +11 -0
  97. package/dist/tools/builtin.js +491 -0
  98. package/dist/tools/builtin.js.map +1 -0
  99. package/dist/tools/index.d.ts +3 -0
  100. package/dist/tools/index.js +5 -0
  101. package/dist/tools/index.js.map +1 -0
  102. package/dist/tools/types.d.ts +186 -0
  103. package/dist/tools/types.js +29 -0
  104. package/dist/tools/types.js.map +1 -0
  105. package/dist/ui.d.ts +5 -0
  106. package/dist/ui.js +50 -83
  107. package/dist/ui.js.map +1 -1
  108. package/dist/verbose.d.ts +20 -0
  109. package/dist/verbose.js +75 -0
  110. package/dist/verbose.js.map +1 -0
  111. package/package.json +13 -2
  112. package/templates/api-json/task.yaml +0 -2
  113. package/templates/coding/task.yaml +1 -1
  114. package/templates/cron-digester/task.yaml +0 -2
  115. package/templates/harness/task.yaml +0 -11
  116. package/templates/multi-agent/agent.ts +7 -8
  117. package/templates/multi-agent/task.yaml +1 -3
  118. package/templates/research/task.yaml +0 -28
  119. package/templates/support/task.yaml +0 -2
  120. package/templates/webhook-echo/task.yaml +0 -2
  121. package/templates/with-approval/task.yaml +0 -2
@@ -0,0 +1,198 @@
1
+ // anthropic.ts — Anthropic provider
2
+ import { BaseProvider } from "../provider.js";
3
+ export class AnthropicProvider extends BaseProvider {
4
+ defaultBaseUrl() {
5
+ return "https://api.anthropic.com/v1";
6
+ }
7
+ chatCompletionsEndpoint() {
8
+ return `${this.baseUrl}/messages`;
9
+ }
10
+ modelsEndpoint() {
11
+ return `${this.baseUrl}/models`;
12
+ }
13
+ async buildHeaders() {
14
+ const headers = await super.buildHeaders();
15
+ headers.set("anthropic-version", "2023-06-01");
16
+ headers.set("anthropic-beta", "prompt-caching-2024-07-31");
17
+ return headers;
18
+ }
19
+ buildRequestBody(request, stream) {
20
+ const messages = this.buildMessages(request).filter((m) => m.role !== "system");
21
+ const tools = this.mapTools(request);
22
+ const body = {
23
+ model: request.model || this.model,
24
+ messages,
25
+ stream,
26
+ max_tokens: request.generation?.maxTokens ?? this.maxTokens ?? 4096,
27
+ };
28
+ if (request.system)
29
+ body.system = request.system;
30
+ if (tools?.length)
31
+ body.tools = tools;
32
+ if (request.toolChoice)
33
+ body.tool_choice = this.mapToolChoice(request.toolChoice);
34
+ if (request.generation) {
35
+ const gen = request.generation;
36
+ if (gen.temperature !== undefined)
37
+ body.temperature = gen.temperature;
38
+ if (gen.topP !== undefined)
39
+ body.top_p = gen.topP;
40
+ if (gen.stopSequences?.length)
41
+ body.stop_sequences = gen.stopSequences;
42
+ if (gen.reasoningEffort)
43
+ body.thinking = { type: "enabled", budget_tokens: this.reasoningBudget(gen.reasoningEffort) };
44
+ }
45
+ if (request.providerOptions?.anthropic) {
46
+ Object.assign(body, request.providerOptions.anthropic);
47
+ }
48
+ return body;
49
+ }
50
+ mapToolChoice(choice) {
51
+ if (choice === "auto")
52
+ return { type: "auto" };
53
+ if (choice === "none")
54
+ return { type: "none" };
55
+ if (typeof choice === "object" && choice.type === "function") {
56
+ return { type: "tool", name: choice.function.name };
57
+ }
58
+ return { type: "auto" };
59
+ }
60
+ reasoningBudget(effort) {
61
+ const budgets = {
62
+ minimal: 1024,
63
+ low: 2048,
64
+ medium: 4096,
65
+ high: 8192,
66
+ xhigh: 16384,
67
+ max: 24576,
68
+ ultra: 32768,
69
+ };
70
+ return budgets[effort] ?? 4096;
71
+ }
72
+ parseResponse(data) {
73
+ const content = data.content ?? [];
74
+ const usage = this.mapUsage(data);
75
+ let textContent = "";
76
+ const toolCalls = [];
77
+ for (const block of content) {
78
+ if (block.type === "text")
79
+ textContent += block.text;
80
+ else if (block.type === "tool_use") {
81
+ toolCalls.push({
82
+ id: block.id,
83
+ type: "function",
84
+ function: { name: block.name, arguments: JSON.stringify(block.input) },
85
+ });
86
+ }
87
+ }
88
+ return {
89
+ id: data.id ?? crypto.randomUUID(),
90
+ model: data.model ?? this.model,
91
+ content: toolCalls.length > 0 ? toolCalls : textContent,
92
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
93
+ usage,
94
+ stopReason: this.mapStopReason(data),
95
+ costUsd: this.estimateCost(usage),
96
+ };
97
+ }
98
+ parseStreamChunk(data) {
99
+ const lines = String(data)
100
+ .split("\n")
101
+ .filter((l) => l.startsWith("event:") || l.startsWith("data:"));
102
+ const chunks = [];
103
+ let eventType = "";
104
+ for (const line of lines) {
105
+ if (line.startsWith("event:")) {
106
+ eventType = line.slice(6).trim();
107
+ continue;
108
+ }
109
+ if (line.startsWith("data:")) {
110
+ try {
111
+ const parsed = JSON.parse(line.slice(5).trim());
112
+ switch (eventType) {
113
+ case "content_block_delta":
114
+ if (parsed.delta?.type === "text_delta") {
115
+ chunks.push({ type: "content", content: parsed.delta.text });
116
+ }
117
+ else if (parsed.delta?.type === "input_json_delta") {
118
+ chunks.push({ type: "tool_call_delta", toolCallDelta: { index: parsed.index, arguments: parsed.delta.partial_json } });
119
+ }
120
+ break;
121
+ case "content_block_start":
122
+ if (parsed.content_block?.type === "tool_use") {
123
+ chunks.push({
124
+ type: "tool_call",
125
+ toolCall: {
126
+ id: parsed.content_block.id,
127
+ type: "function",
128
+ function: { name: parsed.content_block.name, arguments: "" },
129
+ },
130
+ });
131
+ }
132
+ break;
133
+ case "message_delta":
134
+ if (parsed.usage)
135
+ chunks.push({ type: "usage", usage: this.mapUsage(parsed) });
136
+ if (parsed.delta?.stop_reason)
137
+ chunks.push({ type: "complete", stopReason: parsed.delta.stop_reason });
138
+ break;
139
+ case "message_stop":
140
+ chunks.push({ type: "complete" });
141
+ break;
142
+ }
143
+ }
144
+ catch {
145
+ // ignore
146
+ }
147
+ eventType = "";
148
+ }
149
+ }
150
+ return chunks;
151
+ }
152
+ buildMessages(request) {
153
+ const messages = [];
154
+ if (request.system) {
155
+ messages.push({ role: "system", content: request.system });
156
+ }
157
+ for (const msg of request.messages) {
158
+ messages.push(this.mapMessage(msg));
159
+ }
160
+ return messages;
161
+ }
162
+ mapMessage(msg) {
163
+ if (typeof msg.content === "string") {
164
+ return { role: msg.role, content: msg.content };
165
+ }
166
+ return { role: msg.role, content: msg.content };
167
+ }
168
+ mapTools(request) {
169
+ if (!request.tools?.length)
170
+ return undefined;
171
+ return request.tools.map((t) => ({
172
+ type: "function",
173
+ function: { name: t.name, description: t.description, parameters: t.parameters },
174
+ }));
175
+ }
176
+ mapUsage(data) {
177
+ const u = data.usage;
178
+ return {
179
+ inputTokens: u?.input_tokens ?? 0,
180
+ outputTokens: u?.output_tokens ?? 0,
181
+ cachedInputTokens: u?.cache_read_input_tokens ?? 0,
182
+ cacheWriteTokens: u?.cache_creation_input_tokens ?? 0,
183
+ totalTokens: (u?.input_tokens ?? 0) + (u?.output_tokens ?? 0),
184
+ };
185
+ }
186
+ mapStopReason(data) {
187
+ return data?.stop_reason ?? "end_turn";
188
+ }
189
+ estimateCost(usage) {
190
+ const inputRate = 3.00;
191
+ const outputRate = 15.00;
192
+ return (usage.inputTokens / 1e6) * inputRate + (usage.outputTokens / 1e6) * outputRate;
193
+ }
194
+ }
195
+ export function createAnthropicProvider(config) {
196
+ return new AnthropicProvider(config);
197
+ }
198
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/llm/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { BaseProvider } from "../provider.js";
2
+ import type { ProviderConfig, LLMRequest, LLMResponse, StreamChunk, Usage } from "../types.js";
3
+ export declare class GoogleProvider extends BaseProvider {
4
+ protected defaultBaseUrl(): string;
5
+ protected chatCompletionsEndpoint(): string;
6
+ protected modelsEndpoint(): string;
7
+ protected buildHeaders(): Promise<Headers>;
8
+ protected buildRequestBody(request: LLMRequest, stream: boolean): object;
9
+ protected buildContents(request: LLMRequest): object[];
10
+ protected mapContentPart(part: {
11
+ type: string;
12
+ text?: string;
13
+ imageUrl?: {
14
+ url: string;
15
+ };
16
+ toolResult?: {
17
+ toolCallId: string;
18
+ content: string | object;
19
+ isError?: boolean;
20
+ };
21
+ }): object;
22
+ protected mapToolsGemini(request: LLMRequest): object[];
23
+ protected mapToolChoice(choice: LLMRequest["toolChoice"]): object;
24
+ protected buildGenerationConfig(gen?: LLMRequest["generation"]): object;
25
+ protected parseResponse(data: unknown): LLMResponse;
26
+ protected parseStreamChunk(data: unknown): StreamChunk[];
27
+ protected mapUsage(data: unknown): Usage;
28
+ protected mapStopReason(reason?: string): LLMResponse["stopReason"];
29
+ private estimateCost;
30
+ }
31
+ export declare function createGoogleProvider(config: ProviderConfig): GoogleProvider;
@@ -0,0 +1,190 @@
1
+ // google.ts — Google Gemini provider
2
+ import { BaseProvider } from "../provider.js";
3
+ export class GoogleProvider extends BaseProvider {
4
+ defaultBaseUrl() {
5
+ return "https://generativelanguage.googleapis.com/v1beta";
6
+ }
7
+ chatCompletionsEndpoint() {
8
+ const key = this.apiKey ? `?key=${this.apiKey}` : "";
9
+ return `${this.baseUrl}/models/${this.model}:generateContent${key}`;
10
+ }
11
+ modelsEndpoint() {
12
+ const key = this.apiKey ? `?key=${this.apiKey}` : "";
13
+ return `${this.baseUrl}/models${key}`;
14
+ }
15
+ async buildHeaders() {
16
+ const headers = new Headers({ "Content-Type": "application/json" });
17
+ for (const [k, v] of Object.entries(this.customHeaders))
18
+ headers.set(k, v);
19
+ return headers;
20
+ }
21
+ buildRequestBody(request, stream) {
22
+ const contents = this.buildContents(request);
23
+ const tools = this.mapToolsGemini(request);
24
+ const body = {
25
+ contents,
26
+ generationConfig: this.buildGenerationConfig(request.generation),
27
+ };
28
+ if (tools?.length)
29
+ body.tools = [{ functionDeclarations: tools }];
30
+ if (request.toolChoice)
31
+ body.toolConfig = this.mapToolChoice(request.toolChoice);
32
+ if (request.system)
33
+ body.systemInstruction = { parts: [{ text: request.system }] };
34
+ return body;
35
+ }
36
+ buildContents(request) {
37
+ const contents = [];
38
+ for (const msg of request.messages) {
39
+ if (msg.role === "system")
40
+ continue;
41
+ if (typeof msg.content === "string") {
42
+ contents.push({ role: msg.role === "assistant" ? "model" : "user", parts: [{ text: msg.content }] });
43
+ }
44
+ else {
45
+ const parts = msg.content.map((p) => this.mapContentPart(p));
46
+ contents.push({ role: msg.role === "assistant" ? "model" : "user", parts });
47
+ }
48
+ }
49
+ return contents;
50
+ }
51
+ mapContentPart(part) {
52
+ if (part.type === "text")
53
+ return { text: part.text };
54
+ if (part.type === "image" && part.imageUrl)
55
+ return { inlineData: { mimeType: "image/png", data: part.imageUrl.url } };
56
+ if (part.type === "tool_result" && part.toolResult) {
57
+ return {
58
+ functionResponse: {
59
+ name: part.toolResult.toolCallId,
60
+ response: { content: part.toolResult.content },
61
+ },
62
+ };
63
+ }
64
+ return { text: JSON.stringify(part) };
65
+ }
66
+ mapToolsGemini(request) {
67
+ if (!request.tools?.length)
68
+ return [];
69
+ return request.tools.map((t) => ({
70
+ name: t.name,
71
+ description: t.description,
72
+ parameters: t.parameters,
73
+ }));
74
+ }
75
+ mapToolChoice(choice) {
76
+ if (choice === "none")
77
+ return { functionCallingConfig: { mode: "NONE" } };
78
+ if (choice === "auto")
79
+ return { functionCallingConfig: { mode: "AUTO" } };
80
+ if (typeof choice === "object") {
81
+ return { functionCallingConfig: { mode: "ANY", allowedFunctionNames: [choice.function.name] } };
82
+ }
83
+ return { functionCallingConfig: { mode: "AUTO" } };
84
+ }
85
+ buildGenerationConfig(gen) {
86
+ if (!gen)
87
+ return {};
88
+ const config = {};
89
+ if (gen.temperature !== undefined)
90
+ config.temperature = gen.temperature;
91
+ if (gen.topP !== undefined)
92
+ config.topP = gen.topP;
93
+ if (gen.topK !== undefined)
94
+ config.topK = gen.topK;
95
+ if (gen.maxTokens !== undefined)
96
+ config.maxOutputTokens = gen.maxTokens;
97
+ if (gen.stopSequences?.length)
98
+ config.stopSequences = gen.stopSequences;
99
+ if (gen.responseFormat && typeof gen.responseFormat === "object" && "type" in gen.responseFormat && gen.responseFormat.type === "json")
100
+ config.responseMimeType = "application/json";
101
+ return config;
102
+ }
103
+ parseResponse(data) {
104
+ const candidate = data.candidates?.[0];
105
+ const content = candidate?.content?.parts ?? [];
106
+ const usage = this.mapUsage(data);
107
+ let textContent = "";
108
+ const toolCalls = [];
109
+ for (const part of content) {
110
+ if (part.text)
111
+ textContent += part.text;
112
+ else if (part.functionCall) {
113
+ toolCalls.push({
114
+ id: crypto.randomUUID(),
115
+ type: "function",
116
+ function: { name: part.functionCall.name, arguments: JSON.stringify(part.functionCall.args) },
117
+ });
118
+ }
119
+ }
120
+ return {
121
+ id: data.id ?? crypto.randomUUID(),
122
+ model: this.model,
123
+ content: toolCalls.length > 0 ? toolCalls : textContent,
124
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
125
+ usage,
126
+ stopReason: this.mapStopReason(candidate?.finishReason),
127
+ costUsd: this.estimateCost(usage),
128
+ };
129
+ }
130
+ parseStreamChunk(data) {
131
+ const chunks = [];
132
+ try {
133
+ const parsed = data;
134
+ const candidate = parsed.candidates?.[0];
135
+ if (!candidate)
136
+ return chunks;
137
+ const content = candidate.content?.parts ?? [];
138
+ for (const part of content) {
139
+ if (part.text)
140
+ chunks.push({ type: "content", content: part.text });
141
+ if (part.functionCall) {
142
+ chunks.push({
143
+ type: "tool_call",
144
+ toolCall: {
145
+ id: crypto.randomUUID(),
146
+ type: "function",
147
+ function: { name: part.functionCall.name, arguments: JSON.stringify(part.functionCall.args) },
148
+ },
149
+ });
150
+ }
151
+ }
152
+ if (parsed.usageMetadata)
153
+ chunks.push({ type: "usage", usage: this.mapUsage(parsed) });
154
+ if (candidate.finishReason)
155
+ chunks.push({ type: "complete", stopReason: this.mapStopReason(candidate.finishReason) });
156
+ }
157
+ catch {
158
+ // ignore
159
+ }
160
+ return chunks;
161
+ }
162
+ mapUsage(data) {
163
+ const u = data.usageMetadata;
164
+ return {
165
+ inputTokens: u?.promptTokenCount ?? 0,
166
+ outputTokens: u?.candidatesTokenCount ?? 0,
167
+ cachedInputTokens: u?.cachedContentTokenCount ?? 0,
168
+ totalTokens: u?.totalTokenCount ?? 0,
169
+ };
170
+ }
171
+ mapStopReason(reason) {
172
+ const map = {
173
+ STOP: "end_turn",
174
+ MAX_TOKENS: "max_tokens",
175
+ SAFETY: "stop_sequence",
176
+ RECITATION: "stop_sequence",
177
+ FINISH_REASON_UNSPECIFIED: "end_turn",
178
+ };
179
+ return map[reason ?? ""] ?? "end_turn";
180
+ }
181
+ estimateCost(usage) {
182
+ const inputRate = 0.35;
183
+ const outputRate = 1.05;
184
+ return (usage.inputTokens / 1e6) * inputRate + (usage.outputTokens / 1e6) * outputRate;
185
+ }
186
+ }
187
+ export function createGoogleProvider(config) {
188
+ return new GoogleProvider(config);
189
+ }
190
+ //# sourceMappingURL=google.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/llm/providers/google.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU9C,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC3B,cAAc;QAC/B,OAAO,kDAAkD,CAAC;IAC5D,CAAC;IAEkB,uBAAuB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC,OAAO,WAAW,IAAI,CAAC,KAAK,mBAAmB,GAAG,EAAE,CAAC;IACtE,CAAC;IAEkB,cAAc;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC,OAAO,UAAU,GAAG,EAAE,CAAC;IACxC,CAAC;IAEkB,KAAK,CAAC,YAAY;QACnC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,OAAO,CAAC;IACjB,CAAC;IAEkB,gBAAgB,CAAC,OAAmB,EAAE,MAAe;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,IAAI,GAA4B;YACpC,QAAQ;YACR,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,UAAU,CAAC;SACjE,CAAC;QAEF,IAAI,KAAK,EAAE,MAAM;YAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACjF,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,iBAAiB,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QAEnF,OAAO,IAAI,CAAC;IACd,CAAC;IAES,aAAa,CAAC,OAAmB;QACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACpC,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YACvG,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAES,cAAc,CAAC,IAAmJ;QAC1K,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QACtH,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnD,OAAO;gBACL,gBAAgB,EAAE;oBAChB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;oBAChC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;iBAC/C;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IACxC,CAAC;IAES,cAAc,CAAC,OAAmB;QAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC,CAAC;IACN,CAAC;IAES,aAAa,CAAC,MAAgC;QACtD,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;QAC1E,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;QAC1E,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAClG,CAAC;QACD,OAAO,EAAE,qBAAqB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACrD,CAAC;IAES,qBAAqB,CAAC,GAA8B;QAC5D,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;YAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QACxE,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACnD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACnD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;YAAE,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,SAAS,CAAC;QACxE,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM;YAAE,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;QACxE,IAAI,GAAG,CAAC,cAAc,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,CAAC,cAAc,IAAK,GAAG,CAAC,cAAsB,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;QAC9L,OAAO,MAAM,CAAC;IAChB,CAAC;IAEkB,aAAa,CAAC,IAAa;QAC5C,MAAM,SAAS,GAAI,IAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,SAAS,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,MAAM,SAAS,GAAe,EAAE,CAAC;QAEjC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI;gBAAE,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC;iBACnC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC3B,SAAS,CAAC,IAAI,CAAC;oBACb,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;oBACvB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;iBAC9F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;YACL,EAAE,EAAG,IAAY,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YACvD,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACvD,KAAK;YACL,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC;YACvD,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;SAClC,CAAC;IACJ,CAAC;IAEkB,gBAAgB,CAAC,IAAa;QAC/C,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAW,CAAC;YAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,SAAS;gBAAE,OAAO,MAAM,CAAC;YAE9B,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,IAAI;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,WAAW;wBACjB,QAAQ,EAAE;4BACR,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;4BACvB,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;yBAC9F;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,aAAa;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvF,IAAI,SAAS,CAAC,YAAY;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,QAAQ,CAAC,IAAa;QAC9B,MAAM,CAAC,GAAI,IAAY,CAAC,aAAa,CAAC;QACtC,OAAO;YACL,WAAW,EAAE,CAAC,EAAE,gBAAgB,IAAI,CAAC;YACrC,YAAY,EAAE,CAAC,EAAE,oBAAoB,IAAI,CAAC;YAC1C,iBAAiB,EAAE,CAAC,EAAE,uBAAuB,IAAI,CAAC;YAClD,WAAW,EAAE,CAAC,EAAE,eAAe,IAAI,CAAC;SACrC,CAAC;IACJ,CAAC;IAES,aAAa,CAAC,MAAe;QACrC,MAAM,GAAG,GAA8C;YACrD,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,YAAY;YACxB,MAAM,EAAE,eAAe;YACvB,UAAU,EAAE,eAAe;YAC3B,yBAAyB,EAAE,UAAU;SACtC,CAAC;QACF,OAAO,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC;IACzC,CAAC;IAEO,YAAY,CAAC,KAAY;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC;IACzF,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { BaseProvider } from "../provider.js";
2
+ import type { ProviderConfig, LLMRequest, LLMResponse, StreamChunk, Usage } from "../types.js";
3
+ export declare class OllamaProvider extends BaseProvider {
4
+ protected defaultBaseUrl(): string;
5
+ protected chatCompletionsEndpoint(): string;
6
+ protected modelsEndpoint(): string;
7
+ protected buildHeaders(): Promise<Headers>;
8
+ protected buildRequestBody(request: LLMRequest, stream: boolean): object;
9
+ protected mapOllamaMessage(msg: any): object;
10
+ protected buildOptions(gen?: LLMRequest["generation"]): object;
11
+ protected parseResponse(data: unknown): LLMResponse;
12
+ protected parseStreamChunk(data: unknown): StreamChunk[];
13
+ protected buildMessages(request: LLMRequest): object[];
14
+ protected mapMessage(msg: {
15
+ role: string;
16
+ content: string | object[];
17
+ }): object;
18
+ protected mapTools(request: LLMRequest): object[] | undefined;
19
+ protected mapUsage(data: unknown): Usage;
20
+ }
21
+ export declare function createOllamaProvider(config: ProviderConfig): OllamaProvider;
@@ -0,0 +1,157 @@
1
+ // ollama.ts — Local Ollama provider
2
+ import { BaseProvider } from "../provider.js";
3
+ export class OllamaProvider extends BaseProvider {
4
+ defaultBaseUrl() {
5
+ return process.env.OLLAMA_API ?? "http://localhost:11434";
6
+ }
7
+ chatCompletionsEndpoint() {
8
+ return `${this.baseUrl}/api/chat`;
9
+ }
10
+ modelsEndpoint() {
11
+ return `${this.baseUrl}/api/tags`;
12
+ }
13
+ async buildHeaders() {
14
+ return new Headers({ "Content-Type": "application/json" });
15
+ }
16
+ buildRequestBody(request, stream) {
17
+ const messages = this.buildMessages(request).map((m) => this.mapOllamaMessage(m));
18
+ const tools = this.mapTools(request);
19
+ const body = {
20
+ model: request.model || this.model,
21
+ messages,
22
+ stream,
23
+ options: this.buildOptions(request.generation),
24
+ };
25
+ if (tools?.length) {
26
+ body.tools = tools.map((t) => ({
27
+ type: "function",
28
+ function: t.function,
29
+ }));
30
+ }
31
+ return body;
32
+ }
33
+ mapOllamaMessage(msg) {
34
+ if (typeof msg.content === "string") {
35
+ return { role: msg.role, content: msg.content };
36
+ }
37
+ const text = msg.content
38
+ .filter((p) => p.type === "text")
39
+ .map((p) => p.text)
40
+ .join("\n");
41
+ return { role: msg.role, content: text };
42
+ }
43
+ buildOptions(gen) {
44
+ if (!gen)
45
+ return {};
46
+ const opts = {};
47
+ if (gen.temperature !== undefined)
48
+ opts.temperature = gen.temperature;
49
+ if (gen.topP !== undefined)
50
+ opts.top_p = gen.topP;
51
+ if (gen.topK !== undefined)
52
+ opts.top_k = gen.topK;
53
+ if (gen.maxTokens !== undefined)
54
+ opts.num_predict = gen.maxTokens;
55
+ if (gen.stopSequences?.length)
56
+ opts.stop = gen.stopSequences;
57
+ return opts;
58
+ }
59
+ parseResponse(data) {
60
+ const message = data.message;
61
+ const usage = this.mapUsage(data);
62
+ let content = message?.content ?? "";
63
+ const toolCalls = [];
64
+ if (message?.tool_calls) {
65
+ for (const tc of message.tool_calls) {
66
+ toolCalls.push({
67
+ id: tc.id ?? crypto.randomUUID(),
68
+ type: "function",
69
+ function: { name: tc.function.name, arguments: JSON.stringify(tc.function.arguments) },
70
+ });
71
+ }
72
+ content = toolCalls.map((tc) => ({
73
+ type: "tool_result",
74
+ toolResult: { toolCallId: tc.id, content: tc.function.arguments },
75
+ }));
76
+ }
77
+ return {
78
+ id: data.id ?? crypto.randomUUID(),
79
+ model: data.model ?? this.model,
80
+ content,
81
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
82
+ usage,
83
+ stopReason: data.done ? "end_turn" : "max_tokens",
84
+ costUsd: 0,
85
+ };
86
+ }
87
+ parseStreamChunk(data) {
88
+ const chunks = [];
89
+ try {
90
+ const lines = String(data).split("\n").filter((l) => l.trim());
91
+ for (const line of lines) {
92
+ const parsed = JSON.parse(line);
93
+ if (parsed.message?.content) {
94
+ chunks.push({ type: "content", content: parsed.message.content });
95
+ }
96
+ if (parsed.message?.tool_calls) {
97
+ for (const tc of parsed.message.tool_calls) {
98
+ chunks.push({
99
+ type: "tool_call",
100
+ toolCall: {
101
+ id: tc.id ?? crypto.randomUUID(),
102
+ type: "function",
103
+ function: { name: tc.function.name, arguments: JSON.stringify(tc.function.arguments) },
104
+ },
105
+ });
106
+ }
107
+ }
108
+ if (parsed.done) {
109
+ chunks.push({ type: "complete", stopReason: "end_turn" });
110
+ if (parsed.prompt_eval_count || parsed.eval_count) {
111
+ chunks.push({ type: "usage", usage: this.mapUsage(parsed) });
112
+ }
113
+ }
114
+ }
115
+ }
116
+ catch {
117
+ // ignore parse errors
118
+ }
119
+ return chunks;
120
+ }
121
+ buildMessages(request) {
122
+ const messages = [];
123
+ if (request.system) {
124
+ messages.push({ role: "system", content: request.system });
125
+ }
126
+ for (const msg of request.messages) {
127
+ messages.push(this.mapOllamaMessage(msg));
128
+ }
129
+ return messages;
130
+ }
131
+ mapMessage(msg) {
132
+ if (typeof msg.content === "string") {
133
+ return { role: msg.role, content: msg.content };
134
+ }
135
+ return { role: msg.role, content: msg.content };
136
+ }
137
+ mapTools(request) {
138
+ if (!request.tools?.length)
139
+ return undefined;
140
+ return request.tools.map((t) => ({
141
+ type: "function",
142
+ function: { name: t.name, description: t.description, parameters: t.parameters },
143
+ }));
144
+ }
145
+ mapUsage(data) {
146
+ const d = data;
147
+ return {
148
+ inputTokens: d.prompt_eval_count ?? 0,
149
+ outputTokens: d.eval_count ?? 0,
150
+ totalTokens: (d.prompt_eval_count ?? 0) + (d.eval_count ?? 0),
151
+ };
152
+ }
153
+ }
154
+ export function createOllamaProvider(config) {
155
+ return new OllamaProvider(config);
156
+ }
157
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/llm/providers/ollama.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { BaseProvider } from "../provider.js";
2
+ import type { ProviderConfig, LLMRequest, LLMResponse, StreamChunk, Usage } from "../types.js";
3
+ export declare class OpenAICompatibleProvider extends BaseProvider {
4
+ readonly disablePromptCacheKey: boolean;
5
+ constructor(config: ProviderConfig);
6
+ protected defaultBaseUrl(): string;
7
+ protected chatCompletionsEndpoint(): string;
8
+ protected modelsEndpoint(): string;
9
+ protected buildRequestBody(request: LLMRequest, stream: boolean): object;
10
+ protected parseResponse(data: unknown): LLMResponse;
11
+ protected parseStreamChunk(data: unknown): StreamChunk[];
12
+ protected buildMessages(request: LLMRequest): object[];
13
+ protected mapMessage(msg: {
14
+ role: string;
15
+ content: string | object[];
16
+ }): object;
17
+ protected mapTools(request: LLMRequest): object[] | undefined;
18
+ protected mapUsage(data: unknown): Usage;
19
+ protected mapStopReason(data: unknown): LLMResponse["stopReason"];
20
+ private estimateCost;
21
+ }
22
+ export declare function createOpenAICompatibleProvider(config: ProviderConfig): OpenAICompatibleProvider;