very-happy-cli 0.2.85 → 0.2.87

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 (29) hide show
  1. package/dist/{AcpBackend-B1l_WyZy.cjs → AcpBackend-DxNg9T6Z.cjs} +1 -1
  2. package/dist/{AcpBackend-CDclNgxu.mjs → AcpBackend-kotk9Pwu.mjs} +1 -1
  3. package/dist/{AcpSessionManager-PCdfo4gz.mjs → AcpSessionManager-DGY1Ss6H.mjs} +1 -1
  4. package/dist/{AcpSessionManager-dVX0uTo8.cjs → AcpSessionManager-Im0qDPE0.cjs} +1 -1
  5. package/dist/{config-DDsvmCxL.mjs → config-CDMM_UhY.mjs} +2 -2
  6. package/dist/{config-Ce5hbWlg.cjs → config-DcoxG-LO.cjs} +2 -2
  7. package/dist/{index-Syfrd3oP.cjs → index-DBYxKaw7.cjs} +4 -4
  8. package/dist/{index-CCQ2mqkA.mjs → index-DLI9RIsu.mjs} +5 -5
  9. package/dist/{index-DUcWAKZ0.cjs → index-DveDBCaA.cjs} +49 -19
  10. package/dist/{index-DVKieWPR.mjs → index-UiX6h05D.mjs} +46 -16
  11. package/dist/index.cjs +2 -2
  12. package/dist/index.mjs +2 -2
  13. package/dist/{installTerminalHooks-BMTBsCfi.mjs → installTerminalHooks-BXxMZXNx.mjs} +2 -2
  14. package/dist/{installTerminalHooks-hcCRjxNy.cjs → installTerminalHooks-fuWRm0w5.cjs} +2 -2
  15. package/dist/lib.cjs +1 -1
  16. package/dist/lib.mjs +1 -1
  17. package/dist/{mcp-C2bERsV2.mjs → mcp-CgOiXU_f.mjs} +2 -2
  18. package/dist/{mcp-DGHMyTt-.cjs → mcp-YzpXuAUY.cjs} +2 -2
  19. package/dist/{runGemini-U5JI6rsK.cjs → runGemini-BBAR1VMh.cjs} +4 -4
  20. package/dist/{runGemini-CUpp6u-S.mjs → runGemini-C3jrBffn.mjs} +4 -4
  21. package/dist/{runOpenClaw-BHR7emaO.mjs → runOpenClaw-B7pEvhUJ.mjs} +3 -3
  22. package/dist/{runOpenClaw-DJYiIMrs.cjs → runOpenClaw-CaA37yjx.cjs} +3 -3
  23. package/dist/{send-iDuDd7yC.cjs → send-DHj783NY.cjs} +2 -2
  24. package/dist/{send-AIDeVBON.mjs → send-bhOlmnWQ.mjs} +2 -2
  25. package/dist/{spawn-Kklokpjz.cjs → spawn-CVUvoWvq.cjs} +2 -2
  26. package/dist/{spawn-DPz_3Q6B.mjs → spawn-DW_crRm0.mjs} +2 -2
  27. package/dist/{types-DJGEti9c.cjs → types-1ZueD6ob.cjs} +14 -10
  28. package/dist/{types-CkUHjxKz.mjs → types-DY9ef3Sf.mjs} +13 -9
  29. 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-DJGEti9c.cjs');
6
+ var persistence = require('./types-1ZueD6ob.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-CkUHjxKz.mjs';
4
+ import { l as logger, d as contentLogMetadata, e as errorLogMetadata, f as packageJson, g as delay } from './types-DY9ef3Sf.mjs';
5
5
 
6
6
  const DEFAULT_TIMEOUTS = {
7
7
  /** Default initialization timeout: 60 seconds */
@@ -1,5 +1,5 @@
1
1
  import { createId } from '@paralleldrive/cuid2';
2
- import { b as createEnvelope } from './types-CkUHjxKz.mjs';
2
+ import { b as createEnvelope } from './types-DY9ef3Sf.mjs';
3
3
 
4
4
  function turnOptions(turnId, time) {
5
5
  return turnId ? { turn: turnId, time } : { time };
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var cuid2 = require('@paralleldrive/cuid2');
4
- var persistence = require('./types-DJGEti9c.cjs');
4
+ var persistence = require('./types-1ZueD6ob.cjs');
5
5
 
6
6
  function turnOptions(turnId, time) {
7
7
  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-CkUHjxKz.mjs';
6
- import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-DVKieWPR.mjs';
5
+ import { l as logger } from './types-DY9ef3Sf.mjs';
6
+ import { D as DEFAULT_GEMINI_MODEL, G as GEMINI_MODEL_ENV } from './index-UiX6h05D.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-DJGEti9c.cjs');
8
- var index = require('./index-DUcWAKZ0.cjs');
7
+ var persistence = require('./types-1ZueD6ob.cjs');
8
+ var index = require('./index-DveDBCaA.cjs');
9
9
  require('axios');
10
10
  require('chalk');
11
11
  require('node:util');
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var AcpBackend = require('./AcpBackend-B1l_WyZy.cjs');
4
- var persistence = require('./types-DJGEti9c.cjs');
5
- var AcpSessionManager = require('./AcpSessionManager-dVX0uTo8.cjs');
3
+ var AcpBackend = require('./AcpBackend-DxNg9T6Z.cjs');
4
+ var persistence = require('./types-1ZueD6ob.cjs');
5
+ var AcpSessionManager = require('./AcpSessionManager-Im0qDPE0.cjs');
6
6
  var node_crypto = require('node:crypto');
7
7
  var path = require('node:path');
8
- var index = require('./index-DUcWAKZ0.cjs');
8
+ var index = require('./index-DveDBCaA.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-CDclNgxu.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-CDclNgxu.mjs';
3
- import { h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, p as projectPath } from './types-CkUHjxKz.mjs';
4
- import { A as AcpSessionManager } from './AcpSessionManager-PCdfo4gz.mjs';
1
+ import { D as DefaultTransport, A as AcpBackend } from './AcpBackend-kotk9Pwu.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-kotk9Pwu.mjs';
3
+ import { h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, p as projectPath } from './types-DY9ef3Sf.mjs';
4
+ import { A as AcpSessionManager } from './AcpSessionManager-DGY1Ss6H.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-DVKieWPR.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-UiX6h05D.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-DJGEti9c.cjs');
6
+ var persistence = require('./types-1ZueD6ob.cjs');
7
7
  var spawn = require('cross-spawn');
8
8
  var path = require('node:path');
9
9
  var node_readline = require('node:readline');
@@ -2575,6 +2575,9 @@ function formatClaudeMessageForInk(message, messageBuffer, onAssistantResult) {
2575
2575
  const INTERRUPT_SENTINEL = /^\[Request interrupted by user(?: for tool use)?\]$/i;
2576
2576
  const EDE_DIAGNOSTIC_PREFIX = "[ede_diagnostic]";
2577
2577
  const SDK_ERROR_PREFIX = "Claude Code returned an error result:";
2578
+ function errorEntries(value) {
2579
+ return value.split(/[;\n]+/).map((entry) => entry.trim()).filter(Boolean);
2580
+ }
2578
2581
  function textBlocks(content) {
2579
2582
  if (!Array.isArray(content) || content.length === 0) return null;
2580
2583
  const texts = [];
@@ -2607,12 +2610,23 @@ function isClaudeEdeOnlyResult(value) {
2607
2610
  const errors = resultErrors(value);
2608
2611
  return errors.length > 0 && errors.every((error) => error.startsWith(EDE_DIAGNOSTIC_PREFIX));
2609
2612
  }
2613
+ function stripClaudeEdeDiagnosticText(value) {
2614
+ if (typeof value !== "string") return void 0;
2615
+ const trimmed = value.trim();
2616
+ if (!trimmed) return void 0;
2617
+ if (!trimmed.includes(EDE_DIAGNOSTIC_PREFIX)) return trimmed;
2618
+ const visible = errorEntries(trimmed).filter((entry) => !entry.startsWith(EDE_DIAGNOSTIC_PREFIX));
2619
+ return visible.length > 0 ? visible.join("\n") : void 0;
2620
+ }
2621
+ function stripClaudeEdeDiagnosticErrors(value) {
2622
+ return resultErrors({ errors: value }).filter((error) => !error.startsWith(EDE_DIAGNOSTIC_PREFIX));
2623
+ }
2610
2624
  function isClaudeEdeOnlySdkError(error) {
2611
2625
  if (!(error instanceof Error)) return false;
2612
2626
  const message = error.message.trim();
2613
2627
  if (!message.startsWith(SDK_ERROR_PREFIX)) return false;
2614
2628
  const payload = message.slice(SDK_ERROR_PREFIX.length).trim();
2615
- const entries = payload.split(/[;\n]+/).map((entry) => entry.trim()).filter(Boolean);
2629
+ const entries = errorEntries(payload);
2616
2630
  return entries.length > 0 && entries.every((entry) => entry.startsWith(EDE_DIAGNOSTIC_PREFIX));
2617
2631
  }
2618
2632
 
@@ -2635,6 +2649,8 @@ class SDKToLogConverter {
2635
2649
  responses;
2636
2650
  sidechainLastUUID = /* @__PURE__ */ new Map();
2637
2651
  sawInterruptSentinel = false;
2652
+ sawEdeOnlyAssistantError = false;
2653
+ sawVisibleAssistantError = false;
2638
2654
  constructor(context, responses) {
2639
2655
  this.context = {
2640
2656
  ...context,
@@ -2660,6 +2676,8 @@ class SDKToLogConverter {
2660
2676
  /** Drop per-query markers that must never leak into the next SDK query. */
2661
2677
  resetTransientState() {
2662
2678
  this.sawInterruptSentinel = false;
2679
+ this.sawEdeOnlyAssistantError = false;
2680
+ this.sawVisibleAssistantError = false;
2663
2681
  }
2664
2682
  /**
2665
2683
  * Convert SDK message to log format
@@ -2716,6 +2734,12 @@ class SDKToLogConverter {
2716
2734
  }
2717
2735
  case "assistant": {
2718
2736
  const assistantMsg = sdkMessage;
2737
+ const assistantError = stripClaudeEdeDiagnosticText(assistantMsg.error);
2738
+ if (typeof assistantMsg.error === "string" && assistantMsg.error.trim() && !assistantError) {
2739
+ this.sawEdeOnlyAssistantError = true;
2740
+ } else if (assistantError) {
2741
+ this.sawVisibleAssistantError = true;
2742
+ }
2719
2743
  logMessage = {
2720
2744
  ...baseFields,
2721
2745
  type: "assistant",
@@ -2724,7 +2748,7 @@ class SDKToLogConverter {
2724
2748
  requestId: assistantMsg.requestId,
2725
2749
  ...assistantMsg.isCompactSummary ? { isCompactSummary: true } : {},
2726
2750
  ...assistantMsg.parent_tool_use_id ? { parent_tool_use_id: assistantMsg.parent_tool_use_id } : {},
2727
- ...assistantMsg.error ? { error: assistantMsg.error } : {}
2751
+ ...assistantError ? { error: assistantError } : {}
2728
2752
  };
2729
2753
  break;
2730
2754
  }
@@ -2746,8 +2770,14 @@ class SDKToLogConverter {
2746
2770
  }
2747
2771
  case "result": {
2748
2772
  const resultMsg = sdkMessage;
2749
- const interrupted = this.sawInterruptSentinel || isClaudeEdeOnlyResult(resultMsg);
2773
+ const visibleErrors = stripClaudeEdeDiagnosticErrors(
2774
+ "errors" in resultMsg ? resultMsg.errors : void 0
2775
+ );
2776
+ const interruptionSignal = this.sawInterruptSentinel || this.sawEdeOnlyAssistantError || isClaudeEdeOnlyResult(resultMsg);
2777
+ const interrupted = interruptionSignal && !this.sawVisibleAssistantError && visibleErrors.length === 0;
2750
2778
  this.sawInterruptSentinel = false;
2779
+ this.sawEdeOnlyAssistantError = false;
2780
+ this.sawVisibleAssistantError = false;
2751
2781
  logMessage = {
2752
2782
  ...baseFields,
2753
2783
  type: "result",
@@ -2758,7 +2788,7 @@ class SDKToLogConverter {
2758
2788
  duration_ms: resultMsg.duration_ms,
2759
2789
  num_turns: resultMsg.num_turns,
2760
2790
  usage: resultMsg.usage,
2761
- ..."errors" in resultMsg ? { errors: resultMsg.errors } : {},
2791
+ ...visibleErrors.length > 0 ? { errors: visibleErrors } : {},
2762
2792
  ..."terminal_reason" in resultMsg && resultMsg.terminal_reason ? { terminal_reason: resultMsg.terminal_reason } : {},
2763
2793
  ...interrupted ? { interrupted: true } : {}
2764
2794
  };
@@ -8674,7 +8704,7 @@ const MAX_TITLE_CHARS = 60;
8674
8704
  const GENERATION_TIMEOUT_MS = 3e4;
8675
8705
  function resolveClaudeBinary() {
8676
8706
  try {
8677
- 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-DUcWAKZ0.cjs', document.baseURI).href)));
8707
+ 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-DveDBCaA.cjs', document.baseURI).href)));
8678
8708
  const utilsPath = path.resolve(path.join(persistence.projectPath(), "scripts", "claude_version_utils.cjs"));
8679
8709
  const { getClaudeCliPath } = require$1(utilsPath);
8680
8710
  const path$1 = getClaudeCliPath();
@@ -10818,9 +10848,9 @@ function resolveLocalSignupBootstrap(configuredMode, configuredInviteCodes, gene
10818
10848
  };
10819
10849
  }
10820
10850
 
10821
- 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-DUcWAKZ0.cjs', document.baseURI).href)));
10851
+ 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-DveDBCaA.cjs', document.baseURI).href)));
10822
10852
  const __dirname$1 = path.dirname(__filename$1);
10823
- const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-DUcWAKZ0.cjs', document.baseURI).href)));
10853
+ const require_ = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index-DveDBCaA.cjs', document.baseURI).href)));
10824
10854
  const PRISMA_QUERY_ENGINE_FILES = {
10825
10855
  "arm64-darwin": "libquery_engine-darwin-arm64.dylib.node",
10826
10856
  "x64-darwin": "libquery_engine-darwin.dylib.node",
@@ -13432,7 +13462,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13432
13462
  process.exit(0);
13433
13463
  } else if (subcommand === "install-terminal-hooks") {
13434
13464
  try {
13435
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-hcCRjxNy.cjs'); });
13465
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await Promise.resolve().then(function () { return require('./installTerminalHooks-fuWRm0w5.cjs'); });
13436
13466
  const command = parseTerminalHooksArgs(args.slice(1));
13437
13467
  if (command.action === "help") {
13438
13468
  console.log(TERMINAL_HOOKS_HELP);
@@ -13449,7 +13479,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13449
13479
  }
13450
13480
  } else if (subcommand === "spawn") {
13451
13481
  try {
13452
- const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-Kklokpjz.cjs'); });
13482
+ const { handleSpawnCommand } = await Promise.resolve().then(function () { return require('./spawn-CVUvoWvq.cjs'); });
13453
13483
  await handleSpawnCommand(args.slice(1));
13454
13484
  } catch (error) {
13455
13485
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -13461,7 +13491,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13461
13491
  return;
13462
13492
  } else if (subcommand === "send") {
13463
13493
  try {
13464
- const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-iDuDd7yC.cjs'); });
13494
+ const { handleSendCommand } = await Promise.resolve().then(function () { return require('./send-DHj783NY.cjs'); });
13465
13495
  await handleSendCommand(args.slice(1));
13466
13496
  } catch (error) {
13467
13497
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -13567,9 +13597,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13567
13597
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
13568
13598
  const projectId = args[3];
13569
13599
  try {
13570
- const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-Ce5hbWlg.cjs'); });
13571
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-DJGEti9c.cjs'); }).then(function (n) { return n.persistence; });
13572
- const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-DJGEti9c.cjs'); }).then(function (n) { return n.api; });
13600
+ const { saveGoogleCloudProjectToConfig } = await Promise.resolve().then(function () { return require('./config-DcoxG-LO.cjs'); });
13601
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await Promise.resolve().then(function () { return require('./types-1ZueD6ob.cjs'); }).then(function (n) { return n.persistence; });
13602
+ const { ApiClient: ApiClient2 } = await Promise.resolve().then(function () { return require('./types-1ZueD6ob.cjs'); }).then(function (n) { return n.api; });
13573
13603
  let userEmail = void 0;
13574
13604
  try {
13575
13605
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -13600,7 +13630,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13600
13630
  }
13601
13631
  if (geminiSubcommand === "project" && args[2] === "get") {
13602
13632
  try {
13603
- const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-Ce5hbWlg.cjs'); });
13633
+ const { readGeminiLocalConfig } = await Promise.resolve().then(function () { return require('./config-DcoxG-LO.cjs'); });
13604
13634
  const config = readGeminiLocalConfig();
13605
13635
  if (config.googleCloudProject) {
13606
13636
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -13640,7 +13670,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13640
13670
  process.exit(0);
13641
13671
  }
13642
13672
  try {
13643
- const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-U5JI6rsK.cjs'); });
13673
+ const { runGemini } = await Promise.resolve().then(function () { return require('./runGemini-BBAR1VMh.cjs'); });
13644
13674
  let startedBy = void 0;
13645
13675
  for (let i = 1; i < args.length; i++) {
13646
13676
  if (args[i] === "--started-by") {
@@ -13662,7 +13692,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13662
13692
  return;
13663
13693
  } else if (subcommand === "acp") {
13664
13694
  try {
13665
- const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-Syfrd3oP.cjs'); });
13695
+ const { runAcp, resolveAcpAgentConfig } = await Promise.resolve().then(function () { return require('./index-DBYxKaw7.cjs'); });
13666
13696
  let startedBy = void 0;
13667
13697
  let verbose = false;
13668
13698
  const acpArgs = [];
@@ -13702,7 +13732,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13702
13732
  return;
13703
13733
  } else if (subcommand === "openclaw") {
13704
13734
  try {
13705
- const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-DJYiIMrs.cjs'); });
13735
+ const { runOpenClaw } = await Promise.resolve().then(function () { return require('./runOpenClaw-CaA37yjx.cjs'); });
13706
13736
  let startedBy = void 0;
13707
13737
  let verbose = false;
13708
13738
  let gatewayUrl;
@@ -13753,7 +13783,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13753
13783
  return;
13754
13784
  } else if (subcommand === "mcp" && args.length === 1) {
13755
13785
  try {
13756
- const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-DGHMyTt-.cjs'); });
13786
+ const { handleMcpCommand } = await Promise.resolve().then(function () { return require('./mcp-YzpXuAUY.cjs'); });
13757
13787
  await handleMcpCommand();
13758
13788
  } catch (error) {
13759
13789
  process.stderr.write(`[very-happy mcp] Fatal: ${error instanceof Error ? error.message : String(error)}
@@ -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-CkUHjxKz.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 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-DY9ef3Sf.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';
@@ -2553,6 +2553,9 @@ function formatClaudeMessageForInk(message, messageBuffer, onAssistantResult) {
2553
2553
  const INTERRUPT_SENTINEL = /^\[Request interrupted by user(?: for tool use)?\]$/i;
2554
2554
  const EDE_DIAGNOSTIC_PREFIX = "[ede_diagnostic]";
2555
2555
  const SDK_ERROR_PREFIX = "Claude Code returned an error result:";
2556
+ function errorEntries(value) {
2557
+ return value.split(/[;\n]+/).map((entry) => entry.trim()).filter(Boolean);
2558
+ }
2556
2559
  function textBlocks(content) {
2557
2560
  if (!Array.isArray(content) || content.length === 0) return null;
2558
2561
  const texts = [];
@@ -2585,12 +2588,23 @@ function isClaudeEdeOnlyResult(value) {
2585
2588
  const errors = resultErrors(value);
2586
2589
  return errors.length > 0 && errors.every((error) => error.startsWith(EDE_DIAGNOSTIC_PREFIX));
2587
2590
  }
2591
+ function stripClaudeEdeDiagnosticText(value) {
2592
+ if (typeof value !== "string") return void 0;
2593
+ const trimmed = value.trim();
2594
+ if (!trimmed) return void 0;
2595
+ if (!trimmed.includes(EDE_DIAGNOSTIC_PREFIX)) return trimmed;
2596
+ const visible = errorEntries(trimmed).filter((entry) => !entry.startsWith(EDE_DIAGNOSTIC_PREFIX));
2597
+ return visible.length > 0 ? visible.join("\n") : void 0;
2598
+ }
2599
+ function stripClaudeEdeDiagnosticErrors(value) {
2600
+ return resultErrors({ errors: value }).filter((error) => !error.startsWith(EDE_DIAGNOSTIC_PREFIX));
2601
+ }
2588
2602
  function isClaudeEdeOnlySdkError(error) {
2589
2603
  if (!(error instanceof Error)) return false;
2590
2604
  const message = error.message.trim();
2591
2605
  if (!message.startsWith(SDK_ERROR_PREFIX)) return false;
2592
2606
  const payload = message.slice(SDK_ERROR_PREFIX.length).trim();
2593
- const entries = payload.split(/[;\n]+/).map((entry) => entry.trim()).filter(Boolean);
2607
+ const entries = errorEntries(payload);
2594
2608
  return entries.length > 0 && entries.every((entry) => entry.startsWith(EDE_DIAGNOSTIC_PREFIX));
2595
2609
  }
2596
2610
 
@@ -2613,6 +2627,8 @@ class SDKToLogConverter {
2613
2627
  responses;
2614
2628
  sidechainLastUUID = /* @__PURE__ */ new Map();
2615
2629
  sawInterruptSentinel = false;
2630
+ sawEdeOnlyAssistantError = false;
2631
+ sawVisibleAssistantError = false;
2616
2632
  constructor(context, responses) {
2617
2633
  this.context = {
2618
2634
  ...context,
@@ -2638,6 +2654,8 @@ class SDKToLogConverter {
2638
2654
  /** Drop per-query markers that must never leak into the next SDK query. */
2639
2655
  resetTransientState() {
2640
2656
  this.sawInterruptSentinel = false;
2657
+ this.sawEdeOnlyAssistantError = false;
2658
+ this.sawVisibleAssistantError = false;
2641
2659
  }
2642
2660
  /**
2643
2661
  * Convert SDK message to log format
@@ -2694,6 +2712,12 @@ class SDKToLogConverter {
2694
2712
  }
2695
2713
  case "assistant": {
2696
2714
  const assistantMsg = sdkMessage;
2715
+ const assistantError = stripClaudeEdeDiagnosticText(assistantMsg.error);
2716
+ if (typeof assistantMsg.error === "string" && assistantMsg.error.trim() && !assistantError) {
2717
+ this.sawEdeOnlyAssistantError = true;
2718
+ } else if (assistantError) {
2719
+ this.sawVisibleAssistantError = true;
2720
+ }
2697
2721
  logMessage = {
2698
2722
  ...baseFields,
2699
2723
  type: "assistant",
@@ -2702,7 +2726,7 @@ class SDKToLogConverter {
2702
2726
  requestId: assistantMsg.requestId,
2703
2727
  ...assistantMsg.isCompactSummary ? { isCompactSummary: true } : {},
2704
2728
  ...assistantMsg.parent_tool_use_id ? { parent_tool_use_id: assistantMsg.parent_tool_use_id } : {},
2705
- ...assistantMsg.error ? { error: assistantMsg.error } : {}
2729
+ ...assistantError ? { error: assistantError } : {}
2706
2730
  };
2707
2731
  break;
2708
2732
  }
@@ -2724,8 +2748,14 @@ class SDKToLogConverter {
2724
2748
  }
2725
2749
  case "result": {
2726
2750
  const resultMsg = sdkMessage;
2727
- const interrupted = this.sawInterruptSentinel || isClaudeEdeOnlyResult(resultMsg);
2751
+ const visibleErrors = stripClaudeEdeDiagnosticErrors(
2752
+ "errors" in resultMsg ? resultMsg.errors : void 0
2753
+ );
2754
+ const interruptionSignal = this.sawInterruptSentinel || this.sawEdeOnlyAssistantError || isClaudeEdeOnlyResult(resultMsg);
2755
+ const interrupted = interruptionSignal && !this.sawVisibleAssistantError && visibleErrors.length === 0;
2728
2756
  this.sawInterruptSentinel = false;
2757
+ this.sawEdeOnlyAssistantError = false;
2758
+ this.sawVisibleAssistantError = false;
2729
2759
  logMessage = {
2730
2760
  ...baseFields,
2731
2761
  type: "result",
@@ -2736,7 +2766,7 @@ class SDKToLogConverter {
2736
2766
  duration_ms: resultMsg.duration_ms,
2737
2767
  num_turns: resultMsg.num_turns,
2738
2768
  usage: resultMsg.usage,
2739
- ..."errors" in resultMsg ? { errors: resultMsg.errors } : {},
2769
+ ...visibleErrors.length > 0 ? { errors: visibleErrors } : {},
2740
2770
  ..."terminal_reason" in resultMsg && resultMsg.terminal_reason ? { terminal_reason: resultMsg.terminal_reason } : {},
2741
2771
  ...interrupted ? { interrupted: true } : {}
2742
2772
  };
@@ -13410,7 +13440,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13410
13440
  process.exit(0);
13411
13441
  } else if (subcommand === "install-terminal-hooks") {
13412
13442
  try {
13413
- const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-BMTBsCfi.mjs');
13443
+ const { installTerminalHooks, parseTerminalHooksArgs, TERMINAL_HOOKS_HELP } = await import('./installTerminalHooks-BXxMZXNx.mjs');
13414
13444
  const command = parseTerminalHooksArgs(args.slice(1));
13415
13445
  if (command.action === "help") {
13416
13446
  console.log(TERMINAL_HOOKS_HELP);
@@ -13427,7 +13457,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13427
13457
  }
13428
13458
  } else if (subcommand === "spawn") {
13429
13459
  try {
13430
- const { handleSpawnCommand } = await import('./spawn-DPz_3Q6B.mjs');
13460
+ const { handleSpawnCommand } = await import('./spawn-DW_crRm0.mjs');
13431
13461
  await handleSpawnCommand(args.slice(1));
13432
13462
  } catch (error) {
13433
13463
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -13439,7 +13469,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13439
13469
  return;
13440
13470
  } else if (subcommand === "send") {
13441
13471
  try {
13442
- const { handleSendCommand } = await import('./send-AIDeVBON.mjs');
13472
+ const { handleSendCommand } = await import('./send-bhOlmnWQ.mjs');
13443
13473
  await handleSendCommand(args.slice(1));
13444
13474
  } catch (error) {
13445
13475
  console.error(chalk.red("Error:"), error instanceof Error ? error.message : "Unknown error");
@@ -13545,9 +13575,9 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13545
13575
  if (geminiSubcommand === "project" && args[2] === "set" && args[3]) {
13546
13576
  const projectId = args[3];
13547
13577
  try {
13548
- const { saveGoogleCloudProjectToConfig } = await import('./config-DDsvmCxL.mjs');
13549
- const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-CkUHjxKz.mjs').then(function (n) { return n.ai; });
13550
- const { ApiClient: ApiClient2 } = await import('./types-CkUHjxKz.mjs').then(function (n) { return n.aj; });
13578
+ const { saveGoogleCloudProjectToConfig } = await import('./config-CDMM_UhY.mjs');
13579
+ const { readCredentialsForConfiguredRelay: readCredentialsForConfiguredRelay2 } = await import('./types-DY9ef3Sf.mjs').then(function (n) { return n.ai; });
13580
+ const { ApiClient: ApiClient2 } = await import('./types-DY9ef3Sf.mjs').then(function (n) { return n.aj; });
13551
13581
  let userEmail = void 0;
13552
13582
  try {
13553
13583
  const credentials = await readCredentialsForConfiguredRelay2();
@@ -13578,7 +13608,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13578
13608
  }
13579
13609
  if (geminiSubcommand === "project" && args[2] === "get") {
13580
13610
  try {
13581
- const { readGeminiLocalConfig } = await import('./config-DDsvmCxL.mjs');
13611
+ const { readGeminiLocalConfig } = await import('./config-CDMM_UhY.mjs');
13582
13612
  const config = readGeminiLocalConfig();
13583
13613
  if (config.googleCloudProject) {
13584
13614
  console.log(`Current Google Cloud Project: ${config.googleCloudProject}`);
@@ -13618,7 +13648,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13618
13648
  process.exit(0);
13619
13649
  }
13620
13650
  try {
13621
- const { runGemini } = await import('./runGemini-CUpp6u-S.mjs');
13651
+ const { runGemini } = await import('./runGemini-C3jrBffn.mjs');
13622
13652
  let startedBy = void 0;
13623
13653
  for (let i = 1; i < args.length; i++) {
13624
13654
  if (args[i] === "--started-by") {
@@ -13640,7 +13670,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13640
13670
  return;
13641
13671
  } else if (subcommand === "acp") {
13642
13672
  try {
13643
- const { runAcp, resolveAcpAgentConfig } = await import('./index-CCQ2mqkA.mjs');
13673
+ const { runAcp, resolveAcpAgentConfig } = await import('./index-DLI9RIsu.mjs');
13644
13674
  let startedBy = void 0;
13645
13675
  let verbose = false;
13646
13676
  const acpArgs = [];
@@ -13680,7 +13710,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13680
13710
  return;
13681
13711
  } else if (subcommand === "openclaw") {
13682
13712
  try {
13683
- const { runOpenClaw } = await import('./runOpenClaw-BHR7emaO.mjs');
13713
+ const { runOpenClaw } = await import('./runOpenClaw-B7pEvhUJ.mjs');
13684
13714
  let startedBy = void 0;
13685
13715
  let verbose = false;
13686
13716
  let gatewayUrl;
@@ -13731,7 +13761,7 @@ Conversation history is preserved on the server, but in-flight tool calls are in
13731
13761
  return;
13732
13762
  } else if (subcommand === "mcp" && args.length === 1) {
13733
13763
  try {
13734
- const { handleMcpCommand } = await import('./mcp-C2bERsV2.mjs');
13764
+ const { handleMcpCommand } = await import('./mcp-CgOiXU_f.mjs');
13735
13765
  await handleMcpCommand();
13736
13766
  } catch (error) {
13737
13767
  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-DUcWAKZ0.cjs');
5
- require('./types-DJGEti9c.cjs');
4
+ require('./index-DveDBCaA.cjs');
5
+ require('./types-1ZueD6ob.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-DVKieWPR.mjs';
3
- import './types-CkUHjxKz.mjs';
2
+ import './index-UiX6h05D.mjs';
3
+ import './types-DY9ef3Sf.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-CkUHjxKz.mjs';
7
- import { t as tmuxSupportsSessionEnv } from './index-DVKieWPR.mjs';
6
+ import { p as projectPath } from './types-DY9ef3Sf.mjs';
7
+ import { t as tmuxSupportsSessionEnv } from './index-UiX6h05D.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-DJGEti9c.cjs');
9
- var index = require('./index-DUcWAKZ0.cjs');
8
+ var persistence = require('./types-1ZueD6ob.cjs');
9
+ var index = require('./index-DveDBCaA.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-DJGEti9c.cjs');
3
+ var persistence = require('./types-1ZueD6ob.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-CkUHjxKz.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-DY9ef3Sf.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-DVKieWPR.mjs';
4
+ import { p as pushClipboardViaDaemon } from './index-UiX6h05D.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-CkUHjxKz.mjs';
6
+ import { l as logger } from './types-DY9ef3Sf.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-DUcWAKZ0.cjs');
6
+ var index = require('./index-DveDBCaA.cjs');
7
7
  var limits = require('./limits-KdWKmwtH.cjs');
8
- var persistence = require('./types-DJGEti9c.cjs');
8
+ var persistence = require('./types-1ZueD6ob.cjs');
9
9
  require('chalk');
10
10
  require('node:os');
11
11
  require('node:crypto');
@@ -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-DJGEti9c.cjs');
8
- var index = require('./index-DUcWAKZ0.cjs');
9
- var AcpBackend = require('./AcpBackend-B1l_WyZy.cjs');
10
- var config = require('./config-Ce5hbWlg.cjs');
7
+ var persistence = require('./types-1ZueD6ob.cjs');
8
+ var index = require('./index-DveDBCaA.cjs');
9
+ var AcpBackend = require('./AcpBackend-DxNg9T6Z.cjs');
10
+ var config = require('./config-DcoxG-LO.cjs');
11
11
  require('axios');
12
12
  require('chalk');
13
13
  require('node:util');
@@ -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, i as readSettings, e as errorLogMetadata, j as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-CkUHjxKz.mjs';
6
- import { g as GEMINI_API_KEY_ENV, j as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, k as BaseReasoningProcessor, i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, l as MessageBuffer, C as CHANGE_TITLE_INSTRUCTION, r as registerKillSessionHandler, f as startHappyServer } from './index-DVKieWPR.mjs';
7
- import { A as AcpBackend } from './AcpBackend-CDclNgxu.mjs';
8
- import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-DDsvmCxL.mjs';
5
+ import { l as logger, h as connectionState, A as ApiClient, i as readSettings, e as errorLogMetadata, j as encodeBase64, p as projectPath, d as contentLogMetadata } from './types-DY9ef3Sf.mjs';
6
+ import { g as GEMINI_API_KEY_ENV, j as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, B as BasePermissionHandler, k as BaseReasoningProcessor, i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, h as hashObject, l as MessageBuffer, C as CHANGE_TITLE_INSTRUCTION, r as registerKillSessionHandler, f as startHappyServer } from './index-UiX6h05D.mjs';
7
+ import { A as AcpBackend } from './AcpBackend-kotk9Pwu.mjs';
8
+ import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-CDMM_UhY.mjs';
9
9
  import 'axios';
10
10
  import 'chalk';
11
11
  import '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 { k as ensurePrivateDirectorySync, m as hardenPrivateFileSync, w as writePrivateFileSync, e as errorLogMetadata, d as contentLogMetadata, h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, c as configuration } from './types-CkUHjxKz.mjs';
7
- import { A as AcpSessionManager } from './AcpSessionManager-PCdfo4gz.mjs';
8
- import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-DVKieWPR.mjs';
6
+ import { k as ensurePrivateDirectorySync, m as hardenPrivateFileSync, w as writePrivateFileSync, e as errorLogMetadata, d as contentLogMetadata, h as connectionState, A as ApiClient, i as readSettings, j as encodeBase64, l as logger, c as configuration } from './types-DY9ef3Sf.mjs';
7
+ import { A as AcpSessionManager } from './AcpSessionManager-DGY1Ss6H.mjs';
8
+ import { i as initialMachineMetadata, d as createSessionMetadata, e as setupOfflineReconnection, n as notifyDaemonSessionStarted, M as MessageQueue2, r as registerKillSessionHandler } from './index-UiX6h05D.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-DJGEti9c.cjs');
9
- var AcpSessionManager = require('./AcpSessionManager-dVX0uTo8.cjs');
10
- var index = require('./index-DUcWAKZ0.cjs');
8
+ var persistence = require('./types-1ZueD6ob.cjs');
9
+ var AcpSessionManager = require('./AcpSessionManager-Im0qDPE0.cjs');
10
+ var index = require('./index-DveDBCaA.cjs');
11
11
  var WebSocket = require('ws');
12
12
  var ed = require('@noble/ed25519');
13
13
  var sha2_js = require('@noble/hashes/sha2.js');
@@ -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-DJGEti9c.cjs');
7
- var index = require('./index-DUcWAKZ0.cjs');
6
+ var persistence = require('./types-1ZueD6ob.cjs');
7
+ var index = require('./index-DveDBCaA.cjs');
8
8
  require('axios');
9
9
  require('node:util');
10
10
  require('node:os');
@@ -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-CkUHjxKz.mjs';
5
- import { b as sendUserMessage, a as sessionWebUrl } from './index-DVKieWPR.mjs';
4
+ import { r as readPersistedSessions, c as configuration } from './types-DY9ef3Sf.mjs';
5
+ import { b as sendUserMessage, a as sessionWebUrl } from './index-UiX6h05D.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 index = require('./index-DUcWAKZ0.cjs');
7
- var persistence = require('./types-DJGEti9c.cjs');
6
+ var index = require('./index-DveDBCaA.cjs');
7
+ var persistence = require('./types-1ZueD6ob.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, w as waitForSessionKey, b as sendUserMessage } from './index-DVKieWPR.mjs';
5
- import { l as logger } from './types-CkUHjxKz.mjs';
4
+ import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, w as waitForSessionKey, b as sendUserMessage } from './index-UiX6h05D.mjs';
5
+ import { l as logger } from './types-DY9ef3Sf.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.85";
54
+ var version = "0.2.87";
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.85",
168
- "very-happy-tools-x64-darwin": "0.2.85",
169
- "very-happy-tools-arm64-linux": "0.2.85",
170
- "very-happy-tools-x64-linux": "0.2.85",
171
- "very-happy-tools-arm64-win32": "0.2.85",
172
- "very-happy-tools-x64-win32": "0.2.85"
167
+ "very-happy-tools-arm64-darwin": "0.2.87",
168
+ "very-happy-tools-x64-darwin": "0.2.87",
169
+ "very-happy-tools-arm64-linux": "0.2.87",
170
+ "very-happy-tools-x64-linux": "0.2.87",
171
+ "very-happy-tools-arm64-win32": "0.2.87",
172
+ "very-happy-tools-x64-win32": "0.2.87"
173
173
  };
174
174
  var devDependencies = {
175
175
  "@slopus/happy-wire": "workspace:*",
@@ -1484,7 +1484,7 @@ class RpcHandlerManager {
1484
1484
  }
1485
1485
  }
1486
1486
 
1487
- 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-DJGEti9c.cjs', document.baseURI).href))));
1487
+ 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-1ZueD6ob.cjs', document.baseURI).href))));
1488
1488
  function projectPath() {
1489
1489
  const path = path$1.resolve(__dirname$1, "..");
1490
1490
  return path;
@@ -3649,7 +3649,9 @@ class ApiSessionClient extends node_events.EventEmitter {
3649
3649
  this.metadata = decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(answer.metadata));
3650
3650
  }
3651
3651
  throw new Error("Metadata version mismatch");
3652
- } else if (answer.result === "error") ;
3652
+ } else if (answer.result === "error") {
3653
+ throw new Error("Metadata update failed");
3654
+ }
3653
3655
  });
3654
3656
  });
3655
3657
  }
@@ -3673,7 +3675,9 @@ class ApiSessionClient extends node_events.EventEmitter {
3673
3675
  this.agentState = answer.agentState ? decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(answer.agentState)) : null;
3674
3676
  }
3675
3677
  throw new Error("Agent state version mismatch");
3676
- } else if (answer.result === "error") ;
3678
+ } else if (answer.result === "error") {
3679
+ throw new Error("Agent state update failed");
3680
+ }
3677
3681
  });
3678
3682
  });
3679
3683
  }
@@ -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.85";
32
+ var version = "0.2.87";
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.85",
146
- "very-happy-tools-x64-darwin": "0.2.85",
147
- "very-happy-tools-arm64-linux": "0.2.85",
148
- "very-happy-tools-x64-linux": "0.2.85",
149
- "very-happy-tools-arm64-win32": "0.2.85",
150
- "very-happy-tools-x64-win32": "0.2.85"
145
+ "very-happy-tools-arm64-darwin": "0.2.87",
146
+ "very-happy-tools-x64-darwin": "0.2.87",
147
+ "very-happy-tools-arm64-linux": "0.2.87",
148
+ "very-happy-tools-x64-linux": "0.2.87",
149
+ "very-happy-tools-arm64-win32": "0.2.87",
150
+ "very-happy-tools-x64-win32": "0.2.87"
151
151
  };
152
152
  var devDependencies = {
153
153
  "@slopus/happy-wire": "workspace:*",
@@ -3627,7 +3627,9 @@ class ApiSessionClient extends EventEmitter {
3627
3627
  this.metadata = decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(answer.metadata));
3628
3628
  }
3629
3629
  throw new Error("Metadata version mismatch");
3630
- } else if (answer.result === "error") ;
3630
+ } else if (answer.result === "error") {
3631
+ throw new Error("Metadata update failed");
3632
+ }
3631
3633
  });
3632
3634
  });
3633
3635
  }
@@ -3651,7 +3653,9 @@ class ApiSessionClient extends EventEmitter {
3651
3653
  this.agentState = answer.agentState ? decrypt(this.encryptionKey, this.encryptionVariant, decodeBase64(answer.agentState)) : null;
3652
3654
  }
3653
3655
  throw new Error("Agent state version mismatch");
3654
- } else if (answer.result === "error") ;
3656
+ } else if (answer.result === "error") {
3657
+ throw new Error("Agent state update failed");
3658
+ }
3655
3659
  });
3656
3660
  });
3657
3661
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "very-happy-cli",
3
- "version": "0.2.85",
3
+ "version": "0.2.87",
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.85",
117
- "very-happy-tools-x64-darwin": "0.2.85",
118
- "very-happy-tools-arm64-linux": "0.2.85",
119
- "very-happy-tools-x64-linux": "0.2.85",
120
- "very-happy-tools-arm64-win32": "0.2.85",
121
- "very-happy-tools-x64-win32": "0.2.85"
116
+ "very-happy-tools-arm64-darwin": "0.2.87",
117
+ "very-happy-tools-x64-darwin": "0.2.87",
118
+ "very-happy-tools-arm64-linux": "0.2.87",
119
+ "very-happy-tools-x64-linux": "0.2.87",
120
+ "very-happy-tools-arm64-win32": "0.2.87",
121
+ "very-happy-tools-x64-win32": "0.2.87"
122
122
  },
123
123
  "devDependencies": {
124
124
  "@slopus/happy-wire": "workspace:*",