vibeostheog 0.23.3 → 0.23.4
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 +4 -0
- package/package.json +1 -1
- package/src/lib/hooks/footer.js +1 -1
- package/src/lib/pricing.js +123 -2
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibeostheog",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.4",
|
|
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,7 @@ 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
|
-
return
|
|
802
|
+
return 0.00001; // unknown model default — cheap, but not free
|
|
682
803
|
}
|
|
683
804
|
export function isModelFree(model) {
|
|
684
805
|
if (!model || typeof model !== "string")
|