happy-imou-cloud 2.0.20 → 2.0.21
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/dist/{BaseReasoningProcessor-B9z785Pi.cjs → BaseReasoningProcessor-0nj-PMFc.cjs} +3 -3
- package/dist/{BaseReasoningProcessor-iTk5q5Vy.mjs → BaseReasoningProcessor-DnVC7liC.mjs} +3 -3
- package/dist/{ProviderSelectionHandler-DUBEXkmo.cjs → ProviderSelectionHandler-Bafuy28L.cjs} +2 -2
- package/dist/{ProviderSelectionHandler-s79sTquD.mjs → ProviderSelectionHandler-R-2r7ItM.mjs} +2 -2
- package/dist/{api-_Y2kzqZL.mjs → api-DJe9WP9M.mjs} +77 -4
- package/dist/{api-BKnzORe4.cjs → api-MGlKcEf3.cjs} +78 -3
- package/dist/{command-BDkgHdQU.mjs → command-CfyFnMv2.mjs} +3 -3
- package/dist/{command-BBNzMWEG.cjs → command-DAlFmWmr.cjs} +3 -3
- package/dist/{index-Bg4KLXYY.mjs → index-CHXCgpwi.mjs} +8 -8
- package/dist/{index-0TIyXMQu.cjs → index-CgVjDJpt.cjs} +11 -11
- package/dist/index.cjs +3 -3
- package/dist/index.mjs +3 -3
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +393 -36
- package/dist/lib.d.mts +393 -36
- package/dist/lib.mjs +1 -1
- package/dist/{persistence-BCkHc68b.mjs → persistence-CkP90vEt.mjs} +1 -1
- package/dist/{persistence-D5uolhHo.cjs → persistence-DLFUNI9q.cjs} +1 -1
- package/dist/{registerKillSessionHandler-BMUE5Oaj.cjs → registerKillSessionHandler-Cs_INk4A.cjs} +356 -3
- package/dist/{registerKillSessionHandler-DJMH-gar.mjs → registerKillSessionHandler-DsHTZDsU.mjs} +354 -4
- package/dist/{runClaude-BUhD2jR2.cjs → runClaude-BGSgcyUp.cjs} +72 -9
- package/dist/{runClaude-BMv-eao6.mjs → runClaude-DAQAEmHe.mjs} +72 -9
- package/dist/{runCodex-DwnLnXWK.mjs → runCodex-B2UpSn82.mjs} +84 -14
- package/dist/{runCodex-DyNSDN6X.cjs → runCodex-earICaxw.cjs} +84 -14
- package/dist/{runGemini-uVHDcJ09.mjs → runGemini-BBUmH1Qh.mjs} +73 -9
- package/dist/{runGemini-UKpRbyNY.cjs → runGemini-D5RAIaR0.cjs} +73 -9
- package/package.json +1 -1
- package/scripts/release-smoke.mjs +3 -3
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { l as logger,
|
|
2
|
+
import { l as logger, f as backoff, g as delay, h as AsyncLock, c as configuration, s as startOfflineReconnection, b as connectionState, A as ApiClient, i as isAuthenticationRequiredError } from './api-DJe9WP9M.mjs';
|
|
3
3
|
import 'cross-spawn';
|
|
4
4
|
import '@agentclientprotocol/sdk';
|
|
5
|
-
import { j as getProjectPath, F as Future, k as claudeLocal, E as ExitCodeError, l as trimIdent, m as createClaudeBackend, f as formatDisplayMessage, t as truncateDisplayMessage, n as claudeCheckSession, e as projectPath, o as mapToClaudeMode, P as PushableAsyncIterable, q as query, A as AbortError, b as stopCaffeinate, p as publishSessionRegistration, u as getEnvironmentInfo, w as startCaffeinate } from './index-
|
|
5
|
+
import { j as getProjectPath, F as Future, k as claudeLocal, E as ExitCodeError, l as trimIdent, m as createClaudeBackend, f as formatDisplayMessage, t as truncateDisplayMessage, n as claudeCheckSession, e as projectPath, o as mapToClaudeMode, P as PushableAsyncIterable, q as query, A as AbortError, b as stopCaffeinate, p as publishSessionRegistration, u as getEnvironmentInfo, w as startCaffeinate } from './index-CHXCgpwi.mjs';
|
|
6
6
|
import 'ps-list';
|
|
7
7
|
import 'fs';
|
|
8
8
|
import 'path';
|
|
@@ -13,7 +13,7 @@ import { dirname, basename, join, resolve } from 'node:path';
|
|
|
13
13
|
import { homedir } from 'node:os';
|
|
14
14
|
import { execSync } from 'node:child_process';
|
|
15
15
|
import 'node:readline';
|
|
16
|
-
import './persistence-
|
|
16
|
+
import './persistence-CkP90vEt.mjs';
|
|
17
17
|
import { readFile } from 'node:fs/promises';
|
|
18
18
|
import { stat, watch, access } from 'fs/promises';
|
|
19
19
|
import 'crypto';
|
|
@@ -24,9 +24,9 @@ import 'tweetnacl';
|
|
|
24
24
|
import 'open';
|
|
25
25
|
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
26
26
|
import { useStdout, useInput, Box, Text, render } from 'ink';
|
|
27
|
-
import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-
|
|
27
|
+
import { c as createKeepAliveController, P as ProviderSelectionHandler, r as runModeLoop } from './ProviderSelectionHandler-R-2r7ItM.mjs';
|
|
28
28
|
import { R as RawJSONLinesSchema } from './types-CiliQpqS.mjs';
|
|
29
|
-
import { B as BasePermissionHandler, d as MessageBuffer, C as ConversationHistory$1, w as waitForResponseCompleteWithAbort, l as launchRuntimeHandleWithFactoryResult,
|
|
29
|
+
import { B as BasePermissionHandler, d as MessageBuffer, C as ConversationHistory$1, i as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, j as finalizeHappyOrgTurn, l as launchRuntimeHandleWithFactoryResult, n as forwardAgentMessageToProviderSession, s as syncControlledByUserState, r as resolveHappyOrgQueuedTurn, e as ensureManagedProviderMachine, M as MissingMachineIdError, c as createSessionMetadata, b as MessageQueue2, h as hashObject, f as registerKillSessionHandler, k as closeProviderSession } from './registerKillSessionHandler-DsHTZDsU.mjs';
|
|
30
30
|
import 'socket.io-client';
|
|
31
31
|
import 'expo-server-sdk';
|
|
32
32
|
import { isDeepStrictEqual } from 'node:util';
|
|
@@ -1038,6 +1038,13 @@ async function claudeAcpRemoteLauncher(session) {
|
|
|
1038
1038
|
message
|
|
1039
1039
|
});
|
|
1040
1040
|
};
|
|
1041
|
+
const emitTurnReport = (report) => {
|
|
1042
|
+
session.client.sendAgentMessage("claude", {
|
|
1043
|
+
type: "turn-report",
|
|
1044
|
+
id: randomUUID(),
|
|
1045
|
+
report
|
|
1046
|
+
});
|
|
1047
|
+
};
|
|
1041
1048
|
const resetTurnState = () => {
|
|
1042
1049
|
accumulatedResponse = "";
|
|
1043
1050
|
isResponseInProgress = false;
|
|
@@ -1046,13 +1053,16 @@ async function claudeAcpRemoteLauncher(session) {
|
|
|
1046
1053
|
currentThinkingMessageId = null;
|
|
1047
1054
|
session.onThinkingChange(false);
|
|
1048
1055
|
};
|
|
1049
|
-
const emitFinalAssistantMessage = () => {
|
|
1050
|
-
const finalMessage = accumulatedResponse.trim();
|
|
1056
|
+
const emitFinalAssistantMessage = (finalMessageText) => {
|
|
1057
|
+
const finalMessage = (finalMessageText ?? accumulatedResponse).trim();
|
|
1051
1058
|
if (!finalMessage) {
|
|
1052
1059
|
accumulatedResponse = "";
|
|
1053
1060
|
isResponseInProgress = false;
|
|
1054
1061
|
return;
|
|
1055
1062
|
}
|
|
1063
|
+
if (currentAssistantMessageId) {
|
|
1064
|
+
messageBuffer.updateMessage(currentAssistantMessageId, finalMessage, { mode: "replace" });
|
|
1065
|
+
}
|
|
1056
1066
|
conversationHistory.addAssistantMessage(finalMessage);
|
|
1057
1067
|
session.client.sendAgentMessage("claude", {
|
|
1058
1068
|
type: "message",
|
|
@@ -1364,6 +1374,7 @@ ${systemPrompt}` : systemPrompt,
|
|
|
1364
1374
|
permissionHandler.setPermissionMode(message.mode.permissionMode);
|
|
1365
1375
|
messageBuffer.addMessage(message.message, "user");
|
|
1366
1376
|
let shouldClearHistoryAfterTurn = false;
|
|
1377
|
+
let turnStatus = "task_complete";
|
|
1367
1378
|
try {
|
|
1368
1379
|
const activeRuntimeHandle = runtimeHandle ?? await createRuntimeHandle(message.mode);
|
|
1369
1380
|
let promptToSend = message.message;
|
|
@@ -1374,6 +1385,9 @@ ${systemPrompt}` : systemPrompt,
|
|
|
1374
1385
|
promptToSend = historyContext + promptToSend;
|
|
1375
1386
|
logger.debug(`[ClaudeACP] Injected conversation history context (${historyContext.length} chars)`);
|
|
1376
1387
|
}
|
|
1388
|
+
if (message.mode.happyOrg) {
|
|
1389
|
+
promptToSend = buildHappyOrgTurnPrompt(promptToSend, message.mode.happyOrg);
|
|
1390
|
+
}
|
|
1377
1391
|
if (specialCommand.type === "compact") {
|
|
1378
1392
|
emitStatusMessage("Compaction started");
|
|
1379
1393
|
}
|
|
@@ -1387,6 +1401,7 @@ ${systemPrompt}` : systemPrompt,
|
|
|
1387
1401
|
const isAbortError = error instanceof Error && error.name === "AbortError";
|
|
1388
1402
|
const isExpectedInterruption = isAbortError || abortController.signal.aborted || shouldExit;
|
|
1389
1403
|
if (isExpectedInterruption) {
|
|
1404
|
+
turnStatus = "turn_aborted";
|
|
1390
1405
|
session.client.sendAgentMessage("claude", {
|
|
1391
1406
|
type: "turn_aborted",
|
|
1392
1407
|
id: randomUUID()
|
|
@@ -1403,7 +1418,23 @@ ${systemPrompt}` : systemPrompt,
|
|
|
1403
1418
|
currentModeHash = null;
|
|
1404
1419
|
}
|
|
1405
1420
|
} finally {
|
|
1406
|
-
|
|
1421
|
+
const finalizedTurn = finalizeHappyOrgTurn({
|
|
1422
|
+
metadata: session.client.getMetadataSnapshot?.() ?? null,
|
|
1423
|
+
queuedTurn: message.mode.happyOrg,
|
|
1424
|
+
responseText: accumulatedResponse,
|
|
1425
|
+
turnStatus
|
|
1426
|
+
});
|
|
1427
|
+
if (finalizedTurn.nextMetadata && typeof session.client.updateMetadata === "function") {
|
|
1428
|
+
session.client.updateMetadata(() => finalizedTurn.nextMetadata);
|
|
1429
|
+
}
|
|
1430
|
+
if (finalizedTurn.report) {
|
|
1431
|
+
emitTurnReport(finalizedTurn.report);
|
|
1432
|
+
}
|
|
1433
|
+
if (finalizedTurn.terminateMessage) {
|
|
1434
|
+
emitStatusMessage(finalizedTurn.terminateMessage);
|
|
1435
|
+
}
|
|
1436
|
+
accumulatedResponse = finalizedTurn.cleanedText;
|
|
1437
|
+
emitFinalAssistantMessage(finalizedTurn.cleanedText);
|
|
1407
1438
|
if (shouldClearHistoryAfterTurn) {
|
|
1408
1439
|
conversationHistory.clear();
|
|
1409
1440
|
emitStatusMessage("Compaction completed");
|
|
@@ -3128,8 +3159,28 @@ function resolveClaudeQueuedMessage(message, currentState) {
|
|
|
3128
3159
|
function bindClaudeUserMessageQueue(opts) {
|
|
3129
3160
|
let currentState = { ...opts.initialState };
|
|
3130
3161
|
opts.session.onUserMessage((message) => {
|
|
3162
|
+
const happyOrgResult = opts.happyOrg ? resolveHappyOrgQueuedTurn({
|
|
3163
|
+
metadata: opts.happyOrg.getMetadata(),
|
|
3164
|
+
message
|
|
3165
|
+
}) : {
|
|
3166
|
+
nextMetadata: null,
|
|
3167
|
+
queuedTurn: null,
|
|
3168
|
+
blocked: false,
|
|
3169
|
+
statusMessage: void 0
|
|
3170
|
+
};
|
|
3171
|
+
if (opts.happyOrg && happyOrgResult.nextMetadata) {
|
|
3172
|
+
opts.happyOrg.updateMetadata(() => happyOrgResult.nextMetadata);
|
|
3173
|
+
}
|
|
3174
|
+
if (happyOrgResult.blocked) {
|
|
3175
|
+
if (happyOrgResult.statusMessage) {
|
|
3176
|
+
opts.happyOrg?.emitStatusMessage(happyOrgResult.statusMessage);
|
|
3177
|
+
}
|
|
3178
|
+
logger.debugLargeJson("[claude] User message blocked by Happy Org runtime:", message);
|
|
3179
|
+
return;
|
|
3180
|
+
}
|
|
3131
3181
|
const { nextState, queuedMessage } = resolveClaudeQueuedMessage(message, currentState);
|
|
3132
3182
|
currentState = nextState;
|
|
3183
|
+
queuedMessage.mode.happyOrg = happyOrgResult.queuedTurn;
|
|
3133
3184
|
if (queuedMessage.isolate) {
|
|
3134
3185
|
logger.debug(`[claude] Queuing isolated special command: ${queuedMessage.specialCommand}`);
|
|
3135
3186
|
opts.messageQueue.pushIsolateAndClear(queuedMessage.text, queuedMessage.mode);
|
|
@@ -3234,7 +3285,14 @@ async function runClaude(credentials, options = {}) {
|
|
|
3234
3285
|
customSystemPrompt: mode.customSystemPrompt,
|
|
3235
3286
|
appendSystemPrompt: mode.appendSystemPrompt,
|
|
3236
3287
|
allowedTools: mode.allowedTools,
|
|
3237
|
-
disallowedTools: mode.disallowedTools
|
|
3288
|
+
disallowedTools: mode.disallowedTools,
|
|
3289
|
+
happyOrg: mode.happyOrg ? {
|
|
3290
|
+
taskId: mode.happyOrg.context.taskId,
|
|
3291
|
+
organizationId: mode.happyOrg.context.organizationId,
|
|
3292
|
+
memberAgentId: mode.happyOrg.context.memberAgentId,
|
|
3293
|
+
supervisorAgentId: mode.happyOrg.context.supervisorAgentId,
|
|
3294
|
+
reopenContext: mode.happyOrg.reopenContext ?? null
|
|
3295
|
+
} : null
|
|
3238
3296
|
}));
|
|
3239
3297
|
bindClaudeUserMessageQueue({
|
|
3240
3298
|
session,
|
|
@@ -3242,6 +3300,11 @@ async function runClaude(credentials, options = {}) {
|
|
|
3242
3300
|
initialState: {
|
|
3243
3301
|
permissionMode: options.permissionMode,
|
|
3244
3302
|
model: options.model
|
|
3303
|
+
},
|
|
3304
|
+
happyOrg: {
|
|
3305
|
+
getMetadata: () => session.getMetadataSnapshot(),
|
|
3306
|
+
updateMetadata: (handler) => session.updateMetadata(handler),
|
|
3307
|
+
emitStatusMessage: (message) => session.sendSessionEvent({ type: "message", message })
|
|
3245
3308
|
}
|
|
3246
3309
|
});
|
|
3247
3310
|
const cleanup = async () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { l as logger, b as connectionState, A as ApiClient } from './api-
|
|
3
|
-
import { B as BasePermissionHandler, h as hashObject, d as MessageBuffer, C as ConversationHistory$1, w as waitForResponseCompleteWithAbort,
|
|
4
|
-
import { f as formatDisplayMessage, v as validateCodexAcpSpawn, d as createCodexBackend, t as truncateDisplayMessage, b as stopCaffeinate } from './index-
|
|
2
|
+
import { l as logger, b as connectionState, A as ApiClient } from './api-DJe9WP9M.mjs';
|
|
3
|
+
import { B as BasePermissionHandler, h as hashObject, d as MessageBuffer, C as ConversationHistory$1, i as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, j as finalizeHappyOrgTurn, f 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-DsHTZDsU.mjs';
|
|
4
|
+
import { f as formatDisplayMessage, v as validateCodexAcpSpawn, d as createCodexBackend, t as truncateDisplayMessage, b as stopCaffeinate } from './index-CHXCgpwi.mjs';
|
|
5
5
|
import 'cross-spawn';
|
|
6
6
|
import '@agentclientprotocol/sdk';
|
|
7
7
|
import 'ps-list';
|
|
@@ -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-CkP90vEt.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-R-2r7ItM.mjs';
|
|
29
|
+
import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-DnVC7liC.mjs';
|
|
30
30
|
import 'zod';
|
|
31
31
|
import 'socket.io-client';
|
|
32
32
|
import 'expo-server-sdk';
|
|
@@ -486,7 +486,16 @@ function resolveCodexAcpExecutionMode(mode) {
|
|
|
486
486
|
};
|
|
487
487
|
}
|
|
488
488
|
function getCodexExecutionFingerprint(mode) {
|
|
489
|
-
return hashObject(
|
|
489
|
+
return hashObject({
|
|
490
|
+
...resolveCodexAcpExecutionMode(mode),
|
|
491
|
+
happyOrg: mode.happyOrg ? {
|
|
492
|
+
taskId: mode.happyOrg.context.taskId,
|
|
493
|
+
organizationId: mode.happyOrg.context.organizationId,
|
|
494
|
+
memberAgentId: mode.happyOrg.context.memberAgentId,
|
|
495
|
+
supervisorAgentId: mode.happyOrg.context.supervisorAgentId,
|
|
496
|
+
reopenContext: mode.happyOrg.reopenContext ?? null
|
|
497
|
+
} : null
|
|
498
|
+
});
|
|
490
499
|
}
|
|
491
500
|
|
|
492
501
|
function normalizeCodexBackendError(error) {
|
|
@@ -565,6 +574,7 @@ async function codexRemoteLauncher(session) {
|
|
|
565
574
|
let currentAssistantMessageId = null;
|
|
566
575
|
let currentThinkingMessageId = null;
|
|
567
576
|
let fatalRuntimeStopError = null;
|
|
577
|
+
let currentHappyOrgTurn = null;
|
|
568
578
|
const permissionHandler = new CodexPermissionHandler(session.client);
|
|
569
579
|
const selectionHandler = new CodexSelectionHandler(session.client);
|
|
570
580
|
const conversationHistory = new ConversationHistory$1({ maxMessages: 20, maxCharacters: 5e4 });
|
|
@@ -597,6 +607,7 @@ async function codexRemoteLauncher(session) {
|
|
|
597
607
|
shouldCommitAccumulatedResponse = false;
|
|
598
608
|
currentAssistantMessageId = null;
|
|
599
609
|
currentThinkingMessageId = null;
|
|
610
|
+
currentHappyOrgTurn = null;
|
|
600
611
|
session.onThinkingChange(false);
|
|
601
612
|
};
|
|
602
613
|
const abortActiveTurn = () => {
|
|
@@ -636,6 +647,13 @@ async function codexRemoteLauncher(session) {
|
|
|
636
647
|
id: randomUUID()
|
|
637
648
|
});
|
|
638
649
|
};
|
|
650
|
+
const emitTurnReport = (report) => {
|
|
651
|
+
session.runtimeSession.sendCodexMessage({
|
|
652
|
+
type: "turn-report",
|
|
653
|
+
id: randomUUID(),
|
|
654
|
+
report
|
|
655
|
+
});
|
|
656
|
+
};
|
|
639
657
|
const handleUnexpectedRuntimeStop = (detail) => {
|
|
640
658
|
if (shouldExit || fatalRuntimeStopError) {
|
|
641
659
|
return;
|
|
@@ -658,17 +676,33 @@ async function codexRemoteLauncher(session) {
|
|
|
658
676
|
}
|
|
659
677
|
emitStatusMessage(reason);
|
|
660
678
|
};
|
|
661
|
-
const emitFinalAssistantMessage = () => {
|
|
662
|
-
|
|
679
|
+
const emitFinalAssistantMessage = (finalMessageText) => {
|
|
680
|
+
const finalMessage = (finalMessageText ?? accumulatedResponse).trim();
|
|
681
|
+
if (!finalMessage) {
|
|
663
682
|
return;
|
|
664
683
|
}
|
|
665
|
-
|
|
666
|
-
|
|
684
|
+
if (currentAssistantMessageId) {
|
|
685
|
+
messageBuffer.updateMessage(currentAssistantMessageId, finalMessage, { mode: "replace" });
|
|
686
|
+
}
|
|
687
|
+
conversationHistory.addAssistantMessage(finalMessage);
|
|
688
|
+
if (currentHappyOrgTurn) {
|
|
689
|
+
session.runtimeSession.sendCodexMessage({
|
|
690
|
+
type: "message",
|
|
691
|
+
message: finalMessage,
|
|
692
|
+
id: randomUUID()
|
|
693
|
+
});
|
|
694
|
+
} else {
|
|
695
|
+
accumulatedResponse = finalMessage;
|
|
696
|
+
emitPendingAssistantMessageDelta({ force: true });
|
|
697
|
+
}
|
|
667
698
|
accumulatedResponse = "";
|
|
668
699
|
emittedResponseLength = 0;
|
|
669
700
|
isResponseInProgress = false;
|
|
670
701
|
};
|
|
671
|
-
const emitPendingAssistantMessageDelta = () => {
|
|
702
|
+
const emitPendingAssistantMessageDelta = (opts) => {
|
|
703
|
+
if (currentHappyOrgTurn && !opts?.force) {
|
|
704
|
+
return false;
|
|
705
|
+
}
|
|
672
706
|
const nextMessage = accumulatedResponse.slice(emittedResponseLength);
|
|
673
707
|
if (!nextMessage.trim()) {
|
|
674
708
|
return false;
|
|
@@ -968,6 +1002,8 @@ async function codexRemoteLauncher(session) {
|
|
|
968
1002
|
readyAlreadySent = false;
|
|
969
1003
|
messageBuffer.addMessage(message.message, "user");
|
|
970
1004
|
const turnSignal = abortController.signal;
|
|
1005
|
+
let turnStatus = "task_complete";
|
|
1006
|
+
currentHappyOrgTurn = message.mode.happyOrg ?? null;
|
|
971
1007
|
try {
|
|
972
1008
|
turnInFlight = true;
|
|
973
1009
|
shouldCommitAccumulatedResponse = false;
|
|
@@ -982,6 +1018,9 @@ async function codexRemoteLauncher(session) {
|
|
|
982
1018
|
promptToSend = historyContext + promptToSend;
|
|
983
1019
|
logger.debug(`[Codex] Injected conversation history context (${historyContext.length} chars)`);
|
|
984
1020
|
}
|
|
1021
|
+
if (message.mode.happyOrg) {
|
|
1022
|
+
promptToSend = buildHappyOrgTurnPrompt(promptToSend, message.mode.happyOrg);
|
|
1023
|
+
}
|
|
985
1024
|
conversationHistory.addUserMessage(message.message);
|
|
986
1025
|
await activeRuntimeHandle.sendPrompt(promptToSend);
|
|
987
1026
|
await waitForResponseCompleteWithAbort(activeRuntimeHandle.backend, turnSignal);
|
|
@@ -993,6 +1032,7 @@ async function codexRemoteLauncher(session) {
|
|
|
993
1032
|
const isAbortError = error instanceof Error && error.name === "AbortError";
|
|
994
1033
|
const isExpectedInterruption = isAbortError || turnSignal.aborted || shouldExit;
|
|
995
1034
|
if (isExpectedInterruption) {
|
|
1035
|
+
turnStatus = "turn_aborted";
|
|
996
1036
|
session.runtimeSession.sendCodexMessage({
|
|
997
1037
|
type: "turn_aborted",
|
|
998
1038
|
id: randomUUID()
|
|
@@ -1009,8 +1049,24 @@ async function codexRemoteLauncher(session) {
|
|
|
1009
1049
|
}
|
|
1010
1050
|
} finally {
|
|
1011
1051
|
turnInFlight = false;
|
|
1052
|
+
const finalizedTurn = finalizeHappyOrgTurn({
|
|
1053
|
+
metadata: session.runtimeSession.getMetadataSnapshot?.() ?? null,
|
|
1054
|
+
queuedTurn: message.mode.happyOrg,
|
|
1055
|
+
responseText: accumulatedResponse,
|
|
1056
|
+
turnStatus
|
|
1057
|
+
});
|
|
1058
|
+
if (finalizedTurn.nextMetadata && typeof session.runtimeSession.updateMetadata === "function") {
|
|
1059
|
+
session.runtimeSession.updateMetadata(() => finalizedTurn.nextMetadata);
|
|
1060
|
+
}
|
|
1061
|
+
if (finalizedTurn.report) {
|
|
1062
|
+
emitTurnReport(finalizedTurn.report);
|
|
1063
|
+
}
|
|
1064
|
+
if (finalizedTurn.terminateMessage) {
|
|
1065
|
+
emitStatusMessage(finalizedTurn.terminateMessage);
|
|
1066
|
+
}
|
|
1067
|
+
accumulatedResponse = finalizedTurn.cleanedText;
|
|
1012
1068
|
if (shouldCommitAccumulatedResponse) {
|
|
1013
|
-
emitFinalAssistantMessage();
|
|
1069
|
+
emitFinalAssistantMessage(finalizedTurn.cleanedText);
|
|
1014
1070
|
}
|
|
1015
1071
|
if (!shouldExit) {
|
|
1016
1072
|
session.runtimeSession.sendCodexMessage({
|
|
@@ -1175,6 +1231,19 @@ async function runCodex(opts) {
|
|
|
1175
1231
|
let currentPermissionMode = initialPermissionMode;
|
|
1176
1232
|
let currentModel;
|
|
1177
1233
|
sessionClient.onUserMessage((message) => {
|
|
1234
|
+
const happyOrgResult = resolveHappyOrgQueuedTurn({
|
|
1235
|
+
metadata: sessionClient.getMetadataSnapshot?.() ?? metadata,
|
|
1236
|
+
message
|
|
1237
|
+
});
|
|
1238
|
+
if (happyOrgResult.nextMetadata) {
|
|
1239
|
+
sessionClient.updateMetadata(() => happyOrgResult.nextMetadata);
|
|
1240
|
+
}
|
|
1241
|
+
if (happyOrgResult.blocked) {
|
|
1242
|
+
if (happyOrgResult.statusMessage) {
|
|
1243
|
+
sessionClient.sendSessionEvent({ type: "message", message: happyOrgResult.statusMessage });
|
|
1244
|
+
}
|
|
1245
|
+
return;
|
|
1246
|
+
}
|
|
1178
1247
|
const previousPermissionMode = currentPermissionMode;
|
|
1179
1248
|
let messagePermissionMode = previousPermissionMode;
|
|
1180
1249
|
if (message.meta?.permissionMode) {
|
|
@@ -1193,7 +1262,8 @@ async function runCodex(opts) {
|
|
|
1193
1262
|
}
|
|
1194
1263
|
messageQueue.push(message.content.text, {
|
|
1195
1264
|
permissionMode: permissionResolution.resolvedPermissionMode,
|
|
1196
|
-
model: messageModel
|
|
1265
|
+
model: messageModel,
|
|
1266
|
+
happyOrg: happyOrgResult.queuedTurn
|
|
1197
1267
|
});
|
|
1198
1268
|
});
|
|
1199
1269
|
codexSession = new CodexSession({
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var node_crypto = require('node:crypto');
|
|
4
|
-
var api = require('./api-
|
|
5
|
-
var registerKillSessionHandler = require('./registerKillSessionHandler-
|
|
6
|
-
var index = require('./index-
|
|
4
|
+
var api = require('./api-MGlKcEf3.cjs');
|
|
5
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-Cs_INk4A.cjs');
|
|
6
|
+
var index = require('./index-CgVjDJpt.cjs');
|
|
7
7
|
require('cross-spawn');
|
|
8
8
|
require('@agentclientprotocol/sdk');
|
|
9
9
|
require('ps-list');
|
|
@@ -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-DLFUNI9q.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-Bafuy28L.cjs');
|
|
31
|
+
var BaseReasoningProcessor = require('./BaseReasoningProcessor-0nj-PMFc.cjs');
|
|
32
32
|
require('zod');
|
|
33
33
|
require('socket.io-client');
|
|
34
34
|
require('expo-server-sdk');
|
|
@@ -488,7 +488,16 @@ function resolveCodexAcpExecutionMode(mode) {
|
|
|
488
488
|
};
|
|
489
489
|
}
|
|
490
490
|
function getCodexExecutionFingerprint(mode) {
|
|
491
|
-
return registerKillSessionHandler.hashObject(
|
|
491
|
+
return registerKillSessionHandler.hashObject({
|
|
492
|
+
...resolveCodexAcpExecutionMode(mode),
|
|
493
|
+
happyOrg: mode.happyOrg ? {
|
|
494
|
+
taskId: mode.happyOrg.context.taskId,
|
|
495
|
+
organizationId: mode.happyOrg.context.organizationId,
|
|
496
|
+
memberAgentId: mode.happyOrg.context.memberAgentId,
|
|
497
|
+
supervisorAgentId: mode.happyOrg.context.supervisorAgentId,
|
|
498
|
+
reopenContext: mode.happyOrg.reopenContext ?? null
|
|
499
|
+
} : null
|
|
500
|
+
});
|
|
492
501
|
}
|
|
493
502
|
|
|
494
503
|
function normalizeCodexBackendError(error) {
|
|
@@ -567,6 +576,7 @@ async function codexRemoteLauncher(session) {
|
|
|
567
576
|
let currentAssistantMessageId = null;
|
|
568
577
|
let currentThinkingMessageId = null;
|
|
569
578
|
let fatalRuntimeStopError = null;
|
|
579
|
+
let currentHappyOrgTurn = null;
|
|
570
580
|
const permissionHandler = new CodexPermissionHandler(session.client);
|
|
571
581
|
const selectionHandler = new CodexSelectionHandler(session.client);
|
|
572
582
|
const conversationHistory = new registerKillSessionHandler.ConversationHistory({ maxMessages: 20, maxCharacters: 5e4 });
|
|
@@ -599,6 +609,7 @@ async function codexRemoteLauncher(session) {
|
|
|
599
609
|
shouldCommitAccumulatedResponse = false;
|
|
600
610
|
currentAssistantMessageId = null;
|
|
601
611
|
currentThinkingMessageId = null;
|
|
612
|
+
currentHappyOrgTurn = null;
|
|
602
613
|
session.onThinkingChange(false);
|
|
603
614
|
};
|
|
604
615
|
const abortActiveTurn = () => {
|
|
@@ -638,6 +649,13 @@ async function codexRemoteLauncher(session) {
|
|
|
638
649
|
id: node_crypto.randomUUID()
|
|
639
650
|
});
|
|
640
651
|
};
|
|
652
|
+
const emitTurnReport = (report) => {
|
|
653
|
+
session.runtimeSession.sendCodexMessage({
|
|
654
|
+
type: "turn-report",
|
|
655
|
+
id: node_crypto.randomUUID(),
|
|
656
|
+
report
|
|
657
|
+
});
|
|
658
|
+
};
|
|
641
659
|
const handleUnexpectedRuntimeStop = (detail) => {
|
|
642
660
|
if (shouldExit || fatalRuntimeStopError) {
|
|
643
661
|
return;
|
|
@@ -660,17 +678,33 @@ async function codexRemoteLauncher(session) {
|
|
|
660
678
|
}
|
|
661
679
|
emitStatusMessage(reason);
|
|
662
680
|
};
|
|
663
|
-
const emitFinalAssistantMessage = () => {
|
|
664
|
-
|
|
681
|
+
const emitFinalAssistantMessage = (finalMessageText) => {
|
|
682
|
+
const finalMessage = (finalMessageText ?? accumulatedResponse).trim();
|
|
683
|
+
if (!finalMessage) {
|
|
665
684
|
return;
|
|
666
685
|
}
|
|
667
|
-
|
|
668
|
-
|
|
686
|
+
if (currentAssistantMessageId) {
|
|
687
|
+
messageBuffer.updateMessage(currentAssistantMessageId, finalMessage, { mode: "replace" });
|
|
688
|
+
}
|
|
689
|
+
conversationHistory.addAssistantMessage(finalMessage);
|
|
690
|
+
if (currentHappyOrgTurn) {
|
|
691
|
+
session.runtimeSession.sendCodexMessage({
|
|
692
|
+
type: "message",
|
|
693
|
+
message: finalMessage,
|
|
694
|
+
id: node_crypto.randomUUID()
|
|
695
|
+
});
|
|
696
|
+
} else {
|
|
697
|
+
accumulatedResponse = finalMessage;
|
|
698
|
+
emitPendingAssistantMessageDelta({ force: true });
|
|
699
|
+
}
|
|
669
700
|
accumulatedResponse = "";
|
|
670
701
|
emittedResponseLength = 0;
|
|
671
702
|
isResponseInProgress = false;
|
|
672
703
|
};
|
|
673
|
-
const emitPendingAssistantMessageDelta = () => {
|
|
704
|
+
const emitPendingAssistantMessageDelta = (opts) => {
|
|
705
|
+
if (currentHappyOrgTurn && !opts?.force) {
|
|
706
|
+
return false;
|
|
707
|
+
}
|
|
674
708
|
const nextMessage = accumulatedResponse.slice(emittedResponseLength);
|
|
675
709
|
if (!nextMessage.trim()) {
|
|
676
710
|
return false;
|
|
@@ -970,6 +1004,8 @@ async function codexRemoteLauncher(session) {
|
|
|
970
1004
|
readyAlreadySent = false;
|
|
971
1005
|
messageBuffer.addMessage(message.message, "user");
|
|
972
1006
|
const turnSignal = abortController.signal;
|
|
1007
|
+
let turnStatus = "task_complete";
|
|
1008
|
+
currentHappyOrgTurn = message.mode.happyOrg ?? null;
|
|
973
1009
|
try {
|
|
974
1010
|
turnInFlight = true;
|
|
975
1011
|
shouldCommitAccumulatedResponse = false;
|
|
@@ -984,6 +1020,9 @@ async function codexRemoteLauncher(session) {
|
|
|
984
1020
|
promptToSend = historyContext + promptToSend;
|
|
985
1021
|
api.logger.debug(`[Codex] Injected conversation history context (${historyContext.length} chars)`);
|
|
986
1022
|
}
|
|
1023
|
+
if (message.mode.happyOrg) {
|
|
1024
|
+
promptToSend = registerKillSessionHandler.buildHappyOrgTurnPrompt(promptToSend, message.mode.happyOrg);
|
|
1025
|
+
}
|
|
987
1026
|
conversationHistory.addUserMessage(message.message);
|
|
988
1027
|
await activeRuntimeHandle.sendPrompt(promptToSend);
|
|
989
1028
|
await registerKillSessionHandler.waitForResponseCompleteWithAbort(activeRuntimeHandle.backend, turnSignal);
|
|
@@ -995,6 +1034,7 @@ async function codexRemoteLauncher(session) {
|
|
|
995
1034
|
const isAbortError = error instanceof Error && error.name === "AbortError";
|
|
996
1035
|
const isExpectedInterruption = isAbortError || turnSignal.aborted || shouldExit;
|
|
997
1036
|
if (isExpectedInterruption) {
|
|
1037
|
+
turnStatus = "turn_aborted";
|
|
998
1038
|
session.runtimeSession.sendCodexMessage({
|
|
999
1039
|
type: "turn_aborted",
|
|
1000
1040
|
id: node_crypto.randomUUID()
|
|
@@ -1011,8 +1051,24 @@ async function codexRemoteLauncher(session) {
|
|
|
1011
1051
|
}
|
|
1012
1052
|
} finally {
|
|
1013
1053
|
turnInFlight = false;
|
|
1054
|
+
const finalizedTurn = registerKillSessionHandler.finalizeHappyOrgTurn({
|
|
1055
|
+
metadata: session.runtimeSession.getMetadataSnapshot?.() ?? null,
|
|
1056
|
+
queuedTurn: message.mode.happyOrg,
|
|
1057
|
+
responseText: accumulatedResponse,
|
|
1058
|
+
turnStatus
|
|
1059
|
+
});
|
|
1060
|
+
if (finalizedTurn.nextMetadata && typeof session.runtimeSession.updateMetadata === "function") {
|
|
1061
|
+
session.runtimeSession.updateMetadata(() => finalizedTurn.nextMetadata);
|
|
1062
|
+
}
|
|
1063
|
+
if (finalizedTurn.report) {
|
|
1064
|
+
emitTurnReport(finalizedTurn.report);
|
|
1065
|
+
}
|
|
1066
|
+
if (finalizedTurn.terminateMessage) {
|
|
1067
|
+
emitStatusMessage(finalizedTurn.terminateMessage);
|
|
1068
|
+
}
|
|
1069
|
+
accumulatedResponse = finalizedTurn.cleanedText;
|
|
1014
1070
|
if (shouldCommitAccumulatedResponse) {
|
|
1015
|
-
emitFinalAssistantMessage();
|
|
1071
|
+
emitFinalAssistantMessage(finalizedTurn.cleanedText);
|
|
1016
1072
|
}
|
|
1017
1073
|
if (!shouldExit) {
|
|
1018
1074
|
session.runtimeSession.sendCodexMessage({
|
|
@@ -1177,6 +1233,19 @@ async function runCodex(opts) {
|
|
|
1177
1233
|
let currentPermissionMode = initialPermissionMode;
|
|
1178
1234
|
let currentModel;
|
|
1179
1235
|
sessionClient.onUserMessage((message) => {
|
|
1236
|
+
const happyOrgResult = registerKillSessionHandler.resolveHappyOrgQueuedTurn({
|
|
1237
|
+
metadata: sessionClient.getMetadataSnapshot?.() ?? metadata,
|
|
1238
|
+
message
|
|
1239
|
+
});
|
|
1240
|
+
if (happyOrgResult.nextMetadata) {
|
|
1241
|
+
sessionClient.updateMetadata(() => happyOrgResult.nextMetadata);
|
|
1242
|
+
}
|
|
1243
|
+
if (happyOrgResult.blocked) {
|
|
1244
|
+
if (happyOrgResult.statusMessage) {
|
|
1245
|
+
sessionClient.sendSessionEvent({ type: "message", message: happyOrgResult.statusMessage });
|
|
1246
|
+
}
|
|
1247
|
+
return;
|
|
1248
|
+
}
|
|
1180
1249
|
const previousPermissionMode = currentPermissionMode;
|
|
1181
1250
|
let messagePermissionMode = previousPermissionMode;
|
|
1182
1251
|
if (message.meta?.permissionMode) {
|
|
@@ -1195,7 +1264,8 @@ async function runCodex(opts) {
|
|
|
1195
1264
|
}
|
|
1196
1265
|
messageQueue.push(message.content.text, {
|
|
1197
1266
|
permissionMode: permissionResolution.resolvedPermissionMode,
|
|
1198
|
-
model: messageModel
|
|
1267
|
+
model: messageModel,
|
|
1268
|
+
happyOrg: happyOrgResult.queuedTurn
|
|
1199
1269
|
});
|
|
1200
1270
|
});
|
|
1201
1271
|
codexSession = new CodexSession({
|