@sandagent/runner-cli 0.5.0 → 0.5.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.
package/README.md CHANGED
@@ -168,5 +168,6 @@ sandagent image build --name vikadata/sandagent --tag 0.1.0
168
168
 
169
169
  ## Related Documentation
170
170
 
171
+ - [Skills](docs/SKILLS.md) — Where skills live and how they are loaded (local and Docker)
171
172
  - [Claude Agent SDK](https://platform.claude.com/docs/agent-sdk/typescript)
172
173
  - [AI SDK UI Stream Protocol](https://ai-sdk.dev/docs/ai-sdk-ui/stream-protocol)
@@ -61,7 +61,7 @@ describe("buildImage", () => {
61
61
  const content = readFileSync(dockerfilePath, "utf8");
62
62
  expect(content).toContain("FROM node:20-slim");
63
63
  expect(content).toContain("@sandagent/runner-cli");
64
- expect(content).toContain('CMD ["sleep", "infinity"]');
64
+ expect(content).toContain('CMD ["bash", "-c", "start-cdp; sleep infinity"]');
65
65
  });
66
66
  it("uses --image override when provided", async () => {
67
67
  await buildImage({
@@ -1 +1 @@
1
- {"version":3,"file":"build-image.test.js","sourceRoot":"","sources":["../../src/__tests__/build-image.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-image.test.js","sourceRoot":"","sources":["../../src/__tests__/build-image.test.ts"],"names":[],"mappings":"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"}
package/dist/bundle.mjs CHANGED
@@ -229,6 +229,8 @@ var AISDKStreamConverter = class {
229
229
  systemMessage;
230
230
  hasEmittedStart = false;
231
231
  sessionId;
232
+ /** True after we emitted an error from a result message (e.g. API 400). Avoids emitting a second generic "exited with code 1" that would hide the real error. */
233
+ errorEmitted = false;
232
234
  partIdMap = /* @__PURE__ */ new Map();
233
235
  /**
234
236
  * Get the current session ID from the stream
@@ -256,6 +258,13 @@ var AISDKStreamConverter = class {
256
258
  }
257
259
  throw new Error("Part ID not found");
258
260
  }
261
+ /** Returns part ID for index or undefined if not tracked (e.g. content_block_stop without a prior start). */
262
+ tryGetPartId(index) {
263
+ if (!this.sessionId)
264
+ return void 0;
265
+ const partIdKey = `${this.sessionId}-${index}`;
266
+ return this.partIdMap.get(partIdKey);
267
+ }
259
268
  /**
260
269
  * Helper to emit tool call
261
270
  */
@@ -296,9 +305,18 @@ var AISDKStreamConverter = class {
296
305
  delta: event.delta.text
297
306
  });
298
307
  }
308
+ if (event.type === "content_block_start" && event.content_block.type === "thinking") {
309
+ const partId = `reasoning_${generateId()}`;
310
+ this.setPartId(event.index, partId);
311
+ }
312
+ if (event.type === "content_block_delta" && event.delta?.type === "thinking_delta") {
313
+ if (event.delta.thinking) {
314
+ yield this.emit({ type: "reasoning", text: event.delta.thinking });
315
+ }
316
+ }
299
317
  if (event.type === "content_block_stop") {
300
- const partId = this.getPartId(event.index);
301
- if (partId.startsWith("text_")) {
318
+ const partId = this.tryGetPartId(event.index);
319
+ if (partId?.startsWith("text_")) {
302
320
  yield this.emit({ type: "text-end", id: partId });
303
321
  }
304
322
  }
@@ -370,6 +388,7 @@ var AISDKStreamConverter = class {
370
388
  if (message.type === "result") {
371
389
  const resultMsg = message;
372
390
  if (resultMsg.is_error) {
391
+ this.errorEmitted = true;
373
392
  const errorText = resultMsg.result || "Unknown error";
374
393
  yield this.emit({
375
394
  type: "error",
@@ -387,21 +406,53 @@ var AISDKStreamConverter = class {
387
406
  }
388
407
  }
389
408
  } catch (error) {
390
- trace({ error: String(error) });
409
+ if (process.env.DEBUG === "true") {
410
+ const errPayload = {
411
+ error: error instanceof Error ? error.message : String(error)
412
+ };
413
+ if (error instanceof Error) {
414
+ if (error.stack)
415
+ errPayload.stack = error.stack;
416
+ if (error.cause !== void 0) {
417
+ errPayload.cause = error.cause instanceof Error ? {
418
+ message: error.cause.message,
419
+ stack: error.cause.stack
420
+ } : String(error.cause);
421
+ }
422
+ }
423
+ trace(errPayload);
424
+ } else {
425
+ trace({ error: String(error) });
426
+ }
391
427
  if (isAbortError(error)) {
392
428
  console.error("[AISDKStream] Operation aborted");
393
429
  } else {
394
430
  const errorMessage = error instanceof Error ? error.message : "Unknown error";
395
431
  console.error("[AISDKStream] Error:", errorMessage);
396
- yield this.emit({ type: "error", errorText: errorMessage });
397
- yield this.emit({
398
- type: "finish",
399
- finishReason: mapFinishReason("error_during_execution", true),
400
- messageMetadata: {
401
- usage: convertUsageToAISDK({}),
402
- sessionId: this.sessionId
432
+ if (process.env.DEBUG === "true") {
433
+ if (error instanceof Error && error.stack) {
434
+ console.error("[AISDKStream] Stack:", error.stack);
403
435
  }
404
- });
436
+ if (error instanceof Error && error.cause) {
437
+ console.error("[AISDKStream] Cause:", error.cause);
438
+ }
439
+ }
440
+ if ((errorMessage.includes("exited with code") || errorMessage.includes("process exited")) && this.errorEmitted) {
441
+ console.error("[AISDKStream] (Skipping duplicate error \u2014 already sent API/result error above. Check the first error in the stream.)");
442
+ } else if (errorMessage.includes("exited with code") || errorMessage.includes("process exited")) {
443
+ console.error("[AISDKStream] Hint: Verify ANTHROPIC_API_KEY, --model (proxy must support it), and network.");
444
+ }
445
+ if (!this.errorEmitted) {
446
+ yield this.emit({ type: "error", errorText: errorMessage });
447
+ yield this.emit({
448
+ type: "finish",
449
+ finishReason: mapFinishReason("error_during_execution", true),
450
+ messageMetadata: {
451
+ usage: convertUsageToAISDK({}),
452
+ sessionId: this.sessionId
453
+ }
454
+ });
455
+ }
405
456
  }
406
457
  } finally {
407
458
  yield `data: [DONE]
@@ -531,6 +582,7 @@ async function* runWithClaudeAgentSDK(sdk, options, userInput) {
531
582
  yield* runWithAISDKUIOutput(sdk, options, userInput);
532
583
  }
533
584
  function createSDKOptions(options) {
585
+ const isRoot = typeof process.getuid === "function" && process.getuid() === 0;
534
586
  return {
535
587
  model: options.model,
536
588
  systemPrompt: options.systemPrompt,
@@ -546,10 +598,8 @@ function createSDKOptions(options) {
546
598
  resume: options.resume,
547
599
  settingSources: ["project", "user"],
548
600
  canUseTool: createCanUseToolCallback(options),
549
- // Bypass all permission checks for automated execution
550
- permissionMode: "bypassPermissions",
551
- allowDangerouslySkipPermissions: true,
552
- // Enable partial messages for streaming
601
+ permissionMode: isRoot ? "default" : "bypassPermissions",
602
+ allowDangerouslySkipPermissions: !isRoot,
553
603
  includePartialMessages: options.includePartialMessages
554
604
  };
555
605
  }
@@ -1106,9 +1156,10 @@ function createOpenCodeRunner(options = {}) {
1106
1156
  }
1107
1157
 
1108
1158
  // ../../packages/runner-pi/dist/pi-runner.js
1109
- import { Agent } from "@mariozechner/pi-agent-core";
1159
+ import { appendFileSync as appendFileSync2, existsSync as existsSync3, unlinkSync as unlinkSync2 } from "node:fs";
1160
+ import { join as join3 } from "node:path";
1110
1161
  import { getModel } from "@mariozechner/pi-ai";
1111
- import { createCodingTools } from "@mariozechner/pi-coding-agent";
1162
+ import { SessionManager, createAgentSession } from "@mariozechner/pi-coding-agent";
1112
1163
  function parseModelSpec(model) {
1113
1164
  const trimmed = model.trim();
1114
1165
  const separator = trimmed.indexOf(":");
@@ -1124,6 +1175,8 @@ function getEnvValue(optionsEnv, name) {
1124
1175
  return optionsEnv?.[name] ?? process.env[name];
1125
1176
  }
1126
1177
  function applyModelOverrides(model, provider, optionsEnv) {
1178
+ if (model == null)
1179
+ return;
1127
1180
  const openAiBaseUrl = getEnvValue(optionsEnv, "OPENAI_BASE_URL");
1128
1181
  const geminiBaseUrl = getEnvValue(optionsEnv, "GEMINI_BASE_URL");
1129
1182
  const anthropicBaseUrl = getEnvValue(optionsEnv, "ANTHROPIC_BASE_URL");
@@ -1146,21 +1199,88 @@ function emitStreamError(errorText) {
1146
1199
  "data: [DONE]\n\n"
1147
1200
  ];
1148
1201
  }
1202
+ function usageToMessageMetadata(usage) {
1203
+ return {
1204
+ input_tokens: usage.input,
1205
+ output_tokens: usage.output,
1206
+ cache_read_input_tokens: usage.cacheRead,
1207
+ cache_creation_input_tokens: usage.cacheWrite
1208
+ };
1209
+ }
1210
+ function getUsageFromAgentEndMessages(messages) {
1211
+ for (let i = messages.length - 1; i >= 0; i--) {
1212
+ const m = messages[i];
1213
+ if (m.role === "assistant" && m.usage != null) {
1214
+ return m.usage;
1215
+ }
1216
+ }
1217
+ return void 0;
1218
+ }
1219
+ function getErrorFromAgentEndMessages(messages) {
1220
+ for (let i = messages.length - 1; i >= 0; i--) {
1221
+ const m = messages[i];
1222
+ if (m.role === "assistant" && m.errorMessage) {
1223
+ return m.errorMessage;
1224
+ }
1225
+ }
1226
+ return void 0;
1227
+ }
1228
+ function traceRawMessage(debugCwd, data, reset = false) {
1229
+ const enabled = process.env.DEBUG === "true" || process.env.DEBUG === "1";
1230
+ if (!enabled)
1231
+ return;
1232
+ try {
1233
+ const file = join3(debugCwd, "pi-message-stream-debug.json");
1234
+ if (reset && existsSync3(file))
1235
+ unlinkSync2(file);
1236
+ const type = data !== null && typeof data === "object" ? data.type : void 0;
1237
+ let payload = data;
1238
+ try {
1239
+ payload = data !== void 0 ? JSON.parse(JSON.stringify(data)) : void 0;
1240
+ } catch {
1241
+ payload = "[non-serializable]";
1242
+ }
1243
+ const entry = { _t: (/* @__PURE__ */ new Date()).toISOString(), type, payload };
1244
+ appendFileSync2(file, JSON.stringify(entry, null, 2) + ",\n");
1245
+ } catch {
1246
+ }
1247
+ }
1149
1248
  function createPiRunner(options = {}) {
1150
- const modelSpec = options.model || "google:gemini-2.5-flash-lite-preview-06-17";
1151
- const { provider, modelName } = parseModelSpec(modelSpec);
1249
+ const modelSpec = options.model;
1250
+ if (modelSpec == null || modelSpec.trim() === "") {
1251
+ throw new Error("Pi runner: model is required. Pass a model in the form <provider>:<model>, e.g. openai:gpt-4o or google:gemini-2.5-flash.");
1252
+ }
1253
+ const { provider, modelName } = parseModelSpec(modelSpec.trim());
1152
1254
  const cwd = options.cwd || process.cwd();
1153
1255
  const model = getModel(provider, modelName);
1256
+ if (model == null) {
1257
+ throw new Error(`Pi runner: unsupported model "${modelSpec}". getModel("${provider}", "${modelName}") returned undefined. Use a model from the pi-ai catalog; supported providers are typically: google, openai.`);
1258
+ }
1154
1259
  applyModelOverrides(model, provider, options.env);
1155
- const agent = new Agent({
1156
- initialState: {
1157
- systemPrompt: options.systemPrompt || "You are a helpful coding assistant.",
1158
- model,
1159
- tools: createCodingTools(cwd)
1160
- }
1161
- });
1162
1260
  return {
1163
1261
  async *run(userInput) {
1262
+ const resume = options.sessionId?.trim();
1263
+ const sessionManager = await (async () => {
1264
+ if (resume !== void 0 && resume !== "") {
1265
+ if (resume.includes("/")) {
1266
+ return SessionManager.open(resume);
1267
+ }
1268
+ const sessions = await SessionManager.list(cwd);
1269
+ const found = sessions.find((s) => s.id === resume);
1270
+ return found ? SessionManager.open(found.path) : SessionManager.continueRecent(cwd);
1271
+ }
1272
+ return SessionManager.continueRecent(cwd);
1273
+ })();
1274
+ const { session } = await createAgentSession({
1275
+ cwd,
1276
+ model,
1277
+ sessionManager
1278
+ });
1279
+ if (options.systemPrompt != null && options.systemPrompt !== "") {
1280
+ session.agent.setSystemPrompt(options.systemPrompt);
1281
+ } else {
1282
+ session.agent.setSystemPrompt("You are a helpful coding assistant.");
1283
+ }
1164
1284
  const eventQueue = [];
1165
1285
  let isComplete = false;
1166
1286
  let aborted = false;
@@ -1169,7 +1289,7 @@ function createPiRunner(options = {}) {
1169
1289
  wakeConsumer?.();
1170
1290
  wakeConsumer = null;
1171
1291
  };
1172
- const unsubscribe = agent.subscribe((e) => {
1292
+ const unsubscribe = session.subscribe((e) => {
1173
1293
  eventQueue.push(e);
1174
1294
  if (e.type === "agent_end") {
1175
1295
  isComplete = true;
@@ -1180,7 +1300,7 @@ function createPiRunner(options = {}) {
1180
1300
  const abortHandler = () => {
1181
1301
  aborted = true;
1182
1302
  isComplete = true;
1183
- agent.abort();
1303
+ void session.abort();
1184
1304
  notify();
1185
1305
  };
1186
1306
  if (abortSignal) {
@@ -1190,7 +1310,8 @@ function createPiRunner(options = {}) {
1190
1310
  }
1191
1311
  }
1192
1312
  try {
1193
- const promptPromise = agent.prompt(userInput);
1313
+ traceRawMessage(cwd, null, true);
1314
+ const promptPromise = session.prompt(userInput);
1194
1315
  const messageId = `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`;
1195
1316
  const textId = `text_${Date.now()}_${Math.random().toString(36).slice(2)}`;
1196
1317
  let hasStarted = false;
@@ -1200,17 +1321,29 @@ function createPiRunner(options = {}) {
1200
1321
  if (!hasStarted) {
1201
1322
  yield `data: ${JSON.stringify({ type: "start", messageId })}
1202
1323
 
1324
+ `;
1325
+ yield `data: ${JSON.stringify({
1326
+ type: "message-metadata",
1327
+ messageMetadata: { sessionId: session.sessionId }
1328
+ })}
1329
+
1203
1330
  `;
1204
1331
  hasStarted = true;
1205
1332
  }
1206
1333
  };
1207
- const finishSuccess = async function* () {
1334
+ const finishSuccess = async function* (usage) {
1208
1335
  if (hasTextStarted) {
1209
1336
  yield `data: ${JSON.stringify({ type: "text-end", id: textId })}
1210
1337
 
1211
1338
  `;
1212
1339
  }
1213
- yield `data: ${JSON.stringify({ type: "finish", finishReason: "stop" })}
1340
+ const finishPayload = { type: "finish", finishReason: "stop" };
1341
+ if (usage != null) {
1342
+ finishPayload.messageMetadata = {
1343
+ usage: usageToMessageMetadata(usage)
1344
+ };
1345
+ }
1346
+ yield `data: ${JSON.stringify(finishPayload)}
1214
1347
 
1215
1348
  `;
1216
1349
  yield "data: [DONE]\n\n";
@@ -1225,6 +1358,7 @@ function createPiRunner(options = {}) {
1225
1358
  while (!isComplete || eventQueue.length > 0) {
1226
1359
  while (eventQueue.length > 0) {
1227
1360
  const event = eventQueue.shift();
1361
+ traceRawMessage(cwd, event);
1228
1362
  yield* ensureStartEvent();
1229
1363
  if (event.type === "message_update") {
1230
1364
  if (event.assistantMessageEvent.type === "text_delta") {
@@ -1242,21 +1376,27 @@ function createPiRunner(options = {}) {
1242
1376
  }
1243
1377
  }
1244
1378
  } else if (event.type === "tool_execution_start") {
1245
- yield `data: ${JSON.stringify({ type: "tool-input-start", toolCallId: event.toolCallId, toolName: event.toolName })}
1379
+ yield `data: ${JSON.stringify({ type: "tool-input-start", toolCallId: event.toolCallId, toolName: event.toolName, dynamic: true })}
1246
1380
 
1247
1381
  `;
1248
- yield `data: ${JSON.stringify({ type: "tool-input-available", toolCallId: event.toolCallId, toolName: event.toolName, input: event.args })}
1382
+ yield `data: ${JSON.stringify({ type: "tool-input-available", toolCallId: event.toolCallId, toolName: event.toolName, input: event.args, dynamic: true })}
1249
1383
 
1250
1384
  `;
1251
1385
  } else if (event.type === "tool_execution_end") {
1252
- yield `data: ${JSON.stringify({ type: "tool-output-available", toolCallId: event.toolCallId, output: event.result })}
1386
+ yield `data: ${JSON.stringify({ type: "tool-output-available", toolCallId: event.toolCallId, output: event.result, dynamic: true })}
1253
1387
 
1254
1388
  `;
1255
1389
  } else if (event.type === "agent_end") {
1256
1390
  if (aborted) {
1257
1391
  yield* finishError("Run aborted by signal.");
1258
1392
  } else {
1259
- yield* finishSuccess();
1393
+ const errorMsg = getErrorFromAgentEndMessages(event.messages);
1394
+ if (errorMsg) {
1395
+ yield* finishError(errorMsg);
1396
+ } else {
1397
+ const usage = getUsageFromAgentEndMessages(event.messages);
1398
+ yield* finishSuccess(usage);
1399
+ }
1260
1400
  }
1261
1401
  }
1262
1402
  }
@@ -1284,15 +1424,16 @@ function createPiRunner(options = {}) {
1284
1424
  }
1285
1425
  return;
1286
1426
  }
1287
- if (!hasFinished && agent.state.error) {
1427
+ if (!hasFinished && session.agent.state.error) {
1288
1428
  yield* ensureStartEvent();
1289
- yield* finishError(agent.state.error);
1429
+ yield* finishError(session.agent.state.error);
1290
1430
  }
1291
1431
  } finally {
1292
1432
  if (abortSignal) {
1293
1433
  abortSignal.removeEventListener("abort", abortHandler);
1294
1434
  }
1295
1435
  unsubscribe();
1436
+ session.dispose();
1296
1437
  }
1297
1438
  }
1298
1439
  };
@@ -1358,7 +1499,8 @@ async function runAgent(options) {
1358
1499
  systemPrompt: options.systemPrompt,
1359
1500
  cwd: process.cwd(),
1360
1501
  env: process.env,
1361
- abortController
1502
+ abortController,
1503
+ sessionId: options.resume
1362
1504
  });
1363
1505
  break;
1364
1506
  }
package/dist/runner.d.ts CHANGED
@@ -4,7 +4,7 @@ import type { BaseRunnerOptions } from "@sandagent/runner-claude";
4
4
  * Extends BaseRunnerOptions with CLI-specific fields
5
5
  */
6
6
  export interface RunAgentOptions extends BaseRunnerOptions {
7
- /** Which runner to use: claude, codex, gemini, copilot */
7
+ /** Which runner to use: claude, codex, gemini, opencode, copilot, pi */
8
8
  runner: string;
9
9
  /** User input/task */
10
10
  userInput: string;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAalE;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGtE"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOlE;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGtE"}
package/dist/runner.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createClaudeRunner, } from "@sandagent/runner-claude";
2
- import { createCodexRunner, } from "@sandagent/runner-codex";
1
+ import { createClaudeRunner } from "@sandagent/runner-claude";
2
+ import { createCodexRunner } from "@sandagent/runner-codex";
3
3
  import { createGeminiRunner } from "@sandagent/runner-gemini";
4
4
  import { createOpenCodeRunner } from "@sandagent/runner-opencode";
5
5
  import { createPiRunner } from "@sandagent/runner-pi";
@@ -40,7 +40,7 @@ export async function runAgent(options) {
40
40
  allowedTools: options.allowedTools,
41
41
  resume: options.resume,
42
42
  env: process.env,
43
- abortController: abortController,
43
+ abortController,
44
44
  });
45
45
  break;
46
46
  }
@@ -53,7 +53,7 @@ export async function runAgent(options) {
53
53
  resume: options.resume,
54
54
  cwd: process.cwd(),
55
55
  env: process.env,
56
- abortController: abortController,
56
+ abortController,
57
57
  });
58
58
  break;
59
59
  }
@@ -64,7 +64,7 @@ export async function runAgent(options) {
64
64
  model: options.model,
65
65
  cwd: process.cwd(),
66
66
  env: process.env,
67
- abortController: abortController,
67
+ abortController,
68
68
  });
69
69
  break;
70
70
  }
@@ -74,7 +74,8 @@ export async function runAgent(options) {
74
74
  systemPrompt: options.systemPrompt,
75
75
  cwd: process.cwd(),
76
76
  env: process.env,
77
- abortController: abortController,
77
+ abortController,
78
+ sessionId: options.resume,
78
79
  });
79
80
  break;
80
81
  }
@@ -83,7 +84,7 @@ export async function runAgent(options) {
83
84
  model: options.model,
84
85
  cwd: process.cwd(),
85
86
  env: process.env,
86
- abortController: abortController,
87
+ abortController,
87
88
  });
88
89
  break;
89
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sandagent/runner-cli",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "SandAgent Runner CLI - Like gemini-cli or claude-code, runs in your local terminal with AI SDK UI streaming",
5
5
  "type": "module",
6
6
  "bin": {
@@ -41,23 +41,24 @@
41
41
  "anthropic"
42
42
  ],
43
43
  "dependencies": {
44
- "@anthropic-ai/claude-agent-sdk": "0.2.41",
44
+ "@anthropic-ai/claude-agent-sdk": "0.2.70",
45
45
  "@openai/codex-sdk": "^0.110.0",
46
46
  "@mariozechner/pi-agent-core": "^0.56.1",
47
47
  "@mariozechner/pi-ai": "^0.56.1",
48
48
  "@mariozechner/pi-coding-agent": "^0.56.1",
49
49
  "dotenv": "^17.3.1",
50
- "@sandagent/runner-claude": "0.1.2",
51
- "@sandagent/runner-gemini": "0.1.0",
52
- "@sandagent/runner-codex": "0.1.0",
53
- "@sandagent/runner-opencode": "0.1.0",
54
- "@sandagent/runner-pi": "0.1.0"
50
+ "zod": "^4.0.0"
55
51
  },
56
52
  "devDependencies": {
57
53
  "@types/node": "^20.10.0",
58
54
  "esbuild": "^0.27.2",
59
55
  "typescript": "^5.3.0",
60
- "vitest": "^1.6.1"
56
+ "vitest": "^1.6.1",
57
+ "@sandagent/runner-claude": "0.1.2",
58
+ "@sandagent/runner-codex": "0.1.0",
59
+ "@sandagent/runner-gemini": "0.1.0",
60
+ "@sandagent/runner-opencode": "0.1.0",
61
+ "@sandagent/runner-pi": "0.5.1"
61
62
  },
62
63
  "scripts": {
63
64
  "build": "tsc && pnpm bundle",