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 CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.23.4
2
+ - fix: add complete OpenCode Go + Zen pricing maps, footer dedup/regex fix, free icon
3
+
4
+
1
5
  ## 0.23.3
2
6
  - fix: footer model display — OpenCode Go alias, generic -free suffix handling, 🎁 free icon
3
7
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibeostheog",
3
- "version": "0.23.3",
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",
@@ -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(/— .+?VIBE[^—]*—\s*/gi, "").trimEnd();
278
+ const stripped = text.replace(/— [^—]+ —\s*/g, "").trimEnd();
279
279
  if (stripped !== text)
280
280
  return;
281
281
  if (stripped === _lastStrippedText)
@@ -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 FREE_MODEL_TURN_USD;
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")