vibeostheog 0.24.31 → 0.24.32
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 +20 -0
- package/dist/vibeOS.js +43 -32
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
## 0.24.32
|
|
2
|
+
- feat: promote data-backed experimental regimes (#158)
|
|
3
|
+
- feat: promote data-backed experimental regimes
|
|
4
|
+
- fix: make footer state truthful
|
|
5
|
+
- test: add live lifecycle regression
|
|
6
|
+
- chore: v0.24.31 (#163)
|
|
7
|
+
- chore: v0.24.28
|
|
8
|
+
Merge pull request #162 from DrunkkToys/codex/test-production-proof
|
|
9
|
+
Merge pull request #160 from DrunkkToys/codex/release-patch-0.24.28
|
|
10
|
+
Fix clean CI sync for generated modules
|
|
11
|
+
Fix CI sync for generated modules
|
|
12
|
+
Fix CI artifact sync
|
|
13
|
+
Sync generated flow rules
|
|
14
|
+
Merge remote-tracking branch 'origin/master' into codex/release-patch-0.24.28
|
|
15
|
+
Fix release CI regressions
|
|
16
|
+
Merge pull request #159 from DrunkkToys/codex/release-patch-0.24.28
|
|
17
|
+
Strengthen cascade lifecycle coverage
|
|
18
|
+
Merge branch 'master' of https://github.com/DrunkkToys/vibeOS into codex/release-patch-0.24.28
|
|
19
|
+
|
|
20
|
+
|
|
1
21
|
## 0.24.31
|
|
2
22
|
- fix: make footer state truthful
|
|
3
23
|
- fix: quiet greetings should not inherit stale tdd tags
|
package/dist/vibeOS.js
CHANGED
|
@@ -11276,24 +11276,22 @@ function regimeAwareToolStyleDirective(regime, mode, stress) {
|
|
|
11276
11276
|
const normalizedRegime = String(regime || "INIT").toUpperCase();
|
|
11277
11277
|
const normalizedMode = String(mode || "budget").toLowerCase();
|
|
11278
11278
|
const stressLabel = stress > 1.5 ? "high stress" : stress > 0.4 ? "elevated stress" : "calm";
|
|
11279
|
-
const
|
|
11280
|
-
|
|
11281
|
-
|
|
11282
|
-
|
|
11283
|
-
|
|
11284
|
-
|
|
11285
|
-
|
|
11286
|
-
|
|
11287
|
-
|
|
11288
|
-
|
|
11289
|
-
|
|
11290
|
-
|
|
11291
|
-
|
|
11292
|
-
|
|
11293
|
-
|
|
11294
|
-
|
|
11295
|
-
return "The session should stay aligned to the active regime and avoid generic filler.";
|
|
11296
|
-
})();
|
|
11279
|
+
const regimeToneByName = {
|
|
11280
|
+
INIT: "The session is starting, so keep descriptions lightweight, status-oriented, and easy to scan.",
|
|
11281
|
+
DIVERGENT: "The session is branching, so keep descriptions exploratory and open to alternatives without sounding vague.",
|
|
11282
|
+
EXPLORING: "The session is investigating, so keep descriptions discovery-oriented, specific, and lightweight.",
|
|
11283
|
+
REFINING: "The session is polishing implementation, so keep descriptions action-oriented, concrete, and tied to the next visible code step.",
|
|
11284
|
+
IMPLEMENTING: "The session is executing implementation work, so keep descriptions exact, build-focused, and next-step driven.",
|
|
11285
|
+
RESEARCH: "The session is researching, so keep descriptions evidence-seeking, careful, and explicit about what was checked.",
|
|
11286
|
+
REVIEWING: "The session is reviewing, so keep descriptions audit-style, traceable, and focused on proof.",
|
|
11287
|
+
DESIGNING: "The session is designing, so keep descriptions structured, intent-driven, and aligned to the target shape.",
|
|
11288
|
+
CONVERGING: "The session is converging, so keep descriptions closure-oriented, exact, and ready for final verification.",
|
|
11289
|
+
CLOSED: "The session is closing, so keep descriptions final, concise, and clearly outcome-focused.",
|
|
11290
|
+
LOOPING: "The session is looping, so keep descriptions verification-first, state-aware, and loop-breaking.",
|
|
11291
|
+
AUDIT: "The session is auditing, so keep descriptions evidence-first, compliance-aware, and traceable.",
|
|
11292
|
+
FORENSIC: "The session is doing forensic work, so keep descriptions investigative, reproducible, and proof-heavy."
|
|
11293
|
+
};
|
|
11294
|
+
const regimeTone = regimeToneByName[normalizedRegime] || "The session should stay aligned to the active regime and avoid generic filler.";
|
|
11297
11295
|
return `[tool style: dopamine] Active regime: ${normalizedRegime}; mode: ${normalizedMode}; stress: ${stressLabel}. When calling the bash tool, use a short, calm, progress-focused description that matches the current regime. ${regimeTone} Name the user-visible milestone being advanced, keep the wording human, and avoid hype or raw technical labels. Combine independent bash commands into a single call with && or ;.`;
|
|
11298
11296
|
}
|
|
11299
11297
|
function flowTodosDirective() {
|
|
@@ -11576,6 +11574,21 @@ var REGIME_TAG = {
|
|
|
11576
11574
|
AUDIT: "AUDT",
|
|
11577
11575
|
FORENSIC: "FRNC"
|
|
11578
11576
|
};
|
|
11577
|
+
var REGIME_ICON = {
|
|
11578
|
+
INIT: "\u25CC",
|
|
11579
|
+
DIVERGENT: "\u21C4",
|
|
11580
|
+
EXPLORING: "\u2315",
|
|
11581
|
+
REFINING: "\u270E",
|
|
11582
|
+
IMPLEMENTING: "\u2699",
|
|
11583
|
+
RESEARCH: "\u2301",
|
|
11584
|
+
REVIEWING: "\u2713",
|
|
11585
|
+
DESIGNING: "\u25EB",
|
|
11586
|
+
CONVERGING: "\u27F2",
|
|
11587
|
+
CLOSED: "\u25C6",
|
|
11588
|
+
LOOPING: "\u21BB",
|
|
11589
|
+
AUDIT: "\u2611",
|
|
11590
|
+
FORENSIC: "\u27C1"
|
|
11591
|
+
};
|
|
11579
11592
|
var BRAND_MAP = {
|
|
11580
11593
|
vibeultrax: "VibeUltraX",
|
|
11581
11594
|
vibeqmax: "VibeQMaX",
|
|
@@ -11597,6 +11610,9 @@ function resolveBrand(optMode, activeSlot) {
|
|
|
11597
11610
|
function resolveTierIcon(slot) {
|
|
11598
11611
|
return TIER_ICON[slot] || "\u26A1";
|
|
11599
11612
|
}
|
|
11613
|
+
function resolveRegimeIcon(subRegime) {
|
|
11614
|
+
return REGIME_ICON[String(subRegime || "").toUpperCase()] || "\u25E6";
|
|
11615
|
+
}
|
|
11600
11616
|
function formatModeLabel(optMode) {
|
|
11601
11617
|
const normalized = String(optMode || "").toLowerCase();
|
|
11602
11618
|
if (!normalized)
|
|
@@ -11677,8 +11693,9 @@ function buildFooterLine(input) {
|
|
|
11677
11693
|
const { activeSlot, sessionSlot, providerLabel, modelName, ltTotal, ltTrend, vibeBrand, optMode, flashIcon, enfTags, vectorChangedSlot, subRegime } = input;
|
|
11678
11694
|
const tierIcon = resolveTierIcon(activeSlot);
|
|
11679
11695
|
const regimeTag = subRegime ? REGIME_TAG[subRegime] || subRegime.slice(0, 4) : null;
|
|
11696
|
+
const regimeIcon = subRegime ? resolveRegimeIcon(subRegime) : null;
|
|
11680
11697
|
const modeLabel = formatModeLabel(optMode);
|
|
11681
|
-
let line = `\u2014 ${tierIcon} ${activeSlot} | ${providerLabel} | ${modelName}${regimeTag ? ` \u25B6 ${regimeTag}` : ""}`;
|
|
11698
|
+
let line = `\u2014 ${tierIcon} ${activeSlot} | ${providerLabel} | ${modelName}${regimeTag ? ` \u25B6 ${regimeIcon} ${regimeTag}` : ""}`;
|
|
11682
11699
|
if (ltTotal > 0) {
|
|
11683
11700
|
const savingsPulse = formatSavingsPulse(ltTotal, ltTrend);
|
|
11684
11701
|
if (savingsPulse)
|
|
@@ -12019,7 +12036,7 @@ import { writeFileSync as writeFileSync14, appendFileSync as appendFileSync6, ex
|
|
|
12019
12036
|
import { join as join17, dirname as dirname12, basename as basename4 } from "node:path";
|
|
12020
12037
|
import { createHash as createHash5 } from "node:crypto";
|
|
12021
12038
|
|
|
12022
|
-
// src/lib/cost-anomaly.
|
|
12039
|
+
// src/lib/cost-anomaly.ts
|
|
12023
12040
|
var COST_WINDOW_SIZE = 20;
|
|
12024
12041
|
var COST_ANOMALY_THRESHOLD = 3;
|
|
12025
12042
|
var COST_WARMUP_SAMPLES = 5;
|
|
@@ -12030,26 +12047,21 @@ var CostAnomalyDetector = class {
|
|
|
12030
12047
|
currentAnomalyCost = 0;
|
|
12031
12048
|
currentAnomalyMean = 0;
|
|
12032
12049
|
record(cost) {
|
|
12033
|
-
if (this.disabled)
|
|
12034
|
-
return;
|
|
12050
|
+
if (this.disabled) return;
|
|
12035
12051
|
this.costHistory.push(cost);
|
|
12036
12052
|
if (this.costHistory.length > COST_WINDOW_SIZE) {
|
|
12037
12053
|
this.costHistory.shift();
|
|
12038
12054
|
}
|
|
12039
12055
|
}
|
|
12040
12056
|
get mean() {
|
|
12041
|
-
if (this.costHistory.length === 0)
|
|
12042
|
-
return 0;
|
|
12057
|
+
if (this.costHistory.length === 0) return 0;
|
|
12043
12058
|
return this.costHistory.reduce((a, b) => a + b, 0) / this.costHistory.length;
|
|
12044
12059
|
}
|
|
12045
12060
|
checkAnomaly(model, cost) {
|
|
12046
|
-
if (this.disabled)
|
|
12047
|
-
|
|
12048
|
-
if (this.costHistory.length < COST_WARMUP_SAMPLES)
|
|
12049
|
-
return false;
|
|
12061
|
+
if (this.disabled) return false;
|
|
12062
|
+
if (this.costHistory.length < COST_WARMUP_SAMPLES) return false;
|
|
12050
12063
|
const avg = this.mean;
|
|
12051
|
-
if (avg <= 0 || cost <= avg)
|
|
12052
|
-
return false;
|
|
12064
|
+
if (avg <= 0 || cost <= avg) return false;
|
|
12053
12065
|
const ratio = cost / avg;
|
|
12054
12066
|
if (ratio > COST_ANOMALY_THRESHOLD) {
|
|
12055
12067
|
this.currentAnomalyModel = model;
|
|
@@ -12071,8 +12083,7 @@ var CostAnomalyDetector = class {
|
|
|
12071
12083
|
};
|
|
12072
12084
|
var _costDetector = null;
|
|
12073
12085
|
function getCostAnomalyDetector() {
|
|
12074
|
-
if (!_costDetector)
|
|
12075
|
-
_costDetector = new CostAnomalyDetector();
|
|
12086
|
+
if (!_costDetector) _costDetector = new CostAnomalyDetector();
|
|
12076
12087
|
return _costDetector;
|
|
12077
12088
|
}
|
|
12078
12089
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibeostheog",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.32",
|
|
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",
|