ai-sdk-provider-claude-code 3.3.5 → 3.4.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.
package/README.md CHANGED
@@ -284,6 +284,9 @@ This provider exposes Agent SDK options directly. Key options include:
284
284
  | `persistSession` | When `false`, disables session persistence to disk (v3.2.0+) |
285
285
  | `spawnClaudeCodeProcess` | Custom process spawner for VMs/containers (v3.2.0+) |
286
286
  | `permissionMode` | Permission mode: `'default'`, `'acceptEdits'`, `'bypassPermissions'`, `'plan'`, `'delegate'`, `'dontAsk'` |
287
+ | `sessionId` | Use a specific session ID for deterministic tracking and correlation (v3.4.0+) |
288
+ | `debug` | Enable programmatic debug logging from the SDK (v3.4.0+) |
289
+ | `debugFile` | Path to a file for SDK debug log output (v3.4.0+) |
287
290
 
288
291
  **Agent definitions** (`agents`) now support additional fields (v3.2.0+):
289
292
 
package/dist/index.cjs CHANGED
@@ -404,18 +404,33 @@ function getErrorMetadata(error) {
404
404
  }
405
405
 
406
406
  // src/map-claude-code-finish-reason.ts
407
- function mapClaudeCodeFinishReason(subtype) {
407
+ function mapClaudeCodeFinishReason(subtype, stopReason) {
408
+ if (stopReason != null) {
409
+ switch (stopReason) {
410
+ case "end_turn":
411
+ return { unified: "stop", raw: "end_turn" };
412
+ case "max_tokens":
413
+ return { unified: "length", raw: "max_tokens" };
414
+ case "stop_sequence":
415
+ return { unified: "stop", raw: "stop_sequence" };
416
+ case "tool_use":
417
+ return { unified: "tool-calls", raw: "tool_use" };
418
+ default:
419
+ break;
420
+ }
421
+ }
422
+ const raw = stopReason ?? subtype;
408
423
  switch (subtype) {
409
424
  case "success":
410
- return { unified: "stop", raw: subtype };
425
+ return { unified: "stop", raw };
411
426
  case "error_max_turns":
412
- return { unified: "length", raw: subtype };
427
+ return { unified: "length", raw };
413
428
  case "error_during_execution":
414
- return { unified: "error", raw: subtype };
429
+ return { unified: "error", raw };
415
430
  case void 0:
416
- return { unified: "stop", raw: void 0 };
431
+ return { unified: "stop", raw };
417
432
  default:
418
- return { unified: "other", raw: subtype };
433
+ return { unified: "other", raw };
419
434
  }
420
435
  }
421
436
 
@@ -465,6 +480,7 @@ var claudeCodeSettingsSchema = import_zod.z.object({
465
480
  permissionPromptToolName: import_zod.z.string().optional(),
466
481
  continue: import_zod.z.boolean().optional(),
467
482
  resume: import_zod.z.string().optional(),
483
+ sessionId: import_zod.z.string().optional(),
468
484
  allowedTools: import_zod.z.array(import_zod.z.string()).optional(),
469
485
  disallowedTools: import_zod.z.array(import_zod.z.string()).optional(),
470
486
  betas: import_zod.z.array(import_zod.z.string()).optional(),
@@ -534,6 +550,8 @@ var claudeCodeSettingsSchema = import_zod.z.object({
534
550
  ])
535
551
  ).optional(),
536
552
  verbose: import_zod.z.boolean().optional(),
553
+ debug: import_zod.z.boolean().optional(),
554
+ debugFile: import_zod.z.string().optional(),
537
555
  logger: import_zod.z.union([import_zod.z.literal(false), loggerFunctionSchema]).optional(),
538
556
  env: import_zod.z.record(import_zod.z.string(), import_zod.z.string().optional()).optional(),
539
557
  additionalDirectories: import_zod.z.array(import_zod.z.string()).optional(),
@@ -1260,6 +1278,15 @@ var ClaudeCodeLanguageModel = class _ClaudeCodeLanguageModel {
1260
1278
  if (this.settings.hooks) {
1261
1279
  opts.hooks = this.settings.hooks;
1262
1280
  }
1281
+ if (this.settings.sessionId !== void 0) {
1282
+ opts.sessionId = this.settings.sessionId;
1283
+ }
1284
+ if (this.settings.debug !== void 0) {
1285
+ opts.debug = this.settings.debug;
1286
+ }
1287
+ if (this.settings.debugFile !== void 0) {
1288
+ opts.debugFile = this.settings.debugFile;
1289
+ }
1263
1290
  const sdkOverrides = sdkOptions ? sdkOptions : void 0;
1264
1291
  const sdkEnv = sdkOverrides && typeof sdkOverrides.env === "object" && sdkOverrides.env !== null ? sdkOverrides.env : void 0;
1265
1292
  const sdkStderr = sdkOverrides && typeof sdkOverrides.stderr === "function" ? sdkOverrides.stderr : void 0;
@@ -1463,7 +1490,8 @@ var ClaudeCodeLanguageModel = class _ClaudeCodeLanguageModel {
1463
1490
  `[claude-code] Token usage - Input: ${usage.inputTokens.total}, Output: ${usage.outputTokens.total}`
1464
1491
  );
1465
1492
  }
1466
- finishReason = mapClaudeCodeFinishReason(message.subtype);
1493
+ const stopReason = "stop_reason" in message ? message.stop_reason : void 0;
1494
+ finishReason = mapClaudeCodeFinishReason(message.subtype, stopReason);
1467
1495
  this.logger.debug(`[claude-code] Finish reason: ${finishReason.unified}`);
1468
1496
  } else if (message.type === "system" && message.subtype === "init") {
1469
1497
  this.setSessionId(message.session_id);
@@ -1846,18 +1874,19 @@ var ClaudeCodeLanguageModel = class _ClaudeCodeLanguageModel {
1846
1874
  id: toolId
1847
1875
  });
1848
1876
  state.inputClosed = true;
1849
- state.lastSerializedInput = accumulatedInput;
1877
+ const effectiveInput = accumulatedInput || state.lastSerializedInput || "";
1878
+ state.lastSerializedInput = effectiveInput;
1850
1879
  if (!state.callEmitted) {
1851
1880
  controller.enqueue({
1852
1881
  type: "tool-call",
1853
1882
  toolCallId: toolId,
1854
1883
  toolName: state.name,
1855
- input: accumulatedInput,
1884
+ input: effectiveInput,
1856
1885
  providerExecuted: true,
1857
1886
  dynamic: true,
1858
1887
  providerMetadata: {
1859
1888
  "claude-code": {
1860
- rawInput: accumulatedInput,
1889
+ rawInput: effectiveInput,
1861
1890
  parentToolCallId: state.parentToolCallId ?? null
1862
1891
  }
1863
1892
  }
@@ -2205,8 +2234,10 @@ var ClaudeCodeLanguageModel = class _ClaudeCodeLanguageModel {
2205
2234
  `[claude-code] Stream token usage - Input: ${usage.inputTokens.total}, Output: ${usage.outputTokens.total}`
2206
2235
  );
2207
2236
  }
2237
+ const stopReason = "stop_reason" in message ? message.stop_reason : void 0;
2208
2238
  const finishReason = mapClaudeCodeFinishReason(
2209
- message.subtype
2239
+ message.subtype,
2240
+ stopReason
2210
2241
  );
2211
2242
  this.logger.debug(`[claude-code] Stream finish reason: ${finishReason.unified}`);
2212
2243
  this.setSessionId(message.session_id);
@@ -2467,7 +2498,8 @@ function createCustomMcpServer(config) {
2467
2498
  name,
2468
2499
  def.description,
2469
2500
  def.inputSchema.shape,
2470
- (args, extra) => def.handler(args, extra)
2501
+ (args, extra) => def.handler(args, extra),
2502
+ def.annotations ? { annotations: def.annotations } : void 0
2471
2503
  )
2472
2504
  );
2473
2505
  return (0, import_claude_agent_sdk2.createSdkMcpServer)({ name: config.name, version: config.version, tools: defs });