@askalf/dario 4.8.49 → 4.8.50

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.
@@ -1426,6 +1426,21 @@ export function buildCCRequest(clientBody, billingTag, cacheControl, identity, o
1426
1426
  // wire footprint).
1427
1427
  ccRequest.tools = CC_TOOL_DEFINITIONS;
1428
1428
  }
1429
+ else if (model.toLowerCase().includes('fable')) {
1430
+ // Fable refuses tool-less CC-shaped MULTI-TURN requests (live replay
1431
+ // bisect 2026-06-09): scrubbed system + zero tools + an assistant turn
1432
+ // in history → 200 + stop_reason "refusal" with empty content on every
1433
+ // request, while the byte-identical body WITH CC's tool array answers.
1434
+ // Real CC always sends its tool array, so zero-tools is itself a
1435
+ // fingerprint divergence (see the merge-tools note above) — fable's
1436
+ // refusal layer is just the first model to punish it. Emit the CC base
1437
+ // array pinned with `tool_choice: none` so the model cannot call tools
1438
+ // the client never declared (without the pin it DOES — verified
1439
+ // spurious WebFetch on a weather prompt). Other families keep the
1440
+ // legacy tool-less shape, which they demonstrably accept.
1441
+ ccRequest.tools = CC_TOOL_DEFINITIONS;
1442
+ ccRequest.tool_choice = { type: 'none' };
1443
+ }
1429
1444
  // Metadata
1430
1445
  ccRequest.metadata = {
1431
1446
  user_id: JSON.stringify({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askalf/dario",
3
- "version": "4.8.49",
3
+ "version": "4.8.50",
4
4
  "description": "Use your Claude Pro/Max subscription in any tool — Cursor, Cline, Aider, the Agent SDK, your scripts — at subscription pricing, not per-token API bills. One local Anthropic + OpenAI-compatible endpoint.",
5
5
  "type": "module",
6
6
  "bin": {