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.
@@ -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.221"}var a=l();process.stdout.write(`${a}
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
  `);
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, auto-enable remote access, and print a pairing QR code\n`,
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} --access=remote --force Force a new Cloudflare Tunnel URL\n`);
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 userspace Tailcat direct access (keeps existing fallbacks)\n`,
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 previously enabled Tailcat access\n`);
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(` # Remote access is on by default for start/reset/restart\n`);
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(` # Need a fresh Cloudflare Tunnel URL?\n`);
14352
- process.stdout.write(` npx ${packageJson.name} --access=remote --force\n\n`);
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(` # Tailcat runs inside Vibelet and does not change system VPN, DNS, or routes.\n\n`);
14362
- process.stdout.write(`Legacy aliases still work: --local, --relay, --host, --fallback-hosts, --remote, --tunnel.\n`);
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 */ S: () => (/* binding */ createTailcatConfigStore)
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
- return JSON.parse((0,node_fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync)(configPath, 'utf8')).enabled === true;
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 false;
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 _vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__ = __nccwpck_require__(6927);
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 _vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_13__ = __nccwpck_require__(1010);
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 _vibelet_stop_logic_mjs__WEBPACK_IMPORTED_MODULE_14__ = __nccwpck_require__(6274);
16085
- /* harmony import */ var _vibelet_help_mjs__WEBPACK_IMPORTED_MODULE_16__ = __nccwpck_require__(4162);
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 _vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__ = __nccwpck_require__(4);
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 _vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__ = __nccwpck_require__(7721);
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 */ .S)((0,node_path__WEBPACK_IMPORTED_MODULE_4__.join)(vibeletDir, 'tailcat.json'), vibeletDir);
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,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .shouldRefuseRuntimeDowngrade */ .Ne)({
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,_vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_13__/* .bootoutLaunchdService */ .B)({
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,_vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_13__/* .describeLaunchctlResult */ .N)(bootoutResult.result), (0,_vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_13__/* .describeLaunchctlResult */ .N)(result)].filter(Boolean).join('\n'),
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,_vibelet_launchd_mjs__WEBPACK_IMPORTED_MODULE_13__/* .describeLaunchctlResult */ .N)(bootoutResult.result));
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,_vibelet_stop_logic_mjs__WEBPACK_IMPORTED_MODULE_14__/* .stopDaemonWithHooks */ .v)({
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,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .doesHealthSupportTerminalControl */ .iX)(healthyDaemon);
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,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .doesHealthSupportTerminalControl */ .iX)(healthyDaemon)
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,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__/* .findUnsafeCleartextHosts */ .dE)({ hostArg, fallbackHostsArg });
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,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__/* .applyRelayUrlToPairingPayload */ .mp)(daemonPairingPayload, relayUrlOverride);
16990
- const connections = (0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__/* .normalizePairingConnections */ .No)(pairingPayload);
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,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__/* .selectWebUiConnectionTarget */ .SF)(connections);
16993
- const compactPairingPayload = (0,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__/* .createCompactPairingPayload */ .YP)(pairingPayload);
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,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__/* .formatConnectionSummary */ .uR)(preferredConnection)}\n`);
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,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__/* .formatConnectionSummary */ .uR)(target)}\n`);
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,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__/* .buildWebUiUrl */ .Gv)({ host: 'localhost', port }, compactPairingPayload)}\n`);
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,_vibelet_pairing_connections_mjs__WEBPACK_IMPORTED_MODULE_15__/* .buildWebUiUrl */ .Gv)(webUiConnection, compactPairingPayload)}\n`);
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,_vibelet_help_mjs__WEBPACK_IMPORTED_MODULE_16__/* .printCliHelp */ .n)({ packageJson, port });
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,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .parseNamedArg */ .nE)(process.argv, name, errorHint, fail);
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
- const accessTarget = (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .parseAccessTargetArg */ .tY)(process.argv, fail);
17132
- if (accessTarget && (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .hasLegacyAccessArgs */ .NT)(process.argv, process.env)) {
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
- (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .consumeFlag */ .PC)(process.argv, 'remote') ||
17140
- (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .consumeFlag */ .PC)(process.argv, 'tunnel') ||
17141
- (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .readNpmConfigFlag */ .AW)('remote') ||
17142
- (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .readNpmConfigFlag */ .AW)('tunnel');
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,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .consumeFlag */ .PC)(process.argv, 'local') ||
17148
- (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .readNpmConfigFlag */ .AW)('local') ||
17149
- (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .isTruthyEnvFlag */ .ap)(process.env.VIBELET_LOCAL_ONLY)));
17150
- const forceFlag = (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .consumeFlag */ .PC)(process.argv, 'force') || (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .readNpmConfigFlag */ .AW)('force');
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,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .consumeFlag */ .PC)(process.argv, 'preserve-access') || (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .readNpmConfigFlag */ .AW)('preserve-access');
17153
- const enableTailcatFlag = (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .consumeFlag */ .PC)(process.argv, 'tailcat') || (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .readNpmConfigFlag */ .AW)('tailcat');
17154
- const disableTailcatFlag = (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .consumeFlag */ .PC)(process.argv, 'no-tailcat') || (0,_vibelet_cli_args_mjs__WEBPACK_IMPORTED_MODULE_17__/* .readNpmConfigFlag */ .AW)('no-tailcat');
17155
- if (enableTailcatFlag && disableTailcatFlag) {
17156
- fail('Do not combine --tailcat with --no-tailcat.');
17157
- }
17158
- const explicitTailcatChoice = enableTailcatFlag || disableTailcatFlag;
17159
- const tailcatEnabled = enableTailcatFlag
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
- // --remote/--tunnel remain accepted for compatibility, but startup commands
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,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .shouldRetireManagedQuickTunnel */ .Pg)({
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 && (localFlag || Boolean(hostArg) || Boolean(fallbackHostsArg) || managedTunnelFailed);
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,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .doesHealthMatchRequestedConnectionConfig */ .nW)({
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,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .isTailcatConfigurationMismatch */ .Zg)({ health: healthyDaemon, tailcatEnabled });
17448
+ let tailcatMismatch = (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .isTailcatConfigurationMismatch */ .Zg)({ health: healthyDaemon, tailcatEnabled });
17384
17449
  let hasExplicitConfigOverrides =
17385
- !(0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .doesHealthMatchRequestedConnectionConfig */ .nW)({
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,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .doesHealthMatchRequestedConnectionConfig */ .nW)({
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,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .isTailcatConfigurationMismatch */ .Zg)({ health: healthyDaemon, tailcatEnabled });
17484
+ tailcatMismatch = (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_13__/* .isTailcatConfigurationMismatch */ .Zg)({ health: healthyDaemon, tailcatEnabled });
17420
17485
  }
17421
17486
  }
17422
- const existingHealth = (0,_vibelet_runtime_policy_mjs__WEBPACK_IMPORTED_MODULE_12__/* .shouldReuseHealthyDaemon */ .ZN)({
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibelet",
3
- "version": "1.2.221",
3
+ "version": "1.2.224",
4
4
  "description": "Cross-platform CLI for installing and running the Vibelet daemon",
5
5
  "homepage": "https://vibelet.icu",
6
6
  "files": [