happy-imou-cloud 2.1.4 → 2.1.6

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 (28) hide show
  1. package/bin/happy-cloud.mjs +38 -38
  2. package/dist/{BaseReasoningProcessor-DgdsExMH.cjs → BaseReasoningProcessor-C3oDrA4i.cjs} +17 -4
  3. package/dist/{BaseReasoningProcessor-lTsZVuAU.mjs → BaseReasoningProcessor-CRXr7Axk.mjs} +16 -3
  4. package/dist/{ProviderSelectionHandler-CGTnB7ba.mjs → ProviderSelectionHandler-C3kHFqeq.mjs} +2 -2
  5. package/dist/{ProviderSelectionHandler-Bavm9TDG.cjs → ProviderSelectionHandler-Drg2Pp1-.cjs} +2 -2
  6. package/dist/{api-B6ESNpGB.cjs → api-CvtU4DI-.cjs} +2 -2
  7. package/dist/{api-l8X03rs-.mjs → api-DF9A136-.mjs} +3 -3
  8. package/dist/{command-DPLKOzMr.cjs → command-UZr1nodh.cjs} +3 -3
  9. package/dist/{command-BVCkEMtp.mjs → command-hO52qTzQ.mjs} +3 -3
  10. package/dist/{index-D72RMo5Z.mjs → index-B5e-MA1d.mjs} +268 -32
  11. package/dist/{index-D1BP-fEm.cjs → index-DA-K28E3.cjs} +264 -24
  12. package/dist/index.cjs +3 -3
  13. package/dist/index.mjs +3 -3
  14. package/dist/lib.cjs +1 -1
  15. package/dist/lib.d.cts +36 -36
  16. package/dist/lib.d.mts +36 -36
  17. package/dist/lib.mjs +1 -1
  18. package/dist/{persistence-CyFjFOlN.mjs → persistence-BsWBBi7E.mjs} +1 -1
  19. package/dist/{persistence-EDmI-c8T.cjs → persistence-CKgPuZRR.cjs} +1 -1
  20. package/dist/{registerKillSessionHandler-71xCO8e_.cjs → registerKillSessionHandler-3ytO-yBI.cjs} +72 -79
  21. package/dist/{registerKillSessionHandler-DAVhkb-l.mjs → registerKillSessionHandler-DmG1p8l7.mjs} +73 -78
  22. package/dist/{runClaude-BRhQLKjh.mjs → runClaude-MF34EsCp.mjs} +103 -40
  23. package/dist/{runClaude-DjnTGJGC.cjs → runClaude-bAlUdUGw.cjs} +106 -43
  24. package/dist/{runCodex-DUs_jBE-.mjs → runCodex-B31D_imZ.mjs} +10 -8
  25. package/dist/{runCodex-BHq7Rnq7.cjs → runCodex-CiIbJ1wa.cjs} +12 -10
  26. package/dist/{runGemini-pmvBZ6qU.mjs → runGemini-BJ7PxLyl.mjs} +5 -5
  27. package/dist/{runGemini-hkZeOnA_.cjs → runGemini-BZJR84o-.cjs} +7 -7
  28. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var node_crypto = require('node:crypto');
4
- var api = require('./api-B6ESNpGB.cjs');
4
+ var api = require('./api-CvtU4DI-.cjs');
5
5
  require('cross-spawn');
6
6
  require('@agentclientprotocol/sdk');
7
- var index = require('./index-D1BP-fEm.cjs');
7
+ var index = require('./index-DA-K28E3.cjs');
8
8
  require('ps-list');
9
9
  require('fs');
10
10
  require('path');
@@ -15,7 +15,7 @@ var path = require('node:path');
15
15
  var os = require('node:os');
16
16
  var node_child_process = require('node:child_process');
17
17
  require('node:readline');
18
- require('./persistence-EDmI-c8T.cjs');
18
+ require('./persistence-CKgPuZRR.cjs');
19
19
  var promises = require('node:fs/promises');
20
20
  var fs = require('fs/promises');
21
21
  require('crypto');
@@ -26,9 +26,9 @@ require('tweetnacl');
26
26
  require('open');
27
27
  var React = require('react');
28
28
  var ink = require('ink');
29
- var ProviderSelectionHandler = require('./ProviderSelectionHandler-Bavm9TDG.cjs');
29
+ var ProviderSelectionHandler = require('./ProviderSelectionHandler-Drg2Pp1-.cjs');
30
30
  var types = require('./types-DVk3crez.cjs');
31
- var registerKillSessionHandler = require('./registerKillSessionHandler-71xCO8e_.cjs');
31
+ var registerKillSessionHandler = require('./registerKillSessionHandler-3ytO-yBI.cjs');
32
32
  require('socket.io-client');
33
33
  require('expo-server-sdk');
34
34
  var node_util = require('node:util');
@@ -1403,6 +1403,7 @@ ${systemPrompt}` : systemPrompt,
1403
1403
  permissionHandler.setPermissionMode(message.mode.permissionMode);
1404
1404
  messageBuffer.addMessage(message.message, "user");
1405
1405
  let shouldClearHistoryAfterTurn = false;
1406
+ let shouldCommitAccumulatedResponse = false;
1406
1407
  let turnStatus = "task_complete";
1407
1408
  try {
1408
1409
  turnInFlight = true;
@@ -1424,18 +1425,19 @@ ${systemPrompt}` : systemPrompt,
1424
1425
  conversationHistory.addUserMessage(message.message);
1425
1426
  await activeRuntimeHandle.sendPrompt(promptToSend);
1426
1427
  await registerKillSessionHandler.waitForResponseCompleteWithAbort(activeRuntimeHandle.backend, abortController.signal);
1428
+ shouldCommitAccumulatedResponse = true;
1427
1429
  shouldInjectHistoryOnNextSession = false;
1428
1430
  shouldClearHistoryAfterTurn = specialCommand.type === "compact";
1429
1431
  } catch (error) {
1430
1432
  api.logger.warn("[ClaudeACP] Error in Claude ACP session:", error);
1431
1433
  const isAbortError = error instanceof Error && error.name === "AbortError";
1432
1434
  const isExpectedInterruption = isAbortError || abortController.signal.aborted || shouldExit;
1435
+ turnStatus = "turn_aborted";
1436
+ session.client.sendAgentMessage("claude", {
1437
+ type: "turn_aborted",
1438
+ id: node_crypto.randomUUID()
1439
+ });
1433
1440
  if (isExpectedInterruption) {
1434
- turnStatus = "turn_aborted";
1435
- session.client.sendAgentMessage("claude", {
1436
- type: "turn_aborted",
1437
- id: node_crypto.randomUUID()
1438
- });
1439
1441
  emitStatusMessage("Aborted by user");
1440
1442
  } else {
1441
1443
  const errorMessage = normalizeClaudeBackendError(error);
@@ -1465,7 +1467,9 @@ ${systemPrompt}` : systemPrompt,
1465
1467
  emitStatusMessage(finalizedTurn.terminateMessage);
1466
1468
  }
1467
1469
  accumulatedResponse = finalizedTurn.cleanedText;
1468
- emitFinalAssistantMessage(finalizedTurn.cleanedText);
1470
+ if (shouldCommitAccumulatedResponse) {
1471
+ emitFinalAssistantMessage(finalizedTurn.cleanedText);
1472
+ }
1469
1473
  if (shouldClearHistoryAfterTurn) {
1470
1474
  conversationHistory.clear();
1471
1475
  emitStatusMessage("Compaction completed");
@@ -1734,6 +1738,7 @@ class PermissionHandler {
1734
1738
  toolCalls = [];
1735
1739
  responses = /* @__PURE__ */ new Map();
1736
1740
  pendingRequests = /* @__PURE__ */ new Map();
1741
+ pendingToolCallResolutions = /* @__PURE__ */ new Set();
1737
1742
  session;
1738
1743
  allowedTools = /* @__PURE__ */ new Set();
1739
1744
  allowedBashLiterals = /* @__PURE__ */ new Set();
@@ -1813,23 +1818,20 @@ class PermissionHandler {
1813
1818
  if (this.permissionMode === "acceptEdits" && descriptor.edit) {
1814
1819
  return { behavior: "allow", updatedInput: input };
1815
1820
  }
1816
- let toolCallId = this.resolveToolCallId(toolName, input);
1817
- if (!toolCallId) {
1818
- await api.delay(1e3);
1819
- toolCallId = this.resolveToolCallId(toolName, input);
1820
- if (!toolCallId) {
1821
- throw new Error(`Could not resolve tool call ID for ${toolName}`);
1822
- }
1823
- }
1821
+ const toolCallId = await this.waitForToolCallId(toolName, input, options.signal);
1824
1822
  return this.handlePermissionRequest(toolCallId, toolName, input, options.signal);
1825
1823
  };
1826
1824
  /**
1827
1825
  * Handles individual permission requests
1828
1826
  */
1829
1827
  async handlePermissionRequest(id, toolName, input, signal) {
1828
+ if (signal.aborted) {
1829
+ throw new Error("Permission request aborted");
1830
+ }
1830
1831
  return new Promise((resolve, reject) => {
1831
1832
  const abortHandler = () => {
1832
1833
  this.pendingRequests.delete(id);
1834
+ this.moveRequestToCompleted(id, "canceled", "Permission request aborted");
1833
1835
  reject(new Error("Permission request aborted"));
1834
1836
  };
1835
1837
  signal.addEventListener("abort", abortHandler, { once: true });
@@ -1872,6 +1874,31 @@ class PermissionHandler {
1872
1874
  api.logger.debug(`Permission request sent for tool call ${id}: ${toolName}`);
1873
1875
  });
1874
1876
  }
1877
+ moveRequestToCompleted(id, status, reason, extra = {}) {
1878
+ this.session.client.updateAgentState((currentState) => {
1879
+ const request = currentState.requests?.[id];
1880
+ if (!request) {
1881
+ return currentState;
1882
+ }
1883
+ const requests = { ...currentState.requests || {} };
1884
+ delete requests[id];
1885
+ return {
1886
+ ...currentState,
1887
+ requests,
1888
+ completedRequests: {
1889
+ ...currentState.completedRequests,
1890
+ [id]: {
1891
+ ...request,
1892
+ completedAt: Date.now(),
1893
+ status,
1894
+ reason,
1895
+ mode: extra.mode,
1896
+ allowTools: extra.allowTools
1897
+ }
1898
+ }
1899
+ };
1900
+ });
1901
+ }
1875
1902
  /**
1876
1903
  * Parses Bash permission strings into literal and prefix sets
1877
1904
  */
@@ -1908,6 +1935,49 @@ class PermissionHandler {
1908
1935
  }
1909
1936
  return null;
1910
1937
  }
1938
+ async waitForToolCallId(toolName, input, signal) {
1939
+ const existingToolCallId = this.resolveToolCallId(toolName, input);
1940
+ if (existingToolCallId) {
1941
+ return existingToolCallId;
1942
+ }
1943
+ if (signal.aborted) {
1944
+ throw new Error("Permission request aborted before tool call was observed");
1945
+ }
1946
+ return new Promise((resolve, reject) => {
1947
+ const pendingResolution = {};
1948
+ const cleanup = () => {
1949
+ signal.removeEventListener("abort", pendingResolution.abortHandler);
1950
+ this.pendingToolCallResolutions.delete(pendingResolution);
1951
+ };
1952
+ pendingResolution.toolName = toolName;
1953
+ pendingResolution.input = input;
1954
+ pendingResolution.resolve = (toolCallId) => {
1955
+ cleanup();
1956
+ resolve(toolCallId);
1957
+ };
1958
+ pendingResolution.reject = (error) => {
1959
+ cleanup();
1960
+ reject(error);
1961
+ };
1962
+ pendingResolution.abortHandler = () => {
1963
+ pendingResolution.reject(new Error("Permission request aborted before tool call was observed"));
1964
+ };
1965
+ this.pendingToolCallResolutions.add(pendingResolution);
1966
+ signal.addEventListener("abort", pendingResolution.abortHandler, { once: true });
1967
+ this.resolvePendingToolCallResolutions();
1968
+ });
1969
+ }
1970
+ resolvePendingToolCallResolutions() {
1971
+ if (this.pendingToolCallResolutions.size === 0) {
1972
+ return;
1973
+ }
1974
+ for (const pending of Array.from(this.pendingToolCallResolutions)) {
1975
+ const toolCallId = this.resolveToolCallId(pending.toolName, pending.input);
1976
+ if (toolCallId) {
1977
+ pending.resolve(toolCallId);
1978
+ }
1979
+ }
1980
+ }
1911
1981
  /**
1912
1982
  * Handles messages to track tool calls
1913
1983
  */
@@ -1925,6 +1995,7 @@ class PermissionHandler {
1925
1995
  });
1926
1996
  }
1927
1997
  }
1998
+ this.resolvePendingToolCallResolutions();
1928
1999
  }
1929
2000
  }
1930
2001
  if (message.type === "user") {
@@ -1963,6 +2034,10 @@ class PermissionHandler {
1963
2034
  this.allowedTools.clear();
1964
2035
  this.allowedBashLiterals.clear();
1965
2036
  this.allowedBashPrefixes.clear();
2037
+ for (const pendingResolution of Array.from(this.pendingToolCallResolutions)) {
2038
+ pendingResolution.reject(new Error("Session reset"));
2039
+ }
2040
+ this.pendingToolCallResolutions.clear();
1966
2041
  for (const [, pending] of this.pendingRequests.entries()) {
1967
2042
  pending.reject(new Error("Session reset"));
1968
2043
  }
@@ -2001,27 +2076,15 @@ class PermissionHandler {
2001
2076
  this.responses.set(id, { ...message, receivedAt: Date.now() });
2002
2077
  this.pendingRequests.delete(id);
2003
2078
  this.handlePermissionResponse(message, pending);
2004
- this.session.client.updateAgentState((currentState) => {
2005
- const request = currentState.requests?.[id];
2006
- if (!request) return currentState;
2007
- let r = { ...currentState.requests };
2008
- delete r[id];
2009
- return {
2010
- ...currentState,
2011
- requests: r,
2012
- completedRequests: {
2013
- ...currentState.completedRequests,
2014
- [id]: {
2015
- ...request,
2016
- completedAt: Date.now(),
2017
- status: message.approved ? "approved" : "denied",
2018
- reason: message.reason,
2019
- mode: message.mode,
2020
- allowTools: message.allowTools
2021
- }
2022
- }
2023
- };
2024
- });
2079
+ this.moveRequestToCompleted(
2080
+ id,
2081
+ message.approved ? "approved" : "denied",
2082
+ message.reason,
2083
+ {
2084
+ mode: message.mode,
2085
+ allowTools: message.allowTools
2086
+ }
2087
+ );
2025
2088
  });
2026
2089
  }
2027
2090
  /**
@@ -3248,7 +3311,7 @@ async function runClaude(credentials, options = {}) {
3248
3311
  throw error;
3249
3312
  }
3250
3313
  api.logger.debug(`Using machineId: ${machineId}`);
3251
- const { state, metadata } = registerKillSessionHandler.createSessionMetadata({
3314
+ const { state, metadata } = index.createSessionMetadata({
3252
3315
  flavor: "claude",
3253
3316
  machineId,
3254
3317
  startedBy: options.startedBy
@@ -3343,7 +3406,7 @@ async function runClaude(credentials, options = {}) {
3343
3406
  try {
3344
3407
  if (session) {
3345
3408
  currentSession?.cleanup();
3346
- await registerKillSessionHandler.closeProviderSession(session, {
3409
+ await index.closeProviderSession(session, {
3347
3410
  archiveReason: "User terminated"
3348
3411
  });
3349
3412
  }
@@ -3394,7 +3457,7 @@ async function runClaude(credentials, options = {}) {
3394
3457
  currentSession?.cleanup();
3395
3458
  api.logger.debug("Waiting for socket to flush...");
3396
3459
  api.logger.debug("Closing session...");
3397
- await registerKillSessionHandler.closeProviderSession(session, {
3460
+ await index.closeProviderSession(session, {
3398
3461
  archiveOnClose: true
3399
3462
  });
3400
3463
  index.stopCaffeinate();
@@ -1,9 +1,9 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { l as logger, b as connectionState, A as ApiClient } from './api-l8X03rs-.mjs';
3
- import { B as BasePermissionHandler, h as hashObject, f as MessageBuffer, C as ConversationHistory$1, i as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, j as finalizeHappyOrgTurn, d as registerKillSessionHandler, l as launchRuntimeHandleWithFactoryResult, m as inferToolResultError, n as forwardAgentMessageToProviderSession, k as closeProviderSession, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, r as resolveHappyOrgQueuedTurn, s as syncControlledByUserState } from './registerKillSessionHandler-DAVhkb-l.mjs';
4
- import { f as formatDisplayMessage, v as validateCodexAcpSpawn, d as createCodexBackend, t as truncateDisplayMessage, b as stopCaffeinate } from './index-D72RMo5Z.mjs';
1
+ import { l as logger, b as connectionState, A as ApiClient } from './api-DF9A136-.mjs';
2
+ import { B as BasePermissionHandler, h as hashObject, d as MessageBuffer, C as ConversationHistory$1, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, i as finalizeHappyOrgTurn, c as registerKillSessionHandler, l as launchRuntimeHandleWithFactoryResult, j as inferToolResultError, k as forwardAgentMessageToProviderSession, e as ensureManagedProviderMachine, M as MissingMachineIdError, b as MessageQueue2, r as resolveHappyOrgQueuedTurn, s as syncControlledByUserState } from './registerKillSessionHandler-DmG1p8l7.mjs';
3
+ import { f as formatDisplayMessage, v as validateCodexAcpSpawn, h as createCodexBackend, t as truncateDisplayMessage, b as closeProviderSession, e as stopCaffeinate, i as readManagedSessionTag, j as resolveManagedSessionTag } from './index-B5e-MA1d.mjs';
5
4
  import 'cross-spawn';
6
5
  import '@agentclientprotocol/sdk';
6
+ import { randomUUID } from 'node:crypto';
7
7
  import 'ps-list';
8
8
  import 'fs';
9
9
  import 'path';
@@ -14,7 +14,7 @@ import 'node:path';
14
14
  import 'node:os';
15
15
  import 'node:child_process';
16
16
  import 'node:readline';
17
- import './persistence-CyFjFOlN.mjs';
17
+ import './persistence-BsWBBi7E.mjs';
18
18
  import 'node:fs/promises';
19
19
  import 'fs/promises';
20
20
  import 'crypto';
@@ -25,8 +25,8 @@ import 'tweetnacl';
25
25
  import 'open';
26
26
  import React, { useState, useRef, useEffect, useCallback } from 'react';
27
27
  import { useStdout, useInput, Box, Text, render } from 'ink';
28
- import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-CGTnB7ba.mjs';
29
- import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-lTsZVuAU.mjs';
28
+ import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-C3kHFqeq.mjs';
29
+ import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-CRXr7Axk.mjs';
30
30
  import 'zod';
31
31
  import 'socket.io-client';
32
32
  import 'expo-server-sdk';
@@ -1180,7 +1180,8 @@ function resolveIncomingCodexPermissionMode(opts) {
1180
1180
  };
1181
1181
  }
1182
1182
  async function runCodex(opts) {
1183
- const sessionTag = randomUUID();
1183
+ const managedSessionTag = readManagedSessionTag();
1184
+ const sessionTag = managedSessionTag ?? resolveManagedSessionTag();
1184
1185
  connectionState.setBackend("Codex");
1185
1186
  const requestedStartingMode = opts.startingMode ?? (opts.startedBy === "daemon" ? "remote" : "local");
1186
1187
  const initialPermissionMode = resolveInitialCodexPermissionMode({
@@ -1225,6 +1226,7 @@ async function runCodex(opts) {
1225
1226
  machineId,
1226
1227
  startedBy: opts.startedBy,
1227
1228
  authFallbackLogMessage: "[codex] Falling back to offline session stub after authentication failure",
1229
+ reconcileMetadataOnAttach: managedSessionTag !== null,
1228
1230
  onSessionSwap: (newSession) => {
1229
1231
  sessionClient = newSession;
1230
1232
  codexSession?.updateClient(newSession);
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var node_crypto = require('node:crypto');
4
- var api = require('./api-B6ESNpGB.cjs');
5
- var registerKillSessionHandler = require('./registerKillSessionHandler-71xCO8e_.cjs');
6
- var index = require('./index-D1BP-fEm.cjs');
3
+ var api = require('./api-CvtU4DI-.cjs');
4
+ var registerKillSessionHandler = require('./registerKillSessionHandler-3ytO-yBI.cjs');
5
+ var index = require('./index-DA-K28E3.cjs');
7
6
  require('cross-spawn');
8
7
  require('@agentclientprotocol/sdk');
8
+ var node_crypto = require('node:crypto');
9
9
  require('ps-list');
10
10
  require('fs');
11
11
  require('path');
@@ -16,7 +16,7 @@ require('node:path');
16
16
  require('node:os');
17
17
  require('node:child_process');
18
18
  require('node:readline');
19
- require('./persistence-EDmI-c8T.cjs');
19
+ require('./persistence-CKgPuZRR.cjs');
20
20
  require('node:fs/promises');
21
21
  require('fs/promises');
22
22
  require('crypto');
@@ -27,8 +27,8 @@ require('tweetnacl');
27
27
  require('open');
28
28
  var React = require('react');
29
29
  var ink = require('ink');
30
- var ProviderSelectionHandler = require('./ProviderSelectionHandler-Bavm9TDG.cjs');
31
- var BaseReasoningProcessor = require('./BaseReasoningProcessor-DgdsExMH.cjs');
30
+ var ProviderSelectionHandler = require('./ProviderSelectionHandler-Drg2Pp1-.cjs');
31
+ var BaseReasoningProcessor = require('./BaseReasoningProcessor-C3oDrA4i.cjs');
32
32
  require('zod');
33
33
  require('socket.io-client');
34
34
  require('expo-server-sdk');
@@ -926,7 +926,7 @@ async function codexRemoteLauncher(session) {
926
926
  api.logger.debug("[Codex] Kill session requested - terminating process");
927
927
  await handleAbort();
928
928
  try {
929
- await registerKillSessionHandler.closeProviderSession(session.runtimeSession, {
929
+ await index.closeProviderSession(session.runtimeSession, {
930
930
  archiveReason: "User terminated"
931
931
  });
932
932
  await disposeRuntimeHandle();
@@ -1182,7 +1182,8 @@ function resolveIncomingCodexPermissionMode(opts) {
1182
1182
  };
1183
1183
  }
1184
1184
  async function runCodex(opts) {
1185
- const sessionTag = node_crypto.randomUUID();
1185
+ const managedSessionTag = index.readManagedSessionTag();
1186
+ const sessionTag = managedSessionTag ?? index.resolveManagedSessionTag();
1186
1187
  api.connectionState.setBackend("Codex");
1187
1188
  const requestedStartingMode = opts.startingMode ?? (opts.startedBy === "daemon" ? "remote" : "local");
1188
1189
  const initialPermissionMode = resolveInitialCodexPermissionMode({
@@ -1227,6 +1228,7 @@ async function runCodex(opts) {
1227
1228
  machineId,
1228
1229
  startedBy: opts.startedBy,
1229
1230
  authFallbackLogMessage: "[codex] Falling back to offline session stub after authentication failure",
1231
+ reconcileMetadataOnAttach: managedSessionTag !== null,
1230
1232
  onSessionSwap: (newSession) => {
1231
1233
  sessionClient = newSession;
1232
1234
  codexSession?.updateClient(newSession);
@@ -1307,7 +1309,7 @@ async function runCodex(opts) {
1307
1309
  loopError = error;
1308
1310
  } finally {
1309
1311
  try {
1310
- await registerKillSessionHandler.closeProviderSession(sessionClient, {
1312
+ await index.closeProviderSession(sessionClient, {
1311
1313
  archiveOnClose: true
1312
1314
  });
1313
1315
  } catch (error) {
@@ -1,10 +1,10 @@
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 } from './api-l8X03rs-.mjs';
5
- import { B as BasePermissionHandler, C as ConversationHistory$1, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, s as syncControlledByUserState, b as MessageQueue2, h as hashObject, d as registerKillSessionHandler, f as MessageBuffer, i as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, j as finalizeHappyOrgTurn, k as closeProviderSession, l as launchRuntimeHandleWithFactoryResult, m as inferToolResultError, n as forwardAgentMessageToProviderSession } from './registerKillSessionHandler-DAVhkb-l.mjs';
6
- import { g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, s as saveGeminiModelToConfig, a as createGeminiBackend, b as stopCaffeinate } from './index-D72RMo5Z.mjs';
7
- import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-lTsZVuAU.mjs';
4
+ import { l as logger, b as connectionState, A as ApiClient } from './api-DF9A136-.mjs';
5
+ import { B as BasePermissionHandler, C as ConversationHistory$1, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, s as syncControlledByUserState, b as MessageQueue2, h as hashObject, c as registerKillSessionHandler, d as MessageBuffer, f as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, i as finalizeHappyOrgTurn, l as launchRuntimeHandleWithFactoryResult, j as inferToolResultError, k as forwardAgentMessageToProviderSession } from './registerKillSessionHandler-DmG1p8l7.mjs';
6
+ import { g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, b as closeProviderSession, s as saveGeminiModelToConfig, d as createGeminiBackend, e as stopCaffeinate } from './index-B5e-MA1d.mjs';
7
+ import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-CRXr7Axk.mjs';
8
8
  import 'cross-spawn';
9
9
  import '@agentclientprotocol/sdk';
10
10
  import 'ps-list';
@@ -15,7 +15,7 @@ import 'node:child_process';
15
15
  import 'node:readline';
16
16
  import 'tweetnacl';
17
17
  import 'axios';
18
- import './persistence-CyFjFOlN.mjs';
18
+ import './persistence-BsWBBi7E.mjs';
19
19
  import 'open';
20
20
  import 'chalk';
21
21
  import 'fs';
@@ -3,10 +3,10 @@
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-B6ESNpGB.cjs');
7
- var registerKillSessionHandler = require('./registerKillSessionHandler-71xCO8e_.cjs');
8
- var index = require('./index-D1BP-fEm.cjs');
9
- var BaseReasoningProcessor = require('./BaseReasoningProcessor-DgdsExMH.cjs');
6
+ var api = require('./api-CvtU4DI-.cjs');
7
+ var registerKillSessionHandler = require('./registerKillSessionHandler-3ytO-yBI.cjs');
8
+ var index = require('./index-DA-K28E3.cjs');
9
+ var BaseReasoningProcessor = require('./BaseReasoningProcessor-C3oDrA4i.cjs');
10
10
  require('cross-spawn');
11
11
  require('@agentclientprotocol/sdk');
12
12
  require('ps-list');
@@ -17,7 +17,7 @@ require('node:child_process');
17
17
  require('node:readline');
18
18
  require('tweetnacl');
19
19
  require('axios');
20
- require('./persistence-EDmI-c8T.cjs');
20
+ require('./persistence-CKgPuZRR.cjs');
21
21
  require('open');
22
22
  require('chalk');
23
23
  require('fs');
@@ -707,7 +707,7 @@ async function runGemini(opts) {
707
707
  api.logger.debug("[Gemini] Abort completed, proceeding with termination");
708
708
  try {
709
709
  if (session) {
710
- await registerKillSessionHandler.closeProviderSession(session, {
710
+ await index.closeProviderSession(session, {
711
711
  archiveReason: "User terminated"
712
712
  });
713
713
  }
@@ -1338,7 +1338,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
1338
1338
  reconnectionHandle.cancel();
1339
1339
  }
1340
1340
  try {
1341
- await registerKillSessionHandler.closeProviderSession(session, {
1341
+ await index.closeProviderSession(session, {
1342
1342
  archiveOnClose: true
1343
1343
  });
1344
1344
  } catch (e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-imou-cloud",
3
- "version": "2.1.4",
3
+ "version": "2.1.6",
4
4
  "description": "hicloud - Imou 企业定制版。关键是 happy!移动端远程 AI 编程工具,支持 Claude Code、Codex 和 Gemini CLI",
5
5
  "author": "long.zhu",
6
6
  "license": "MIT",
@@ -125,7 +125,7 @@
125
125
  "shx": "^0.3.3",
126
126
  "ts-node": "^10",
127
127
  "tsx": "^4.20.6",
128
- "typescript": "5.9.3",
128
+ "typescript": "5.9.3",
129
129
  "vitest": "^3.2.4"
130
130
  },
131
131
  "resolutions": {