@antaif3ng/til-work 0.1.0

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 (150) hide show
  1. package/README.md +573 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +7 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/core/agent.d.ts +78 -0
  7. package/dist/core/agent.d.ts.map +1 -0
  8. package/dist/core/agent.js +372 -0
  9. package/dist/core/agent.js.map +1 -0
  10. package/dist/core/compaction.d.ts +40 -0
  11. package/dist/core/compaction.d.ts.map +1 -0
  12. package/dist/core/compaction.js +228 -0
  13. package/dist/core/compaction.js.map +1 -0
  14. package/dist/core/config.d.ts +54 -0
  15. package/dist/core/config.d.ts.map +1 -0
  16. package/dist/core/config.js +257 -0
  17. package/dist/core/config.js.map +1 -0
  18. package/dist/core/llm.d.ts +29 -0
  19. package/dist/core/llm.d.ts.map +1 -0
  20. package/dist/core/llm.js +553 -0
  21. package/dist/core/llm.js.map +1 -0
  22. package/dist/core/markdown.d.ts +20 -0
  23. package/dist/core/markdown.d.ts.map +1 -0
  24. package/dist/core/markdown.js +173 -0
  25. package/dist/core/markdown.js.map +1 -0
  26. package/dist/core/memory.d.ts +30 -0
  27. package/dist/core/memory.d.ts.map +1 -0
  28. package/dist/core/memory.js +163 -0
  29. package/dist/core/memory.js.map +1 -0
  30. package/dist/core/pricing.d.ts +21 -0
  31. package/dist/core/pricing.d.ts.map +1 -0
  32. package/dist/core/pricing.js +70 -0
  33. package/dist/core/pricing.js.map +1 -0
  34. package/dist/core/session-manager.d.ts +83 -0
  35. package/dist/core/session-manager.d.ts.map +1 -0
  36. package/dist/core/session-manager.js +250 -0
  37. package/dist/core/session-manager.js.map +1 -0
  38. package/dist/core/session.d.ts +76 -0
  39. package/dist/core/session.d.ts.map +1 -0
  40. package/dist/core/session.js +270 -0
  41. package/dist/core/session.js.map +1 -0
  42. package/dist/core/skills.d.ts +49 -0
  43. package/dist/core/skills.d.ts.map +1 -0
  44. package/dist/core/skills.js +232 -0
  45. package/dist/core/skills.js.map +1 -0
  46. package/dist/core/system-prompt.d.ts +17 -0
  47. package/dist/core/system-prompt.d.ts.map +1 -0
  48. package/dist/core/system-prompt.js +77 -0
  49. package/dist/core/system-prompt.js.map +1 -0
  50. package/dist/core/tool-permissions.d.ts +12 -0
  51. package/dist/core/tool-permissions.d.ts.map +1 -0
  52. package/dist/core/tool-permissions.js +71 -0
  53. package/dist/core/tool-permissions.js.map +1 -0
  54. package/dist/core/types.d.ts +157 -0
  55. package/dist/core/types.d.ts.map +1 -0
  56. package/dist/core/types.js +21 -0
  57. package/dist/core/types.js.map +1 -0
  58. package/dist/extensions/builtin/mcp.d.ts +61 -0
  59. package/dist/extensions/builtin/mcp.d.ts.map +1 -0
  60. package/dist/extensions/builtin/mcp.js +407 -0
  61. package/dist/extensions/builtin/mcp.js.map +1 -0
  62. package/dist/extensions/index.d.ts +4 -0
  63. package/dist/extensions/index.d.ts.map +1 -0
  64. package/dist/extensions/index.js +3 -0
  65. package/dist/extensions/index.js.map +1 -0
  66. package/dist/extensions/loader.d.ts +19 -0
  67. package/dist/extensions/loader.d.ts.map +1 -0
  68. package/dist/extensions/loader.js +118 -0
  69. package/dist/extensions/loader.js.map +1 -0
  70. package/dist/extensions/runner.d.ts +28 -0
  71. package/dist/extensions/runner.d.ts.map +1 -0
  72. package/dist/extensions/runner.js +77 -0
  73. package/dist/extensions/runner.js.map +1 -0
  74. package/dist/extensions/types.d.ts +84 -0
  75. package/dist/extensions/types.d.ts.map +1 -0
  76. package/dist/extensions/types.js +6 -0
  77. package/dist/extensions/types.js.map +1 -0
  78. package/dist/index.d.ts +21 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +15 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/main.d.ts +5 -0
  83. package/dist/main.d.ts.map +1 -0
  84. package/dist/main.js +355 -0
  85. package/dist/main.js.map +1 -0
  86. package/dist/modes/interactive.d.ts +6 -0
  87. package/dist/modes/interactive.d.ts.map +1 -0
  88. package/dist/modes/interactive.js +961 -0
  89. package/dist/modes/interactive.js.map +1 -0
  90. package/dist/modes/oneshot.d.ts +8 -0
  91. package/dist/modes/oneshot.d.ts.map +1 -0
  92. package/dist/modes/oneshot.js +71 -0
  93. package/dist/modes/oneshot.js.map +1 -0
  94. package/dist/tools/bash.d.ts +3 -0
  95. package/dist/tools/bash.d.ts.map +1 -0
  96. package/dist/tools/bash.js +104 -0
  97. package/dist/tools/bash.js.map +1 -0
  98. package/dist/tools/edit.d.ts +3 -0
  99. package/dist/tools/edit.d.ts.map +1 -0
  100. package/dist/tools/edit.js +63 -0
  101. package/dist/tools/edit.js.map +1 -0
  102. package/dist/tools/file-manager.d.ts +3 -0
  103. package/dist/tools/file-manager.d.ts.map +1 -0
  104. package/dist/tools/file-manager.js +85 -0
  105. package/dist/tools/file-manager.js.map +1 -0
  106. package/dist/tools/index.d.ts +17 -0
  107. package/dist/tools/index.d.ts.map +1 -0
  108. package/dist/tools/index.js +42 -0
  109. package/dist/tools/index.js.map +1 -0
  110. package/dist/tools/read.d.ts +3 -0
  111. package/dist/tools/read.d.ts.map +1 -0
  112. package/dist/tools/read.js +65 -0
  113. package/dist/tools/read.js.map +1 -0
  114. package/dist/tools/system-info.d.ts +3 -0
  115. package/dist/tools/system-info.d.ts.map +1 -0
  116. package/dist/tools/system-info.js +101 -0
  117. package/dist/tools/system-info.js.map +1 -0
  118. package/dist/tools/web-fetch.d.ts +3 -0
  119. package/dist/tools/web-fetch.d.ts.map +1 -0
  120. package/dist/tools/web-fetch.js +117 -0
  121. package/dist/tools/web-fetch.js.map +1 -0
  122. package/dist/tools/web-search.d.ts +9 -0
  123. package/dist/tools/web-search.d.ts.map +1 -0
  124. package/dist/tools/web-search.js +124 -0
  125. package/dist/tools/web-search.js.map +1 -0
  126. package/dist/tools/write.d.ts +3 -0
  127. package/dist/tools/write.d.ts.map +1 -0
  128. package/dist/tools/write.js +30 -0
  129. package/dist/tools/write.js.map +1 -0
  130. package/dist/utils/autocomplete.d.ts +23 -0
  131. package/dist/utils/autocomplete.d.ts.map +1 -0
  132. package/dist/utils/autocomplete.js +191 -0
  133. package/dist/utils/autocomplete.js.map +1 -0
  134. package/dist/utils/file-processor.d.ts +19 -0
  135. package/dist/utils/file-processor.d.ts.map +1 -0
  136. package/dist/utils/file-processor.js +86 -0
  137. package/dist/utils/file-processor.js.map +1 -0
  138. package/dist/utils/path.d.ts +8 -0
  139. package/dist/utils/path.d.ts.map +1 -0
  140. package/dist/utils/path.js +60 -0
  141. package/dist/utils/path.js.map +1 -0
  142. package/dist/utils/shell.d.ts +6 -0
  143. package/dist/utils/shell.d.ts.map +1 -0
  144. package/dist/utils/shell.js +64 -0
  145. package/dist/utils/shell.js.map +1 -0
  146. package/dist/utils/truncate.d.ts +12 -0
  147. package/dist/utils/truncate.d.ts.map +1 -0
  148. package/dist/utils/truncate.js +46 -0
  149. package/dist/utils/truncate.js.map +1 -0
  150. package/package.json +58 -0
@@ -0,0 +1,553 @@
1
+ /**
2
+ * LLM provider abstraction layer.
3
+ * Supports Anthropic, OpenAI, and Google providers via their HTTP APIs.
4
+ */
5
+ export function toAnthropicTools(tools) {
6
+ return tools.map((t) => ({
7
+ name: t.name,
8
+ description: t.description,
9
+ input_schema: t.parameters,
10
+ }));
11
+ }
12
+ export function toAnthropicMessages(messages) {
13
+ const result = [];
14
+ for (const msg of messages) {
15
+ if (msg.role === "user") {
16
+ const content = typeof msg.content === "string" ? msg.content : msg.content.map((c) => {
17
+ if (c.type === "text")
18
+ return { type: "text", text: c.text };
19
+ return { type: "image", source: { type: "base64", media_type: c.mimeType, data: c.data } };
20
+ });
21
+ result.push({ role: "user", content });
22
+ }
23
+ else if (msg.role === "assistant") {
24
+ const content = [];
25
+ for (const c of msg.content) {
26
+ if (c.type === "text") {
27
+ content.push({ type: "text", text: c.text });
28
+ }
29
+ else if (c.type === "thinking") {
30
+ content.push({ type: "thinking", thinking: c.thinking });
31
+ }
32
+ else if (c.type === "toolCall") {
33
+ content.push({ type: "tool_use", id: c.id, name: c.name, input: c.arguments });
34
+ }
35
+ }
36
+ result.push({ role: "assistant", content });
37
+ }
38
+ else if (msg.role === "toolResult") {
39
+ const content = msg.content.map((c) => {
40
+ if (c.type === "text")
41
+ return { type: "text", text: c.text };
42
+ return { type: "image", source: { type: "base64", media_type: c.mimeType, data: c.data } };
43
+ });
44
+ result.push({ role: "user", content: [{ type: "tool_result", tool_use_id: msg.toolCallId, content, is_error: msg.isError }] });
45
+ }
46
+ }
47
+ return mergeConsecutiveRoles(result);
48
+ }
49
+ function mergeConsecutiveRoles(messages) {
50
+ const merged = [];
51
+ for (const msg of messages) {
52
+ const last = merged[merged.length - 1];
53
+ if (last && last.role === msg.role) {
54
+ const lastContent = Array.isArray(last.content) ? last.content : [{ type: "text", text: last.content }];
55
+ const thisContent = Array.isArray(msg.content) ? msg.content : [{ type: "text", text: msg.content }];
56
+ last.content = [...lastContent, ...thisContent];
57
+ }
58
+ else {
59
+ merged.push({ ...msg });
60
+ }
61
+ }
62
+ return merged;
63
+ }
64
+ export function toOpenAIMessages(messages) {
65
+ const result = [];
66
+ for (const msg of messages) {
67
+ if (msg.role === "user") {
68
+ if (typeof msg.content === "string") {
69
+ result.push({ role: "user", content: msg.content });
70
+ }
71
+ else {
72
+ const content = msg.content.map((c) => {
73
+ if (c.type === "text")
74
+ return { type: "text", text: c.text };
75
+ return { type: "image_url", image_url: { url: `data:${c.mimeType};base64,${c.data}` } };
76
+ });
77
+ result.push({ role: "user", content });
78
+ }
79
+ }
80
+ else if (msg.role === "assistant") {
81
+ const content = [];
82
+ const toolCalls = [];
83
+ for (const c of msg.content) {
84
+ if (c.type === "text" && c.text) {
85
+ content.push({ type: "text", text: c.text });
86
+ }
87
+ else if (c.type === "toolCall") {
88
+ toolCalls.push({
89
+ id: c.id,
90
+ type: "function",
91
+ function: { name: c.name, arguments: JSON.stringify(c.arguments) },
92
+ });
93
+ }
94
+ }
95
+ const entry = { role: "assistant" };
96
+ if (content.length > 0)
97
+ entry.content = content;
98
+ if (toolCalls.length > 0)
99
+ entry.tool_calls = toolCalls;
100
+ result.push(entry);
101
+ }
102
+ else if (msg.role === "toolResult") {
103
+ const text = msg.content.filter((c) => c.type === "text").map((c) => c.text).join("\n");
104
+ result.push({ role: "tool", tool_call_id: msg.toolCallId, content: text });
105
+ }
106
+ }
107
+ return result;
108
+ }
109
+ export function toOpenAITools(tools) {
110
+ return tools.map((t) => ({
111
+ type: "function",
112
+ function: { name: t.name, description: t.description, parameters: t.parameters },
113
+ }));
114
+ }
115
+ async function streamAnthropic(model, systemPrompt, messages, tools, callbacks, signal) {
116
+ const apiKey = model.apiKey || process.env.ANTHROPIC_API_KEY;
117
+ if (!apiKey)
118
+ throw new Error("ANTHROPIC_API_KEY not set. Set it via: til --setup, or export ANTHROPIC_API_KEY=...");
119
+ const baseUrl = (model.baseUrl || process.env.ANTHROPIC_BASE_URL || "https://api.anthropic.com/v1").replace(/\/+$/, "");
120
+ const body = {
121
+ model: model.id,
122
+ max_tokens: model.maxTokens || 8192,
123
+ system: systemPrompt,
124
+ messages: toAnthropicMessages(messages),
125
+ stream: true,
126
+ };
127
+ if (tools.length > 0)
128
+ body.tools = toAnthropicTools(tools);
129
+ const headers = {
130
+ "Content-Type": "application/json",
131
+ "x-api-key": apiKey,
132
+ "anthropic-version": "2023-06-01",
133
+ ...model.headers,
134
+ };
135
+ const response = await fetch(`${baseUrl}/messages`, {
136
+ method: "POST",
137
+ headers,
138
+ body: JSON.stringify(body),
139
+ signal,
140
+ });
141
+ if (!response.ok) {
142
+ const errorText = await response.text();
143
+ throw new Error(`Anthropic API error ${response.status}: ${errorText}`);
144
+ }
145
+ const contentParts = [];
146
+ let currentText = "";
147
+ let currentToolCall = null;
148
+ let stopReason = "end";
149
+ const usage = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
150
+ const reader = response.body.getReader();
151
+ const decoder = new TextDecoder();
152
+ let buffer = "";
153
+ while (true) {
154
+ const { done, value } = await reader.read();
155
+ if (done)
156
+ break;
157
+ buffer += decoder.decode(value, { stream: true });
158
+ const lines = buffer.split("\n");
159
+ buffer = lines.pop() || "";
160
+ for (const line of lines) {
161
+ if (!line.startsWith("data: "))
162
+ continue;
163
+ const data = line.slice(6).trim();
164
+ if (data === "[DONE]")
165
+ continue;
166
+ let event;
167
+ try {
168
+ event = JSON.parse(data);
169
+ }
170
+ catch {
171
+ continue;
172
+ }
173
+ switch (event.type) {
174
+ case "message_start":
175
+ if (event.message?.usage) {
176
+ usage.input = event.message.usage.input_tokens ?? 0;
177
+ usage.cacheRead = event.message.usage.cache_read_input_tokens ?? 0;
178
+ usage.cacheWrite = event.message.usage.cache_creation_input_tokens ?? 0;
179
+ }
180
+ break;
181
+ case "content_block_start":
182
+ if (event.content_block?.type === "tool_use") {
183
+ if (currentText) {
184
+ contentParts.push({ type: "text", text: currentText });
185
+ currentText = "";
186
+ }
187
+ currentToolCall = { id: event.content_block.id, name: event.content_block.name, jsonBuf: "" };
188
+ }
189
+ break;
190
+ case "content_block_delta":
191
+ if (event.delta?.type === "text_delta") {
192
+ currentText += event.delta.text;
193
+ callbacks.onToken?.(event.delta.text);
194
+ }
195
+ else if (event.delta?.type === "thinking_delta") {
196
+ callbacks.onThinking?.(event.delta.thinking);
197
+ }
198
+ else if (event.delta?.type === "input_json_delta" && currentToolCall) {
199
+ currentToolCall.jsonBuf += event.delta.partial_json;
200
+ }
201
+ break;
202
+ case "content_block_stop":
203
+ if (currentToolCall) {
204
+ let args = {};
205
+ try {
206
+ args = JSON.parse(currentToolCall.jsonBuf || "{}");
207
+ }
208
+ catch { /* empty */ }
209
+ const tc = {
210
+ type: "toolCall",
211
+ id: currentToolCall.id,
212
+ name: currentToolCall.name,
213
+ arguments: args,
214
+ };
215
+ contentParts.push(tc);
216
+ callbacks.onToolCall?.(tc);
217
+ currentToolCall = null;
218
+ }
219
+ break;
220
+ case "message_delta":
221
+ if (event.delta?.stop_reason === "tool_use") {
222
+ stopReason = "toolCall";
223
+ }
224
+ if (event.usage) {
225
+ usage.output = event.usage.output_tokens ?? 0;
226
+ }
227
+ break;
228
+ }
229
+ }
230
+ }
231
+ if (currentText) {
232
+ contentParts.push({ type: "text", text: currentText });
233
+ }
234
+ const assistantMsg = {
235
+ role: "assistant",
236
+ content: contentParts,
237
+ model: model.id,
238
+ provider: model.provider,
239
+ stopReason,
240
+ usage,
241
+ timestamp: Date.now(),
242
+ };
243
+ callbacks.onDone?.(assistantMsg);
244
+ return assistantMsg;
245
+ }
246
+ async function streamOpenAI(model, systemPrompt, messages, tools, callbacks, signal) {
247
+ const apiKey = model.apiKey || process.env.OPENAI_API_KEY;
248
+ if (!apiKey)
249
+ throw new Error("API key not set. Set it via: til --setup, or export OPENAI_API_KEY=...");
250
+ const baseUrl = (model.baseUrl || process.env.OPENAI_BASE_URL || "https://api.openai.com/v1").replace(/\/+$/, "");
251
+ const body = {
252
+ model: model.id,
253
+ max_tokens: model.maxTokens || 8192,
254
+ messages: [{ role: "system", content: systemPrompt }, ...toOpenAIMessages(messages)],
255
+ stream: true,
256
+ stream_options: { include_usage: true },
257
+ };
258
+ if (tools.length > 0)
259
+ body.tools = toOpenAITools(tools);
260
+ const headers = {
261
+ "Content-Type": "application/json",
262
+ Authorization: `Bearer ${apiKey}`,
263
+ ...model.headers,
264
+ };
265
+ const response = await fetch(`${baseUrl}/chat/completions`, {
266
+ method: "POST",
267
+ headers,
268
+ body: JSON.stringify(body),
269
+ signal,
270
+ });
271
+ if (!response.ok) {
272
+ const errorText = await response.text();
273
+ throw new Error(`OpenAI API error ${response.status}: ${errorText}`);
274
+ }
275
+ const contentParts = [];
276
+ let currentText = "";
277
+ const toolCallBufs = new Map();
278
+ let stopReason = "end";
279
+ const usage = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
280
+ const reader = response.body.getReader();
281
+ const decoder = new TextDecoder();
282
+ let buffer = "";
283
+ while (true) {
284
+ const { done, value } = await reader.read();
285
+ if (done)
286
+ break;
287
+ buffer += decoder.decode(value, { stream: true });
288
+ const lines = buffer.split("\n");
289
+ buffer = lines.pop() || "";
290
+ for (const line of lines) {
291
+ if (!line.startsWith("data: "))
292
+ continue;
293
+ const data = line.slice(6).trim();
294
+ if (data === "[DONE]")
295
+ continue;
296
+ let event;
297
+ try {
298
+ event = JSON.parse(data);
299
+ }
300
+ catch {
301
+ continue;
302
+ }
303
+ if (event.usage) {
304
+ usage.input = event.usage.prompt_tokens ?? 0;
305
+ usage.output = event.usage.completion_tokens ?? 0;
306
+ usage.totalTokens = event.usage.total_tokens ?? undefined;
307
+ usage.cacheRead = event.usage.prompt_tokens_details?.cached_tokens ?? 0;
308
+ }
309
+ const delta = event.choices?.[0]?.delta;
310
+ if (!delta)
311
+ continue;
312
+ if (delta.content) {
313
+ currentText += delta.content;
314
+ callbacks.onToken?.(delta.content);
315
+ }
316
+ if (delta.tool_calls) {
317
+ for (const tc of delta.tool_calls) {
318
+ const idx = tc.index ?? 0;
319
+ if (!toolCallBufs.has(idx)) {
320
+ toolCallBufs.set(idx, { id: tc.id || "", name: tc.function?.name || "", argsBuf: "" });
321
+ }
322
+ const buf = toolCallBufs.get(idx);
323
+ if (tc.id)
324
+ buf.id = tc.id;
325
+ if (tc.function?.name)
326
+ buf.name = tc.function.name;
327
+ if (tc.function?.arguments)
328
+ buf.argsBuf += tc.function.arguments;
329
+ }
330
+ }
331
+ const finishReason = event.choices?.[0]?.finish_reason;
332
+ if (finishReason === "tool_calls")
333
+ stopReason = "toolCall";
334
+ }
335
+ }
336
+ if (currentText) {
337
+ contentParts.push({ type: "text", text: currentText });
338
+ }
339
+ for (const [, buf] of [...toolCallBufs.entries()].sort(([a], [b]) => a - b)) {
340
+ let args = {};
341
+ try {
342
+ args = JSON.parse(buf.argsBuf || "{}");
343
+ }
344
+ catch { /* empty */ }
345
+ const tc = { type: "toolCall", id: buf.id, name: buf.name, arguments: args };
346
+ contentParts.push(tc);
347
+ callbacks.onToolCall?.(tc);
348
+ }
349
+ const assistantMsg = {
350
+ role: "assistant",
351
+ content: contentParts,
352
+ model: model.id,
353
+ provider: model.provider,
354
+ stopReason,
355
+ usage,
356
+ timestamp: Date.now(),
357
+ };
358
+ callbacks.onDone?.(assistantMsg);
359
+ return assistantMsg;
360
+ }
361
+ /**
362
+ * Simplified (non-streaming) LLM call for internal tasks like compaction summaries.
363
+ * Uses the same provider routing but returns a plain text response.
364
+ */
365
+ export async function completeLLM(model, systemPrompt, userMessage, maxTokens) {
366
+ let result = "";
367
+ const msgs = [{ role: "user", content: userMessage, timestamp: Date.now() }];
368
+ const original = model.maxTokens;
369
+ if (maxTokens)
370
+ model.maxTokens = maxTokens;
371
+ await streamLLM(model, systemPrompt, msgs, [], {
372
+ onToken: (t) => { result += t; },
373
+ });
374
+ model.maxTokens = original;
375
+ return result;
376
+ }
377
+ export async function streamLLM(model, systemPrompt, messages, tools, callbacks, signal) {
378
+ switch (model.provider) {
379
+ case "anthropic":
380
+ return streamAnthropic(model, systemPrompt, messages, tools, callbacks, signal);
381
+ case "openai":
382
+ case "openai-compatible":
383
+ return streamOpenAI(model, systemPrompt, messages, tools, callbacks, signal);
384
+ case "google":
385
+ return streamGoogle(model, systemPrompt, messages, tools, callbacks, signal);
386
+ default:
387
+ throw new Error(`Unsupported provider: ${model.provider}. Supported: anthropic, openai, openai-compatible, google`);
388
+ }
389
+ }
390
+ // ── Google Generative AI (Gemini) ──
391
+ function toGoogleContents(systemPrompt, messages) {
392
+ const contents = [];
393
+ for (const msg of messages) {
394
+ if (msg.role === "user") {
395
+ const parts = [];
396
+ if (typeof msg.content === "string") {
397
+ parts.push({ text: msg.content });
398
+ }
399
+ else {
400
+ for (const c of msg.content) {
401
+ if (c.type === "text")
402
+ parts.push({ text: c.text });
403
+ else
404
+ parts.push({ inlineData: { mimeType: c.mimeType, data: c.data } });
405
+ }
406
+ }
407
+ contents.push({ role: "user", parts });
408
+ }
409
+ else if (msg.role === "assistant") {
410
+ const parts = [];
411
+ for (const c of msg.content) {
412
+ if (c.type === "text") {
413
+ parts.push({ text: c.text });
414
+ }
415
+ else if (c.type === "toolCall") {
416
+ parts.push({ functionCall: { name: c.name, args: c.arguments } });
417
+ }
418
+ }
419
+ if (parts.length > 0)
420
+ contents.push({ role: "model", parts });
421
+ }
422
+ else if (msg.role === "toolResult") {
423
+ const text = msg.content
424
+ .filter((c) => c.type === "text")
425
+ .map((c) => c.text)
426
+ .join("\n");
427
+ contents.push({
428
+ role: "function",
429
+ parts: [{ functionResponse: { name: msg.toolName, response: { result: text } } }],
430
+ });
431
+ }
432
+ }
433
+ return {
434
+ systemInstruction: { parts: [{ text: systemPrompt }] },
435
+ contents,
436
+ };
437
+ }
438
+ function toGoogleTools(tools) {
439
+ if (tools.length === 0)
440
+ return [];
441
+ return [{
442
+ functionDeclarations: tools.map((t) => ({
443
+ name: t.name,
444
+ description: t.description,
445
+ parameters: t.parameters,
446
+ })),
447
+ }];
448
+ }
449
+ async function streamGoogle(model, systemPrompt, messages, tools, callbacks, signal) {
450
+ const apiKey = model.apiKey || process.env.GOOGLE_API_KEY;
451
+ if (!apiKey)
452
+ throw new Error("GOOGLE_API_KEY not set. Set it via: til --setup, or export GOOGLE_API_KEY=...");
453
+ const baseUrl = (model.baseUrl || "https://generativelanguage.googleapis.com/v1beta").replace(/\/+$/, "");
454
+ const { systemInstruction, contents } = toGoogleContents(systemPrompt, messages);
455
+ const body = {
456
+ systemInstruction,
457
+ contents,
458
+ generationConfig: { maxOutputTokens: model.maxTokens || 8192 },
459
+ };
460
+ const googleTools = toGoogleTools(tools);
461
+ if (googleTools.length > 0)
462
+ body.tools = googleTools;
463
+ const url = `${baseUrl}/models/${model.id}:streamGenerateContent?alt=sse&key=${apiKey}`;
464
+ const headers = {
465
+ "Content-Type": "application/json",
466
+ ...model.headers,
467
+ };
468
+ const response = await fetch(url, {
469
+ method: "POST",
470
+ headers,
471
+ body: JSON.stringify(body),
472
+ signal,
473
+ });
474
+ if (!response.ok) {
475
+ const errorText = await response.text();
476
+ throw new Error(`Google API error ${response.status}: ${errorText}`);
477
+ }
478
+ const contentParts = [];
479
+ let currentText = "";
480
+ let stopReason = "end";
481
+ const usage = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
482
+ let toolCallCounter = 0;
483
+ const reader = response.body.getReader();
484
+ const decoder = new TextDecoder();
485
+ let buffer = "";
486
+ while (true) {
487
+ const { done, value } = await reader.read();
488
+ if (done)
489
+ break;
490
+ buffer += decoder.decode(value, { stream: true });
491
+ const lines = buffer.split("\n");
492
+ buffer = lines.pop() || "";
493
+ for (const line of lines) {
494
+ if (!line.startsWith("data: "))
495
+ continue;
496
+ const data = line.slice(6).trim();
497
+ if (!data)
498
+ continue;
499
+ let chunk;
500
+ try {
501
+ chunk = JSON.parse(data);
502
+ }
503
+ catch {
504
+ continue;
505
+ }
506
+ if (chunk.usageMetadata) {
507
+ usage.input = chunk.usageMetadata.promptTokenCount ?? 0;
508
+ usage.output = chunk.usageMetadata.candidatesTokenCount ?? 0;
509
+ usage.totalTokens = chunk.usageMetadata.totalTokenCount ?? undefined;
510
+ usage.cacheRead = chunk.usageMetadata.cachedContentTokenCount ?? 0;
511
+ }
512
+ const parts = chunk.candidates?.[0]?.content?.parts;
513
+ if (!parts)
514
+ continue;
515
+ for (const part of parts) {
516
+ if (part.text) {
517
+ currentText += part.text;
518
+ callbacks.onToken?.(part.text);
519
+ }
520
+ else if (part.functionCall) {
521
+ if (currentText) {
522
+ contentParts.push({ type: "text", text: currentText });
523
+ currentText = "";
524
+ }
525
+ const tc = {
526
+ type: "toolCall",
527
+ id: `google-tc-${++toolCallCounter}`,
528
+ name: part.functionCall.name,
529
+ arguments: part.functionCall.args ?? {},
530
+ };
531
+ contentParts.push(tc);
532
+ callbacks.onToolCall?.(tc);
533
+ stopReason = "toolCall";
534
+ }
535
+ }
536
+ }
537
+ }
538
+ if (currentText) {
539
+ contentParts.push({ type: "text", text: currentText });
540
+ }
541
+ const assistantMsg = {
542
+ role: "assistant",
543
+ content: contentParts,
544
+ model: model.id,
545
+ provider: model.provider,
546
+ stopReason,
547
+ usage,
548
+ timestamp: Date.now(),
549
+ };
550
+ callbacks.onDone?.(assistantMsg);
551
+ return assistantMsg;
552
+ }
553
+ //# sourceMappingURL=llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/core/llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Terminal Markdown renderer.
3
+ * Converts Markdown to ANSI-formatted terminal output with syntax highlighting.
4
+ * Inspired by pi-mono packages/tui/src/components/markdown.ts.
5
+ */
6
+ export declare class MarkdownRenderer {
7
+ private width;
8
+ constructor(width?: number);
9
+ render(text: string): string;
10
+ private renderToken;
11
+ private renderHeading;
12
+ private renderParagraph;
13
+ private renderCodeBlock;
14
+ private renderBlockquote;
15
+ private renderList;
16
+ private inlineStyle;
17
+ private wrapText;
18
+ }
19
+ export declare function renderMarkdown(text: string): string;
20
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/core/markdown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,KAAK,CAAS;gBAEV,KAAK,CAAC,EAAE,MAAM;IAI1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAS5B,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,QAAQ;CAoBhB;AASD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD"}