@sandagent/runner-cli 0.2.17 → 0.2.19
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 +1 -0
- package/dist/bundle.mjs +44 -9
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -184,5 +184,6 @@ sandagent image build --name vikadata/sandagent --tag 0.1.0
|
|
|
184
184
|
|
|
185
185
|
## Related Documentation
|
|
186
186
|
|
|
187
|
+
- [Skills 使用说明](docs/SKILLS.md) — 本地与 Docker 下 skills 的存放路径与加载方式
|
|
187
188
|
- [Claude Agent SDK](https://platform.claude.com/docs/agent-sdk/typescript)
|
|
188
189
|
- [AI SDK UI Stream Protocol](https://ai-sdk.dev/docs/ai-sdk-ui/stream-protocol)
|
package/dist/bundle.mjs
CHANGED
|
@@ -227,6 +227,8 @@ var AISDKStreamConverter = class {
|
|
|
227
227
|
systemMessage;
|
|
228
228
|
hasEmittedStart = false;
|
|
229
229
|
sessionId;
|
|
230
|
+
/** 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. */
|
|
231
|
+
errorEmitted = false;
|
|
230
232
|
partIdMap = /* @__PURE__ */ new Map();
|
|
231
233
|
/**
|
|
232
234
|
* Get the current session ID from the stream
|
|
@@ -368,6 +370,7 @@ var AISDKStreamConverter = class {
|
|
|
368
370
|
if (message.type === "result") {
|
|
369
371
|
const resultMsg = message;
|
|
370
372
|
if (resultMsg.is_error) {
|
|
373
|
+
this.errorEmitted = true;
|
|
371
374
|
const errorText = resultMsg.result || "Unknown error";
|
|
372
375
|
yield this.emit({
|
|
373
376
|
type: "error",
|
|
@@ -385,21 +388,53 @@ var AISDKStreamConverter = class {
|
|
|
385
388
|
}
|
|
386
389
|
}
|
|
387
390
|
} catch (error) {
|
|
388
|
-
|
|
391
|
+
if (process.env.DEBUG === "true") {
|
|
392
|
+
const errPayload = {
|
|
393
|
+
error: error instanceof Error ? error.message : String(error)
|
|
394
|
+
};
|
|
395
|
+
if (error instanceof Error) {
|
|
396
|
+
if (error.stack)
|
|
397
|
+
errPayload.stack = error.stack;
|
|
398
|
+
if (error.cause !== void 0) {
|
|
399
|
+
errPayload.cause = error.cause instanceof Error ? {
|
|
400
|
+
message: error.cause.message,
|
|
401
|
+
stack: error.cause.stack
|
|
402
|
+
} : String(error.cause);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
trace(errPayload);
|
|
406
|
+
} else {
|
|
407
|
+
trace({ error: String(error) });
|
|
408
|
+
}
|
|
389
409
|
if (isAbortError(error)) {
|
|
390
410
|
console.error("[AISDKStream] Operation aborted");
|
|
391
411
|
} else {
|
|
392
412
|
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
393
413
|
console.error("[AISDKStream] Error:", errorMessage);
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
sessionId: this.sessionId
|
|
414
|
+
if (process.env.DEBUG === "true") {
|
|
415
|
+
if (error instanceof Error && error.stack) {
|
|
416
|
+
console.error("[AISDKStream] Stack:", error.stack);
|
|
417
|
+
}
|
|
418
|
+
if (error instanceof Error && error.cause) {
|
|
419
|
+
console.error("[AISDKStream] Cause:", error.cause);
|
|
401
420
|
}
|
|
402
|
-
}
|
|
421
|
+
}
|
|
422
|
+
if ((errorMessage.includes("exited with code") || errorMessage.includes("process exited")) && this.errorEmitted) {
|
|
423
|
+
console.error("[AISDKStream] (Skipping duplicate error \u2014 already sent API/result error above. Check the first error in the stream.)");
|
|
424
|
+
} else if (errorMessage.includes("exited with code") || errorMessage.includes("process exited")) {
|
|
425
|
+
console.error("[AISDKStream] Hint: Verify ANTHROPIC_API_KEY, --model (proxy must support it), and network.");
|
|
426
|
+
}
|
|
427
|
+
if (!this.errorEmitted) {
|
|
428
|
+
yield this.emit({ type: "error", errorText: errorMessage });
|
|
429
|
+
yield this.emit({
|
|
430
|
+
type: "finish",
|
|
431
|
+
finishReason: mapFinishReason("error_during_execution", true),
|
|
432
|
+
messageMetadata: {
|
|
433
|
+
usage: convertUsageToAISDK({}),
|
|
434
|
+
sessionId: this.sessionId
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
}
|
|
403
438
|
}
|
|
404
439
|
} finally {
|
|
405
440
|
yield `data: [DONE]
|
package/package.json
CHANGED