vibelet 1.2.221 → 1.2.224
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/README.md +22 -5
- package/dist/index.cjs +1 -1
- package/dist/inventory-scan-worker.cjs +1 -1
- package/dist/runtime-version.cjs +1 -1
- package/dist/tailcat/vibelet-tailcat-darwin-amd64 +0 -0
- package/dist/tailcat/vibelet-tailcat-darwin-arm64 +0 -0
- package/dist/tailcat/vibelet-tailcat-linux-amd64 +0 -0
- package/dist/tailcat/vibelet-tailcat-linux-arm64 +0 -0
- package/dist/tailcat/vibelet-tailcat-win32-amd64.exe +0 -0
- package/dist/tailcat/vibelet-tailcat-win32-arm64.exe +0 -0
- package/dist/vibelet.mjs +170 -105
- package/package.json +1 -1
package/dist/runtime-version.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var c=require("node:fs"),n=require("node:path"),p="@vibelet/cli";function i(r){try{let e=JSON.parse((0,c.readFileSync)(r,"utf8"));if(e.name===p&&typeof e.version=="string"&&e.version.length>0)return e.version}catch{}return null}function l(){return"1.2.
|
|
1
|
+
var c=require("node:fs"),n=require("node:path"),p="@vibelet/cli";function i(r){try{let e=JSON.parse((0,c.readFileSync)(r,"utf8"));if(e.name===p&&typeof e.version=="string"&&e.version.length>0)return e.version}catch{}return null}function l(){return"1.2.224"}var a=l();process.stdout.write(`${a}
|
|
2
2
|
`);
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/vibelet.mjs
CHANGED
|
@@ -14312,19 +14312,19 @@ function printCliHelp({ packageJson, port }) {
|
|
|
14312
14312
|
process.stdout.write(` vibelet\n\n`);
|
|
14313
14313
|
process.stdout.write(`Usage:\n`);
|
|
14314
14314
|
process.stdout.write(
|
|
14315
|
-
` npx ${packageJson.name} Install/start the daemon,
|
|
14315
|
+
` npx ${packageJson.name} Install/start the daemon, enable Tailcat and Cloudflare access by default, and print a pairing QR code\n`,
|
|
14316
14316
|
);
|
|
14317
14317
|
process.stdout.write(` npx ${packageJson.name} start Same as above\n`);
|
|
14318
14318
|
process.stdout.write(
|
|
14319
|
-
` npx ${packageJson.name} --access=local Use LAN/local pairing only; skip Cloudflare and Tailscale\n`,
|
|
14319
|
+
` npx ${packageJson.name} --access=local Use LAN/local pairing only; skip Tailcat, Cloudflare and Tailscale\n`,
|
|
14320
14320
|
);
|
|
14321
|
-
process.stdout.write(` npx ${packageJson.name} --
|
|
14321
|
+
process.stdout.write(` npx ${packageJson.name} --cloudflare --force Force a new Cloudflare Tunnel URL\n`);
|
|
14322
14322
|
process.stdout.write(` npx ${packageJson.name} --access=https://<url> Use a custom tunnel URL for remote access\n`);
|
|
14323
14323
|
process.stdout.write(` npx ${packageJson.name} --access=<host> Set the primary LAN/Tailscale host/IP address\n`);
|
|
14324
14324
|
process.stdout.write(
|
|
14325
|
-
` npx ${packageJson.name} --tailcat Enable
|
|
14325
|
+
` npx ${packageJson.name} --tailcat Enable Tailcat access without automatic Cloudflare Tunnel\n`,
|
|
14326
14326
|
);
|
|
14327
|
-
process.stdout.write(` npx ${packageJson.name} --no-tailcat Disable
|
|
14327
|
+
process.stdout.write(` npx ${packageJson.name} --no-tailcat Disable Tailcat access; keep Cloudflare available\n`);
|
|
14328
14328
|
process.stdout.write(` npx ${packageJson.name} --port <port> Start or query the daemon on a custom port\n`);
|
|
14329
14329
|
process.stdout.write(
|
|
14330
14330
|
` npx ${packageJson.name} --claude-driver tui Drive the interactive Claude TUI (subscription) instead of \`claude -p\`\n`,
|
|
@@ -14344,12 +14344,12 @@ function printCliHelp({ packageJson, port }) {
|
|
|
14344
14344
|
process.stdout.write(` npx ${packageJson.name === 'vibelet' ? '@vibelet/cli' : 'vibelet'}\n`);
|
|
14345
14345
|
process.stdout.write(` vibelet\n\n`);
|
|
14346
14346
|
process.stdout.write(`Remote access:\n`);
|
|
14347
|
-
process.stdout.write(` #
|
|
14347
|
+
process.stdout.write(` # Tailcat and Cloudflare are on by default for start/reset/restart\n`);
|
|
14348
14348
|
process.stdout.write(` npx ${packageJson.name}\n\n`);
|
|
14349
14349
|
process.stdout.write(` # Want LAN/local-only pairing for this run?\n`);
|
|
14350
14350
|
process.stdout.write(` npx ${packageJson.name} --access=local\n\n`);
|
|
14351
|
-
process.stdout.write(` #
|
|
14352
|
-
process.stdout.write(` npx ${packageJson.name} --
|
|
14351
|
+
process.stdout.write(` # Use Cloudflare instead of Tailcat (add --force for a fresh URL):\n`);
|
|
14352
|
+
process.stdout.write(` npx ${packageJson.name} --cloudflare\n\n`);
|
|
14353
14353
|
process.stdout.write(` # Or bring your own tunnel and pass the URL manually:\n`);
|
|
14354
14354
|
process.stdout.write(` npx cloudflared tunnel --protocol auto --url http://localhost:${port}\n`);
|
|
14355
14355
|
process.stdout.write(` ngrok http ${port}\n`);
|
|
@@ -14358,8 +14358,12 @@ function printCliHelp({ packageJson, port }) {
|
|
|
14358
14358
|
process.stdout.write(` npx ${packageJson.name} --access=<tailscale-ip>\n\n`);
|
|
14359
14359
|
process.stdout.write(`\nTailcat direct access:\n`);
|
|
14360
14360
|
process.stdout.write(` npx ${packageJson.name} --tailcat\n`);
|
|
14361
|
-
process.stdout.write(
|
|
14362
|
-
|
|
14361
|
+
process.stdout.write(
|
|
14362
|
+
` # Add --cloudflare to --tailcat to enable both transports.\n # Tailcat does not change system VPN, DNS, or routes.\n\n`,
|
|
14363
|
+
);
|
|
14364
|
+
process.stdout.write(
|
|
14365
|
+
`Legacy aliases still work: --access=remote, --local, --relay, --host, --fallback-hosts, --remote, --tunnel.\n`,
|
|
14366
|
+
);
|
|
14363
14367
|
}
|
|
14364
14368
|
|
|
14365
14369
|
|
|
@@ -15919,8 +15923,10 @@ function shouldManageQuickTunnel({
|
|
|
15919
15923
|
savedRelayUrl = '',
|
|
15920
15924
|
force = false,
|
|
15921
15925
|
preserveAccess = false,
|
|
15926
|
+
tailcatEnabled = false,
|
|
15927
|
+
remoteRequested = false,
|
|
15922
15928
|
}) {
|
|
15923
|
-
if (preserveAccess) return false;
|
|
15929
|
+
if (preserveAccess || !remoteRequested) return false;
|
|
15924
15930
|
if (!startCommand || localMode || relayArg !== null || hostArg || fallbackHostsArg) {
|
|
15925
15931
|
return false;
|
|
15926
15932
|
}
|
|
@@ -16042,18 +16048,24 @@ async function stopDaemonWithHooks({
|
|
|
16042
16048
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => {
|
|
16043
16049
|
|
|
16044
16050
|
/* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
|
|
16045
|
-
/* harmony export */
|
|
16051
|
+
/* harmony export */ OW: () => (/* binding */ shouldRequestCloudflare),
|
|
16052
|
+
/* harmony export */ SS: () => (/* binding */ configureTailcatMode),
|
|
16053
|
+
/* harmony export */ SY: () => (/* binding */ createTailcatConfigStore)
|
|
16046
16054
|
/* harmony export */ });
|
|
16055
|
+
/* unused harmony export resolveTailcatChoice */
|
|
16047
16056
|
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(3024);
|
|
16057
|
+
/* harmony import */ var _vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(6927);
|
|
16058
|
+
|
|
16048
16059
|
|
|
16049
16060
|
|
|
16050
16061
|
function createTailcatConfigStore(configPath, dataDirectory) {
|
|
16051
16062
|
return {
|
|
16052
16063
|
load() {
|
|
16053
16064
|
try {
|
|
16054
|
-
|
|
16065
|
+
const enabled = JSON.parse((0,node_fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync)(configPath, 'utf8')).enabled;
|
|
16066
|
+
return typeof enabled === 'boolean' ? enabled : true;
|
|
16055
16067
|
} catch {
|
|
16056
|
-
return
|
|
16068
|
+
return true;
|
|
16057
16069
|
}
|
|
16058
16070
|
},
|
|
16059
16071
|
save(enabled) {
|
|
@@ -16063,6 +16075,77 @@ function createTailcatConfigStore(configPath, dataDirectory) {
|
|
|
16063
16075
|
};
|
|
16064
16076
|
}
|
|
16065
16077
|
|
|
16078
|
+
function resolveTailcatChoice({ enable, disable, cloudflareRequested, environmentEnabled, savedEnabled }) {
|
|
16079
|
+
if (enable) return true;
|
|
16080
|
+
if (disable || cloudflareRequested) return false;
|
|
16081
|
+
return environmentEnabled || savedEnabled;
|
|
16082
|
+
}
|
|
16083
|
+
|
|
16084
|
+
function configureTailcatMode({
|
|
16085
|
+
readFlag,
|
|
16086
|
+
fail,
|
|
16087
|
+
config,
|
|
16088
|
+
localMode,
|
|
16089
|
+
cloudflareRequested,
|
|
16090
|
+
environment = process.env,
|
|
16091
|
+
}) {
|
|
16092
|
+
const enable = readFlag('tailcat');
|
|
16093
|
+
const disable = readFlag('no-tailcat');
|
|
16094
|
+
if (enable && disable) fail('Do not combine --tailcat with --no-tailcat.');
|
|
16095
|
+
const requested = resolveTailcatChoice({
|
|
16096
|
+
enable,
|
|
16097
|
+
disable,
|
|
16098
|
+
cloudflareRequested,
|
|
16099
|
+
environmentEnabled: (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_1__/* .isTruthyEnvFlag */ .ap)(environment.VIBELET_TAILCAT),
|
|
16100
|
+
savedEnabled: config.load(),
|
|
16101
|
+
});
|
|
16102
|
+
if (enable || disable) config.save(requested);
|
|
16103
|
+
// Local access overrides Tailcat for this run without changing its saved choice.
|
|
16104
|
+
const enabled = !localMode && requested;
|
|
16105
|
+
if (enabled) environment.VIBELET_TAILCAT = '1';
|
|
16106
|
+
else delete environment.VIBELET_TAILCAT;
|
|
16107
|
+
return { enabled, explicitChoice: enable || disable };
|
|
16108
|
+
}
|
|
16109
|
+
|
|
16110
|
+
function shouldRequestCloudflare({ accessTarget, tailcatEnabled, explicitTailcatChoice }) {
|
|
16111
|
+
return accessTarget?.kind === 'remote' || (!accessTarget && !(explicitTailcatChoice && tailcatEnabled));
|
|
16112
|
+
}
|
|
16113
|
+
|
|
16114
|
+
|
|
16115
|
+
/***/ }),
|
|
16116
|
+
|
|
16117
|
+
/***/ 50:
|
|
16118
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __nccwpck_require__) => {
|
|
16119
|
+
|
|
16120
|
+
/* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
|
|
16121
|
+
/* harmony export */ Q: () => (/* binding */ normalizePortValue),
|
|
16122
|
+
/* harmony export */ Z: () => (/* binding */ compareVersions)
|
|
16123
|
+
/* harmony export */ });
|
|
16124
|
+
function normalizePortValue(rawValue) {
|
|
16125
|
+
if (typeof rawValue !== 'string' && typeof rawValue !== 'number') {
|
|
16126
|
+
return null;
|
|
16127
|
+
}
|
|
16128
|
+
const normalized = String(rawValue).trim();
|
|
16129
|
+
if (!/^\d+$/.test(normalized)) {
|
|
16130
|
+
return null;
|
|
16131
|
+
}
|
|
16132
|
+
const parsed = Number(normalized);
|
|
16133
|
+
if (!Number.isInteger(parsed) || parsed <= 0 || parsed > 65535) {
|
|
16134
|
+
return null;
|
|
16135
|
+
}
|
|
16136
|
+
return parsed;
|
|
16137
|
+
}
|
|
16138
|
+
|
|
16139
|
+
function compareVersions(a, b) {
|
|
16140
|
+
const pa = a.split('.').map(Number);
|
|
16141
|
+
const pb = b.split('.').map(Number);
|
|
16142
|
+
for (let i = 0; i < 3; i++) {
|
|
16143
|
+
if ((pa[i] || 0) < (pb[i] || 0)) return -1;
|
|
16144
|
+
if ((pa[i] || 0) > (pb[i] || 0)) return 1;
|
|
16145
|
+
}
|
|
16146
|
+
return 0;
|
|
16147
|
+
}
|
|
16148
|
+
|
|
16066
16149
|
|
|
16067
16150
|
/***/ }),
|
|
16068
16151
|
|
|
@@ -16071,22 +16154,23 @@ function createTailcatConfigStore(configPath, dataDirectory) {
|
|
|
16071
16154
|
|
|
16072
16155
|
__nccwpck_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {
|
|
16073
16156
|
/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(1421);
|
|
16157
|
+
/* harmony import */ var _vibelet_value_validation_mjs__WEBPACK_IMPORTED_MODULE_12__ = __nccwpck_require__(50);
|
|
16074
16158
|
/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(3024);
|
|
16075
16159
|
/* harmony import */ var node_module__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(8995);
|
|
16076
16160
|
/* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(8161);
|
|
16077
16161
|
/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(6760);
|
|
16078
16162
|
/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(3136);
|
|
16079
|
-
/* harmony import */ var
|
|
16163
|
+
/* harmony import */ var _vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__ = __nccwpck_require__(6927);
|
|
16080
16164
|
/* harmony import */ var _cloudflared_tunnel_manager_mjs__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(1484);
|
|
16081
16165
|
/* harmony import */ var _vibelet_cloudflare_runtime_mjs__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(3869);
|
|
16082
|
-
/* harmony import */ var
|
|
16166
|
+
/* harmony import */ var _vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_14__ = __nccwpck_require__(1010);
|
|
16083
16167
|
/* harmony import */ var _linux_systemd_mjs__WEBPACK_IMPORTED_MODULE_8__ = __nccwpck_require__(4217);
|
|
16084
|
-
/* harmony import */ var
|
|
16085
|
-
/* harmony import */ var
|
|
16168
|
+
/* harmony import */ var _vibelet_stop_logic_mjs__WEBPACK_IMPORTED_MODULE_15__ = __nccwpck_require__(6274);
|
|
16169
|
+
/* harmony import */ var _vibelet_help_mjs__WEBPACK_IMPORTED_MODULE_17__ = __nccwpck_require__(4162);
|
|
16086
16170
|
/* harmony import */ var _vibelet_tailcat_config_mjs__WEBPACK_IMPORTED_MODULE_9__ = __nccwpck_require__(5798);
|
|
16087
|
-
/* harmony import */ var
|
|
16171
|
+
/* harmony import */ var _vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__ = __nccwpck_require__(4);
|
|
16088
16172
|
/* harmony import */ var _terminal_wrapper_mjs__WEBPACK_IMPORTED_MODULE_10__ = __nccwpck_require__(5028);
|
|
16089
|
-
/* harmony import */ var
|
|
16173
|
+
/* harmony import */ var _vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__ = __nccwpck_require__(7721);
|
|
16090
16174
|
/* harmony import */ var _vibelet_pairing_output_mjs__WEBPACK_IMPORTED_MODULE_11__ = __nccwpck_require__(9485);
|
|
16091
16175
|
|
|
16092
16176
|
|
|
@@ -16107,6 +16191,7 @@ __nccwpck_require__.a(__webpack_module__, async (__webpack_handle_async_dependen
|
|
|
16107
16191
|
|
|
16108
16192
|
|
|
16109
16193
|
|
|
16194
|
+
|
|
16110
16195
|
|
|
16111
16196
|
// ─── Paths & constants ─────────────────────────────────────────────────────────
|
|
16112
16197
|
|
|
@@ -16127,7 +16212,7 @@ const stdoutLogPath = (0,node_path__WEBPACK_IMPORTED_MODULE_4__.join)(logDir, 'd
|
|
|
16127
16212
|
const stderrLogPath = (0,node_path__WEBPACK_IMPORTED_MODULE_4__.join)(logDir, 'daemon.stderr.log');
|
|
16128
16213
|
const pidFilePath = (0,node_path__WEBPACK_IMPORTED_MODULE_4__.join)(vibeletDir, 'daemon.pid');
|
|
16129
16214
|
const relayConfig = (0,_vibelet_cloudflare_runtime_mjs__WEBPACK_IMPORTED_MODULE_7__/* .createRelayConfigStore */ .T7)((0,node_path__WEBPACK_IMPORTED_MODULE_4__.join)(vibeletDir, 'relay.json'));
|
|
16130
|
-
const tailcatConfig = (0,_vibelet_tailcat_config_mjs__WEBPACK_IMPORTED_MODULE_9__/* .createTailcatConfigStore */ .
|
|
16215
|
+
const tailcatConfig = (0,_vibelet_tailcat_config_mjs__WEBPACK_IMPORTED_MODULE_9__/* .createTailcatConfigStore */ .SY)((0,node_path__WEBPACK_IMPORTED_MODULE_4__.join)(vibeletDir, 'tailcat.json'), vibeletDir);
|
|
16131
16216
|
const tunnelStatePath = (0,node_path__WEBPACK_IMPORTED_MODULE_4__.join)(vibeletDir, 'tunnel.json');
|
|
16132
16217
|
const cloudflaredUpdateStatePath = (0,node_path__WEBPACK_IMPORTED_MODULE_4__.join)(vibeletDir, 'cloudflared-update.json');
|
|
16133
16218
|
const updateCheckPath = (0,node_path__WEBPACK_IMPORTED_MODULE_4__.join)(vibeletDir, 'update-check.json');
|
|
@@ -16136,22 +16221,7 @@ const UPDATE_CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000; // 4 hours
|
|
|
16136
16221
|
|
|
16137
16222
|
let officialSitePrinted = false;
|
|
16138
16223
|
let updateMessage = '';
|
|
16139
|
-
let port = normalizePortValue(process.env.VIBE_PORT) ?? 9876;
|
|
16140
|
-
|
|
16141
|
-
function normalizePortValue(rawValue) {
|
|
16142
|
-
if (typeof rawValue !== 'string' && typeof rawValue !== 'number') {
|
|
16143
|
-
return null;
|
|
16144
|
-
}
|
|
16145
|
-
const normalized = String(rawValue).trim();
|
|
16146
|
-
if (!/^\d+$/.test(normalized)) {
|
|
16147
|
-
return null;
|
|
16148
|
-
}
|
|
16149
|
-
const parsed = Number(normalized);
|
|
16150
|
-
if (!Number.isInteger(parsed) || parsed <= 0 || parsed > 65535) {
|
|
16151
|
-
return null;
|
|
16152
|
-
}
|
|
16153
|
-
return parsed;
|
|
16154
|
-
}
|
|
16224
|
+
let port = (0,_vibelet_value_validation_mjs__WEBPACK_IMPORTED_MODULE_12__/* .normalizePortValue */ .Q)(process.env.VIBE_PORT) ?? 9876;
|
|
16155
16225
|
|
|
16156
16226
|
function printOfficialSite() {
|
|
16157
16227
|
if (officialSitePrinted) return;
|
|
@@ -16183,20 +16253,10 @@ function writeUpdateCheck(data) {
|
|
|
16183
16253
|
}
|
|
16184
16254
|
}
|
|
16185
16255
|
|
|
16186
|
-
function compareVersions(a, b) {
|
|
16187
|
-
const pa = a.split('.').map(Number);
|
|
16188
|
-
const pb = b.split('.').map(Number);
|
|
16189
|
-
for (let i = 0; i < 3; i++) {
|
|
16190
|
-
if ((pa[i] || 0) < (pb[i] || 0)) return -1;
|
|
16191
|
-
if ((pa[i] || 0) > (pb[i] || 0)) return 1;
|
|
16192
|
-
}
|
|
16193
|
-
return 0;
|
|
16194
|
-
}
|
|
16195
|
-
|
|
16196
16256
|
function checkForUpdateFromCache() {
|
|
16197
16257
|
const cached = readUpdateCheck();
|
|
16198
16258
|
if (!cached?.latestVersion) return;
|
|
16199
|
-
if (compareVersions(packageJson.version, cached.latestVersion) < 0) {
|
|
16259
|
+
if ((0,_vibelet_value_validation_mjs__WEBPACK_IMPORTED_MODULE_12__/* .compareVersions */ .Z)(packageJson.version, cached.latestVersion) < 0) {
|
|
16200
16260
|
updateMessage =
|
|
16201
16261
|
`\x1b[33m╭───────────────────────────────────────────╮\x1b[0m\n` +
|
|
16202
16262
|
`\x1b[33m│\x1b[0m Update available: \x1b[90m${packageJson.version}\x1b[0m → \x1b[32m${cached.latestVersion}\x1b[0m${' '.repeat(Math.max(0, 14 - packageJson.version.length - cached.latestVersion.length))}\x1b[33m│\x1b[0m\n` +
|
|
@@ -16274,7 +16334,7 @@ function ensureRuntimeInstalled() {
|
|
|
16274
16334
|
const runtimeMetadata = readRuntimeMetadata();
|
|
16275
16335
|
|
|
16276
16336
|
if (
|
|
16277
|
-
(0,
|
|
16337
|
+
(0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .shouldRefuseRuntimeDowngrade */ .Ne)({
|
|
16278
16338
|
cliVersion: packageJson.version,
|
|
16279
16339
|
runtimeVersion: runtimeMetadata?.version,
|
|
16280
16340
|
runtimeEntryExists: (0,node_fs__WEBPACK_IMPORTED_MODULE_1__.existsSync)(runtimeDaemonEntryPath),
|
|
@@ -16478,7 +16538,7 @@ function createDarwinBackend() {
|
|
|
16478
16538
|
}
|
|
16479
16539
|
|
|
16480
16540
|
function bootoutService() {
|
|
16481
|
-
return (0,
|
|
16541
|
+
return (0,_vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_14__/* .bootoutLaunchdService */ .B)({
|
|
16482
16542
|
launchctl,
|
|
16483
16543
|
launchDomain,
|
|
16484
16544
|
label,
|
|
@@ -16568,7 +16628,7 @@ ${envSection}
|
|
|
16568
16628
|
if (result.status !== 0) {
|
|
16569
16629
|
fail(
|
|
16570
16630
|
'Failed to bootstrap vibelet launch agent.',
|
|
16571
|
-
[(0,
|
|
16631
|
+
[(0,_vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_14__/* .describeLaunchctlResult */ .N)(bootoutResult.result), (0,_vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_14__/* .describeLaunchctlResult */ .N)(result)].filter(Boolean).join('\n'),
|
|
16572
16632
|
);
|
|
16573
16633
|
}
|
|
16574
16634
|
}
|
|
@@ -16584,7 +16644,7 @@ ${envSection}
|
|
|
16584
16644
|
stop() {
|
|
16585
16645
|
const bootoutResult = bootoutService();
|
|
16586
16646
|
if (!bootoutResult.ok) {
|
|
16587
|
-
fail('Failed to unload vibelet launch agent.', (0,
|
|
16647
|
+
fail('Failed to unload vibelet launch agent.', (0,_vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_14__/* .describeLaunchctlResult */ .N)(bootoutResult.result));
|
|
16588
16648
|
}
|
|
16589
16649
|
// bootout returns before launchd actually finishes unloading. Poll
|
|
16590
16650
|
// until the service is gone so a follow-up install() doesn't see a
|
|
@@ -16927,7 +16987,7 @@ function retireTrackedQuickTunnel({ required = false } = {}) {
|
|
|
16927
16987
|
|
|
16928
16988
|
async function stopRunningDaemon(backend) {
|
|
16929
16989
|
try {
|
|
16930
|
-
await (0,
|
|
16990
|
+
await (0,_vibelet_stop_logic_mjs__WEBPACK_IMPORTED_MODULE_15__/* .stopDaemonWithHooks */ .v)({
|
|
16931
16991
|
requestShutdown,
|
|
16932
16992
|
backendStop: () => backend.stop(),
|
|
16933
16993
|
waitForDaemonExit,
|
|
@@ -16940,13 +17000,13 @@ async function stopRunningDaemon(backend) {
|
|
|
16940
17000
|
async function ensureDaemonForTerminalControl(backend) {
|
|
16941
17001
|
const healthyDaemon = await probeHealth(1_500);
|
|
16942
17002
|
const tokenReady = (0,node_fs__WEBPACK_IMPORTED_MODULE_1__.existsSync)(runtimeTerminalControlTokenPath);
|
|
16943
|
-
const terminalControlReady = healthyDaemon && tokenReady && (0,
|
|
17003
|
+
const terminalControlReady = healthyDaemon && tokenReady && (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .doesHealthSupportTerminalControl */ .iX)(healthyDaemon);
|
|
16944
17004
|
if (terminalControlReady) return healthyDaemon;
|
|
16945
17005
|
|
|
16946
17006
|
if (healthyDaemon && !terminalControlReady) {
|
|
16947
17007
|
const activeSessions = typeof healthyDaemon.activeSessions === 'number' ? healthyDaemon.activeSessions : 0;
|
|
16948
17008
|
if (activeSessions > 0) {
|
|
16949
|
-
const reason = (0,
|
|
17009
|
+
const reason = (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .doesHealthSupportTerminalControl */ .iX)(healthyDaemon)
|
|
16950
17010
|
? 'terminal-control token is missing'
|
|
16951
17011
|
: 'the running daemon does not advertise terminal-control support';
|
|
16952
17012
|
process.stderr.write(
|
|
@@ -16965,7 +17025,7 @@ async function ensureDaemonForTerminalControl(backend) {
|
|
|
16965
17025
|
}
|
|
16966
17026
|
|
|
16967
17027
|
function validateExplicitCleartextHosts({ hostArg, fallbackHostsArg }) {
|
|
16968
|
-
const [unsafeHost] = (0,
|
|
17028
|
+
const [unsafeHost] = (0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__/* .findUnsafeCleartextHosts */ .dE)({ hostArg, fallbackHostsArg });
|
|
16969
17029
|
if (unsafeHost) fail(`Refusing public cleartext host ${unsafeHost}. Use HTTPS, Tailscale, LAN, or local access.`);
|
|
16970
17030
|
}
|
|
16971
17031
|
|
|
@@ -16986,11 +17046,11 @@ async function printPairingSummary(existingHealth = null, { relayUrlOverride = n
|
|
|
16986
17046
|
const pairingPayload =
|
|
16987
17047
|
relayUrlOverride === null
|
|
16988
17048
|
? daemonPairingPayload
|
|
16989
|
-
: (0,
|
|
16990
|
-
const connections = (0,
|
|
17049
|
+
: (0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__/* .applyRelayUrlToPairingPayload */ .mp)(daemonPairingPayload, relayUrlOverride);
|
|
17050
|
+
const connections = (0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__/* .normalizePairingConnections */ .No)(pairingPayload);
|
|
16991
17051
|
const [preferredConnection, ...otherConnections] = connections;
|
|
16992
|
-
const webUiConnection = (0,
|
|
16993
|
-
const compactPairingPayload = (0,
|
|
17052
|
+
const webUiConnection = (0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__/* .selectWebUiConnectionTarget */ .SF)(connections);
|
|
17053
|
+
const compactPairingPayload = (0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__/* .createCompactPairingPayload */ .YP)(pairingPayload);
|
|
16994
17054
|
|
|
16995
17055
|
process.stdout.write(`Vibelet daemon is ready.\n\n`);
|
|
16996
17056
|
process.stdout.write(`Device: ${health.displayName}\n`);
|
|
@@ -16998,26 +17058,26 @@ async function printPairingSummary(existingHealth = null, { relayUrlOverride = n
|
|
|
16998
17058
|
process.stdout.write(`Host: ${pairingPayload.canonicalHost}\n`);
|
|
16999
17059
|
process.stdout.write(`Port: ${pairingPayload.port}\n`);
|
|
17000
17060
|
if (preferredConnection) {
|
|
17001
|
-
process.stdout.write(`Preferred path: ${(0,
|
|
17061
|
+
process.stdout.write(`Preferred path: ${(0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__/* .formatConnectionSummary */ .uR)(preferredConnection)}\n`);
|
|
17002
17062
|
}
|
|
17003
17063
|
if (otherConnections.length > 0) {
|
|
17004
17064
|
process.stdout.write(`Other paths:\n`);
|
|
17005
17065
|
otherConnections.forEach((target) => {
|
|
17006
|
-
process.stdout.write(` - ${(0,
|
|
17066
|
+
process.stdout.write(` - ${(0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__/* .formatConnectionSummary */ .uR)(target)}\n`);
|
|
17007
17067
|
});
|
|
17008
17068
|
}
|
|
17009
|
-
process.stdout.write(`Web UI: ${(0,
|
|
17069
|
+
process.stdout.write(`Web UI: ${(0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__/* .buildWebUiUrl */ .Gv)({ host: 'localhost', port }, compactPairingPayload)}\n`);
|
|
17010
17070
|
if (webUiConnection && webUiConnection.host !== 'localhost') {
|
|
17011
|
-
process.stdout.write(`Web UI (other devices): ${(0,
|
|
17071
|
+
process.stdout.write(`Web UI (other devices): ${(0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_16__/* .buildWebUiUrl */ .Gv)(webUiConnection, compactPairingPayload)}\n`);
|
|
17012
17072
|
}
|
|
17013
17073
|
process.stdout.write(`Paired devices: ${health.pairedDevices}\n`);
|
|
17014
17074
|
await printPairingQr(pairingPayload);
|
|
17015
17075
|
}
|
|
17016
17076
|
|
|
17017
|
-
const printHelp = () => (0,
|
|
17077
|
+
const printHelp = () => (0,_vibelet_help_mjs__WEBPACK_IMPORTED_MODULE_17__/* .printCliHelp */ .n)({ packageJson, port });
|
|
17018
17078
|
|
|
17019
17079
|
function parseNamedArg(name, errorHint) {
|
|
17020
|
-
return (0,
|
|
17080
|
+
return (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .parseNamedArg */ .nE)(process.argv, name, errorHint, fail);
|
|
17021
17081
|
}
|
|
17022
17082
|
|
|
17023
17083
|
function parseRelayArg() {
|
|
@@ -17027,7 +17087,7 @@ function parseRelayArg() {
|
|
|
17027
17087
|
function parsePortArg() {
|
|
17028
17088
|
const rawValue = parseNamedArg('port', '9876');
|
|
17029
17089
|
if (rawValue === null) return null;
|
|
17030
|
-
const parsed = normalizePortValue(rawValue);
|
|
17090
|
+
const parsed = (0,_vibelet_value_validation_mjs__WEBPACK_IMPORTED_MODULE_12__/* .normalizePortValue */ .Q)(rawValue);
|
|
17031
17091
|
if (parsed === null) {
|
|
17032
17092
|
fail('--port must be an integer between 1 and 65535');
|
|
17033
17093
|
}
|
|
@@ -17069,6 +17129,7 @@ function parseCommandArg(argv) {
|
|
|
17069
17129
|
}
|
|
17070
17130
|
if (
|
|
17071
17131
|
arg === '--local' ||
|
|
17132
|
+
arg === '--cloudflare' ||
|
|
17072
17133
|
arg === '--remote' ||
|
|
17073
17134
|
arg === '--tunnel' ||
|
|
17074
17135
|
arg === '--force' ||
|
|
@@ -17128,42 +17189,41 @@ async function main() {
|
|
|
17128
17189
|
return;
|
|
17129
17190
|
}
|
|
17130
17191
|
|
|
17131
|
-
|
|
17132
|
-
|
|
17192
|
+
let accessTarget = (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .parseAccessTargetArg */ .tY)(process.argv, fail);
|
|
17193
|
+
const cloudflareFlag = (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .consumeFlag */ .PC)(process.argv, 'cloudflare') || (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .readNpmConfigFlag */ .AW)('cloudflare');
|
|
17194
|
+
if (cloudflareFlag && accessTarget && accessTarget.kind !== 'remote')
|
|
17195
|
+
fail('Do not combine --cloudflare with another --access mode.');
|
|
17196
|
+
if (cloudflareFlag) accessTarget = { kind: 'remote' };
|
|
17197
|
+
if (accessTarget && (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .hasLegacyAccessArgs */ .NT)(process.argv, process.env)) {
|
|
17133
17198
|
fail(
|
|
17134
17199
|
'Do not combine --access with legacy access flags.',
|
|
17135
17200
|
'Use one form, for example `--access=local`, `--access=remote`, `--access=https://...`, or `--access=<host>`.',
|
|
17136
17201
|
);
|
|
17137
17202
|
}
|
|
17138
17203
|
if (!accessTarget) {
|
|
17139
|
-
|
|
17140
|
-
(0,
|
|
17141
|
-
(0,
|
|
17142
|
-
(0,
|
|
17204
|
+
const legacyRemote =
|
|
17205
|
+
(0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .consumeFlag */ .PC)(process.argv, 'remote') ||
|
|
17206
|
+
(0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .consumeFlag */ .PC)(process.argv, 'tunnel') ||
|
|
17207
|
+
(0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .readNpmConfigFlag */ .AW)('remote') ||
|
|
17208
|
+
(0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .readNpmConfigFlag */ .AW)('tunnel');
|
|
17209
|
+
if (legacyRemote) accessTarget = { kind: 'remote' };
|
|
17143
17210
|
}
|
|
17144
17211
|
const localFlag =
|
|
17145
17212
|
accessTarget?.kind === 'local' ||
|
|
17146
17213
|
(!accessTarget &&
|
|
17147
|
-
((0,
|
|
17148
|
-
(0,
|
|
17149
|
-
(0,
|
|
17150
|
-
const forceFlag = (0,
|
|
17214
|
+
((0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .consumeFlag */ .PC)(process.argv, 'local') ||
|
|
17215
|
+
(0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .readNpmConfigFlag */ .AW)('local') ||
|
|
17216
|
+
(0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .isTruthyEnvFlag */ .ap)(process.env.VIBELET_LOCAL_ONLY)));
|
|
17217
|
+
const forceFlag = (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .consumeFlag */ .PC)(process.argv, 'force') || (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .readNpmConfigFlag */ .AW)('force');
|
|
17151
17218
|
// App-triggered upgrades keep the currently working connection intact.
|
|
17152
|
-
const preserveAccess = (0,
|
|
17153
|
-
const
|
|
17154
|
-
|
|
17155
|
-
|
|
17156
|
-
|
|
17157
|
-
|
|
17158
|
-
|
|
17159
|
-
|
|
17160
|
-
? true
|
|
17161
|
-
: disableTailcatFlag
|
|
17162
|
-
? false
|
|
17163
|
-
: (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .isTruthyEnvFlag */ .ap)(process.env.VIBELET_TAILCAT) || tailcatConfig.load();
|
|
17164
|
-
if (explicitTailcatChoice) tailcatConfig.save(tailcatEnabled);
|
|
17165
|
-
if (tailcatEnabled) process.env.VIBELET_TAILCAT = '1';
|
|
17166
|
-
else delete process.env.VIBELET_TAILCAT;
|
|
17219
|
+
const preserveAccess = (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .consumeFlag */ .PC)(process.argv, 'preserve-access') || (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .readNpmConfigFlag */ .AW)('preserve-access');
|
|
17220
|
+
const { enabled: tailcatEnabled, explicitChoice: explicitTailcatChoice } = (0,_vibelet_tailcat_config_mjs__WEBPACK_IMPORTED_MODULE_9__/* .configureTailcatMode */ .SS)({
|
|
17221
|
+
readFlag: (name) => (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .consumeFlag */ .PC)(process.argv, name) || (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_18__/* .readNpmConfigFlag */ .AW)(name),
|
|
17222
|
+
fail,
|
|
17223
|
+
config: tailcatConfig,
|
|
17224
|
+
localMode: localFlag,
|
|
17225
|
+
cloudflareRequested: accessTarget?.kind === 'remote',
|
|
17226
|
+
});
|
|
17167
17227
|
const relayArg =
|
|
17168
17228
|
accessTarget?.kind === 'relay'
|
|
17169
17229
|
? accessTarget.relayUrl
|
|
@@ -17188,9 +17248,7 @@ async function main() {
|
|
|
17188
17248
|
command = parseCommandArg(process.argv);
|
|
17189
17249
|
const startCommand = isDaemonStartCommand(command);
|
|
17190
17250
|
const savedRelayUrl = relayConfig.load();
|
|
17191
|
-
|
|
17192
|
-
// now default to managed remote access unless another connection target wins.
|
|
17193
|
-
const shouldManageTunnel = (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .shouldManageQuickTunnel */ .gm)({
|
|
17251
|
+
const shouldManageTunnel = (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .shouldManageQuickTunnel */ .gm)({
|
|
17194
17252
|
startCommand,
|
|
17195
17253
|
localMode: localFlag,
|
|
17196
17254
|
relayArg,
|
|
@@ -17199,14 +17257,16 @@ async function main() {
|
|
|
17199
17257
|
savedRelayUrl,
|
|
17200
17258
|
force: forceFlag,
|
|
17201
17259
|
preserveAccess,
|
|
17260
|
+
tailcatEnabled,
|
|
17261
|
+
remoteRequested: (0,_vibelet_tailcat_config_mjs__WEBPACK_IMPORTED_MODULE_9__/* .shouldRequestCloudflare */ .OW)({ accessTarget, tailcatEnabled, explicitTailcatChoice }),
|
|
17202
17262
|
});
|
|
17203
17263
|
const cloudflaredProtocol = process.env.VIBELET_CLOUDFLARED_PROTOCOL?.trim() || 'http2';
|
|
17204
|
-
if (!['auto', 'quic', 'http2'].includes(cloudflaredProtocol)) {
|
|
17264
|
+
if (shouldManageTunnel && !['auto', 'quic', 'http2'].includes(cloudflaredProtocol)) {
|
|
17205
17265
|
fail(`Unsupported VIBELET_CLOUDFLARED_PROTOCOL: ${cloudflaredProtocol}. Use auto, quic, or http2.`);
|
|
17206
17266
|
}
|
|
17207
17267
|
|
|
17208
17268
|
if (
|
|
17209
|
-
(0,
|
|
17269
|
+
(0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .shouldRetireManagedQuickTunnel */ .Pg)({
|
|
17210
17270
|
startCommand,
|
|
17211
17271
|
manageQuickTunnel: shouldManageTunnel,
|
|
17212
17272
|
preserveAccess,
|
|
@@ -17249,7 +17309,12 @@ async function main() {
|
|
|
17249
17309
|
}
|
|
17250
17310
|
}
|
|
17251
17311
|
const shouldIgnoreSavedRelay =
|
|
17252
|
-
relayArg === null &&
|
|
17312
|
+
relayArg === null &&
|
|
17313
|
+
(localFlag ||
|
|
17314
|
+
Boolean(hostArg) ||
|
|
17315
|
+
Boolean(fallbackHostsArg) ||
|
|
17316
|
+
managedTunnelFailed ||
|
|
17317
|
+
(tailcatEnabled && !shouldManageTunnel && !preserveAccess));
|
|
17253
17318
|
const relayUrl = relayArg !== null ? relayArg : shouldIgnoreSavedRelay ? '' : relayConfig.load();
|
|
17254
17319
|
if (relayUrl) {
|
|
17255
17320
|
process.env.VIBELET_RELAY_URL = relayUrl;
|
|
@@ -17344,7 +17409,7 @@ async function main() {
|
|
|
17344
17409
|
if (command === 'reset') {
|
|
17345
17410
|
const healthyDaemon = await probeHealth(1_500);
|
|
17346
17411
|
const hasExplicitConfigOverrides =
|
|
17347
|
-
!(0,
|
|
17412
|
+
!(0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .doesHealthMatchRequestedConnectionConfig */ .nW)({
|
|
17348
17413
|
health: healthyDaemon,
|
|
17349
17414
|
relayUrl,
|
|
17350
17415
|
canonicalHost: hostArg || '',
|
|
@@ -17380,9 +17445,9 @@ async function main() {
|
|
|
17380
17445
|
}
|
|
17381
17446
|
|
|
17382
17447
|
let healthyDaemon = await probeHealth(1_500);
|
|
17383
|
-
let tailcatMismatch = (0,
|
|
17448
|
+
let tailcatMismatch = (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .isTailcatConfigurationMismatch */ .Zg)({ health: healthyDaemon, tailcatEnabled });
|
|
17384
17449
|
let hasExplicitConfigOverrides =
|
|
17385
|
-
!(0,
|
|
17450
|
+
!(0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .doesHealthMatchRequestedConnectionConfig */ .nW)({
|
|
17386
17451
|
health: healthyDaemon,
|
|
17387
17452
|
relayUrl,
|
|
17388
17453
|
canonicalHost: hostArg || '',
|
|
@@ -17408,7 +17473,7 @@ async function main() {
|
|
|
17408
17473
|
const refreshedHealth = await tryUpdateRunningDaemonRelay(relayUrl);
|
|
17409
17474
|
if (refreshedHealth) {
|
|
17410
17475
|
healthyDaemon = refreshedHealth;
|
|
17411
|
-
hasExplicitConfigOverrides = !(0,
|
|
17476
|
+
hasExplicitConfigOverrides = !(0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .doesHealthMatchRequestedConnectionConfig */ .nW)({
|
|
17412
17477
|
health: healthyDaemon,
|
|
17413
17478
|
relayUrl,
|
|
17414
17479
|
canonicalHost: '',
|
|
@@ -17416,10 +17481,10 @@ async function main() {
|
|
|
17416
17481
|
localMode: false,
|
|
17417
17482
|
tailcatEnabled,
|
|
17418
17483
|
});
|
|
17419
|
-
tailcatMismatch = (0,
|
|
17484
|
+
tailcatMismatch = (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .isTailcatConfigurationMismatch */ .Zg)({ health: healthyDaemon, tailcatEnabled });
|
|
17420
17485
|
}
|
|
17421
17486
|
}
|
|
17422
|
-
const existingHealth = (0,
|
|
17487
|
+
const existingHealth = (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .shouldReuseHealthyDaemon */ .ZN)({
|
|
17423
17488
|
command,
|
|
17424
17489
|
daemonHealthy: Boolean(healthyDaemon),
|
|
17425
17490
|
hasExplicitConfigOverrides,
|
|
@@ -17431,7 +17496,7 @@ async function main() {
|
|
|
17431
17496
|
if (existingHealth) {
|
|
17432
17497
|
const runningVersion = typeof existingHealth.version === 'string' ? existingHealth.version : '';
|
|
17433
17498
|
const activeSessions = typeof existingHealth.activeSessions === 'number' ? existingHealth.activeSessions : 0;
|
|
17434
|
-
const isOutdated = runningVersion && compareVersions(runningVersion, packageJson.version) < 0;
|
|
17499
|
+
const isOutdated = runningVersion && (0,_vibelet_value_validation_mjs__WEBPACK_IMPORTED_MODULE_12__/* .compareVersions */ .Z)(runningVersion, packageJson.version) < 0;
|
|
17435
17500
|
// Only force a driver switch when the user explicitly requested one (flag/env).
|
|
17436
17501
|
const requestedDriver = process.env.VIBE_CLAUDE_DRIVER ? normalizeDriver(process.env.VIBE_CLAUDE_DRIVER) : null;
|
|
17437
17502
|
const runningDriver = normalizeDriver(existingHealth.claudeDriverMode);
|