@openclaw/codex 2026.9.4 → 2026.9.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/assets/activity.svg +30 -0
- package/assets/icon.png +0 -0
- package/dist/.setup/account-usage-runtime-Eem_WGqY.mjs +75 -0
- package/dist/{apply-CvT8tW5i.js → .setup/apply-DDOi8uNx.mjs} +24 -30
- package/dist/.setup/async-questions-DdhOCwGi.mjs +27 -0
- package/dist/{attempt-client-cleanup-DKHzbwt5.js → .setup/attempt-client-cleanup-CEv1cKwF.mjs} +79 -49
- package/dist/.setup/attempt-terminal-gZrxQ35N.mjs +5 -0
- package/dist/.setup/attempt-workspace-context-DUVEn_CS.mjs +331 -0
- package/dist/{auth-binding-CWlKVccJ.js → .setup/auth-binding-DhLWa_7K.mjs} +1 -1
- package/dist/{auth-cache-key-7orQae_j.js → .setup/auth-cache-key-B2mpaI9D.mjs} +9 -81
- package/dist/{auth-profile-CwzO4_RG.js → .setup/auth-profile-WqZtZfXN.mjs} +1 -1
- package/dist/.setup/auth-profile-health-oHizqgye.mjs +53 -0
- package/dist/.setup/auth-profile-recovery-BREezV0L.mjs +14 -0
- package/dist/.setup/binding-connection-ThoatDcb.mjs +50 -0
- package/dist/.setup/binding-connection.runtime-yoHrABt-.mjs +48 -0
- package/dist/{bounded-turn-C_Hneydj.js → .setup/bounded-turn-B2HScEgT.mjs} +143 -32
- package/dist/{build-state-BCmg9-5p.js → .setup/build-state-C7EnDVgr.mjs} +1 -1
- package/dist/{capabilities-8vx68WLH.js → .setup/capabilities-CDXOOFdZ.mjs} +1 -1
- package/dist/{client-B57KWPQx.js → .setup/client-Cs08OXVQ.mjs} +705 -512
- package/dist/.setup/client-catalog-response-BMgt_4q4.mjs +285 -0
- package/dist/{command-dispatch-BpduNGVf.js → .setup/command-dispatch-B4JuOsOk.mjs} +8 -4
- package/dist/{command-formatters-lxlkNZgU.js → .setup/command-formatters-Bmqvr9tO.mjs} +8 -4
- package/dist/{command-handlers-tiL9iWj7.js → .setup/command-handlers-DW7Lx9oH.mjs} +137 -186
- package/dist/{command-rpc-CR5EOEZX.js → .setup/command-rpc-DixIj3HW.mjs} +47 -23
- package/dist/{compact-B_H3AOd7.js → .setup/compact-Du5UvtxA.mjs} +29 -51
- package/dist/{config-oIORaQ5T.js → .setup/config-BoTP_mrL.mjs} +5 -4
- package/dist/{config-options-CXMq1T-C.js → .setup/config-options-BvaRs51b.mjs} +50 -446
- package/dist/{protocol-5bh1G-H7.js → .setup/config-parsing-CcB9iPoq.mjs} +9 -51
- package/dist/{config-runtime-D0zGNIHu.js → .setup/config-runtime-C8Rw1m1m.mjs} +2 -2
- package/dist/.setup/config-security-BEReZ6go.mjs +380 -0
- package/dist/{conversation-binding-DsB4-O7U.js → .setup/conversation-binding-DP-gMrBP.mjs} +29 -38
- package/dist/{conversation-binding-data-BiodpIzq.js → .setup/conversation-binding-data-CrcyZk6O.mjs} +1 -1
- package/dist/{conversation-control-CtUu1b3m.js → .setup/conversation-control-uK9Jomlc.mjs} +32 -67
- package/dist/.setup/cyber-failover-DYwbmf1o.mjs +123 -0
- package/dist/.setup/cyber-failover-notice-e9G3J9-e.mjs +17 -0
- package/dist/{dynamic-tools-CmN5RAip.js → .setup/dynamic-tools-BDXl-8Cw.mjs} +936 -620
- package/dist/{effective-mcp-catalog-Bd73bqA8.js → .setup/effective-mcp-catalog-CvnvnGIe.mjs} +3 -3
- package/dist/{ephemeral-turn-D78_VmzO.js → .setup/ephemeral-turn-poidXgek.mjs} +9 -7
- package/dist/{event-projector-assistant-message-BmBM4qBV.js → .setup/event-projector-assistant-message-BsruvNrH.mjs} +8 -7
- package/dist/{event-projector-items-5VhsECCO.js → .setup/event-projector-items-C6L_5ZiT.mjs} +42 -8
- package/dist/{attempt-notifications-C9XufG6l.js → .setup/event-projector-usage-CnBS8Wa3.mjs} +102 -9
- package/dist/{harness-C7rRa7bm.js → .setup/harness-a_MsE4-_.mjs} +81 -21
- package/dist/{inference-context-Dr_mzvk4.js → .setup/inference-context-D96l9-ew.mjs} +1 -1
- package/dist/.setup/inference-proxy-b-aJMSxm.mjs +601 -0
- package/dist/{isolated-completion-DWVb5U2J.js → .setup/isolated-completion-BIZFhTNG.mjs} +18 -11
- package/dist/.setup/launch-args-DbFCehO7.mjs +196 -0
- package/dist/{managed-binary-D22rNEcR.js → .setup/managed-binary-BnshlFag.mjs} +14 -3
- package/dist/{managed-thread-store-D1t5jh3G.js → .setup/managed-thread-store-BMqgThVL.mjs} +48 -14
- package/dist/{model-catalog-Dq2n8f_p.js → .setup/model-catalog-CfXJf9Ay.mjs} +36 -12
- package/dist/{models-PCKOim-h.js → .setup/models-KnqBv0hE.mjs} +3 -3
- package/dist/.setup/native-auth-rWbGbMn3.mjs +57 -0
- package/dist/{native-subagent-history-DjtPloaU.js → .setup/native-subagent-history-0nYYgo0k.mjs} +43 -35
- package/dist/.setup/native-subagent-monitor-D3filLY2.mjs +4859 -0
- package/dist/{native-subagent-task-ids-BzTdT0Uw.js → .setup/native-subagent-task-ids-wb8CKZGN.mjs} +98 -44
- package/dist/{node-cli-sessions-DKaOmVUh.js → .setup/node-cli-sessions-r3avj02l.mjs} +86 -68
- package/dist/.setup/node-exec-server.runtime-BDwWXVpK.mjs +247 -0
- package/dist/{plan-7uG-Fp36.js → .setup/plan-CN3VwfNU.mjs} +133 -119
- package/dist/{plugin-activation-BYQculil.js → .setup/plugin-activation-DT3MNtqj.mjs} +7 -16
- package/dist/{plugin-app-cache-key-d0eKxy7b.js → .setup/plugin-app-cache-key-B2CsSdnV.mjs} +32 -44
- package/dist/{plugin-approval-roundtrip-Bz3FT8W5.js → .setup/plugin-approval-roundtrip-C0MZzCuP.mjs} +1 -1
- package/dist/{plugin-inventory-oL4Na1ZG.js → .setup/plugin-inventory-BoRei8Z4.mjs} +21 -11
- package/dist/{plugin-marketplace-discovery-P-Vndfqq.js → .setup/plugin-marketplace-discovery-CDOi8IFs.mjs} +4 -1
- package/dist/{plugin-metadata-cache-ClPJpRio.js → .setup/plugin-metadata-cache-Ctmo83k_.mjs} +226 -141
- package/dist/.setup/protocol-CANUwXJ3.mjs +17 -0
- package/dist/{provider-MQ8PVkuE.js → .setup/provider-BOsxQHOM.mjs} +9 -5
- package/dist/{provider-capabilities-BvCUL69A.js → .setup/provider-capabilities-BfE88FZ5.mjs} +31 -3
- package/dist/{rate-limits-CBMmWBr9.js → .setup/rate-limits-CMU3DUD0.mjs} +174 -151
- package/dist/{request-B7hEkBGq.js → .setup/request-D2L0zMrq.mjs} +130 -42
- package/dist/{run-attempt-CvsAAGa0.js → .setup/run-attempt-BHu11r7h.mjs} +1628 -966
- package/dist/.setup/run-attempt-lifecycle-B7JbY4-F.mjs +71 -0
- package/dist/{runtime-artifact-BJ0rXBZ_.js → .setup/runtime-artifact-CLZ8udh-.mjs} +29 -45
- package/dist/{sandbox-guard-BxgyoM8M.js → .setup/sandbox-guard-C2sRMOEY.mjs} +3 -3
- package/dist/{session-binding-CI8UuilT.js → .setup/session-binding-Cm0apEbd.mjs} +36 -83
- package/dist/{session-binding-record-Bcvslnhf.js → .setup/session-binding-record-BGoz8wOK.mjs} +202 -5
- package/dist/.setup/session-binding-sidecars-BlB5EvIS.mjs +546 -0
- package/dist/.setup/session-catalog-Pno1xGcl.mjs +2764 -0
- package/dist/{session-catalog-adoption-tcZi1IfX.js → .setup/session-catalog-adoption-BI6UTDZT.mjs} +58 -26
- package/dist/{session-catalog-archive-CwKg8Xz2.js → .setup/session-catalog-archive-lHBqzhaO.mjs} +6 -6
- package/dist/.setup/session-catalog-events-Bj6j94E_.mjs +347 -0
- package/dist/.setup/session-catalog-index-B9_VQIUz.mjs +1170 -0
- package/dist/.setup/session-catalog-index-order-hcdz07yN.mjs +48 -0
- package/dist/.setup/session-catalog-index-state-Dgh8ORJm.mjs +183 -0
- package/dist/{thread-history-page-D0JIp48V.js → .setup/session-catalog-native-projection-DowriLid.mjs} +223 -95
- package/dist/{session-catalog-node-adoption-B1tgDW-m.js → .setup/session-catalog-node-adoption-ITddWx_X.mjs} +25 -13
- package/dist/{session-catalog-node-continue-Ci-DXyJP.js → .setup/session-catalog-node-continue-6g6qi4A9.mjs} +24 -15
- package/dist/.setup/session-catalog-projection-zK_PUsiE.mjs +422 -0
- package/dist/{session-cli-DNN_jhGc.js → .setup/session-cli-irrD-uo7.mjs} +3 -3
- package/dist/{session-history-Cz-tOOYj.js → .setup/session-history-BrqhSCf9.mjs} +19 -19
- package/dist/{session-history-import-DwyijFI6.js → .setup/session-history-import-D-3wAgOP.mjs} +4 -4
- package/dist/{session-history-read-cxPUxyVV.js → .setup/session-history-read-B3ZfSUbF.mjs} +2 -2
- package/dist/{session-history.worker-BeK1YOyT.js → .setup/session-history.worker-CaCh0xF_.mjs} +10 -24
- package/dist/{session-initialization-Ct0_Hzmg.js → .setup/session-initialization-rcgbZiid.mjs} +2 -2
- package/dist/{session-permission-policy-BBmXA8Eg.js → .setup/session-permission-policy-BI1QK_98.mjs} +2 -2
- package/dist/{session-retirement-B2YfbAAT.js → .setup/session-retirement-BH-S6qkJ.mjs} +26 -7
- package/dist/{settled-turn-context-Du6gdUDd.js → .setup/settled-turn-context-fmwouT5I.mjs} +2 -2
- package/dist/{settled-turn-finalizer-Dn91stmc.js → .setup/settled-turn-finalizer-DiAi6Kx6.mjs} +12 -12
- package/dist/{shared-client-CscigXXL.js → .setup/shared-client-DA4VR4Eb.mjs} +332 -221
- package/dist/{side-question-BGMJQf4U.js → .setup/side-question-BJ1wSDcB.mjs} +183 -230
- package/dist/{source-CElXU0Oy.js → .setup/source-CUzJq5WN.mjs} +11 -10
- package/dist/.setup/spawn-error-CL3n6MAa.mjs +57 -0
- package/dist/{thread-archive-guard-DfpBr-Sz.js → .setup/thread-archive-guard-C9frICzX.mjs} +10 -3
- package/dist/.setup/thread-history-page-DoVpnHim.mjs +83 -0
- package/dist/{thread-lifecycle-DXl1-I6b.js → .setup/thread-lifecycle-B3mfz1TG.mjs} +347 -2318
- package/dist/{thread-ownership-BsDRTsyp.js → .setup/thread-ownership-DcTtAcXj.mjs} +6 -4
- package/dist/{thread-policy-BuEQfE0g.js → .setup/thread-policy-DGuQsuFC.mjs} +19 -3
- package/dist/.setup/thread-requests-BLvGkP2R.mjs +2205 -0
- package/dist/{thread-resume-DsDOZpFg.js → .setup/thread-resume-DIBXwOpE.mjs} +8 -5
- package/dist/.setup/timeout-C910MdAB.mjs +80 -0
- package/dist/{transcript-history-projection-v17wXgdK.js → .setup/transcript-history-projection-ZZpkFkJ_.mjs} +96 -61
- package/dist/{transcript-mirror-C5CKgNy6.js → .setup/transcript-mirror-BtHDBp1G.mjs} +224 -195
- package/dist/{transcript-mirror-attestation-DibE0krH.js → .setup/transcript-mirror-attestation-CzM-94NC.mjs} +4 -1
- package/dist/{transport-stdio-BGjHoYLr.js → .setup/transport-stdio-h2VHOskC.mjs} +274 -89
- package/dist/{upstream-session-fork-BZerMte_.js → .setup/upstream-session-fork-BUr4OUbC.mjs} +51 -42
- package/dist/{usage-tCk-mg_x.js → .setup/usage-BML0r-ua.mjs} +5 -4
- package/dist/.setup/usage-limit-error-DUMbefVY.mjs +166 -0
- package/dist/{web-search-provider.runtime-B7bGbGWq.js → .setup/web-search-provider.runtime-CDKlN-Rv.mjs} +4 -3
- package/dist/api.js +23 -12
- package/dist/catalog-page-worker-entrypoint.js +12 -0
- package/dist/catalog-page.worker.js +9 -0
- package/dist/cli-metadata.js +1 -1
- package/dist/doctor-contract-api.js +8 -528
- package/dist/harness.js +1 -1
- package/dist/index.js +306 -215
- package/dist/media-understanding-provider.js +3 -3
- package/dist/migration-provider-api.js +1 -1
- package/dist/native-tool-policy.js +12 -0
- package/dist/provider-discovery.js +18 -0
- package/dist/session-history-worker-runtime.js +36 -35
- package/dist/session-history.worker.js +2 -2
- package/dist/web-search-contract-api.js +1 -1
- package/openclaw.plugin.json +354 -69
- package/package.json +14 -8
- package/dist/attempt-context-D44yeDII.js +0 -636
- package/dist/binding-connection-D3udKbIE.js +0 -60
- package/dist/event-projector-usage-BfXmpOec.js +0 -102
- package/dist/inference-proxy-HGXKUIre.js +0 -311
- package/dist/launch-args-RXQwn8zV.js +0 -90
- package/dist/native-subagent-history-owner-Pcp7JuVF.js +0 -34
- package/dist/native-subagent-monitor-fQ7eIXEf.js +0 -2978
- package/dist/node-exec-server.runtime-Cl2vapEi.js +0 -226
- package/dist/rpc-error-ttN_QjEm.js +0 -30
- package/dist/session-catalog-ct-AH01I.js +0 -1477
- package/dist/session-catalog-home-id-CwhLdC03.js +0 -18
- package/dist/session-catalog-provenance-D-dIfRAH.js +0 -96
- package/dist/timeout-BVw8aaM1.js +0 -33
- package/dist/version-omm6IPI3.js +0 -12
- /package/dist/{auth-profile-selection-DFu9e167.js → .setup/auth-profile-selection-DFu9e167.mjs} +0 -0
- /package/dist/{config-utils-DujwEnhg.js → .setup/config-utils-DujwEnhg.mjs} +0 -0
- /package/dist/{context-compaction-activity-CMla5FPJ.js → .setup/context-compaction-activity-CMla5FPJ.mjs} +0 -0
- /package/dist/{elicitation-input-DPoK8F7w.js → .setup/elicitation-input-DPoK8F7w.mjs} +0 -0
- /package/dist/{history-rejection-B4nOXNXF.js → .setup/history-rejection-B4nOXNXF.mjs} +0 -0
- /package/dist/{image-payload-sanitizer-tupAr-2o.js → .setup/image-payload-sanitizer-tupAr-2o.mjs} +0 -0
- /package/dist/{incognito-session-uhrBF6wJ.js → .setup/incognito-session-uhrBF6wJ.mjs} +0 -0
- /package/dist/{local-runtime-attribution-B_2mnqhb.js → .setup/local-runtime-attribution-B_2mnqhb.mjs} +0 -0
- /package/dist/{native-execution-policy-umd0tgh4.js → .setup/native-execution-policy-umd0tgh4.mjs} +0 -0
- /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
- /package/dist/{session-binding-meta-B7aEMU7g.js → .setup/session-binding-meta-B7aEMU7g.mjs} +0 -0
- /package/dist/{session-upstream-marker-D15C9NHp.js → .setup/session-upstream-marker-D15C9NHp.mjs} +0 -0
- /package/dist/{upstream-prompt-provenance-LphB8slG.js → .setup/upstream-prompt-provenance-LphB8slG.mjs} +0 -0
- /package/dist/{web-search-provider.shared-BrZmlqyR.js → .setup/web-search-provider.shared-BrZmlqyR.mjs} +0 -0
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import { i as resolveManagedCodexNativeCommand, r as resolveManagedCodexAppServerStartOptions, t as isManagedCodexDesktopCommand } from "./managed-binary-D22rNEcR.js";
|
|
2
|
-
import { i as closeCodexAppServerTransportAndWait, t as createStdioTransport } from "./transport-stdio-BGjHoYLr.js";
|
|
3
|
-
import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
4
|
-
import { killProcessTree } from "openclaw/plugin-sdk/process-runtime";
|
|
5
|
-
import path from "node:path";
|
|
6
|
-
import { mkdir } from "node:fs/promises";
|
|
7
|
-
import { once } from "node:events";
|
|
8
|
-
import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "openclaw/plugin-sdk/temp-path";
|
|
9
|
-
import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
|
|
10
|
-
import { stripVTControlCharacters } from "node:util";
|
|
11
|
-
import { StringDecoder } from "node:string_decoder";
|
|
12
|
-
import { sanitizeEnvVars } from "openclaw/plugin-sdk/sandbox";
|
|
13
|
-
//#region extensions/codex/src/node-exec-server.runtime.ts
|
|
14
|
-
const MAX_CODEX_EXEC_SERVER_MESSAGE_BYTES = 67108864;
|
|
15
|
-
const MAX_CODEX_EXEC_SERVER_STDERR_BYTES = 4096;
|
|
16
|
-
const CODEX_EXEC_SERVER_READY_LINE = "codex_exec_server::server::transport: codex-exec-server listening on stdio";
|
|
17
|
-
const CODEX_EXEC_SERVER_TERMINATION_GRACE_MS = 1e3;
|
|
18
|
-
const CODEX_EXEC_SERVER_REAP_TIMEOUT_MS = 5e3;
|
|
19
|
-
const NODE_EXEC_SERVER_PLATFORM_ENVIRONMENT = /^(?:SYSTEMROOT|WINDIR|COMSPEC|PATHEXT|TEMP|TMP|TMPDIR)$/iu;
|
|
20
|
-
function validateNodeExecServerMessage(message) {
|
|
21
|
-
if (message.byteLength === 0 || message.byteLength > MAX_CODEX_EXEC_SERVER_MESSAGE_BYTES) throw new Error("Codex exec-server JSON-RPC message exceeds its 64 MiB limit.");
|
|
22
|
-
const encoded = Buffer.from(message.buffer, message.byteOffset, message.byteLength);
|
|
23
|
-
if (encoded.includes(10) || encoded.includes(13)) throw new Error("Codex exec-server JSON-RPC frames must contain exactly one message.");
|
|
24
|
-
let decoded;
|
|
25
|
-
try {
|
|
26
|
-
const text = new TextDecoder("utf-8", { fatal: true }).decode(encoded);
|
|
27
|
-
decoded = JSON.parse(text);
|
|
28
|
-
} catch {
|
|
29
|
-
throw new Error("Codex exec-server received malformed UTF-8 or JSON-RPC.");
|
|
30
|
-
}
|
|
31
|
-
if (!isRecord(decoded) || decoded.jsonrpc !== void 0 && decoded.jsonrpc !== "2.0" || typeof decoded.method !== "string" && !("id" in decoded && ("result" in decoded || "error" in decoded))) throw new Error("Codex exec-server received an invalid JSON-RPC message.");
|
|
32
|
-
return encoded;
|
|
33
|
-
}
|
|
34
|
-
function nodeExecServerAbortError(signal) {
|
|
35
|
-
return signal.reason instanceof Error ? signal.reason : /* @__PURE__ */ new Error("Codex node exec-server connection closed.");
|
|
36
|
-
}
|
|
37
|
-
function writeNodeExecServerMessage(child, message, signal) {
|
|
38
|
-
if (signal.aborted) throw nodeExecServerAbortError(signal);
|
|
39
|
-
const payload = Buffer.concat([message, Buffer.from("\n")]);
|
|
40
|
-
if (!child.stdin.write(payload)) return once(child.stdin, "drain", { signal }).then(() => void 0);
|
|
41
|
-
}
|
|
42
|
-
async function relayNodeExecServerOutput(child, send) {
|
|
43
|
-
let fragments = [];
|
|
44
|
-
let pendingBytes = 0;
|
|
45
|
-
for await (const rawChunk of child.stdout) {
|
|
46
|
-
const chunk = Buffer.isBuffer(rawChunk) ? rawChunk : Buffer.from(rawChunk);
|
|
47
|
-
let offset = 0;
|
|
48
|
-
while (offset < chunk.byteLength) {
|
|
49
|
-
const newline = chunk.indexOf(10, offset);
|
|
50
|
-
const fragment = chunk.subarray(offset, newline === -1 ? chunk.byteLength : newline);
|
|
51
|
-
const nextLength = pendingBytes + fragment.byteLength;
|
|
52
|
-
if (nextLength > 67108865) throw new Error("Codex exec-server stdout message exceeds its 64 MiB limit.");
|
|
53
|
-
if (fragment.byteLength > 0) fragments.push(fragment);
|
|
54
|
-
pendingBytes = nextLength;
|
|
55
|
-
if (newline === -1) {
|
|
56
|
-
if (pendingBytes > MAX_CODEX_EXEC_SERVER_MESSAGE_BYTES && fragment[fragment.byteLength - 1] !== 13) throw new Error("Codex exec-server stdout message exceeds its 64 MiB limit.");
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
const trailing = fragments.at(-1);
|
|
60
|
-
if (trailing?.[trailing.byteLength - 1] === 13) {
|
|
61
|
-
pendingBytes -= 1;
|
|
62
|
-
if (trailing.byteLength === 1) fragments.pop();
|
|
63
|
-
else fragments[fragments.length - 1] = trailing.subarray(0, trailing.byteLength - 1);
|
|
64
|
-
}
|
|
65
|
-
const message = validateNodeExecServerMessage(fragments.length === 1 ? fragments[0] : Buffer.concat(fragments, pendingBytes));
|
|
66
|
-
fragments = [];
|
|
67
|
-
pendingBytes = 0;
|
|
68
|
-
await send(message);
|
|
69
|
-
offset = newline + 1;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
if (pendingBytes > 0) throw new Error("Codex exec-server stdout ended with an unterminated JSON-RPC message.");
|
|
73
|
-
}
|
|
74
|
-
function createNodeExecServerProcessOwner(child, closed) {
|
|
75
|
-
let termination;
|
|
76
|
-
return { terminate: () => termination ??= (async () => {
|
|
77
|
-
if (process.platform === "win32" && child.pid) killProcessTree(child.pid, { graceMs: CODEX_EXEC_SERVER_TERMINATION_GRACE_MS });
|
|
78
|
-
const { exited } = await closeCodexAppServerTransportAndWait(child, {
|
|
79
|
-
forceKillDelayMs: CODEX_EXEC_SERVER_TERMINATION_GRACE_MS,
|
|
80
|
-
exitTimeoutMs: CODEX_EXEC_SERVER_REAP_TIMEOUT_MS
|
|
81
|
-
});
|
|
82
|
-
if (!exited) throw new Error("Codex node exec-server process tree did not terminate.");
|
|
83
|
-
await closed;
|
|
84
|
-
})() };
|
|
85
|
-
}
|
|
86
|
-
/** Runs the one-connection paired-node exec-server after lightweight command admission. */
|
|
87
|
-
async function runCodexNodeExecServer(params) {
|
|
88
|
-
const { io } = params;
|
|
89
|
-
const frames = io.frames;
|
|
90
|
-
if (!frames) throw new Error("Codex node exec-server requires duplex frames.");
|
|
91
|
-
const cwd = params.workspaceDir;
|
|
92
|
-
let writes;
|
|
93
|
-
let rejectDisconnected;
|
|
94
|
-
const disconnected = new Promise((_resolve, reject) => {
|
|
95
|
-
rejectDisconnected = reject;
|
|
96
|
-
});
|
|
97
|
-
disconnected.catch(() => {});
|
|
98
|
-
const onAbort = () => {
|
|
99
|
-
const error = nodeExecServerAbortError(io.signal);
|
|
100
|
-
rejectDisconnected(error);
|
|
101
|
-
};
|
|
102
|
-
io.signal.addEventListener("abort", onAbort, { once: true });
|
|
103
|
-
try {
|
|
104
|
-
if (io.signal.aborted) throw nodeExecServerAbortError(io.signal);
|
|
105
|
-
return await withTempWorkspace({
|
|
106
|
-
rootDir: resolvePreferredOpenClawTmpDir(),
|
|
107
|
-
prefix: "codex-node-exec-server-"
|
|
108
|
-
}, async ({ dir }) => {
|
|
109
|
-
const codexHome = path.join(dir, ".codex");
|
|
110
|
-
await mkdir(codexHome, {
|
|
111
|
-
recursive: true,
|
|
112
|
-
mode: 448
|
|
113
|
-
});
|
|
114
|
-
const resolved = await resolveManagedCodexAppServerStartOptions({
|
|
115
|
-
transport: "stdio",
|
|
116
|
-
command: "codex",
|
|
117
|
-
commandSource: "managed",
|
|
118
|
-
managedCommandOrder: "package-first",
|
|
119
|
-
args: [
|
|
120
|
-
"exec-server",
|
|
121
|
-
"--listen",
|
|
122
|
-
"stdio"
|
|
123
|
-
],
|
|
124
|
-
headers: {}
|
|
125
|
-
});
|
|
126
|
-
const native = resolveManagedCodexNativeCommand(resolved.command);
|
|
127
|
-
if (!native || isManagedCodexDesktopCommand(resolved.command)) throw new Error("Codex node exec-server requires the pinned managed package binary.");
|
|
128
|
-
const baseEnv = sanitizeEnvVars(process.env, {
|
|
129
|
-
strictMode: true,
|
|
130
|
-
customAllowedPatterns: [NODE_EXEC_SERVER_PLATFORM_ENVIRONMENT]
|
|
131
|
-
}).allowed;
|
|
132
|
-
if (io.signal.aborted) throw nodeExecServerAbortError(io.signal);
|
|
133
|
-
params.assertExecAuthorized();
|
|
134
|
-
const nativeReady = createDeferred();
|
|
135
|
-
const exit = createDeferred();
|
|
136
|
-
let stderr = Buffer.alloc(0);
|
|
137
|
-
let startupSettled = false;
|
|
138
|
-
let pendingLine = "";
|
|
139
|
-
const decoder = new StringDecoder("utf8");
|
|
140
|
-
const child = await createStdioTransport({
|
|
141
|
-
transport: "stdio",
|
|
142
|
-
command: native,
|
|
143
|
-
commandSource: "resolved-managed",
|
|
144
|
-
args: resolved.args,
|
|
145
|
-
headers: {},
|
|
146
|
-
cwd,
|
|
147
|
-
env: {
|
|
148
|
-
HOME: params.homeDir ?? dir,
|
|
149
|
-
CODEX_HOME: codexHome,
|
|
150
|
-
RUST_LOG: "error,opentelemetry_sdk=off,opentelemetry_otlp=off,codex_exec_server::server::transport=info",
|
|
151
|
-
...process.platform === "win32" ? { USERPROFILE: params.homeDir ?? dir } : {}
|
|
152
|
-
},
|
|
153
|
-
clearEnv: ["NODE_OPTIONS"]
|
|
154
|
-
}, baseEnv, () => {
|
|
155
|
-
if (io.signal.aborted) throw nodeExecServerAbortError(io.signal);
|
|
156
|
-
params.assertExecAuthorized();
|
|
157
|
-
}, (spawned) => {
|
|
158
|
-
spawned.once("close", (code, signal) => exit.resolve({
|
|
159
|
-
code,
|
|
160
|
-
signal
|
|
161
|
-
}));
|
|
162
|
-
spawned.once("error", rejectDisconnected);
|
|
163
|
-
spawned.stdin.on("error", rejectDisconnected);
|
|
164
|
-
spawned.stderr.on("data", (chunk) => {
|
|
165
|
-
const next = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
166
|
-
stderr = Buffer.concat([stderr, next.subarray(-4096)]).subarray(-4096);
|
|
167
|
-
if (startupSettled) return;
|
|
168
|
-
const lines = (pendingLine + decoder.write(next)).split("\n");
|
|
169
|
-
pendingLine = lines.pop();
|
|
170
|
-
for (const line of [...lines, pendingLine]) if (Buffer.byteLength(line, "utf8") > MAX_CODEX_EXEC_SERVER_STDERR_BYTES) {
|
|
171
|
-
startupSettled = true;
|
|
172
|
-
pendingLine = "";
|
|
173
|
-
rejectDisconnected(/* @__PURE__ */ new Error("Codex node startup diagnostic line exceeded 4 KiB."));
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
if (lines.some((line) => stripVTControlCharacters(line).trimEnd().endsWith(CODEX_EXEC_SERVER_READY_LINE))) {
|
|
177
|
-
startupSettled = true;
|
|
178
|
-
pendingLine = "";
|
|
179
|
-
nativeReady.resolve();
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
const closed = exit.promise;
|
|
184
|
-
const stopped = closed.then((outcome) => {
|
|
185
|
-
const diagnostic = stderr.toString("utf8").trim();
|
|
186
|
-
throw new Error(`Codex node exec-server exited (code ${outcome.code ?? "none"}, signal ${outcome.signal ?? "none"})${diagnostic ? `: ${diagnostic}` : "."}`);
|
|
187
|
-
});
|
|
188
|
-
const owner = createNodeExecServerProcessOwner(child, closed);
|
|
189
|
-
params.activeProcesses.add(owner.terminate);
|
|
190
|
-
const output = relayNodeExecServerOutput(child, frames.send.bind(frames));
|
|
191
|
-
output.catch((error) => {
|
|
192
|
-
rejectDisconnected(error instanceof Error ? error : new Error(String(error)));
|
|
193
|
-
});
|
|
194
|
-
try {
|
|
195
|
-
await Promise.race([
|
|
196
|
-
nativeReady.promise,
|
|
197
|
-
stopped,
|
|
198
|
-
disconnected
|
|
199
|
-
]);
|
|
200
|
-
if (io.signal.aborted) throw nodeExecServerAbortError(io.signal);
|
|
201
|
-
if (child.exitCode !== null || child.signalCode !== null) await stopped;
|
|
202
|
-
params.assertExecAuthorized();
|
|
203
|
-
params.onFrameReceiver((message) => {
|
|
204
|
-
const encoded = validateNodeExecServerMessage(message);
|
|
205
|
-
const operation = writes ? writes.then(() => writeNodeExecServerMessage(child, encoded, io.signal)) : writeNodeExecServerMessage(child, encoded, io.signal);
|
|
206
|
-
if (!operation) return;
|
|
207
|
-
const observed = operation.catch(() => {});
|
|
208
|
-
writes = observed;
|
|
209
|
-
observed.then(() => {
|
|
210
|
-
if (writes === observed) writes = void 0;
|
|
211
|
-
});
|
|
212
|
-
return operation;
|
|
213
|
-
});
|
|
214
|
-
return await Promise.race([stopped, disconnected]);
|
|
215
|
-
} finally {
|
|
216
|
-
await owner.terminate();
|
|
217
|
-
params.activeProcesses.delete(owner.terminate);
|
|
218
|
-
await Promise.allSettled([output, ...writes ? [writes] : []]);
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
} finally {
|
|
222
|
-
io.signal.removeEventListener("abort", onAbort);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
//#endregion
|
|
226
|
-
export { runCodexNodeExecServer };
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { o as isJsonObject } from "./protocol-5bh1G-H7.js";
|
|
2
|
-
//#region extensions/codex/src/app-server/rpc-error.ts
|
|
3
|
-
/** RPC error wrapper that preserves app-server error code and data. */
|
|
4
|
-
var CodexAppServerRpcError = class extends Error {
|
|
5
|
-
constructor(error, method) {
|
|
6
|
-
super(formatCodexAppServerRpcErrorMessage(error, method));
|
|
7
|
-
this.name = "CodexAppServerRpcError";
|
|
8
|
-
this.code = error.code;
|
|
9
|
-
this.data = error.data;
|
|
10
|
-
this.method = method;
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
function isCodexThreadReadMissingError(error, threadId) {
|
|
14
|
-
return error instanceof CodexAppServerRpcError && error.method === "thread/read" && error.code === -32600 && error.message === `thread not loaded: ${threadId}`;
|
|
15
|
-
}
|
|
16
|
-
function formatCodexAppServerRpcErrorMessage(error, method) {
|
|
17
|
-
const message = error.message || `${method} failed`;
|
|
18
|
-
const detail = readCodexAppServerRpcReloginDetail(error.data);
|
|
19
|
-
return detail && !message.includes(detail) ? `${message}: ${detail}` : message;
|
|
20
|
-
}
|
|
21
|
-
function readCodexAppServerRpcReloginDetail(data) {
|
|
22
|
-
const record = isJsonObject(data) ? data : void 0;
|
|
23
|
-
const nested = isJsonObject(record?.error) ? record.error : record;
|
|
24
|
-
if (!nested) return;
|
|
25
|
-
const isRelogin = nested.action === "relogin" || nested.reason === "cloudRequirements" && nested.errorCode === "Auth";
|
|
26
|
-
const detail = typeof nested.detail === "string" ? nested.detail.trim() : "";
|
|
27
|
-
return isRelogin && detail ? detail : void 0;
|
|
28
|
-
}
|
|
29
|
-
//#endregion
|
|
30
|
-
export { isCodexThreadReadMissingError as n, CodexAppServerRpcError as t };
|