@openclaw/codex 2026.9.6 → 2026.9.7
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/README.md +2 -0
- package/assets/icon.png +0 -0
- package/dist/.setup/{account-usage-runtime-Eem_WGqY.mjs → account-usage-runtime-DFhbh1zz.mjs} +5 -5
- package/dist/.setup/{apply-DDOi8uNx.mjs → apply-D3GcSoSa.mjs} +22 -36
- package/dist/.setup/{attempt-client-cleanup-CEv1cKwF.mjs → attempt-client-cleanup-DOP-cW5j.mjs} +128 -37
- package/dist/.setup/attempt-workspace-context-C5HigshI.mjs +164 -0
- package/dist/.setup/{auth-binding-DhLWa_7K.mjs → auth-binding-BLWz7stm.mjs} +14 -1
- package/dist/.setup/{auth-cache-key-B2mpaI9D.mjs → auth-cache-key-Dbvq-QgB.mjs} +36 -34
- package/dist/.setup/{auth-profile-WqZtZfXN.mjs → auth-profile-B0okYl2D.mjs} +1 -2
- package/dist/.setup/auth-start-options-BPIPeEX8.mjs +44 -0
- package/dist/.setup/{binding-connection-ThoatDcb.mjs → binding-connection-DTtN1KrX.mjs} +2 -2
- package/dist/.setup/{binding-connection.runtime-yoHrABt-.mjs → binding-connection.runtime-6TpgD1M6.mjs} +4 -4
- package/dist/.setup/{bounded-turn-B2HScEgT.mjs → bounded-turn-CbjoN2OW.mjs} +15 -18
- package/dist/.setup/bounded-turn-isolation-B8K_ylqk.mjs +14 -0
- package/dist/.setup/{build-state-C7EnDVgr.mjs → build-state-Da1_z0kd.mjs} +1 -1
- package/dist/.setup/{capabilities-CDXOOFdZ.mjs → capabilities-B3WEZl4e.mjs} +2 -10
- package/dist/.setup/{client-Cs08OXVQ.mjs → client-N0JpgSzF.mjs} +138 -399
- package/dist/.setup/{client-catalog-response-BMgt_4q4.mjs → client-catalog-response-5HHLdcde.mjs} +1 -1
- package/dist/.setup/{command-dispatch-B4JuOsOk.mjs → command-dispatch-BeAoaovI.mjs} +5 -8
- package/dist/.setup/{command-formatters-Bmqvr9tO.mjs → command-formatters-R3ckE3Co.mjs} +29 -61
- package/dist/.setup/{command-handlers-DW7Lx9oH.mjs → command-handlers-ylTMS00z.mjs} +222 -343
- package/dist/.setup/{command-rpc-DixIj3HW.mjs → command-rpc-CGJGUQ6Y.mjs} +15 -18
- package/dist/.setup/compact-C2WamavS.mjs +776 -0
- package/dist/.setup/{config-BoTP_mrL.mjs → config-DKhXquav.mjs} +26 -28
- package/dist/.setup/{config-options-BvaRs51b.mjs → config-options-CzyWLTJt.mjs} +24 -37
- package/dist/.setup/{config-parsing-CcB9iPoq.mjs → config-parsing-b088LyhT.mjs} +57 -60
- package/dist/.setup/{config-runtime-C8Rw1m1m.mjs → config-runtime-C0NbLms1.mjs} +2 -2
- package/dist/.setup/{config-security-BEReZ6go.mjs → config-security-CE-FcGw9.mjs} +32 -111
- package/dist/.setup/{config-utils-DujwEnhg.mjs → config-utils-D0CXecki.mjs} +3 -13
- package/dist/.setup/context-engine-projection-PezSESth.mjs +387 -0
- package/dist/.setup/{conversation-binding-DP-gMrBP.mjs → conversation-binding-3Min8qvP.mjs} +67 -90
- package/dist/.setup/{conversation-binding-data-CrcyZk6O.mjs → conversation-binding-data-C746z5Pn.mjs} +8 -12
- package/dist/.setup/{conversation-control-uK9Jomlc.mjs → conversation-control-CEP8X5JC.mjs} +8 -8
- package/dist/.setup/{cyber-failover-DYwbmf1o.mjs → cyber-failover-XV0nNRZu.mjs} +1 -1
- package/dist/.setup/{cyber-failover-notice-e9G3J9-e.mjs → cyber-failover-notice-RNpGpTyP.mjs} +1 -1
- package/dist/.setup/{dynamic-tools-BDXl-8Cw.mjs → dynamic-tools-DzlsLUuS.mjs} +2305 -2606
- package/dist/.setup/{effective-mcp-catalog-CvnvnGIe.mjs → effective-mcp-catalog-CxUtC-xG.mjs} +8 -17
- package/dist/.setup/{ephemeral-turn-poidXgek.mjs → ephemeral-turn-CDsPJOa2.mjs} +3 -3
- package/dist/.setup/event-projector-assistant-message-CigreO4K.mjs +69 -0
- package/dist/.setup/{event-projector-usage-CnBS8Wa3.mjs → event-projector-usage-03R0I2dM.mjs} +3 -25
- package/dist/.setup/event-projector-values-DJSz8BTk.mjs +106 -0
- package/dist/.setup/incognito-session-DWYapfwf.mjs +2 -0
- package/dist/.setup/{inference-context-D96l9-ew.mjs → inference-context-D-9gWlTR.mjs} +16 -18
- package/dist/.setup/inference-dispatch-CMZtjQyz.mjs +359 -0
- package/dist/.setup/inference-metadata-CgIf7sOx.mjs +81 -0
- package/dist/.setup/{inference-proxy-b-aJMSxm.mjs → inference-proxy-DhcXOgUE.mjs} +174 -214
- package/dist/.setup/{isolated-completion-BIZFhTNG.mjs → isolated-completion-Dm3PzxJk.mjs} +9 -12
- package/dist/.setup/{managed-binary-BnshlFag.mjs → managed-binary-kiWRhNRE.mjs} +8 -12
- package/dist/.setup/{model-catalog-CfXJf9Ay.mjs → model-catalog-PAuZgJC6.mjs} +11 -10
- package/dist/.setup/model-runtime-BdqzOMkU.mjs +11 -0
- package/dist/.setup/{models-KnqBv0hE.mjs → models-DHXZtVVk.mjs} +9 -18
- package/dist/.setup/{native-auth-rWbGbMn3.mjs → native-auth-CuG53tu4.mjs} +4 -4
- package/dist/.setup/{native-execution-policy-umd0tgh4.mjs → native-execution-policy-BxZJy5mP.mjs} +5 -30
- package/dist/.setup/{native-subagent-monitor-D3filLY2.mjs → native-subagent-monitor-Dpsmf2wz.mjs} +4395 -3609
- package/dist/.setup/native-subagent-pending-assignments-DwkCzLvD.mjs +203 -0
- package/dist/.setup/native-task-assignments-DMQ0g3hu.mjs +194 -0
- package/dist/.setup/{node-cli-sessions-r3avj02l.mjs → node-cli-sessions-HC4W6FLI.mjs} +19 -49
- package/dist/.setup/{node-exec-server.runtime-BDwWXVpK.mjs → node-exec-server.runtime-BgBfWQqo.mjs} +3 -6
- package/dist/.setup/{plan-CN3VwfNU.mjs → plan-Y-QIvrKB.mjs} +49 -92
- package/dist/.setup/{plugin-activation-DT3MNtqj.mjs → plugin-activation-cNHRfaxU.mjs} +8 -36
- package/dist/.setup/{plugin-app-cache-key-B2CsSdnV.mjs → plugin-app-cache-key-BL9B5H0L.mjs} +6 -23
- package/dist/.setup/{plugin-inventory-BoRei8Z4.mjs → plugin-inventory-Cky2XJUw.mjs} +21 -21
- package/dist/.setup/{plugin-marketplace-discovery-CDOi8IFs.mjs → plugin-marketplace-discovery-D_dV9FXa.mjs} +18 -24
- package/dist/.setup/{plugin-metadata-cache-Ctmo83k_.mjs → plugin-metadata-cache-DsjsL1dr.mjs} +115 -175
- package/dist/.setup/{provider-BOsxQHOM.mjs → provider-DH8NSzGt.mjs} +11 -14
- package/dist/.setup/{provider-capabilities-BfE88FZ5.mjs → provider-capabilities-CAxoF-X1.mjs} +13 -18
- package/dist/.setup/{rate-limits-CMU3DUD0.mjs → rate-limits-B7-X2TgG.mjs} +9 -31
- package/dist/.setup/{request-D2L0zMrq.mjs → request-BHZ1nz8d.mjs} +7 -6
- package/dist/.setup/responses-oauth-twnuTaAa.mjs +93 -0
- package/dist/.setup/rpc-error-BlD2vuzn.mjs +31 -0
- package/dist/.setup/{run-attempt-BHu11r7h.mjs → run-attempt-D8RZUOzY.mjs} +1035 -1023
- package/dist/.setup/{run-attempt-lifecycle-B7JbY4-F.mjs → run-attempt-lifecycle-C-6O3Exn.mjs} +10 -24
- package/dist/.setup/{runtime-artifact-CLZ8udh-.mjs → runtime-artifact-DDQ-HGXf.mjs} +16 -4
- package/dist/.setup/runtime-artifact-connection-D68qQn1m.mjs +78 -0
- package/dist/.setup/sandbox-guard-DjCz2eOw.mjs +126 -0
- package/dist/.setup/scope-DOC1Xjc8.mjs +6 -0
- package/dist/.setup/session-binding-DGCYAfvD.mjs +443 -0
- package/dist/.setup/{session-binding-record-BGoz8wOK.mjs → session-binding-record-Oe9L-CNY.mjs} +52 -130
- package/dist/.setup/{session-binding-sidecars-BlB5EvIS.mjs → session-binding-sidecars-jo6H8dFr.mjs} +196 -17
- package/dist/.setup/{session-catalog-Pno1xGcl.mjs → session-catalog-4sCdv5qx.mjs} +170 -324
- package/dist/.setup/{session-catalog-adoption-BI6UTDZT.mjs → session-catalog-adoption-BU_pHWG7.mjs} +7 -6
- package/dist/.setup/{session-catalog-archive-lHBqzhaO.mjs → session-catalog-archive-spHfihri.mjs} +6 -6
- package/dist/.setup/session-catalog-events-DePDzzjc.mjs +139 -0
- package/dist/.setup/session-catalog-home-id-vlih0B_g.mjs +22 -0
- package/dist/.setup/{session-catalog-index-B9_VQIUz.mjs → session-catalog-index-CZvDzC6z.mjs} +126 -122
- package/dist/.setup/{session-catalog-index-order-hcdz07yN.mjs → session-catalog-index-order-BcQpHks3.mjs} +1 -1
- package/dist/.setup/{session-catalog-index-state-Dgh8ORJm.mjs → session-catalog-index-state-TeO7EyO-.mjs} +3 -2
- package/dist/.setup/session-catalog-limits-DDxOsQeC.mjs +14 -0
- package/dist/.setup/session-catalog-list-request-CvtxrYSe.mjs +170 -0
- package/dist/.setup/session-catalog-native-projection-DjhwGL6x.mjs +178 -0
- package/dist/.setup/{session-catalog-node-adoption-ITddWx_X.mjs → session-catalog-node-adoption-DgXvSGu0.mjs} +10 -27
- package/dist/.setup/{session-catalog-node-continue-6g6qi4A9.mjs → session-catalog-node-continue-DjKXHBbi.mjs} +8 -10
- package/dist/.setup/session-catalog-node-lookup-CtAXI5W5.mjs +56 -0
- package/dist/.setup/{session-catalog-native-projection-DowriLid.mjs → session-catalog-parsing-CPGaPYr-.mjs} +11 -194
- package/dist/.setup/{session-catalog-projection-zK_PUsiE.mjs → session-catalog-projection-Cr5qP5Dj.mjs} +6 -4
- package/dist/.setup/session-catalog-provenance-DoAvktcj.mjs +95 -0
- package/dist/.setup/{session-cli-irrD-uo7.mjs → session-cli-Cn_nCqfq.mjs} +9 -22
- package/dist/.setup/{session-history-BrqhSCf9.mjs → session-history-D83lJWHG.mjs} +4 -6
- package/dist/.setup/{session-history-import-D-3wAgOP.mjs → session-history-import-WhX-X33a.mjs} +7 -10
- package/dist/.setup/session-history-read-Ov3StuL4.mjs +133 -0
- package/dist/.setup/{session-history.worker-CaCh0xF_.mjs → session-history.worker-MnPKncqP.mjs} +9 -5
- package/dist/.setup/session-initialization-6aveB9qb.mjs +22 -0
- package/dist/.setup/{session-permission-policy-BI1QK_98.mjs → session-permission-policy-Ci_fVX6y.mjs} +4 -8
- package/dist/.setup/{session-retirement-BH-S6qkJ.mjs → session-retirement-qMTxkNx2.mjs} +17 -17
- package/dist/.setup/{settled-turn-context-fmwouT5I.mjs → settled-turn-context-D4yj4rxf.mjs} +1 -1
- package/dist/.setup/{settled-turn-finalizer-DiAi6Kx6.mjs → settled-turn-finalizer-BsvEabkw.mjs} +14 -10
- package/dist/.setup/{shared-client-DA4VR4Eb.mjs → shared-client-DqyTMYug.mjs} +783 -412
- package/dist/.setup/shared-client-lifecycle-DJIgqgMw.mjs +153 -0
- package/dist/.setup/{side-question-BJ1wSDcB.mjs → side-question-C4kCmQy1.mjs} +79 -143
- package/dist/.setup/{source-CUzJq5WN.mjs → source-CS_7GFJZ.mjs} +80 -137
- package/dist/.setup/{thread-lifecycle-B3mfz1TG.mjs → thread-lifecycle-DPflntEJ.mjs} +294 -737
- package/dist/.setup/{incognito-session-uhrBF6wJ.mjs → thread-ownership-queue-Dp24d7-F.mjs} +1 -2
- package/dist/.setup/{thread-ownership-DcTtAcXj.mjs → thread-ownership-roNP0l1c.mjs} +45 -10
- package/dist/.setup/{thread-policy-DGuQsuFC.mjs → thread-policy-DTd-DtkX.mjs} +46 -7
- package/dist/.setup/{thread-requests-BLvGkP2R.mjs → thread-requests-B_bRnMGN.mjs} +199 -302
- package/dist/.setup/{thread-resume-DIBXwOpE.mjs → thread-resume-CdDaoc7T.mjs} +6 -6
- package/dist/.setup/{timeout-C910MdAB.mjs → timeout-CXOfNoaX.mjs} +1 -35
- package/dist/.setup/{transcript-history-projection-ZZpkFkJ_.mjs → transcript-history-projection-DRSifI-1.mjs} +17 -89
- package/dist/.setup/{transcript-mirror-attestation-CzM-94NC.mjs → transcript-mirror-attestation-YSegaktH.mjs} +3 -4
- package/dist/.setup/{transcript-mirror-BtHDBp1G.mjs → transcript-mirror-kxmCYsuF.mjs} +7 -9
- package/dist/.setup/{transport-stdio-h2VHOskC.mjs → transport-stdio-Bdegpn2V.mjs} +5 -22
- package/dist/.setup/transport-websocket-BTBE-LD9.mjs +211 -0
- package/dist/.setup/{upstream-prompt-provenance-LphB8slG.mjs → upstream-prompt-provenance-fXkKbPVC.mjs} +3 -9
- package/dist/.setup/{upstream-session-fork-BUr4OUbC.mjs → upstream-session-fork-CBeVjBpT.mjs} +23 -23
- package/dist/.setup/{usage-BML0r-ua.mjs → usage-BMzNxeR_.mjs} +4 -4
- package/dist/.setup/{usage-limit-error-DUMbefVY.mjs → usage-limit-error-QXerDo3i.mjs} +4 -19
- package/dist/.setup/{web-search-provider.runtime-CDKlN-Rv.mjs → web-search-provider.runtime-P77OUeoo.mjs} +8 -19
- package/dist/api.js +9 -11
- package/dist/catalog-page.worker.js +1 -1
- package/dist/cli-metadata.js +1 -1
- package/dist/doctor-contract-api.js +50 -8
- package/dist/harness.js +344 -1
- package/dist/index.js +193 -245
- package/dist/media-understanding-provider.js +9 -22
- package/dist/migration-provider-api.js +1 -1
- package/dist/provider-discovery.js +1 -1
- package/dist/session-history-worker-runtime.js +3 -3
- package/dist/session-history.worker.js +1 -1
- package/openclaw.plugin.json +14 -2
- package/package.json +7 -6
- package/dist/.setup/attempt-workspace-context-DUVEn_CS.mjs +0 -331
- package/dist/.setup/compact-Du5UvtxA.mjs +0 -680
- package/dist/.setup/event-projector-assistant-message-BsruvNrH.mjs +0 -103
- package/dist/.setup/event-projector-items-C6L_5ZiT.mjs +0 -234
- package/dist/.setup/harness-a_MsE4-_.mjs +0 -355
- package/dist/.setup/history-rejection-B4nOXNXF.mjs +0 -13
- package/dist/.setup/image-payload-sanitizer-tupAr-2o.mjs +0 -79
- package/dist/.setup/local-runtime-attribution-B_2mnqhb.mjs +0 -19
- package/dist/.setup/native-subagent-history-0nYYgo0k.mjs +0 -148
- package/dist/.setup/native-subagent-task-ids-wb8CKZGN.mjs +0 -441
- package/dist/.setup/plugin-approval-roundtrip-C0MZzCuP.mjs +0 -122
- package/dist/.setup/rolldown-runtime-8H4AJuhK.mjs +0 -14
- package/dist/.setup/sandbox-guard-C2sRMOEY.mjs +0 -166
- package/dist/.setup/session-binding-Cm0apEbd.mjs +0 -692
- package/dist/.setup/session-catalog-events-Bj6j94E_.mjs +0 -347
- package/dist/.setup/session-history-read-B3ZfSUbF.mjs +0 -50
- package/dist/.setup/session-initialization-rcgbZiid.mjs +0 -75
- package/dist/.setup/thread-history-page-DoVpnHim.mjs +0 -83
package/dist/.setup/{run-attempt-lifecycle-B7JbY4-F.mjs → run-attempt-lifecycle-C-6O3Exn.mjs}
RENAMED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { t as attemptTerminal } from "./attempt-terminal-gZrxQ35N.mjs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
|
-
import { awaitAgentEndSideEffects, embeddedAgentLog,
|
|
4
|
+
import { awaitAgentEndSideEffects, embeddedAgentLog, runAgentEndSideEffects } from "openclaw/plugin-sdk/agent-harness-runtime";
|
|
5
|
+
import { emitAgentHarnessAttemptEvent } from "openclaw/plugin-sdk/agent-harness-attempt-runtime";
|
|
5
6
|
//#region extensions/codex/src/app-server/workspace-dir-cache.ts
|
|
6
7
|
/** Process-local cache of Codex workspaces already created by the run loop. */
|
|
7
8
|
const codexWorkspaceDirCache = /* @__PURE__ */ new Set();
|
|
@@ -13,17 +14,13 @@ function shouldKeepCodexSharedAbortOpen(params) {
|
|
|
13
14
|
if (params.explicitCancellationObserved || terminal.aborted || terminal.externalAbort) return false;
|
|
14
15
|
return params.trigger === "memory" || !params.attemptSucceeded;
|
|
15
16
|
}
|
|
16
|
-
function withCodexAppServerFastModeServiceTier(appServer, params) {
|
|
17
|
+
function withCodexAppServerFastModeServiceTier(appServer, params, configuredAppServer = appServer) {
|
|
17
18
|
const fastMode = typeof params.fastMode === "function" ? params.fastMode() : params.fastMode;
|
|
18
|
-
const serviceTier = fastMode === void 0 ?
|
|
19
|
+
const serviceTier = fastMode === void 0 ? configuredAppServer.serviceTier : fastMode ? "priority" : void 0;
|
|
19
20
|
if (serviceTier === appServer.serviceTier) return appServer;
|
|
20
|
-
if (serviceTier) return {
|
|
21
|
-
...appServer,
|
|
22
|
-
serviceTier
|
|
23
|
-
};
|
|
24
21
|
return {
|
|
25
22
|
...appServer,
|
|
26
|
-
serviceTier: null
|
|
23
|
+
serviceTier: serviceTier || null
|
|
27
24
|
};
|
|
28
25
|
}
|
|
29
26
|
function estimateCodexAppServerProjectedTurnTokens(params) {
|
|
@@ -36,22 +33,11 @@ async function ensureCodexWorkspaceDirOnce(workspaceDir) {
|
|
|
36
33
|
await fs.mkdir(normalized, { recursive: true });
|
|
37
34
|
codexWorkspaceDirCache.add(normalized);
|
|
38
35
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
data: event.data,
|
|
45
|
-
...params.sessionKey ? { sessionKey: params.sessionKey } : {}
|
|
46
|
-
});
|
|
47
|
-
} catch (error) {
|
|
48
|
-
embeddedAgentLog.debug("codex app-server global agent event emit failed", { error });
|
|
49
|
-
}
|
|
50
|
-
try {
|
|
51
|
-
await params.onAgentEvent?.(event);
|
|
52
|
-
} catch (error) {
|
|
53
|
-
embeddedAgentLog.debug("codex app-server agent event handler threw", { error });
|
|
54
|
-
}
|
|
36
|
+
function emitCodexAppServerEvent(params, event) {
|
|
37
|
+
return emitAgentHarnessAttemptEvent(params, event, {
|
|
38
|
+
label: "codex app-server",
|
|
39
|
+
log: embeddedAgentLog
|
|
40
|
+
});
|
|
55
41
|
}
|
|
56
42
|
async function runCodexAgentEndHook(params, hookParams) {
|
|
57
43
|
const sideEffectParams = {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { n as isCodexAppServerProxyLaunch } from "./launch-args-DbFCehO7.mjs";
|
|
2
|
-
import { a as resolvePackagedCodexNativeCommand } from "./managed-binary-
|
|
3
|
-
import { n as resolveCodexAppServerSpawnEnv, r as resolveCodexAppServerSpawnInvocation } from "./transport-stdio-
|
|
2
|
+
import { a as resolvePackagedCodexNativeCommand } from "./managed-binary-kiWRhNRE.mjs";
|
|
3
|
+
import { n as resolveCodexAppServerSpawnEnv, r as resolveCodexAppServerSpawnInvocation } from "./transport-stdio-Bdegpn2V.mjs";
|
|
4
|
+
import { captureCodexConfiguredConnection, finalizeCodexConfiguredConnection, isCodexConfiguredConnectionArtifact, validateCodexConfiguredConnectionCapture } from "./runtime-artifact-connection-D68qQn1m.mjs";
|
|
4
5
|
import { createHash } from "node:crypto";
|
|
5
6
|
import { resolveWindowsExecutablePath } from "openclaw/plugin-sdk/windows-spawn";
|
|
6
7
|
import { constants } from "node:fs";
|
|
@@ -8,7 +9,7 @@ import path from "node:path";
|
|
|
8
9
|
import fs$1 from "node:fs/promises";
|
|
9
10
|
import { isPathInside, sha256File } from "openclaw/plugin-sdk/file-access-runtime";
|
|
10
11
|
//#region extensions/codex/src/app-server/runtime-artifact.ts
|
|
11
|
-
/**
|
|
12
|
+
/** Local executable or configured-service identity for verified Codex turns. */
|
|
12
13
|
const ARTIFACT_ID_PREFIX = "codex-app-server:v1:";
|
|
13
14
|
const ARTIFACT_HASH_DOMAIN = "openclaw-codex-app-server-runtime-artifact-v1\0";
|
|
14
15
|
const MAX_ARTIFACT_ID_BYTES = 32768;
|
|
@@ -467,14 +468,22 @@ function fingerprintBinding(descriptor, contentFingerprint) {
|
|
|
467
468
|
}
|
|
468
469
|
/** Captures exact candidate bytes immediately before app-server startup. */
|
|
469
470
|
async function captureCodexAppServerRuntimeArtifactBeforeStart(params) {
|
|
471
|
+
throwIfAborted(params.signal);
|
|
472
|
+
if (params.startOptions.transport !== "stdio") return captureCodexConfiguredConnection(params.startOptions);
|
|
470
473
|
const descriptor = await captureFilesystemDescriptor(params);
|
|
471
474
|
return {
|
|
475
|
+
kind: "local-executable",
|
|
472
476
|
descriptor,
|
|
473
477
|
contentFingerprint: await hashSelectedArtifactFiles(descriptor, params.signal)
|
|
474
478
|
};
|
|
475
479
|
}
|
|
476
480
|
/** Rechecks startup bytes and adds initialized handshake identity. */
|
|
477
481
|
async function finalizeCodexAppServerRuntimeArtifact(params) {
|
|
482
|
+
throwIfAborted(params.signal);
|
|
483
|
+
if (params.before.kind === "configured-connection") return finalizeCodexConfiguredConnection({
|
|
484
|
+
...params,
|
|
485
|
+
before: params.before
|
|
486
|
+
});
|
|
478
487
|
const afterDescriptor = await captureFilesystemDescriptor(params);
|
|
479
488
|
const afterContentFingerprint = await hashSelectedArtifactFiles(afterDescriptor, params.signal);
|
|
480
489
|
if (JSON.stringify(afterDescriptor) !== JSON.stringify(params.before.descriptor) || afterContentFingerprint !== params.before.contentFingerprint) throw new Error("Codex app-server runtime artifact changed during startup");
|
|
@@ -494,6 +503,7 @@ async function finalizeCodexAppServerRuntimeArtifact(params) {
|
|
|
494
503
|
}
|
|
495
504
|
/** Checks current pre-spawn bytes and selection against a previously minted binding. */
|
|
496
505
|
function validateCodexAppServerRuntimeArtifactCapture(binding, capture) {
|
|
506
|
+
if (capture.kind === "configured-connection") return validateCodexConfiguredConnectionCapture(binding, capture);
|
|
497
507
|
try {
|
|
498
508
|
const expectedDescriptor = decodeArtifactId(binding.id);
|
|
499
509
|
const { serverVersion: _serverVersion, userAgentFingerprint: _userAgentFingerprint, ...expectedFilesystemDescriptor } = expectedDescriptor;
|
|
@@ -514,8 +524,10 @@ function readCodexAppServerClientRuntimeArtifact(client) {
|
|
|
514
524
|
return getRuntimeArtifactBindings().get(client);
|
|
515
525
|
}
|
|
516
526
|
/** Re-hashes only the exact Codex files named by a server-minted artifact binding. */
|
|
517
|
-
async function validateCodexAppServerRuntimeArtifact(binding, signal) {
|
|
527
|
+
async function validateCodexAppServerRuntimeArtifact(binding, signal, startOptions) {
|
|
518
528
|
try {
|
|
529
|
+
throwIfAborted(signal);
|
|
530
|
+
if (isCodexConfiguredConnectionArtifact(binding.id)) return Boolean(startOptions && validateCodexConfiguredConnectionCapture(binding, captureCodexConfiguredConnection(startOptions)));
|
|
519
531
|
const descriptor = decodeArtifactId(binding.id);
|
|
520
532
|
const contentFingerprint = await hashSelectedArtifactFiles(descriptor, signal);
|
|
521
533
|
return binding.fingerprint === fingerprintBinding(descriptor, contentFingerprint);
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { t as codexAppServerStartOptionsKey } from "./config-options-CzyWLTJt.mjs";
|
|
2
|
+
import "./config-runtime-C0NbLms1.mjs";
|
|
3
|
+
import { r as resolveCodexAppServerUnixSocketPath } from "./transport-websocket-BTBE-LD9.mjs";
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
//#region extensions/codex/src/app-server/runtime-artifact-connection.ts
|
|
7
|
+
/** Configured-service identity, distinct from local executable attestation. */
|
|
8
|
+
const CONNECTION_ID_PREFIX = "codex-app-server:connection:v1:";
|
|
9
|
+
const CONNECTION_HASH_DOMAIN = "openclaw-codex-configured-connection-v1\0";
|
|
10
|
+
function captureCodexConfiguredConnection(start) {
|
|
11
|
+
if (start.transport !== "websocket" && start.transport !== "unix" || start.transport === "websocket" && !start.url?.trim()) throw new Error("Verified remote Codex inference requires a configured socket endpoint");
|
|
12
|
+
const unixSocketPath = resolveCodexAppServerUnixSocketPath(start);
|
|
13
|
+
const key = codexAppServerStartOptionsKey({
|
|
14
|
+
transport: start.transport,
|
|
15
|
+
command: "",
|
|
16
|
+
args: [],
|
|
17
|
+
url: unixSocketPath ? `unix://${path.resolve(unixSocketPath)}` : start.url,
|
|
18
|
+
authToken: start.authToken,
|
|
19
|
+
headers: start.headers
|
|
20
|
+
});
|
|
21
|
+
return Object.freeze({
|
|
22
|
+
kind: "configured-connection",
|
|
23
|
+
transport: start.transport,
|
|
24
|
+
selectionFingerprint: createHash("sha256").update(key).digest("hex")
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function finalizeCodexConfiguredConnection(params) {
|
|
28
|
+
const after = captureCodexConfiguredConnection(params.startOptions);
|
|
29
|
+
if (JSON.stringify(after) !== JSON.stringify(params.before)) throw new Error("Codex configured connection changed during startup");
|
|
30
|
+
const serverVersion = params.runtimeIdentity?.serverVersion?.trim();
|
|
31
|
+
if (!serverVersion) throw new Error("Codex app-server did not report an initialized runtime identity");
|
|
32
|
+
const descriptor = {
|
|
33
|
+
...after,
|
|
34
|
+
runtimeIdentityFingerprint: createHash("sha256").update(JSON.stringify({
|
|
35
|
+
serverVersion,
|
|
36
|
+
userAgent: params.runtimeIdentity?.userAgent ?? null,
|
|
37
|
+
codexHome: params.runtimeIdentity?.codexHome ?? null,
|
|
38
|
+
platformFamily: params.runtimeIdentity?.platformFamily ?? null,
|
|
39
|
+
platformOs: params.runtimeIdentity?.platformOs ?? null
|
|
40
|
+
})).digest("hex")
|
|
41
|
+
};
|
|
42
|
+
return Object.freeze({
|
|
43
|
+
id: encodeConnectionId(descriptor),
|
|
44
|
+
fingerprint: fingerprint(descriptor)
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function isCodexConfiguredConnectionArtifact(id) {
|
|
48
|
+
return id.startsWith(CONNECTION_ID_PREFIX);
|
|
49
|
+
}
|
|
50
|
+
function validateCodexConfiguredConnectionCapture(binding, capture) {
|
|
51
|
+
try {
|
|
52
|
+
const descriptor = decodeConnectionId(binding.id);
|
|
53
|
+
return descriptor.transport === capture.transport && descriptor.selectionFingerprint === capture.selectionFingerprint && binding.fingerprint === fingerprint(descriptor);
|
|
54
|
+
} catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function encodeConnectionId(descriptor) {
|
|
59
|
+
return `${CONNECTION_ID_PREFIX}${Buffer.from(JSON.stringify(descriptor)).toString("base64url")}`;
|
|
60
|
+
}
|
|
61
|
+
function fingerprint(descriptor) {
|
|
62
|
+
return createHash("sha256").update(CONNECTION_HASH_DOMAIN).update(JSON.stringify(descriptor)).digest("hex");
|
|
63
|
+
}
|
|
64
|
+
function decodeConnectionId(id) {
|
|
65
|
+
if (!isCodexConfiguredConnectionArtifact(id) || Buffer.byteLength(id) > 2048) throw new Error("Invalid Codex configured connection artifact");
|
|
66
|
+
const value = JSON.parse(Buffer.from(id.slice(31), "base64url").toString("utf8"));
|
|
67
|
+
if (!value || typeof value !== "object" || Array.isArray(value) || !("kind" in value) || value.kind !== "configured-connection" || !("transport" in value) || value.transport !== "websocket" && value.transport !== "unix" || !("selectionFingerprint" in value) || typeof value.selectionFingerprint !== "string" || !/^[a-f0-9]{64}$/u.test(value.selectionFingerprint) || !("runtimeIdentityFingerprint" in value) || typeof value.runtimeIdentityFingerprint !== "string" || !/^[a-f0-9]{64}$/u.test(value.runtimeIdentityFingerprint)) throw new Error("Invalid Codex configured connection descriptor");
|
|
68
|
+
const descriptor = {
|
|
69
|
+
kind: value.kind,
|
|
70
|
+
transport: value.transport,
|
|
71
|
+
selectionFingerprint: value.selectionFingerprint,
|
|
72
|
+
runtimeIdentityFingerprint: value.runtimeIdentityFingerprint
|
|
73
|
+
};
|
|
74
|
+
if (encodeConnectionId(descriptor) !== id) throw new Error("Invalid noncanonical Codex configured connection artifact");
|
|
75
|
+
return descriptor;
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
export { captureCodexConfiguredConnection, finalizeCodexConfiguredConnection, isCodexConfiguredConnectionArtifact, validateCodexConfiguredConnectionCapture };
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { l as isCodexRemoteExecPlacementSandbox } from "./config-parsing-b088LyhT.mjs";
|
|
2
|
+
import { n as resolveCodexNativeExecutionPolicy, t as formatCodexNativeNodeExecBlock } from "./native-execution-policy-BxZJy5mP.mjs";
|
|
3
|
+
import { t as __exportAll } from "./session-binding-sidecars-jo6H8dFr.mjs";
|
|
4
|
+
import { isRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
5
|
+
import { tryResolveDefaultAgentId } from "openclaw/plugin-sdk/agent-scope-runtime";
|
|
6
|
+
import { parseAgentSessionKey } from "openclaw/plugin-sdk/routing";
|
|
7
|
+
import { resolveSandboxRuntimeStatus } from "openclaw/plugin-sdk/sandbox";
|
|
8
|
+
//#region extensions/codex/src/app-server/sandbox-guard.ts
|
|
9
|
+
/**
|
|
10
|
+
* Blocks direct Codex app-server requests that would bypass OpenClaw sandbox or
|
|
11
|
+
* node-exec routing guarantees.
|
|
12
|
+
*/
|
|
13
|
+
var sandbox_guard_exports = /* @__PURE__ */ __exportAll({
|
|
14
|
+
resolveCodexAppServerDirectSandboxBypassBlock: () => resolveCodexAppServerDirectSandboxBypassBlock,
|
|
15
|
+
resolveCodexNativeExecutionBlock: () => resolveCodexNativeExecutionBlock,
|
|
16
|
+
resolveCodexNativeSandboxBlock: () => resolveCodexNativeSandboxBlock
|
|
17
|
+
});
|
|
18
|
+
const ALLOWED_CONTROL_PLANE_METHODS = /* @__PURE__ */ new Set([
|
|
19
|
+
"account/rateLimits/read",
|
|
20
|
+
"account/read",
|
|
21
|
+
"app/installed",
|
|
22
|
+
"app/list",
|
|
23
|
+
"app/read",
|
|
24
|
+
"config/batchWrite",
|
|
25
|
+
"config/mcpServer/reload",
|
|
26
|
+
"config/read",
|
|
27
|
+
"config/value/write",
|
|
28
|
+
"environment/add",
|
|
29
|
+
"experimentalFeature/list",
|
|
30
|
+
"experimentalFeature/enablement/set",
|
|
31
|
+
"feedback/upload",
|
|
32
|
+
"hooks/list",
|
|
33
|
+
"initialize",
|
|
34
|
+
"marketplace/add",
|
|
35
|
+
"mcpServerStatus/list",
|
|
36
|
+
"model/list",
|
|
37
|
+
"plugin/install",
|
|
38
|
+
"plugin/installed",
|
|
39
|
+
"plugin/list",
|
|
40
|
+
"plugin/read",
|
|
41
|
+
"skills/list",
|
|
42
|
+
"thread/archive",
|
|
43
|
+
"thread/inject_items",
|
|
44
|
+
"thread/list",
|
|
45
|
+
"thread/metadata/update",
|
|
46
|
+
"thread/name/set",
|
|
47
|
+
"thread/read",
|
|
48
|
+
"thread/rollback",
|
|
49
|
+
"thread/unarchive",
|
|
50
|
+
"thread/unsubscribe",
|
|
51
|
+
"turn/interrupt",
|
|
52
|
+
"turn/steer"
|
|
53
|
+
]);
|
|
54
|
+
/** Returns a block message when a direct app-server method would bypass OpenClaw execution policy. */
|
|
55
|
+
function resolveCodexAppServerDirectSandboxBypassBlock(params) {
|
|
56
|
+
const controlPlane = ALLOWED_CONTROL_PLANE_METHODS.has(params.method);
|
|
57
|
+
if (!controlPlane || params.method === "config/mcpServer/reload") {
|
|
58
|
+
const nodeExecBlock = resolveCodexNativeNodeExecBlock({
|
|
59
|
+
config: params.config,
|
|
60
|
+
sessionKey: params.sessionKey,
|
|
61
|
+
sessionId: params.sessionId,
|
|
62
|
+
surface: `app-server method \`${params.method}\``
|
|
63
|
+
});
|
|
64
|
+
if (nodeExecBlock) return nodeExecBlock;
|
|
65
|
+
}
|
|
66
|
+
if (controlPlane) return;
|
|
67
|
+
const sessionKey = params.sessionKey?.trim() || params.sessionId?.trim();
|
|
68
|
+
if (!sessionKey) return;
|
|
69
|
+
const sandboxBlock = resolveCodexNativeSandboxBlock({
|
|
70
|
+
config: params.config,
|
|
71
|
+
sessionKey,
|
|
72
|
+
sandbox: params.sandbox,
|
|
73
|
+
surface: `app-server method \`${params.method}\``
|
|
74
|
+
});
|
|
75
|
+
if (!sandboxBlock) return;
|
|
76
|
+
if (params.method === "thread/start" && hasOpenClawSandboxEnvironmentSelection(params.requestParams)) return;
|
|
77
|
+
return sandboxBlock;
|
|
78
|
+
}
|
|
79
|
+
/** Resolves the generic native-execution block for sandboxed or node-hosted sessions. */
|
|
80
|
+
function resolveCodexNativeExecutionBlock(params) {
|
|
81
|
+
return resolveCodexNativeSandboxBlock(params) ?? resolveCodexNativeNodeExecBlock(params);
|
|
82
|
+
}
|
|
83
|
+
/** Returns a block message when native Codex execution cannot honor active sandboxing. */
|
|
84
|
+
function resolveCodexNativeSandboxBlock(params) {
|
|
85
|
+
if (params.sandboxEnvironmentSelected) return;
|
|
86
|
+
const sessionKey = params.sessionKey?.trim() || params.sessionId?.trim();
|
|
87
|
+
if (!sessionKey) return;
|
|
88
|
+
if (isCodexRemoteExecPlacementSandbox(params.sandbox) || params.sandbox?.enabled === true) return formatCodexNativeSandboxBlock({ surface: params.surface });
|
|
89
|
+
const sandboxAgentId = parseAgentSessionKey(sessionKey)?.agentId ?? params.agentId ?? tryResolveDefaultAgentId(params.config ?? {});
|
|
90
|
+
if (!sandboxAgentId) return;
|
|
91
|
+
if (!resolveSandboxRuntimeStatus({
|
|
92
|
+
cfg: params.config,
|
|
93
|
+
sessionKey,
|
|
94
|
+
agentId: sandboxAgentId,
|
|
95
|
+
classificationAgentId: sandboxAgentId
|
|
96
|
+
}).sandboxed) return;
|
|
97
|
+
return formatCodexNativeSandboxBlock({ surface: params.surface });
|
|
98
|
+
}
|
|
99
|
+
function hasOpenClawSandboxEnvironmentSelection(value) {
|
|
100
|
+
if (!isRecord(value)) return false;
|
|
101
|
+
const environments = value.environments;
|
|
102
|
+
return Array.isArray(environments) && environments.length > 0 && environments.every((environment) => isRecord(environment) && typeof environment.environmentId === "string" && environment.environmentId.startsWith("openclaw-sandbox-") && typeof environment.cwd === "string" && environment.cwd.trim().length > 0);
|
|
103
|
+
}
|
|
104
|
+
function formatCodexNativeSandboxBlock(params) {
|
|
105
|
+
return [
|
|
106
|
+
`Codex-native ${params.surface} is unavailable because OpenClaw sandboxing is active for this session.`,
|
|
107
|
+
"This mode cannot route execution through the OpenClaw sandbox backend.",
|
|
108
|
+
"Use a normal Codex harness turn, or run an intentionally unsandboxed session."
|
|
109
|
+
].join(" ");
|
|
110
|
+
}
|
|
111
|
+
function resolveCodexNativeNodeExecBlock(params) {
|
|
112
|
+
const sessionKey = params.sessionKey?.trim() || params.sessionId?.trim();
|
|
113
|
+
const policy = resolveCodexNativeExecutionPolicy({
|
|
114
|
+
config: params.config,
|
|
115
|
+
sessionKey,
|
|
116
|
+
agentId: params.agentId,
|
|
117
|
+
readRuntimeSessionEntry: Boolean(sessionKey)
|
|
118
|
+
});
|
|
119
|
+
if (policy.nativeToolSurfaceAllowed) return;
|
|
120
|
+
return formatCodexNativeNodeExecBlock({
|
|
121
|
+
surface: params.surface,
|
|
122
|
+
reason: policy.blockReason
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//#endregion
|
|
126
|
+
export { resolveCodexNativeSandboxBlock as n, sandbox_guard_exports as r, resolveCodexNativeExecutionBlock as t };
|