very-happy-cli 0.2.109 → 0.2.110

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.
Files changed (33) hide show
  1. package/dist/{AcpBackend-Cc4Ilypg.cjs → AcpBackend-D0_wbTs6.cjs} +1 -1
  2. package/dist/{AcpBackend-DOzPxcth.mjs → AcpBackend-DzZR7TEv.mjs} +1 -1
  3. package/dist/{AcpSessionManager-CLfzatC_.cjs → AcpSessionManager-Dcj_iHw8.cjs} +1 -1
  4. package/dist/{AcpSessionManager-DDN-Yir4.mjs → AcpSessionManager-tWuFWeIF.mjs} +1 -1
  5. package/dist/{config-DiVKfYr0.cjs → config-CTCGilz_.cjs} +2 -2
  6. package/dist/{config-DnvzvFHR.mjs → config-CTyyVXHj.mjs} +2 -2
  7. package/dist/{index-DO-9Ep72.mjs → index-BW9kDx5m.mjs} +76 -16
  8. package/dist/{index-DaQIcHvY.mjs → index-Brhvj7p0.mjs} +5 -5
  9. package/dist/{index-dd2R8uSE.cjs → index-CvnMiYgh.cjs} +80 -20
  10. package/dist/{index-D2qU5HP4.cjs → index-D-adqB7g.cjs} +4 -4
  11. package/dist/{index-B2U15moC.cjs → index-DW78HyvK.cjs} +2 -2
  12. package/dist/{index-CGKxZKlo.mjs → index-jYltd-ZW.mjs} +2 -2
  13. package/dist/index.cjs +2 -2
  14. package/dist/index.mjs +2 -2
  15. package/dist/{installTerminalHooks-BDagPTQW.mjs → installTerminalHooks-CJyoR9jp.mjs} +2 -2
  16. package/dist/{installTerminalHooks-BoUmuYdq.cjs → installTerminalHooks-DhQ6k7YD.cjs} +2 -2
  17. package/dist/lib.cjs +1 -1
  18. package/dist/lib.mjs +1 -1
  19. package/dist/{mcp-Ck_y0mCB.mjs → mcp-BO9-sxMr.mjs} +2 -2
  20. package/dist/{mcp-Du1QEnIf.cjs → mcp-Dr1PegOw.cjs} +2 -2
  21. package/dist/{runGemini-D20S6Lc3.mjs → runGemini-CuzqF6Ys.mjs} +4 -4
  22. package/dist/{runGemini-DV2M0A_k.cjs → runGemini-D6Wwfk_0.cjs} +4 -4
  23. package/dist/{runOpenClaw-CuuXkfDE.mjs → runOpenClaw-B5pkmSTb.mjs} +3 -3
  24. package/dist/{runOpenClaw-C1Q2zl--.cjs → runOpenClaw-BYmlS-4Q.cjs} +3 -3
  25. package/dist/{send-yUiBqHHL.mjs → send-Btz1IZ9U.mjs} +2 -2
  26. package/dist/{send-CtgnnJic.cjs → send-CuajooZC.cjs} +2 -2
  27. package/dist/{sessions-CbbZhOTy.cjs → sessions-CVUBS3LG.cjs} +2 -2
  28. package/dist/{sessions-BsaCq0Do.mjs → sessions-DDwCphTQ.mjs} +2 -2
  29. package/dist/{spawn-CTO_hR8v.cjs → spawn-CwS8CPbr.cjs} +2 -2
  30. package/dist/{spawn-BKBY9P3J.mjs → spawn-DcA80_VN.mjs} +2 -2
  31. package/dist/{types-Cg8zzX_f.cjs → types--t4zLibT.cjs} +18 -10
  32. package/dist/{types-BKCvo4Cv.mjs → types-BdO0jg7G.mjs} +17 -9
  33. package/package.json +7 -7
@@ -3,7 +3,7 @@
3
3
  var node_child_process = require('node:child_process');
4
4
  var sdk = require('@agentclientprotocol/sdk');
5
5
  var node_crypto = require('node:crypto');
6
- var persistence = require('./types-Cg8zzX_f.cjs');
6
+ var persistence = require('./types--t4zLibT.cjs');
7
7
 
8
8
  const DEFAULT_TIMEOUTS = {
9
9
  /** Default initialization timeout: 60 seconds */
@@ -1,7 +1,7 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  import { ndJsonStream, ClientSideConnection } from '@agentclientprotocol/sdk';
3
3
  import { randomUUID } from 'node:crypto';
4
- import { l as logger, d as contentLogMetadata, e as errorLogMetadata, f as packageJson, g as delay } from './types-BKCvo4Cv.mjs';
4
+ import { l as logger, d as contentLogMetadata, e as errorLogMetadata, f as packageJson, g as delay } from './types-BdO0jg7G.mjs';
5
5
 
6
6
  const DEFAULT_TIMEOUTS = {
7
7
  /** Default initialization timeout: 60 seconds */
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var cuid2 = require('@paralleldrive/cuid2');
4
- var persistence = require('./types-Cg8zzX_f.cjs');
4
+ var persistence = require('./types--t4zLibT.cjs');
5
5
 
6
6
  function turnOptions(turnId, time) {
7
7
  return turnId ? { turn: turnId, time } : { time };
@@ -1,5 +1,5 @@
1
1
  import { createId } from '@paralleldrive/cuid2';
2
- import { b as createEnvelope } from './types-BKCvo4Cv.mjs';
2
+ import { b as createEnvelope } from './types-BdO0jg7G.mjs';
3
3
 
4
4
  function turnOptions(turnId, time) {
5
5
  return turnId ? { turn: turnId, time } : { time };
@@ -4,8 +4,8 @@ var fs = require('fs');
4
4
  var path = require('path');
5
5
  var os = require('os');
6
6
  var child_process = require('child_process');
7
- var persistence = require('./types-Cg8zzX_f.cjs');
8
- var index = require('./index-dd2R8uSE.cjs');
7
+ var persistence = require('./types--t4zLibT.cjs');
8
+ var index = require('./index-CvnMiYgh.cjs');
9
9
  require('axios');
10
10
  require('chalk');
11
11
  require('node:util');
@@ -2,8 +2,8 @@ import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
2
2
  import { join } from 'path';
3
3
  import { homedir } from 'os';
4
4
  import { execSync } from 'child_process';
5
- import { l as logger } from './types-BKCvo4Cv.mjs';
6
- import { f as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-DO-9Ep72.mjs';
5
+ import { l as logger } from './types-BdO0jg7G.mjs';
6
+ import { f as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-BW9kDx5m.mjs';
7
7
  import 'axios';
8
8
  import 'chalk';
9
9
  import 'node:util';
@@ -1,7 +1,7 @@
1
1
  import{createRequire as _pkgrollCR}from"node:module";const require=_pkgrollCR(import.meta.url);import chalk from 'chalk';
2
2
  import os, { homedir, userInfo } from 'node:os';
3
3
  import { randomUUID, randomBytes, createHash as createHash$1, timingSafeEqual } from 'node:crypto';
4
- import { o as readDaemonState, l as logger, c as configuration, q as clearDaemonState, s as getProjectPath, p as projectPath, t as initializeSandbox, u as wrapCommand, d as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, g as delay, v as AsyncLock, x as ensurePrivateDirectory, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, y as hardenPrivateFile, f as packageJson, j as readSettings, z as readCredentials, B as credentialRelayProblem, C as deriveLocalCliUpdateSummary, k as encodeBase64, D as updateSettings, E as encodeBase64Url, F as decodeBase64, G as writeCredentialsLegacy, H as writeCredentialsDataKey, J as readCredentialsForConfiguredRelay, K as encrypt, r as readPersistedSessions, L as isClaudeSessionId, N as getLocalHappyAgentCredentialPath, O as readLocalHappyAgentCredentials, P as decryptWithDataKey, Q as decryptLegacy, S as extractCompleteLines, T as decideBackfill, U as parseTerminalHookPayload, V as tmuxArgs, W as scrubTmuxClientEnv, X as decideMirrorBinding, Y as MIRROR_BACKFILL_LINES_DEFAULT, Z as persistSession, _ as mirrorLineKey, $ as mirrorLocalId, w as writePrivateFileSync, a0 as detectResumeSupport, a1 as detectCLIAvailability, a2 as acquireDaemonLock, a3 as summarizeSpawnSessionForLog, a4 as deletePersistedSessions, a5 as shellescape, a6 as decrypt, a7 as writeDaemonState, A as ApiClient, a8 as writeSettings, a9 as fetchCliUpdateState, aa as resolveCliUpdateCheckInterval, ab as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, ac as releaseDaemonLock, i as isValidSessionId, ad as listVhTerminals, ae as isValidTerminalId, af as readVhTerminal, ag as sendToVhTerminal, ah as TITLE_PROMPT_PREFIX, ai as BOARD_ANALYZER_PROMPT_PREFIX, h as connectionState, aj as startOfflineReconnection, ak as clearCredentials, al as clearMachineId, m as ensurePrivateDirectorySync, am as SandboxConfigSchema, b as createEnvelope, an as CodexAppServerClient, ao as getLatestDaemonLog } from './types-BKCvo4Cv.mjs';
4
+ import { o as readDaemonState, l as logger, c as configuration, q as clearDaemonState, s as getProjectPath, p as projectPath, t as initializeSandbox, u as wrapCommand, d as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, g as delay, v as AsyncLock, x as ensurePrivateDirectory, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, y as hardenPrivateFile, f as packageJson, j as readSettings, z as readCredentials, B as credentialRelayProblem, C as deriveLocalCliUpdateSummary, k as encodeBase64, D as updateSettings, E as encodeBase64Url, F as decodeBase64, G as writeCredentialsLegacy, H as writeCredentialsDataKey, J as readCredentialsForConfiguredRelay, K as encrypt, r as readPersistedSessions, L as isClaudeSessionId, N as getLocalHappyAgentCredentialPath, O as readLocalHappyAgentCredentials, P as decryptWithDataKey, Q as decryptLegacy, S as extractCompleteLines, T as decideBackfill, U as parseTerminalHookPayload, V as tmuxArgs, W as scrubTmuxClientEnv, X as decideMirrorBinding, Y as MIRROR_BACKFILL_LINES_DEFAULT, Z as persistSession, _ as mirrorLineKey, $ as mirrorLocalId, w as writePrivateFileSync, a0 as detectResumeSupport, a1 as detectCLIAvailability, a2 as acquireDaemonLock, a3 as summarizeSpawnSessionForLog, a4 as deletePersistedSessions, a5 as shellescape, a6 as decrypt, a7 as writeDaemonState, A as ApiClient, a8 as writeSettings, a9 as fetchCliUpdateState, aa as resolveCliUpdateCheckInterval, ab as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, ac as releaseDaemonLock, i as isValidSessionId, ad as listVhTerminals, ae as isValidTerminalId, af as readVhTerminal, ag as sendToVhTerminal, ah as TITLE_PROMPT_PREFIX, ai as BOARD_ANALYZER_PROMPT_PREFIX, h as connectionState, aj as startOfflineReconnection, ak as clearCredentials, al as clearMachineId, m as ensurePrivateDirectorySync, am as SandboxConfigSchema, b as createEnvelope, an as CodexAppServerClient, ao as getLatestDaemonLog } from './types-BdO0jg7G.mjs';
5
5
  import spawn$1, { spawn } from 'cross-spawn';
6
6
  import path, { join, resolve, basename, delimiter, isAbsolute, normalize, sep, dirname } from 'node:path';
7
7
  import { createInterface } from 'node:readline';
@@ -7423,12 +7423,38 @@ function createMirrorScanner(opts) {
7423
7423
  };
7424
7424
  }
7425
7425
 
7426
+ const PENDING_CREATE_BACKOFF_MS = [1e4, 3e4, 6e4, 12e4, 3e5];
7427
+ const PENDING_CREATE_MAX_AGE_MS = 30 * 6e4;
7428
+ function backoffForAttempt(attempts) {
7429
+ const index = Math.min(Math.max(attempts, 1), PENDING_CREATE_BACKOFF_MS.length) - 1;
7430
+ return PENDING_CREATE_BACKOFF_MS[index];
7431
+ }
7432
+ function pendingCreateAfterFailure(previous, event, now) {
7433
+ const sameConversation = previous?.event.claudeSessionId === event.claudeSessionId;
7434
+ const attempts = sameConversation ? previous.attempts + 1 : 1;
7435
+ return {
7436
+ event,
7437
+ attempts,
7438
+ firstFailedAt: sameConversation ? previous.firstFailedAt : now,
7439
+ nextAttemptAt: now + backoffForAttempt(attempts)
7440
+ };
7441
+ }
7442
+ function planPendingCreate(pending, now) {
7443
+ if (now - pending.firstFailedAt >= PENDING_CREATE_MAX_AGE_MS) return "drop";
7444
+ return now >= pending.nextAttemptAt ? "retry" : "wait";
7445
+ }
7446
+ function pendingCreateSupersededBy(pending, event) {
7447
+ if (event.event === "SessionStart") return true;
7448
+ return pending.event.claudeSessionId === event.claudeSessionId;
7449
+ }
7450
+
7426
7451
  const TERMINAL_MIRROR_FLAVOR = "terminal-mirror";
7427
7452
  const RECONCILE_HYSTERESIS_MS = 2e4;
7428
7453
  function createMirrorManager(deps) {
7429
7454
  const backfillLines = deps.backfillLines ?? MIRROR_BACKFILL_LINES_DEFAULT;
7430
7455
  const bindings = /* @__PURE__ */ new Map();
7431
7456
  const lastEndedAt = /* @__PURE__ */ new Map();
7457
+ const pendingCreates = /* @__PURE__ */ new Map();
7432
7458
  let chain = Promise.resolve();
7433
7459
  const reactivate = async (binding) => {
7434
7460
  try {
@@ -7588,6 +7614,14 @@ function createMirrorManager(deps) {
7588
7614
  logger.debug(`[MIRROR] reconcile reactivated (in place) terminal ${binding.terminalId}`);
7589
7615
  deps.onBindingsChanged?.();
7590
7616
  };
7617
+ const parkFailedCreate = (event, reason) => {
7618
+ const pending = pendingCreateAfterFailure(pendingCreates.get(event.terminalId), event, Date.now());
7619
+ pendingCreates.set(event.terminalId, pending);
7620
+ logger.debug(
7621
+ `[MIRROR] mirror bind failed for terminal ${event.terminalId} (attempt ${pending.attempts}, retrying):`,
7622
+ reason
7623
+ );
7624
+ };
7591
7625
  const createBinding = async (event, replaces) => {
7592
7626
  if (replaces) {
7593
7627
  await teardownBinding(replaces, "superseded by a fresh conversation");
@@ -7609,11 +7643,18 @@ function createMirrorManager(deps) {
7609
7643
  terminalId: event.terminalId,
7610
7644
  claudeSessionId: event.claudeSessionId
7611
7645
  };
7612
- const response = await deps.api.getOrCreateSession({ tag: randomUUID(), metadata, state: {} });
7646
+ let response = null;
7647
+ try {
7648
+ response = await deps.api.getOrCreateSession({ tag: randomUUID(), metadata, state: {} });
7649
+ } catch (error) {
7650
+ parkFailedCreate(event, error);
7651
+ return;
7652
+ }
7613
7653
  if (!response) {
7614
- logger.debug(`[MIRROR] server unreachable \u2014 dropping mirror bind for terminal ${event.terminalId}`);
7654
+ parkFailedCreate(event, "server unreachable");
7615
7655
  return;
7616
7656
  }
7657
+ pendingCreates.delete(event.terminalId);
7617
7658
  const client = deps.api.sessionSyncClient(response);
7618
7659
  client.skipExistingMessages();
7619
7660
  const binding = {
@@ -7669,6 +7710,8 @@ function createMirrorManager(deps) {
7669
7710
  logger.debug(`[MIRROR] terminal ${binding.terminalId} mirror continues as claude ${event.claudeSessionId}`);
7670
7711
  };
7671
7712
  const handleEvent = async (event) => {
7713
+ const parked = pendingCreates.get(event.terminalId);
7714
+ if (parked && pendingCreateSupersededBy(parked, event)) pendingCreates.delete(event.terminalId);
7672
7715
  const binding = bindings.get(event.terminalId) ?? null;
7673
7716
  const decision = decideMirrorBinding(
7674
7717
  event,
@@ -7701,6 +7744,7 @@ function createMirrorManager(deps) {
7701
7744
  });
7702
7745
  },
7703
7746
  onTerminalClosed(terminalId) {
7747
+ pendingCreates.delete(terminalId);
7704
7748
  const binding = bindings.get(terminalId);
7705
7749
  if (!binding) return;
7706
7750
  chain = chain.then(() => teardownBinding(binding, "terminal closed")).catch((error) => {
@@ -7724,6 +7768,7 @@ function createMirrorManager(deps) {
7724
7768
  for (const item of list) {
7725
7769
  const binding = bindings.get(item.id) ?? null;
7726
7770
  if (item.agentState === "shell") {
7771
+ pendingCreates.delete(item.id);
7727
7772
  if (binding && binding.status === "active") {
7728
7773
  chain = chain.then(() => {
7729
7774
  const b = bindings.get(item.id);
@@ -7747,6 +7792,21 @@ function createMirrorManager(deps) {
7747
7792
  return b && b.status === "ended" ? reactivateInPlace(b) : void 0;
7748
7793
  }).catch((e) => logger.debug(`[MIRROR] reconcile in-place reactivate failed for ${item.id}:`, e));
7749
7794
  } else if (!binding) {
7795
+ const pending = pendingCreates.get(item.id);
7796
+ if (pending) {
7797
+ const decision = planPendingCreate(pending, now);
7798
+ if (decision === "drop") {
7799
+ pendingCreates.delete(item.id);
7800
+ logger.debug(`[MIRROR] giving up on the parked mirror bind for terminal ${item.id}`);
7801
+ } else if (decision === "retry") {
7802
+ chain = chain.then(() => {
7803
+ const still = pendingCreates.get(item.id);
7804
+ if (!still || still !== pending || bindings.has(item.id)) return void 0;
7805
+ return createBinding(still.event);
7806
+ }).catch((e) => logger.debug(`[MIRROR] reconcile create retry failed for ${item.id}:`, e));
7807
+ }
7808
+ continue;
7809
+ }
7750
7810
  persisted ??= readPersistedSessions();
7751
7811
  const p = persisted;
7752
7812
  chain = chain.then(() => {
@@ -10308,7 +10368,7 @@ function registerSideQuestionHandler(rpc, deps) {
10308
10368
  const retainMs = deps.retainMs ?? SIDE_QUESTION_RETAIN_MS;
10309
10369
  const maxRunMs = deps.maxRunMs ?? SIDE_QUESTION_MAX_RUN_MS;
10310
10370
  const run = deps.run ?? (async (input) => {
10311
- const { query } = await import('./index-CGKxZKlo.mjs');
10371
+ const { query } = await import('./index-jYltd-ZW.mjs');
10312
10372
  return runSideQuestion(query, input);
10313
10373
  });
10314
10374
  const slots = /* @__PURE__ */ new Map();
@@ -15238,7 +15298,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15238
15298
  process.exit(0);
15239
15299
  } else if (subcommand === "install-terminal-hooks") {
15240
15300
  try {
15241
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-BDagPTQW.mjs');
15301
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-CJyoR9jp.mjs');
15242
15302
  const command = parseTerminalHooksArgs(args.slice(1));
15243
15303
  if (command.action === "help") {
15244
15304
  console.log(TERMINAL_HOOKS_HELP);
@@ -15255,7 +15315,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15255
15315
  }
15256
15316
  } else if (subcommand === "spawn") {
15257
15317
  try {
15258
- const { handleSpawnCommand } = await import('./spawn-BKBY9P3J.mjs');
15318
+ const { handleSpawnCommand } = await import('./spawn-DcA80_VN.mjs');
15259
15319
  await handleSpawnCommand(args.slice(1));
15260
15320
  } catch (error) {
15261
15321
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -15267,7 +15327,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15267
15327
  return;
15268
15328
  } else if (subcommand === "sessions") {
15269
15329
  try {
15270
- const { handleSessionsCommand } = await import('./sessions-BsaCq0Do.mjs');
15330
+ const { handleSessionsCommand } = await import('./sessions-DDwCphTQ.mjs');
15271
15331
  await handleSessionsCommand(args.slice(1));
15272
15332
  } catch (error) {
15273
15333
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -15279,7 +15339,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15279
15339
  return;
15280
15340
  } else if (subcommand === "send") {
15281
15341
  try {
15282
- const { handleSendCommand } = await import('./send-yUiBqHHL.mjs');
15342
+ const { handleSendCommand } = await import('./send-Btz1IZ9U.mjs');
15283
15343
  await handleSendCommand(args.slice(1));
15284
15344
  } catch (error) {
15285
15345
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -15385,9 +15445,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15385
15445
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
15386
15446
  const projectId = args[3];
15387
15447
  try {
15388
- const { saveGoogleCloudProjectToConfig } = await import('./config-DnvzvFHR.mjs');
15389
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-BKCvo4Cv.mjs').then(function (n) { return n.ap; });
15390
- const { ApiClient: ApiClient2 } = await import('./types-BKCvo4Cv.mjs').then(function (n) { return n.aq; });
15448
+ const { saveGoogleCloudProjectToConfig } = await import('./config-CTyyVXHj.mjs');
15449
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-BdO0jg7G.mjs').then(function (n) { return n.ap; });
15450
+ const { ApiClient: ApiClient2 } = await import('./types-BdO0jg7G.mjs').then(function (n) { return n.aq; });
15391
15451
  let userEmail = void 0;
15392
15452
  try {
15393
15453
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -15418,7 +15478,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15418
15478
  }
15419
15479
  if (geminiSubcommand === "project" && args[2] === "get") {
15420
15480
  try {
15421
- const { readGeminiLocalConfig } = await import('./config-DnvzvFHR.mjs');
15481
+ const { readGeminiLocalConfig } = await import('./config-CTyyVXHj.mjs');
15422
15482
  const config = readGeminiLocalConfig();
15423
15483
  if (config.googleCloudProject) {
15424
15484
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -15458,7 +15518,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15458
15518
  process.exit(0);
15459
15519
  }
15460
15520
  try {
15461
- const { runGemini } = await import('./runGemini-D20S6Lc3.mjs');
15521
+ const { runGemini } = await import('./runGemini-CuzqF6Ys.mjs');
15462
15522
  let startedBy = void 0;
15463
15523
  for (let i = 1; i < args.length; i++) {
15464
15524
  if (args[i] === "--started-by") {
@@ -15480,7 +15540,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15480
15540
  return;
15481
15541
  } else if (subcommand === "acp") {
15482
15542
  try {
15483
- const { runAcp, resolveAcpAgentConfig } = await import('./index-DaQIcHvY.mjs');
15543
+ const { runAcp, resolveAcpAgentConfig } = await import('./index-Brhvj7p0.mjs');
15484
15544
  let startedBy = void 0;
15485
15545
  let verbose = false;
15486
15546
  const acpArgs = [];
@@ -15520,7 +15580,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15520
15580
  return;
15521
15581
  } else if (subcommand === "openclaw") {
15522
15582
  try {
15523
- const { runOpenClaw } = await import('./runOpenClaw-CuuXkfDE.mjs');
15583
+ const { runOpenClaw } = await import('./runOpenClaw-B5pkmSTb.mjs');
15524
15584
  let startedBy = void 0;
15525
15585
  let verbose = false;
15526
15586
  let gatewayUrl;
@@ -15571,7 +15631,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15571
15631
  return;
15572
15632
  } else if (subcommand === "mcp" && args.length === 1) {
15573
15633
  try {
15574
- const { handleMcpCommand } = await import('./mcp-Ck_y0mCB.mjs');
15634
+ const { handleMcpCommand } = await import('./mcp-BO9-sxMr.mjs');
15575
15635
  await handleMcpCommand();
15576
15636
  } catch (error) {
15577
15637
  process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
@@ -1,10 +1,10 @@
1
- import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-DOzPxcth.mjs';
2
- export { a as DEFAULT_IDLE_TIMEOUT_MS, b as DEFAULT_TOOL_CALL_TIMEOUT_MS, e as extractErrorDetail, f as formatDuration, c as formatDurationMinutes, h as handleAgentMessageChunk, d as handleAgentThoughtChunk, g as handleLegacyMessageChunk, i as handlePlanUpdate, j as handleThinkingUpdate, k as handleToolCall, l as handleToolCallUpdate, p as parseArgsFromContent } from './AcpBackend-DOzPxcth.mjs';
3
- import { h as connectionState, A as ApiClient, j as readSettings, k as encodeBase64, l as logger, p as projectPath } from './types-BKCvo4Cv.mjs';
4
- import { A as AcpSessionManager } from './AcpSessionManager-DDN-Yir4.mjs';
1
+ import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-DzZR7TEv.mjs';
2
+ export { a as DEFAULT_IDLE_TIMEOUT_MS, b as DEFAULT_TOOL_CALL_TIMEOUT_MS, e as extractErrorDetail, f as formatDuration, c as formatDurationMinutes, h as handleAgentMessageChunk, d as handleAgentThoughtChunk, g as handleLegacyMessageChunk, i as handlePlanUpdate, j as handleThinkingUpdate, k as handleToolCall, l as handleToolCallUpdate, p as parseArgsFromContent } from './AcpBackend-DzZR7TEv.mjs';
3
+ import { h as connectionState, A as ApiClient, j as readSettings, k as encodeBase64, l as logger, p as projectPath } from './types-BdO0jg7G.mjs';
4
+ import { A as AcpSessionManager } from './AcpSessionManager-tWuFWeIF.mjs';
5
5
  import { randomUUID } from 'node:crypto';
6
6
  import { join } from 'node:path';
7
- import { g as initialMachineMetadata, h as createSessionMetadata, j as setupOfflineReconnection, n as notifyDaemonSessionStarted, k as MessageQueue2, m as hashObject, o as startHappyServer, u as registerKillSessionHandler, B as BasePermissionHandler } from './index-DO-9Ep72.mjs';
7
+ import { g as initialMachineMetadata, h as createSessionMetadata, j as setupOfflineReconnection, n as notifyDaemonSessionStarted, k as MessageQueue2, m as hashObject, o as startHappyServer, u as registerKillSessionHandler, B as BasePermissionHandler } from './index-BW9kDx5m.mjs';
8
8
  import 'node:child_process';
9
9
  import '@agentclientprotocol/sdk';
10
10
  import 'axios';
@@ -3,7 +3,7 @@
3
3
  var chalk = require('chalk');
4
4
  var os = require('node:os');
5
5
  var node_crypto = require('node:crypto');
6
- var persistence = require('./types-Cg8zzX_f.cjs');
6
+ var persistence = require('./types--t4zLibT.cjs');
7
7
  var spawn = require('cross-spawn');
8
8
  var path = require('node:path');
9
9
  var node_readline = require('node:readline');
@@ -6943,7 +6943,7 @@ function parseJsonObject(text) {
6943
6943
  return null;
6944
6944
  }
6945
6945
  }
6946
- function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-dd2R8uSE.cjs', document.baseURI).href))).resolve(s)) {
6946
+ function resolveSdkClaudeBinary(platform = process.platform, arch = process.arch, resolver = (s) => node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CvnMiYgh.cjs', document.baseURI).href))).resolve(s)) {
6947
6947
  const platformArch = `${platform}-${arch}`;
6948
6948
  const candidates = [
6949
6949
  `@anthropic-ai/claude-agent-sdk-${platformArch}/claude`,
@@ -7445,12 +7445,38 @@ function createMirrorScanner(opts) {
7445
7445
  };
7446
7446
  }
7447
7447
 
7448
+ const PENDING_CREATE_BACKOFF_MS = [1e4, 3e4, 6e4, 12e4, 3e5];
7449
+ const PENDING_CREATE_MAX_AGE_MS = 30 * 6e4;
7450
+ function backoffForAttempt(attempts) {
7451
+ const index = Math.min(Math.max(attempts, 1), PENDING_CREATE_BACKOFF_MS.length) - 1;
7452
+ return PENDING_CREATE_BACKOFF_MS[index];
7453
+ }
7454
+ function pendingCreateAfterFailure(previous, event, now) {
7455
+ const sameConversation = previous?.event.claudeSessionId === event.claudeSessionId;
7456
+ const attempts = sameConversation ? previous.attempts + 1 : 1;
7457
+ return {
7458
+ event,
7459
+ attempts,
7460
+ firstFailedAt: sameConversation ? previous.firstFailedAt : now,
7461
+ nextAttemptAt: now + backoffForAttempt(attempts)
7462
+ };
7463
+ }
7464
+ function planPendingCreate(pending, now) {
7465
+ if (now - pending.firstFailedAt >= PENDING_CREATE_MAX_AGE_MS) return "drop";
7466
+ return now >= pending.nextAttemptAt ? "retry" : "wait";
7467
+ }
7468
+ function pendingCreateSupersededBy(pending, event) {
7469
+ if (event.event === "SessionStart") return true;
7470
+ return pending.event.claudeSessionId === event.claudeSessionId;
7471
+ }
7472
+
7448
7473
  const TERMINAL_MIRROR_FLAVOR = "terminal-mirror";
7449
7474
  const RECONCILE_HYSTERESIS_MS = 2e4;
7450
7475
  function createMirrorManager(deps) {
7451
7476
  const backfillLines = deps.backfillLines ?? persistence.MIRROR_BACKFILL_LINES_DEFAULT;
7452
7477
  const bindings = /* @__PURE__ */ new Map();
7453
7478
  const lastEndedAt = /* @__PURE__ */ new Map();
7479
+ const pendingCreates = /* @__PURE__ */ new Map();
7454
7480
  let chain = Promise.resolve();
7455
7481
  const reactivate = async (binding) => {
7456
7482
  try {
@@ -7610,6 +7636,14 @@ function createMirrorManager(deps) {
7610
7636
  persistence.logger.debug(`[MIRROR] reconcile reactivated (in place) terminal ${binding.terminalId}`);
7611
7637
  deps.onBindingsChanged?.();
7612
7638
  };
7639
+ const parkFailedCreate = (event, reason) => {
7640
+ const pending = pendingCreateAfterFailure(pendingCreates.get(event.terminalId), event, Date.now());
7641
+ pendingCreates.set(event.terminalId, pending);
7642
+ persistence.logger.debug(
7643
+ `[MIRROR] mirror bind failed for terminal ${event.terminalId} (attempt ${pending.attempts}, retrying):`,
7644
+ reason
7645
+ );
7646
+ };
7613
7647
  const createBinding = async (event, replaces) => {
7614
7648
  if (replaces) {
7615
7649
  await teardownBinding(replaces, "superseded by a fresh conversation");
@@ -7631,11 +7665,18 @@ function createMirrorManager(deps) {
7631
7665
  terminalId: event.terminalId,
7632
7666
  claudeSessionId: event.claudeSessionId
7633
7667
  };
7634
- const response = await deps.api.getOrCreateSession({ tag: node_crypto.randomUUID(), metadata, state: {} });
7668
+ let response = null;
7669
+ try {
7670
+ response = await deps.api.getOrCreateSession({ tag: node_crypto.randomUUID(), metadata, state: {} });
7671
+ } catch (error) {
7672
+ parkFailedCreate(event, error);
7673
+ return;
7674
+ }
7635
7675
  if (!response) {
7636
- persistence.logger.debug(`[MIRROR] server unreachable \u2014 dropping mirror bind for terminal ${event.terminalId}`);
7676
+ parkFailedCreate(event, "server unreachable");
7637
7677
  return;
7638
7678
  }
7679
+ pendingCreates.delete(event.terminalId);
7639
7680
  const client = deps.api.sessionSyncClient(response);
7640
7681
  client.skipExistingMessages();
7641
7682
  const binding = {
@@ -7691,6 +7732,8 @@ function createMirrorManager(deps) {
7691
7732
  persistence.logger.debug(`[MIRROR] terminal ${binding.terminalId} mirror continues as claude ${event.claudeSessionId}`);
7692
7733
  };
7693
7734
  const handleEvent = async (event) => {
7735
+ const parked = pendingCreates.get(event.terminalId);
7736
+ if (parked && pendingCreateSupersededBy(parked, event)) pendingCreates.delete(event.terminalId);
7694
7737
  const binding = bindings.get(event.terminalId) ?? null;
7695
7738
  const decision = persistence.decideMirrorBinding(
7696
7739
  event,
@@ -7723,6 +7766,7 @@ function createMirrorManager(deps) {
7723
7766
  });
7724
7767
  },
7725
7768
  onTerminalClosed(terminalId) {
7769
+ pendingCreates.delete(terminalId);
7726
7770
  const binding = bindings.get(terminalId);
7727
7771
  if (!binding) return;
7728
7772
  chain = chain.then(() => teardownBinding(binding, "terminal closed")).catch((error) => {
@@ -7746,6 +7790,7 @@ function createMirrorManager(deps) {
7746
7790
  for (const item of list) {
7747
7791
  const binding = bindings.get(item.id) ?? null;
7748
7792
  if (item.agentState === "shell") {
7793
+ pendingCreates.delete(item.id);
7749
7794
  if (binding && binding.status === "active") {
7750
7795
  chain = chain.then(() => {
7751
7796
  const b = bindings.get(item.id);
@@ -7769,6 +7814,21 @@ function createMirrorManager(deps) {
7769
7814
  return b && b.status === "ended" ? reactivateInPlace(b) : void 0;
7770
7815
  }).catch((e) => persistence.logger.debug(`[MIRROR] reconcile in-place reactivate failed for ${item.id}:`, e));
7771
7816
  } else if (!binding) {
7817
+ const pending = pendingCreates.get(item.id);
7818
+ if (pending) {
7819
+ const decision = planPendingCreate(pending, now);
7820
+ if (decision === "drop") {
7821
+ pendingCreates.delete(item.id);
7822
+ persistence.logger.debug(`[MIRROR] giving up on the parked mirror bind for terminal ${item.id}`);
7823
+ } else if (decision === "retry") {
7824
+ chain = chain.then(() => {
7825
+ const still = pendingCreates.get(item.id);
7826
+ if (!still || still !== pending || bindings.has(item.id)) return void 0;
7827
+ return createBinding(still.event);
7828
+ }).catch((e) => persistence.logger.debug(`[MIRROR] reconcile create retry failed for ${item.id}:`, e));
7829
+ }
7830
+ continue;
7831
+ }
7772
7832
  persisted ??= persistence.readPersistedSessions();
7773
7833
  const p = persisted;
7774
7834
  chain = chain.then(() => {
@@ -10330,7 +10390,7 @@ function registerSideQuestionHandler(rpc, deps) {
10330
10390
  const retainMs = deps.retainMs ?? SIDE_QUESTION_RETAIN_MS;
10331
10391
  const maxRunMs = deps.maxRunMs ?? SIDE_QUESTION_MAX_RUN_MS;
10332
10392
  const run = deps.run ?? (async (input) => {
10333
- const { query } = await Promise.resolve().then(function () { return require('./index-B2U15moC.cjs'); });
10393
+ const { query } = await Promise.resolve().then(function () { return require('./index-DW78HyvK.cjs'); });
10334
10394
  return runSideQuestion(query, input);
10335
10395
  });
10336
10396
  const slots = /* @__PURE__ */ new Map();
@@ -10432,7 +10492,7 @@ const MAX_TITLE_CHARS = 60;
10432
10492
  const GENERATION_TIMEOUT_MS = 3e4;
10433
10493
  function resolveClaudeBinary() {
10434
10494
  try {
10435
- const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-dd2R8uSE.cjs', document.baseURI).href)));
10495
+ const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CvnMiYgh.cjs', document.baseURI).href)));
10436
10496
  const utilsPath = path.resolve(path.join(persistence.projectPath(), "scripts", "claude_version_utils.cjs"));
10437
10497
  const { getClaudeCliPath } = require$1(utilsPath);
10438
10498
  const path$1 = getClaudeCliPath();
@@ -12634,9 +12694,9 @@ function resolveLocalSignupBootstrap(configuredMode, configuredInviteCodes, gene
12634
12694
  };
12635
12695
  }
12636
12696
 
12637
- const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-dd2R8uSE.cjs', document.baseURI).href)));
12697
+ const __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CvnMiYgh.cjs', document.baseURI).href)));
12638
12698
  const __dirname$1 = path.dirname(__filename$1);
12639
- const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-dd2R8uSE.cjs', document.baseURI).href)));
12699
+ const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-CvnMiYgh.cjs', document.baseURI).href)));
12640
12700
  const PRISMA_QUERY_ENGINE_FILES = {
12641
12701
  "arm64-darwin": "libquery_engine-darwin-arm64.dylib.node",
12642
12702
  "x64-darwin": "libquery_engine-darwin.dylib.node",
@@ -15260,7 +15320,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15260
15320
  process.exit(0);
15261
15321
  } else if (subcommand === "install-terminal-hooks") {
15262
15322
  try {
15263
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-BoUmuYdq.cjs'); });
15323
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-DhQ6k7YD.cjs'); });
15264
15324
  const command = parseTerminalHooksArgs(args.slice(1));
15265
15325
  if (command.action === "help") {
15266
15326
  console.log(TERMINAL_HOOKS_HELP);
@@ -15277,7 +15337,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15277
15337
  }
15278
15338
  } else if (subcommand === "spawn") {
15279
15339
  try {
15280
- const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-CTO_hR8v.cjs'); });
15340
+ const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-CwS8CPbr.cjs'); });
15281
15341
  await handleSpawnCommand(args.slice(1));
15282
15342
  } catch (error) {
15283
15343
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -15289,7 +15349,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15289
15349
  return;
15290
15350
  } else if (subcommand === "sessions") {
15291
15351
  try {
15292
- const { handleSessionsCommand } = await Promise.resolve().then(function () { return require('./sessions-CbbZhOTy.cjs'); });
15352
+ const { handleSessionsCommand } = await Promise.resolve().then(function () { return require('./sessions-CVUBS3LG.cjs'); });
15293
15353
  await handleSessionsCommand(args.slice(1));
15294
15354
  } catch (error) {
15295
15355
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -15301,7 +15361,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15301
15361
  return;
15302
15362
  } else if (subcommand === "send") {
15303
15363
  try {
15304
- const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-CtgnnJic.cjs'); });
15364
+ const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-CuajooZC.cjs'); });
15305
15365
  await handleSendCommand(args.slice(1));
15306
15366
  } catch (error) {
15307
15367
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -15407,9 +15467,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15407
15467
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
15408
15468
  const projectId = args[3];
15409
15469
  try {
15410
- const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-DiVKfYr0.cjs'); });
15411
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-Cg8zzX_f.cjs'); }).then(function (n) { return n.persistence; });
15412
- const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-Cg8zzX_f.cjs'); }).then(function (n) { return n.api; });
15470
+ const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-CTCGilz_.cjs'); });
15471
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types--t4zLibT.cjs'); }).then(function (n) { return n.persistence; });
15472
+ const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types--t4zLibT.cjs'); }).then(function (n) { return n.api; });
15413
15473
  let userEmail = void 0;
15414
15474
  try {
15415
15475
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -15440,7 +15500,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15440
15500
  }
15441
15501
  if (geminiSubcommand === "project" && args[2] === "get") {
15442
15502
  try {
15443
- const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-DiVKfYr0.cjs'); });
15503
+ const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-CTCGilz_.cjs'); });
15444
15504
  const config = readGeminiLocalConfig();
15445
15505
  if (config.googleCloudProject) {
15446
15506
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -15480,7 +15540,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15480
15540
  process.exit(0);
15481
15541
  }
15482
15542
  try {
15483
- const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-DV2M0A_k.cjs'); });
15543
+ const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-D6Wwfk_0.cjs'); });
15484
15544
  let startedBy = void 0;
15485
15545
  for (let i = 1; i < args.length; i++) {
15486
15546
  if (args[i] === "--started-by") {
@@ -15502,7 +15562,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15502
15562
  return;
15503
15563
  } else if (subcommand === "acp") {
15504
15564
  try {
15505
- const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-D2qU5HP4.cjs'); });
15565
+ const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-D-adqB7g.cjs'); });
15506
15566
  let startedBy = void 0;
15507
15567
  let verbose = false;
15508
15568
  const acpArgs = [];
@@ -15542,7 +15602,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15542
15602
  return;
15543
15603
  } else if (subcommand === "openclaw") {
15544
15604
  try {
15545
- const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-C1Q2zl--.cjs'); });
15605
+ const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-BYmlS-4Q.cjs'); });
15546
15606
  let startedBy = void 0;
15547
15607
  let verbose = false;
15548
15608
  let gatewayUrl;
@@ -15593,7 +15653,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
15593
15653
  return;
15594
15654
  } else if (subcommand === "mcp" && args.length === 1) {
15595
15655
  try {
15596
- const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-Du1QEnIf.cjs'); });
15656
+ const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-Dr1PegOw.cjs'); });
15597
15657
  await handleMcpCommand();
15598
15658
  } catch (error) {
15599
15659
  process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var AcpBackend = require('./AcpBackend-Cc4Ilypg.cjs');
4
- var persistence = require('./types-Cg8zzX_f.cjs');
5
- var AcpSessionManager = require('./AcpSessionManager-CLfzatC_.cjs');
3
+ var AcpBackend = require('./AcpBackend-D0_wbTs6.cjs');
4
+ var persistence = require('./types--t4zLibT.cjs');
5
+ var AcpSessionManager = require('./AcpSessionManager-Dcj_iHw8.cjs');
6
6
  var node_crypto = require('node:crypto');
7
7
  var path = require('node:path');
8
- var index = require('./index-dd2R8uSE.cjs');
8
+ var index = require('./index-CvnMiYgh.cjs');
9
9
  require('node:child_process');
10
10
  require('@agentclientprotocol/sdk');
11
11
  require('axios');
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-dd2R8uSE.cjs');
3
+ var index = require('./index-CvnMiYgh.cjs');
4
4
  var claudeAgentSdk = require('@anthropic-ai/claude-agent-sdk');
5
5
  require('chalk');
6
6
  require('node:os');
7
7
  require('node:crypto');
8
- require('./types-Cg8zzX_f.cjs');
8
+ require('./types--t4zLibT.cjs');
9
9
  require('axios');
10
10
  require('node:util');
11
11
  require('node:fs');
@@ -1,9 +1,9 @@
1
- import { q as query } from './index-DO-9Ep72.mjs';
1
+ import { q as query } from './index-BW9kDx5m.mjs';
2
2
  export { AbortError } from '@anthropic-ai/claude-agent-sdk';
3
3
  import 'chalk';
4
4
  import 'node:os';
5
5
  import 'node:crypto';
6
- import './types-BKCvo4Cv.mjs';
6
+ import './types-BdO0jg7G.mjs';
7
7
  import 'axios';
8
8
  import 'node:util';
9
9
  import 'node:fs';
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./index-dd2R8uSE.cjs');
5
- require('./types-Cg8zzX_f.cjs');
4
+ require('./index-CvnMiYgh.cjs');
5
+ require('./types--t4zLibT.cjs');
6
6
  require('zod');
7
7
  require('node:child_process');
8
8
  require('node:os');
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import 'chalk';
2
- import './index-DO-9Ep72.mjs';
3
- import './types-BKCvo4Cv.mjs';
2
+ import './index-BW9kDx5m.mjs';
3
+ import './types-BdO0jg7G.mjs';
4
4
  import 'zod';
5
5
  import 'node:child_process';
6
6
  import 'node:os';
@@ -3,8 +3,8 @@ import { join, resolve } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  import { spawnSync } from 'node:child_process';
5
5
  import chalk from 'chalk';
6
- import { p as projectPath } from './types-BKCvo4Cv.mjs';
7
- import { t as tmuxSupportsSessionEnv } from './index-DO-9Ep72.mjs';
6
+ import { p as projectPath } from './types-BdO0jg7G.mjs';
7
+ import { t as tmuxSupportsSessionEnv } from './index-BW9kDx5m.mjs';
8
8
  import 'axios';
9
9
  import 'node:util';
10
10
  import 'node:fs/promises';
@@ -5,8 +5,8 @@ var path = require('node:path');
5
5
  var os = require('node:os');
6
6
  var node_child_process = require('node:child_process');
7
7
  var chalk = require('chalk');
8
- var persistence = require('./types-Cg8zzX_f.cjs');
9
- var index = require('./index-dd2R8uSE.cjs');
8
+ var persistence = require('./types--t4zLibT.cjs');
9
+ var index = require('./index-CvnMiYgh.cjs');
10
10
  require('axios');
11
11
  require('node:util');
12
12
  require('node:fs/promises');
package/dist/lib.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var persistence = require('./types-Cg8zzX_f.cjs');
3
+ var persistence = require('./types--t4zLibT.cjs');
4
4
  require('axios');
5
5
  require('chalk');
6
6
  require('node:util');
package/dist/lib.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-BKCvo4Cv.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-BdO0jg7G.mjs';
2
2
  import 'axios';
3
3
  import 'chalk';
4
4
  import 'node:util';
@@ -1,9 +1,9 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
3
  import { z } from 'zod';
4
- import { p as pushClipboardViaDaemon } from './index-DO-9Ep72.mjs';
4
+ import { p as pushClipboardViaDaemon } from './index-BW9kDx5m.mjs';
5
5
  import { C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, c as CLIPBOARD_MAX_BYTES } from './limits-CwFb5S2b.mjs';
6
- import { l as logger } from './types-BKCvo4Cv.mjs';
6
+ import { l as logger } from './types-BdO0jg7G.mjs';
7
7
  import 'chalk';
8
8
  import 'node:os';
9
9
  import 'node:crypto';
@@ -3,9 +3,9 @@
3
3
  var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
4
4
  var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
5
5
  var z = require('zod');
6
- var index = require('./index-dd2R8uSE.cjs');
6
+ var index = require('./index-CvnMiYgh.cjs');
7
7
  var limits = require('./limits-KdWKmwtH.cjs');
8
- var persistence = require('./types-Cg8zzX_f.cjs');
8
+ var persistence = require('./types--t4zLibT.cjs');
9
9
  require('chalk');
10
10
  require('node:os');
11
11
  require('node:crypto');
@@ -2,10 +2,10 @@ import { useStdout, useInput, Box, Text, render } from 'ink';
2
2
  import React, { useState, useRef, useEffect, useCallback } from 'react';
3
3
  import { randomUUID } from 'node:crypto';
4
4
  import { join } from 'node:path';
5
- import { l as logger, h as connectionState, A as ApiClient, j as readSettings, e as errorLogMetadata, k as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-BKCvo4Cv.mjs';
6
- import { v as GEMINI_API_KEY_ENV, x as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, y as BaseReasoningProcessor, g as initialMachineMetadata, h as createSessionMetadata, j as setupOfflineReconnection, n as notifyDaemonSessionStarted, k as MessageQueue2, m as hashObject, z as MessageBuffer, C as CHANGE_TITLE_INSTRUCTION, u as registerKillSessionHandler, o as startHappyServer } from './index-DO-9Ep72.mjs';
7
- import { A as AcpBackend } from './AcpBackend-DOzPxcth.mjs';
8
- import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-DnvzvFHR.mjs';
5
+ import { l as logger, h as connectionState, A as ApiClient, j as readSettings, e as errorLogMetadata, k as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-BdO0jg7G.mjs';
6
+ import { v as GEMINI_API_KEY_ENV, x as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, y as BaseReasoningProcessor, g as initialMachineMetadata, h as createSessionMetadata, j as setupOfflineReconnection, n as notifyDaemonSessionStarted, k as MessageQueue2, m as hashObject, z as MessageBuffer, C as CHANGE_TITLE_INSTRUCTION, u as registerKillSessionHandler, o as startHappyServer } from './index-BW9kDx5m.mjs';
7
+ import { A as AcpBackend } from './AcpBackend-DzZR7TEv.mjs';
8
+ import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-CTyyVXHj.mjs';
9
9
  import 'axios';
10
10
  import 'chalk';
11
11
  import 'node:util';
@@ -4,10 +4,10 @@ var ink = require('ink');
4
4
  var React = require('react');
5
5
  var node_crypto = require('node:crypto');
6
6
  var path = require('node:path');
7
- var persistence = require('./types-Cg8zzX_f.cjs');
8
- var index = require('./index-dd2R8uSE.cjs');
9
- var AcpBackend = require('./AcpBackend-Cc4Ilypg.cjs');
10
- var config = require('./config-DiVKfYr0.cjs');
7
+ var persistence = require('./types--t4zLibT.cjs');
8
+ var index = require('./index-CvnMiYgh.cjs');
9
+ var AcpBackend = require('./AcpBackend-D0_wbTs6.cjs');
10
+ var config = require('./config-CTCGilz_.cjs');
11
11
  require('axios');
12
12
  require('chalk');
13
13
  require('node:util');
@@ -3,9 +3,9 @@ import { execFileSync } from 'node:child_process';
3
3
  import os from 'node:os';
4
4
  import { existsSync, readFileSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
- import { m as ensurePrivateDirectorySync, n as hardenPrivateFileSync, w as writePrivateFileSync, e as errorLogMetadata, d as contentLogMetadata, h as connectionState, A as ApiClient, j as readSettings, k as encodeBase64, l as logger, c as configuration } from './types-BKCvo4Cv.mjs';
7
- import { A as AcpSessionManager } from './AcpSessionManager-DDN-Yir4.mjs';
8
- import { g as initialMachineMetadata, h as createSessionMetadata, j as setupOfflineReconnection, n as notifyDaemonSessionStarted, k as MessageQueue2, u as registerKillSessionHandler } from './index-DO-9Ep72.mjs';
6
+ import { m as ensurePrivateDirectorySync, n as hardenPrivateFileSync, w as writePrivateFileSync, e as errorLogMetadata, d as contentLogMetadata, h as connectionState, A as ApiClient, j as readSettings, k as encodeBase64, l as logger, c as configuration } from './types-BdO0jg7G.mjs';
7
+ import { A as AcpSessionManager } from './AcpSessionManager-tWuFWeIF.mjs';
8
+ import { g as initialMachineMetadata, h as createSessionMetadata, j as setupOfflineReconnection, n as notifyDaemonSessionStarted, k as MessageQueue2, u as registerKillSessionHandler } from './index-BW9kDx5m.mjs';
9
9
  import WebSocket from 'ws';
10
10
  import * as ed from '@noble/ed25519';
11
11
  import { sha512 } from '@noble/hashes/sha2.js';
@@ -5,9 +5,9 @@ var node_child_process = require('node:child_process');
5
5
  var os = require('node:os');
6
6
  var node_fs = require('node:fs');
7
7
  var path = require('node:path');
8
- var persistence = require('./types-Cg8zzX_f.cjs');
9
- var AcpSessionManager = require('./AcpSessionManager-CLfzatC_.cjs');
10
- var index = require('./index-dd2R8uSE.cjs');
8
+ var persistence = require('./types--t4zLibT.cjs');
9
+ var AcpSessionManager = require('./AcpSessionManager-Dcj_iHw8.cjs');
10
+ var index = require('./index-CvnMiYgh.cjs');
11
11
  var WebSocket = require('ws');
12
12
  var ed = require('@noble/ed25519');
13
13
  var sha2_js = require('@noble/hashes/sha2.js');
@@ -1,8 +1,8 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { r as readPersistedSessions, c as configuration } from './types-BKCvo4Cv.mjs';
5
- import { b as sendUserMessage, a as sessionWebUrl } from './index-DO-9Ep72.mjs';
4
+ import { r as readPersistedSessions, c as configuration } from './types-BdO0jg7G.mjs';
5
+ import { b as sendUserMessage, a as sessionWebUrl } from './index-BW9kDx5m.mjs';
6
6
  import 'axios';
7
7
  import 'node:util';
8
8
  import 'node:os';
@@ -3,8 +3,8 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var persistence = require('./types-Cg8zzX_f.cjs');
7
- var index = require('./index-dd2R8uSE.cjs');
6
+ var persistence = require('./types--t4zLibT.cjs');
7
+ var index = require('./index-CvnMiYgh.cjs');
8
8
  require('axios');
9
9
  require('node:util');
10
10
  require('node:os');
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var index = require('./index-dd2R8uSE.cjs');
5
- var persistence = require('./types-Cg8zzX_f.cjs');
4
+ var index = require('./index-CvnMiYgh.cjs');
5
+ var persistence = require('./types--t4zLibT.cjs');
6
6
  require('node:os');
7
7
  require('node:crypto');
8
8
  require('cross-spawn');
@@ -1,6 +1,6 @@
1
1
  import chalk from 'chalk';
2
- import { D as DEFAULT_RECENT_LIMIT, M as MAX_READ_LIMIT, l as listSessions, r as readSessionTranscript, d as stopSession, e as archiveSession } from './index-DO-9Ep72.mjs';
3
- import { i as isValidSessionId } from './types-BKCvo4Cv.mjs';
2
+ import { D as DEFAULT_RECENT_LIMIT, M as MAX_READ_LIMIT, l as listSessions, r as readSessionTranscript, d as stopSession, e as archiveSession } from './index-BW9kDx5m.mjs';
3
+ import { i as isValidSessionId } from './types-BdO0jg7G.mjs';
4
4
  import 'node:os';
5
5
  import 'node:crypto';
6
6
  import 'cross-spawn';
@@ -3,8 +3,8 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var index = require('./index-dd2R8uSE.cjs');
7
- var persistence = require('./types-Cg8zzX_f.cjs');
6
+ var index = require('./index-CvnMiYgh.cjs');
7
+ var persistence = require('./types--t4zLibT.cjs');
8
8
  require('node:os');
9
9
  require('node:crypto');
10
10
  require('cross-spawn');
@@ -1,8 +1,8 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync, statSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, i as isValidSpawnOrigin, w as waitForSessionKey, b as sendUserMessage } from './index-DO-9Ep72.mjs';
5
- import { l as logger } from './types-BKCvo4Cv.mjs';
4
+ import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, i as isValidSpawnOrigin, w as waitForSessionKey, b as sendUserMessage } from './index-BW9kDx5m.mjs';
5
+ import { l as logger } from './types-BdO0jg7G.mjs';
6
6
  import 'node:os';
7
7
  import 'node:crypto';
8
8
  import 'cross-spawn';
@@ -51,7 +51,7 @@ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
51
51
  var pty__namespace = /*#__PURE__*/_interopNamespaceDefault(pty);
52
52
 
53
53
  var name = "very-happy-cli";
54
- var version = "0.2.109";
54
+ var version = "0.2.110";
55
55
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
56
56
  var author = "Kirill Dubovitskiy";
57
57
  var contributors = [
@@ -164,12 +164,12 @@ var dependencies = {
164
164
  zod: "^4.0.0"
165
165
  };
166
166
  var optionalDependencies = {
167
- "very-happy-tools-arm64-darwin": "0.2.109",
168
- "very-happy-tools-x64-darwin": "0.2.109",
169
- "very-happy-tools-arm64-linux": "0.2.109",
170
- "very-happy-tools-x64-linux": "0.2.109",
171
- "very-happy-tools-arm64-win32": "0.2.109",
172
- "very-happy-tools-x64-win32": "0.2.109"
167
+ "very-happy-tools-arm64-darwin": "0.2.110",
168
+ "very-happy-tools-x64-darwin": "0.2.110",
169
+ "very-happy-tools-arm64-linux": "0.2.110",
170
+ "very-happy-tools-x64-linux": "0.2.110",
171
+ "very-happy-tools-arm64-win32": "0.2.110",
172
+ "very-happy-tools-x64-win32": "0.2.110"
173
173
  };
174
174
  var devDependencies = {
175
175
  "@slopus/happy-wire": "workspace:*",
@@ -1603,7 +1603,7 @@ class RpcHandlerManager {
1603
1603
  }
1604
1604
  }
1605
1605
 
1606
- const __dirname$1 = path$1.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('types-Cg8zzX_f.cjs', document.baseURI).href))));
1606
+ const __dirname$1 = path$1.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('types--t4zLibT.cjs', document.baseURI).href))));
1607
1607
  function projectPath() {
1608
1608
  const path = path$1.resolve(__dirname$1, "..");
1609
1609
  return path;
@@ -15778,6 +15778,13 @@ class NotificationProducer {
15778
15778
  }
15779
15779
  const DEDUP_WINDOW_MS = 3e3;
15780
15780
 
15781
+ function describeSessionCreateError(error) {
15782
+ const base = error instanceof Error ? error.message : "Unknown error";
15783
+ if (!axios.isAxiosError(error) || !error.response) return base;
15784
+ const data = error.response.data;
15785
+ const code = data && typeof data === "object" && typeof data.error === "string" ? data.error : null;
15786
+ return code ? `${base} (${code})` : base;
15787
+ }
15781
15788
  class ApiClient {
15782
15789
  static async create(credential) {
15783
15790
  return new ApiClient(credential);
@@ -15873,7 +15880,7 @@ class ApiClient {
15873
15880
  return null;
15874
15881
  }
15875
15882
  }
15876
- throw new Error(`Failed to get or create session: ${error instanceof Error ? error.message : "Unknown error"}`);
15883
+ throw new Error(`Failed to get or create session: ${describeSessionCreateError(error)}`);
15877
15884
  }
15878
15885
  }
15879
15886
  /**
@@ -16252,7 +16259,8 @@ class ApiClient {
16252
16259
 
16253
16260
  var api = /*#__PURE__*/Object.freeze({
16254
16261
  __proto__: null,
16255
- ApiClient: ApiClient
16262
+ ApiClient: ApiClient,
16263
+ describeSessionCreateError: describeSessionCreateError
16256
16264
  });
16257
16265
 
16258
16266
  const UsageSchema = z.z.object({
@@ -29,7 +29,7 @@ import { SandboxManager } from '@anthropic-ai/sandbox-runtime';
29
29
  import { Expo } from 'expo-server-sdk';
30
30
 
31
31
  var name = "very-happy-cli";
32
- var version = "0.2.109";
32
+ var version = "0.2.110";
33
33
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
34
34
  var author = "Kirill Dubovitskiy";
35
35
  var contributors = [
@@ -142,12 +142,12 @@ var dependencies = {
142
142
  zod: "^4.0.0"
143
143
  };
144
144
  var optionalDependencies = {
145
- "very-happy-tools-arm64-darwin": "0.2.109",
146
- "very-happy-tools-x64-darwin": "0.2.109",
147
- "very-happy-tools-arm64-linux": "0.2.109",
148
- "very-happy-tools-x64-linux": "0.2.109",
149
- "very-happy-tools-arm64-win32": "0.2.109",
150
- "very-happy-tools-x64-win32": "0.2.109"
145
+ "very-happy-tools-arm64-darwin": "0.2.110",
146
+ "very-happy-tools-x64-darwin": "0.2.110",
147
+ "very-happy-tools-arm64-linux": "0.2.110",
148
+ "very-happy-tools-x64-linux": "0.2.110",
149
+ "very-happy-tools-arm64-win32": "0.2.110",
150
+ "very-happy-tools-x64-win32": "0.2.110"
151
151
  };
152
152
  var devDependencies = {
153
153
  "@slopus/happy-wire": "workspace:*",
@@ -15756,6 +15756,13 @@ class NotificationProducer {
15756
15756
  }
15757
15757
  const DEDUP_WINDOW_MS = 3e3;
15758
15758
 
15759
+ function describeSessionCreateError(error) {
15760
+ const base = error instanceof Error ? error.message : "Unknown error";
15761
+ if (!axios.isAxiosError(error) || !error.response) return base;
15762
+ const data = error.response.data;
15763
+ const code = data && typeof data === "object" && typeof data.error === "string" ? data.error : null;
15764
+ return code ? `${base} (${code})` : base;
15765
+ }
15759
15766
  class ApiClient {
15760
15767
  static async create(credential) {
15761
15768
  return new ApiClient(credential);
@@ -15851,7 +15858,7 @@ class ApiClient {
15851
15858
  return null;
15852
15859
  }
15853
15860
  }
15854
- throw new Error(`Failed to get or create session: ${error instanceof Error ? error.message : "Unknown error"}`);
15861
+ throw new Error(`Failed to get or create session: ${describeSessionCreateError(error)}`);
15855
15862
  }
15856
15863
  }
15857
15864
  /**
@@ -16230,7 +16237,8 @@ class ApiClient {
16230
16237
 
16231
16238
  var api = /*#__PURE__*/Object.freeze({
16232
16239
  __proto__: null,
16233
- ApiClient: ApiClient
16240
+ ApiClient: ApiClient,
16241
+ describeSessionCreateError: describeSessionCreateError
16234
16242
  });
16235
16243
 
16236
16244
  const UsageSchema = z$1.object({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.109",
3
+ "version": "0.2.110",
4
4
  "description": "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.",
5
5
  "author": "Kirill Dubovitskiy",
6
6
  "contributors": [
@@ -113,12 +113,12 @@
113
113
  "zod": "^4.0.0"
114
114
  },
115
115
  "optionalDependencies": {
116
- "very-happy-tools-arm64-darwin": "0.2.109",
117
- "very-happy-tools-x64-darwin": "0.2.109",
118
- "very-happy-tools-arm64-linux": "0.2.109",
119
- "very-happy-tools-x64-linux": "0.2.109",
120
- "very-happy-tools-arm64-win32": "0.2.109",
121
- "very-happy-tools-x64-win32": "0.2.109"
116
+ "very-happy-tools-arm64-darwin": "0.2.110",
117
+ "very-happy-tools-x64-darwin": "0.2.110",
118
+ "very-happy-tools-arm64-linux": "0.2.110",
119
+ "very-happy-tools-x64-linux": "0.2.110",
120
+ "very-happy-tools-arm64-win32": "0.2.110",
121
+ "very-happy-tools-x64-win32": "0.2.110"
122
122
  },
123
123
  "devDependencies": {
124
124
  "@slopus/happy-wire": "workspace:*",