very-happy-cli 0.2.89 → 0.2.90

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 (31) hide show
  1. package/dist/{AcpBackend-DuxcHPyn.mjs → AcpBackend-BV4wSnJ3.mjs} +1 -1
  2. package/dist/{AcpBackend-ClEvE-A-.cjs → AcpBackend-CnYZFdd0.cjs} +1 -1
  3. package/dist/{AcpSessionManager-DgbEf8FX.cjs → AcpSessionManager-BPBdrrME.cjs} +1 -1
  4. package/dist/{AcpSessionManager-CGrA8bTm.mjs → AcpSessionManager-Cyne6Rmg.mjs} +1 -1
  5. package/dist/{config-CdoGLla8.mjs → config-BEdyyciP.mjs} +2 -2
  6. package/dist/{config-BZNnPK1L.cjs → config-CgXitj0f.cjs} +2 -2
  7. package/dist/{index-DYDAFqAN.cjs → index-4YmVbx7j.cjs} +70 -24
  8. package/dist/{index-Bx-UTV3I.cjs → index-B1wTVXjt.cjs} +4 -4
  9. package/dist/{index-BP2wylez.mjs → index-Dfu5uvjk.mjs} +5 -5
  10. package/dist/{index-vCgb7QnZ.mjs → index-an09rejO.mjs} +67 -21
  11. package/dist/index.cjs +2 -2
  12. package/dist/index.mjs +2 -2
  13. package/dist/{installTerminalHooks-C7JS6CBM.mjs → installTerminalHooks-C-OgZr5k.mjs} +2 -2
  14. package/dist/{installTerminalHooks-T4NE5fmC.cjs → installTerminalHooks-DDpVxk8-.cjs} +2 -2
  15. package/dist/lib.cjs +1 -1
  16. package/dist/lib.d.cts +8 -0
  17. package/dist/lib.d.mts +8 -0
  18. package/dist/lib.mjs +1 -1
  19. package/dist/{mcp-DgPg5mKa.cjs → mcp-B6Nq-RUL.cjs} +2 -2
  20. package/dist/{mcp-B3EgenZh.mjs → mcp-Du-N0qlK.mjs} +2 -2
  21. package/dist/{runGemini-xZnGj7jx.cjs → runGemini-ChG7cGMC.cjs} +4 -4
  22. package/dist/{runGemini-B3iv1QRL.mjs → runGemini-DBr_TiTL.mjs} +4 -4
  23. package/dist/{runOpenClaw-CmM4ZLYi.mjs → runOpenClaw-Cbde8t92.mjs} +3 -3
  24. package/dist/{runOpenClaw-6ZLPeYYZ.cjs → runOpenClaw-D2jtVgpC.cjs} +3 -3
  25. package/dist/{send-M2ax7UGy.mjs → send-BHliX59m.mjs} +2 -2
  26. package/dist/{send-S9ibMiAt.cjs → send-Bjen1TUE.cjs} +2 -2
  27. package/dist/{spawn-ie_kfwQe.cjs → spawn-CH1Rq-LW.cjs} +2 -2
  28. package/dist/{spawn-Dx_xnLlg.mjs → spawn-JxaPHAoP.mjs} +2 -2
  29. package/dist/{types-DLI6sss2.cjs → types-BNGeiP1C.cjs} +62 -44
  30. package/dist/{types-d_104eQF.mjs → types-DS3i_5LV.mjs} +60 -44
  31. package/package.json +7 -7
@@ -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-d_104eQF.mjs';
4
+ import { l as logger, d as contentLogMetadata, e as errorLogMetadata, f as packageJson, g as delay } from './types-DS3i_5LV.mjs';
5
5
 
6
6
  const DEFAULT_TIMEOUTS = {
7
7
  /** Default initialization timeout: 60 seconds */
@@ -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-DLI6sss2.cjs');
6
+ var persistence = require('./types-BNGeiP1C.cjs');
7
7
 
8
8
  const DEFAULT_TIMEOUTS = {
9
9
  /** 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-DLI6sss2.cjs');
4
+ var persistence = require('./types-BNGeiP1C.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-d_104eQF.mjs';
2
+ import { b as createEnvelope } from './types-DS3i_5LV.mjs';
3
3
 
4
4
  function turnOptions(turnId, time) {
5
5
  return turnId ? { turn: turnId, time } : { time };
@@ -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-d_104eQF.mjs';
6
- import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-vCgb7QnZ.mjs';
5
+ import { l as logger } from './types-DS3i_5LV.mjs';
6
+ import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-an09rejO.mjs';
7
7
  import 'axios';
8
8
  import 'chalk';
9
9
  import 'node:util';
@@ -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-DLI6sss2.cjs');
8
- var index = require('./index-DYDAFqAN.cjs');
7
+ var persistence = require('./types-BNGeiP1C.cjs');
8
+ var index = require('./index-4YmVbx7j.cjs');
9
9
  require('axios');
10
10
  require('chalk');
11
11
  require('node:util');
@@ -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-DLI6sss2.cjs');
6
+ var persistence = require('./types-BNGeiP1C.cjs');
7
7
  var spawn = require('cross-spawn');
8
8
  var path = require('node:path');
9
9
  var node_readline = require('node:readline');
@@ -2087,6 +2087,8 @@ class PermissionHandler {
2087
2087
  setPermissionModeCallback;
2088
2088
  modeChangeQueue = Promise.resolve();
2089
2089
  deferredPermissionMode;
2090
+ /** Fired when an approval response (plan approval / approve-with-mode) moved the mode. */
2091
+ onModeChangedCallback;
2090
2092
  constructor(session) {
2091
2093
  this.session = session;
2092
2094
  this.setupClientHandler();
@@ -2100,6 +2102,18 @@ class PermissionHandler {
2100
2102
  handleModeChange(mode) {
2101
2103
  this.permissionMode = mapToClaudeMode(mode);
2102
2104
  }
2105
+ /** Current locally enforced mode (what canUseTool applies right now). */
2106
+ getPermissionMode() {
2107
+ return this.permissionMode;
2108
+ }
2109
+ /**
2110
+ * Observe mode transitions that originate inside the approval flow
2111
+ * (ExitPlanMode approval, approve-with-mode). Live/idle RPC changes and
2112
+ * queue-driven changes are owned by the launcher and do not fire this.
2113
+ */
2114
+ setOnModeChanged(callback) {
2115
+ this.onModeChangedCallback = callback;
2116
+ }
2103
2117
  /**
2104
2118
  * Set callback to dynamically change permission mode on the active query.
2105
2119
  * Called by claudeRemote after the Query object is created.
@@ -2188,9 +2202,10 @@ class PermissionHandler {
2188
2202
  updatedInput: persistence.contentLogMetadata(response.updatedInput)
2189
2203
  });
2190
2204
  if (response.approved) {
2191
- const newMode = response.mode && ["default", "acceptEdits", "bypassPermissions"].includes(response.mode) ? response.mode : "default";
2205
+ const newMode = response.mode && ["default", "acceptEdits", "bypassPermissions"].includes(response.mode) ? response.mode : "bypassPermissions";
2192
2206
  persistence.logger.debug(`Plan approved - allowing ExitPlanMode with ${newMode} as the local follow-up mode`);
2193
2207
  this.permissionMode = newMode;
2208
+ this.onModeChangedCallback?.(newMode);
2194
2209
  pending.resolve({ behavior: "allow", updatedInput: pending.input || {} });
2195
2210
  } else {
2196
2211
  pending.resolve({ behavior: "deny", message: response.reason || "Plan rejected" });
@@ -2201,6 +2216,7 @@ class PermissionHandler {
2201
2216
  if (!this.setPermissionModeCallback) throw new Error("permission mode updater unavailable");
2202
2217
  await this.setPermissionModeCallback(response.mode);
2203
2218
  this.permissionMode = response.mode;
2219
+ this.onModeChangedCallback?.(response.mode);
2204
2220
  } catch (err) {
2205
2221
  const reason = `Failed to switch permission mode: ${err instanceof Error ? err.message : String(err)}`;
2206
2222
  pending.resolve({ behavior: "deny", message: reason });
@@ -3373,16 +3389,23 @@ async function claudeRemoteLauncher(session, onPermissionModeChange) {
3373
3389
  });
3374
3390
  session.client.rpcHandlerManager.registerHandler("switch", doSwitch);
3375
3391
  let livePermissionModeHandler = null;
3392
+ let idlePermissionModeHandler = null;
3376
3393
  session.client.rpcHandlerManager.registerHandler(
3377
3394
  "set-permission-mode",
3378
3395
  async (request) => {
3379
3396
  const requestedMode = parseClaudePermissionMode(request?.mode);
3380
3397
  if (!requestedMode) throw new Error("Invalid Claude permission mode");
3381
- if (!livePermissionModeHandler) throw new Error("No active Claude query");
3382
- return { mode: await livePermissionModeHandler(requestedMode) };
3398
+ if (livePermissionModeHandler) return { mode: await livePermissionModeHandler(requestedMode) };
3399
+ if (idlePermissionModeHandler) return { mode: idlePermissionModeHandler(requestedMode) };
3400
+ throw new Error("No active Claude query");
3383
3401
  }
3384
3402
  );
3385
3403
  const permissionHandler = new PermissionHandler(session);
3404
+ idlePermissionModeHandler = (nextMode) => {
3405
+ permissionHandler.handleModeChange(nextMode);
3406
+ onPermissionModeChange?.(nextMode);
3407
+ return nextMode;
3408
+ };
3386
3409
  permissionHandler.reset("Previous CLI process exited before responding");
3387
3410
  const messageQueue = new OutgoingMessageQueue(
3388
3411
  (logMessage) => session.client.sendClaudeSessionMessage(logMessage)
@@ -3532,6 +3555,19 @@ async function claudeRemoteLauncher(session, onPermissionModeChange) {
3532
3555
  abortFuture = new Future();
3533
3556
  let modeHash = null;
3534
3557
  let mode = null;
3558
+ const commitPermissionMode = (nextMode) => {
3559
+ permissionHandler.handleModeChange(nextMode);
3560
+ if (mode) {
3561
+ mode = { ...mode, permissionMode: nextMode };
3562
+ modeHash = session.queue.modeHasher(mode);
3563
+ }
3564
+ onPermissionModeChange?.(nextMode);
3565
+ return nextMode;
3566
+ };
3567
+ idlePermissionModeHandler = commitPermissionMode;
3568
+ permissionHandler.setOnModeChanged((nextMode) => {
3569
+ commitPermissionMode(nextMode);
3570
+ });
3535
3571
  try {
3536
3572
  const attachmentDirectory = chatAttachmentDirectory(persistence.configuration.happyHomeDir, session.client.sessionId);
3537
3573
  await persistence.ensurePrivateDirectory(attachmentDirectory);
@@ -6636,7 +6672,7 @@ function createMirrorManager(deps) {
6636
6672
  let chain = Promise.resolve();
6637
6673
  const isTerminalAlive = deps.isTerminalAlive ?? ((terminalId) => {
6638
6674
  try {
6639
- return node_child_process.spawnSync("tmux", ["has-session", "-t", `=vh-${terminalId}:`], { stdio: "ignore", timeout: 3e3 }).status === 0;
6675
+ return node_child_process.spawnSync("tmux", persistence.tmuxArgs(["has-session", "-t", `=vh-${terminalId}:`]), { stdio: "ignore", timeout: 3e3, env: persistence.scrubTmuxClientEnv({ ...process.env }) }).status === 0;
6640
6676
  } catch {
6641
6677
  return false;
6642
6678
  }
@@ -8807,7 +8843,7 @@ const MAX_TITLE_CHARS = 60;
8807
8843
  const GENERATION_TIMEOUT_MS = 3e4;
8808
8844
  function resolveClaudeBinary() {
8809
8845
  try {
8810
- 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-DYDAFqAN.cjs', document.baseURI).href)));
8846
+ 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-4YmVbx7j.cjs', document.baseURI).href)));
8811
8847
  const utilsPath = path.resolve(path.join(persistence.projectPath(), "scripts", "claude_version_utils.cjs"));
8812
8848
  const { getClaudeCliPath } = require$1(utilsPath);
8813
8849
  const path$1 = getClaudeCliPath();
@@ -9264,7 +9300,10 @@ async function runClaude(credentials, options = {}) {
9264
9300
  // a brand-new session cannot pick a PDF until after sending once.
9265
9301
  attachmentKinds: [...CLAUDE_ATTACHMENT_KINDS],
9266
9302
  queueCancellation: true,
9267
- capabilities: ["claude-steer-v1", "claude-live-permission-v1"],
9303
+ capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2"],
9304
+ // Effective mode this process enforces. Kept current by
9305
+ // publishPermissionMode below; the web renders it instead of guessing.
9306
+ permissionMode: mapToClaudeMode(initialPermissionMode ?? "default"),
9268
9307
  sandbox: sandboxConfig?.enabled ? sandboxConfig : null,
9269
9308
  dangerouslySkipPermissions,
9270
9309
  ...forkedFromSessionId ? { parentSessionId: forkedFromSessionId } : {},
@@ -9501,6 +9540,14 @@ async function runClaude(credentials, options = {}) {
9501
9540
  )
9502
9541
  }));
9503
9542
  let currentPermissionMode = initialPermissionMode;
9543
+ let publishedPermissionMode = mapToClaudeMode(initialPermissionMode ?? "default");
9544
+ const publishPermissionMode = (mode) => {
9545
+ currentPermissionMode = mode;
9546
+ const published = mapToClaudeMode(mode ?? "default");
9547
+ if (published === publishedPermissionMode) return;
9548
+ publishedPermissionMode = published;
9549
+ session.updateMetadata((meta) => ({ ...meta, permissionMode: published }));
9550
+ };
9504
9551
  let currentModel = options.model ?? DEFAULT_CLAUDE_MODEL;
9505
9552
  let currentFallbackModel = void 0;
9506
9553
  let currentCustomSystemPrompt = void 0;
@@ -9509,7 +9556,6 @@ async function runClaude(credentials, options = {}) {
9509
9556
  let currentDisallowedTools = withAssistantDenylist(void 0, isAssistantVariant);
9510
9557
  let currentEffort = DEFAULT_CLAUDE_EFFORT;
9511
9558
  const resetCurrentModeDefaults = () => {
9512
- currentPermissionMode = initialPermissionMode;
9513
9559
  currentModel = options.model ?? DEFAULT_CLAUDE_MODEL;
9514
9560
  currentFallbackModel = void 0;
9515
9561
  currentCustomSystemPrompt = void 0;
@@ -9553,7 +9599,7 @@ async function runClaude(credentials, options = {}) {
9553
9599
  message.meta.permissionMode,
9554
9600
  sandboxEnabled
9555
9601
  );
9556
- currentPermissionMode = messagePermissionMode;
9602
+ publishPermissionMode(messagePermissionMode);
9557
9603
  const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta.permissionMode === "default" && currentPermissionMode === previousPermissionMode;
9558
9604
  if (ignoredDefaultDowngrade) {
9559
9605
  persistence.logger.debug(`[loop] Ignoring permission mode downgrade from ${previousPermissionMode} to default`);
@@ -9810,8 +9856,8 @@ async function runClaude(credentials, options = {}) {
9810
9856
  },
9811
9857
  onAbort: resetCurrentModeDefaults,
9812
9858
  onPermissionModeChange: (mode) => {
9813
- currentPermissionMode = mode;
9814
- persistence.logger.debug(`[loop] Permission mode updated from live session RPC to: ${mode}`);
9859
+ publishPermissionMode(mode);
9860
+ persistence.logger.debug(`[loop] Permission mode updated from session RPC / approval to: ${mode}`);
9815
9861
  },
9816
9862
  mcpServers: {
9817
9863
  "happy": {
@@ -10955,9 +11001,9 @@ function resolveLocalSignupBootstrap(configuredMode, configuredInviteCodes, gene
10955
11001
  };
10956
11002
  }
10957
11003
 
10958
- 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-DYDAFqAN.cjs', document.baseURI).href)));
11004
+ 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-4YmVbx7j.cjs', document.baseURI).href)));
10959
11005
  const __dirname$1 = path.dirname(__filename$1);
10960
- const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-DYDAFqAN.cjs', document.baseURI).href)));
11006
+ const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-4YmVbx7j.cjs', document.baseURI).href)));
10961
11007
  const PRISMA_QUERY_ENGINE_FILES = {
10962
11008
  "arm64-darwin": "libquery_engine-darwin-arm64.dylib.node",
10963
11009
  "x64-darwin": "libquery_engine-darwin.dylib.node",
@@ -13569,7 +13615,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13569
13615
  process.exit(0);
13570
13616
  } else if (subcommand === "install-terminal-hooks") {
13571
13617
  try {
13572
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-T4NE5fmC.cjs'); });
13618
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-DDpVxk8-.cjs'); });
13573
13619
  const command = parseTerminalHooksArgs(args.slice(1));
13574
13620
  if (command.action === "help") {
13575
13621
  console.log(TERMINAL_HOOKS_HELP);
@@ -13586,7 +13632,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13586
13632
  }
13587
13633
  } else if (subcommand === "spawn") {
13588
13634
  try {
13589
- const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-ie_kfwQe.cjs'); });
13635
+ const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-CH1Rq-LW.cjs'); });
13590
13636
  await handleSpawnCommand(args.slice(1));
13591
13637
  } catch (error) {
13592
13638
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -13598,7 +13644,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13598
13644
  return;
13599
13645
  } else if (subcommand === "send") {
13600
13646
  try {
13601
- const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-S9ibMiAt.cjs'); });
13647
+ const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-Bjen1TUE.cjs'); });
13602
13648
  await handleSendCommand(args.slice(1));
13603
13649
  } catch (error) {
13604
13650
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -13704,9 +13750,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13704
13750
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
13705
13751
  const projectId = args[3];
13706
13752
  try {
13707
- const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-BZNnPK1L.cjs'); });
13708
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-DLI6sss2.cjs'); }).then(function (n) { return n.persistence; });
13709
- const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-DLI6sss2.cjs'); }).then(function (n) { return n.api; });
13753
+ const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-CgXitj0f.cjs'); });
13754
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-BNGeiP1C.cjs'); }).then(function (n) { return n.persistence; });
13755
+ const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-BNGeiP1C.cjs'); }).then(function (n) { return n.api; });
13710
13756
  let userEmail = void 0;
13711
13757
  try {
13712
13758
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -13737,7 +13783,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13737
13783
  }
13738
13784
  if (geminiSubcommand === "project" && args[2] === "get") {
13739
13785
  try {
13740
- const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-BZNnPK1L.cjs'); });
13786
+ const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-CgXitj0f.cjs'); });
13741
13787
  const config = readGeminiLocalConfig();
13742
13788
  if (config.googleCloudProject) {
13743
13789
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -13777,7 +13823,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13777
13823
  process.exit(0);
13778
13824
  }
13779
13825
  try {
13780
- const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-xZnGj7jx.cjs'); });
13826
+ const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-ChG7cGMC.cjs'); });
13781
13827
  let startedBy = void 0;
13782
13828
  for (let i = 1; i < args.length; i++) {
13783
13829
  if (args[i] === "--started-by") {
@@ -13799,7 +13845,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13799
13845
  return;
13800
13846
  } else if (subcommand === "acp") {
13801
13847
  try {
13802
- const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-Bx-UTV3I.cjs'); });
13848
+ const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-B1wTVXjt.cjs'); });
13803
13849
  let startedBy = void 0;
13804
13850
  let verbose = false;
13805
13851
  const acpArgs = [];
@@ -13839,7 +13885,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13839
13885
  return;
13840
13886
  } else if (subcommand === "openclaw") {
13841
13887
  try {
13842
- const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-6ZLPeYYZ.cjs'); });
13888
+ const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-D2jtVgpC.cjs'); });
13843
13889
  let startedBy = void 0;
13844
13890
  let verbose = false;
13845
13891
  let gatewayUrl;
@@ -13890,7 +13936,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13890
13936
  return;
13891
13937
  } else if (subcommand === "mcp" && args.length === 1) {
13892
13938
  try {
13893
- const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-DgPg5mKa.cjs'); });
13939
+ const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-B6Nq-RUL.cjs'); });
13894
13940
  await handleMcpCommand();
13895
13941
  } catch (error) {
13896
13942
  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-ClEvE-A-.cjs');
4
- var persistence = require('./types-DLI6sss2.cjs');
5
- var AcpSessionManager = require('./AcpSessionManager-DgbEf8FX.cjs');
3
+ var AcpBackend = require('./AcpBackend-CnYZFdd0.cjs');
4
+ var persistence = require('./types-BNGeiP1C.cjs');
5
+ var AcpSessionManager = require('./AcpSessionManager-BPBdrrME.cjs');
6
6
  var node_crypto = require('node:crypto');
7
7
  var path = require('node:path');
8
- var index = require('./index-DYDAFqAN.cjs');
8
+ var index = require('./index-4YmVbx7j.cjs');
9
9
  require('node:child_process');
10
10
  require('@agentclientprotocol/sdk');
11
11
  require('axios');
@@ -1,10 +1,10 @@
1
- import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-DuxcHPyn.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-DuxcHPyn.mjs';
3
- import { h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, p as projectPath } from './types-d_104eQF.mjs';
4
- import { A as AcpSessionManager } from './AcpSessionManager-CGrA8bTm.mjs';
1
+ import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-BV4wSnJ3.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-BV4wSnJ3.mjs';
3
+ import { h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, p as projectPath } from './types-DS3i_5LV.mjs';
4
+ import { A as AcpSessionManager } from './AcpSessionManager-Cyne6Rmg.mjs';
5
5
  import { randomUUID } from 'node:crypto';
6
6
  import { join } from 'node:path';
7
- import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, f as startHappyServer, r as registerKillSessionHandler, B as BasePermissionHandler } from './index-vCgb7QnZ.mjs';
7
+ import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, f as startHappyServer, r as registerKillSessionHandler, B as BasePermissionHandler } from './index-an09rejO.mjs';
8
8
  import 'node:child_process';
9
9
  import '@agentclientprotocol/sdk';
10
10
  import 'axios';
@@ -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 } from 'node:os';
3
3
  import { randomUUID, randomBytes, createHash as createHash$1, timingSafeEqual } from 'node:crypto';
4
- import { n as readDaemonState, l as logger, c as configuration, o as clearDaemonState, q as getProjectPath, p as projectPath, s as initializeSandbox, t as wrapCommand, d as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, g as delay, u as AsyncLock, v as ensurePrivateDirectory, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, x as hardenPrivateFile, f as packageJson, i as readSettings, y as readCredentials, z as credentialRelayProblem, B as deriveLocalCliUpdateSummary, j as encodeBase64, C as updateSettings, D as encodeBase64Url, E as decodeBase64, F as writeCredentialsLegacy, G as writeCredentialsDataKey, H as readCredentialsForConfiguredRelay, J as encrypt, r as readPersistedSessions, K as getLocalHappyAgentCredentialPath, L as readLocalHappyAgentCredentials, N as decryptWithDataKey, O as decryptLegacy, P as extractCompleteLines, Q as decideBackfill, S as parseTerminalHookPayload, T as decideMirrorBinding, U as persistSession, V as MIRROR_BACKFILL_LINES_DEFAULT, W as mirrorLineKey, X as mirrorLocalId, Y as detectResumeSupport, Z as detectCLIAvailability, _ as acquireDaemonLock, $ as summarizeSpawnSessionForLog, a0 as deletePersistedSessions, a1 as decrypt, a2 as writeDaemonState, A as ApiClient, a3 as fetchCliUpdateState, a4 as resolveCliUpdateCheckInterval, a5 as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, a6 as releaseDaemonLock, a7 as isValidSessionId, a8 as listVhTerminals, a9 as isValidTerminalId, aa as readVhTerminal, ab as sendToVhTerminal, h as connectionState, ac as startOfflineReconnection, ad as clearCredentials, ae as clearMachineId, k as ensurePrivateDirectorySync, w as writePrivateFileSync, af as SandboxConfigSchema, b as createEnvelope, ag as CodexAppServerClient, ah as getLatestDaemonLog } from './types-d_104eQF.mjs';
4
+ import { n as readDaemonState, l as logger, c as configuration, o as clearDaemonState, q as getProjectPath, p as projectPath, s as initializeSandbox, t as wrapCommand, d as contentLogMetadata, I as InvalidateSync, R as RawJSONLinesSchema, g as delay, u as AsyncLock, v as ensurePrivateDirectory, M as MAX_CHAT_ATTACHMENT_SOURCE_BYTES, x as hardenPrivateFile, f as packageJson, i as readSettings, y as readCredentials, z as credentialRelayProblem, B as deriveLocalCliUpdateSummary, j as encodeBase64, C as updateSettings, D as encodeBase64Url, E as decodeBase64, F as writeCredentialsLegacy, G as writeCredentialsDataKey, H as readCredentialsForConfiguredRelay, J as encrypt, r as readPersistedSessions, K as getLocalHappyAgentCredentialPath, L as readLocalHappyAgentCredentials, N as decryptWithDataKey, O as decryptLegacy, P as extractCompleteLines, Q as decideBackfill, S as parseTerminalHookPayload, T as tmuxArgs, U as scrubTmuxClientEnv, V as decideMirrorBinding, W as persistSession, X as MIRROR_BACKFILL_LINES_DEFAULT, Y as mirrorLineKey, Z as mirrorLocalId, _ as detectResumeSupport, $ as detectCLIAvailability, a0 as acquireDaemonLock, a1 as summarizeSpawnSessionForLog, a2 as deletePersistedSessions, a3 as decrypt, a4 as writeDaemonState, A as ApiClient, a5 as fetchCliUpdateState, a6 as resolveCliUpdateCheckInterval, a7 as DEFAULT_CLI_UPDATE_CHECK_INTERVAL_MS, a8 as releaseDaemonLock, a9 as isValidSessionId, aa as listVhTerminals, ab as isValidTerminalId, ac as readVhTerminal, ad as sendToVhTerminal, h as connectionState, ae as startOfflineReconnection, af as clearCredentials, ag as clearMachineId, k as ensurePrivateDirectorySync, w as writePrivateFileSync, ah as SandboxConfigSchema, b as createEnvelope, ai as CodexAppServerClient, aj as getLatestDaemonLog } from './types-DS3i_5LV.mjs';
5
5
  import spawn$1, { spawn } from 'cross-spawn';
6
6
  import path, { join, resolve, basename, isAbsolute, normalize, sep, dirname } from 'node:path';
7
7
  import { createInterface } from 'node:readline';
@@ -2065,6 +2065,8 @@ class PermissionHandler {
2065
2065
  setPermissionModeCallback;
2066
2066
  modeChangeQueue = Promise.resolve();
2067
2067
  deferredPermissionMode;
2068
+ /** Fired when an approval response (plan approval / approve-with-mode) moved the mode. */
2069
+ onModeChangedCallback;
2068
2070
  constructor(session) {
2069
2071
  this.session = session;
2070
2072
  this.setupClientHandler();
@@ -2078,6 +2080,18 @@ class PermissionHandler {
2078
2080
  handleModeChange(mode) {
2079
2081
  this.permissionMode = mapToClaudeMode(mode);
2080
2082
  }
2083
+ /** Current locally enforced mode (what canUseTool applies right now). */
2084
+ getPermissionMode() {
2085
+ return this.permissionMode;
2086
+ }
2087
+ /**
2088
+ * Observe mode transitions that originate inside the approval flow
2089
+ * (ExitPlanMode approval, approve-with-mode). Live/idle RPC changes and
2090
+ * queue-driven changes are owned by the launcher and do not fire this.
2091
+ */
2092
+ setOnModeChanged(callback) {
2093
+ this.onModeChangedCallback = callback;
2094
+ }
2081
2095
  /**
2082
2096
  * Set callback to dynamically change permission mode on the active query.
2083
2097
  * Called by claudeRemote after the Query object is created.
@@ -2166,9 +2180,10 @@ class PermissionHandler {
2166
2180
  updatedInput: contentLogMetadata(response.updatedInput)
2167
2181
  });
2168
2182
  if (response.approved) {
2169
- const newMode = response.mode && ["default", "acceptEdits", "bypassPermissions"].includes(response.mode) ? response.mode : "default";
2183
+ const newMode = response.mode && ["default", "acceptEdits", "bypassPermissions"].includes(response.mode) ? response.mode : "bypassPermissions";
2170
2184
  logger.debug(`Plan approved - allowing ExitPlanMode with ${newMode} as the local follow-up mode`);
2171
2185
  this.permissionMode = newMode;
2186
+ this.onModeChangedCallback?.(newMode);
2172
2187
  pending.resolve({ behavior: "allow", updatedInput: pending.input || {} });
2173
2188
  } else {
2174
2189
  pending.resolve({ behavior: "deny", message: response.reason || "Plan rejected" });
@@ -2179,6 +2194,7 @@ class PermissionHandler {
2179
2194
  if (!this.setPermissionModeCallback) throw new Error("permission mode updater unavailable");
2180
2195
  await this.setPermissionModeCallback(response.mode);
2181
2196
  this.permissionMode = response.mode;
2197
+ this.onModeChangedCallback?.(response.mode);
2182
2198
  } catch (err) {
2183
2199
  const reason = `Failed to switch permission mode: ${err instanceof Error ? err.message : String(err)}`;
2184
2200
  pending.resolve({ behavior: "deny", message: reason });
@@ -3351,16 +3367,23 @@ async function claudeRemoteLauncher(session, onPermissionModeChange) {
3351
3367
  });
3352
3368
  session.client.rpcHandlerManager.registerHandler("switch", doSwitch);
3353
3369
  let livePermissionModeHandler = null;
3370
+ let idlePermissionModeHandler = null;
3354
3371
  session.client.rpcHandlerManager.registerHandler(
3355
3372
  "set-permission-mode",
3356
3373
  async (request) => {
3357
3374
  const requestedMode = parseClaudePermissionMode(request?.mode);
3358
3375
  if (!requestedMode) throw new Error("Invalid Claude permission mode");
3359
- if (!livePermissionModeHandler) throw new Error("No active Claude query");
3360
- return { mode: await livePermissionModeHandler(requestedMode) };
3376
+ if (livePermissionModeHandler) return { mode: await livePermissionModeHandler(requestedMode) };
3377
+ if (idlePermissionModeHandler) return { mode: idlePermissionModeHandler(requestedMode) };
3378
+ throw new Error("No active Claude query");
3361
3379
  }
3362
3380
  );
3363
3381
  const permissionHandler = new PermissionHandler(session);
3382
+ idlePermissionModeHandler = (nextMode) => {
3383
+ permissionHandler.handleModeChange(nextMode);
3384
+ onPermissionModeChange?.(nextMode);
3385
+ return nextMode;
3386
+ };
3364
3387
  permissionHandler.reset("Previous CLI process exited before responding");
3365
3388
  const messageQueue = new OutgoingMessageQueue(
3366
3389
  (logMessage) => session.client.sendClaudeSessionMessage(logMessage)
@@ -3510,6 +3533,19 @@ async function claudeRemoteLauncher(session, onPermissionModeChange) {
3510
3533
  abortFuture = new Future();
3511
3534
  let modeHash = null;
3512
3535
  let mode = null;
3536
+ const commitPermissionMode = (nextMode) => {
3537
+ permissionHandler.handleModeChange(nextMode);
3538
+ if (mode) {
3539
+ mode = { ...mode, permissionMode: nextMode };
3540
+ modeHash = session.queue.modeHasher(mode);
3541
+ }
3542
+ onPermissionModeChange?.(nextMode);
3543
+ return nextMode;
3544
+ };
3545
+ idlePermissionModeHandler = commitPermissionMode;
3546
+ permissionHandler.setOnModeChanged((nextMode) => {
3547
+ commitPermissionMode(nextMode);
3548
+ });
3513
3549
  try {
3514
3550
  const attachmentDirectory = chatAttachmentDirectory(configuration.happyHomeDir, session.client.sessionId);
3515
3551
  await ensurePrivateDirectory(attachmentDirectory);
@@ -6614,7 +6650,7 @@ function createMirrorManager(deps) {
6614
6650
  let chain = Promise.resolve();
6615
6651
  const isTerminalAlive = deps.isTerminalAlive ?? ((terminalId) => {
6616
6652
  try {
6617
- return spawnSync("tmux", ["has-session", "-t", `=vh-${terminalId}:`], { stdio: "ignore", timeout: 3e3 }).status === 0;
6653
+ return spawnSync("tmux", tmuxArgs(["has-session", "-t", `=vh-${terminalId}:`]), { stdio: "ignore", timeout: 3e3, env: scrubTmuxClientEnv({ ...process.env }) }).status === 0;
6618
6654
  } catch {
6619
6655
  return false;
6620
6656
  }
@@ -9242,7 +9278,10 @@ async function runClaude(credentials, options = {}) {
9242
9278
  // a brand-new session cannot pick a PDF until after sending once.
9243
9279
  attachmentKinds: [...CLAUDE_ATTACHMENT_KINDS],
9244
9280
  queueCancellation: true,
9245
- capabilities: ["claude-steer-v1", "claude-live-permission-v1"],
9281
+ capabilities: ["claude-steer-v1", "claude-live-permission-v1", "claude-live-permission-v2"],
9282
+ // Effective mode this process enforces. Kept current by
9283
+ // publishPermissionMode below; the web renders it instead of guessing.
9284
+ permissionMode: mapToClaudeMode(initialPermissionMode ?? "default"),
9246
9285
  sandbox: sandboxConfig?.enabled ? sandboxConfig : null,
9247
9286
  dangerouslySkipPermissions,
9248
9287
  ...forkedFromSessionId ? { parentSessionId: forkedFromSessionId } : {},
@@ -9479,6 +9518,14 @@ async function runClaude(credentials, options = {}) {
9479
9518
  )
9480
9519
  }));
9481
9520
  let currentPermissionMode = initialPermissionMode;
9521
+ let publishedPermissionMode = mapToClaudeMode(initialPermissionMode ?? "default");
9522
+ const publishPermissionMode = (mode) => {
9523
+ currentPermissionMode = mode;
9524
+ const published = mapToClaudeMode(mode ?? "default");
9525
+ if (published === publishedPermissionMode) return;
9526
+ publishedPermissionMode = published;
9527
+ session.updateMetadata((meta) => ({ ...meta, permissionMode: published }));
9528
+ };
9482
9529
  let currentModel = options.model ?? DEFAULT_CLAUDE_MODEL;
9483
9530
  let currentFallbackModel = void 0;
9484
9531
  let currentCustomSystemPrompt = void 0;
@@ -9487,7 +9534,6 @@ async function runClaude(credentials, options = {}) {
9487
9534
  let currentDisallowedTools = withAssistantDenylist(void 0, isAssistantVariant);
9488
9535
  let currentEffort = DEFAULT_CLAUDE_EFFORT;
9489
9536
  const resetCurrentModeDefaults = () => {
9490
- currentPermissionMode = initialPermissionMode;
9491
9537
  currentModel = options.model ?? DEFAULT_CLAUDE_MODEL;
9492
9538
  currentFallbackModel = void 0;
9493
9539
  currentCustomSystemPrompt = void 0;
@@ -9531,7 +9577,7 @@ async function runClaude(credentials, options = {}) {
9531
9577
  message.meta.permissionMode,
9532
9578
  sandboxEnabled
9533
9579
  );
9534
- currentPermissionMode = messagePermissionMode;
9580
+ publishPermissionMode(messagePermissionMode);
9535
9581
  const ignoredDefaultDowngrade = (previousPermissionMode === "bypassPermissions" || previousPermissionMode === "yolo") && message.meta.permissionMode === "default" && currentPermissionMode === previousPermissionMode;
9536
9582
  if (ignoredDefaultDowngrade) {
9537
9583
  logger.debug(`[loop] Ignoring permission mode downgrade from ${previousPermissionMode} to default`);
@@ -9788,8 +9834,8 @@ async function runClaude(credentials, options = {}) {
9788
9834
  },
9789
9835
  onAbort: resetCurrentModeDefaults,
9790
9836
  onPermissionModeChange: (mode) => {
9791
- currentPermissionMode = mode;
9792
- logger.debug(`[loop] Permission mode updated from live session RPC to: ${mode}`);
9837
+ publishPermissionMode(mode);
9838
+ logger.debug(`[loop] Permission mode updated from session RPC / approval to: ${mode}`);
9793
9839
  },
9794
9840
  mcpServers: {
9795
9841
  "happy": {
@@ -13547,7 +13593,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13547
13593
  process.exit(0);
13548
13594
  } else if (subcommand === "install-terminal-hooks") {
13549
13595
  try {
13550
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-C7JS6CBM.mjs');
13596
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-C-OgZr5k.mjs');
13551
13597
  const command = parseTerminalHooksArgs(args.slice(1));
13552
13598
  if (command.action === "help") {
13553
13599
  console.log(TERMINAL_HOOKS_HELP);
@@ -13564,7 +13610,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13564
13610
  }
13565
13611
  } else if (subcommand === "spawn") {
13566
13612
  try {
13567
- const { handleSpawnCommand } = await import('./spawn-Dx_xnLlg.mjs');
13613
+ const { handleSpawnCommand } = await import('./spawn-JxaPHAoP.mjs');
13568
13614
  await handleSpawnCommand(args.slice(1));
13569
13615
  } catch (error) {
13570
13616
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -13576,7 +13622,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13576
13622
  return;
13577
13623
  } else if (subcommand === "send") {
13578
13624
  try {
13579
- const { handleSendCommand } = await import('./send-M2ax7UGy.mjs');
13625
+ const { handleSendCommand } = await import('./send-BHliX59m.mjs');
13580
13626
  await handleSendCommand(args.slice(1));
13581
13627
  } catch (error) {
13582
13628
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -13682,9 +13728,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13682
13728
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
13683
13729
  const projectId = args[3];
13684
13730
  try {
13685
- const { saveGoogleCloudProjectToConfig } = await import('./config-CdoGLla8.mjs');
13686
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-d_104eQF.mjs').then(function (n) { return n.ai; });
13687
- const { ApiClient: ApiClient2 } = await import('./types-d_104eQF.mjs').then(function (n) { return n.aj; });
13731
+ const { saveGoogleCloudProjectToConfig } = await import('./config-BEdyyciP.mjs');
13732
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-DS3i_5LV.mjs').then(function (n) { return n.ak; });
13733
+ const { ApiClient: ApiClient2 } = await import('./types-DS3i_5LV.mjs').then(function (n) { return n.al; });
13688
13734
  let userEmail = void 0;
13689
13735
  try {
13690
13736
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -13715,7 +13761,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13715
13761
  }
13716
13762
  if (geminiSubcommand === "project" && args[2] === "get") {
13717
13763
  try {
13718
- const { readGeminiLocalConfig } = await import('./config-CdoGLla8.mjs');
13764
+ const { readGeminiLocalConfig } = await import('./config-BEdyyciP.mjs');
13719
13765
  const config = readGeminiLocalConfig();
13720
13766
  if (config.googleCloudProject) {
13721
13767
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -13755,7 +13801,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13755
13801
  process.exit(0);
13756
13802
  }
13757
13803
  try {
13758
- const { runGemini } = await import('./runGemini-B3iv1QRL.mjs');
13804
+ const { runGemini } = await import('./runGemini-DBr_TiTL.mjs');
13759
13805
  let startedBy = void 0;
13760
13806
  for (let i = 1; i < args.length; i++) {
13761
13807
  if (args[i] === "--started-by") {
@@ -13777,7 +13823,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13777
13823
  return;
13778
13824
  } else if (subcommand === "acp") {
13779
13825
  try {
13780
- const { runAcp, resolveAcpAgentConfig } = await import('./index-BP2wylez.mjs');
13826
+ const { runAcp, resolveAcpAgentConfig } = await import('./index-Dfu5uvjk.mjs');
13781
13827
  let startedBy = void 0;
13782
13828
  let verbose = false;
13783
13829
  const acpArgs = [];
@@ -13817,7 +13863,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13817
13863
  return;
13818
13864
  } else if (subcommand === "openclaw") {
13819
13865
  try {
13820
- const { runOpenClaw } = await import('./runOpenClaw-CmM4ZLYi.mjs');
13866
+ const { runOpenClaw } = await import('./runOpenClaw-Cbde8t92.mjs');
13821
13867
  let startedBy = void 0;
13822
13868
  let verbose = false;
13823
13869
  let gatewayUrl;
@@ -13868,7 +13914,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13868
13914
  return;
13869
13915
  } else if (subcommand === "mcp" && args.length === 1) {
13870
13916
  try {
13871
- const { handleMcpCommand } = await import('./mcp-B3EgenZh.mjs');
13917
+ const { handleMcpCommand } = await import('./mcp-Du-N0qlK.mjs');
13872
13918
  await handleMcpCommand();
13873
13919
  } catch (error) {
13874
13920
  process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  require('chalk');
4
- require('./index-DYDAFqAN.cjs');
5
- require('./types-DLI6sss2.cjs');
4
+ require('./index-4YmVbx7j.cjs');
5
+ require('./types-BNGeiP1C.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-vCgb7QnZ.mjs';
3
- import './types-d_104eQF.mjs';
2
+ import './index-an09rejO.mjs';
3
+ import './types-DS3i_5LV.mjs';
4
4
  import 'zod';
5
5
  import 'node:child_process';
6
6
  import 'node:os';