@ai-sdk/harness-claude-code 1.0.96 → 1.0.97

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.js CHANGED
@@ -266,7 +266,7 @@ var inboundMessageSchema = z.discriminatedUnion("type", [
266
266
  ]);
267
267
 
268
268
  // src/version.ts
269
- var VERSION = true ? "1.0.96" : "0.0.0-test";
269
+ var VERSION = true ? "1.0.97" : "0.0.0-test";
270
270
 
271
271
  // src/claude-code-harness.ts
272
272
  var CLAUDE_CODE_CLIENT_APP = `ai-sdk/harness-claude-code/${VERSION}`;
@@ -892,6 +892,7 @@ function createClaudeCode(settings = {}) {
892
892
  lifecycleStateSchema: claudeCodeResumeStateSchema,
893
893
  getBootstrap: getClaudeCodeBootstrap,
894
894
  doStart: async (startOpts) => {
895
+ const model = startOpts.model ?? settings.model;
895
896
  const sandboxSession = startOpts.sandboxSession;
896
897
  const toolSafeSandboxSession = getRestrictedSandboxSession(sandboxSession);
897
898
  const sandboxId = "id" in sandboxSession ? sandboxSession.id : void 0;
@@ -965,6 +966,10 @@ function createClaudeCode(settings = {}) {
965
966
  CLAUDE_CODE_BOOTSTRAP_DIR
966
967
  );
967
968
  const workDir = startOpts.sessionWorkDir;
969
+ const sandboxHomeDir = await resolveSandboxHomeDir({
970
+ sandbox: toolSafeSandboxSession,
971
+ abortSignal: startOpts.abortSignal
972
+ });
968
973
  const sessionDataDir = `${defaultWorkingDirectory}/.agent-runs/${startOpts.sessionId}`;
969
974
  const bridgeStateDir = `${sessionDataDir}/bridge`;
970
975
  const timeoutMs = settings.startupTimeoutMs ?? 12e4;
@@ -1015,7 +1020,7 @@ function createClaudeCode(settings = {}) {
1015
1020
  // process handle. The session lifecycle method decides whether the
1016
1021
  // sandbox is left running, stopped, or destroyed.
1017
1022
  proc: void 0,
1018
- model: settings.model,
1023
+ model,
1019
1024
  maxTurns: settings.maxTurns,
1020
1025
  env: sandboxClaudeEnvironment,
1021
1026
  thinking,
@@ -1030,7 +1035,8 @@ function createClaudeCode(settings = {}) {
1030
1035
  debug: startOpts.observability?.debug,
1031
1036
  permissionMode: startOpts.permissionMode,
1032
1037
  builtinToolFiltering: startOpts.builtinToolFiltering,
1033
- skills: startOpts.skills ?? [],
1038
+ sandbox: toolSafeSandboxSession,
1039
+ sandboxHomeDir,
1034
1040
  mcpServers: settings.mcpServers,
1035
1041
  supportsUserMessageResponses: () => supportsUserMessageResponses
1036
1042
  });
@@ -1049,10 +1055,6 @@ function createClaudeCode(settings = {}) {
1049
1055
  respawnStrategy = "replay";
1050
1056
  }
1051
1057
  }
1052
- const sandboxHomeDir = startOpts.skills && startOpts.skills.length > 0 ? await resolveSandboxHomeDir({
1053
- sandbox: toolSafeSandboxSession,
1054
- abortSignal: startOpts.abortSignal
1055
- }) : void 0;
1056
1058
  const port = resolveBridgePort({
1057
1059
  sandboxSession,
1058
1060
  override: settings.port
@@ -1061,7 +1063,6 @@ function createClaudeCode(settings = {}) {
1061
1063
  const env = {
1062
1064
  BRIDGE_CHANNEL_TOKEN: token,
1063
1065
  BRIDGE_WS_PORT: String(port),
1064
- ...sandboxHomeDir ? { HOME: sandboxHomeDir } : {},
1065
1066
  ...respawnStrategy === "replay" ? { BRIDGE_REPLAY_FROM_DISK: "1" } : {}
1066
1067
  };
1067
1068
  if (respawnStrategy === void 0) {
@@ -1069,17 +1070,6 @@ function createClaudeCode(settings = {}) {
1069
1070
  command: `mkdir -p ${shellQuote(workDir)} ${shellQuote(bridgeStateDir)}`,
1070
1071
  abortSignal: startOpts.abortSignal
1071
1072
  });
1072
- if (startOpts.skills && startOpts.skills.length > 0) {
1073
- if (!sandboxHomeDir) {
1074
- throw new Error("Unable to resolve sandbox HOME directory.");
1075
- }
1076
- await writeClaudeCodeSkills({
1077
- sandbox: toolSafeSandboxSession,
1078
- homeDir: sandboxHomeDir,
1079
- skills: startOpts.skills,
1080
- abortSignal: startOpts.abortSignal
1081
- });
1082
- }
1083
1073
  }
1084
1074
  await markBridgeStarting({
1085
1075
  sandbox: toolSafeSandboxSession,
@@ -1146,7 +1136,7 @@ function createClaudeCode(settings = {}) {
1146
1136
  sessionId: startOpts.sessionId,
1147
1137
  channel,
1148
1138
  proc,
1149
- model: settings.model,
1139
+ model,
1150
1140
  maxTurns: settings.maxTurns,
1151
1141
  env: sandboxClaudeEnvironment,
1152
1142
  thinking,
@@ -1161,7 +1151,8 @@ function createClaudeCode(settings = {}) {
1161
1151
  debug: startOpts.observability?.debug,
1162
1152
  permissionMode: startOpts.permissionMode,
1163
1153
  builtinToolFiltering: startOpts.builtinToolFiltering,
1164
- skills: startOpts.skills ?? [],
1154
+ sandbox: toolSafeSandboxSession,
1155
+ sandboxHomeDir,
1165
1156
  mcpServers: settings.mcpServers,
1166
1157
  supportsUserMessageResponses: () => supportsUserMessageResponses
1167
1158
  });
@@ -1409,7 +1400,8 @@ function createSession({
1409
1400
  debug,
1410
1401
  permissionMode,
1411
1402
  builtinToolFiltering,
1412
- skills,
1403
+ sandbox,
1404
+ sandboxHomeDir,
1413
1405
  mcpServers,
1414
1406
  supportsUserMessageResponses
1415
1407
  }) {
@@ -1549,10 +1541,19 @@ function createSession({
1549
1541
  harnessId: "claude-code"
1550
1542
  });
1551
1543
  }
1544
+ await writeClaudeCodeSkills({
1545
+ sandbox,
1546
+ homeDir: sandboxHomeDir,
1547
+ skills: promptOpts.skills,
1548
+ abortSignal: promptOpts.abortSignal
1549
+ });
1552
1550
  const control = wireTurn({
1553
1551
  emit: promptOpts.emit,
1554
1552
  abortSignal: promptOpts.abortSignal
1555
1553
  });
1554
+ if (promptOpts.abortSignal?.aborted) {
1555
+ return control;
1556
+ }
1556
1557
  const startMessage = {
1557
1558
  type: "start",
1558
1559
  prompt: extractUserText(promptOpts.prompt),
@@ -1568,7 +1569,7 @@ function createSession({
1568
1569
  ...env !== void 0 ? { env } : {},
1569
1570
  thinking,
1570
1571
  ...effort !== void 0 ? { effort } : {},
1571
- ...skills.length > 0 ? { skills: skills.map((skill) => skill.name) } : {},
1572
+ ...promptOpts.skills.length > 0 ? { skills: promptOpts.skills.map((skill) => skill.name) } : {},
1572
1573
  ...mcpServers == null ? {} : { mcpServers },
1573
1574
  ...permissionMode ? { permissionMode } : {},
1574
1575
  ...builtinToolFiltering ? { builtinToolFiltering } : {},
@@ -1586,11 +1587,17 @@ function createSession({
1586
1587
  harnessId: "claude-code"
1587
1588
  });
1588
1589
  }
1590
+ await writeClaudeCodeSkills({
1591
+ sandbox,
1592
+ homeDir: sandboxHomeDir,
1593
+ skills: continueOpts.skills,
1594
+ abortSignal: continueOpts.abortSignal
1595
+ });
1589
1596
  const control = wireTurn({
1590
1597
  emit: continueOpts.emit,
1591
1598
  abortSignal: continueOpts.abortSignal
1592
1599
  });
1593
- if (rerunContinue) {
1600
+ if (rerunContinue && !continueOpts.abortSignal?.aborted) {
1594
1601
  pendingResumeFlag = false;
1595
1602
  channel.send({
1596
1603
  type: "start",
@@ -1614,7 +1621,7 @@ function createSession({
1614
1621
  ...env !== void 0 ? { env } : {},
1615
1622
  thinking,
1616
1623
  ...effort !== void 0 ? { effort } : {},
1617
- ...skills.length > 0 ? { skills: skills.map((skill) => skill.name) } : {},
1624
+ ...continueOpts.skills.length > 0 ? { skills: continueOpts.skills.map((skill) => skill.name) } : {},
1618
1625
  ...mcpServers == null ? {} : { mcpServers },
1619
1626
  ...permissionMode ? { permissionMode } : {},
1620
1627
  ...builtinToolFiltering ? { builtinToolFiltering } : {},