vibeostheog 0.23.3 → 0.23.5
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/CHANGELOG.md +8 -0
- package/package.json +1 -1
- package/src/lib/hooks/footer.js +1 -1
- package/src/lib/pricing.js +126 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## 0.23.5
|
|
2
|
+
- fix: tier-based median cost fallback for unknown models
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## 0.23.4
|
|
6
|
+
- fix: add complete OpenCode Go + Zen pricing maps, footer dedup/regex fix, free icon
|
|
7
|
+
|
|
8
|
+
|
|
1
9
|
## 0.23.3
|
|
2
10
|
- fix: footer model display — OpenCode Go alias, generic -free suffix handling, 🎁 free icon
|
|
3
11
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibeostheog",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.5",
|
|
4
4
|
"description": "Cost-aware delegation enforcer for OpenCode. Tracks model usage, routes Task subagents to cheaper tiers, surfaces cumulative savings in chat. Includes research audit, reporting framework, project memory, progressive scratchpad decadence, and trinity CLI for brain/medium/cheap slot switching.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"release": "node scripts/release.mjs",
|
package/src/lib/hooks/footer.js
CHANGED
|
@@ -275,7 +275,7 @@ async function _appendFooter(input, output, directory) {
|
|
|
275
275
|
subRegime: _latestBlackboxState?.sub_regime || classifyTurnSimple(latestUserIntent || ""),
|
|
276
276
|
stress: _footerStress,
|
|
277
277
|
}).mode;
|
|
278
|
-
const stripped = text.replace(/—
|
|
278
|
+
const stripped = text.replace(/— [^—]+ —\s*/g, "").trimEnd();
|
|
279
279
|
if (stripped !== text)
|
|
280
280
|
return;
|
|
281
281
|
if (stripped === _lastStrippedText)
|
package/src/lib/pricing.js
CHANGED
|
@@ -351,7 +351,18 @@ export function formatUsd(v) {
|
|
|
351
351
|
// These skip enforcement entirely to avoid noise.
|
|
352
352
|
// deepseek-chat is free with a DeepSeek API token — priced at $1e-12 (near-zero).
|
|
353
353
|
const FREE_MODEL_TURN_USD = 1e-10;
|
|
354
|
-
const FREE_MODELS = new Set([
|
|
354
|
+
const FREE_MODELS = new Set([
|
|
355
|
+
// OpenCode Zen free models
|
|
356
|
+
"opencode/big-pickle",
|
|
357
|
+
"opencode/mimo-v2.5-free",
|
|
358
|
+
"opencode/deepseek-v4-flash-free",
|
|
359
|
+
"opencode/nemotron-3-ultra-free",
|
|
360
|
+
// Normalized variants (after opencode/ prefix stripped)
|
|
361
|
+
"big-pickle",
|
|
362
|
+
"mimo-v2.5-free",
|
|
363
|
+
"deepseek-v4-flash-free",
|
|
364
|
+
"nemotron-3-ultra-free",
|
|
365
|
+
]);
|
|
355
366
|
// Actual input / output pricing per 1M tokens, sourced from provider API pages
|
|
356
367
|
// and OpenRouter /api/v1/models. Format: USD per 1 million tokens.
|
|
357
368
|
// Entries with provider/ prefix = OpenRouter route; without prefix = native provider.
|
|
@@ -434,6 +445,61 @@ const MODEL_PRICING_PER_1M = {
|
|
|
434
445
|
"mistralai/mistral-large-2512": { input: 0.50, output: 1.50 },
|
|
435
446
|
"mistralai/mistral-small-2603": { input: 0.15, output: 0.60 },
|
|
436
447
|
"mistralai/mistral-nemo": { input: 0.02, output: 0.03 },
|
|
448
|
+
// ── OpenCode Go ─────────────────────────────
|
|
449
|
+
"opencode-go/glm-5.1": { input: 1.40, output: 4.40 },
|
|
450
|
+
"opencode-go/glm-5": { input: 1.00, output: 3.20 },
|
|
451
|
+
"opencode-go/kimi-k2.6": { input: 0.95, output: 4.00 },
|
|
452
|
+
"opencode-go/kimi-k2.5": { input: 0.60, output: 3.00 },
|
|
453
|
+
"opencode-go/mimo-v2.5": { input: 0.14, output: 0.28 },
|
|
454
|
+
"opencode-go/mimo-v2.5-pro": { input: 1.74, output: 3.48 },
|
|
455
|
+
"opencode-go/minimax-m3": { input: 0.60, output: 2.40 },
|
|
456
|
+
"opencode-go/minimax-m2.7": { input: 0.30, output: 1.20 },
|
|
457
|
+
"opencode-go/minimax-m2.5": { input: 0.30, output: 1.20 },
|
|
458
|
+
"opencode-go/qwen3.7-max": { input: 2.50, output: 7.50 },
|
|
459
|
+
"opencode-go/qwen3.7-plus": { input: 0.40, output: 1.60 },
|
|
460
|
+
"opencode-go/qwen3.6-plus": { input: 0.50, output: 3.00 },
|
|
461
|
+
// ── OpenCode Zen (bare model names, opencode/ prefix stripped) ──
|
|
462
|
+
"minimax-m2.7": { input: 0.30, output: 1.20 },
|
|
463
|
+
"minimax-m2.5": { input: 0.30, output: 1.20 },
|
|
464
|
+
"glm-5.1": { input: 1.40, output: 4.40 },
|
|
465
|
+
"glm-5": { input: 1.00, output: 3.20 },
|
|
466
|
+
"kimi-k2.5": { input: 0.60, output: 3.00 },
|
|
467
|
+
"kimi-k2.6": { input: 0.95, output: 4.00 },
|
|
468
|
+
"qwen3.7-max": { input: 2.50, output: 7.50 },
|
|
469
|
+
"qwen3.7-plus": { input: 0.40, output: 1.60 },
|
|
470
|
+
"qwen3.6-plus": { input: 0.50, output: 3.00 },
|
|
471
|
+
"qwen3.5-plus": { input: 0.20, output: 1.20 },
|
|
472
|
+
"deepseek-v4-flash": { input: 0.14, output: 0.28 },
|
|
473
|
+
"grok-build-0.1": { input: 1.00, output: 2.00 },
|
|
474
|
+
"claude-opus-4-8": { input: 5.00, output: 25.00 },
|
|
475
|
+
"claude-opus-4-7": { input: 5.00, output: 25.00 },
|
|
476
|
+
"claude-opus-4-6": { input: 5.00, output: 25.00 },
|
|
477
|
+
"claude-opus-4-5": { input: 5.00, output: 25.00 },
|
|
478
|
+
"claude-opus-4-1": { input: 15.00, output: 75.00 },
|
|
479
|
+
"claude-sonnet-4-6": { input: 3.00, output: 15.00 },
|
|
480
|
+
"claude-sonnet-4-5": { input: 3.00, output: 15.00 },
|
|
481
|
+
"claude-sonnet-4": { input: 3.00, output: 15.00 },
|
|
482
|
+
"claude-haiku-4-5": { input: 1.00, output: 5.00 },
|
|
483
|
+
"gemini-3.5-flash": { input: 1.50, output: 9.00 },
|
|
484
|
+
"gemini-3.1-pro": { input: 2.00, output: 12.00 },
|
|
485
|
+
"gemini-3-flash": { input: 0.50, output: 3.00 },
|
|
486
|
+
"gpt-5.5": { input: 5.00, output: 30.00 },
|
|
487
|
+
"gpt-5.5-pro": { input: 30.00, output: 180.00 },
|
|
488
|
+
"gpt-5.4": { input: 2.50, output: 15.00 },
|
|
489
|
+
"gpt-5.4-pro": { input: 30.00, output: 180.00 },
|
|
490
|
+
"gpt-5.4-mini": { input: 0.75, output: 4.50 },
|
|
491
|
+
"gpt-5.4-nano": { input: 0.20, output: 1.25 },
|
|
492
|
+
"gpt-5.3-codex-spark": { input: 1.75, output: 14.00 },
|
|
493
|
+
"gpt-5.3-codex": { input: 1.75, output: 14.00 },
|
|
494
|
+
"gpt-5.2": { input: 1.75, output: 14.00 },
|
|
495
|
+
"gpt-5.2-codex": { input: 1.75, output: 14.00 },
|
|
496
|
+
"gpt-5.1": { input: 1.07, output: 8.50 },
|
|
497
|
+
"gpt-5.1-codex": { input: 1.07, output: 8.50 },
|
|
498
|
+
"gpt-5.1-codex-max": { input: 1.25, output: 10.00 },
|
|
499
|
+
"gpt-5.1-codex-mini": { input: 0.25, output: 2.00 },
|
|
500
|
+
"gpt-5": { input: 1.07, output: 8.50 },
|
|
501
|
+
"gpt-5-codex": { input: 1.07, output: 8.50 },
|
|
502
|
+
"gpt-5-nano": { input: 0.05, output: 0.40 },
|
|
437
503
|
};
|
|
438
504
|
// Approximate USD per typical ~1 K-token turn (blended input+output).
|
|
439
505
|
// Blend: 700 input + 300 output tokens per turn (line 272-273).
|
|
@@ -478,6 +544,61 @@ const MODEL_USD_PER_TURN = {
|
|
|
478
544
|
"openai/gpt-4.1-mini": 0.00019,
|
|
479
545
|
"openai/o3": 0.0038,
|
|
480
546
|
"openai/o4-mini": 0.0021,
|
|
547
|
+
// ── OpenCode Go ─────────────────────────────
|
|
548
|
+
"opencode-go/glm-5.1": 0.00230,
|
|
549
|
+
"opencode-go/glm-5": 0.00166,
|
|
550
|
+
"opencode-go/kimi-k2.6": 0.00187,
|
|
551
|
+
"opencode-go/kimi-k2.5": 0.00132,
|
|
552
|
+
"opencode-go/mimo-v2.5": 0.000182,
|
|
553
|
+
"opencode-go/mimo-v2.5-pro": 0.00226,
|
|
554
|
+
"opencode-go/minimax-m3": 0.00114,
|
|
555
|
+
"opencode-go/minimax-m2.7": 0.00057,
|
|
556
|
+
"opencode-go/minimax-m2.5": 0.00057,
|
|
557
|
+
"opencode-go/qwen3.7-max": 0.00400,
|
|
558
|
+
"opencode-go/qwen3.7-plus": 0.00076,
|
|
559
|
+
"opencode-go/qwen3.6-plus": 0.00125,
|
|
560
|
+
// ── OpenCode Zen (bare model names, opencode/ prefix stripped by normalizeModelId) ──
|
|
561
|
+
"minimax-m2.7": 0.00057,
|
|
562
|
+
"minimax-m2.5": 0.00057,
|
|
563
|
+
"glm-5.1": 0.00230,
|
|
564
|
+
"glm-5": 0.00166,
|
|
565
|
+
"kimi-k2.5": 0.00132,
|
|
566
|
+
"kimi-k2.6": 0.00187,
|
|
567
|
+
"qwen3.7-max": 0.00400,
|
|
568
|
+
"qwen3.7-plus": 0.00076,
|
|
569
|
+
"qwen3.6-plus": 0.00125,
|
|
570
|
+
"qwen3.5-plus": 0.00050,
|
|
571
|
+
"deepseek-v4-flash": 0.000182,
|
|
572
|
+
"grok-build-0.1": 0.00130,
|
|
573
|
+
"claude-opus-4-8": 0.01100,
|
|
574
|
+
"claude-opus-4-7": 0.01100,
|
|
575
|
+
"claude-opus-4-6": 0.01100,
|
|
576
|
+
"claude-opus-4-5": 0.01100,
|
|
577
|
+
"claude-opus-4-1": 0.03300,
|
|
578
|
+
"claude-sonnet-4-6": 0.00660,
|
|
579
|
+
"claude-sonnet-4-5": 0.00660,
|
|
580
|
+
"claude-sonnet-4": 0.00660,
|
|
581
|
+
"claude-haiku-4-5": 0.00220,
|
|
582
|
+
"gemini-3.5-flash": 0.00375,
|
|
583
|
+
"gemini-3.1-pro": 0.00500,
|
|
584
|
+
"gemini-3-flash": 0.00125,
|
|
585
|
+
"gpt-5.5": 0.01250,
|
|
586
|
+
"gpt-5.5-pro": 0.07500,
|
|
587
|
+
"gpt-5.4": 0.00625,
|
|
588
|
+
"gpt-5.4-pro": 0.07500,
|
|
589
|
+
"gpt-5.4-mini": 0.00188,
|
|
590
|
+
"gpt-5.4-nano": 0.00052,
|
|
591
|
+
"gpt-5.3-codex-spark": 0.00543,
|
|
592
|
+
"gpt-5.3-codex": 0.00543,
|
|
593
|
+
"gpt-5.2": 0.00543,
|
|
594
|
+
"gpt-5.2-codex": 0.00543,
|
|
595
|
+
"gpt-5.1": 0.00330,
|
|
596
|
+
"gpt-5.1-codex": 0.00330,
|
|
597
|
+
"gpt-5.1-codex-max": 0.00388,
|
|
598
|
+
"gpt-5.1-codex-mini": 0.00078,
|
|
599
|
+
"gpt-5": 0.00330,
|
|
600
|
+
"gpt-5-codex": 0.00330,
|
|
601
|
+
"gpt-5-nano": 0.00016,
|
|
481
602
|
};
|
|
482
603
|
let _pricingOverridesCache = null;
|
|
483
604
|
let _pricingOverridesLoadedAt = 0;
|
|
@@ -678,7 +799,10 @@ export function modelCostPerTurn(model) {
|
|
|
678
799
|
}
|
|
679
800
|
}
|
|
680
801
|
console.error(`[vibeOS] modelCostPerTurn: unknown model '${model}' (normalized: '${key}') — add to MODEL_USD_PER_TURN`);
|
|
681
|
-
|
|
802
|
+
// Fallback by tier: use median cost of all known models in the same tier
|
|
803
|
+
const tier = classify(model);
|
|
804
|
+
const TIER_FALLBACK = { high: 0.01175, mid: 0.00660, budget: 0.00144 };
|
|
805
|
+
return TIER_FALLBACK[tier] ?? 0.00144;
|
|
682
806
|
}
|
|
683
807
|
export function isModelFree(model) {
|
|
684
808
|
if (!model || typeof model !== "string")
|