vibeostheog 0.25.4 → 0.25.7

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.
@@ -1 +1 @@
1
- window.__VIBEOS_DASHBOARD_BASE__ = "http://127.0.0.1:55477";
1
+ window.__VIBEOS_DASHBOARD_BASE__ = "http://127.0.0.1:53142";
package/dist/vibeOS.js CHANGED
@@ -458,6 +458,7 @@ function getRuntimeState() {
458
458
  apiConnected: true,
459
459
  apiFallbackMode: false,
460
460
  apiFallbackSince: null,
461
+ apiEnabled: true,
461
462
  sessionId: "opencode-" + (process.pid || "x") + "-" + Date.now()
462
463
  };
463
464
  }
@@ -487,7 +488,30 @@ function resetApiConnection() {
487
488
  }
488
489
  function isApiConnected() {
489
490
  const state = getRuntimeState();
490
- return state.apiConnected && !state.apiFallbackMode;
491
+ return state.apiEnabled;
492
+ }
493
+ function isApiFallbackMode() {
494
+ return getRuntimeState().apiFallbackMode;
495
+ }
496
+ function getApiFallbackSince() {
497
+ return getRuntimeState().apiFallbackSince;
498
+ }
499
+ function isApiEnabled() {
500
+ return getRuntimeState().apiEnabled;
501
+ }
502
+ function setApiEnabled(enabled) {
503
+ getRuntimeState().apiEnabled = enabled;
504
+ }
505
+ function setApiFallbackSince(since) {
506
+ getRuntimeState().apiFallbackSince = since;
507
+ }
508
+ function setApiFallbackMode(on) {
509
+ const state = getRuntimeState();
510
+ state.apiFallbackMode = on;
511
+ if (on && !state.apiFallbackSince)
512
+ state.apiFallbackSince = (/* @__PURE__ */ new Date()).toISOString();
513
+ if (!on)
514
+ state.apiFallbackSince = null;
491
515
  }
492
516
  var RUNTIME_KEY;
493
517
  var init_runtime_state = __esm({
@@ -4641,9 +4665,11 @@ var DEFAULT_API_URL = "https://api.vibetheog.com";
4641
4665
  var EMBEDDED_API_TOKEN = "vos_8d73804b13bb46711b9a47f036dba7b4d026fd9583d96960e663716e62815a69";
4642
4666
  var API_TOKEN_RE = /^vos_[a-f0-9]{64}$/i;
4643
4667
  var API_DISABLED_RE = /^(1|true|yes|on)$/i;
4644
- var REQUEST_TIMEOUT = 1e4;
4645
- var MAX_RETRIES = 3;
4646
- var BASE_RETRY_DELAY = 1e3;
4668
+ var IS_TEST_RUNTIME = process.env.VIBEOS_TEST_MODE === "1" || process.env.NODE_ENV === "test" || process.env.CI === "true";
4669
+ var REQUEST_TIMEOUT = IS_TEST_RUNTIME ? 2e3 : 1e4;
4670
+ var MAX_RETRIES = IS_TEST_RUNTIME ? 1 : 3;
4671
+ var BASE_RETRY_DELAY = IS_TEST_RUNTIME ? 100 : 1e3;
4672
+ var PROBE_TIMEOUT = IS_TEST_RUNTIME ? 2e3 : 5e3;
4647
4673
  var ALPHA_BUILD_CHANNEL = String(process.env.VIBEOS_BUILD_CHANNEL || "alpha").toLowerCase();
4648
4674
  var BOOTSTRAP_EXCHANGE_PATH = "/api/v1/auth/bootstrap/exchange";
4649
4675
  var BOOTSTRAP_RETRY_COOLDOWN_MS = 6e4;
@@ -5109,16 +5135,6 @@ function readTokenFromDisk() {
5109
5135
  }
5110
5136
  return "";
5111
5137
  }
5112
- function hasPrimaryTokenOnDisk() {
5113
- if (readApiDisabledFromDisk())
5114
- return false;
5115
- try {
5116
- const env = readFileSync2(_envPaths[0] + "/.env.production", "utf8");
5117
- return /^VIBEOS_API_TOKEN=/m.test(env);
5118
- } catch {
5119
- return false;
5120
- }
5121
- }
5122
5138
  function readBootstrapTokenFromDisk() {
5123
5139
  if (readApiDisabledFromDisk())
5124
5140
  return "";
@@ -5132,9 +5148,9 @@ function readBootstrapTokenFromDisk() {
5132
5148
  return "";
5133
5149
  }
5134
5150
  var VIBEOS_API_DISABLED = readApiDisabledFromDisk() || isTruthyFlag(process.env.VIBEOS_API_DISABLED);
5135
- var VIBEOS_API_TOKEN = VIBEOS_API_DISABLED ? "" : readTokenFromDisk() || normalizeDirectApiToken(process.env.VIBEOS_API_TOKEN) || (!hasPrimaryTokenOnDisk() ? EMBEDDED_API_TOKEN : "");
5151
+ var VIBEOS_API_TOKEN = VIBEOS_API_DISABLED ? "" : readTokenFromDisk() || normalizeDirectApiToken(process.env.VIBEOS_API_TOKEN);
5136
5152
  var VIBEOS_API_BOOTSTRAP_TOKEN = VIBEOS_API_DISABLED ? "" : readBootstrapTokenFromDisk() || process.env.VIBEOS_API_BOOTSTRAP_TOKEN || EMBEDDED_API_TOKEN;
5137
- var VIBEOS_API_ENABLED = !VIBEOS_API_DISABLED && process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN);
5153
+ setApiEnabled(!VIBEOS_API_DISABLED && process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN));
5138
5154
  var _anomalyDetector = null;
5139
5155
  function getAnomalyDetector() {
5140
5156
  if (!_anomalyDetector)
@@ -5166,10 +5182,10 @@ function setApiToken(newToken) {
5166
5182
  VIBEOS_API_DISABLED = false;
5167
5183
  VIBEOS_API_TOKEN = normalizeDirectApiToken(newToken);
5168
5184
  VIBEOS_API_BOOTSTRAP_TOKEN = readBootstrapTokenFromDisk() || VIBEOS_API_BOOTSTRAP_TOKEN;
5169
- VIBEOS_API_ENABLED = process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN);
5185
+ setApiEnabled(process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN));
5170
5186
  _apiClient = null;
5171
- _apiFallbackMode = false;
5172
- _apiFallbackSince = null;
5187
+ setApiFallbackMode(false);
5188
+ setApiFallbackSince(null);
5173
5189
  persistPrimaryApiEnvState({ token: VIBEOS_API_TOKEN, disabled: false });
5174
5190
  if (_anomalyDetector)
5175
5191
  _anomalyDetector.reset();
@@ -5184,10 +5200,10 @@ function invalidateApiToken() {
5184
5200
  VIBEOS_API_DISABLED = true;
5185
5201
  VIBEOS_API_TOKEN = "";
5186
5202
  VIBEOS_API_BOOTSTRAP_TOKEN = "";
5187
- VIBEOS_API_ENABLED = false;
5203
+ setApiEnabled(false);
5188
5204
  _apiClient = null;
5189
- _apiFallbackMode = false;
5190
- _apiFallbackSince = null;
5205
+ setApiFallbackMode(false);
5206
+ setApiFallbackSince(null);
5191
5207
  if (_anomalyDetector)
5192
5208
  _anomalyDetector.reset();
5193
5209
  persistBootstrapToken("");
@@ -5202,7 +5218,7 @@ function setApiBootstrapToken(newToken) {
5202
5218
  try {
5203
5219
  VIBEOS_API_DISABLED = false;
5204
5220
  VIBEOS_API_BOOTSTRAP_TOKEN = String(newToken || "").trim();
5205
- VIBEOS_API_ENABLED = process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN);
5221
+ setApiEnabled(process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN));
5206
5222
  persistPrimaryApiEnvState({ disabled: false });
5207
5223
  persistBootstrapToken(VIBEOS_API_BOOTSTRAP_TOKEN);
5208
5224
  console.error("[vibeOS] Alpha bootstrap token updated");
@@ -5211,24 +5227,27 @@ function setApiBootstrapToken(newToken) {
5211
5227
  }
5212
5228
  }
5213
5229
  var _apiClient = null;
5214
- var _apiFallbackMode = false;
5215
- var _apiFallbackSince = null;
5230
+ var _startupProbeDone = false;
5216
5231
  var _bootstrapExchangeInFlight = null;
5217
5232
  var _bootstrapExchangeFailedAt = 0;
5218
5233
  var _backendVersion = "";
5219
5234
  var FALLBACK_COOLDOWN_MS = 6e4;
5220
5235
  function tryResetFallbackCooldown() {
5221
- if (!_apiFallbackMode || !_apiFallbackSince)
5236
+ if (!isApiFallbackMode() || !getApiFallbackSince())
5222
5237
  return false;
5223
- const elapsed = Date.now() - new Date(_apiFallbackSince).getTime();
5238
+ const elapsed = Date.now() - new Date(getApiFallbackSince()).getTime();
5224
5239
  if (elapsed > FALLBACK_COOLDOWN_MS) {
5225
- _apiFallbackMode = false;
5226
- _apiFallbackSince = null;
5240
+ setApiFallbackMode(false);
5241
+ setApiFallbackSince(null);
5227
5242
  markApiConnected();
5228
5243
  return true;
5229
5244
  }
5230
5245
  return false;
5231
5246
  }
5247
+ function denyReconnection(detail) {
5248
+ setApiFallbackSince((/* @__PURE__ */ new Date()).toISOString());
5249
+ console.warn(`[vibeOS] API health probe failed during reconnect: ${detail} \u2014 staying in fallback`);
5250
+ }
5232
5251
  function recordBackendVersion(payload) {
5233
5252
  if (!payload || typeof payload !== "object")
5234
5253
  return;
@@ -5255,7 +5274,7 @@ async function ensureBootstrapExchange() {
5255
5274
  try {
5256
5275
  const client2 = new VibeOSApiClient({
5257
5276
  baseUrl: VIBEOS_API_URL,
5258
- timeout: 5e3
5277
+ timeout: PROBE_TIMEOUT
5259
5278
  });
5260
5279
  const apiToken = await client2.exchangeBootstrapToken(VIBEOS_API_BOOTSTRAP_TOKEN, ALPHA_BUILD_CHANNEL);
5261
5280
  if (!apiToken)
@@ -5279,14 +5298,14 @@ function syncApiTokenFromDisk() {
5279
5298
  const diskBootstrapToken = readBootstrapTokenFromDisk() || "";
5280
5299
  const envToken = normalizeDirectApiToken(process.env.VIBEOS_API_TOKEN);
5281
5300
  if (diskDisabled) {
5282
- if (!VIBEOS_API_DISABLED || VIBEOS_API_TOKEN || VIBEOS_API_BOOTSTRAP_TOKEN || VIBEOS_API_ENABLED) {
5301
+ if (!VIBEOS_API_DISABLED || VIBEOS_API_TOKEN || VIBEOS_API_BOOTSTRAP_TOKEN || isApiEnabled()) {
5283
5302
  VIBEOS_API_DISABLED = true;
5284
5303
  VIBEOS_API_TOKEN = "";
5285
5304
  VIBEOS_API_BOOTSTRAP_TOKEN = "";
5286
- VIBEOS_API_ENABLED = false;
5305
+ setApiEnabled(false);
5287
5306
  _apiClient = null;
5288
- _apiFallbackMode = false;
5289
- _apiFallbackSince = null;
5307
+ setApiFallbackMode(false);
5308
+ setApiFallbackSince(null);
5290
5309
  resetApiConnection();
5291
5310
  console.error("[vibeOS] API token disabled from disk (alpha kill switch active)");
5292
5311
  }
@@ -5295,69 +5314,107 @@ function syncApiTokenFromDisk() {
5295
5314
  if (diskToken && diskToken !== VIBEOS_API_TOKEN) {
5296
5315
  VIBEOS_API_DISABLED = false;
5297
5316
  VIBEOS_API_TOKEN = diskToken;
5298
- VIBEOS_API_ENABLED = process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN);
5317
+ setApiEnabled(process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN));
5299
5318
  _apiClient = null;
5300
- _apiFallbackMode = false;
5301
- _apiFallbackSince = null;
5319
+ setApiFallbackMode(false);
5320
+ setApiFallbackSince(null);
5302
5321
  resetApiConnection();
5303
5322
  console.error("[vibeOS] API token synced from disk (disk is newer)");
5304
5323
  } else if (diskBootstrapToken && diskBootstrapToken !== VIBEOS_API_BOOTSTRAP_TOKEN) {
5305
5324
  VIBEOS_API_DISABLED = false;
5306
5325
  VIBEOS_API_BOOTSTRAP_TOKEN = diskBootstrapToken;
5307
- VIBEOS_API_ENABLED = process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN);
5308
- _apiFallbackMode = false;
5309
- _apiFallbackSince = null;
5326
+ setApiEnabled(process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN));
5327
+ setApiFallbackMode(false);
5328
+ setApiFallbackSince(null);
5310
5329
  resetApiConnection();
5311
5330
  console.error("[vibeOS] Alpha bootstrap token synced from disk (disk is newer)");
5312
5331
  } else if (!diskToken && VIBEOS_API_TOKEN) {
5313
5332
  persistPrimaryApiEnvState({ token: VIBEOS_API_TOKEN, disabled: false });
5314
5333
  console.error("[vibeOS] API token persisted to disk from memory (disk was empty)");
5315
- VIBEOS_API_ENABLED = process.env.VIBEOS_API_ENABLED !== "false" && !!VIBEOS_API_TOKEN;
5334
+ setApiEnabled(process.env.VIBEOS_API_ENABLED !== "false" && !!VIBEOS_API_TOKEN);
5316
5335
  } else if (envToken && !diskToken && !VIBEOS_API_TOKEN) {
5317
5336
  VIBEOS_API_DISABLED = false;
5318
5337
  VIBEOS_API_TOKEN = envToken;
5319
- VIBEOS_API_ENABLED = process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN);
5338
+ setApiEnabled(process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN));
5320
5339
  console.error("[vibeOS] API token loaded from VIBEOS_API_TOKEN env var");
5321
5340
  } else {
5322
5341
  VIBEOS_API_DISABLED = false;
5323
- if (!VIBEOS_API_TOKEN && !hasPrimaryTokenOnDisk()) {
5324
- VIBEOS_API_TOKEN = EMBEDDED_API_TOKEN;
5325
- }
5326
5342
  VIBEOS_API_BOOTSTRAP_TOKEN ||= EMBEDDED_API_TOKEN;
5327
- VIBEOS_API_ENABLED = process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN);
5343
+ setApiEnabled(process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN));
5328
5344
  }
5329
5345
  }
5330
5346
  function getApiClient2() {
5331
5347
  syncApiTokenFromDisk();
5332
- if (!_apiClient && VIBEOS_API_ENABLED && VIBEOS_API_TOKEN) {
5348
+ if (!_apiClient && isApiEnabled() && VIBEOS_API_TOKEN) {
5333
5349
  _apiClient = new VibeOSApiClient({
5334
5350
  baseUrl: VIBEOS_API_URL,
5335
5351
  apiToken: VIBEOS_API_TOKEN,
5336
- timeout: 5e3
5352
+ timeout: PROBE_TIMEOUT
5337
5353
  });
5338
5354
  }
5339
5355
  return _apiClient;
5340
5356
  }
5341
5357
  function isApiFallback2() {
5342
- return _apiFallbackMode || !VIBEOS_API_ENABLED;
5358
+ return isApiFallbackMode() || !isApiEnabled();
5343
5359
  }
5344
5360
  function isApiConnected2() {
5345
5361
  tryResetFallbackCooldown();
5346
- return isApiConnected() && VIBEOS_API_ENABLED && !_apiFallbackMode;
5362
+ return isApiConnected();
5347
5363
  }
5348
5364
  function getBackendVersion() {
5349
5365
  return _backendVersion;
5350
5366
  }
5367
+ function getApiFallbackSince2() {
5368
+ return getApiFallbackSince();
5369
+ }
5351
5370
  async function remoteCall(method, args, fallbackFn) {
5371
+ if (!_startupProbeDone && !isApiFallbackMode()) {
5372
+ _startupProbeDone = true;
5373
+ try {
5374
+ syncApiTokenFromDisk();
5375
+ if (isApiEnabled()) {
5376
+ const probeClient = getApiClient2();
5377
+ if (probeClient) {
5378
+ await probeClient.health();
5379
+ markApiConnected();
5380
+ }
5381
+ }
5382
+ } catch {
5383
+ }
5384
+ }
5352
5385
  syncApiTokenFromDisk();
5353
5386
  if (!VIBEOS_API_TOKEN && VIBEOS_API_BOOTSTRAP_TOKEN) {
5354
5387
  await ensureBootstrapExchange();
5355
5388
  syncApiTokenFromDisk();
5389
+ if (VIBEOS_API_TOKEN)
5390
+ markApiConnected();
5356
5391
  }
5357
- if (tryResetFallbackCooldown()) {
5358
- console.warn("[vibeOS] API fallback cooldown expired \u2014 retrying API");
5392
+ if (isApiFallbackMode() && getApiFallbackSince()) {
5393
+ const elapsed = Date.now() - new Date(getApiFallbackSince()).getTime();
5394
+ if (elapsed > FALLBACK_COOLDOWN_MS) {
5395
+ try {
5396
+ const probeClient = getApiClient2();
5397
+ if (probeClient) {
5398
+ await probeClient.health();
5399
+ markApiConnected();
5400
+ } else {
5401
+ denyReconnection("no client");
5402
+ if (fallbackFn)
5403
+ return fallbackFn();
5404
+ return null;
5405
+ }
5406
+ } catch (probeErr) {
5407
+ const probeStatus = probeErr?.statusCode || probeErr?.status || 0;
5408
+ const probeBody = probeErr?.response?.body || probeErr?.body || "";
5409
+ const probePreview = typeof probeBody === "string" ? probeBody.substring(0, 80) : String(probeBody).substring(0, 80);
5410
+ denyReconnection(probeStatus ? `status=${probeStatus} body=${probePreview}` : `message=${probeErr?.message || probeErr}`);
5411
+ if (fallbackFn)
5412
+ return fallbackFn();
5413
+ return null;
5414
+ }
5415
+ }
5359
5416
  }
5360
- if (!VIBEOS_API_ENABLED || _apiFallbackMode) {
5417
+ if (!isApiEnabled() || isApiFallbackMode()) {
5361
5418
  if (fallbackFn)
5362
5419
  return fallbackFn();
5363
5420
  return null;
@@ -5379,13 +5436,12 @@ async function remoteCall(method, args, fallbackFn) {
5379
5436
  const result = await client2[method](...args);
5380
5437
  if (method === "health")
5381
5438
  recordBackendVersion(result);
5382
- if (_apiFallbackMode) {
5383
- _apiFallbackMode = false;
5384
- _apiFallbackSince = null;
5385
- console.warn(`[vibeOS] API reconnected \u2014 ${method} OK`);
5439
+ if (isApiFallbackMode()) {
5440
+ setApiFallbackMode(false);
5441
+ setApiFallbackSince(null);
5386
5442
  }
5387
- _apiFallbackMode = false;
5388
- _apiFallbackSince = null;
5443
+ setApiFallbackMode(false);
5444
+ setApiFallbackSince(null);
5389
5445
  markApiConnected();
5390
5446
  return result;
5391
5447
  } catch (err) {
@@ -5393,9 +5449,9 @@ async function remoteCall(method, args, fallbackFn) {
5393
5449
  const body = err?.response?.body || err?.body || "";
5394
5450
  const bodyPreview = typeof body === "string" ? body.substring(0, 120) : String(body).substring(0, 120);
5395
5451
  const detail = status ? `status=${status} body=${bodyPreview}` : `message=${err?.message || err}`;
5396
- if (!_apiFallbackMode) {
5397
- _apiFallbackMode = true;
5398
- _apiFallbackSince = (/* @__PURE__ */ new Date()).toISOString();
5452
+ if (!isApiFallbackMode()) {
5453
+ setApiFallbackMode(true);
5454
+ setApiFallbackSince((/* @__PURE__ */ new Date()).toISOString());
5399
5455
  console.error(`[vibeOS] API fallback activated (${method}): ${detail}`);
5400
5456
  }
5401
5457
  if (status === 401 || status === 403) {
@@ -12274,8 +12330,8 @@ function buildFooterLine(input) {
12274
12330
 
12275
12331
  // src/lib/hooks/footer.js
12276
12332
  var IS_CLI_RUNTIME = Boolean(process.stdout?.isTTY || process.stderr?.isTTY || process.stdin?.isTTY);
12277
- var IS_TEST_RUNTIME = process.env.VIBEOS_MCP_PORT === "0" || process.env.NODE_ENV === "test" || process.env.CI === "true";
12278
- var FOOTER_DEBUG_STDERR = process.env.VIBEOS_DEBUG_FOOTER === "1" || !IS_CLI_RUNTIME && !IS_TEST_RUNTIME;
12333
+ var IS_TEST_RUNTIME2 = process.env.VIBEOS_MCP_PORT === "0" || process.env.NODE_ENV === "test" || process.env.CI === "true";
12334
+ var FOOTER_DEBUG_STDERR = process.env.VIBEOS_DEBUG_FOOTER === "1" || !IS_CLI_RUNTIME && !IS_TEST_RUNTIME2;
12279
12335
  function footerDebug(...args) {
12280
12336
  if (FOOTER_DEBUG_STDERR)
12281
12337
  console.error(...args);
@@ -15098,7 +15154,6 @@ function ensureDeferredBootstrap() {
15098
15154
  } catch {
15099
15155
  }
15100
15156
  }
15101
- var _apiFallbackSince2 = null;
15102
15157
  var activeJob2 = null;
15103
15158
  var fp = "";
15104
15159
  var _mcpServerRuntime = null;
@@ -15350,6 +15405,7 @@ function scheduleMcpServerRestart() {
15350
15405
  _mcpServerRestartTimer = null;
15351
15406
  void ensureMcpServerRunning();
15352
15407
  }, 500);
15408
+ if (typeof _mcpServerRestartTimer.unref === "function") _mcpServerRestartTimer.unref();
15353
15409
  }
15354
15410
  function attachMcpServerWatchdog(server2) {
15355
15411
  server2?.once?.("close", () => {
@@ -15398,7 +15454,7 @@ async function ensureMcpServerRunning() {
15398
15454
  backendHealthUrl: `${VIBEOS_API_URL}/health`,
15399
15455
  backendVersion: getBackendVersion(),
15400
15456
  apiFallbackMode: isApiFallback2(),
15401
- apiFallbackSince: _apiFallbackSince2,
15457
+ apiFallbackSince: getApiFallbackSince2(),
15402
15458
  modelLocked: _modelLocked,
15403
15459
  lockedSlot: _lockedSlot,
15404
15460
  lockedModel: _lockedModel
@@ -15785,7 +15841,7 @@ async function DelegationEnforcer({ client: client2, directory: directory3 } = {
15785
15841
  saveBlackboxState,
15786
15842
  isApiFallback: () => isApiFallback2(),
15787
15843
  get _apiFallbackSince() {
15788
- return _apiFallbackSince2;
15844
+ return getApiFallbackSince2();
15789
15845
  },
15790
15846
  reportsIndex: reportsIndexStable,
15791
15847
  saveReportsIndex: saveReportsIndexStable,
@@ -16030,7 +16086,7 @@ ${report.narrative}`);
16030
16086
  }
16031
16087
  };
16032
16088
  _pluginHooksRuntime = pluginHooks;
16033
- const _inTestEnv = process.env.VIBEOS_MCP_PORT === "0";
16089
+ const _inTestEnv = process.env.VIBEOS_MCP_PORT === "0" || process.env.NODE_ENV === "test" || process.execArgv.some((arg) => arg === "--test" || arg.startsWith("--test="));
16034
16090
  if (!_inTestEnv)
16035
16091
  void ensureMcpServerRunning();
16036
16092
  return pluginHooks;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibeostheog",
3
- "version": "0.25.4",
3
+ "version": "0.25.7",
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",