vibeostheog 0.23.37 → 0.23.40

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,10 @@
1
+ ## 0.23.40
2
+ - fix: bypass remote selector for manual modes
3
+ - fix: ML pipeline — autoselect unification, branded mode passthrough, vibeultrax/vibeqmax MODE_DELTAS
4
+ - chore: v0.23.38
5
+ fix live thinking mode reset
6
+
7
+
1
8
  ## 0.23.37
2
9
  Fix plan mode agent restore
3
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibeostheog",
3
- "version": "0.23.37",
3
+ "version": "0.23.40",
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",
@@ -14,8 +14,8 @@
14
14
  "checkpoint:validate": "node scripts/checkpoint-validate.mjs",
15
15
  "test:scripts": "node --test scripts/tests/checkpoint-validate.test.mjs tests/release-pack.test.mjs",
16
16
  "ts:audit": "node scripts/ts-audit.mjs",
17
- "test": "VIBEOS_MCP_PORT=0 node --test --test-timeout=240000 tests/deep_integration.test.mjs tests/production_regressions.test.mjs tests/release_hardening_tigerteam.test.mjs tests/test_api_migration.neutral.test.mjs tests/test_const_assignment_regression.test.mjs tests/test_delegation_enforcer.test.mjs tests/test_diagnose_cmd.test.mjs tests/test_install_and_recovery.test.mjs tests/test_internals_stress_patterns_offtopic.test.mjs tests/test_saveos_e2e_cleanup.test.mjs tests/test_tdd_enforcer.test.mjs tests/test_10fixes_regression.test.mjs tests/test_cross_session_regression.test.mjs tests/test_mega_all_fixes.test.mjs tests/test_smart_cache_regression.test.mjs src/tests/*.test.js src/utils/tests/*.test.mjs \"src/vibeOS-lib/tests/auto-select-mode.test.mjs\" \"src/vibeOS-lib/tests/blackbox-regression.test.mjs\" \"src/vibeOS-lib/tests/blackbox-smoke.test.mjs\" \"src/vibeOS-lib/tests/budget-first-mode.test.mjs\" \"src/vibeOS-lib/tests/flow-enforcer.test.mjs\" \"src/vibeOS-lib/tests/flow-secrets.test.mjs\" \"src/vibeOS-lib/tests/session-metrics.test.mjs\" \"src/vibeOS-lib/tests/test_stress.test.mjs\" tests/test_trinity_mega_regression.test.mjs tests/test_multisession_mega.test.mjs tests/test_blackbox_default_enabled.test.mjs tests/test_mega_regressions.test.mjs tests/test_footer_alert_regression.test.mjs tests/test_agent_mode_integration.test.mjs tests/test_patterns_telemetry_integration.test.mjs tests/test_footer_dynamic_integration.test.mjs tests/test_ml_pipeline_e2e.test.mjs tests/test_vibeultrax_pipeline_integration.test.mjs tests/test_cv_ml_integration.test.mjs src/lib/hooks/tests/chat-transform-cv-gate.test.js src/lib/hooks/tests/sync-control-settings.test.mjs",
18
- "test:ci": "VIBEOS_MCP_PORT=0 node --test --test-timeout=120000 tests/production_regressions.test.mjs tests/release_hardening_tigerteam.test.mjs tests/test_const_assignment_regression.test.mjs tests/test_diagnose_cmd.test.mjs tests/test_install_and_recovery.test.mjs tests/test_saveos_e2e_cleanup.test.mjs tests/test_tdd_enforcer.test.mjs tests/test_10fixes_regression.test.mjs tests/test_cross_session_regression.test.mjs tests/test_mega_all_fixes.test.mjs tests/test_smart_cache_regression.test.mjs src/tests/*.test.js src/utils/tests/*.test.mjs \"src/vibeOS-lib/tests/auto-select-mode.test.mjs\" \"src/vibeOS-lib/tests/blackbox-regression.test.mjs\" \"src/vibeOS-lib/tests/blackbox-smoke.test.mjs\" \"src/vibeOS-lib/tests/budget-first-mode.test.mjs\" \"src/vibeOS-lib/tests/flow-enforcer.test.mjs\" \"src/vibeOS-lib/tests/flow-secrets.test.mjs\" \"src/vibeOS-lib/tests/session-metrics.test.mjs\" \"src/vibeOS-lib/tests/test_stress.test.mjs\" tests/test_blackbox_default_enabled.test.mjs tests/test_mega_regressions.test.mjs tests/test_delegation_enforcer.test.mjs tests/test_first_install_autoconfig.mjs tests/deep_integration.test.mjs tests/e2e_workflows.test.mjs tests/integration_cross_module.test.mjs tests/privacy_telemetry.test.mjs tests/release-pack.test.mjs tests/test_api_migration.neutral.test.mjs tests/test_internals_stress_patterns_offtopic.test.mjs tests/test_ml_cache_mega.test.mjs tests/test_mode_brand.test.mjs tests/test_multisession_mega.test.mjs tests/test_trinity_mega_regression.test.mjs tests/test_footer_alert_regression.test.mjs tests/test_agent_mode_integration.test.mjs tests/test_patterns_telemetry_integration.test.mjs tests/test_footer_dynamic_integration.test.mjs tests/test_ml_pipeline_e2e.test.mjs tests/test_vibeultrax_pipeline_integration.test.mjs tests/test_cv_ml_integration.test.mjs src/lib/hooks/tests/chat-transform-cv-gate.test.js src/lib/hooks/tests/sync-control-settings.test.mjs",
17
+ "test": "node scripts/run-test-suite.mjs full",
18
+ "test:ci": "node scripts/run-test-suite.mjs ci",
19
19
  "guard": "bash plugins/vibetheog-guard/scripts/run-guard.sh",
20
20
  "guard:full": "VIBETHEOG_GUARD_FULL=1 bash plugins/vibetheog-guard/scripts/run-guard.sh",
21
21
  "hook:precommit": "bash plugins/vibetheog-guard/hooks/pre-commit.sh",
@@ -204,8 +204,11 @@ export function syncControlSettings(cv, options = {}) {
204
204
  writeIf("tdd_enforce", true);
205
205
  writeIf("tdd_strict", cv.tdd_mode === "strict");
206
206
  }
207
- if (cv.thinking_mode && currentSel.thinking_level !== "full")
208
- writeIf("thinking_level", cv.thinking_mode);
207
+ if (cv.thinking_mode) {
208
+ const nextThinking = cv.thinking_mode === "auto" ? "off" : cv.thinking_mode;
209
+ if (currentSel.thinking_level !== nextThinking)
210
+ writeIf("thinking_level", nextThinking);
211
+ }
209
212
  if (persistOptimizationMode && cv.optimization_mode && userOptMode !== "auto") {
210
213
  if (userOptMode !== cv.optimization_mode) {
211
214
  writeIf("optimization_mode", cv.optimization_mode);
@@ -9,6 +9,7 @@ export { scoreStress, estimateContextBudget, classifyTurnSimple, tokenizeWords,
9
9
  function getVibeOSHome() {
10
10
  return process.env.VIBEOS_HOME || join(process.env.HOME || "", ".claude");
11
11
  }
12
+ const QUALITY_STRESS_THRESHOLD = 1.5;
12
13
  function autoSelectMode(subRegime, stressMultiplier) {
13
14
  const regime = String(subRegime || "INIT").toUpperCase();
14
15
  const stress = Number(stressMultiplier ?? 0);
@@ -18,17 +19,17 @@ function autoSelectMode(subRegime, stressMultiplier) {
18
19
  return "speed";
19
20
  if (regime === "CONVERGING" || regime === "CLOSED")
20
21
  return "quality";
21
- if (stress > 1.5)
22
+ if (stress > QUALITY_STRESS_THRESHOLD)
22
23
  return "quality";
23
24
  return "budget";
24
25
  }
25
26
  export function resolveOptimizationMode(subRegime, stressMultiplier, optimizationMode) {
26
27
  const normalized = String(optimizationMode || "auto").toLowerCase();
27
- if (!isApiFallback())
28
+ if (normalized === "auto" || normalized === "")
28
29
  return autoSelectMode(subRegime || "INIT", stressMultiplier);
29
- if (normalized === "auto" || normalized === "" || normalized === "vibeultrax" || normalized === "vibeqmax" || normalized === "vibemax")
30
- return autoSelectMode(subRegime || "INIT", stressMultiplier);
31
- if (normalized === "balanced" || normalized === "budget" || normalized === "quality" || normalized === "speed" || normalized === "longrun") {
30
+ if (isApiFallback())
31
+ return "budget";
32
+ if (normalized === "balanced" || normalized === "budget" || normalized === "quality" || normalized === "speed" || normalized === "longrun" || normalized === "audit" || normalized === "forensic" || normalized === "vibeultrax" || normalized === "vibeqmax" || normalized === "vibemax") {
32
33
  return normalized;
33
34
  }
34
35
  return "budget";
@@ -69,18 +70,19 @@ export function bootstrapOptimizationSession() {
69
70
  return { mode: resolvedMode, slot: resolvedSlot };
70
71
  }
71
72
  export async function selectOptimizationModeRemote(subRegime, stressMultiplier, fallbackMode) {
73
+ const normalizedRequestedMode = String(fallbackMode || "auto").toLowerCase();
72
74
  const fallback = resolveOptimizationMode(subRegime, stressMultiplier, fallbackMode);
73
- if (!isApiFallback())
74
- return autoSelectMode(subRegime || "INIT", stressMultiplier);
75
+ if (normalizedRequestedMode !== "auto" && normalizedRequestedMode !== "")
76
+ return fallback;
77
+ if (isApiFallback())
78
+ return fallback;
75
79
  try {
76
- if (!isApiFallback()) {
77
- const client = getApiClient();
78
- if (client) {
79
- const res = await client.blackboxSelectMode(subRegime || "INIT", Number(stressMultiplier ?? 0));
80
- const selected = String(res?.mode || "").toLowerCase();
81
- if (selected === "balanced" || selected === "budget" || selected === "quality" || selected === "speed" || selected === "longrun" || selected === "vibemax") {
82
- return selected;
83
- }
80
+ const client = getApiClient();
81
+ if (client) {
82
+ const res = await client.blackboxSelectMode(subRegime || "INIT", Number(stressMultiplier ?? 0));
83
+ const selected = String(res?.mode || "").toLowerCase();
84
+ if (selected === "balanced" || selected === "budget" || selected === "quality" || selected === "speed" || selected === "longrun" || selected === "audit" || selected === "forensic" || selected === "vibeultrax" || selected === "vibeqmax" || selected === "vibemax") {
85
+ return selected;
84
86
  }
85
87
  }
86
88
  }
@@ -93,7 +95,7 @@ function computeControlVector(_state, _action, _optimizationMode) {
93
95
  const isRelaxed = mode === "budget" || mode === "speed";
94
96
  const subRegime = _state?.sub_regime || "INIT";
95
97
  const stress = Number(_state?.latest_stress_multiplier ?? 0);
96
- const tierBias = stress > 1.5 ? "brain"
98
+ const tierBias = stress > QUALITY_STRESS_THRESHOLD ? "brain"
97
99
  : subRegime === "CONVERGING" || subRegime === "CLOSED" ? "brain"
98
100
  : subRegime === "REFINING" || subRegime === "LOOPING" ? "medium"
99
101
  : mode === "quality" || mode === "longrun" ? "brain"
@@ -112,7 +114,7 @@ function computeControlVector(_state, _action, _optimizationMode) {
112
114
  stress_multiplier: 1.0,
113
115
  context7_urgency: isStrict ? "required" : "preferred",
114
116
  wbp_verbosity: isStrict ? "verbose" : isRelaxed ? "minimal" : "normal",
115
- agent_mode: (subRegime === "REFINING" || subRegime === "CONVERGING" || subRegime === "CLOSED") && stress <= 1.5 ? "plan" : undefined,
117
+ agent_mode: (subRegime === "REFINING" || subRegime === "CONVERGING" || subRegime === "CLOSED") && stress <= QUALITY_STRESS_THRESHOLD ? "plan" : undefined,
116
118
  optimization_mode: mode,
117
119
  directives: [],
118
120
  };
@@ -98,6 +98,7 @@ const REGIME_CONTROL = {
98
98
  },
99
99
  };
100
100
  const DEFAULT_CONTROL = REGIME_CONTROL.EXPLORING;
101
+ const QUALITY_STRESS_THRESHOLD = 1.5;
101
102
  const MODE_DELTAS = {
102
103
  balanced: {},
103
104
  budget: {
@@ -175,14 +176,43 @@ const MODE_DELTAS = {
175
176
  api_enrichment: true,
176
177
  outcome_detection: true,
177
178
  },
179
+ vibeultrax: {
180
+ tier_bias: "brain",
181
+ thinking_mode: "full",
182
+ tdd_mode: "quality",
183
+ tdd_focus: ["full-coverage", "edge-cases", "property-based"],
184
+ flow_mode: "strict",
185
+ flow_focus: ["write-edit-check", "no-untouched-files", "no-lgtm", "suggest-alternative"],
186
+ enforcement_mode: "strict",
187
+ wbp_verbosity: "detailed",
188
+ context7_urgency: "required",
189
+ stress_multiplier: 2.5,
190
+ loop_threshold: 0.3,
191
+ api_enrichment: true,
192
+ outcome_detection: true,
193
+ },
194
+ vibeqmax: {
195
+ tier_bias: "brain",
196
+ thinking_mode: "full",
197
+ tdd_mode: "quality",
198
+ tdd_focus: ["skeleton-on-write", "assertion-check", "edge-cases"],
199
+ flow_mode: "strict",
200
+ flow_focus: ["write-edit-check", "no-lgtm", "check-debug-artifacts"],
201
+ enforcement_mode: "strict",
202
+ wbp_verbosity: "normal",
203
+ context7_urgency: "required",
204
+ stress_multiplier: 1.5,
205
+ loop_threshold: 0.5,
206
+ api_enrichment: true,
207
+ outcome_detection: true,
208
+ },
178
209
  };
179
210
  export function autoSelectMode(subRegime, stressMultiplier) {
180
- if (subRegime === "CONVERGING" || subRegime === "CLOSED")
181
- return "quality";
182
- if (subRegime === "LOOPING")
183
- return "speed";
184
- if (stressMultiplier && stressMultiplier > 0.5)
185
- return "quality";
211
+ const regime = String(subRegime || "INIT").toUpperCase();
212
+ if (regime === "AUDIT" || regime === "FORENSIC") return regime.toLowerCase();
213
+ if (regime === "LOOPING") return "speed";
214
+ if (regime === "CONVERGING" || regime === "CLOSED") return "quality";
215
+ if (stressMultiplier && stressMultiplier > QUALITY_STRESS_THRESHOLD) return "quality";
186
216
  return "budget";
187
217
  }
188
218
  export function computeControlVector(state, action, optimizationMode) {