vibeostheog 0.24.27 → 0.24.29

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,20 @@
1
+ ## 0.24.29
2
+ - feat: promote data-backed experimental regimes (#158)
3
+ - feat: promote data-backed experimental regimes
4
+ - test: add live lifecycle regression
5
+ - chore: v0.24.28
6
+ Merge pull request #160 from DrunkkToys/codex/release-patch-0.24.28
7
+ Fix clean CI sync for generated modules
8
+ Fix CI sync for generated modules
9
+ Fix CI artifact sync
10
+ Sync generated flow rules
11
+ Merge remote-tracking branch 'origin/master' into codex/release-patch-0.24.28
12
+ Fix release CI regressions
13
+ Merge pull request #159 from DrunkkToys/codex/release-patch-0.24.28
14
+ Strengthen cascade lifecycle coverage
15
+ Merge branch 'master' of https://github.com/DrunkkToys/vibeOS into codex/release-patch-0.24.28
16
+
17
+
1
18
  ## 0.24.25
2
19
  - fix: heal stale vibelitex recovery across cascade
3
20
 
package/dist/vibeOS.js CHANGED
@@ -454,6 +454,12 @@ function autoSelectMode(subRegime, stressMultiplier) {
454
454
  return "speed";
455
455
  if (regime === "CONVERGING" || regime === "CLOSED")
456
456
  return "quality";
457
+ if (regime === "IMPLEMENTING")
458
+ return "quality";
459
+ if (regime === "RESEARCH" || regime === "DESIGNING")
460
+ return "longrun";
461
+ if (regime === "REVIEWING")
462
+ return "audit";
457
463
  if (stressMultiplier && stressMultiplier > QUALITY_STRESS_THRESHOLD)
458
464
  return "quality";
459
465
  return "litex";
@@ -515,6 +521,58 @@ var init_meta_controller = __esm({
515
521
  context7_urgency: "preferred",
516
522
  wbp_verbosity: "normal"
517
523
  },
524
+ IMPLEMENTING: {
525
+ enforcement_mode: "strict",
526
+ enforcement_reason: "implementation work \u2014 validate code changes and keep tests on",
527
+ flow_mode: "strict",
528
+ flow_focus: ["write-edit-check", "no-untouched-files"],
529
+ tdd_mode: "strict",
530
+ tdd_focus: ["skeleton-on-write", "assertion-check"],
531
+ tier_bias: "brain",
532
+ thinking_mode: "brief",
533
+ stress_multiplier: 1.3,
534
+ context7_urgency: "required",
535
+ wbp_verbosity: "normal"
536
+ },
537
+ RESEARCH: {
538
+ enforcement_mode: "normal",
539
+ enforcement_reason: "research mode \u2014 collect evidence before changing anything",
540
+ flow_mode: "audit",
541
+ flow_focus: ["trace-audit"],
542
+ tdd_mode: "lazy",
543
+ tdd_focus: [],
544
+ tier_bias: "brain",
545
+ thinking_mode: "full",
546
+ stress_multiplier: 1.2,
547
+ context7_urgency: "required",
548
+ wbp_verbosity: "detailed"
549
+ },
550
+ REVIEWING: {
551
+ enforcement_mode: "strict",
552
+ enforcement_reason: "review mode \u2014 validate diffs and surface risks",
553
+ flow_mode: "strict",
554
+ flow_focus: ["write-edit-check", "no-untouched-files", "no-lgtm"],
555
+ tdd_mode: "quality",
556
+ tdd_focus: ["full-coverage", "edge-cases"],
557
+ tier_bias: "brain",
558
+ thinking_mode: "brief",
559
+ stress_multiplier: 1.1,
560
+ context7_urgency: "required",
561
+ wbp_verbosity: "normal"
562
+ },
563
+ DESIGNING: {
564
+ enforcement_mode: "normal",
565
+ enforcement_reason: "design mode \u2014 explore architecture and tradeoffs",
566
+ flow_mode: "audit",
567
+ flow_focus: ["trace-audit"],
568
+ tdd_mode: "normal",
569
+ tdd_focus: [],
570
+ tier_bias: "brain",
571
+ thinking_mode: "full",
572
+ stress_multiplier: 1.1,
573
+ context7_urgency: "required",
574
+ wbp_verbosity: "detailed"
575
+ },
518
576
  CONVERGING: {
519
577
  enforcement_mode: "strict",
520
578
  enforcement_reason: "user about to commit \u2014 full enforcement, catch violations",
@@ -6292,7 +6350,7 @@ import { join as join7, dirname as dirname8 } from "node:path";
6292
6350
 
6293
6351
  // src/vibeOS-lib/blackbox/resolution-tracker.js
6294
6352
  var ResolutionTracker = class _ResolutionTracker {
6295
- static SUB_REGIMES = ["INIT", "DIVERGENT", "EXPLORING", "REFINING", "CONVERGING", "CLOSED", "LOOPING"];
6353
+ static SUB_REGIMES = ["INIT", "DIVERGENT", "EXPLORING", "REFINING", "IMPLEMENTING", "RESEARCH", "REVIEWING", "DESIGNING", "CONVERGING", "CLOSED", "LOOPING"];
6296
6354
  sessionId;
6297
6355
  maxHistory;
6298
6356
  history;
@@ -6902,6 +6960,12 @@ function autoSelectMode2(subRegime, stressMultiplier) {
6902
6960
  return "speed";
6903
6961
  if (regime === "CONVERGING" || regime === "CLOSED")
6904
6962
  return "quality";
6963
+ if (regime === "IMPLEMENTING")
6964
+ return "quality";
6965
+ if (regime === "RESEARCH" || regime === "DESIGNING")
6966
+ return "longrun";
6967
+ if (regime === "REVIEWING")
6968
+ return "audit";
6905
6969
  if (stress > QUALITY_STRESS_THRESHOLD2)
6906
6970
  return "quality";
6907
6971
  return "vibelitex";
@@ -10461,6 +10525,10 @@ function recordSaving(tool2, reason, saveEst, meta = {}) {
10461
10525
  const w = ses.warns[i];
10462
10526
  if (w?.key === warnKey && now - w.ts < WARN_DEDUPE_WINDOW_MS) {
10463
10527
  w.count = (w.count || 1) + 1;
10528
+ w.est_savings_usd = roundUsd(Number(w.est_savings_usd || 0) + saveEst);
10529
+ w.saveEst = roundUsd(Number(w.saveEst || 0) + saveEst);
10530
+ ses.total_savings_usd = roundUsd(Number(ses.total_savings_usd || 0) + saveEst);
10531
+ s.lifetime.total_savings_usd = roundUsd(Number(s.lifetime.total_savings_usd || 0) + saveEst);
10464
10532
  deduped = true;
10465
10533
  }
10466
10534
  }
@@ -11474,6 +11542,10 @@ var REGIME_TAG = {
11474
11542
  DIVERGENT: "DVRG",
11475
11543
  EXPLORING: "XPLR",
11476
11544
  REFINING: "RFNE",
11545
+ IMPLEMENTING: "IMPL",
11546
+ RESEARCH: "RSCH",
11547
+ REVIEWING: "RVW",
11548
+ DESIGNING: "DSGN",
11477
11549
  CONVERGING: "CVGE",
11478
11550
  CLOSED: "CLSD",
11479
11551
  LOOPING: "LOOP",
@@ -11501,6 +11573,28 @@ function resolveBrand(optMode, activeSlot) {
11501
11573
  function resolveTierIcon(slot) {
11502
11574
  return TIER_ICON[slot] || "\u26A1";
11503
11575
  }
11576
+ function formatModeLabel(optMode) {
11577
+ const normalized = String(optMode || "").toLowerCase();
11578
+ if (!normalized)
11579
+ return "";
11580
+ if (normalized === "vibemax" || normalized === "vibelitex" || normalized === "budget")
11581
+ return "Budget";
11582
+ if (normalized === "vibeqmax" || normalized === "quality")
11583
+ return "Quality";
11584
+ if (normalized === "vibeultrax")
11585
+ return "VibeUltraX";
11586
+ if (normalized === "speed")
11587
+ return "Speed";
11588
+ if (normalized === "longrun")
11589
+ return "Longrun";
11590
+ if (normalized === "audit")
11591
+ return "Audit";
11592
+ if (normalized === "forensic")
11593
+ return "Forensic";
11594
+ if (normalized === "balanced")
11595
+ return "Balanced";
11596
+ return normalized.charAt(0).toUpperCase() + normalized.slice(1);
11597
+ }
11504
11598
  function formatVectorPulse(vectorChangedSlot) {
11505
11599
  if (!vectorChangedSlot)
11506
11600
  return "";
@@ -11559,6 +11653,7 @@ function buildFooterLine(input) {
11559
11653
  const { activeSlot, sessionSlot, providerLabel, modelName, ltTotal, ltTrend, vibeBrand, optMode, flashIcon, enfTags, vectorChangedSlot, subRegime } = input;
11560
11654
  const tierIcon = resolveTierIcon(activeSlot);
11561
11655
  const regimeTag = subRegime ? REGIME_TAG[subRegime] || subRegime.slice(0, 4) : null;
11656
+ const modeLabel = formatModeLabel(optMode);
11562
11657
  let line = `\u2014 ${tierIcon} ${activeSlot} | ${providerLabel} | ${modelName}${regimeTag ? ` \u25B6 ${regimeTag}` : ""}`;
11563
11658
  if (ltTotal > 0) {
11564
11659
  const savingsPulse = formatSavingsPulse(ltTotal, ltTrend);
@@ -11567,7 +11662,7 @@ function buildFooterLine(input) {
11567
11662
  }
11568
11663
  line += ` | ${vibeBrand}${flashIcon}`;
11569
11664
  if (optMode && optMode !== "auto") {
11570
- line += ` ${optMode}`;
11665
+ line += ` ${modeLabel}`;
11571
11666
  }
11572
11667
  if (vectorChangedSlot && vectorChangedSlot !== activeSlot) {
11573
11668
  line += ` | ${formatVectorPulse(vectorChangedSlot)}`;
@@ -11824,7 +11919,7 @@ async function _appendFooter(input, output, directory3) {
11824
11919
  const activeSlot = selNowFooter.active_slot || "brain";
11825
11920
  const flashIcon = isApiConnected2() ? " \u26A1" : "";
11826
11921
  const displayMode = autoSelectMode2(currentSubRegime, _footerStress);
11827
- const vibeBrand = resolveBrand(displayMode, activeSlot);
11922
+ const vibeBrand = resolveBrand(loadOptimizationMode() || displayMode, activeSlot);
11828
11923
  const vibeLine = buildFooterLine({
11829
11924
  activeSlot,
11830
11925
  providerLabel: execution.provider_label,
@@ -11895,7 +11990,7 @@ import { writeFileSync as writeFileSync14, appendFileSync as appendFileSync6, ex
11895
11990
  import { join as join17, dirname as dirname12, basename as basename4 } from "node:path";
11896
11991
  import { createHash as createHash5 } from "node:crypto";
11897
11992
 
11898
- // src/lib/cost-anomaly.js
11993
+ // src/lib/cost-anomaly.ts
11899
11994
  var COST_WINDOW_SIZE = 20;
11900
11995
  var COST_ANOMALY_THRESHOLD = 3;
11901
11996
  var COST_WARMUP_SAMPLES = 5;
@@ -11906,26 +12001,21 @@ var CostAnomalyDetector = class {
11906
12001
  currentAnomalyCost = 0;
11907
12002
  currentAnomalyMean = 0;
11908
12003
  record(cost) {
11909
- if (this.disabled)
11910
- return;
12004
+ if (this.disabled) return;
11911
12005
  this.costHistory.push(cost);
11912
12006
  if (this.costHistory.length > COST_WINDOW_SIZE) {
11913
12007
  this.costHistory.shift();
11914
12008
  }
11915
12009
  }
11916
12010
  get mean() {
11917
- if (this.costHistory.length === 0)
11918
- return 0;
12011
+ if (this.costHistory.length === 0) return 0;
11919
12012
  return this.costHistory.reduce((a, b) => a + b, 0) / this.costHistory.length;
11920
12013
  }
11921
12014
  checkAnomaly(model, cost) {
11922
- if (this.disabled)
11923
- return false;
11924
- if (this.costHistory.length < COST_WARMUP_SAMPLES)
11925
- return false;
12015
+ if (this.disabled) return false;
12016
+ if (this.costHistory.length < COST_WARMUP_SAMPLES) return false;
11926
12017
  const avg = this.mean;
11927
- if (avg <= 0 || cost <= avg)
11928
- return false;
12018
+ if (avg <= 0 || cost <= avg) return false;
11929
12019
  const ratio = cost / avg;
11930
12020
  if (ratio > COST_ANOMALY_THRESHOLD) {
11931
12021
  this.currentAnomalyModel = model;
@@ -11947,8 +12037,7 @@ var CostAnomalyDetector = class {
11947
12037
  };
11948
12038
  var _costDetector = null;
11949
12039
  function getCostAnomalyDetector() {
11950
- if (!_costDetector)
11951
- _costDetector = new CostAnomalyDetector();
12040
+ if (!_costDetector) _costDetector = new CostAnomalyDetector();
11952
12041
  return _costDetector;
11953
12042
  }
11954
12043
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibeostheog",
3
- "version": "0.24.27",
3
+ "version": "0.24.29",
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",