@openclaw/codex 2026.9.5 → 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-C2MOIvfq.mjs → account-usage-runtime-DFhbh1zz.mjs} +6 -6
- package/dist/.setup/{apply-CJ0ZfmBG.mjs → apply-D3GcSoSa.mjs} +35 -55
- package/dist/.setup/{attempt-client-cleanup-BpYKdTA0.mjs → attempt-client-cleanup-DOP-cW5j.mjs} +179 -73
- 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-QirmgiCo.mjs → auth-cache-key-Dbvq-QgB.mjs} +41 -111
- package/dist/.setup/{auth-profile-WqZtZfXN.mjs → auth-profile-B0okYl2D.mjs} +1 -2
- package/dist/.setup/auth-profile-health-oHizqgye.mjs +53 -0
- package/dist/.setup/auth-profile-recovery-BREezV0L.mjs +14 -0
- package/dist/.setup/auth-start-options-BPIPeEX8.mjs +44 -0
- package/dist/.setup/{binding-connection-Bm38niE8.mjs → binding-connection-DTtN1KrX.mjs} +2 -2
- package/dist/.setup/{binding-connection.runtime-CnRMC0ta.mjs → binding-connection.runtime-6TpgD1M6.mjs} +5 -5
- package/dist/.setup/{bounded-turn-BtlZcivC.mjs → bounded-turn-CbjoN2OW.mjs} +140 -37
- package/dist/.setup/bounded-turn-isolation-B8K_ylqk.mjs +14 -0
- package/dist/.setup/{build-state-Xx9ybZqa.mjs → build-state-Da1_z0kd.mjs} +1 -1
- package/dist/.setup/{capabilities-_vXcZGSx.mjs → capabilities-B3WEZl4e.mjs} +2 -10
- package/dist/.setup/{client-vXs2929Q.mjs → client-N0JpgSzF.mjs} +635 -872
- package/dist/.setup/client-catalog-response-5HHLdcde.mjs +285 -0
- package/dist/.setup/{command-dispatch-naHIZwwF.mjs → command-dispatch-BeAoaovI.mjs} +9 -8
- package/dist/.setup/{command-formatters-CGEkdawF.mjs → command-formatters-R3ckE3Co.mjs} +36 -64
- package/dist/.setup/{command-handlers-BtAJEW1X.mjs → command-handlers-ylTMS00z.mjs} +301 -488
- package/dist/.setup/{command-rpc-DHFpn4le.mjs → command-rpc-CGJGUQ6Y.mjs} +40 -28
- package/dist/.setup/compact-C2WamavS.mjs +776 -0
- package/dist/.setup/{config-CedDWjM-.mjs → config-DKhXquav.mjs} +26 -28
- package/dist/.setup/{config-options-BsanJ8QG.mjs → config-options-CzyWLTJt.mjs} +68 -65
- package/dist/.setup/{config-parsing-CcB9iPoq.mjs → config-parsing-b088LyhT.mjs} +57 -60
- package/dist/.setup/{config-runtime-CeAhl_h4.mjs → config-runtime-C0NbLms1.mjs} +2 -2
- package/dist/.setup/{config-security-BRQ2mgW9.mjs → config-security-CE-FcGw9.mjs} +51 -215
- 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-DhzrpTM6.mjs → conversation-binding-3Min8qvP.mjs} +71 -105
- package/dist/.setup/{conversation-binding-data-CrcyZk6O.mjs → conversation-binding-data-C746z5Pn.mjs} +8 -12
- package/dist/.setup/{conversation-control-DN53ns41.mjs → conversation-control-CEP8X5JC.mjs} +30 -69
- 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-D16lOp67.mjs → dynamic-tools-DzlsLUuS.mjs} +3136 -3167
- package/dist/.setup/{effective-mcp-catalog-K6kLCN8X.mjs → effective-mcp-catalog-CxUtC-xG.mjs} +8 -17
- package/dist/.setup/{ephemeral-turn-R1gA8Sn6.mjs → ephemeral-turn-CDsPJOa2.mjs} +9 -6
- package/dist/.setup/event-projector-assistant-message-CigreO4K.mjs +69 -0
- package/dist/.setup/{event-projector-usage-C7Ntzs-f.mjs → event-projector-usage-03R0I2dM.mjs} +4 -26
- package/dist/.setup/event-projector-values-DJSz8BTk.mjs +106 -0
- package/dist/.setup/incognito-session-DWYapfwf.mjs +2 -0
- package/dist/.setup/{inference-context-fulhZuz8.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-DhcXOgUE.mjs +561 -0
- package/dist/.setup/{isolated-completion-B6srt48J.mjs → isolated-completion-Dm3PzxJk.mjs} +15 -11
- package/dist/.setup/launch-args-DbFCehO7.mjs +196 -0
- package/dist/.setup/{managed-binary-DP6Rib3P.mjs → managed-binary-kiWRhNRE.mjs} +16 -9
- package/dist/.setup/{model-catalog-DkvUuBey.mjs → model-catalog-PAuZgJC6.mjs} +14 -14
- package/dist/.setup/model-runtime-BdqzOMkU.mjs +11 -0
- package/dist/.setup/{models-BDFgm_G-.mjs → models-DHXZtVVk.mjs} +9 -18
- package/dist/.setup/{native-auth-BLZGqFjw.mjs → native-auth-CuG53tu4.mjs} +5 -5
- package/dist/.setup/{native-execution-policy-YBMHSzC4.mjs → native-execution-policy-BxZJy5mP.mjs} +6 -31
- package/dist/.setup/{native-subagent-monitor-B1hxzIOy.mjs → native-subagent-monitor-Dpsmf2wz.mjs} +4422 -3808
- 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-Cl8b2ZF3.mjs → node-cli-sessions-HC4W6FLI.mjs} +99 -111
- package/dist/.setup/node-exec-server.runtime-BgBfWQqo.mjs +244 -0
- package/dist/.setup/{plan-xD7WKYTM.mjs → plan-Y-QIvrKB.mjs} +118 -163
- package/dist/.setup/{plugin-activation-r8nq5Jzp.mjs → plugin-activation-cNHRfaxU.mjs} +10 -47
- package/dist/.setup/{plugin-app-cache-key-BOxKP7db.mjs → plugin-app-cache-key-BL9B5H0L.mjs} +9 -42
- package/dist/.setup/{plugin-inventory-DUle8DLz.mjs → plugin-inventory-Cky2XJUw.mjs} +32 -23
- package/dist/.setup/{plugin-marketplace-discovery-P-Vndfqq.mjs → plugin-marketplace-discovery-D_dV9FXa.mjs} +22 -25
- package/dist/.setup/{plugin-metadata-cache-DsS5buNa.mjs → plugin-metadata-cache-DsjsL1dr.mjs} +328 -318
- package/dist/.setup/protocol-CANUwXJ3.mjs +17 -0
- package/dist/.setup/provider-DH8NSzGt.mjs +51 -0
- package/dist/.setup/{provider-capabilities-B8J4Dy-O.mjs → provider-capabilities-CAxoF-X1.mjs} +35 -12
- package/dist/.setup/{rate-limits-DOEGYRNs.mjs → rate-limits-B7-X2TgG.mjs} +123 -166
- package/dist/.setup/{request-BioXJLYa.mjs → request-BHZ1nz8d.mjs} +25 -16
- package/dist/.setup/responses-oauth-twnuTaAa.mjs +93 -0
- package/dist/.setup/rpc-error-BlD2vuzn.mjs +31 -0
- package/dist/.setup/{run-attempt-rlA07pUv.mjs → run-attempt-D8RZUOzY.mjs} +2046 -1454
- package/dist/.setup/{run-attempt-lifecycle-B7JbY4-F.mjs → run-attempt-lifecycle-C-6O3Exn.mjs} +10 -24
- package/dist/.setup/{runtime-artifact-Dy38Z5iU.mjs → runtime-artifact-DDQ-HGXf.mjs} +43 -47
- 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-TH3xA0zj.mjs → session-binding-record-Oe9L-CNY.mjs} +73 -132
- package/dist/.setup/{session-binding-sidecars-CKYEcfNn.mjs → session-binding-sidecars-jo6H8dFr.mjs} +242 -60
- package/dist/.setup/{session-catalog-fUdWDx-U.mjs → session-catalog-4sCdv5qx.mjs} +598 -452
- package/dist/.setup/{session-catalog-adoption-CR_whkEW.mjs → session-catalog-adoption-BU_pHWG7.mjs} +59 -26
- package/dist/.setup/{session-catalog-archive-CwZaPacf.mjs → session-catalog-archive-spHfihri.mjs} +7 -7
- 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-B141u15s.mjs → session-catalog-index-CZvDzC6z.mjs} +286 -182
- package/dist/.setup/{session-catalog-index-order-Cc5BzlQr.mjs → session-catalog-index-order-BcQpHks3.mjs} +2 -2
- package/dist/.setup/{session-catalog-index-state-BAuDztHN.mjs → session-catalog-index-state-TeO7EyO-.mjs} +6 -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-BVRsYOSh.mjs → session-catalog-node-adoption-DgXvSGu0.mjs} +30 -35
- package/dist/.setup/{session-catalog-node-continue-Dowv8osw.mjs → session-catalog-node-continue-DjKXHBbi.mjs} +25 -18
- package/dist/.setup/session-catalog-node-lookup-CtAXI5W5.mjs +56 -0
- package/dist/.setup/{session-catalog-native-projection-ChV3cCtm.mjs → session-catalog-parsing-CPGaPYr-.mjs} +14 -180
- package/dist/.setup/{session-catalog-projection-C1Bj9Jl-.mjs → session-catalog-projection-Cr5qP5Dj.mjs} +15 -5
- package/dist/.setup/session-catalog-provenance-DoAvktcj.mjs +95 -0
- package/dist/.setup/{session-cli-DIj-IE-E.mjs → session-cli-Cn_nCqfq.mjs} +11 -24
- package/dist/.setup/{session-history-C--SrLI8.mjs → session-history-D83lJWHG.mjs} +16 -23
- package/dist/.setup/{session-history-import-JHXT5Xfi.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-CpNj7H_P.mjs → session-history.worker-MnPKncqP.mjs} +14 -23
- package/dist/.setup/session-initialization-6aveB9qb.mjs +22 -0
- package/dist/.setup/{session-permission-policy-DhurXY0l.mjs → session-permission-policy-Ci_fVX6y.mjs} +4 -8
- package/dist/.setup/{session-retirement-CU87AOg9.mjs → session-retirement-qMTxkNx2.mjs} +31 -12
- package/dist/.setup/{settled-turn-context-fmwouT5I.mjs → settled-turn-context-D4yj4rxf.mjs} +1 -1
- package/dist/.setup/{settled-turn-finalizer-CiY2bLFK.mjs → settled-turn-finalizer-BsvEabkw.mjs} +17 -13
- package/dist/.setup/{shared-client-BpTtuLQ5.mjs → shared-client-DqyTMYug.mjs} +826 -485
- package/dist/.setup/shared-client-lifecycle-DJIgqgMw.mjs +153 -0
- package/dist/.setup/{side-question-DSCZyoBD.mjs → side-question-C4kCmQy1.mjs} +206 -334
- package/dist/.setup/{source-Bjp4UQij.mjs → source-CS_7GFJZ.mjs} +82 -139
- package/dist/.setup/spawn-error-CL3n6MAa.mjs +57 -0
- package/dist/.setup/{thread-archive-guard-jmecf6OJ.mjs → thread-archive-guard-C9frICzX.mjs} +10 -3
- package/dist/.setup/thread-lifecycle-DPflntEJ.mjs +2362 -0
- package/dist/.setup/{incognito-session-uhrBF6wJ.mjs → thread-ownership-queue-Dp24d7-F.mjs} +1 -2
- package/dist/.setup/{thread-ownership-skomxnIt.mjs → thread-ownership-roNP0l1c.mjs} +47 -10
- package/dist/.setup/thread-policy-DTd-DtkX.mjs +109 -0
- package/dist/.setup/thread-requests-B_bRnMGN.mjs +2102 -0
- package/dist/.setup/{thread-resume-BkNpj9Pz.mjs → thread-resume-CdDaoc7T.mjs} +6 -6
- package/dist/.setup/timeout-CXOfNoaX.mjs +46 -0
- package/dist/.setup/transcript-history-projection-DRSifI-1.mjs +201 -0
- package/dist/.setup/{transcript-mirror-attestation-CzM-94NC.mjs → transcript-mirror-attestation-YSegaktH.mjs} +3 -4
- package/dist/.setup/{transcript-mirror-D4qp_leP.mjs → transcript-mirror-kxmCYsuF.mjs} +224 -206
- package/dist/.setup/{transport-stdio-Cmx94Oiy.mjs → transport-stdio-Bdegpn2V.mjs} +138 -75
- 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-D3UKxgVD.mjs → upstream-session-fork-CBeVjBpT.mjs} +48 -40
- package/dist/.setup/{usage-BOgBEKso.mjs → usage-BMzNxeR_.mjs} +5 -4
- package/dist/.setup/{usage-limit-error-C0ow7DOc.mjs → usage-limit-error-QXerDo3i.mjs} +5 -20
- package/dist/.setup/{web-search-provider.runtime-CTGuJt6i.mjs → web-search-provider.runtime-P77OUeoo.mjs} +10 -20
- package/dist/api.js +25 -16
- 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 +50 -8
- package/dist/harness.js +344 -1
- package/dist/index.js +345 -346
- 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 +16 -33
- package/dist/session-history.worker.js +1 -1
- package/openclaw.plugin.json +14 -2
- package/package.json +11 -7
- package/dist/.setup/attempt-context-VXVwTCfS.mjs +0 -636
- package/dist/.setup/compact-C3i3qlzj.mjs +0 -687
- package/dist/.setup/event-projector-assistant-message-DNUR1s0A.mjs +0 -105
- package/dist/.setup/event-projector-items-DyTQ_XqL.mjs +0 -200
- package/dist/.setup/harness-rxaaoN-o.mjs +0 -349
- package/dist/.setup/history-rejection-B4nOXNXF.mjs +0 -13
- package/dist/.setup/image-payload-sanitizer-tupAr-2o.mjs +0 -79
- package/dist/.setup/inference-proxy-CC15HuSi.mjs +0 -311
- package/dist/.setup/launch-args-DnMak49W.mjs +0 -111
- package/dist/.setup/local-runtime-attribution-B_2mnqhb.mjs +0 -19
- package/dist/.setup/native-subagent-history-YXaL6dMd.mjs +0 -135
- package/dist/.setup/native-subagent-task-ids-DsuOonKv.mjs +0 -411
- package/dist/.setup/node-exec-server.runtime-BaViBKNz.mjs +0 -226
- package/dist/.setup/plugin-approval-roundtrip-CjfzafAZ.mjs +0 -122
- package/dist/.setup/provider-fFh_-VR3.mjs +0 -50
- package/dist/.setup/rolldown-runtime-8H4AJuhK.mjs +0 -14
- package/dist/.setup/sandbox-guard-BBP-RbTf.mjs +0 -166
- package/dist/.setup/session-binding-_0W_fHRr.mjs +0 -721
- package/dist/.setup/session-catalog-events-jMcYfQyd.mjs +0 -250
- package/dist/.setup/session-history-read-B3ZfSUbF.mjs +0 -50
- package/dist/.setup/session-initialization-DH1z6fXn.mjs +0 -75
- package/dist/.setup/thread-history-page-BTx-4xsg.mjs +0 -83
- package/dist/.setup/thread-lifecycle-Cik28qWn.mjs +0 -4904
- package/dist/.setup/thread-policy-Cjs4B8xf.mjs +0 -54
- package/dist/.setup/timeout-DZF05XrR.mjs +0 -63
- package/dist/.setup/transcript-history-projection-DHNBDhCU.mjs +0 -243
- package/dist/.setup/version-CoqzXPgK.mjs +0 -12
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./config-security-
|
|
3
|
-
import "./config-parsing-
|
|
4
|
-
import
|
|
5
|
-
import "./config-
|
|
1
|
+
import { a as readExecAsk, l as readRecord, o as readExecSecurity } from "./config-utils-D0CXecki.mjs";
|
|
2
|
+
import "./config-security-CE-FcGw9.mjs";
|
|
3
|
+
import "./config-parsing-b088LyhT.mjs";
|
|
4
|
+
import "./auth-start-options-BPIPeEX8.mjs";
|
|
5
|
+
import { c as canUseCodexModelBackedApprovalsReviewerForModel$1 } from "./config-options-CzyWLTJt.mjs";
|
|
6
|
+
import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-C0NbLms1.mjs";
|
|
7
|
+
import { t as __exportAll } from "./session-binding-sidecars-jo6H8dFr.mjs";
|
|
6
8
|
import { resolveAgentConfig } from "openclaw/plugin-sdk/agent-scope-runtime";
|
|
7
9
|
import { execPolicy } from "openclaw/plugin-sdk/agent-harness-runtime";
|
|
8
10
|
import { resolveExecApprovalsFromFile } from "openclaw/plugin-sdk/exec-approvals-runtime";
|
|
@@ -10,7 +12,10 @@ import { resolveProviderIdForAuth } from "openclaw/plugin-sdk/provider-auth-alia
|
|
|
10
12
|
//#region extensions/codex/src/app-server/config-exec-approvals.ts
|
|
11
13
|
function resolveOpenClawExecPolicyFromConfig(params) {
|
|
12
14
|
const globalExec = readRecord(params.config?.tools?.exec);
|
|
13
|
-
const globalPolicy = applyOpenClawExecPolicyLayer(
|
|
15
|
+
const globalPolicy = applyOpenClawExecPolicyLayer({
|
|
16
|
+
...resolveOpenClawExecPolicyForMode("full"),
|
|
17
|
+
touched: false
|
|
18
|
+
}, globalExec);
|
|
14
19
|
const agentId = params.agentId?.trim();
|
|
15
20
|
return applyOpenClawExecPolicyLayer(globalPolicy, agentId ? readRecord(resolveAgentConfig(params.config ?? {}, agentId)?.tools?.exec) : void 0);
|
|
16
21
|
}
|
|
@@ -23,17 +28,14 @@ function resolveOpenClawExecPolicyForCodexAppServer(params) {
|
|
|
23
28
|
config: params.config,
|
|
24
29
|
agentId: params.agentId
|
|
25
30
|
}), params.execOverrides);
|
|
26
|
-
return applyOpenClawExecApprovalFloors(overridePolicy,
|
|
27
|
-
|
|
31
|
+
return applyOpenClawExecApprovalFloors(overridePolicy, params.approvals ? resolveExecApprovalsFromFile({
|
|
32
|
+
file: params.approvals,
|
|
28
33
|
agentId: params.agentId,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
...resolveOpenClawExecPolicyForMode("full"),
|
|
35
|
-
touched: false
|
|
36
|
-
};
|
|
34
|
+
overrides: {
|
|
35
|
+
security: overridePolicy.security,
|
|
36
|
+
ask: overridePolicy.ask
|
|
37
|
+
}
|
|
38
|
+
}).agent : void 0);
|
|
37
39
|
}
|
|
38
40
|
function applyOpenClawExecPolicyLayer(base, exec) {
|
|
39
41
|
if (!exec) return base;
|
|
@@ -57,17 +59,6 @@ function applyOpenClawExecPolicyLayer(base, exec) {
|
|
|
57
59
|
touched: true
|
|
58
60
|
};
|
|
59
61
|
}
|
|
60
|
-
function resolveOpenClawExecApprovalFloorsForCodexAppServer(params) {
|
|
61
|
-
if (!params.approvals) return;
|
|
62
|
-
return resolveExecApprovalsFromFile({
|
|
63
|
-
file: params.approvals,
|
|
64
|
-
agentId: params.agentId,
|
|
65
|
-
overrides: {
|
|
66
|
-
security: params.policy.security,
|
|
67
|
-
ask: params.policy.ask
|
|
68
|
-
}
|
|
69
|
-
}).agent;
|
|
70
|
-
}
|
|
71
62
|
function applyOpenClawExecApprovalFloors(base, approvalFloors) {
|
|
72
63
|
if (!approvalFloors) return base;
|
|
73
64
|
const nextSecurity = approvalFloors.security ? execPolicy.minSecurity(base.security, approvalFloors.security) : base.security;
|
|
@@ -104,4 +95,11 @@ function canUseCodexModelBackedApprovalsReviewerForModel(params) {
|
|
|
104
95
|
return canUseCodexModelBackedApprovalsReviewerForModel$1(params, resolveProviderIdForAuth);
|
|
105
96
|
}
|
|
106
97
|
//#endregion
|
|
107
|
-
|
|
98
|
+
//#region extensions/codex/src/app-server/config.ts
|
|
99
|
+
var config_exports = /* @__PURE__ */ __exportAll({
|
|
100
|
+
CODEX_PLUGINS_MARKETPLACE_NAME: () => CODEX_PLUGINS_MARKETPLACE_NAME,
|
|
101
|
+
CODEX_PLUGINS_WORKSPACE_MARKETPLACE_NAME: () => CODEX_PLUGINS_WORKSPACE_MARKETPLACE_NAME,
|
|
102
|
+
resolveCodexAppServerRuntimeOptions: () => resolveCodexAppServerRuntimeOptions
|
|
103
|
+
});
|
|
104
|
+
//#endregion
|
|
105
|
+
export { canUseCodexModelBackedApprovalsReviewerForModel as n, resolveOpenClawExecPolicyForCodexAppServer as r, config_exports as t };
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { a as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { c as readNumberEnv, i as normalizeHeaders, l as readRecord, r as normalizeCodexServiceTier, s as readNonEmptyString, t as hashSecretForKey, u as resolveArgs } from "./config-utils-D0CXecki.mjs";
|
|
2
|
+
import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
|
|
3
|
+
import { C as resolveSandbox, S as resolveEffectiveOpenClawExecModeForCodexAppServer, T as selectForcedPromptingSandbox, a as resolveDefaultCodexAppServerPolicy, b as resolveApprovalsReviewer, d as parseAllowedApprovalPoliciesFromCodexRequirements, i as resolveCodexAppServerNetworkProxy, m as readCodexRequirementsToml, o as resolvePolicyMode, r as inferCodexAppServerConnectionClass, s as resolveTransport, t as assertCodexAppServerConnectionSecurity, v as assertCodexAppServerAllowedForOpenClawExecMode, w as selectForcedDangerFullAccessSandbox, x as resolveCodexPolicyModeForOpenClawExecMode, y as resolveApprovalPolicy } from "./config-security-CE-FcGw9.mjs";
|
|
4
|
+
import { a as DEFAULT_CODEX_COMPUTER_USE_PLUGIN_NAME, d as readCodexPluginConfig, n as DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS, o as DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS, r as DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS, s as assertCodexAppServerCommandHasNoInlineArgs } from "./config-parsing-b088LyhT.mjs";
|
|
5
|
+
import { i as readCodexAppServerConfigOptions } from "./launch-args-DbFCehO7.mjs";
|
|
6
|
+
import { r as resolveCodexAppServerUserHomeDir, t as resolveCodexAppServerHomeDir } from "./auth-start-options-BPIPeEX8.mjs";
|
|
7
|
+
import { normalizeTrimmedStringList, parseBooleanValue } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
8
|
+
import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
9
|
+
import { resolvePositiveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
|
|
6
10
|
import { parse } from "smol-toml";
|
|
7
11
|
import { readFileSync } from "node:fs";
|
|
8
12
|
import path from "node:path";
|
|
@@ -28,18 +32,21 @@ async function readCodexEffectiveConfig(client, cwd, options) {
|
|
|
28
32
|
//#endregion
|
|
29
33
|
//#region extensions/codex/src/app-server/config-reviewer-policy.ts
|
|
30
34
|
const CODEX_CONFIG_TOML_FILENAME = "config.toml";
|
|
35
|
+
const CODEX_CLI_WHITESPACE = /^\p{White_Space}+|\p{White_Space}+$/gu;
|
|
31
36
|
/** Cloud/system config can redirect reviews after local home/profile checks have passed. */
|
|
32
37
|
async function assertCodexModelBackedReviewerEffectiveConfig(params) {
|
|
33
38
|
if (params.approvalsReviewer !== "auto_review" && params.approvalsReviewer !== "guardian_subagent") return;
|
|
34
39
|
const response = await readCodexEffectiveConfig(params.client, params.cwd, { signal: params.signal });
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
40
|
+
if (!isTrustedCodexReviewerConfig(response.config)) throw new Error("Codex model-backed approval reviewer requires the running server to use a trusted OpenAI endpoint");
|
|
41
|
+
return response;
|
|
42
|
+
}
|
|
43
|
+
function isTrustedCodexReviewerConfig(config) {
|
|
44
|
+
const modelProvider = config.model_provider;
|
|
45
|
+
const providers = config.model_providers;
|
|
38
46
|
const providerRecords = providers == null ? void 0 : readRecord(providers);
|
|
39
47
|
const provider = providerRecords?.openai;
|
|
40
48
|
const openAIProvider = provider == null ? void 0 : readRecord(provider);
|
|
41
|
-
|
|
42
|
-
return response;
|
|
49
|
+
return (modelProvider == null || modelProvider === "openai") && (providers == null || providerRecords !== void 0) && (provider == null || openAIProvider !== void 0) && isTrustedOptionalReviewerEndpoint(config.openai_base_url, isNativeOpenAIBaseUrl) && isTrustedOptionalReviewerEndpoint(config.chatgpt_base_url, isNativeChatGPTBaseUrl) && isTrustedOptionalReviewerEndpoint(openAIProvider?.base_url, isNativeOpenAIBaseUrl);
|
|
43
50
|
}
|
|
44
51
|
function isTrustedOptionalReviewerEndpoint(value, isTrusted) {
|
|
45
52
|
return value == null || typeof value === "string" && isTrusted(value);
|
|
@@ -51,12 +58,9 @@ function canUseCodexModelBackedApprovalsReviewerForModel(params, resolveAuthProv
|
|
|
51
58
|
return (inferredProvider ?? explicitProvider) === "openai" && isTrustedCodexModelBackedOpenAIProvider(params, resolveAuthProviderId);
|
|
52
59
|
}
|
|
53
60
|
function isTrustedCodexModelBackedOpenAIProvider(params, resolveAuthProviderId) {
|
|
54
|
-
if (!
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const openAIProviders = readConfiguredOpenAIProvidersForModelBackedReview(params.config, resolveAuthProviderId);
|
|
58
|
-
if (openAIProviders.length === 0) return true;
|
|
59
|
-
return openAIProviders.every((openAIProvider) => configuredOpenAIProviderIsTrustedForModelBackedReview(openAIProvider, params.model));
|
|
61
|
+
if (![params.env?.OPENAI_BASE_URL, params.env?.OPENAI_API_BASE].every(isNativeOpenAIBaseUrl)) return false;
|
|
62
|
+
if (!nativeCodexConfigIsTrustedForModelBackedReview(params)) return false;
|
|
63
|
+
return readConfiguredOpenAIProvidersForModelBackedReview(params.config, resolveAuthProviderId).every((openAIProvider) => configuredOpenAIProviderIsTrustedForModelBackedReview(openAIProvider, params.model));
|
|
60
64
|
}
|
|
61
65
|
function resolveCodexModelBackedReviewerPolicyContext(params) {
|
|
62
66
|
const provider = params.provider?.trim();
|
|
@@ -67,46 +71,23 @@ function resolveCodexModelBackedReviewerPolicyContext(params) {
|
|
|
67
71
|
const bindingModelProvider = params.bindingModelProvider?.trim();
|
|
68
72
|
const currentModel = params.model?.trim();
|
|
69
73
|
const bindingModel = params.bindingModel?.trim();
|
|
70
|
-
|
|
71
|
-
modelProvider: normalizeCodexModelBackedReviewerPolicyProvider(bindingModelProvider),
|
|
72
|
-
model: params.model ?? params.bindingModel
|
|
73
|
-
};
|
|
74
|
-
const currentModelProvider = inferProviderFromModelRef(params.model);
|
|
75
|
-
if (currentModelProvider) return {
|
|
76
|
-
modelProvider: normalizeCodexModelBackedReviewerPolicyProvider(currentModelProvider),
|
|
77
|
-
model: params.model
|
|
78
|
-
};
|
|
79
|
-
if (bindingModelProvider) return {
|
|
80
|
-
modelProvider: normalizeCodexModelBackedReviewerPolicyProvider(bindingModelProvider),
|
|
81
|
-
model: params.model ?? params.bindingModel
|
|
82
|
-
};
|
|
74
|
+
const modelProvider = bindingModelProvider && currentModel && bindingModel && currentModel === bindingModel ? bindingModelProvider : (inferProviderFromModelRef(params.model) ?? bindingModelProvider) || (params.nativeAuthProfile === true ? "openai" : void 0);
|
|
83
75
|
return {
|
|
84
|
-
modelProvider:
|
|
76
|
+
modelProvider: modelProvider ? normalizeCodexModelBackedReviewerPolicyProvider(modelProvider) : void 0,
|
|
85
77
|
model: params.model ?? params.bindingModel
|
|
86
78
|
};
|
|
87
79
|
}
|
|
88
|
-
function
|
|
80
|
+
function nativeCodexConfigIsTrustedForModelBackedReview(params) {
|
|
89
81
|
const configToml = readCodexAppServerConfigToml(params);
|
|
90
82
|
if (configToml === false) return false;
|
|
91
|
-
const configTomls = configToml === void 0 ? [] : [configToml];
|
|
92
83
|
const nativeOverrides = readNativeCodexReviewerConfigOverrides(params);
|
|
93
84
|
if (nativeOverrides === false) return false;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const topLevelContent = stripTomlLineComments(content).slice(0, firstTomlTableOffset(content));
|
|
99
|
-
const modelProviderOpenAISection = parseTomlTableSection(content, "model_providers.openai");
|
|
100
|
-
const modelProvider = parseTomlStringValue(topLevelContent, "model_provider");
|
|
101
|
-
if (modelProvider === false || modelProvider && modelProvider !== "openai") return false;
|
|
102
|
-
openAI.push(parseTomlStringValue(topLevelContent, "openai_base_url"), parseTomlStringValue(topLevelContent, "model_providers.openai.base_url"), parseInlineOpenAIModelProviderBaseUrl(topLevelContent), modelProviderOpenAISection ? parseTomlStringValue(modelProviderOpenAISection, "base_url") : void 0);
|
|
103
|
-
chatGPT.push(parseTomlStringValue(topLevelContent, "chatgpt_base_url"));
|
|
85
|
+
if (configToml !== void 0) try {
|
|
86
|
+
nativeOverrides.unshift(parse(configToml, { integersAsBigInt: true }));
|
|
87
|
+
} catch {
|
|
88
|
+
return false;
|
|
104
89
|
}
|
|
105
|
-
|
|
106
|
-
return {
|
|
107
|
-
openAI: openAI.filter((entry) => typeof entry === "string"),
|
|
108
|
-
chatGPT: chatGPT.filter((entry) => typeof entry === "string")
|
|
109
|
-
};
|
|
90
|
+
return nativeOverrides.every(isTrustedCodexReviewerConfig);
|
|
110
91
|
}
|
|
111
92
|
function readNativeCodexReviewerConfigOverrides(params) {
|
|
112
93
|
if (params.codexArgs?.some((arg) => !arg)) return false;
|
|
@@ -115,20 +96,39 @@ function readNativeCodexReviewerConfigOverrides(params) {
|
|
|
115
96
|
for (const { name, value } of readCodexAppServerConfigOptions(params.codexArgs ?? [])) {
|
|
116
97
|
if (!value) return false;
|
|
117
98
|
if (name === "--profile" || name === "-p") profile = value;
|
|
118
|
-
else
|
|
99
|
+
else {
|
|
100
|
+
const override = parseNativeCodexReviewerConfigOverride(value);
|
|
101
|
+
if (override === false) return false;
|
|
102
|
+
overrides.push(override);
|
|
103
|
+
}
|
|
119
104
|
}
|
|
120
105
|
if (profile) {
|
|
121
106
|
if (path.basename(profile) !== profile || profile === "." || profile === "..") return false;
|
|
122
107
|
const configPath = resolveCodexAppServerConfigPath(params);
|
|
123
108
|
if (!configPath) return false;
|
|
124
109
|
try {
|
|
125
|
-
overrides.unshift(readFileSync(path.join(path.dirname(configPath), `${profile}.config.toml`), "utf8"));
|
|
110
|
+
overrides.unshift(parse(readFileSync(path.join(path.dirname(configPath), `${profile}.config.toml`), "utf8"), { integersAsBigInt: true }));
|
|
126
111
|
} catch (error) {
|
|
127
112
|
if (readErrorCode(error) !== "ENOENT") return false;
|
|
128
113
|
}
|
|
129
114
|
}
|
|
130
115
|
return overrides;
|
|
131
116
|
}
|
|
117
|
+
function parseNativeCodexReviewerConfigOverride(override) {
|
|
118
|
+
const separator = override.indexOf("=");
|
|
119
|
+
if (separator < 0) return false;
|
|
120
|
+
const key = override.slice(0, separator).replace(CODEX_CLI_WHITESPACE, "");
|
|
121
|
+
if (!key) return false;
|
|
122
|
+
const raw = override.slice(separator + 1).replace(CODEX_CLI_WHITESPACE, "");
|
|
123
|
+
let value;
|
|
124
|
+
try {
|
|
125
|
+
value = parse(`_x_ = ${raw}`, { integersAsBigInt: true })["_x_"];
|
|
126
|
+
} catch {
|
|
127
|
+
value = raw.replace(/^["']+|["']+$/g, "");
|
|
128
|
+
}
|
|
129
|
+
for (const segment of key.split(".").toReversed()) value = { [segment]: value };
|
|
130
|
+
return readRecord(value) ?? false;
|
|
131
|
+
}
|
|
132
132
|
function readCodexAppServerConfigToml(params) {
|
|
133
133
|
if (params.codexConfigToml !== void 0) return params.codexConfigToml ?? void 0;
|
|
134
134
|
const configPath = resolveCodexAppServerConfigPath(params);
|
|
@@ -163,6 +163,7 @@ function codexConfigEnablesNativeComputerUse(params) {
|
|
|
163
163
|
return false;
|
|
164
164
|
}
|
|
165
165
|
function resolveCodexAppServerConfigPath(params) {
|
|
166
|
+
if (params.codexHome) return path.join(params.codexHome, CODEX_CONFIG_TOML_FILENAME);
|
|
166
167
|
if (params.homeScope === "user") return path.join(resolveCodexAppServerUserHomeDir(params.env), CODEX_CONFIG_TOML_FILENAME);
|
|
167
168
|
const agentDir = readNonEmptyString(params.agentDir);
|
|
168
169
|
return agentDir ? path.join(resolveCodexAppServerHomeDir(agentDir), CODEX_CONFIG_TOML_FILENAME) : void 0;
|
|
@@ -218,9 +219,6 @@ function isNativeOpenAIBaseUrl(value) {
|
|
|
218
219
|
return false;
|
|
219
220
|
}
|
|
220
221
|
}
|
|
221
|
-
function openAIBaseUrlEnvOverridesAreTrustedForModelBackedReview(env) {
|
|
222
|
-
return [env?.OPENAI_BASE_URL, env?.OPENAI_API_BASE].every(isNativeOpenAIBaseUrl);
|
|
223
|
-
}
|
|
224
222
|
function isNativeChatGPTBaseUrl(value) {
|
|
225
223
|
if (typeof value !== "string" || !value.trim()) return true;
|
|
226
224
|
try {
|
|
@@ -271,7 +269,7 @@ function createCodexAppServerConfig({ resolveProviderIdForAuth }) {
|
|
|
271
269
|
const args = resolveArgs(config.args, env.OPENCLAW_CODEX_APP_SERVER_ARGS);
|
|
272
270
|
const headers = normalizeHeaders(config.headers);
|
|
273
271
|
const clearEnv = normalizeTrimmedStringList(config.clearEnv);
|
|
274
|
-
const authToken =
|
|
272
|
+
const authToken = normalizeResolvedSecretInputString({
|
|
275
273
|
value: config.authToken,
|
|
276
274
|
path: "plugins.entries.codex.config.appServer.authToken"
|
|
277
275
|
});
|
|
@@ -281,7 +279,7 @@ function createCodexAppServerConfig({ resolveProviderIdForAuth }) {
|
|
|
281
279
|
url
|
|
282
280
|
});
|
|
283
281
|
const remoteAppsSubstrate = "preconfigured";
|
|
284
|
-
const remoteWorkspaceRoot =
|
|
282
|
+
const remoteWorkspaceRoot = readNonEmptyString(config.remoteWorkspaceRoot);
|
|
285
283
|
const execMode = resolveEffectiveOpenClawExecModeForCodexAppServer({
|
|
286
284
|
execMode: params.execMode,
|
|
287
285
|
execPolicy: params.execPolicy
|
|
@@ -363,7 +361,7 @@ function createCodexAppServerConfig({ resolveProviderIdForAuth }) {
|
|
|
363
361
|
env
|
|
364
362
|
});
|
|
365
363
|
const managedCommandOrder = params.managedCommandOrder ?? (homeScope === "user" || computerUseConfig.enabled ? "desktop-first" : "package-first");
|
|
366
|
-
const includeManagedCommandOrder = commandSource === "managed" && (managedCommandOrder === "desktop-first" || params.managedCommandOrder
|
|
364
|
+
const includeManagedCommandOrder = commandSource === "managed" && (managedCommandOrder === "desktop-first" || params.managedCommandOrder !== void 0);
|
|
367
365
|
const managedComputerUsePluginNames = [.../* @__PURE__ */ new Set([DEFAULT_CODEX_COMPUTER_USE_PLUGIN_NAME, computerUseConfig.pluginName])];
|
|
368
366
|
return {
|
|
369
367
|
start: {
|
|
@@ -388,12 +386,13 @@ function createCodexAppServerConfig({ resolveProviderIdForAuth }) {
|
|
|
388
386
|
...remoteWorkspaceRoot ? { remoteWorkspaceRoot } : {},
|
|
389
387
|
codeModeOnly: config.codeModeOnly === true,
|
|
390
388
|
loopDetectionPreToolUseRelay: config.loopDetectionPreToolUseRelay !== false,
|
|
391
|
-
requestTimeoutMs:
|
|
389
|
+
requestTimeoutMs: resolvePositiveTimerTimeoutMs(config.requestTimeoutMs, 6e4),
|
|
392
390
|
approvalPolicy: forcedPolicy?.approvalPolicy ?? approvalPolicy,
|
|
393
391
|
approvalPolicySource,
|
|
394
392
|
sandbox: resolvedSandbox,
|
|
395
393
|
approvalsReviewer: forcedPolicy?.approvalsReviewer ?? explicitApprovalsReviewer ?? defaultPolicy?.approvalsReviewer ?? (policyMode === "guardian" ? "auto_review" : "user"),
|
|
396
394
|
...serviceTier ? { serviceTier } : {},
|
|
395
|
+
enableUltrafast: config.enableUltrafast === true,
|
|
397
396
|
...resolveCodexAppServerNetworkProxy(config.networkProxy, resolvedSandbox)
|
|
398
397
|
};
|
|
399
398
|
}
|
|
@@ -435,6 +434,7 @@ function resolveCodexAppServerStartOptionsForAgent(params) {
|
|
|
435
434
|
if (!params.agentDir) throw new Error("Agent-scoped Codex requires an OpenClaw agent directory");
|
|
436
435
|
return codexConfigEnablesNativeComputerUse({
|
|
437
436
|
agentDir: params.agentDir,
|
|
437
|
+
codexHome: startOptions.codexHome,
|
|
438
438
|
codexConfigToml: params.codexConfigToml,
|
|
439
439
|
env: params.env,
|
|
440
440
|
homeScope: "agent",
|
|
@@ -452,17 +452,17 @@ function resolveCodexComputerUseConfig(params = {}) {
|
|
|
452
452
|
const marketplaceName = readNonEmptyString(params.overrides?.marketplaceName) ?? readNonEmptyString(config.marketplaceName) ?? readNonEmptyString(env.OPENCLAW_CODEX_COMPUTER_USE_MARKETPLACE_NAME);
|
|
453
453
|
const configuredPluginName = readNonEmptyString(params.overrides?.pluginName) ?? readNonEmptyString(config.pluginName) ?? readNonEmptyString(env.OPENCLAW_CODEX_COMPUTER_USE_PLUGIN_NAME);
|
|
454
454
|
const configuredMcpServerName = readNonEmptyString(params.overrides?.mcpServerName) ?? readNonEmptyString(config.mcpServerName) ?? readNonEmptyString(env.OPENCLAW_CODEX_COMPUTER_USE_MCP_SERVER_NAME);
|
|
455
|
-
const autoInstall = params.overrides?.autoInstall ?? config.autoInstall ??
|
|
456
|
-
const marketplaceDiscoveryTimeoutMs =
|
|
457
|
-
const liveTestTimeoutMs =
|
|
458
|
-
const toolCallTimeoutMs =
|
|
455
|
+
const autoInstall = params.overrides?.autoInstall ?? config.autoInstall ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE_AUTO_INSTALL) ?? false;
|
|
456
|
+
const marketplaceDiscoveryTimeoutMs = resolvePositiveTimerTimeoutMs(params.overrides?.marketplaceDiscoveryTimeoutMs ?? config.marketplaceDiscoveryTimeoutMs ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS), DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS);
|
|
457
|
+
const liveTestTimeoutMs = resolvePositiveTimerTimeoutMs(params.overrides?.liveTestTimeoutMs ?? config.liveTestTimeoutMs ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS), DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS);
|
|
458
|
+
const toolCallTimeoutMs = resolvePositiveTimerTimeoutMs(params.overrides?.toolCallTimeoutMs ?? config.toolCallTimeoutMs ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS), DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS);
|
|
459
459
|
const healthCheckIntervalMinutes = normalizeComputerUseHealthCheckIntervalMinutes(params.overrides?.healthCheckIntervalMinutes ?? config.healthCheckIntervalMinutes ?? readNumberEnv(env.OPENCLAW_CODEX_COMPUTER_USE_HEALTH_CHECK_INTERVAL_MINUTES));
|
|
460
|
-
const healthCheckEnabled = params.overrides?.healthCheckEnabled ?? config.healthCheckEnabled ??
|
|
460
|
+
const healthCheckEnabled = params.overrides?.healthCheckEnabled ?? config.healthCheckEnabled ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE_HEALTH_CHECK_ENABLED) ?? false;
|
|
461
461
|
const pluginCacheMode = normalizeComputerUsePluginCacheMode(params.overrides?.pluginCacheMode) ?? normalizeComputerUsePluginCacheMode(config.pluginCacheMode) ?? normalizeComputerUsePluginCacheMode(env.OPENCLAW_CODEX_COMPUTER_USE_PLUGIN_CACHE_MODE) ?? "independent";
|
|
462
|
-
const strictReadiness = params.overrides?.strictReadiness ?? config.strictReadiness ??
|
|
463
|
-
const autoRepair = params.overrides?.autoRepair ?? config.autoRepair ??
|
|
462
|
+
const strictReadiness = params.overrides?.strictReadiness ?? config.strictReadiness ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE_STRICT_READINESS) ?? false;
|
|
463
|
+
const autoRepair = params.overrides?.autoRepair ?? config.autoRepair ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE_AUTO_REPAIR) ?? false;
|
|
464
464
|
return {
|
|
465
|
-
enabled: params.overrides?.enabled ?? config.enabled ??
|
|
465
|
+
enabled: params.overrides?.enabled ?? config.enabled ?? parseBooleanValue(env.OPENCLAW_CODEX_COMPUTER_USE) ?? Boolean(autoInstall || marketplaceSource || marketplacePath || marketplaceName || configuredPluginName || configuredMcpServerName),
|
|
466
466
|
autoInstall,
|
|
467
467
|
marketplaceDiscoveryTimeoutMs,
|
|
468
468
|
liveTestTimeoutMs,
|
|
@@ -498,7 +498,10 @@ function codexAppServerStartOptionsKey(options, params = {}) {
|
|
|
498
498
|
url: options.url ?? null,
|
|
499
499
|
authToken: hashSecretForKey(options.authToken, "authToken"),
|
|
500
500
|
headers: Object.entries(options.headers).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, value]) => [key, hashSecretForKey(value, `header:${key}`)]),
|
|
501
|
-
env: Object.entries(
|
|
501
|
+
env: Object.entries({
|
|
502
|
+
...options.env,
|
|
503
|
+
...options.codexHome ? { CODEX_HOME: options.codexHome } : {}
|
|
504
|
+
}).toSorted(([left], [right]) => left.localeCompare(right)).map(([key, value]) => [key, hashSecretForKey(value, `env:${key}`)]),
|
|
502
505
|
clearEnv: [...options.clearEnv ?? []].toSorted(),
|
|
503
506
|
authProfileId: params.authProfileId ?? null,
|
|
504
507
|
authBindingFingerprint: params.authBindingFingerprint ?? null,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN, r as normalizeCodexServiceTier } from "./config-utils-D0CXecki.mjs";
|
|
2
2
|
import { asNullableRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { buildSecretInputSchema } from "openclaw/plugin-sdk/secret-input";
|
|
@@ -24,55 +24,33 @@ const DEFAULT_CODEX_COMPUTER_USE_MARKETPLACE_DISCOVERY_TIMEOUT_MS = 6e4;
|
|
|
24
24
|
const DEFAULT_CODEX_COMPUTER_USE_LIVE_TEST_TIMEOUT_MS = 6e4;
|
|
25
25
|
const DEFAULT_CODEX_COMPUTER_USE_TOOL_CALL_TIMEOUT_MS = 6e4;
|
|
26
26
|
const DEFAULT_CODEX_APP_SERVER_NETWORK_PROXY_PROFILE_PREFIX = "openclaw-network";
|
|
27
|
-
const codexAppServerTransportSchema = z.enum([
|
|
28
|
-
"stdio",
|
|
29
|
-
"websocket",
|
|
30
|
-
"unix"
|
|
31
|
-
]);
|
|
32
|
-
const codexAppServerHomeScopeSchema = z.enum(["agent", "user"]);
|
|
33
27
|
const SecretInputSchema = buildSecretInputSchema();
|
|
34
|
-
const codexAppServerPolicyModeSchema = z.enum(["yolo", "guardian"]);
|
|
35
28
|
const codexAppServerApprovalPolicySchema = z.preprocess((value) => value === "on-failure" ? "on-request" : value, z.enum(["never", "on-request"]));
|
|
36
|
-
const codexAppServerSandboxSchema = z.enum([
|
|
37
|
-
"read-only",
|
|
38
|
-
"workspace-write",
|
|
39
|
-
"danger-full-access"
|
|
40
|
-
]);
|
|
41
|
-
const codexAppServerApprovalsReviewerSchema = z.enum([
|
|
42
|
-
"user",
|
|
43
|
-
"auto_review",
|
|
44
|
-
"guardian_subagent"
|
|
45
|
-
]);
|
|
46
|
-
const codexDynamicToolsLoadingSchema = z.enum(["searchable", "direct"]);
|
|
47
29
|
const codexComputerUseHealthIntervalSchema = z.union([
|
|
48
30
|
z.literal(30),
|
|
49
31
|
z.literal(60),
|
|
50
32
|
z.literal(120),
|
|
51
33
|
z.literal(240)
|
|
52
34
|
]);
|
|
53
|
-
const codexComputerUsePluginCacheModeSchema = z.enum(["shared", "independent"]);
|
|
54
35
|
const codexPluginDestructivePolicySchema = z.union([
|
|
55
36
|
z.boolean(),
|
|
56
37
|
z.literal("auto"),
|
|
57
38
|
z.literal("ask")
|
|
58
39
|
]);
|
|
59
40
|
const codexAppServerServiceTierSchema = z.preprocess((value) => value === null ? null : normalizeCodexServiceTier(value), z.string().trim().min(1).nullable().optional()).optional();
|
|
60
|
-
const codexAppServerCyberFailoverSchema = z.
|
|
41
|
+
const codexAppServerCyberFailoverSchema = z.strictObject({
|
|
61
42
|
mode: z.enum(["auto", "off"]).optional(),
|
|
62
43
|
model: z.string().trim().min(1).optional(),
|
|
63
44
|
cooloffMs: z.number().positive().optional()
|
|
64
|
-
})
|
|
65
|
-
const codexAppServerExperimentalSchema = z.
|
|
66
|
-
const
|
|
67
|
-
const codexAppServerNetworkProxyDomainPermissionSchema = z.enum(["allow", "deny"]);
|
|
68
|
-
const codexAppServerNetworkProxyUnixSocketPermissionSchema = z.enum(["allow", "none"]);
|
|
69
|
-
const codexAppServerNetworkProxySchema = z.object({
|
|
45
|
+
});
|
|
46
|
+
const codexAppServerExperimentalSchema = z.strictObject({ sandboxExecServer: z.boolean().optional() });
|
|
47
|
+
const codexAppServerNetworkProxySchema = z.strictObject({
|
|
70
48
|
enabled: z.boolean().optional(),
|
|
71
49
|
profileName: z.string().trim().min(1).optional(),
|
|
72
50
|
baseProfile: z.enum(["read-only", "workspace"]).optional(),
|
|
73
51
|
mode: z.enum(["limited", "full"]).optional(),
|
|
74
|
-
domains: z.record(z.string(),
|
|
75
|
-
unixSockets: z.record(z.string(),
|
|
52
|
+
domains: z.record(z.string(), z.enum(["allow", "deny"])).optional(),
|
|
53
|
+
unixSockets: z.record(z.string(), z.enum(["allow", "none"])).optional(),
|
|
76
54
|
proxyUrl: z.string().trim().min(1).optional(),
|
|
77
55
|
socksUrl: z.string().trim().min(1).optional(),
|
|
78
56
|
enableSocks5: z.boolean().optional(),
|
|
@@ -81,45 +59,45 @@ const codexAppServerNetworkProxySchema = z.object({
|
|
|
81
59
|
allowLocalBinding: z.boolean().optional(),
|
|
82
60
|
dangerouslyAllowNonLoopbackProxy: z.boolean().optional(),
|
|
83
61
|
dangerouslyAllowAllUnixSockets: z.boolean().optional()
|
|
84
|
-
})
|
|
85
|
-
const codexPluginEntryConfigSchema = z.
|
|
62
|
+
});
|
|
63
|
+
const codexPluginEntryConfigSchema = z.strictObject({
|
|
86
64
|
enabled: z.boolean().optional(),
|
|
87
65
|
marketplaceName: z.string().regex(CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN).optional(),
|
|
88
66
|
pluginName: z.string().trim().min(1).optional(),
|
|
89
67
|
allow_destructive_actions: codexPluginDestructivePolicySchema.optional()
|
|
90
|
-
})
|
|
91
|
-
const codexPluginsConfigSchema = z.
|
|
68
|
+
});
|
|
69
|
+
const codexPluginsConfigSchema = z.strictObject({
|
|
92
70
|
enabled: z.boolean().optional(),
|
|
93
71
|
allow_all_plugins: z.boolean().optional(),
|
|
94
72
|
allow_destructive_actions: codexPluginDestructivePolicySchema.optional(),
|
|
95
73
|
plugins: z.record(z.string(), codexPluginEntryConfigSchema).optional()
|
|
96
|
-
})
|
|
97
|
-
const codexSupervisionEndpointSchema = z.union([z.
|
|
74
|
+
});
|
|
75
|
+
const codexSupervisionEndpointSchema = z.union([z.strictObject({
|
|
98
76
|
id: z.string().optional(),
|
|
99
77
|
label: z.string().optional(),
|
|
100
78
|
transport: z.literal("stdio-proxy").optional(),
|
|
101
79
|
command: z.string().optional(),
|
|
102
80
|
args: z.array(z.string()).optional(),
|
|
103
81
|
cwd: z.string().optional()
|
|
104
|
-
})
|
|
82
|
+
}), z.strictObject({
|
|
105
83
|
id: z.string().optional(),
|
|
106
84
|
label: z.string().optional(),
|
|
107
85
|
transport: z.literal("websocket"),
|
|
108
86
|
url: z.string(),
|
|
109
87
|
authTokenEnv: z.string().optional()
|
|
110
|
-
})
|
|
111
|
-
const codexSupervisionConfigSchema = z.
|
|
88
|
+
})]);
|
|
89
|
+
const codexSupervisionConfigSchema = z.strictObject({
|
|
112
90
|
enabled: z.boolean().optional(),
|
|
113
91
|
endpoints: z.array(codexSupervisionEndpointSchema).optional(),
|
|
114
92
|
allowRawTranscripts: z.boolean().optional(),
|
|
115
93
|
allowWriteControls: z.boolean().optional()
|
|
116
|
-
})
|
|
117
|
-
const codexPluginConfigSchema = z.
|
|
118
|
-
codexDynamicToolsLoading:
|
|
94
|
+
});
|
|
95
|
+
const codexPluginConfigSchema = z.strictObject({
|
|
96
|
+
codexDynamicToolsLoading: z.enum(["searchable", "direct"]).optional(),
|
|
119
97
|
codexDynamicToolsExclude: z.array(z.string()).optional(),
|
|
120
98
|
sessionCatalog: codexSessionCatalogConfigSchema.optional(),
|
|
121
99
|
discovery: codexDiscoveryConfigSchema.optional(),
|
|
122
|
-
computerUse: z.
|
|
100
|
+
computerUse: z.strictObject({
|
|
123
101
|
enabled: z.boolean().optional(),
|
|
124
102
|
autoInstall: z.boolean().optional(),
|
|
125
103
|
marketplaceDiscoveryTimeoutMs: z.number().positive().optional(),
|
|
@@ -127,7 +105,7 @@ const codexPluginConfigSchema = z.object({
|
|
|
127
105
|
toolCallTimeoutMs: z.number().positive().optional(),
|
|
128
106
|
healthCheckEnabled: z.boolean().optional(),
|
|
129
107
|
healthCheckIntervalMinutes: codexComputerUseHealthIntervalSchema.optional(),
|
|
130
|
-
pluginCacheMode:
|
|
108
|
+
pluginCacheMode: z.enum(["shared", "independent"]).optional(),
|
|
131
109
|
strictReadiness: z.boolean().optional(),
|
|
132
110
|
autoRepair: z.boolean().optional(),
|
|
133
111
|
marketplaceSource: z.string().optional(),
|
|
@@ -135,43 +113,65 @@ const codexPluginConfigSchema = z.object({
|
|
|
135
113
|
marketplaceName: z.string().optional(),
|
|
136
114
|
pluginName: z.string().optional(),
|
|
137
115
|
mcpServerName: z.string().optional()
|
|
138
|
-
}).
|
|
116
|
+
}).optional(),
|
|
139
117
|
codexPlugins: z.unknown().optional(),
|
|
140
118
|
supervision: codexSupervisionConfigSchema.optional(),
|
|
141
|
-
appServer: z.
|
|
142
|
-
mode:
|
|
143
|
-
transport:
|
|
144
|
-
|
|
119
|
+
appServer: z.strictObject({
|
|
120
|
+
mode: z.enum(["yolo", "guardian"]).optional(),
|
|
121
|
+
transport: z.enum([
|
|
122
|
+
"stdio",
|
|
123
|
+
"websocket",
|
|
124
|
+
"unix"
|
|
125
|
+
]).optional(),
|
|
126
|
+
homeScope: z.enum(["agent", "user"]).optional(),
|
|
145
127
|
command: z.string().optional(),
|
|
146
128
|
args: z.union([z.array(z.string()), z.string()]).optional(),
|
|
147
129
|
url: z.string().optional(),
|
|
148
130
|
authToken: SecretInputSchema.optional(),
|
|
149
131
|
headers: z.record(z.string(), SecretInputSchema).optional(),
|
|
150
132
|
clearEnv: z.array(z.string()).optional(),
|
|
151
|
-
remoteWorkspaceRoot:
|
|
133
|
+
remoteWorkspaceRoot: z.string().trim().min(1).optional(),
|
|
152
134
|
codeModeOnly: z.boolean().optional(),
|
|
153
135
|
loopDetectionPreToolUseRelay: z.boolean().optional(),
|
|
154
136
|
requestTimeoutMs: z.number().positive().optional(),
|
|
155
137
|
approvalPolicy: codexAppServerApprovalPolicySchema.optional(),
|
|
156
|
-
sandbox:
|
|
157
|
-
|
|
138
|
+
sandbox: z.enum([
|
|
139
|
+
"read-only",
|
|
140
|
+
"workspace-write",
|
|
141
|
+
"danger-full-access"
|
|
142
|
+
]).optional(),
|
|
143
|
+
approvalsReviewer: z.enum([
|
|
144
|
+
"user",
|
|
145
|
+
"auto_review",
|
|
146
|
+
"guardian_subagent"
|
|
147
|
+
]).optional(),
|
|
158
148
|
serviceTier: codexAppServerServiceTierSchema,
|
|
149
|
+
enableUltrafast: z.boolean().optional(),
|
|
159
150
|
cyberFailover: codexAppServerCyberFailoverSchema.optional(),
|
|
160
151
|
networkProxy: codexAppServerNetworkProxySchema.optional(),
|
|
161
152
|
defaultWorkspaceDir: z.string().optional(),
|
|
162
153
|
experimental: codexAppServerExperimentalSchema.optional()
|
|
163
|
-
}).
|
|
164
|
-
})
|
|
154
|
+
}).optional()
|
|
155
|
+
});
|
|
165
156
|
function readCodexPluginConfig(value) {
|
|
166
|
-
|
|
157
|
+
const appServer = asNullableRecord(asNullableRecord(value)?.appServer);
|
|
158
|
+
if (appServer?.approvalPolicy === "untrusted") throw new Error("plugins.entries.codex.config.appServer.approvalPolicy=\"untrusted\" is retired; run \"openclaw doctor --fix\" to migrate it to \"on-request\".");
|
|
167
159
|
const parsed = codexPluginConfigSchema.safeParse(value);
|
|
168
|
-
if (!parsed.success)
|
|
160
|
+
if (!parsed.success) {
|
|
161
|
+
if (asNullableRecord(appServer?.networkProxy)?.enabled === true) {
|
|
162
|
+
const issuePath = parsed.error.issues[0]?.path ?? [];
|
|
163
|
+
const fieldDepth = issuePath[0] === "appServer" && issuePath[1] === "networkProxy" ? 3 : 2;
|
|
164
|
+
const fieldPath = ["plugins.entries.codex.config", ...issuePath.slice(0, fieldDepth)].join(".");
|
|
165
|
+
throw new Error(`Invalid ${fieldPath}; fix this field before starting Codex with network restrictions. Run "openclaw doctor --fix" for supported repairs.`);
|
|
166
|
+
}
|
|
167
|
+
return {};
|
|
168
|
+
}
|
|
169
169
|
const { codexPlugins: rawCodexPlugins, ...config } = parsed.data;
|
|
170
170
|
const plugins = codexPluginsConfigSchema.safeParse(rawCodexPlugins);
|
|
171
171
|
if (!plugins.success) return config;
|
|
172
172
|
return {
|
|
173
173
|
...config,
|
|
174
|
-
|
|
174
|
+
codexPlugins: plugins.data
|
|
175
175
|
};
|
|
176
176
|
}
|
|
177
177
|
function isCodexSandboxExecServerEnabled(pluginConfig, sandbox) {
|
|
@@ -196,7 +196,7 @@ function resolveCodexPluginsPolicy(pluginConfig) {
|
|
|
196
196
|
const enabled = config?.enabled === true;
|
|
197
197
|
const destructivePolicy = resolveCodexPluginDestructivePolicy(config?.allow_destructive_actions ?? true);
|
|
198
198
|
const pluginPolicies = Object.entries(config?.plugins ?? {}).flatMap(([configKey, entry]) => {
|
|
199
|
-
if (!
|
|
199
|
+
if (!entry.marketplaceName || !entry.pluginName) return [];
|
|
200
200
|
const entryDestructivePolicy = resolveCodexPluginDestructivePolicy(entry.allow_destructive_actions ?? config?.allow_destructive_actions ?? true);
|
|
201
201
|
return [{
|
|
202
202
|
configKey,
|
|
@@ -216,9 +216,6 @@ function resolveCodexPluginsPolicy(pluginConfig) {
|
|
|
216
216
|
pluginPolicies
|
|
217
217
|
};
|
|
218
218
|
}
|
|
219
|
-
function isCodexPluginMarketplaceName(value) {
|
|
220
|
-
return typeof value === "string" && CODEX_PLUGIN_MARKETPLACE_NAME_PATTERN.test(value);
|
|
221
|
-
}
|
|
222
219
|
function resolveCodexPluginDestructivePolicy(policy) {
|
|
223
220
|
if (policy === "auto" || policy === "ask") return {
|
|
224
221
|
allowDestructiveActions: true,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { r as createCodexAppServerConfig } from "./config-options-CzyWLTJt.mjs";
|
|
2
|
+
import { t as __exportAll } from "./session-binding-sidecars-jo6H8dFr.mjs";
|
|
3
3
|
import { resolveProviderIdForAuth } from "openclaw/plugin-sdk/provider-auth-aliases";
|
|
4
4
|
//#region extensions/codex/src/app-server/config-runtime.ts
|
|
5
5
|
var config_runtime_exports = /* @__PURE__ */ __exportAll({
|