vibeostheog 0.24.27 → 0.24.30
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 +21 -0
- package/README.md +7 -2
- package/dist/vibeOS.js +108 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
## 0.24.30
|
|
2
|
+
- fix: prefer trinity slot in footer
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## 0.24.29
|
|
6
|
+
- feat: promote data-backed experimental regimes (#158)
|
|
7
|
+
- feat: promote data-backed experimental regimes
|
|
8
|
+
- fix: prefer trinity slot in footer
|
|
9
|
+
- test: add live lifecycle regression
|
|
10
|
+
- chore: v0.24.28
|
|
11
|
+
Fix clean CI sync for generated modules
|
|
12
|
+
Fix CI sync for generated modules
|
|
13
|
+
Fix CI artifact sync
|
|
14
|
+
Sync generated flow rules
|
|
15
|
+
Merge remote-tracking branch 'origin/master' into codex/release-patch-0.24.28
|
|
16
|
+
Fix release CI regressions
|
|
17
|
+
Merge pull request #159 from DrunkkToys/codex/release-patch-0.24.28
|
|
18
|
+
Strengthen cascade lifecycle coverage
|
|
19
|
+
Merge branch 'master' of https://github.com/DrunkkToys/vibeOS into codex/release-patch-0.24.28
|
|
20
|
+
|
|
21
|
+
|
|
1
22
|
## 0.24.25
|
|
2
23
|
- fix: heal stale vibelitex recovery across cascade
|
|
3
24
|
|
package/README.md
CHANGED
|
@@ -104,7 +104,7 @@ Benchmarked on 1000 simulated questions across 20 runs, using model accuracies f
|
|
|
104
104
|
| **Flow enforcer** | Pattern-rule checks on write/edit. Extracts TODO/FIXME into append-only queue. |
|
|
105
105
|
| **TDD enforcer** | Auto-creates test skeletons for changed source. Strict mode: TODO tests fail. |
|
|
106
106
|
| **Pattern learner** | Tracks recurring struggle/routine patterns per project. |
|
|
107
|
-
| **VibeBoX** | 7 sub-regimes, 11 features per turn, 4 loop intervention levels, PIVOT/SWITCH detection. Auto-mode maps regime to optimization mode. |
|
|
107
|
+
| **VibeBoX** | 7 canonical sub-regimes plus promoted ML/runtime regimes (IMPLEMENTING, RESEARCH, REVIEWING, DESIGNING, AUDIT, FORENSIC), 11 features per turn, 4 loop intervention levels, PIVOT/SWITCH detection. Auto-mode maps regime to optimization mode. |
|
|
108
108
|
| **Stress-aware routing** | Stress gauge in footer. Stress > 1.5 escalates to quality mode. |
|
|
109
109
|
| **Cache savings** | Separate cache_savings_usd tracking for scratchpad cache hits. |
|
|
110
110
|
| **Report tools** | report-save, report-list, report-read, research-audit. |
|
|
@@ -238,15 +238,20 @@ When the remote API is unreachable, the plugin degrades gracefully to rule-based
|
|
|
238
238
|
|
|
239
239
|
### VibeBoX Decision Engine
|
|
240
240
|
|
|
241
|
-
7 sub-regimes (INIT, DIVERGENT, EXPLORING, REFINING, CONVERGING, CLOSED, LOOPING). Classification
|
|
241
|
+
Canonical blackbox core: 7 sub-regimes (INIT, DIVERGENT, EXPLORING, REFINING, CONVERGING, CLOSED, LOOPING). The runtime and ML layers also surface promoted regime tags for real workflow signals: IMPLEMENTING, RESEARCH, REVIEWING, DESIGNING, AUDIT, and FORENSIC. Classification uses entropy trends, action consistency, feature contradiction, and embedding drift. 11 derived features per turn. 4 loop intervention levels. PIVOT/SWITCH detection. Outcome tracking from satisfaction signals.
|
|
242
242
|
|
|
243
243
|
Regime -> mode mapping via syncControlSettings():
|
|
244
244
|
|
|
245
245
|
| Regime | Mode | Enforce | Flow | TDD | Tier | Think |
|
|
246
246
|
|--------|------|---------|------|-----|------|-------|
|
|
247
247
|
| INIT / DIVERGENT / EXPLORING / REFINING | vibemax (default) | relaxed | audit | lazy | cheap | off |
|
|
248
|
+
| IMPLEMENTING | quality | strict | strict | quality | brain | full |
|
|
249
|
+
| RESEARCH / DESIGNING | longrun | relaxed | audit | lazy | medium | off |
|
|
250
|
+
| REVIEWING | audit | relaxed | audit | lazy | medium | brief |
|
|
248
251
|
| CONVERGING / CLOSED | quality | strict | strict | quality | brain | full |
|
|
249
252
|
| LOOPING | speed | relaxed | audit | lazy | medium | off |
|
|
253
|
+
| AUDIT | audit | relaxed | audit | lazy | medium | brief |
|
|
254
|
+
| FORENSIC | forensic | relaxed | audit | lazy | medium | full |
|
|
250
255
|
|
|
251
256
|
Stress > 1.5 escalates any regime to quality.
|
|
252
257
|
|
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",
|
|
@@ -5232,6 +5290,12 @@ function resolveExecutionIdentity(modelId, directory3 = "") {
|
|
|
5232
5290
|
model_label: shortModelName(resolved || raw)
|
|
5233
5291
|
};
|
|
5234
5292
|
}
|
|
5293
|
+
function resolveTrinityDisplayModel(directory3 = "", activeSlot = "", liveModel = "", currentModelId = "") {
|
|
5294
|
+
const slot = String(activeSlot || "").trim();
|
|
5295
|
+
const slotModel = slot === "brain" ? TRINITY_BRAIN || "" : slot === "medium" ? TRINITY_MEDIUM || "" : slot === "cheap" ? TRINITY_CHEAP || "" : "";
|
|
5296
|
+
const raw = [slotModel, liveModel, currentModelId].map((value) => String(value || "").trim()).find(Boolean) || "";
|
|
5297
|
+
return resolveDisplayModelId(raw, directory3) || raw;
|
|
5298
|
+
}
|
|
5235
5299
|
function _providerOfModel(modelId, fallbackProvider = "") {
|
|
5236
5300
|
const provider = getModelProvider(modelId);
|
|
5237
5301
|
return provider || String(fallbackProvider || "").trim();
|
|
@@ -6292,7 +6356,7 @@ import { join as join7, dirname as dirname8 } from "node:path";
|
|
|
6292
6356
|
|
|
6293
6357
|
// src/vibeOS-lib/blackbox/resolution-tracker.js
|
|
6294
6358
|
var ResolutionTracker = class _ResolutionTracker {
|
|
6295
|
-
static SUB_REGIMES = ["INIT", "DIVERGENT", "EXPLORING", "REFINING", "CONVERGING", "CLOSED", "LOOPING"];
|
|
6359
|
+
static SUB_REGIMES = ["INIT", "DIVERGENT", "EXPLORING", "REFINING", "IMPLEMENTING", "RESEARCH", "REVIEWING", "DESIGNING", "CONVERGING", "CLOSED", "LOOPING"];
|
|
6296
6360
|
sessionId;
|
|
6297
6361
|
maxHistory;
|
|
6298
6362
|
history;
|
|
@@ -6902,6 +6966,12 @@ function autoSelectMode2(subRegime, stressMultiplier) {
|
|
|
6902
6966
|
return "speed";
|
|
6903
6967
|
if (regime === "CONVERGING" || regime === "CLOSED")
|
|
6904
6968
|
return "quality";
|
|
6969
|
+
if (regime === "IMPLEMENTING")
|
|
6970
|
+
return "quality";
|
|
6971
|
+
if (regime === "RESEARCH" || regime === "DESIGNING")
|
|
6972
|
+
return "longrun";
|
|
6973
|
+
if (regime === "REVIEWING")
|
|
6974
|
+
return "audit";
|
|
6905
6975
|
if (stress > QUALITY_STRESS_THRESHOLD2)
|
|
6906
6976
|
return "quality";
|
|
6907
6977
|
return "vibelitex";
|
|
@@ -10461,6 +10531,10 @@ function recordSaving(tool2, reason, saveEst, meta = {}) {
|
|
|
10461
10531
|
const w = ses.warns[i];
|
|
10462
10532
|
if (w?.key === warnKey && now - w.ts < WARN_DEDUPE_WINDOW_MS) {
|
|
10463
10533
|
w.count = (w.count || 1) + 1;
|
|
10534
|
+
w.est_savings_usd = roundUsd(Number(w.est_savings_usd || 0) + saveEst);
|
|
10535
|
+
w.saveEst = roundUsd(Number(w.saveEst || 0) + saveEst);
|
|
10536
|
+
ses.total_savings_usd = roundUsd(Number(ses.total_savings_usd || 0) + saveEst);
|
|
10537
|
+
s.lifetime.total_savings_usd = roundUsd(Number(s.lifetime.total_savings_usd || 0) + saveEst);
|
|
10464
10538
|
deduped = true;
|
|
10465
10539
|
}
|
|
10466
10540
|
}
|
|
@@ -11474,6 +11548,10 @@ var REGIME_TAG = {
|
|
|
11474
11548
|
DIVERGENT: "DVRG",
|
|
11475
11549
|
EXPLORING: "XPLR",
|
|
11476
11550
|
REFINING: "RFNE",
|
|
11551
|
+
IMPLEMENTING: "IMPL",
|
|
11552
|
+
RESEARCH: "RSCH",
|
|
11553
|
+
REVIEWING: "RVW",
|
|
11554
|
+
DESIGNING: "DSGN",
|
|
11477
11555
|
CONVERGING: "CVGE",
|
|
11478
11556
|
CLOSED: "CLSD",
|
|
11479
11557
|
LOOPING: "LOOP",
|
|
@@ -11501,6 +11579,28 @@ function resolveBrand(optMode, activeSlot) {
|
|
|
11501
11579
|
function resolveTierIcon(slot) {
|
|
11502
11580
|
return TIER_ICON[slot] || "\u26A1";
|
|
11503
11581
|
}
|
|
11582
|
+
function formatModeLabel(optMode) {
|
|
11583
|
+
const normalized = String(optMode || "").toLowerCase();
|
|
11584
|
+
if (!normalized)
|
|
11585
|
+
return "";
|
|
11586
|
+
if (normalized === "vibemax" || normalized === "vibelitex" || normalized === "budget")
|
|
11587
|
+
return "Budget";
|
|
11588
|
+
if (normalized === "vibeqmax" || normalized === "quality")
|
|
11589
|
+
return "Quality";
|
|
11590
|
+
if (normalized === "vibeultrax")
|
|
11591
|
+
return "VibeUltraX";
|
|
11592
|
+
if (normalized === "speed")
|
|
11593
|
+
return "Speed";
|
|
11594
|
+
if (normalized === "longrun")
|
|
11595
|
+
return "Longrun";
|
|
11596
|
+
if (normalized === "audit")
|
|
11597
|
+
return "Audit";
|
|
11598
|
+
if (normalized === "forensic")
|
|
11599
|
+
return "Forensic";
|
|
11600
|
+
if (normalized === "balanced")
|
|
11601
|
+
return "Balanced";
|
|
11602
|
+
return normalized.charAt(0).toUpperCase() + normalized.slice(1);
|
|
11603
|
+
}
|
|
11504
11604
|
function formatVectorPulse(vectorChangedSlot) {
|
|
11505
11605
|
if (!vectorChangedSlot)
|
|
11506
11606
|
return "";
|
|
@@ -11559,6 +11659,7 @@ function buildFooterLine(input) {
|
|
|
11559
11659
|
const { activeSlot, sessionSlot, providerLabel, modelName, ltTotal, ltTrend, vibeBrand, optMode, flashIcon, enfTags, vectorChangedSlot, subRegime } = input;
|
|
11560
11660
|
const tierIcon = resolveTierIcon(activeSlot);
|
|
11561
11661
|
const regimeTag = subRegime ? REGIME_TAG[subRegime] || subRegime.slice(0, 4) : null;
|
|
11662
|
+
const modeLabel = formatModeLabel(optMode);
|
|
11562
11663
|
let line = `\u2014 ${tierIcon} ${activeSlot} | ${providerLabel} | ${modelName}${regimeTag ? ` \u25B6 ${regimeTag}` : ""}`;
|
|
11563
11664
|
if (ltTotal > 0) {
|
|
11564
11665
|
const savingsPulse = formatSavingsPulse(ltTotal, ltTrend);
|
|
@@ -11567,7 +11668,7 @@ function buildFooterLine(input) {
|
|
|
11567
11668
|
}
|
|
11568
11669
|
line += ` | ${vibeBrand}${flashIcon}`;
|
|
11569
11670
|
if (optMode && optMode !== "auto") {
|
|
11570
|
-
line += ` ${
|
|
11671
|
+
line += ` ${modeLabel}`;
|
|
11571
11672
|
}
|
|
11572
11673
|
if (vectorChangedSlot && vectorChangedSlot !== activeSlot) {
|
|
11573
11674
|
line += ` | ${formatVectorPulse(vectorChangedSlot)}`;
|
|
@@ -11761,13 +11862,13 @@ async function _appendFooter(input, output, directory3) {
|
|
|
11761
11862
|
if (!liveModel) {
|
|
11762
11863
|
liveModel = readConfig(directory3) || readConfig(join15(process.env.HOME || "", ".config", "opencode")) || process?.env?.OPENCODE_MODEL || "";
|
|
11763
11864
|
}
|
|
11764
|
-
const displayModel =
|
|
11865
|
+
const displayModel = resolveTrinityDisplayModel(directory3, slot, liveModel, currentModel) || brainModel || liveModel || currentModel;
|
|
11765
11866
|
const resolvedModel = displayModel || liveModel || brainModel || currentModel || "";
|
|
11766
11867
|
if (resolvedModel && resolvedModel !== currentModel) {
|
|
11767
11868
|
setCurrentModel(resolvedModel);
|
|
11768
11869
|
setCurrentTier(classify(resolvedModel));
|
|
11769
11870
|
}
|
|
11770
|
-
const execution = resolveExecutionIdentity(
|
|
11871
|
+
const execution = resolveExecutionIdentity(displayModel || resolvedModel || "", directory3);
|
|
11771
11872
|
let modelTag = `[${shortModelName(displayModel)}]`;
|
|
11772
11873
|
const _workerModel = slot === "brain" ? TRINITY_MEDIUM : null;
|
|
11773
11874
|
const totalTurns = (sesModelTurns?.brain || 0) + (sesModelTurns?.worker || 0);
|
|
@@ -11824,7 +11925,7 @@ async function _appendFooter(input, output, directory3) {
|
|
|
11824
11925
|
const activeSlot = selNowFooter.active_slot || "brain";
|
|
11825
11926
|
const flashIcon = isApiConnected2() ? " \u26A1" : "";
|
|
11826
11927
|
const displayMode = autoSelectMode2(currentSubRegime, _footerStress);
|
|
11827
|
-
const vibeBrand = resolveBrand(displayMode, activeSlot);
|
|
11928
|
+
const vibeBrand = resolveBrand(loadOptimizationMode() || displayMode, activeSlot);
|
|
11828
11929
|
const vibeLine = buildFooterLine({
|
|
11829
11930
|
activeSlot,
|
|
11830
11931
|
providerLabel: execution.provider_label,
|
|
@@ -13913,13 +14014,13 @@ var onToolExecuteAfter = async (input, output) => {
|
|
|
13913
14014
|
if (!liveModel) {
|
|
13914
14015
|
liveModel = readConfig(projectDirectory) || readConfig(join17(process.env.HOME || "", ".config", "opencode")) || process?.env?.OPENCODE_MODEL || "";
|
|
13915
14016
|
}
|
|
13916
|
-
const displayModel =
|
|
14017
|
+
const displayModel = resolveTrinityDisplayModel(projectDirectory, selNow.active_slot || "", liveModel, currentModel) || liveModel || currentModel;
|
|
13917
14018
|
const resolvedModel = displayModel || liveModel || currentModel || "";
|
|
13918
14019
|
if (resolvedModel && resolvedModel !== currentModel) {
|
|
13919
14020
|
setCurrentModel(resolvedModel);
|
|
13920
14021
|
setCurrentTier(classify(resolvedModel));
|
|
13921
14022
|
}
|
|
13922
|
-
const execution = resolveExecutionIdentity(
|
|
14023
|
+
const execution = resolveExecutionIdentity(displayModel || resolvedModel || "", projectDirectory);
|
|
13923
14024
|
const currentSid = _OC_SID;
|
|
13924
14025
|
const currentSubRegime = loadBlackboxState()?.sessions?.[currentSid]?.sub_regime || classifyTurnSimple2(latestUserIntent || "");
|
|
13925
14026
|
const bbMode = resolveEnforcementMode();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibeostheog",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.30",
|
|
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",
|