@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
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX } from "./config-parsing-
|
|
3
|
-
import { r as normalizeCodexAppServerArgs } from "./launch-args-DbFCehO7.mjs";
|
|
4
|
-
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
1
|
+
import { l as readRecord, s as readNonEmptyString } from "./config-utils-D0CXecki.mjs";
|
|
2
|
+
import { t as DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX } from "./config-parsing-b088LyhT.mjs";
|
|
5
3
|
import { createHash } from "node:crypto";
|
|
6
4
|
import { AgentHarnessPreflightError } from "openclaw/plugin-sdk/agent-harness-registration";
|
|
7
5
|
import { parse } from "smol-toml";
|
|
8
6
|
import { readFileSync } from "node:fs";
|
|
9
|
-
import
|
|
10
|
-
import { homedir, hostname } from "node:os";
|
|
7
|
+
import { hostname } from "node:os";
|
|
11
8
|
import { isLoopbackHost } from "openclaw/plugin-sdk/request-url";
|
|
12
9
|
//#region extensions/codex/src/app-server/config-exec-policy.ts
|
|
13
10
|
function selectForcedPromptingSandbox(params) {
|
|
@@ -72,19 +69,13 @@ function parseAllowedSandboxModesFromCodexRequirements(content, hostName) {
|
|
|
72
69
|
const requirements = parseCodexRequirements(content);
|
|
73
70
|
const remoteSandboxModes = parseMatchingRemoteSandboxModesFromCodexRequirements(requirements, hostName);
|
|
74
71
|
if (remoteSandboxModes !== void 0) return remoteSandboxModes;
|
|
75
|
-
return
|
|
72
|
+
return parseRequirementsValues(requirements?.allowed_sandbox_modes, normalizeRequirementsSandboxMode);
|
|
76
73
|
}
|
|
77
74
|
function parseAllowedApprovalPoliciesFromCodexRequirements(content) {
|
|
78
|
-
|
|
79
|
-
if (values === void 0) return;
|
|
80
|
-
const normalizedPolicies = values.map((entry) => normalizeRequirementsApprovalPolicy(entry)).filter((entry) => entry !== void 0);
|
|
81
|
-
return normalizedPolicies.length > 0 ? new Set(normalizedPolicies) : void 0;
|
|
75
|
+
return parseRequirementsValues(parseCodexRequirements(content)?.allowed_approval_policies, normalizeRequirementsApprovalPolicy);
|
|
82
76
|
}
|
|
83
77
|
function parseAllowedApprovalsReviewersFromCodexRequirements(content) {
|
|
84
|
-
|
|
85
|
-
if (values === void 0) return;
|
|
86
|
-
const normalizedReviewers = values.map((entry) => normalizeRequirementsApprovalsReviewer(entry)).filter((entry) => entry !== void 0);
|
|
87
|
-
return normalizedReviewers.length > 0 ? new Set(normalizedReviewers) : void 0;
|
|
78
|
+
return parseRequirementsValues(parseCodexRequirements(content)?.allowed_approvals_reviewers, (value) => resolveApprovalsReviewer(value.trim().toLowerCase()));
|
|
88
79
|
}
|
|
89
80
|
function parseMatchingRemoteSandboxModesFromCodexRequirements(requirements, hostName) {
|
|
90
81
|
const normalizedHostName = normalizeRequirementsHostName(hostName);
|
|
@@ -94,13 +85,14 @@ function parseMatchingRemoteSandboxModesFromCodexRequirements(requirements, host
|
|
|
94
85
|
const config = readRecord(section);
|
|
95
86
|
const patterns = readRequirementsStringArray(config?.hostname_patterns);
|
|
96
87
|
if (!patterns || !requirementsHostNameMatchesAnyPattern(normalizedHostName, patterns)) continue;
|
|
97
|
-
return
|
|
88
|
+
return parseRequirementsValues(config?.allowed_sandbox_modes, normalizeRequirementsSandboxMode);
|
|
98
89
|
}
|
|
99
90
|
}
|
|
100
|
-
function
|
|
91
|
+
function parseRequirementsValues(value, normalize) {
|
|
92
|
+
const values = readRequirementsStringArray(value);
|
|
101
93
|
if (values === void 0) return;
|
|
102
|
-
const
|
|
103
|
-
return
|
|
94
|
+
const normalized = values.map(normalize).filter((entry) => entry !== void 0);
|
|
95
|
+
return normalized.length > 0 ? new Set(normalized) : void 0;
|
|
104
96
|
}
|
|
105
97
|
function parseCodexRequirements(content) {
|
|
106
98
|
try {
|
|
@@ -142,9 +134,6 @@ function normalizeRequirementsApprovalPolicy(value) {
|
|
|
142
134
|
if (normalized === "untrusted") return normalized;
|
|
143
135
|
return resolveApprovalPolicy(normalized);
|
|
144
136
|
}
|
|
145
|
-
function normalizeRequirementsApprovalsReviewer(value) {
|
|
146
|
-
return resolveApprovalsReviewer(value.trim().toLowerCase());
|
|
147
|
-
}
|
|
148
137
|
function selectGuardianApprovalPolicy(allowedApprovalPolicies, execModeRequiringPromptingApprovals) {
|
|
149
138
|
if (allowedApprovalPolicies === void 0 || allowedApprovalPolicies.has("on-request")) return "on-request";
|
|
150
139
|
if (allowedApprovalPolicies.has("untrusted")) return "untrusted";
|
|
@@ -164,43 +153,11 @@ function selectUserApprovalsReviewer(allowedApprovalsReviewers, execModeRequirin
|
|
|
164
153
|
throw new Error(`tools.exec.mode=${execModeRequiringUserReviewer ?? "ask"} requires Codex app-server user approvals`);
|
|
165
154
|
}
|
|
166
155
|
//#endregion
|
|
167
|
-
//#region extensions/codex/src/app-server/
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
return path.join(path.resolve(agentDir), CODEX_APP_SERVER_HOME_DIRNAME);
|
|
173
|
-
}
|
|
174
|
-
/** Resolves the native user Codex home used by Desktop and the CLI. */
|
|
175
|
-
function resolveCodexAppServerUserHomeDir(env = process.env, homedir$1 = homedir) {
|
|
176
|
-
const configured = normalizeOptionalString(env.CODEX_HOME);
|
|
177
|
-
return path.resolve(configured ?? path.join(homedir$1(), ".codex"));
|
|
178
|
-
}
|
|
179
|
-
/** Resolves the local CODEX_HOME used when starting one app-server connection. */
|
|
180
|
-
function resolveCodexAppServerLocalHomeDir(startOptions, agentDir, env = process.env) {
|
|
181
|
-
if (startOptions.codexHome) return startOptions.codexHome;
|
|
182
|
-
const configured = startOptions.env?.CODEX_HOME;
|
|
183
|
-
if (configured?.trim()) return configured;
|
|
184
|
-
return startOptions.homeScope === "user" ? resolveCodexAppServerUserHomeDir(env) : resolveCodexAppServerHomeDir(agentDir);
|
|
185
|
-
}
|
|
186
|
-
/** Forces OpenClaw-owned Codex auth to remain process-local. */
|
|
187
|
-
function withEphemeralCodexAuthStore(params) {
|
|
188
|
-
const { startOptions } = params;
|
|
189
|
-
if (!params.preparedAuth && params.authProfileId === null) return startOptions;
|
|
190
|
-
const args = normalizeCodexAppServerArgs(startOptions.args, CODEX_EPHEMERAL_AUTH_STORE_OVERRIDE);
|
|
191
|
-
return args === startOptions.args ? startOptions : {
|
|
192
|
-
...startOptions,
|
|
193
|
-
args
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
function withClearedEnvironmentVariables(startOptions, envVars) {
|
|
197
|
-
const clearEnv = startOptions.clearEnv ?? [];
|
|
198
|
-
const missingEnvVars = envVars.filter((envVar) => !clearEnv.includes(envVar));
|
|
199
|
-
if (missingEnvVars.length === 0) return startOptions;
|
|
200
|
-
return {
|
|
201
|
-
...startOptions,
|
|
202
|
-
clearEnv: [...clearEnv, ...missingEnvVars]
|
|
203
|
-
};
|
|
156
|
+
//#region extensions/codex/src/app-server/config-policy-json.ts
|
|
157
|
+
function stringifyCodexPolicy(value) {
|
|
158
|
+
if (Array.isArray(value)) return `[${value.map((item) => stringifyCodexPolicy(item)).join(",")}]`;
|
|
159
|
+
if (value && typeof value === "object") return `{${Object.entries(value).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, item]) => `${JSON.stringify(key)}:${stringifyCodexPolicy(item)}`).join(",")}}`;
|
|
160
|
+
return JSON.stringify(value);
|
|
204
161
|
}
|
|
205
162
|
//#endregion
|
|
206
163
|
//#region extensions/codex/src/app-server/config-security.ts
|
|
@@ -239,22 +196,19 @@ function resolveCodexAppServerNetworkProxy(config, sandbox) {
|
|
|
239
196
|
};
|
|
240
197
|
return { networkProxy: {
|
|
241
198
|
profileName,
|
|
242
|
-
configFingerprint:
|
|
199
|
+
configFingerprint: createHash("sha256").update(stringifyCodexPolicy(configPatch)).digest("hex"),
|
|
243
200
|
configPatch
|
|
244
201
|
} };
|
|
245
202
|
}
|
|
246
203
|
function resolveNetworkProxyPermissionProfileName(config, profile) {
|
|
247
204
|
const explicitProfileName = readNonEmptyString(config.profileName);
|
|
248
205
|
if (explicitProfileName) return explicitProfileName;
|
|
249
|
-
const suffix = createHash("sha256").update(
|
|
206
|
+
const suffix = createHash("sha256").update(stringifyCodexPolicy({
|
|
250
207
|
version: 1,
|
|
251
208
|
profile
|
|
252
209
|
})).digest("hex").slice(0, 16);
|
|
253
210
|
return `${DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX}-${suffix}`;
|
|
254
211
|
}
|
|
255
|
-
function fingerprintCodexAppServerNetworkProxyConfigPatch(configPatch) {
|
|
256
|
-
return createHash("sha256").update(stableStringifyJson(configPatch)).digest("hex");
|
|
257
|
-
}
|
|
258
212
|
function normalizeNetworkProxyPermissionMap(value) {
|
|
259
213
|
const entries = Object.entries(value ?? {}).map(([key, permission]) => [key.trim(), permission === "none" ? "deny" : permission]).filter(([key]) => key.length > 0);
|
|
260
214
|
return entries.length > 0 ? Object.fromEntries(entries) : void 0;
|
|
@@ -262,11 +216,6 @@ function normalizeNetworkProxyPermissionMap(value) {
|
|
|
262
216
|
function removeUndefinedJsonFields(value) {
|
|
263
217
|
return Object.fromEntries(Object.entries(value).filter((entry) => entry[1] !== void 0));
|
|
264
218
|
}
|
|
265
|
-
function stableStringifyJson(value) {
|
|
266
|
-
if (Array.isArray(value)) return `[${value.map((item) => stableStringifyJson(item)).join(",")}]`;
|
|
267
|
-
if (value && typeof value === "object") return `{${Object.entries(value).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, item]) => `${JSON.stringify(key)}:${stableStringifyJson(item)}`).join(",")}}`;
|
|
268
|
-
return JSON.stringify(value);
|
|
269
|
-
}
|
|
270
219
|
/** Explicit MCP prompting must bypass Codex's unconditional Never-policy approval. */
|
|
271
220
|
function hasCodexMcpToolApprovalOverrides(servers, serverNames, projectedMcpServers) {
|
|
272
221
|
const modes = new Map(Object.entries(projectedMcpServers ?? {}).map(([name, server]) => [name, server.default_tools_approval_mode]));
|
|
@@ -283,44 +232,25 @@ function withMcpElicitationsApprovalPolicy(policy) {
|
|
|
283
232
|
...policy.granular,
|
|
284
233
|
mcp_elicitations: true
|
|
285
234
|
} };
|
|
286
|
-
|
|
287
|
-
mcp_elicitations: true,
|
|
288
|
-
rules: false,
|
|
289
|
-
sandbox_approval: false,
|
|
290
|
-
request_permissions: false,
|
|
291
|
-
skill_approval: false
|
|
292
|
-
} };
|
|
235
|
+
const prompting = policy !== "never";
|
|
293
236
|
return { granular: {
|
|
294
237
|
mcp_elicitations: true,
|
|
295
|
-
rules:
|
|
296
|
-
sandbox_approval:
|
|
297
|
-
request_permissions:
|
|
298
|
-
skill_approval:
|
|
238
|
+
rules: prompting,
|
|
239
|
+
sandbox_approval: prompting,
|
|
240
|
+
request_permissions: prompting,
|
|
241
|
+
skill_approval: prompting
|
|
299
242
|
} };
|
|
300
243
|
}
|
|
301
244
|
function resolveTransport(value) {
|
|
302
245
|
return value === "websocket" || value === "unix" ? value : "stdio";
|
|
303
246
|
}
|
|
304
|
-
function normalizeRemoteWorkspaceRoot(value) {
|
|
305
|
-
return readNonEmptyString(value);
|
|
306
|
-
}
|
|
307
247
|
function inferCodexAppServerConnectionClass(params) {
|
|
308
248
|
if (params.transport !== "websocket") return "local-loopback";
|
|
309
249
|
return params.url && isLoopbackWebSocketUrl(params.url) ? "local-loopback" : "remote";
|
|
310
250
|
}
|
|
311
|
-
function assertCodexAppServerConnectionClassConfig(params) {
|
|
312
|
-
if (params.connectionClass === "remote" && !hasIdentityBearingWebSocketAuth({
|
|
313
|
-
authToken: params.authToken,
|
|
314
|
-
headers: params.headers
|
|
315
|
-
})) throw new Error("remote Codex app-server WebSocket URLs require appServer.authToken or an Authorization header");
|
|
316
|
-
}
|
|
317
251
|
/** Applies the canonical remote-auth boundary to any Codex AppServer transport. */
|
|
318
252
|
function assertCodexAppServerConnectionSecurity(params) {
|
|
319
|
-
|
|
320
|
-
connectionClass: inferCodexAppServerConnectionClass(params),
|
|
321
|
-
authToken: params.authToken,
|
|
322
|
-
headers: params.headers
|
|
323
|
-
});
|
|
253
|
+
if (inferCodexAppServerConnectionClass(params) === "remote" && !hasIdentityBearingWebSocketAuth(params)) throw new Error("remote Codex app-server WebSocket URLs require appServer.authToken or an Authorization header");
|
|
324
254
|
}
|
|
325
255
|
function isLoopbackWebSocketUrl(value) {
|
|
326
256
|
let parsed;
|
|
@@ -345,22 +275,13 @@ function resolveDefaultCodexAppServerPolicy(params) {
|
|
|
345
275
|
dangerFullAccessAllowed: true
|
|
346
276
|
};
|
|
347
277
|
const content = readCodexRequirementsToml(params);
|
|
348
|
-
if (content === void 0) {
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
dangerFullAccessAllowed: true,
|
|
356
|
-
approvalPolicy: selectGuardianApprovalPolicy(void 0, params.execModeRequiringPromptingApprovals),
|
|
357
|
-
approvalsReviewer: params.forceUserReviewer ? selectUserApprovalsReviewer(void 0, params.execModeRequiringUserReviewer) : selectGuardianApprovalsReviewer(void 0, params.execModeRequiringPromptingApprovals === "auto" ? "auto" : void 0),
|
|
358
|
-
sandbox: selectGuardianSandbox(void 0)
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
const allowedSandboxModes = parseAllowedSandboxModesFromCodexRequirements(content, readNonEmptyString(params.hostName) ?? hostname());
|
|
362
|
-
const allowedApprovalPolicies = parseAllowedApprovalPoliciesFromCodexRequirements(content);
|
|
363
|
-
const allowedApprovalsReviewers = parseAllowedApprovalsReviewersFromCodexRequirements(content);
|
|
278
|
+
if (content === void 0 && !params.forceGuardian) return {
|
|
279
|
+
mode: "yolo",
|
|
280
|
+
dangerFullAccessAllowed: true
|
|
281
|
+
};
|
|
282
|
+
const allowedSandboxModes = content === void 0 ? void 0 : parseAllowedSandboxModesFromCodexRequirements(content, readNonEmptyString(params.hostName) ?? hostname());
|
|
283
|
+
const allowedApprovalPolicies = content === void 0 ? void 0 : parseAllowedApprovalPoliciesFromCodexRequirements(content);
|
|
284
|
+
const allowedApprovalsReviewers = content === void 0 ? void 0 : parseAllowedApprovalsReviewersFromCodexRequirements(content);
|
|
364
285
|
const yoloSandboxAllowed = allowedSandboxModes === void 0 || allowedSandboxModes.has("danger-full-access");
|
|
365
286
|
const yoloApprovalAllowed = allowedApprovalPolicies === void 0 || allowedApprovalPolicies.has("never") && !allowedApprovalPolicies.has("untrusted");
|
|
366
287
|
const yoloReviewerAllowed = allowedApprovalsReviewers === void 0 || allowedApprovalsReviewers.has("user");
|
|
@@ -377,4 +298,4 @@ function resolveDefaultCodexAppServerPolicy(params) {
|
|
|
377
298
|
};
|
|
378
299
|
}
|
|
379
300
|
//#endregion
|
|
380
|
-
export {
|
|
301
|
+
export { resolveSandbox as C, selectGuardianSandbox as E, resolveEffectiveOpenClawExecModeForCodexAppServer as S, selectForcedPromptingSandbox as T, selectUserApprovalsReviewer as _, resolveDefaultCodexAppServerPolicy as a, resolveApprovalsReviewer as b, shouldAutoApproveCodexAppServerApprovals as c, parseAllowedApprovalPoliciesFromCodexRequirements as d, parseAllowedApprovalsReviewersFromCodexRequirements as f, selectGuardianApprovalsReviewer as g, selectGuardianApprovalPolicy as h, resolveCodexAppServerNetworkProxy as i, withMcpElicitationsApprovalPolicy as l, readCodexRequirementsToml as m, hasCodexMcpToolApprovalOverrides as n, resolvePolicyMode as o, parseAllowedSandboxModesFromCodexRequirements as p, inferCodexAppServerConnectionClass as r, resolveTransport as s, assertCodexAppServerConnectionSecurity as t, stringifyCodexPolicy as u, assertCodexAppServerAllowedForOpenClawExecMode as v, selectForcedDangerFullAccessSandbox as w, resolveCodexPolicyModeForOpenClawExecMode as x, resolveApprovalPolicy as y };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { asOptionalRecord as readRecord, normalizeOptionalString as readNonEmptyString
|
|
1
|
+
import { asOptionalRecord as readRecord, normalizeOptionalString as readNonEmptyString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
2
2
|
import { createHmac, randomBytes } from "node:crypto";
|
|
3
|
-
import { resolvePositiveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
|
|
4
3
|
import { splitCommandArgs } from "openclaw/plugin-sdk/process-runtime";
|
|
5
4
|
import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
6
5
|
//#region extensions/codex/src/app-server/config-contracts.shared.ts
|
|
@@ -22,22 +21,13 @@ function normalizeCodexServiceTier(value) {
|
|
|
22
21
|
function isCodexFastServiceTier(value) {
|
|
23
22
|
return normalizeCodexServiceTier(value) === "priority";
|
|
24
23
|
}
|
|
25
|
-
function normalizePositiveNumber(value, fallback) {
|
|
26
|
-
return resolvePositiveTimerTimeoutMs(value, fallback);
|
|
27
|
-
}
|
|
28
24
|
function normalizeHeaders(value) {
|
|
29
25
|
if (!value || typeof value !== "object" || Array.isArray(value)) return {};
|
|
30
|
-
return Object.fromEntries(Object.entries(value).map(([key, child]) => [key.trim(),
|
|
26
|
+
return Object.fromEntries(Object.entries(value).map(([key, child]) => [key.trim(), normalizeResolvedSecretInputString({
|
|
31
27
|
value: child,
|
|
32
28
|
path: `plugins.entries.codex.config.appServer.headers.${key}`
|
|
33
29
|
})]).filter((entry) => Boolean(entry[0] && entry[1])));
|
|
34
30
|
}
|
|
35
|
-
function normalizeCodexAppServerSecretInput(params) {
|
|
36
|
-
return normalizeResolvedSecretInputString(params);
|
|
37
|
-
}
|
|
38
|
-
function readBooleanEnv(value) {
|
|
39
|
-
return parseBooleanValue(value);
|
|
40
|
-
}
|
|
41
31
|
function readExecSecurity(value) {
|
|
42
32
|
return value === "deny" || value === "allowlist" || value === "full" ? value : void 0;
|
|
43
33
|
}
|
|
@@ -64,4 +54,4 @@ function getStartOptionsKeySecret() {
|
|
|
64
54
|
return globalState[START_OPTIONS_KEY_SECRET_SYMBOL];
|
|
65
55
|
}
|
|
66
56
|
//#endregion
|
|
67
|
-
export {
|
|
57
|
+
export { readExecAsk as a, readNumberEnv as c, CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN as d, normalizeHeaders as i, readRecord as l, isCodexFastServiceTier as n, readExecSecurity as o, normalizeCodexServiceTier as r, readNonEmptyString as s, hashSecretForKey as t, resolveArgs as u };
|