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.
- package/bin/happy-cloud.mjs +38 -38
- package/dist/{BaseReasoningProcessor-DgdsExMH.cjs → BaseReasoningProcessor-C3oDrA4i.cjs} +17 -4
- package/dist/{BaseReasoningProcessor-lTsZVuAU.mjs → BaseReasoningProcessor-CRXr7Axk.mjs} +16 -3
- package/dist/{ProviderSelectionHandler-CGTnB7ba.mjs → ProviderSelectionHandler-C3kHFqeq.mjs} +2 -2
- package/dist/{ProviderSelectionHandler-Bavm9TDG.cjs → ProviderSelectionHandler-Drg2Pp1-.cjs} +2 -2
- package/dist/{api-B6ESNpGB.cjs → api-CvtU4DI-.cjs} +2 -2
- package/dist/{api-l8X03rs-.mjs → api-DF9A136-.mjs} +3 -3
- package/dist/{command-DPLKOzMr.cjs → command-UZr1nodh.cjs} +3 -3
- package/dist/{command-BVCkEMtp.mjs → command-hO52qTzQ.mjs} +3 -3
- package/dist/{index-D72RMo5Z.mjs → index-B5e-MA1d.mjs} +268 -32
- package/dist/{index-D1BP-fEm.cjs → index-DA-K28E3.cjs} +264 -24
- package/dist/index.cjs +3 -3
- package/dist/index.mjs +3 -3
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +36 -36
- package/dist/lib.d.mts +36 -36
- package/dist/lib.mjs +1 -1
- package/dist/{persistence-CyFjFOlN.mjs → persistence-BsWBBi7E.mjs} +1 -1
- package/dist/{persistence-EDmI-c8T.cjs → persistence-CKgPuZRR.cjs} +1 -1
- package/dist/{registerKillSessionHandler-71xCO8e_.cjs → registerKillSessionHandler-3ytO-yBI.cjs} +72 -79
- package/dist/{registerKillSessionHandler-DAVhkb-l.mjs → registerKillSessionHandler-DmG1p8l7.mjs} +73 -78
- package/dist/{runClaude-BRhQLKjh.mjs → runClaude-MF34EsCp.mjs} +103 -40
- package/dist/{runClaude-DjnTGJGC.cjs → runClaude-bAlUdUGw.cjs} +106 -43
- package/dist/{runCodex-DUs_jBE-.mjs → runCodex-B31D_imZ.mjs} +10 -8
- package/dist/{runCodex-BHq7Rnq7.cjs → runCodex-CiIbJ1wa.cjs} +12 -10
- package/dist/{runGemini-pmvBZ6qU.mjs → runGemini-BJ7PxLyl.mjs} +5 -5
- package/dist/{runGemini-hkZeOnA_.cjs → runGemini-BZJR84o-.cjs} +7 -7
- 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-
|
|
4
|
+
var api = require('./api-CvtU4DI-.cjs');
|
|
5
5
|
require('cross-spawn');
|
|
6
6
|
require('@agentclientprotocol/sdk');
|
|
7
|
-
var index = require('./index-
|
|
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-
|
|
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-
|
|
29
|
+
var ProviderSelectionHandler = require('./ProviderSelectionHandler-Drg2Pp1-.cjs');
|
|
30
30
|
var types = require('./types-DVk3crez.cjs');
|
|
31
|
-
var registerKillSessionHandler = require('./registerKillSessionHandler-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
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 } =
|
|
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
|
|
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
|
|
3460
|
+
await index.closeProviderSession(session, {
|
|
3398
3461
|
archiveOnClose: true
|
|
3399
3462
|
});
|
|
3400
3463
|
index.stopCaffeinate();
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { l as
|
|
3
|
-
import {
|
|
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-
|
|
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-
|
|
29
|
-
import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-
|
|
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
|
|
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
|
|
4
|
-
var
|
|
5
|
-
var
|
|
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-
|
|
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-
|
|
31
|
-
var BaseReasoningProcessor = require('./BaseReasoningProcessor-
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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,
|
|
6
|
-
import { g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, s as saveGeminiModelToConfig,
|
|
7
|
-
import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-
|
|
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-
|
|
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-
|
|
7
|
-
var registerKillSessionHandler = require('./registerKillSessionHandler-
|
|
8
|
-
var index = require('./index-
|
|
9
|
-
var BaseReasoningProcessor = require('./BaseReasoningProcessor-
|
|
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-
|
|
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
|
|
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
|
|
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.
|
|
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": {
|