happy-imou-cloud 2.0.3 → 2.0.4

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 (23) hide show
  1. package/dist/{BaseReasoningProcessor-_wxlqKB8.cjs → BaseReasoningProcessor-DEEfNi5Y.cjs} +2 -2
  2. package/dist/{BaseReasoningProcessor-B37yOHxo.mjs → BaseReasoningProcessor-Di1yEMMv.mjs} +2 -2
  3. package/dist/{api-DpQIC-DJ.mjs → api-CIHTNilH.mjs} +2 -2
  4. package/dist/{api-D9dIR956.cjs → api-CyJG1mr6.cjs} +2 -2
  5. package/dist/{command-DRqrBuHM.mjs → command-BERqmFB0.mjs} +3 -3
  6. package/dist/{command-CdXv1zNF.cjs → command-CPlJKXDn.cjs} +3 -3
  7. package/dist/{index-LYPXVO_L.cjs → index-1zlH6s7a.cjs} +228 -33
  8. package/dist/{index-CriPm_z9.mjs → index-vNYxNqVZ.mjs} +226 -31
  9. package/dist/index.cjs +3 -3
  10. package/dist/index.mjs +3 -3
  11. package/dist/lib.cjs +1 -1
  12. package/dist/lib.mjs +1 -1
  13. package/dist/{persistence-PzKU0QCa.cjs → persistence-BeFVx6kI.cjs} +1 -1
  14. package/dist/{persistence-CqgPgbzN.mjs → persistence-sLEqV8vk.mjs} +1 -1
  15. package/dist/{registerKillSessionHandler-BDBPoQSA.cjs → registerKillSessionHandler-CCxqGFjZ.cjs} +2 -2
  16. package/dist/{registerKillSessionHandler-C3M_-4Zg.mjs → registerKillSessionHandler-uVHqIC4h.mjs} +2 -2
  17. package/dist/{runClaude-D6Pdkevn.mjs → runClaude-Dl9nIRIg.mjs} +4 -4
  18. package/dist/{runClaude-IeRSC5qX.cjs → runClaude-Dz-PCSvb.cjs} +5 -5
  19. package/dist/{runCodex-WRmgSK6L.cjs → runCodex-BtZplK1R.cjs} +65 -13
  20. package/dist/{runCodex-CsfUU1Wb.mjs → runCodex-DgKKw3IU.mjs} +63 -14
  21. package/dist/{runGemini-CrH3dQ0Y.mjs → runGemini-CM1v3I24.mjs} +10 -8
  22. package/dist/{runGemini-qBh6zs5G.cjs → runGemini-DUyH311Z.cjs} +10 -8
  23. package/package.json +1 -1
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var node_crypto = require('node:crypto');
4
- var api = require('./api-D9dIR956.cjs');
5
- var persistence = require('./persistence-PzKU0QCa.cjs');
6
- var index = require('./index-LYPXVO_L.cjs');
7
- var BaseReasoningProcessor = require('./BaseReasoningProcessor-_wxlqKB8.cjs');
8
- var registerKillSessionHandler = require('./registerKillSessionHandler-BDBPoQSA.cjs');
4
+ var api = require('./api-CyJG1mr6.cjs');
5
+ var persistence = require('./persistence-BeFVx6kI.cjs');
6
+ var index = require('./index-1zlH6s7a.cjs');
7
+ var BaseReasoningProcessor = require('./BaseReasoningProcessor-DEEfNi5Y.cjs');
8
+ var registerKillSessionHandler = require('./registerKillSessionHandler-CCxqGFjZ.cjs');
9
9
  var React = require('react');
10
10
  var ink = require('ink');
11
11
  require('axios');
@@ -738,7 +738,8 @@ function normalizeCodexBackendError(error) {
738
738
  const text = index.formatDisplayMessage(error).trim();
739
739
  const stderrText = record ? index.formatDisplayMessage(record.stderr).trim() : "";
740
740
  const detailText = record ? index.formatDisplayMessage(record.detail).trim() : "";
741
- const searchableText = [text, stderrText, detailText].filter(Boolean).join("\n");
741
+ const dataText = record ? index.formatDisplayMessage(record.data).trim() : "";
742
+ const searchableText = [text, stderrText, detailText, dataText].filter(Boolean).join("\n");
742
743
  const prefix = typeof error === "object" && error !== null ? [
743
744
  record?.code !== void 0 && record?.code !== null ? `[code=${String(record.code)}]` : "",
744
745
  record?.status !== void 0 && record?.status !== null ? `[status=${String(record.status)}]` : ""
@@ -751,6 +752,9 @@ function normalizeCodexBackendError(error) {
751
752
  const hint = "The configured Codex ACP command does not speak the ACP protocol. Make sure HAPPY_CODEX_ACP_BIN points to codex-acp, not the codex CLI.";
752
753
  return prefix ? `${prefix} ${hint}` : hint;
753
754
  }
755
+ if (typeof record?.message === "string" && record.message.trim().toLowerCase() === "internal error" && dataText) {
756
+ return prefix ? `${prefix} ${dataText}` : dataText;
757
+ }
754
758
  if (error instanceof Error && text) {
755
759
  return text;
756
760
  }
@@ -870,6 +874,14 @@ async function codexRemoteLauncher(session) {
870
874
  messageBuffer.addMessage(message, "status");
871
875
  session.runtimeSession.sendSessionEvent({ type: "message", message });
872
876
  };
877
+ const emitUserVisibleErrorMessage = (message) => {
878
+ emitStatusMessage(message);
879
+ session.runtimeSession.sendCodexMessage({
880
+ type: "message",
881
+ message,
882
+ id: node_crypto.randomUUID()
883
+ });
884
+ };
873
885
  const queueHistoryInjectionForRestart = (reason) => {
874
886
  messageBuffer.addMessage("\u2550".repeat(40), "status");
875
887
  if (conversationHistory.hasHistory()) {
@@ -964,7 +976,8 @@ async function codexRemoteLauncher(session) {
964
976
  type: "tool-call-result",
965
977
  callId: msg.callId,
966
978
  output: msg.result,
967
- id: node_crypto.randomUUID()
979
+ id: node_crypto.randomUUID(),
980
+ isError
968
981
  });
969
982
  return;
970
983
  }
@@ -1042,7 +1055,8 @@ async function codexRemoteLauncher(session) {
1042
1055
  stderr: msg.stderr,
1043
1056
  success: msg.success
1044
1057
  },
1045
- id: node_crypto.randomUUID()
1058
+ id: node_crypto.randomUUID(),
1059
+ isError: !msg.success
1046
1060
  });
1047
1061
  return;
1048
1062
  }
@@ -1255,7 +1269,7 @@ async function codexRemoteLauncher(session) {
1255
1269
  emitStatusMessage("Aborted by user");
1256
1270
  } else {
1257
1271
  const errorMessage = normalizeCodexBackendError(error);
1258
- emitStatusMessage(errorMessage);
1272
+ emitUserVisibleErrorMessage(errorMessage);
1259
1273
  if (conversationHistory.hasHistory()) {
1260
1274
  shouldInjectHistoryOnNextSession = true;
1261
1275
  }
@@ -1364,10 +1378,39 @@ async function syncControlledByUserState(sessionClient, controlledByUser) {
1364
1378
  function shouldSupersedeCodexPendingInteractions(opts) {
1365
1379
  return true;
1366
1380
  }
1381
+ function resolveInitialCodexPermissionMode(opts) {
1382
+ if (opts.permissionMode) {
1383
+ return opts.permissionMode;
1384
+ }
1385
+ const startingMode = opts.startingMode ?? (opts.startedBy === "daemon" ? "remote" : "local");
1386
+ if (opts.startedBy === "daemon" && startingMode === "remote") {
1387
+ return "yolo";
1388
+ }
1389
+ return void 0;
1390
+ }
1391
+ function resolveQueuedCodexPermissionMode(opts) {
1392
+ if (opts.preserveCurrentOnDefault && opts.messagePermissionMode === "default" && opts.currentPermissionMode) {
1393
+ return opts.currentPermissionMode;
1394
+ }
1395
+ return opts.messagePermissionMode ?? opts.currentPermissionMode ?? "default";
1396
+ }
1397
+ function resolveIncomingCodexPermissionMode(opts) {
1398
+ const resolvedPermissionMode = resolveQueuedCodexPermissionMode(opts);
1399
+ return {
1400
+ resolvedPermissionMode,
1401
+ nextCurrentPermissionMode: resolvedPermissionMode
1402
+ };
1403
+ }
1367
1404
  async function runCodex(opts) {
1368
1405
  const sessionTag = node_crypto.randomUUID();
1369
1406
  api.connectionState.setBackend("Codex");
1370
1407
  const requestedStartingMode = opts.startingMode ?? (opts.startedBy === "daemon" ? "remote" : "local");
1408
+ const initialPermissionMode = resolveInitialCodexPermissionMode({
1409
+ permissionMode: opts.permissionMode,
1410
+ startedBy: opts.startedBy,
1411
+ startingMode: requestedStartingMode
1412
+ });
1413
+ const preserveCurrentPermissionModeForRemoteDefault = opts.startedBy === "daemon" && requestedStartingMode === "remote";
1371
1414
  if (opts.startedBy === "daemon" && requestedStartingMode === "local") {
1372
1415
  throw new Error("Daemon-spawned Codex sessions cannot use local mode.");
1373
1416
  }
@@ -1422,14 +1465,20 @@ async function runCodex(opts) {
1422
1465
  }
1423
1466
  }
1424
1467
  const messageQueue = new registerKillSessionHandler.MessageQueue2(getCodexExecutionFingerprint);
1425
- let currentPermissionMode;
1468
+ let currentPermissionMode = initialPermissionMode;
1426
1469
  let currentModel;
1427
1470
  sessionClient.onUserMessage((message) => {
1428
- let messagePermissionMode = currentPermissionMode;
1471
+ const previousPermissionMode = currentPermissionMode;
1472
+ let messagePermissionMode = previousPermissionMode;
1429
1473
  if (message.meta?.permissionMode) {
1430
1474
  messagePermissionMode = message.meta.permissionMode;
1431
- currentPermissionMode = messagePermissionMode;
1432
1475
  }
1476
+ const permissionResolution = resolveIncomingCodexPermissionMode({
1477
+ messagePermissionMode,
1478
+ currentPermissionMode: previousPermissionMode,
1479
+ preserveCurrentOnDefault: preserveCurrentPermissionModeForRemoteDefault
1480
+ });
1481
+ currentPermissionMode = permissionResolution.nextCurrentPermissionMode;
1433
1482
  let messageModel = currentModel;
1434
1483
  if (message.meta?.hasOwnProperty("model")) {
1435
1484
  messageModel = message.meta.model || void 0;
@@ -1443,7 +1492,7 @@ async function runCodex(opts) {
1443
1492
  codexSession?.supersedePendingInteractions(BaseReasoningProcessor.INTERACTION_SUPERSEDED_ERROR);
1444
1493
  }
1445
1494
  messageQueue.push(message.content.text, {
1446
- permissionMode: messagePermissionMode || "default",
1495
+ permissionMode: permissionResolution.resolvedPermissionMode,
1447
1496
  model: messageModel
1448
1497
  });
1449
1498
  });
@@ -1477,6 +1526,9 @@ async function runCodex(opts) {
1477
1526
  }
1478
1527
  }
1479
1528
 
1529
+ exports.resolveIncomingCodexPermissionMode = resolveIncomingCodexPermissionMode;
1530
+ exports.resolveInitialCodexPermissionMode = resolveInitialCodexPermissionMode;
1531
+ exports.resolveQueuedCodexPermissionMode = resolveQueuedCodexPermissionMode;
1480
1532
  exports.runCodex = runCodex;
1481
1533
  exports.shouldSupersedeCodexPendingInteractions = shouldSupersedeCodexPendingInteractions;
1482
1534
  exports.supportsAgentStateUpdateEvents = supportsAgentStateUpdateEvents;
@@ -1,9 +1,9 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { l as logger, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError } from './api-DpQIC-DJ.mjs';
3
- import { readSettings } from './persistence-CqgPgbzN.mjs';
4
- import { f as formatDisplayMessage, v as validateCodexAcpSpawn, d as createCodexBackend, t as truncateDisplayMessage, b as stopCaffeinate, i as initialMachineMetadata, n as notifyDaemonSessionStarted } from './index-CriPm_z9.mjs';
5
- import { B as BasePermissionHandler, g as getPendingInteractionTimeoutMs, I as INTERACTION_SUPERSEDED_ERROR, b as INTERACTION_TIMED_OUT_ERROR, a as BaseReasoningProcessor, c as createSessionMetadata, s as setupOfflineReconnection } from './BaseReasoningProcessor-B37yOHxo.mjs';
6
- import { h as hashObject, a as MessageBuffer, r as registerKillSessionHandler, M as MessageQueue2 } from './registerKillSessionHandler-C3M_-4Zg.mjs';
2
+ import { l as logger, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError } from './api-CIHTNilH.mjs';
3
+ import { readSettings } from './persistence-sLEqV8vk.mjs';
4
+ import { f as formatDisplayMessage, v as validateCodexAcpSpawn, d as createCodexBackend, t as truncateDisplayMessage, b as stopCaffeinate, i as initialMachineMetadata, n as notifyDaemonSessionStarted } from './index-vNYxNqVZ.mjs';
5
+ import { B as BasePermissionHandler, g as getPendingInteractionTimeoutMs, I as INTERACTION_SUPERSEDED_ERROR, b as INTERACTION_TIMED_OUT_ERROR, a as BaseReasoningProcessor, c as createSessionMetadata, s as setupOfflineReconnection } from './BaseReasoningProcessor-Di1yEMMv.mjs';
6
+ import { h as hashObject, a as MessageBuffer, r as registerKillSessionHandler, M as MessageQueue2 } from './registerKillSessionHandler-uVHqIC4h.mjs';
7
7
  import React, { useState, useRef, useEffect, useCallback } from 'react';
8
8
  import { useStdout, useInput, Box, Text, render } from 'ink';
9
9
  import 'axios';
@@ -736,7 +736,8 @@ function normalizeCodexBackendError(error) {
736
736
  const text = formatDisplayMessage(error).trim();
737
737
  const stderrText = record ? formatDisplayMessage(record.stderr).trim() : "";
738
738
  const detailText = record ? formatDisplayMessage(record.detail).trim() : "";
739
- const searchableText = [text, stderrText, detailText].filter(Boolean).join("\n");
739
+ const dataText = record ? formatDisplayMessage(record.data).trim() : "";
740
+ const searchableText = [text, stderrText, detailText, dataText].filter(Boolean).join("\n");
740
741
  const prefix = typeof error === "object" && error !== null ? [
741
742
  record?.code !== void 0 && record?.code !== null ? `[code=${String(record.code)}]` : "",
742
743
  record?.status !== void 0 && record?.status !== null ? `[status=${String(record.status)}]` : ""
@@ -749,6 +750,9 @@ function normalizeCodexBackendError(error) {
749
750
  const hint = "The configured Codex ACP command does not speak the ACP protocol. Make sure HAPPY_CODEX_ACP_BIN points to codex-acp, not the codex CLI.";
750
751
  return prefix ? `${prefix} ${hint}` : hint;
751
752
  }
753
+ if (typeof record?.message === "string" && record.message.trim().toLowerCase() === "internal error" && dataText) {
754
+ return prefix ? `${prefix} ${dataText}` : dataText;
755
+ }
752
756
  if (error instanceof Error && text) {
753
757
  return text;
754
758
  }
@@ -868,6 +872,14 @@ async function codexRemoteLauncher(session) {
868
872
  messageBuffer.addMessage(message, "status");
869
873
  session.runtimeSession.sendSessionEvent({ type: "message", message });
870
874
  };
875
+ const emitUserVisibleErrorMessage = (message) => {
876
+ emitStatusMessage(message);
877
+ session.runtimeSession.sendCodexMessage({
878
+ type: "message",
879
+ message,
880
+ id: randomUUID()
881
+ });
882
+ };
871
883
  const queueHistoryInjectionForRestart = (reason) => {
872
884
  messageBuffer.addMessage("\u2550".repeat(40), "status");
873
885
  if (conversationHistory.hasHistory()) {
@@ -962,7 +974,8 @@ async function codexRemoteLauncher(session) {
962
974
  type: "tool-call-result",
963
975
  callId: msg.callId,
964
976
  output: msg.result,
965
- id: randomUUID()
977
+ id: randomUUID(),
978
+ isError
966
979
  });
967
980
  return;
968
981
  }
@@ -1040,7 +1053,8 @@ async function codexRemoteLauncher(session) {
1040
1053
  stderr: msg.stderr,
1041
1054
  success: msg.success
1042
1055
  },
1043
- id: randomUUID()
1056
+ id: randomUUID(),
1057
+ isError: !msg.success
1044
1058
  });
1045
1059
  return;
1046
1060
  }
@@ -1253,7 +1267,7 @@ async function codexRemoteLauncher(session) {
1253
1267
  emitStatusMessage("Aborted by user");
1254
1268
  } else {
1255
1269
  const errorMessage = normalizeCodexBackendError(error);
1256
- emitStatusMessage(errorMessage);
1270
+ emitUserVisibleErrorMessage(errorMessage);
1257
1271
  if (conversationHistory.hasHistory()) {
1258
1272
  shouldInjectHistoryOnNextSession = true;
1259
1273
  }
@@ -1362,10 +1376,39 @@ async function syncControlledByUserState(sessionClient, controlledByUser) {
1362
1376
  function shouldSupersedeCodexPendingInteractions(opts) {
1363
1377
  return true;
1364
1378
  }
1379
+ function resolveInitialCodexPermissionMode(opts) {
1380
+ if (opts.permissionMode) {
1381
+ return opts.permissionMode;
1382
+ }
1383
+ const startingMode = opts.startingMode ?? (opts.startedBy === "daemon" ? "remote" : "local");
1384
+ if (opts.startedBy === "daemon" && startingMode === "remote") {
1385
+ return "yolo";
1386
+ }
1387
+ return void 0;
1388
+ }
1389
+ function resolveQueuedCodexPermissionMode(opts) {
1390
+ if (opts.preserveCurrentOnDefault && opts.messagePermissionMode === "default" && opts.currentPermissionMode) {
1391
+ return opts.currentPermissionMode;
1392
+ }
1393
+ return opts.messagePermissionMode ?? opts.currentPermissionMode ?? "default";
1394
+ }
1395
+ function resolveIncomingCodexPermissionMode(opts) {
1396
+ const resolvedPermissionMode = resolveQueuedCodexPermissionMode(opts);
1397
+ return {
1398
+ resolvedPermissionMode,
1399
+ nextCurrentPermissionMode: resolvedPermissionMode
1400
+ };
1401
+ }
1365
1402
  async function runCodex(opts) {
1366
1403
  const sessionTag = randomUUID();
1367
1404
  connectionState.setBackend("Codex");
1368
1405
  const requestedStartingMode = opts.startingMode ?? (opts.startedBy === "daemon" ? "remote" : "local");
1406
+ const initialPermissionMode = resolveInitialCodexPermissionMode({
1407
+ permissionMode: opts.permissionMode,
1408
+ startedBy: opts.startedBy,
1409
+ startingMode: requestedStartingMode
1410
+ });
1411
+ const preserveCurrentPermissionModeForRemoteDefault = opts.startedBy === "daemon" && requestedStartingMode === "remote";
1369
1412
  if (opts.startedBy === "daemon" && requestedStartingMode === "local") {
1370
1413
  throw new Error("Daemon-spawned Codex sessions cannot use local mode.");
1371
1414
  }
@@ -1420,14 +1463,20 @@ async function runCodex(opts) {
1420
1463
  }
1421
1464
  }
1422
1465
  const messageQueue = new MessageQueue2(getCodexExecutionFingerprint);
1423
- let currentPermissionMode;
1466
+ let currentPermissionMode = initialPermissionMode;
1424
1467
  let currentModel;
1425
1468
  sessionClient.onUserMessage((message) => {
1426
- let messagePermissionMode = currentPermissionMode;
1469
+ const previousPermissionMode = currentPermissionMode;
1470
+ let messagePermissionMode = previousPermissionMode;
1427
1471
  if (message.meta?.permissionMode) {
1428
1472
  messagePermissionMode = message.meta.permissionMode;
1429
- currentPermissionMode = messagePermissionMode;
1430
1473
  }
1474
+ const permissionResolution = resolveIncomingCodexPermissionMode({
1475
+ messagePermissionMode,
1476
+ currentPermissionMode: previousPermissionMode,
1477
+ preserveCurrentOnDefault: preserveCurrentPermissionModeForRemoteDefault
1478
+ });
1479
+ currentPermissionMode = permissionResolution.nextCurrentPermissionMode;
1431
1480
  let messageModel = currentModel;
1432
1481
  if (message.meta?.hasOwnProperty("model")) {
1433
1482
  messageModel = message.meta.model || void 0;
@@ -1441,7 +1490,7 @@ async function runCodex(opts) {
1441
1490
  codexSession?.supersedePendingInteractions(INTERACTION_SUPERSEDED_ERROR);
1442
1491
  }
1443
1492
  messageQueue.push(message.content.text, {
1444
- permissionMode: messagePermissionMode || "default",
1493
+ permissionMode: permissionResolution.resolvedPermissionMode,
1445
1494
  model: messageModel
1446
1495
  });
1447
1496
  });
@@ -1475,4 +1524,4 @@ async function runCodex(opts) {
1475
1524
  }
1476
1525
  }
1477
1526
 
1478
- export { runCodex, shouldSupersedeCodexPendingInteractions, supportsAgentStateUpdateEvents, syncControlledByUserState };
1527
+ export { resolveIncomingCodexPermissionMode, resolveInitialCodexPermissionMode, resolveQueuedCodexPermissionMode, runCodex, shouldSupersedeCodexPendingInteractions, supportsAgentStateUpdateEvents, syncControlledByUserState };
@@ -1,11 +1,11 @@
1
1
  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
- import { l as logger, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError } from './api-DpQIC-DJ.mjs';
5
- import { readSettings } from './persistence-CqgPgbzN.mjs';
6
- import { B as BasePermissionHandler, a as BaseReasoningProcessor, c as createSessionMetadata, s as setupOfflineReconnection } from './BaseReasoningProcessor-B37yOHxo.mjs';
7
- import { i as initialMachineMetadata, n as notifyDaemonSessionStarted, g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, s as saveGeminiModelToConfig, a as createGeminiBackend, b as stopCaffeinate } from './index-CriPm_z9.mjs';
8
- import { M as MessageQueue2, h as hashObject, a as MessageBuffer, r as registerKillSessionHandler } from './registerKillSessionHandler-C3M_-4Zg.mjs';
4
+ import { l as logger, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError } from './api-CIHTNilH.mjs';
5
+ import { readSettings } from './persistence-sLEqV8vk.mjs';
6
+ import { B as BasePermissionHandler, a as BaseReasoningProcessor, c as createSessionMetadata, s as setupOfflineReconnection } from './BaseReasoningProcessor-Di1yEMMv.mjs';
7
+ import { i as initialMachineMetadata, n as notifyDaemonSessionStarted, g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, s as saveGeminiModelToConfig, a as createGeminiBackend, b as stopCaffeinate } from './index-vNYxNqVZ.mjs';
8
+ import { M as MessageQueue2, h as hashObject, a as MessageBuffer, r as registerKillSessionHandler } from './registerKillSessionHandler-uVHqIC4h.mjs';
9
9
  import 'axios';
10
10
  import 'chalk';
11
11
  import 'fs';
@@ -958,7 +958,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
958
958
  });
959
959
  break;
960
960
  case "tool-result":
961
- const isError = msg.result && typeof msg.result === "object" && "error" in msg.result;
961
+ const isError = Boolean(msg.result && typeof msg.result === "object" && "error" in msg.result);
962
962
  const resultText = typeof msg.result === "string" ? msg.result.substring(0, 200) : JSON.stringify(msg.result).substring(0, 200);
963
963
  const truncatedResult = resultText + (typeof msg.result === "string" && msg.result.length > 200 ? "..." : "");
964
964
  const resultSize = typeof msg.result === "string" ? msg.result.length : JSON.stringify(msg.result).length;
@@ -980,7 +980,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
980
980
  type: "tool-result",
981
981
  callId: msg.callId,
982
982
  output: msg.result,
983
- id: randomUUID()
983
+ id: randomUUID(),
984
+ isError
984
985
  });
985
986
  break;
986
987
  case "fs-edit":
@@ -1076,7 +1077,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1076
1077
  stderr,
1077
1078
  success
1078
1079
  },
1079
- id: randomUUID()
1080
+ id: randomUUID(),
1081
+ isError: !success
1080
1082
  });
1081
1083
  break;
1082
1084
  case "event":
@@ -3,11 +3,11 @@
3
3
  var ink = require('ink');
4
4
  var React = require('react');
5
5
  var node_crypto = require('node:crypto');
6
- var api = require('./api-D9dIR956.cjs');
7
- var persistence = require('./persistence-PzKU0QCa.cjs');
8
- var BaseReasoningProcessor = require('./BaseReasoningProcessor-_wxlqKB8.cjs');
9
- var index = require('./index-LYPXVO_L.cjs');
10
- var registerKillSessionHandler = require('./registerKillSessionHandler-BDBPoQSA.cjs');
6
+ var api = require('./api-CyJG1mr6.cjs');
7
+ var persistence = require('./persistence-BeFVx6kI.cjs');
8
+ var BaseReasoningProcessor = require('./BaseReasoningProcessor-DEEfNi5Y.cjs');
9
+ var index = require('./index-1zlH6s7a.cjs');
10
+ var registerKillSessionHandler = require('./registerKillSessionHandler-CCxqGFjZ.cjs');
11
11
  require('axios');
12
12
  require('chalk');
13
13
  require('fs');
@@ -960,7 +960,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
960
960
  });
961
961
  break;
962
962
  case "tool-result":
963
- const isError = msg.result && typeof msg.result === "object" && "error" in msg.result;
963
+ const isError = Boolean(msg.result && typeof msg.result === "object" && "error" in msg.result);
964
964
  const resultText = typeof msg.result === "string" ? msg.result.substring(0, 200) : JSON.stringify(msg.result).substring(0, 200);
965
965
  const truncatedResult = resultText + (typeof msg.result === "string" && msg.result.length > 200 ? "..." : "");
966
966
  const resultSize = typeof msg.result === "string" ? msg.result.length : JSON.stringify(msg.result).length;
@@ -982,7 +982,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
982
982
  type: "tool-result",
983
983
  callId: msg.callId,
984
984
  output: msg.result,
985
- id: node_crypto.randomUUID()
985
+ id: node_crypto.randomUUID(),
986
+ isError
986
987
  });
987
988
  break;
988
989
  case "fs-edit":
@@ -1078,7 +1079,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1078
1079
  stderr,
1079
1080
  success
1080
1081
  },
1081
- id: node_crypto.randomUUID()
1082
+ id: node_crypto.randomUUID(),
1083
+ isError: !success
1082
1084
  });
1083
1085
  break;
1084
1086
  case "event":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-imou-cloud",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "description": "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI",
5
5
  "author": "long.zhu",
6
6
  "license": "MIT",