very-happy-cli 0.2.136 → 0.2.138

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 (43) hide show
  1. package/dist/{AcpBackend-CRzu0_1Z.cjs → AcpBackend-BUoDXZnv.cjs} +2 -2
  2. package/dist/{AcpBackend-C142vP3p.mjs → AcpBackend-bqVGMkPh.mjs} +2 -2
  3. package/dist/{AcpSessionManager-CosTbAlR.mjs → AcpSessionManager-BBAQ8EQf.mjs} +1 -1
  4. package/dist/{AcpSessionManager-Ba6WMLXc.cjs → AcpSessionManager-DmmA52Ep.cjs} +1 -1
  5. package/dist/{agentGuidance-6yh_wPwD.cjs → agentGuidance-4HV-BOge.cjs} +1 -1
  6. package/dist/{agentGuidance-ASxKHxBP.mjs → agentGuidance-WHZsBKpm.mjs} +1 -1
  7. package/dist/codex/happyMcpStdioBridge.cjs +2 -2
  8. package/dist/codex/happyMcpStdioBridge.mjs +2 -2
  9. package/dist/{config-VqHQ67d8.mjs → config-BRXqgJJj.mjs} +4 -4
  10. package/dist/{config--cxxmkOd.cjs → config-DpuZN2Rs.cjs} +4 -4
  11. package/dist/{index-BPVQFcKW.cjs → index-3N-qu-RG.cjs} +6 -6
  12. package/dist/{index-BqbtKX0T.cjs → index-CHP265gs.cjs} +4 -4
  13. package/dist/{index-8bwU9d-4.cjs → index-CRRK5P1r.cjs} +115 -23
  14. package/dist/{index-vN4Xf0zB.mjs → index-D8Q3OhdR.mjs} +4 -4
  15. package/dist/{index-D3vlFjXy.mjs → index-DQe7ljLR.mjs} +7 -7
  16. package/dist/{index-CHI7iTa0.mjs → index-Dbl5U_N0.mjs} +111 -19
  17. package/dist/index.cjs +4 -4
  18. package/dist/index.mjs +4 -4
  19. package/dist/{installTerminalHooks-2POBqVlu.cjs → installTerminalHooks-CWGkoWDD.cjs} +4 -4
  20. package/dist/{installTerminalHooks-D0YRu_p-.mjs → installTerminalHooks-DfUGgeyb.mjs} +4 -4
  21. package/dist/lib.cjs +2 -2
  22. package/dist/lib.mjs +2 -2
  23. package/dist/{limits-DRrdJ7gr.cjs → limits-CfzVummd.cjs} +7 -7
  24. package/dist/{limits-kjHZUlSp.mjs → limits-DEsg_gHi.mjs} +7 -7
  25. package/dist/{mcp-C1JQsM1s.cjs → mcp-CN2UVfut.cjs} +4 -4
  26. package/dist/{mcp-CgjEHlky.mjs → mcp-UnjB3I8_.mjs} +4 -4
  27. package/dist/{runGemini-B9Rc-H0G.cjs → runGemini-BUVjTJKn.cjs} +6 -6
  28. package/dist/{runGemini-DufGnnl2.mjs → runGemini-BZ0xXRj-.mjs} +6 -6
  29. package/dist/{runOpenClaw-DAl2nnjB.mjs → runOpenClaw-BcUmnBpW.mjs} +5 -5
  30. package/dist/{runOpenClaw-BsRRKDvF.cjs → runOpenClaw-Bj2EgRHB.cjs} +5 -5
  31. package/dist/{send-DP6n2J9x.cjs → send-BkypdBpK.cjs} +4 -4
  32. package/dist/{send-BHquPaeG.mjs → send-snK_NGAA.mjs} +4 -4
  33. package/dist/{sessions-Q4BR02dG.cjs → sessions-9A-uoJL_.cjs} +4 -4
  34. package/dist/{sessions-BtrLzv5U.mjs → sessions-DxlC4C4g.mjs} +4 -4
  35. package/dist/{spawn-CMjhlwlD.cjs → spawn-BORLpj60.cjs} +4 -4
  36. package/dist/{spawn-DuQXydqI.mjs → spawn-DFfHCafP.mjs} +4 -4
  37. package/dist/{teams-CkdUH10-.cjs → teams-9x2FO9RW.cjs} +4 -4
  38. package/dist/{teams-D5HxnyaW.mjs → teams-Cfr-2Yd-.mjs} +4 -4
  39. package/dist/{todo-BiLIZH4t.mjs → todo-CU5cjQZU.mjs} +3 -3
  40. package/dist/{todo-CaYedmtq.cjs → todo-DydKcknX.cjs} +3 -3
  41. package/dist/{types-DbBPNIwf.cjs → types-CRxf_3n8.cjs} +78 -6
  42. package/dist/{types-BKrZubg8.mjs → types-D5EsIAOe.mjs} +77 -5
  43. package/package.json +7 -7
@@ -1,13 +1,13 @@
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, tmpdir } from 'node:os';
3
3
  import { randomUUID, randomInt, randomBytes, createHash as createHash$1, timingSafeEqual } from 'node:crypto';
4
- import { j as getProjectPath, g as BUILTIN_TODO_DISCOVERY, p as projectPath, k as initializeSandbox, w as wrapCommand, d as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, h as delay, l as AsyncLock, S as STREAM_DELTA_MAX_CHARS, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, m as commandOnPath, n as deriveLocalCliUpdateSummary, o as AGENT_VERSION_SOURCES, q as isClaudeSessionId, r as getLocalHappyAgentCredentialPath, t as readLocalHappyAgentCredentials, u as parseExactVersion, v as compareExactVersions, x as extractCompleteLines, y as decideBackfill, z as parseTerminalHookPayload, C as tmuxArgs, D as scrubTmuxClientEnv, E as decideMirrorBinding, F as MIRROR_BACKFILL_LINES_DEFAULT, G as mirrorLineKey, H as mirrorLocalId, J as detectCLIAvailability, K as detectResumeSupport, L as summarizeSpawnSessionForLog, N as shellescape, A as ApiClient, O as fetchCliUpdateState, P as resolveCliUpdateCheckInterval, Q as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, i as isValidSessionId, T as listVhTerminals, U as isValidTerminalId, V as readVhTerminal, W as sendToVhTerminal, X as ContextUsageSchema, Y as TITLE_PROMPT_PREFIX, Z as BOARD_ANALYZER_PROMPT_PREFIX, f as connectionState, _ as startOfflineReconnection, c as createEnvelope, $ as CodexAppServerClient } from './types-BKrZubg8.mjs';
5
- import { z as readDaemonState, l as logger, c as configuration, A as clearDaemonState, B as ensurePrivateDirectory, D as hardenPrivateFile, p as packageJson, g as readSettings, E as readCredentials, s as credentialRelayProblem, i as encodeBase64, F as readSettingsOutcome, G as updateSettings, H as encodeBase64Url, m as decodeBase64, I as writeCredentialsLegacy, J as writeCredentialsDataKey, d as readCredentialsForConfiguredRelay, j as encrypt, r as readPersistedSessions, w as writePrivateFileSync, K as decryptWithDataKey, L as decryptLegacy, M as persistSession, k as decrypt, f as ensurePrivateDirectorySync, N as acquireDaemonLock, O as deletePersistedSessions, P as writeDaemonState, Q as writeSettings, R as releaseDaemonLock, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, e as CLIPBOARD_MAX_BYTES, S as clearCredentials, T as clearMachineId, U as SandboxConfigSchema, V as getLatestDaemonLog } from './limits-kjHZUlSp.mjs';
4
+ import { j as getProjectPath, g as BUILTIN_TODO_DISCOVERY, p as projectPath, k as initializeSandbox, w as wrapCommand, d as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, h as delay, l as AsyncLock, S as STREAM_DELTA_MAX_CHARS, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, m as commandOnPath, n as deriveLocalCliUpdateSummary, o as AGENT_VERSION_SOURCES, q as isClaudeSessionId, r as getLocalHappyAgentCredentialPath, t as readLocalHappyAgentCredentials, u as parseExactVersion, v as compareExactVersions, x as extractCompleteLines, y as decideBackfill, z as parseTerminalHookPayload, C as tmuxArgs, D as scrubTmuxClientEnv, E as decideMirrorBinding, F as MIRROR_BACKFILL_LINES_DEFAULT, G as mirrorLineKey, H as mirrorLocalId, J as detectCLIAvailability, K as detectResumeSupport, L as summarizeSpawnSessionForLog, N as shellescape, A as ApiClient, O as fetchCliUpdateState, P as resolveCliUpdateCheckInterval, Q as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, i as isValidSessionId, T as listVhTerminals, U as isValidTerminalId, V as readVhTerminal, W as sendToVhTerminal, X as ContextUsageSchema, Y as TITLE_PROMPT_PREFIX, Z as BOARD_ANALYZER_PROMPT_PREFIX, f as connectionState, _ as startOfflineReconnection, c as createEnvelope, $ as CodexAppServerClient } from './types-D5EsIAOe.mjs';
5
+ import { z as readDaemonState, l as logger, c as configuration, A as clearDaemonState, B as ensurePrivateDirectory, D as hardenPrivateFile, p as packageJson, g as readSettings, E as readCredentials, s as credentialRelayProblem, i as encodeBase64, F as readSettingsOutcome, G as updateSettings, H as encodeBase64Url, m as decodeBase64, I as writeCredentialsLegacy, J as writeCredentialsDataKey, d as readCredentialsForConfiguredRelay, j as encrypt, r as readPersistedSessions, w as writePrivateFileSync, K as decryptWithDataKey, L as decryptLegacy, M as persistSession, k as decrypt, f as ensurePrivateDirectorySync, N as acquireDaemonLock, O as deletePersistedSessions, P as writeDaemonState, Q as writeSettings, R as releaseDaemonLock, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, e as CLIPBOARD_MAX_BYTES, S as clearCredentials, T as clearMachineId, U as SandboxConfigSchema, V as getLatestDaemonLog } from './limits-DEsg_gHi.mjs';
6
6
  import spawn$1, { spawn } from 'cross-spawn';
7
7
  import path, { join, resolve, basename, isAbsolute, dirname, sep, delimiter, normalize } from 'node:path';
8
8
  import { createInterface } from 'node:readline';
9
9
  import { existsSync, readFileSync, readdirSync, statSync, mkdirSync, unlinkSync, renameSync, writeFileSync, accessSync, constants, openSync, fsyncSync, closeSync, rmSync as rmSync$1, chmodSync as chmodSync$1 } from 'node:fs';
10
- import { f as trimIdent, A as AGENT_GUIDANCE, t as teamScopePath, T as TeamConnectionPreflightError, e as createTeamsClient, P as PREVIEW_TOOL_NAME, R as REPORT_PROGRESS_TOOL_NAME, g as TEAM_TOOL_NAMES, r as registerTeamsTools, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION, h as REPORT_PROGRESS_TOOL_TITLE, i as REPORT_PROGRESS_TOOL_DESCRIPTION } from './agentGuidance-ASxKHxBP.mjs';
10
+ import { f as trimIdent, A as AGENT_GUIDANCE, t as teamScopePath, T as TeamConnectionPreflightError, e as createTeamsClient, P as PREVIEW_TOOL_NAME, R as REPORT_PROGRESS_TOOL_NAME, g as TEAM_TOOL_NAMES, r as registerTeamsTools, a as PREVIEW_TOOL_TITLE, b as PREVIEW_TOOL_DESCRIPTION, h as REPORT_PROGRESS_TOOL_TITLE, i as REPORT_PROGRESS_TOOL_DESCRIPTION } from './agentGuidance-WHZsBKpm.mjs';
11
11
  import { readFile, writeFile, rename, unlink, mkdir, symlink, rm, readlink, lstat, stat, open as open$1, appendFile } from 'node:fs/promises';
12
12
  import fs, { watch, access } from 'fs/promises';
13
13
  import { useStdout, useInput, Box, Text, render } from 'ink';
@@ -12476,7 +12476,7 @@ function registerSideQuestionHandler(rpc, deps) {
12476
12476
  const retainMs = deps.retainMs ?? SIDE_QUESTION_RETAIN_MS;
12477
12477
  const maxRunMs = deps.maxRunMs ?? SIDE_QUESTION_MAX_RUN_MS;
12478
12478
  const run = deps.run ?? (async (input) => {
12479
- const { query } = await import('./index-vN4Xf0zB.mjs');
12479
+ const { query } = await import('./index-D8Q3OhdR.mjs');
12480
12480
  return runSideQuestion(query, input);
12481
12481
  });
12482
12482
  const slots = /* @__PURE__ */ new Map();
@@ -16587,6 +16587,72 @@ function emitReadyIfIdle({ pending, queueSize, shouldExit, sendReady, notify })
16587
16587
  return true;
16588
16588
  }
16589
16589
 
16590
+ const DEFAULT_CODEX_IDLE_RELEASE_MS = 5 * 60 * 1e3;
16591
+ const CODEX_IDLE_RELEASE_ENV = "HAPPY_CODEX_IDLE_RELEASE_MS";
16592
+ function resolveCodexIdleReleaseMs(raw) {
16593
+ if (raw === void 0 || raw.trim() === "") return DEFAULT_CODEX_IDLE_RELEASE_MS;
16594
+ const parsed = Number(raw);
16595
+ if (!Number.isFinite(parsed) || parsed < 0) return DEFAULT_CODEX_IDLE_RELEASE_MS;
16596
+ return Math.floor(parsed);
16597
+ }
16598
+ function shouldReleaseIdleCodex(state) {
16599
+ if (state.shouldExit) return false;
16600
+ if (state.turnActive) return false;
16601
+ if (state.abortInProgress) return false;
16602
+ if (state.queueSize > 0) return false;
16603
+ return true;
16604
+ }
16605
+ class CodexIdleReleaseTimer {
16606
+ constructor(opts) {
16607
+ this.opts = opts;
16608
+ }
16609
+ timer = null;
16610
+ releasing = null;
16611
+ get enabled() {
16612
+ return this.opts.delayMs > 0;
16613
+ }
16614
+ get armed() {
16615
+ return this.timer !== null;
16616
+ }
16617
+ arm() {
16618
+ this.cancel();
16619
+ if (!this.enabled) return;
16620
+ const timer = setTimeout(() => {
16621
+ if (this.timer !== timer) return;
16622
+ this.timer = null;
16623
+ void this.fire();
16624
+ }, this.opts.delayMs);
16625
+ timer.unref?.();
16626
+ this.timer = timer;
16627
+ }
16628
+ cancel() {
16629
+ if (this.timer) {
16630
+ clearTimeout(this.timer);
16631
+ this.timer = null;
16632
+ }
16633
+ }
16634
+ /** Resolves once an in-flight release (if any) has finished. Test hook. */
16635
+ async settle() {
16636
+ await this.releasing;
16637
+ }
16638
+ async fire() {
16639
+ if (!this.opts.isIdle()) return;
16640
+ const run = (async () => {
16641
+ try {
16642
+ await this.opts.release();
16643
+ } catch (error) {
16644
+ this.opts.onError?.(error);
16645
+ }
16646
+ })();
16647
+ this.releasing = run;
16648
+ try {
16649
+ await run;
16650
+ } finally {
16651
+ if (this.releasing === run) this.releasing = null;
16652
+ }
16653
+ }
16654
+ }
16655
+
16590
16656
  function isCodexClearText(text) {
16591
16657
  return parseSpecialCommand(text).type === "clear";
16592
16658
  }
@@ -16765,6 +16831,7 @@ async function runCodex(opts) {
16765
16831
  let client;
16766
16832
  let reasoningProcessor;
16767
16833
  let abortInProgress = null;
16834
+ let turnActive = false;
16768
16835
  const { session: initialSession, reconnectionHandle } = setupOfflineReconnection({
16769
16836
  api,
16770
16837
  sessionTag,
@@ -17053,6 +17120,22 @@ async function runCodex(opts) {
17053
17120
  process.stdin.setEncoding("utf8");
17054
17121
  }
17055
17122
  client = new CodexAppServerClient(sandboxConfig);
17123
+ const idleRelease = new CodexIdleReleaseTimer({
17124
+ delayMs: resolveCodexIdleReleaseMs(process.env[CODEX_IDLE_RELEASE_ENV]),
17125
+ isIdle: () => shouldReleaseIdleCodex({
17126
+ turnActive,
17127
+ queueSize: messageQueue.size(),
17128
+ shouldExit,
17129
+ abortInProgress: abortInProgress !== null
17130
+ }),
17131
+ release: async () => {
17132
+ const released = await client.releaseIdleProcess();
17133
+ if (released) {
17134
+ logger.debug("[Codex] Released idle app-server; thread kept for resume on next message");
17135
+ }
17136
+ },
17137
+ onError: (error) => logger.debug("[Codex] Idle app-server release failed", safeCodexErrorMetadata(error))
17138
+ });
17056
17139
  permissionHandler = new CodexPermissionHandler(session);
17057
17140
  permissionHandler.reset("Previous CLI process exited before responding");
17058
17141
  reasoningProcessor = new ReasoningProcessor((message) => {
@@ -17242,6 +17325,7 @@ async function runCodex(opts) {
17242
17325
  }
17243
17326
  }
17244
17327
  let pending = null;
17328
+ idleRelease.arm();
17245
17329
  while (!shouldExit) {
17246
17330
  logActiveHandles("loop-top");
17247
17331
  let message = pending;
@@ -17262,6 +17346,8 @@ async function runCodex(opts) {
17262
17346
  if (!message) {
17263
17347
  break;
17264
17348
  }
17349
+ idleRelease.cancel();
17350
+ turnActive = true;
17265
17351
  if (isCodexClearText(message.message)) {
17266
17352
  logger.debug("[Codex] Handling /clear command - resetting Codex thread state");
17267
17353
  client.clearThreadState();
@@ -17288,10 +17374,13 @@ async function runCodex(opts) {
17288
17374
  shouldExit,
17289
17375
  sendReady
17290
17376
  });
17377
+ turnActive = false;
17378
+ idleRelease.arm();
17291
17379
  continue;
17292
17380
  }
17293
17381
  messageBuffer.addMessage(message.message, "user");
17294
17382
  try {
17383
+ await client.ensureConnected();
17295
17384
  const sandboxManagedByHappy = client.sandboxEnabled;
17296
17385
  const executionPolicy = resolveCodexExecutionPolicy(
17297
17386
  message.mode.permissionMode,
@@ -17358,6 +17447,8 @@ async function runCodex(opts) {
17358
17447
  shouldExit,
17359
17448
  sendReady
17360
17449
  });
17450
+ turnActive = false;
17451
+ idleRelease.arm();
17361
17452
  logActiveHandles("after-turn");
17362
17453
  }
17363
17454
  }
@@ -17381,6 +17472,7 @@ async function runCodex(opts) {
17381
17472
  } catch (e) {
17382
17473
  logger.debug("[codex]: Error while closing session", safeCodexErrorMetadata(e));
17383
17474
  }
17475
+ idleRelease.cancel();
17384
17476
  logger.debug("[codex]: client.disconnect begin");
17385
17477
  await client.disconnect();
17386
17478
  logger.debug("[codex]: client.disconnect done");
@@ -17565,7 +17657,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17565
17657
  process.exit(0);
17566
17658
  } else if (subcommand === "install-terminal-hooks") {
17567
17659
  try {
17568
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-D0YRu_p-.mjs');
17660
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-DfUGgeyb.mjs');
17569
17661
  const command = parseTerminalHooksArgs(args.slice(1));
17570
17662
  if (command.action === "help") {
17571
17663
  console.log(TERMINAL_HOOKS_HELP);
@@ -17582,7 +17674,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17582
17674
  }
17583
17675
  } else if (subcommand === "spawn") {
17584
17676
  try {
17585
- const { handleSpawnCommand } = await import('./spawn-DuQXydqI.mjs');
17677
+ const { handleSpawnCommand } = await import('./spawn-DFfHCafP.mjs');
17586
17678
  await handleSpawnCommand(args.slice(1));
17587
17679
  } catch (error) {
17588
17680
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -17594,7 +17686,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17594
17686
  return;
17595
17687
  } else if (subcommand === "sessions") {
17596
17688
  try {
17597
- const { handleSessionsCommand } = await import('./sessions-BtrLzv5U.mjs');
17689
+ const { handleSessionsCommand } = await import('./sessions-DxlC4C4g.mjs');
17598
17690
  await handleSessionsCommand(args.slice(1));
17599
17691
  } catch (error) {
17600
17692
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -17606,7 +17698,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17606
17698
  return;
17607
17699
  } else if (subcommand === "send") {
17608
17700
  try {
17609
- const { handleSendCommand } = await import('./send-BHquPaeG.mjs');
17701
+ const { handleSendCommand } = await import('./send-snK_NGAA.mjs');
17610
17702
  await handleSendCommand(args.slice(1));
17611
17703
  } catch (error) {
17612
17704
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -17712,9 +17804,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17712
17804
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
17713
17805
  const projectId = args[3];
17714
17806
  try {
17715
- const { saveGoogleCloudProjectToConfig } = await import('./config-VqHQ67d8.mjs');
17716
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./limits-kjHZUlSp.mjs').then(function (n) { return n.W; });
17717
- const { ApiClient: ApiClient2 } = await import('./types-BKrZubg8.mjs').then(function (n) { return n.a0; });
17807
+ const { saveGoogleCloudProjectToConfig } = await import('./config-BRXqgJJj.mjs');
17808
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./limits-DEsg_gHi.mjs').then(function (n) { return n.W; });
17809
+ const { ApiClient: ApiClient2 } = await import('./types-D5EsIAOe.mjs').then(function (n) { return n.a0; });
17718
17810
  let userEmail = void 0;
17719
17811
  try {
17720
17812
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -17745,7 +17837,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17745
17837
  }
17746
17838
  if (geminiSubcommand === "project" && args[2] === "get") {
17747
17839
  try {
17748
- const { readGeminiLocalConfig } = await import('./config-VqHQ67d8.mjs');
17840
+ const { readGeminiLocalConfig } = await import('./config-BRXqgJJj.mjs');
17749
17841
  const config = readGeminiLocalConfig();
17750
17842
  if (config.googleCloudProject) {
17751
17843
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -17785,7 +17877,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17785
17877
  process.exit(0);
17786
17878
  }
17787
17879
  try {
17788
- const { runGemini } = await import('./runGemini-DufGnnl2.mjs');
17880
+ const { runGemini } = await import('./runGemini-BZ0xXRj-.mjs');
17789
17881
  let startedBy = void 0;
17790
17882
  for (let i = 1; i < args.length; i++) {
17791
17883
  if (args[i] === "--started-by") {
@@ -17815,7 +17907,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17815
17907
  }
17816
17908
  };
17817
17909
  try {
17818
- const { runAcp, resolveAcpAgentConfig } = await import('./index-D3vlFjXy.mjs');
17910
+ const { runAcp, resolveAcpAgentConfig } = await import('./index-DQe7ljLR.mjs');
17819
17911
  const parsed = parsePiRunnerArgs(args.slice(1));
17820
17912
  const resolved = resolveAcpAgentConfig(["pi", ...parsed.passthrough]);
17821
17913
  const { credentials } = await authAndSetupMachineIfNeeded();
@@ -17843,7 +17935,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17843
17935
  return;
17844
17936
  } else if (subcommand === "acp") {
17845
17937
  try {
17846
- const { runAcp, resolveAcpAgentConfig } = await import('./index-D3vlFjXy.mjs');
17938
+ const { runAcp, resolveAcpAgentConfig } = await import('./index-DQe7ljLR.mjs');
17847
17939
  let startedBy = void 0;
17848
17940
  let verbose = false;
17849
17941
  const acpArgs = [];
@@ -17883,7 +17975,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17883
17975
  return;
17884
17976
  } else if (subcommand === "openclaw") {
17885
17977
  try {
17886
- const { runOpenClaw } = await import('./runOpenClaw-DAl2nnjB.mjs');
17978
+ const { runOpenClaw } = await import('./runOpenClaw-BcUmnBpW.mjs');
17887
17979
  let startedBy = void 0;
17888
17980
  let verbose = false;
17889
17981
  let gatewayUrl;
@@ -17934,7 +18026,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17934
18026
  return;
17935
18027
  } else if (subcommand === "todo") {
17936
18028
  try {
17937
- const { handleTodoCommand } = await import('./todo-BiLIZH4t.mjs');
18029
+ const { handleTodoCommand } = await import('./todo-CU5cjQZU.mjs');
17938
18030
  await handleTodoCommand(args.slice(1));
17939
18031
  } catch (error) {
17940
18032
  console.error(JSON.stringify({ error: error instanceof Error ? error.message : "Todo command failed" }));
@@ -17943,7 +18035,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17943
18035
  return;
17944
18036
  } else if (subcommand === "teams") {
17945
18037
  try {
17946
- const { handleTeamsCommand } = await import('./teams-D5HxnyaW.mjs');
18038
+ const { handleTeamsCommand } = await import('./teams-Cfr-2Yd-.mjs');
17947
18039
  await handleTeamsCommand(args.slice(1));
17948
18040
  } catch (error) {
17949
18041
  console.error(error instanceof Error ? error.message : "Teams command failed");
@@ -17952,7 +18044,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
17952
18044
  return;
17953
18045
  } else if (subcommand === "mcp" && args.length === 1) {
17954
18046
  try {
17955
- const { handleMcpCommand } = await import('./mcp-CgjEHlky.mjs');
18047
+ const { handleMcpCommand } = await import('./mcp-UnjB3I8_.mjs');
17956
18048
  await handleMcpCommand();
17957
18049
  } catch (error) {
17958
18050
  process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
package/dist/index.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./index-8bwU9d-4.cjs');
5
- require('./limits-DRrdJ7gr.cjs');
4
+ require('./index-CRRK5P1r.cjs');
5
+ require('./limits-CfzVummd.cjs');
6
6
  require('zod');
7
- require('./types-DbBPNIwf.cjs');
7
+ require('./types-CRxf_3n8.cjs');
8
8
  require('node:child_process');
9
9
  require('node:os');
10
10
  require('node:crypto');
@@ -12,7 +12,7 @@ require('cross-spawn');
12
12
  require('node:path');
13
13
  require('node:readline');
14
14
  require('node:fs');
15
- require('./agentGuidance-6yh_wPwD.cjs');
15
+ require('./agentGuidance-4HV-BOge.cjs');
16
16
  require('node:fs/promises');
17
17
  require('fs/promises');
18
18
  require('ink');
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import 'chalk';
2
- import './index-CHI7iTa0.mjs';
3
- import './limits-kjHZUlSp.mjs';
2
+ import './index-Dbl5U_N0.mjs';
3
+ import './limits-DEsg_gHi.mjs';
4
4
  import 'zod';
5
- import './types-BKrZubg8.mjs';
5
+ import './types-D5EsIAOe.mjs';
6
6
  import 'node:child_process';
7
7
  import 'node:os';
8
8
  import 'node:crypto';
@@ -10,7 +10,7 @@ import 'cross-spawn';
10
10
  import 'node:path';
11
11
  import 'node:readline';
12
12
  import 'node:fs';
13
- import './agentGuidance-ASxKHxBP.mjs';
13
+ import './agentGuidance-WHZsBKpm.mjs';
14
14
  import 'node:fs/promises';
15
15
  import 'fs/promises';
16
16
  import 'ink';
@@ -5,10 +5,10 @@ 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 api = require('./types-DbBPNIwf.cjs');
9
- var index = require('./index-8bwU9d-4.cjs');
8
+ var api = require('./types-CRxf_3n8.cjs');
9
+ var index = require('./index-CRRK5P1r.cjs');
10
10
  require('axios');
11
- require('./limits-DRrdJ7gr.cjs');
11
+ require('./limits-CfzVummd.cjs');
12
12
  require('node:fs/promises');
13
13
  require('zod');
14
14
  require('node:crypto');
@@ -30,7 +30,7 @@ require('fs');
30
30
  require('node:readline');
31
31
  require('@anthropic-ai/sandbox-runtime');
32
32
  require('expo-server-sdk');
33
- require('./agentGuidance-6yh_wPwD.cjs');
33
+ require('./agentGuidance-4HV-BOge.cjs');
34
34
  require('ink');
35
35
  require('react');
36
36
  require('@anthropic-ai/claude-agent-sdk');
@@ -3,10 +3,10 @@ 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-BKrZubg8.mjs';
7
- import { t as tmuxSupportsSessionEnv } from './index-CHI7iTa0.mjs';
6
+ import { p as projectPath } from './types-D5EsIAOe.mjs';
7
+ import { t as tmuxSupportsSessionEnv } from './index-Dbl5U_N0.mjs';
8
8
  import 'axios';
9
- import './limits-kjHZUlSp.mjs';
9
+ import './limits-DEsg_gHi.mjs';
10
10
  import 'node:fs/promises';
11
11
  import 'zod';
12
12
  import 'node:crypto';
@@ -28,7 +28,7 @@ import 'fs';
28
28
  import 'node:readline';
29
29
  import '@anthropic-ai/sandbox-runtime';
30
30
  import 'expo-server-sdk';
31
- import './agentGuidance-ASxKHxBP.mjs';
31
+ import './agentGuidance-WHZsBKpm.mjs';
32
32
  import 'ink';
33
33
  import 'react';
34
34
  import '@anthropic-ai/claude-agent-sdk';
package/dist/lib.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var api = require('./types-DbBPNIwf.cjs');
4
- var persistence = require('./limits-DRrdJ7gr.cjs');
3
+ var api = require('./types-CRxf_3n8.cjs');
4
+ var persistence = require('./limits-CfzVummd.cjs');
5
5
  require('axios');
6
6
  require('node:events');
7
7
  require('socket.io-client');
package/dist/lib.mjs CHANGED
@@ -1,5 +1,5 @@
1
- export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-BKrZubg8.mjs';
2
- export { c as configuration, l as logger } from './limits-kjHZUlSp.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema } from './types-D5EsIAOe.mjs';
2
+ export { c as configuration, l as logger } from './limits-DEsg_gHi.mjs';
3
3
  import 'axios';
4
4
  import 'node:events';
5
5
  import 'socket.io-client';
@@ -30,7 +30,7 @@ function _interopNamespaceDefault(e) {
30
30
  var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
31
31
 
32
32
  var name = "very-happy-cli";
33
- var version = "0.2.136";
33
+ var version = "0.2.138";
34
34
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
35
35
  var author = "Kirill Dubovitskiy";
36
36
  var contributors = [
@@ -143,12 +143,12 @@ var dependencies = {
143
143
  zod: "^4.0.0"
144
144
  };
145
145
  var optionalDependencies = {
146
- "very-happy-tools-arm64-darwin": "0.2.136",
147
- "very-happy-tools-x64-darwin": "0.2.136",
148
- "very-happy-tools-arm64-linux": "0.2.136",
149
- "very-happy-tools-x64-linux": "0.2.136",
150
- "very-happy-tools-arm64-win32": "0.2.136",
151
- "very-happy-tools-x64-win32": "0.2.136"
146
+ "very-happy-tools-arm64-darwin": "0.2.138",
147
+ "very-happy-tools-x64-darwin": "0.2.138",
148
+ "very-happy-tools-arm64-linux": "0.2.138",
149
+ "very-happy-tools-x64-linux": "0.2.138",
150
+ "very-happy-tools-arm64-win32": "0.2.138",
151
+ "very-happy-tools-x64-win32": "0.2.138"
152
152
  };
153
153
  var devDependencies = {
154
154
  "@slopus/happy-wire": "workspace:*",
@@ -9,7 +9,7 @@ import chalk from 'chalk';
9
9
  import { inspect } from 'node:util';
10
10
 
11
11
  var name = "very-happy-cli";
12
- var version = "0.2.136";
12
+ var version = "0.2.138";
13
13
  var description = "Remote multi-agent workspace CLI with deep Claude integration, native terminal streaming, and self-hosting.";
14
14
  var author = "Kirill Dubovitskiy";
15
15
  var contributors = [
@@ -122,12 +122,12 @@ var dependencies = {
122
122
  zod: "^4.0.0"
123
123
  };
124
124
  var optionalDependencies = {
125
- "very-happy-tools-arm64-darwin": "0.2.136",
126
- "very-happy-tools-x64-darwin": "0.2.136",
127
- "very-happy-tools-arm64-linux": "0.2.136",
128
- "very-happy-tools-x64-linux": "0.2.136",
129
- "very-happy-tools-arm64-win32": "0.2.136",
130
- "very-happy-tools-x64-win32": "0.2.136"
125
+ "very-happy-tools-arm64-darwin": "0.2.138",
126
+ "very-happy-tools-x64-darwin": "0.2.138",
127
+ "very-happy-tools-arm64-linux": "0.2.138",
128
+ "very-happy-tools-x64-linux": "0.2.138",
129
+ "very-happy-tools-arm64-win32": "0.2.138",
130
+ "very-happy-tools-x64-win32": "0.2.138"
131
131
  };
132
132
  var devDependencies = {
133
133
  "@slopus/happy-wire": "workspace:*",
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var agentGuidance = require('./agentGuidance-6yh_wPwD.cjs');
3
+ var agentGuidance = require('./agentGuidance-4HV-BOge.cjs');
4
4
  var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
5
5
  var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
6
6
  var z = require('zod');
7
- var index = require('./index-8bwU9d-4.cjs');
8
- var persistence = require('./limits-DRrdJ7gr.cjs');
7
+ var index = require('./index-CRRK5P1r.cjs');
8
+ var persistence = require('./limits-CfzVummd.cjs');
9
9
  require('node:fs/promises');
10
10
  require('node:os');
11
11
  require('node:crypto');
@@ -13,7 +13,7 @@ require('axios');
13
13
  require('tweetnacl');
14
14
  require('socket.io-client');
15
15
  require('node:child_process');
16
- require('./types-DbBPNIwf.cjs');
16
+ require('./types-CRxf_3n8.cjs');
17
17
  require('node:fs');
18
18
  require('node:path');
19
19
  require('chalk');
@@ -1,9 +1,9 @@
1
- import { r as registerTeamsTools } from './agentGuidance-ASxKHxBP.mjs';
1
+ import { r as registerTeamsTools } from './agentGuidance-WHZsBKpm.mjs';
2
2
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
4
  import { z } from 'zod';
5
- import { p as pushClipboardViaDaemon, k as setTerminalTitleViaDaemon, m as registerAssistantSessionTools } from './index-CHI7iTa0.mjs';
6
- import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, e as CLIPBOARD_MAX_BYTES } from './limits-kjHZUlSp.mjs';
5
+ import { p as pushClipboardViaDaemon, k as setTerminalTitleViaDaemon, m as registerAssistantSessionTools } from './index-Dbl5U_N0.mjs';
6
+ import { l as logger, C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, e as CLIPBOARD_MAX_BYTES } from './limits-DEsg_gHi.mjs';
7
7
  import 'node:fs/promises';
8
8
  import 'node:os';
9
9
  import 'node:crypto';
@@ -11,7 +11,7 @@ import 'axios';
11
11
  import 'tweetnacl';
12
12
  import 'socket.io-client';
13
13
  import 'node:child_process';
14
- import './types-BKrZubg8.mjs';
14
+ import './types-D5EsIAOe.mjs';
15
15
  import 'node:fs';
16
16
  import 'node:path';
17
17
  import 'chalk';
@@ -4,11 +4,11 @@ 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 api = require('./types-DbBPNIwf.cjs');
8
- var persistence = require('./limits-DRrdJ7gr.cjs');
9
- var index = require('./index-8bwU9d-4.cjs');
10
- var AcpBackend = require('./AcpBackend-CRzu0_1Z.cjs');
11
- var config = require('./config--cxxmkOd.cjs');
7
+ var api = require('./types-CRxf_3n8.cjs');
8
+ var persistence = require('./limits-CfzVummd.cjs');
9
+ var index = require('./index-CRRK5P1r.cjs');
10
+ var AcpBackend = require('./AcpBackend-BUoDXZnv.cjs');
11
+ var config = require('./config-DpuZN2Rs.cjs');
12
12
  require('axios');
13
13
  require('node:events');
14
14
  require('socket.io-client');
@@ -34,7 +34,7 @@ require('@anthropic-ai/sandbox-runtime');
34
34
  require('expo-server-sdk');
35
35
  require('chalk');
36
36
  require('node:util');
37
- require('./agentGuidance-6yh_wPwD.cjs');
37
+ require('./agentGuidance-4HV-BOge.cjs');
38
38
  require('@anthropic-ai/claude-agent-sdk');
39
39
  require('ps-list');
40
40
  require('tmp');
@@ -2,11 +2,11 @@ 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 { f as connectionState, A as ApiClient, e as errorLogMetadata, p as projectPath, d as contentLogMetadata } from './types-BKrZubg8.mjs';
6
- import { l as logger, g as readSettings, i as encodeBase64 } from './limits-kjHZUlSp.mjs';
7
- import { Q as GEMINI_API_KEY_ENV, R as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, K as BasePermissionHandler, U as BaseReasoningProcessor, n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, B as hashObject, V as MessageBuffer, W as CHANGE_TITLE_INSTRUCTION, y as registerKillSessionHandler, C as startHappyServer } from './index-CHI7iTa0.mjs';
8
- import { A as AcpBackend } from './AcpBackend-C142vP3p.mjs';
9
- import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-VqHQ67d8.mjs';
5
+ import { f as connectionState, A as ApiClient, e as errorLogMetadata, p as projectPath, d as contentLogMetadata } from './types-D5EsIAOe.mjs';
6
+ import { l as logger, g as readSettings, i as encodeBase64 } from './limits-DEsg_gHi.mjs';
7
+ import { Q as GEMINI_API_KEY_ENV, R as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, K as BasePermissionHandler, U as BaseReasoningProcessor, n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, B as hashObject, V as MessageBuffer, W as CHANGE_TITLE_INSTRUCTION, y as registerKillSessionHandler, C as startHappyServer } from './index-Dbl5U_N0.mjs';
8
+ import { A as AcpBackend } from './AcpBackend-bqVGMkPh.mjs';
9
+ import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-BRXqgJJj.mjs';
10
10
  import 'axios';
11
11
  import 'node:events';
12
12
  import 'socket.io-client';
@@ -32,7 +32,7 @@ import '@anthropic-ai/sandbox-runtime';
32
32
  import 'expo-server-sdk';
33
33
  import 'chalk';
34
34
  import 'node:util';
35
- import './agentGuidance-ASxKHxBP.mjs';
35
+ import './agentGuidance-WHZsBKpm.mjs';
36
36
  import '@anthropic-ai/claude-agent-sdk';
37
37
  import 'ps-list';
38
38
  import 'tmp';
@@ -3,10 +3,10 @@ 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 { e as errorLogMetadata, d as contentLogMetadata, f as connectionState, A as ApiClient } from './types-BKrZubg8.mjs';
7
- import { A as AcpSessionManager } from './AcpSessionManager-CosTbAlR.mjs';
8
- import { f as ensurePrivateDirectorySync, h as hardenPrivateFileSync, w as writePrivateFileSync, g as readSettings, i as encodeBase64, l as logger, c as configuration } from './limits-kjHZUlSp.mjs';
9
- import { n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, y as registerKillSessionHandler } from './index-CHI7iTa0.mjs';
6
+ import { e as errorLogMetadata, d as contentLogMetadata, f as connectionState, A as ApiClient } from './types-D5EsIAOe.mjs';
7
+ import { A as AcpSessionManager } from './AcpSessionManager-BBAQ8EQf.mjs';
8
+ import { f as ensurePrivateDirectorySync, h as hardenPrivateFileSync, w as writePrivateFileSync, g as readSettings, i as encodeBase64, l as logger, c as configuration } from './limits-DEsg_gHi.mjs';
9
+ import { n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, y as registerKillSessionHandler } from './index-Dbl5U_N0.mjs';
10
10
  import WebSocket from 'ws';
11
11
  import * as ed from '@noble/ed25519';
12
12
  import { sha512 } from '@noble/hashes/sha2.js';
@@ -32,7 +32,7 @@ import '@anthropic-ai/sandbox-runtime';
32
32
  import 'expo-server-sdk';
33
33
  import 'chalk';
34
34
  import 'node:util';
35
- import './agentGuidance-ASxKHxBP.mjs';
35
+ import './agentGuidance-WHZsBKpm.mjs';
36
36
  import 'ink';
37
37
  import 'react';
38
38
  import '@anthropic-ai/claude-agent-sdk';
@@ -5,10 +5,10 @@ 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 api = require('./types-DbBPNIwf.cjs');
9
- var AcpSessionManager = require('./AcpSessionManager-Ba6WMLXc.cjs');
10
- var persistence = require('./limits-DRrdJ7gr.cjs');
11
- var index = require('./index-8bwU9d-4.cjs');
8
+ var api = require('./types-CRxf_3n8.cjs');
9
+ var AcpSessionManager = require('./AcpSessionManager-DmmA52Ep.cjs');
10
+ var persistence = require('./limits-CfzVummd.cjs');
11
+ var index = require('./index-CRRK5P1r.cjs');
12
12
  var WebSocket = require('ws');
13
13
  var ed = require('@noble/ed25519');
14
14
  var sha2_js = require('@noble/hashes/sha2.js');
@@ -34,7 +34,7 @@ require('@anthropic-ai/sandbox-runtime');
34
34
  require('expo-server-sdk');
35
35
  require('chalk');
36
36
  require('node:util');
37
- require('./agentGuidance-6yh_wPwD.cjs');
37
+ require('./agentGuidance-4HV-BOge.cjs');
38
38
  require('ink');
39
39
  require('react');
40
40
  require('@anthropic-ai/claude-agent-sdk');