openzoo 0.48.44 → 0.48.46
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/lib/launch.js +8 -1
- package/lib/proxy.js +36 -0
- package/package.json +1 -1
package/lib/launch.js
CHANGED
|
@@ -248,7 +248,14 @@ export async function launchClaude(argv) {
|
|
|
248
248
|
+ 'const lbl=(isFinite(sx2)&&sx2>0)?"x on spilled":"x vs direct";'
|
|
249
249
|
+ 'const col2=(on>1)?"\\x1b[32m":"\\x1b[90m";'
|
|
250
250
|
+ 'const save=(on==null||!isFinite(on))?"":(" \\u00b7 "+col2+on.toFixed(4)+lbl+(sv>0?(" ($"+sv.toFixed(4)+" saved)"):"")+"\\x1b[0m");'
|
|
251
|
-
|
|
251
|
+
// REAL upstream cost, metered by OpenRouter (`usage.cost`), not our
|
|
252
|
+
// catalog estimate. Everything else on this line is derived from
|
|
253
|
+
// `max_tokens`, which callers set as a ceiling — measured 2026-08-19, a
|
|
254
|
+
// $0.9858 quote covered $0.007962 of actual inference. Showing the two
|
|
255
|
+
// side by side is the only way the markup is visible while it is happening.
|
|
256
|
+
+ 'const ac=j.actual||{};'
|
|
257
|
+
+ 'const real=(ac.calls>0)?(" \\u00b7 $"+Number(ac.upstreamUsd||0).toFixed(4)+" real"+(ac.markupX?(" ("+ac.markupX+"x)"):"")):"";'
|
|
258
|
+
+ 'process.stdout.write("\\x1b[38;5;208m\\u25cf\\x1b[0m openzoo $"+(Number(j.spendUsd)||0).toFixed(4)+" "+(j.paidCalls||0)+" call"+((j.paidCalls||0)===1?"":"s")+save+real+spill+cr+" \\u00b7 x402")}'
|
|
252
259
|
+ 'catch{process.stdout.write("\\x1b[38;5;208m\\u25cf\\x1b[0m openzoo \\u00b7 x402")}})\'\n');
|
|
253
260
|
fs.chmodSync(scriptPath, 0o755);
|
|
254
261
|
const settingsPath = path.join(os.homedir(), '.claude', 'settings.json');
|
package/lib/proxy.js
CHANGED
|
@@ -565,6 +565,22 @@ export async function startProxy({ silent = false, requireToken = null, sessionM
|
|
|
565
565
|
// while spilled calls and offloaded tokens both sat completely still.
|
|
566
566
|
let spillSpend = 0;
|
|
567
567
|
let spillDirect = 0;
|
|
568
|
+
// ACTUAL UPSTREAM SPEND, FROM THE PROVIDER — not our estimate of it.
|
|
569
|
+
//
|
|
570
|
+
// Every other dollar figure here is derived from OpenRouter's CATALOG price
|
|
571
|
+
// times a token count we guessed, and the guess is bad in a specific
|
|
572
|
+
// direction: output is priced on `max_tokens`, which callers set as a ceiling.
|
|
573
|
+
// MEASURED 2026-08-19: a call we quoted at $0.9858 (32,000 reserved output
|
|
574
|
+
// tokens) actually cost $0.007962 — OpenRouter's own number, 124x smaller.
|
|
575
|
+
//
|
|
576
|
+
// OpenRouter returns `usage.cost` on every completion, so the real figure is
|
|
577
|
+
// already in the response body and needs no extra request and no account-level
|
|
578
|
+
// lookup. That last part matters: /api/v1/credits reports the WHOLE key's
|
|
579
|
+
// lifetime usage, and this key also pays for ttfx direct runs and other work,
|
|
580
|
+
// so the account total can never attribute a dollar to this proxy. Per-call
|
|
581
|
+
// cost can.
|
|
582
|
+
let sessionActual = 0;
|
|
583
|
+
let actualCalls = 0;
|
|
568
584
|
// CREDIT, CACHED. Users cannot tell prepaid credit from wallet balance and
|
|
569
585
|
// have to guess whether a call was even paid for ("I don't think x402 made me
|
|
570
586
|
// pay this at all"). The status line runs EVERY turn, so this is refreshed at
|
|
@@ -708,6 +724,18 @@ export async function startProxy({ silent = false, requireToken = null, sessionM
|
|
|
708
724
|
savedUsd: Math.max(0, sessionDirect - sessionSpent),
|
|
709
725
|
savingX: sessionSpent > 0 ? Number((sessionDirect / sessionSpent).toFixed(4)) : null,
|
|
710
726
|
paidCalls,
|
|
727
|
+
// WHAT THE INFERENCE ACTUALLY COST, as reported by OpenRouter on each
|
|
728
|
+
// completion (`usage.cost`). Every other figure above is a catalog
|
|
729
|
+
// estimate built on `max_tokens`; this is metered. `margin` is the
|
|
730
|
+
// honest gross on this session — the number that says whether the
|
|
731
|
+
// pricing is sane, which no estimate can.
|
|
732
|
+
actual: {
|
|
733
|
+
calls: actualCalls,
|
|
734
|
+
upstreamUsd: Number(sessionActual.toFixed(6)),
|
|
735
|
+
billedUsd: Number(sessionSpent.toFixed(6)),
|
|
736
|
+
marginUsd: Number((sessionSpent - sessionActual).toFixed(6)),
|
|
737
|
+
markupX: sessionActual > 0 ? Number((sessionSpent / sessionActual).toFixed(2)) : null,
|
|
738
|
+
},
|
|
711
739
|
mcp: `${self.replace(/\/v1$/, '')}/mcp`,
|
|
712
740
|
upstream: config.apiBase,
|
|
713
741
|
payment: 'x402 per request from the operator\'s local burner wallet — no API key, no account',
|
|
@@ -1093,6 +1121,14 @@ export async function startProxy({ silent = false, requireToken = null, sessionM
|
|
|
1093
1121
|
if (isChat && response.ok && upCt.includes('application/json')) {
|
|
1094
1122
|
let data = null;
|
|
1095
1123
|
try { data = await response.clone().json(); } catch { /* not JSON after all */ }
|
|
1124
|
+
// WHAT IT REALLY COST, straight from the provider. This rides every
|
|
1125
|
+
// completion already — no extra call, and unlike the account-level
|
|
1126
|
+
// /api/v1/credits total it is attributable to THIS proxy even though the
|
|
1127
|
+
// same OpenRouter key also pays for ttfx and everything else.
|
|
1128
|
+
if (typeof data?.usage?.cost === 'number' && data.usage.cost >= 0) {
|
|
1129
|
+
sessionActual += data.usage.cost;
|
|
1130
|
+
actualCalls += 1;
|
|
1131
|
+
}
|
|
1096
1132
|
// PREPAID CALLS STILL COST MONEY. The block above only meters calls
|
|
1097
1133
|
// where THIS proxy answered a 402 and paid. When prepaid credit covers
|
|
1098
1134
|
// the quote the gateway serves 200 on the FIRST request, so there is
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openzoo",
|
|
3
|
-
"version": "0.48.
|
|
3
|
+
"version": "0.48.46",
|
|
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",
|