Skip to content

Commit 72b42f0

Browse files
committed
fix: preserve ClickClack nonce lookup causes (#105775)
1 parent 321a041 commit 72b42f0

3 files changed

Lines changed: 15 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ Docs: https://docs.openclaw.ai
3434
### Fixes
3535

3636
- **Gateway in-process restarts:** clear stale SIGUSR1 restart state and resume prepared host suspensions before rebuilding runtime admission, preventing restart cooldowns or paused scheduling from leaking into the next lifecycle.
37-
- **ClickClack durable media delivery:** route media replies through required delivery, reuse owner-scoped upload and message nonces across retries, repair persisted attachment state without rereading source media, and fail closed when an older ClickClack server cannot prove an unknown send. Thanks @shakkernerd.
38-
- **ClickClack model reply budgets:** remove the channel-level token cap and use the selected provider and model's runtime output budget so short compatibility limits no longer suppress valid replies. Thanks @shakkernerd.
37+
- **ClickClack durable media delivery:** route media replies through required delivery, reuse owner-scoped upload and message nonces across retries, repair persisted attachment state without rereading source media, fail closed when an older ClickClack server cannot prove an unknown send, and use the selected provider and model's runtime output budget instead of a channel-level token cap. Thanks @jjjhenriksen and @shakkernerd.
3938
- **Deepgram realtime custom endpoints:** validate Voice Call streaming base URLs with secret-safe errors, preserve explicit `ws://` and `wss://` endpoints, and map HTTP schemes to their matching WebSocket transport for dedicated and self-hosted deployments. (#105334) Thanks @dwc1997.
4039
- **macOS remote node readiness:** take the main-session key from the node hello snapshot instead of opening an operator connection during node admission, preventing remote tunnel recovery from leaving Computer Use and node exec stuck in lifecycle transition.
4140
- **Claude CLI context budgets:** honor Anthropic model and per-agent `contextTokens` limits by passing the effective limit to Claude Code's native auto-compactor and persisting the same prepared budget in OpenClaw session state. Fixes #80933. (#93198) Thanks @mushuiyu886.

extensions/clickclack/src/http-client.test.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,10 @@ describe("ClickClack HTTP client", () => {
410410
).resolves.toBeUndefined();
411411
await expect(
412412
client.findUploadByNonce({ workspaceId: "wsp_1", nonce: "unsupported" }),
413-
).rejects.toThrow("does not support durable upload nonce lookup");
413+
).rejects.toMatchObject({
414+
message: expect.stringContaining("does not support durable upload nonce lookup"),
415+
cause: expect.objectContaining({ status: 404 }),
416+
});
414417
await expect(
415418
client.findUploadByNonce({ workspaceId: "wsp_1", nonce: "broken" }),
416419
).rejects.toThrow("ClickClack 503");
@@ -466,7 +469,10 @@ describe("ClickClack HTTP client", () => {
466469
).resolves.toBeUndefined();
467470
await expect(
468471
client.findMessageByNonce({ workspaceId: "wsp_1", nonce: "unsupported" }),
469-
).rejects.toThrow("does not support durable message nonce lookup");
472+
).rejects.toMatchObject({
473+
message: expect.stringContaining("does not support durable message nonce lookup"),
474+
cause: expect.objectContaining({ status: 404 }),
475+
});
470476
await expect(
471477
client.findMessageByNonce({ workspaceId: "wsp_1", nonce: "broken" }),
472478
).rejects.toThrow("ClickClack 503");

extensions/clickclack/src/http-client.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,9 @@ export function createClickClackClient(options: ClientOptions) {
218218
if (error.headers.get("X-ClickClack-Message-Nonce") === "supported") {
219219
return undefined;
220220
}
221-
throw new Error("ClickClack server does not support durable message nonce lookup");
221+
throw new Error("ClickClack server does not support durable message nonce lookup", {
222+
cause: error,
223+
});
222224
}
223225
throw error;
224226
}
@@ -312,7 +314,9 @@ export function createClickClackClient(options: ClientOptions) {
312314
if (error.headers.get("X-ClickClack-Upload-Nonce") === "supported") {
313315
return undefined;
314316
}
315-
throw new Error("ClickClack server does not support durable upload nonce lookup");
317+
throw new Error("ClickClack server does not support durable upload nonce lookup", {
318+
cause: error,
319+
});
316320
}
317321
throw error;
318322
}

0 commit comments

Comments
 (0)