@omarestrella/ai-sdk-agent-sdk 1.0.0-beta.1 → 1.0.0-beta.3
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/dist/index.d.mts +41 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +641 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +9 -8
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -6
- package/dist/src/index.js.map +0 -1
- package/dist/src/json.d.ts +0 -6
- package/dist/src/json.d.ts.map +0 -1
- package/dist/src/json.js +0 -29
- package/dist/src/json.js.map +0 -1
- package/dist/src/language-model.d.ts +0 -23
- package/dist/src/language-model.d.ts.map +0 -1
- package/dist/src/language-model.js +0 -440
- package/dist/src/language-model.js.map +0 -1
- package/dist/src/logger.d.ts +0 -15
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -142
- package/dist/src/logger.js.map +0 -1
- package/dist/src/messages.d.ts +0 -14
- package/dist/src/messages.d.ts.map +0 -1
- package/dist/src/messages.js +0 -92
- package/dist/src/messages.js.map +0 -1
- package/dist/src/provider.d.ts +0 -15
- package/dist/src/provider.d.ts.map +0 -1
- package/dist/src/provider.js +0 -19
- package/dist/src/provider.js.map +0 -1
- package/dist/src/tools.d.ts +0 -21
- package/dist/src/tools.d.ts.map +0 -1
- package/dist/src/tools.js +0 -82
- package/dist/src/tools.js.map +0 -1
- package/dist/test/messages.test.d.ts +0 -2
- package/dist/test/messages.test.d.ts.map +0 -1
- package/dist/test/messages.test.js +0 -173
- package/dist/test/messages.test.js.map +0 -1
- package/dist/test/tools.test.d.ts +0 -2
- package/dist/test/tools.test.d.ts.map +0 -1
- package/dist/test/tools.test.js +0 -175
- package/dist/test/tools.test.js.map +0 -1
|
@@ -1,440 +0,0 @@
|
|
|
1
|
-
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
-
import { safeJsonStringify } from "./json";
|
|
3
|
-
import { convertMessages } from "./messages";
|
|
4
|
-
import { AI_SDK_MCP_SERVER_NAME, convertTools } from "./tools";
|
|
5
|
-
import { logger } from "./logger";
|
|
6
|
-
/**
|
|
7
|
-
* Strips the MCP prefix from tool names returned by the Agent SDK.
|
|
8
|
-
* The Agent SDK returns tools in format: mcp__{serverName}__{toolName}
|
|
9
|
-
* The AI SDK expects just the original tool name.
|
|
10
|
-
*/
|
|
11
|
-
function stripMcpPrefix(toolName) {
|
|
12
|
-
const prefix = `mcp__${AI_SDK_MCP_SERVER_NAME}__`;
|
|
13
|
-
if (toolName.startsWith(prefix)) {
|
|
14
|
-
return toolName.slice(prefix.length);
|
|
15
|
-
}
|
|
16
|
-
return toolName;
|
|
17
|
-
}
|
|
18
|
-
function mapFinishReason(stopReason, hasToolCalls) {
|
|
19
|
-
if (hasToolCalls)
|
|
20
|
-
return "tool-calls";
|
|
21
|
-
switch (stopReason) {
|
|
22
|
-
case "end_turn":
|
|
23
|
-
return "stop";
|
|
24
|
-
case "max_tokens":
|
|
25
|
-
return "length";
|
|
26
|
-
case "stop_sequence":
|
|
27
|
-
return "stop";
|
|
28
|
-
case "tool_use":
|
|
29
|
-
return "tool-calls";
|
|
30
|
-
default:
|
|
31
|
-
return "unknown";
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
let idCounter = 0;
|
|
35
|
-
function generateId() {
|
|
36
|
-
return `agent-${Date.now()}-${++idCounter}`;
|
|
37
|
-
}
|
|
38
|
-
export class ClaudeAgentLanguageModel {
|
|
39
|
-
specificationVersion = "v2";
|
|
40
|
-
modelId;
|
|
41
|
-
defaultObjectGenerationMode = undefined;
|
|
42
|
-
config;
|
|
43
|
-
constructor(modelId, config) {
|
|
44
|
-
this.modelId = modelId;
|
|
45
|
-
this.config = config;
|
|
46
|
-
}
|
|
47
|
-
get provider() {
|
|
48
|
-
return this.config.provider;
|
|
49
|
-
}
|
|
50
|
-
get supportedUrls() {
|
|
51
|
-
return {};
|
|
52
|
-
}
|
|
53
|
-
buildQueryOptions(options) {
|
|
54
|
-
const { systemPrompt, prompt } = convertMessages(options.prompt);
|
|
55
|
-
const convertedTools = convertTools(options.tools);
|
|
56
|
-
const abortController = new AbortController();
|
|
57
|
-
if (options.abortSignal) {
|
|
58
|
-
options.abortSignal.addEventListener("abort", () => {
|
|
59
|
-
abortController.abort();
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
const queryOptions = {
|
|
63
|
-
model: this.modelId,
|
|
64
|
-
maxTurns: 1,
|
|
65
|
-
permissionMode: "bypassPermissions",
|
|
66
|
-
allowDangerouslySkipPermissions: true,
|
|
67
|
-
abortController,
|
|
68
|
-
tools: [],
|
|
69
|
-
allowedTools: [`mcp__${AI_SDK_MCP_SERVER_NAME}__*`],
|
|
70
|
-
...(this.config.cwd ? { cwd: this.config.cwd } : {}),
|
|
71
|
-
};
|
|
72
|
-
if (systemPrompt) {
|
|
73
|
-
queryOptions.systemPrompt = systemPrompt;
|
|
74
|
-
}
|
|
75
|
-
if (convertedTools?.mcpServer) {
|
|
76
|
-
queryOptions.mcpServers = {
|
|
77
|
-
[AI_SDK_MCP_SERVER_NAME]: convertedTools.mcpServer,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
return { prompt, queryOptions };
|
|
81
|
-
}
|
|
82
|
-
async doGenerate(options) {
|
|
83
|
-
const warnings = [];
|
|
84
|
-
const { prompt, queryOptions } = this.buildQueryOptions(options);
|
|
85
|
-
const generator = query({
|
|
86
|
-
prompt,
|
|
87
|
-
options: queryOptions,
|
|
88
|
-
});
|
|
89
|
-
const content = [];
|
|
90
|
-
let usage = {
|
|
91
|
-
inputTokens: undefined,
|
|
92
|
-
outputTokens: undefined,
|
|
93
|
-
totalTokens: undefined,
|
|
94
|
-
};
|
|
95
|
-
let finishReason = "unknown";
|
|
96
|
-
let hasToolCalls = false;
|
|
97
|
-
// Track message UUIDs to avoid counting usage multiple times
|
|
98
|
-
// Per SDK docs: all messages with same ID have identical usage
|
|
99
|
-
const seenMessageIds = new Set();
|
|
100
|
-
for await (const message of generator) {
|
|
101
|
-
if (message.type === "assistant") {
|
|
102
|
-
const apiMessage = message.message;
|
|
103
|
-
const messageId = message.uuid;
|
|
104
|
-
if (Array.isArray(apiMessage.content)) {
|
|
105
|
-
for (const block of apiMessage.content) {
|
|
106
|
-
if (block.type === "text") {
|
|
107
|
-
content.push({ type: "text", text: block.text });
|
|
108
|
-
}
|
|
109
|
-
else if (block.type === "tool_use") {
|
|
110
|
-
hasToolCalls = true;
|
|
111
|
-
const originalToolName = stripMcpPrefix(block.name);
|
|
112
|
-
content.push({
|
|
113
|
-
type: "tool-call",
|
|
114
|
-
toolCallId: block.id,
|
|
115
|
-
toolName: originalToolName,
|
|
116
|
-
input: typeof block.input === "string"
|
|
117
|
-
? block.input
|
|
118
|
-
: safeJsonStringify(block.input),
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
else if (block.type === "thinking") {
|
|
122
|
-
content.push({
|
|
123
|
-
type: "reasoning",
|
|
124
|
-
text: block.thinking ?? "",
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
// Only record usage once per unique message ID
|
|
129
|
-
if (apiMessage.usage && messageId && !seenMessageIds.has(messageId)) {
|
|
130
|
-
seenMessageIds.add(messageId);
|
|
131
|
-
usage = {
|
|
132
|
-
inputTokens: apiMessage.usage.input_tokens,
|
|
133
|
-
outputTokens: apiMessage.usage.output_tokens,
|
|
134
|
-
totalTokens: (apiMessage.usage.input_tokens ?? 0) +
|
|
135
|
-
(apiMessage.usage.output_tokens ?? 0),
|
|
136
|
-
};
|
|
137
|
-
logger.debug("Usage reported in doGenerate", {
|
|
138
|
-
messageId,
|
|
139
|
-
inputTokens: usage.inputTokens,
|
|
140
|
-
outputTokens: usage.outputTokens,
|
|
141
|
-
totalTokens: usage.totalTokens,
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
finishReason = mapFinishReason(apiMessage.stop_reason, hasToolCalls);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (message.type === "result") {
|
|
148
|
-
// Result message contains cumulative usage from all steps
|
|
149
|
-
if (message.usage) {
|
|
150
|
-
usage = {
|
|
151
|
-
inputTokens: message.usage.input_tokens ?? usage.inputTokens,
|
|
152
|
-
outputTokens: message.usage.output_tokens ?? usage.outputTokens,
|
|
153
|
-
totalTokens: usage.totalTokens,
|
|
154
|
-
};
|
|
155
|
-
logger.debug("Final usage from result message", {
|
|
156
|
-
inputTokens: usage.inputTokens,
|
|
157
|
-
outputTokens: usage.outputTokens,
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// Calculate total tokens if we have both input and output
|
|
163
|
-
if (usage.inputTokens !== undefined && usage.outputTokens !== undefined) {
|
|
164
|
-
usage.totalTokens = usage.inputTokens + usage.outputTokens;
|
|
165
|
-
}
|
|
166
|
-
return {
|
|
167
|
-
content,
|
|
168
|
-
finishReason,
|
|
169
|
-
usage,
|
|
170
|
-
warnings,
|
|
171
|
-
request: { body: queryOptions },
|
|
172
|
-
response: {
|
|
173
|
-
headers: undefined,
|
|
174
|
-
},
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
async doStream(options) {
|
|
178
|
-
const warnings = [];
|
|
179
|
-
const { prompt, queryOptions } = this.buildQueryOptions(options);
|
|
180
|
-
// Enable partial messages to get raw Anthropic streaming events
|
|
181
|
-
queryOptions.includePartialMessages = true;
|
|
182
|
-
const generator = query({
|
|
183
|
-
prompt,
|
|
184
|
-
options: queryOptions,
|
|
185
|
-
});
|
|
186
|
-
let hasToolCalls = false;
|
|
187
|
-
const stream = new ReadableStream({
|
|
188
|
-
async start(controller) {
|
|
189
|
-
controller.enqueue({ type: "stream-start", warnings });
|
|
190
|
-
let finishReason = "unknown";
|
|
191
|
-
let usage = {
|
|
192
|
-
inputTokens: undefined,
|
|
193
|
-
outputTokens: undefined,
|
|
194
|
-
totalTokens: undefined,
|
|
195
|
-
};
|
|
196
|
-
// Track active text block for start/delta/end lifecycle
|
|
197
|
-
let activeTextId = null;
|
|
198
|
-
// Track active reasoning block
|
|
199
|
-
let activeReasoningId = null;
|
|
200
|
-
// Track tool calls being streamed (keyed by content block index)
|
|
201
|
-
const toolCalls = new Map();
|
|
202
|
-
// Track message UUIDs to avoid counting usage multiple times
|
|
203
|
-
// Per SDK docs: all messages with same ID have identical usage
|
|
204
|
-
const seenMessageIds = new Set();
|
|
205
|
-
try {
|
|
206
|
-
for await (const message of generator) {
|
|
207
|
-
if (message.type === "stream_event") {
|
|
208
|
-
const event = message.event;
|
|
209
|
-
if (!event || !event.type)
|
|
210
|
-
continue;
|
|
211
|
-
switch (event.type) {
|
|
212
|
-
case "message_start": {
|
|
213
|
-
const msg = event.message;
|
|
214
|
-
if (msg) {
|
|
215
|
-
controller.enqueue({
|
|
216
|
-
type: "response-metadata",
|
|
217
|
-
id: msg.id,
|
|
218
|
-
timestamp: new Date(),
|
|
219
|
-
modelId: msg.model,
|
|
220
|
-
});
|
|
221
|
-
if (msg.usage) {
|
|
222
|
-
usage.inputTokens = msg.usage.input_tokens;
|
|
223
|
-
logger.debug("Initial usage reported in doStream (message_start)", {
|
|
224
|
-
inputTokens: usage.inputTokens,
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
break;
|
|
229
|
-
}
|
|
230
|
-
case "content_block_start": {
|
|
231
|
-
const block = event.content_block;
|
|
232
|
-
const index = event.index;
|
|
233
|
-
if (block?.type === "text") {
|
|
234
|
-
activeTextId = generateId();
|
|
235
|
-
controller.enqueue({
|
|
236
|
-
type: "text-start",
|
|
237
|
-
id: activeTextId,
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
else if (block?.type === "tool_use") {
|
|
241
|
-
hasToolCalls = true;
|
|
242
|
-
const id = block.id ?? generateId();
|
|
243
|
-
toolCalls.set(index, {
|
|
244
|
-
toolCallId: id,
|
|
245
|
-
toolName: block.name,
|
|
246
|
-
argsText: "",
|
|
247
|
-
});
|
|
248
|
-
controller.enqueue({
|
|
249
|
-
type: "tool-input-start",
|
|
250
|
-
id,
|
|
251
|
-
toolName: block.name,
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
else if (block?.type === "thinking") {
|
|
255
|
-
activeReasoningId = generateId();
|
|
256
|
-
controller.enqueue({
|
|
257
|
-
type: "reasoning-start",
|
|
258
|
-
id: activeReasoningId,
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
break;
|
|
262
|
-
}
|
|
263
|
-
case "content_block_delta": {
|
|
264
|
-
const delta = event.delta;
|
|
265
|
-
const index = event.index;
|
|
266
|
-
if (delta?.type === "text_delta") {
|
|
267
|
-
if (!activeTextId) {
|
|
268
|
-
activeTextId = generateId();
|
|
269
|
-
controller.enqueue({
|
|
270
|
-
type: "text-start",
|
|
271
|
-
id: activeTextId,
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
controller.enqueue({
|
|
275
|
-
type: "text-delta",
|
|
276
|
-
id: activeTextId,
|
|
277
|
-
delta: delta.text,
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
else if (delta?.type === "input_json_delta") {
|
|
281
|
-
const tc = toolCalls.get(index);
|
|
282
|
-
if (tc) {
|
|
283
|
-
tc.argsText += delta.partial_json;
|
|
284
|
-
controller.enqueue({
|
|
285
|
-
type: "tool-input-delta",
|
|
286
|
-
id: tc.toolCallId,
|
|
287
|
-
delta: delta.partial_json,
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
else if (delta?.type === "thinking_delta") {
|
|
292
|
-
if (!activeReasoningId) {
|
|
293
|
-
activeReasoningId = generateId();
|
|
294
|
-
controller.enqueue({
|
|
295
|
-
type: "reasoning-start",
|
|
296
|
-
id: activeReasoningId,
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
controller.enqueue({
|
|
300
|
-
type: "reasoning-delta",
|
|
301
|
-
id: activeReasoningId,
|
|
302
|
-
delta: delta.thinking,
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
break;
|
|
306
|
-
}
|
|
307
|
-
case "content_block_stop": {
|
|
308
|
-
const index = event.index;
|
|
309
|
-
const tc = toolCalls.get(index);
|
|
310
|
-
if (tc) {
|
|
311
|
-
const originalToolName = stripMcpPrefix(tc.toolName);
|
|
312
|
-
// End the tool input stream
|
|
313
|
-
controller.enqueue({
|
|
314
|
-
type: "tool-input-end",
|
|
315
|
-
id: tc.toolCallId,
|
|
316
|
-
});
|
|
317
|
-
// Emit the complete tool call
|
|
318
|
-
controller.enqueue({
|
|
319
|
-
type: "tool-call",
|
|
320
|
-
toolCallId: tc.toolCallId,
|
|
321
|
-
toolName: originalToolName,
|
|
322
|
-
input: tc.argsText,
|
|
323
|
-
});
|
|
324
|
-
toolCalls.delete(index);
|
|
325
|
-
}
|
|
326
|
-
else if (activeTextId) {
|
|
327
|
-
controller.enqueue({
|
|
328
|
-
type: "text-end",
|
|
329
|
-
id: activeTextId,
|
|
330
|
-
});
|
|
331
|
-
activeTextId = null;
|
|
332
|
-
}
|
|
333
|
-
else if (activeReasoningId) {
|
|
334
|
-
controller.enqueue({
|
|
335
|
-
type: "reasoning-end",
|
|
336
|
-
id: activeReasoningId,
|
|
337
|
-
});
|
|
338
|
-
activeReasoningId = null;
|
|
339
|
-
}
|
|
340
|
-
break;
|
|
341
|
-
}
|
|
342
|
-
case "message_delta": {
|
|
343
|
-
if (event.usage) {
|
|
344
|
-
usage.outputTokens = event.usage.output_tokens;
|
|
345
|
-
if (usage.inputTokens !== undefined) {
|
|
346
|
-
usage.totalTokens =
|
|
347
|
-
usage.inputTokens + (event.usage.output_tokens ?? 0);
|
|
348
|
-
}
|
|
349
|
-
logger.debug("Usage delta reported in doStream (message_delta)", {
|
|
350
|
-
outputTokens: usage.outputTokens,
|
|
351
|
-
totalTokens: usage.totalTokens,
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
finishReason = mapFinishReason(event.delta?.stop_reason, hasToolCalls);
|
|
355
|
-
break;
|
|
356
|
-
}
|
|
357
|
-
case "message_stop": {
|
|
358
|
-
// Final streaming event
|
|
359
|
-
break;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
else if (message.type === "assistant") {
|
|
364
|
-
// Full assistant message — only update finish reason, not usage
|
|
365
|
-
// Usage is tracked from streaming events (message_start, message_delta)
|
|
366
|
-
// Per SDK docs: assistant messages share usage with streaming events
|
|
367
|
-
const apiMessage = message.message;
|
|
368
|
-
const messageId = message.uuid;
|
|
369
|
-
if (Array.isArray(apiMessage?.content)) {
|
|
370
|
-
for (const block of apiMessage.content) {
|
|
371
|
-
if (block.type === "tool_use") {
|
|
372
|
-
hasToolCalls = true;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
// Don't overwrite usage from streaming events - they are more accurate
|
|
377
|
-
// and already tracked. Only log if this is a new message ID.
|
|
378
|
-
if (apiMessage?.usage &&
|
|
379
|
-
messageId &&
|
|
380
|
-
!seenMessageIds.has(messageId)) {
|
|
381
|
-
seenMessageIds.add(messageId);
|
|
382
|
-
logger.debug("Assistant message usage (already tracked from streaming)", {
|
|
383
|
-
messageId,
|
|
384
|
-
inputTokens: apiMessage.usage.input_tokens,
|
|
385
|
-
outputTokens: apiMessage.usage.output_tokens,
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
if (apiMessage?.stop_reason) {
|
|
389
|
-
finishReason = mapFinishReason(apiMessage.stop_reason, hasToolCalls);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
else if (message.type === "result") {
|
|
393
|
-
// Final result with cumulative usage from all steps
|
|
394
|
-
const result = message;
|
|
395
|
-
if (result.usage) {
|
|
396
|
-
usage.inputTokens =
|
|
397
|
-
result.usage.input_tokens ?? usage.inputTokens;
|
|
398
|
-
usage.outputTokens =
|
|
399
|
-
result.usage.output_tokens ?? usage.outputTokens;
|
|
400
|
-
logger.debug("Final usage from result message", {
|
|
401
|
-
inputTokens: usage.inputTokens,
|
|
402
|
-
outputTokens: usage.outputTokens,
|
|
403
|
-
});
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
catch (error) {
|
|
409
|
-
controller.enqueue({ type: "error", error });
|
|
410
|
-
}
|
|
411
|
-
// Close any dangling blocks
|
|
412
|
-
if (activeTextId) {
|
|
413
|
-
controller.enqueue({ type: "text-end", id: activeTextId });
|
|
414
|
-
}
|
|
415
|
-
if (activeReasoningId) {
|
|
416
|
-
controller.enqueue({ type: "reasoning-end", id: activeReasoningId });
|
|
417
|
-
}
|
|
418
|
-
// Calculate total tokens if not already done
|
|
419
|
-
if (usage.inputTokens !== undefined &&
|
|
420
|
-
usage.outputTokens !== undefined) {
|
|
421
|
-
usage.totalTokens = usage.inputTokens + usage.outputTokens;
|
|
422
|
-
}
|
|
423
|
-
controller.enqueue({
|
|
424
|
-
type: "finish",
|
|
425
|
-
finishReason,
|
|
426
|
-
usage,
|
|
427
|
-
});
|
|
428
|
-
controller.close();
|
|
429
|
-
},
|
|
430
|
-
});
|
|
431
|
-
return {
|
|
432
|
-
stream,
|
|
433
|
-
request: { body: queryOptions },
|
|
434
|
-
response: {
|
|
435
|
-
headers: undefined,
|
|
436
|
-
},
|
|
437
|
-
};
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
//# sourceMappingURL=language-model.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"language-model.js","sourceRoot":"","sources":["../../src/language-model.ts"],"names":[],"mappings":"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"}
|
package/dist/src/logger.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logger interface that wraps consola if available, otherwise no-op.
|
|
3
|
-
*/
|
|
4
|
-
export declare const logger: {
|
|
5
|
-
debug(message: string, ...args: unknown[]): void;
|
|
6
|
-
info(message: string, ...args: unknown[]): void;
|
|
7
|
-
warn(message: string, ...args: unknown[]): void;
|
|
8
|
-
error(message: string, ...args: unknown[]): void;
|
|
9
|
-
/**
|
|
10
|
-
* Legacy method - logs at info level
|
|
11
|
-
* @deprecated Use logger.info() or logger.debug() instead
|
|
12
|
-
*/
|
|
13
|
-
log(message: string, ...args: unknown[]): void;
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=logger.d.ts.map
|
package/dist/src/logger.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AA+HA;;GAEG;AACH,eAAO,MAAM,MAAM;mBACF,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;kBAQlC,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;kBAQjC,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;mBAQhC,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;IAQhD;;;OAGG;iBACU,MAAM,WAAW,OAAO,EAAE,GAAG,IAAI;CAG/C,CAAC"}
|
package/dist/src/logger.js
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { createWriteStream, existsSync, mkdirSync } from "fs";
|
|
2
|
-
import { homedir } from "os";
|
|
3
|
-
import { join } from "path";
|
|
4
|
-
import { safeJsonStringify } from "./json";
|
|
5
|
-
/**
|
|
6
|
-
* This is a weird file. We want to log to a file, but only if the consola package
|
|
7
|
-
* we are using is available.
|
|
8
|
-
*/
|
|
9
|
-
// Environment configuration
|
|
10
|
-
const LOG_LEVEL = process.env.LOG_LEVEL || "debug";
|
|
11
|
-
const LOG_DIR = process.env.LOG_DIR || join(homedir(), ".cache", "ai-sdk-claude-agent");
|
|
12
|
-
const LOG_FILE = process.env.LOG_FILE || "ai-sdk-claude-agent.log";
|
|
13
|
-
// Ensure log directory exists
|
|
14
|
-
if (!existsSync(LOG_DIR)) {
|
|
15
|
-
try {
|
|
16
|
-
mkdirSync(LOG_DIR, { recursive: true });
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
// Silent fail
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
const LOG_FILE_PATH = join(LOG_DIR, LOG_FILE);
|
|
23
|
-
// Persistent write stream for file logging
|
|
24
|
-
let logStream = null;
|
|
25
|
-
function getLogStream() {
|
|
26
|
-
if (!logStream) {
|
|
27
|
-
logStream = createWriteStream(LOG_FILE_PATH, { flags: "a" });
|
|
28
|
-
}
|
|
29
|
-
return logStream;
|
|
30
|
-
}
|
|
31
|
-
let consolaInstance = null;
|
|
32
|
-
let consolaLoadAttempted = false;
|
|
33
|
-
/**
|
|
34
|
-
* Dynamically loads consola if available.
|
|
35
|
-
* This is an optional peer dependency - if not installed, logging is a no-op.
|
|
36
|
-
*/
|
|
37
|
-
async function loadConsola() {
|
|
38
|
-
if (consolaLoadAttempted)
|
|
39
|
-
return consolaInstance;
|
|
40
|
-
consolaLoadAttempted = true;
|
|
41
|
-
try {
|
|
42
|
-
// Dynamic import - will fail gracefully if consola is not installed
|
|
43
|
-
const { createConsola } = await import("consola");
|
|
44
|
-
const reporters = [];
|
|
45
|
-
// File reporter configuration
|
|
46
|
-
if (LOG_FILE) {
|
|
47
|
-
reporters.push({
|
|
48
|
-
log: (logObj) => {
|
|
49
|
-
// Consola levels: 0=fatal/error, 1=warn, 2=log, 3=info, 4=debug, 5=trace
|
|
50
|
-
const levelNames = {
|
|
51
|
-
0: "ERROR",
|
|
52
|
-
1: "WARN",
|
|
53
|
-
2: "LOG",
|
|
54
|
-
3: "INFO",
|
|
55
|
-
4: "DEBUG",
|
|
56
|
-
5: "TRACE",
|
|
57
|
-
};
|
|
58
|
-
const levelName = levelNames[logObj.level] || "LOG";
|
|
59
|
-
const message = logObj.args
|
|
60
|
-
.map((arg) => typeof arg === "object" ? safeJsonStringify(arg) : String(arg))
|
|
61
|
-
.join(" ");
|
|
62
|
-
const line = safeJsonStringify({
|
|
63
|
-
timestamp: logObj.date.toISOString(),
|
|
64
|
-
level: levelName,
|
|
65
|
-
message,
|
|
66
|
-
}) + "\n";
|
|
67
|
-
// Append to file using persistent stream
|
|
68
|
-
getLogStream().write(line);
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
consolaInstance = createConsola({
|
|
73
|
-
// Consola levels: 0=fatal/error, 1=warn, 2=log, 3=info, 4=debug, 5=trace
|
|
74
|
-
level: LOG_LEVEL === "trace"
|
|
75
|
-
? 5
|
|
76
|
-
: LOG_LEVEL === "debug"
|
|
77
|
-
? 4
|
|
78
|
-
: LOG_LEVEL === "info"
|
|
79
|
-
? 3
|
|
80
|
-
: LOG_LEVEL === "warn"
|
|
81
|
-
? 1
|
|
82
|
-
: 0,
|
|
83
|
-
reporters,
|
|
84
|
-
});
|
|
85
|
-
consolaInstance.info("Logger initialized with consola", {
|
|
86
|
-
level: LOG_LEVEL,
|
|
87
|
-
file: LOG_FILE_PATH,
|
|
88
|
-
});
|
|
89
|
-
return consolaInstance;
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
// consola is not installed - logging will be a no-op
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
// Initialize consola asynchronously
|
|
97
|
-
const consolaPromise = loadConsola();
|
|
98
|
-
/**
|
|
99
|
-
* Logger interface that wraps consola if available, otherwise no-op.
|
|
100
|
-
*/
|
|
101
|
-
export const logger = {
|
|
102
|
-
debug(message, ...args) {
|
|
103
|
-
if (consolaInstance) {
|
|
104
|
-
consolaInstance.debug(message, ...args);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
consolaPromise.then((c) => c?.debug(message, ...args));
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
info(message, ...args) {
|
|
111
|
-
if (consolaInstance) {
|
|
112
|
-
consolaInstance.info(message, ...args);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
consolaPromise.then((c) => c?.info(message, ...args));
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
warn(message, ...args) {
|
|
119
|
-
if (consolaInstance) {
|
|
120
|
-
consolaInstance.warn(message, ...args);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
consolaPromise.then((c) => c?.warn(message, ...args));
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
error(message, ...args) {
|
|
127
|
-
if (consolaInstance) {
|
|
128
|
-
consolaInstance.error(message, ...args);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
consolaPromise.then((c) => c?.error(message, ...args));
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
/**
|
|
135
|
-
* Legacy method - logs at info level
|
|
136
|
-
* @deprecated Use logger.info() or logger.debug() instead
|
|
137
|
-
*/
|
|
138
|
-
log(message, ...args) {
|
|
139
|
-
this.info(message, ...args);
|
|
140
|
-
},
|
|
141
|
-
};
|
|
142
|
-
//# sourceMappingURL=logger.js.map
|
package/dist/src/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/src/messages.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { LanguageModelV2Prompt } from "@ai-sdk/provider";
|
|
2
|
-
export interface ConvertedPrompt {
|
|
3
|
-
systemPrompt: string;
|
|
4
|
-
prompt: string;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Converts an AI SDK LanguageModelV2 prompt (array of system/user/assistant/tool messages)
|
|
8
|
-
* into a system prompt string and a user prompt string for the Claude Agent SDK's query().
|
|
9
|
-
*
|
|
10
|
-
* Since we use maxTurns: 1, the Agent SDK makes a single LLM call. We serialize the full
|
|
11
|
-
* conversation history into the prompt so the LLM has context from prior turns.
|
|
12
|
-
*/
|
|
13
|
-
export declare function convertMessages(messages: LanguageModelV2Prompt): ConvertedPrompt;
|
|
14
|
-
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAI9D,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,qBAAqB,GAAG,eAAe,CAqFhF"}
|