vibeostheog 0.24.29 → 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 +5 -1
- package/README.md +7 -2
- package/dist/vibeOS.js +23 -11
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
## 0.24.30
|
|
2
|
+
- fix: prefer trinity slot in footer
|
|
3
|
+
|
|
4
|
+
|
|
1
5
|
## 0.24.29
|
|
2
6
|
- feat: promote data-backed experimental regimes (#158)
|
|
3
7
|
- feat: promote data-backed experimental regimes
|
|
8
|
+
- fix: prefer trinity slot in footer
|
|
4
9
|
- test: add live lifecycle regression
|
|
5
10
|
- chore: v0.24.28
|
|
6
|
-
Merge pull request #160 from DrunkkToys/codex/release-patch-0.24.28
|
|
7
11
|
Fix clean CI sync for generated modules
|
|
8
12
|
Fix CI sync for generated modules
|
|
9
13
|
Fix CI artifact sync
|
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
|
@@ -5290,6 +5290,12 @@ function resolveExecutionIdentity(modelId, directory3 = "") {
|
|
|
5290
5290
|
model_label: shortModelName(resolved || raw)
|
|
5291
5291
|
};
|
|
5292
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
|
+
}
|
|
5293
5299
|
function _providerOfModel(modelId, fallbackProvider = "") {
|
|
5294
5300
|
const provider = getModelProvider(modelId);
|
|
5295
5301
|
return provider || String(fallbackProvider || "").trim();
|
|
@@ -11856,13 +11862,13 @@ async function _appendFooter(input, output, directory3) {
|
|
|
11856
11862
|
if (!liveModel) {
|
|
11857
11863
|
liveModel = readConfig(directory3) || readConfig(join15(process.env.HOME || "", ".config", "opencode")) || process?.env?.OPENCODE_MODEL || "";
|
|
11858
11864
|
}
|
|
11859
|
-
const displayModel =
|
|
11865
|
+
const displayModel = resolveTrinityDisplayModel(directory3, slot, liveModel, currentModel) || brainModel || liveModel || currentModel;
|
|
11860
11866
|
const resolvedModel = displayModel || liveModel || brainModel || currentModel || "";
|
|
11861
11867
|
if (resolvedModel && resolvedModel !== currentModel) {
|
|
11862
11868
|
setCurrentModel(resolvedModel);
|
|
11863
11869
|
setCurrentTier(classify(resolvedModel));
|
|
11864
11870
|
}
|
|
11865
|
-
const execution = resolveExecutionIdentity(
|
|
11871
|
+
const execution = resolveExecutionIdentity(displayModel || resolvedModel || "", directory3);
|
|
11866
11872
|
let modelTag = `[${shortModelName(displayModel)}]`;
|
|
11867
11873
|
const _workerModel = slot === "brain" ? TRINITY_MEDIUM : null;
|
|
11868
11874
|
const totalTurns = (sesModelTurns?.brain || 0) + (sesModelTurns?.worker || 0);
|
|
@@ -11990,7 +11996,7 @@ import { writeFileSync as writeFileSync14, appendFileSync as appendFileSync6, ex
|
|
|
11990
11996
|
import { join as join17, dirname as dirname12, basename as basename4 } from "node:path";
|
|
11991
11997
|
import { createHash as createHash5 } from "node:crypto";
|
|
11992
11998
|
|
|
11993
|
-
// src/lib/cost-anomaly.
|
|
11999
|
+
// src/lib/cost-anomaly.js
|
|
11994
12000
|
var COST_WINDOW_SIZE = 20;
|
|
11995
12001
|
var COST_ANOMALY_THRESHOLD = 3;
|
|
11996
12002
|
var COST_WARMUP_SAMPLES = 5;
|
|
@@ -12001,21 +12007,26 @@ var CostAnomalyDetector = class {
|
|
|
12001
12007
|
currentAnomalyCost = 0;
|
|
12002
12008
|
currentAnomalyMean = 0;
|
|
12003
12009
|
record(cost) {
|
|
12004
|
-
if (this.disabled)
|
|
12010
|
+
if (this.disabled)
|
|
12011
|
+
return;
|
|
12005
12012
|
this.costHistory.push(cost);
|
|
12006
12013
|
if (this.costHistory.length > COST_WINDOW_SIZE) {
|
|
12007
12014
|
this.costHistory.shift();
|
|
12008
12015
|
}
|
|
12009
12016
|
}
|
|
12010
12017
|
get mean() {
|
|
12011
|
-
if (this.costHistory.length === 0)
|
|
12018
|
+
if (this.costHistory.length === 0)
|
|
12019
|
+
return 0;
|
|
12012
12020
|
return this.costHistory.reduce((a, b) => a + b, 0) / this.costHistory.length;
|
|
12013
12021
|
}
|
|
12014
12022
|
checkAnomaly(model, cost) {
|
|
12015
|
-
if (this.disabled)
|
|
12016
|
-
|
|
12023
|
+
if (this.disabled)
|
|
12024
|
+
return false;
|
|
12025
|
+
if (this.costHistory.length < COST_WARMUP_SAMPLES)
|
|
12026
|
+
return false;
|
|
12017
12027
|
const avg = this.mean;
|
|
12018
|
-
if (avg <= 0 || cost <= avg)
|
|
12028
|
+
if (avg <= 0 || cost <= avg)
|
|
12029
|
+
return false;
|
|
12019
12030
|
const ratio = cost / avg;
|
|
12020
12031
|
if (ratio > COST_ANOMALY_THRESHOLD) {
|
|
12021
12032
|
this.currentAnomalyModel = model;
|
|
@@ -12037,7 +12048,8 @@ var CostAnomalyDetector = class {
|
|
|
12037
12048
|
};
|
|
12038
12049
|
var _costDetector = null;
|
|
12039
12050
|
function getCostAnomalyDetector() {
|
|
12040
|
-
if (!_costDetector)
|
|
12051
|
+
if (!_costDetector)
|
|
12052
|
+
_costDetector = new CostAnomalyDetector();
|
|
12041
12053
|
return _costDetector;
|
|
12042
12054
|
}
|
|
12043
12055
|
|
|
@@ -14002,13 +14014,13 @@ var onToolExecuteAfter = async (input, output) => {
|
|
|
14002
14014
|
if (!liveModel) {
|
|
14003
14015
|
liveModel = readConfig(projectDirectory) || readConfig(join17(process.env.HOME || "", ".config", "opencode")) || process?.env?.OPENCODE_MODEL || "";
|
|
14004
14016
|
}
|
|
14005
|
-
const displayModel =
|
|
14017
|
+
const displayModel = resolveTrinityDisplayModel(projectDirectory, selNow.active_slot || "", liveModel, currentModel) || liveModel || currentModel;
|
|
14006
14018
|
const resolvedModel = displayModel || liveModel || currentModel || "";
|
|
14007
14019
|
if (resolvedModel && resolvedModel !== currentModel) {
|
|
14008
14020
|
setCurrentModel(resolvedModel);
|
|
14009
14021
|
setCurrentTier(classify(resolvedModel));
|
|
14010
14022
|
}
|
|
14011
|
-
const execution = resolveExecutionIdentity(
|
|
14023
|
+
const execution = resolveExecutionIdentity(displayModel || resolvedModel || "", projectDirectory);
|
|
14012
14024
|
const currentSid = _OC_SID;
|
|
14013
14025
|
const currentSubRegime = loadBlackboxState()?.sessions?.[currentSid]?.sub_regime || classifyTurnSimple2(latestUserIntent || "");
|
|
14014
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",
|