openzoo 0.51.26 → 0.51.28

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.
Files changed (2) hide show
  1. package/lib/proxy.js +11 -12
  2. package/package.json +1 -1
package/lib/proxy.js CHANGED
@@ -1013,19 +1013,18 @@ export async function startProxy({ silent = false, requireToken = null, sessionM
1013
1013
  let detail = '';
1014
1014
  try { const j = await result.response.clone().json(); detail = String(j?.error?.message || j?.error || '').slice(0, 300); } catch { /* opaque 5xx */ }
1015
1015
  log(`upstream ${result.response.status} for ${outageKey(init)}${detail ? `: ${detail}` : ''} — surfacing as-is, model NOT swapped`);
1016
- // "no door quoted <model>: … wrong asset/rail (base)" IS AN EMPTY
1017
- // WALLET WEARING A 502. Measured 2026-09-13: Solana USDC ran down to
1018
- // dust, the rail picker fell through to Base (which held $0.0016), and
1019
- // every door that only quotes Solana refused the offer — grok-4.6,
1020
- // deepseek and fable all "502"d while abliterated-model (~$0.0005/call)
1021
- // still paid out of the dust and looked fine. The raw 502 sent the
1022
- // harness into a reconnect storm and read like a dead model. Say what
1023
- // it is, and name the model the caller actually asked for.
1016
+ // "no door quoted <model>: … wrong asset/rail (base)" is a DOOR-SIDE
1017
+ // quote failure, and measurement says it is TRANSIENT — not an empty
1018
+ // wallet and not a dead model. 2026-09-13, five minutes apart on the
1019
+ // same funded wallet: grok-4.6, deepseek-v4-flash and claude-fable-5-1
1020
+ // all 502'd at 264.68 USDC, then all returned 200 at 259.00 USDC. The
1021
+ // balance went DOWN across the recovery, so funding was never the
1022
+ // variable. Do NOT print fund-me copy here — that sends a caller with
1023
+ // $260 to a top-up page. Just name the model they asked for and say
1024
+ // the door failed to quote, so a retry is the obvious next move.
1024
1025
  if (/no door quoted|wrong asset\/rail/i.test(detail)) {
1025
- const rail = /\(([^)]+)\)/.exec(detail.match(/wrong asset\/rail \([^)]*\)/i)?.[0] || '')?.[1] || '';
1026
- let msg = `${outageKey(init)} could not be paid for: the x402 door refused the offer${rail ? ` on the ${rail} rail` : ''}. This is almost always an empty wallet on the rail that door takes — the request never reached the model, and nothing was charged.`;
1027
- msg = await withOnrampLink(msg, { solana: client.address, evm: client.evmAddress, force: true });
1028
- jsonErr(res, 402, msg);
1026
+ const msg = `${outageKey(init)}: the x402 door failed to quote this model, so the request never reached it and nothing was charged. This is usually transient — retry in a minute. Gateway said: ${detail}`;
1027
+ jsonErr(res, 503, msg);
1029
1028
  return;
1030
1029
  }
1031
1030
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openzoo",
3
- "version": "0.51.26",
3
+ "version": "0.51.28",
4
4
  "description": "Local x402-paying proxy + MCP server for openzoo.fun — point any OpenAI-compatible harness (Cursor, Claude Code, aider, SDKs) at localhost and it pays per call from a local burner wallet. Solana and Base rails live; Robinhood experimental.",
5
5
  "license": "MIT",
6
6
  "type": "module",