devez-vibe 1.9.37 → 1.9.39
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/bin/dvz.exe +0 -0
- package/bridge/claude-agent-sdk-bridge.mjs +27 -2
- package/package.json +1 -1
package/bin/dvz.exe
CHANGED
|
Binary file
|
|
@@ -2835,7 +2835,12 @@ async function processResult(session, message) {
|
|
|
2835
2835
|
const detail = message.errors?.join("\n") || message.result || message.stop_reason || "Claude 실행 실패";
|
|
2836
2836
|
const guide = STARTUP_FAILURE_GUIDES[message.startup_failure_reason];
|
|
2837
2837
|
let error = message.is_error && !interrupted
|
|
2838
|
-
? {
|
|
2838
|
+
? {
|
|
2839
|
+
message: guide ? `${guide}\n${detail}` : detail,
|
|
2840
|
+
// An expired login gets the host's sign-in guide instead of the raw
|
|
2841
|
+
// `API Error: 401 {...}`; Codex tags the same failure `unauthorized`.
|
|
2842
|
+
...(session.turn?.assistantError === "authentication_failed" ? { codexErrorInfo: "unauthorized" } : {}),
|
|
2843
|
+
}
|
|
2839
2844
|
: null;
|
|
2840
2845
|
if (!error && !interrupted) {
|
|
2841
2846
|
const outcome = abnormalStopOutcome(message.stop_reason);
|
|
@@ -2935,7 +2940,12 @@ function finishTurn(session, error, durationMs) {
|
|
|
2935
2940
|
clearForegroundSubagents(session);
|
|
2936
2941
|
const turn = { id: session.turn.id, status: error ? "failed" : session.turn.interruptRequested ? "interrupted" : "completed" };
|
|
2937
2942
|
if (turn.status === "completed") completeLingeringTasks(session, Date.now());
|
|
2938
|
-
if (error)
|
|
2943
|
+
if (error) {
|
|
2944
|
+
turn.error = {
|
|
2945
|
+
message: error instanceof Error ? error.message : error.message || String(error),
|
|
2946
|
+
...(error.codexErrorInfo ? { codexErrorInfo: error.codexErrorInfo } : {}),
|
|
2947
|
+
};
|
|
2948
|
+
}
|
|
2939
2949
|
if (durationMs != null) turn.durationMs = durationMs;
|
|
2940
2950
|
notify("turn/completed", { threadId: session.id, turn });
|
|
2941
2951
|
session.turn = null;
|
|
@@ -4806,6 +4816,21 @@ async function runSelfTest() {
|
|
|
4806
4816
|
await consumeMessage(limitSession, { type: "assistant", error: "server_error", message: { content: [] } });
|
|
4807
4817
|
await consumeMessage(limitSession, failedResult);
|
|
4808
4818
|
if (limitSession.usageLimitWait) throw new Error("Unrelated server error started a usage wait");
|
|
4819
|
+
// An expired login reaches the host tagged like Codex's `unauthorized`.
|
|
4820
|
+
const authNotices = [];
|
|
4821
|
+
const authWrite = process.stdout.write;
|
|
4822
|
+
process.stdout.write = (chunk) => { authNotices.push(JSON.parse(String(chunk))); return true; };
|
|
4823
|
+
try {
|
|
4824
|
+
beginTurn(limitSession);
|
|
4825
|
+
await consumeMessage(limitSession, { type: "assistant", error: "authentication_failed", message: { content: [] } });
|
|
4826
|
+
await consumeMessage(limitSession, { ...failedResult, errors: ["API Error: 401 {\"type\":\"error\"}"] });
|
|
4827
|
+
} finally {
|
|
4828
|
+
process.stdout.write = authWrite;
|
|
4829
|
+
}
|
|
4830
|
+
const authTurn = authNotices.find((notice) => notice.method === "turn/completed")?.params?.turn;
|
|
4831
|
+
if (authTurn?.error?.codexErrorInfo !== "unauthorized" || !authTurn.error.message.includes("401")) {
|
|
4832
|
+
throw new Error(`Claude login failure lost its tag: ${JSON.stringify(authTurn)}`);
|
|
4833
|
+
}
|
|
4809
4834
|
beginTurn(limitSession);
|
|
4810
4835
|
for (let attempt = 0; attempt < 4; attempt++) {
|
|
4811
4836
|
await rejectLimit();
|