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:
|
|
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.
|
|
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
|
|
4645
|
-
var
|
|
4646
|
-
var
|
|
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)
|
|
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
|
-
|
|
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
|
-
|
|
5185
|
+
setApiEnabled(process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN));
|
|
5170
5186
|
_apiClient = null;
|
|
5171
|
-
|
|
5172
|
-
|
|
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
|
-
|
|
5203
|
+
setApiEnabled(false);
|
|
5188
5204
|
_apiClient = null;
|
|
5189
|
-
|
|
5190
|
-
|
|
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
|
-
|
|
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
|
|
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 (!
|
|
5236
|
+
if (!isApiFallbackMode() || !getApiFallbackSince())
|
|
5222
5237
|
return false;
|
|
5223
|
-
const elapsed = Date.now() - new Date(
|
|
5238
|
+
const elapsed = Date.now() - new Date(getApiFallbackSince()).getTime();
|
|
5224
5239
|
if (elapsed > FALLBACK_COOLDOWN_MS) {
|
|
5225
|
-
|
|
5226
|
-
|
|
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:
|
|
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 ||
|
|
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
|
-
|
|
5305
|
+
setApiEnabled(false);
|
|
5287
5306
|
_apiClient = null;
|
|
5288
|
-
|
|
5289
|
-
|
|
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
|
-
|
|
5317
|
+
setApiEnabled(process.env.VIBEOS_API_ENABLED !== "false" && (!!VIBEOS_API_TOKEN || !!VIBEOS_API_BOOTSTRAP_TOKEN));
|
|
5299
5318
|
_apiClient = null;
|
|
5300
|
-
|
|
5301
|
-
|
|
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
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 &&
|
|
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:
|
|
5352
|
+
timeout: PROBE_TIMEOUT
|
|
5337
5353
|
});
|
|
5338
5354
|
}
|
|
5339
5355
|
return _apiClient;
|
|
5340
5356
|
}
|
|
5341
5357
|
function isApiFallback2() {
|
|
5342
|
-
return
|
|
5358
|
+
return isApiFallbackMode() || !isApiEnabled();
|
|
5343
5359
|
}
|
|
5344
5360
|
function isApiConnected2() {
|
|
5345
5361
|
tryResetFallbackCooldown();
|
|
5346
|
-
return isApiConnected()
|
|
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 (
|
|
5358
|
-
|
|
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 (!
|
|
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 (
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
console.warn(`[vibeOS] API reconnected \u2014 ${method} OK`);
|
|
5439
|
+
if (isApiFallbackMode()) {
|
|
5440
|
+
setApiFallbackMode(false);
|
|
5441
|
+
setApiFallbackSince(null);
|
|
5386
5442
|
}
|
|
5387
|
-
|
|
5388
|
-
|
|
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 (!
|
|
5397
|
-
|
|
5398
|
-
|
|
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
|
|
12278
|
-
var FOOTER_DEBUG_STDERR = process.env.VIBEOS_DEBUG_FOOTER === "1" || !IS_CLI_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:
|
|
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
|
|
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.
|
|
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",
|