@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,17 +1,80 @@
|
|
|
1
|
-
import { i as
|
|
2
|
-
import {
|
|
3
|
-
import "./config-
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
1
|
+
import { i as isJsonObject } from "./protocol-CANUwXJ3.mjs";
|
|
2
|
+
import { a as resolveCodexPrivateLauncher, i as readCodexAppServerConfigOptions } from "./launch-args-DbFCehO7.mjs";
|
|
3
|
+
import { d as readCodexEffectiveConfig } from "./config-options-CzyWLTJt.mjs";
|
|
4
|
+
import "./config-DKhXquav.mjs";
|
|
5
|
+
import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-C0NbLms1.mjs";
|
|
6
|
+
import { u as isCodexAppServerStartSelectionChangedError } from "./shared-client-DqyTMYug.mjs";
|
|
7
|
+
import { S as assertCodexTurnStartResponse, T as readCodexErrorNotification, k as createCodexElicitationResponse, x as assertCodexThreadStartResponse } from "./client-N0JpgSzF.mjs";
|
|
8
|
+
import { o as closeCodexStartupClientBestEffort, s as interruptCodexTurnAndWaitBestEffort, t as CODEX_APP_SERVER_INTERRUPT_TIMEOUT_MS } from "./attempt-client-cleanup-DOP-cW5j.mjs";
|
|
9
|
+
import { t as CodexEphemeralTurn } from "./ephemeral-turn-CDsPJOa2.mjs";
|
|
10
|
+
import { i as readModelListResult } from "./models-DHXZtVVk.mjs";
|
|
11
|
+
import { R as attestCodexRestrictedToolSurfaceMcpServersDisabled, St as mergeCodexThreadConfigs, l as readCodexInheritedMcpServerNames, n as buildCodexRingZeroThreadConfigPatch, r as buildCodexRuntimeThreadConfig, t as assertCodexManagedRequirementsDoNotOverrideToolPolicy } from "./thread-requests-B_bRnMGN.mjs";
|
|
12
|
+
import { S as resolveCodexAppServerReasoningEffort } from "./thread-lifecycle-DPflntEJ.mjs";
|
|
13
|
+
import { a as resolveCodexPromptError } from "./usage-limit-error-QXerDo3i.mjs";
|
|
11
14
|
import { resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
|
|
15
|
+
import { parse } from "smol-toml";
|
|
12
16
|
import path from "node:path";
|
|
13
17
|
import fs from "node:fs/promises";
|
|
18
|
+
import { canonicalPathFromExistingAncestor, isPathInside } from "openclaw/plugin-sdk/file-access-runtime";
|
|
14
19
|
import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "openclaw/plugin-sdk/temp-path";
|
|
20
|
+
//#region extensions/codex/src/app-server/bounded-hook-policy.ts
|
|
21
|
+
function assertNoHookDeclarations(config) {
|
|
22
|
+
if (config.hooks === void 0) return;
|
|
23
|
+
if (!isJsonObject(config.hooks) || Object.entries(config.hooks).some(([event, value]) => event === "state" ? !isJsonObject(value) : !Array.isArray(value) || value.length > 0)) throw new Error("Codex private completion received unmanaged hook declarations");
|
|
24
|
+
}
|
|
25
|
+
async function assertPrivateLayerPath(value, root) {
|
|
26
|
+
if (typeof value !== "string" || !path.isAbsolute(value) || !isPathInside(root, await canonicalPathFromExistingAncestor(value))) throw new Error("Codex private completion inherited an external user or project config layer");
|
|
27
|
+
}
|
|
28
|
+
/** Proves hook discovery is confined to managed policy and this completion's private roots. */
|
|
29
|
+
async function assertCodexPrivateHookIsolation(client, workspace, signal) {
|
|
30
|
+
signal?.throwIfAborted();
|
|
31
|
+
const [codexHome, cwd] = await Promise.all([fs.realpath(workspace.codexHome), fs.realpath(workspace.cwd)]);
|
|
32
|
+
const response = await readCodexEffectiveConfig(client, cwd, { signal });
|
|
33
|
+
const features = response.config.features;
|
|
34
|
+
if (!isJsonObject(features) || typeof features.hooks !== "boolean" || features.plugins !== false || !Array.isArray(response.config.project_root_markers) || response.config.project_root_markers.length !== 0) throw new Error("Codex private completion could not verify isolated hook discovery settings");
|
|
35
|
+
if (!Array.isArray(response.layers)) throw new Error("Codex private completion config/read omitted config layers");
|
|
36
|
+
let privateUserLayer = false;
|
|
37
|
+
for (const layer of response.layers) {
|
|
38
|
+
if (!isJsonObject(layer) || !isJsonObject(layer.name) || !isJsonObject(layer.config)) throw new Error("Codex private completion config/read returned invalid config layers");
|
|
39
|
+
switch (layer.name.type) {
|
|
40
|
+
case "user":
|
|
41
|
+
await assertPrivateLayerPath(layer.name.file, codexHome);
|
|
42
|
+
privateUserLayer = true;
|
|
43
|
+
break;
|
|
44
|
+
case "project":
|
|
45
|
+
await assertPrivateLayerPath(layer.name.dotCodexFolder, cwd);
|
|
46
|
+
break;
|
|
47
|
+
case "packagedDefaults":
|
|
48
|
+
case "sessionFlags":
|
|
49
|
+
assertNoHookDeclarations(layer.config);
|
|
50
|
+
break;
|
|
51
|
+
case "system":
|
|
52
|
+
case "mdm":
|
|
53
|
+
case "enterpriseManaged": break;
|
|
54
|
+
default: throw new Error("Codex private completion received an unsupported config layer");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!privateUserLayer) throw new Error("Codex private completion could not verify its private Codex home");
|
|
58
|
+
signal?.throwIfAborted();
|
|
59
|
+
if (!features.hooks) {
|
|
60
|
+
const requirementsResponse = await client.request("configRequirements/read", {}, { signal });
|
|
61
|
+
if (!isJsonObject(requirementsResponse) || !isJsonObject(requirementsResponse.requirements) || !isJsonObject(requirementsResponse.requirements.featureRequirements) || requirementsResponse.requirements.featureRequirements.hooks !== false) throw new Error("Codex private completion cannot disable hooks without a managed requirement");
|
|
62
|
+
return { activeManagedHooks: false };
|
|
63
|
+
}
|
|
64
|
+
const inventory = await client.request("hooks/list", { cwds: [cwd] }, { signal });
|
|
65
|
+
if (!isJsonObject(inventory) || !Array.isArray(inventory.data) || inventory.data.length !== 1 || inventory.nextCursor !== void 0 && inventory.nextCursor !== null) throw new Error("Codex private completion received an incomplete hook inventory");
|
|
66
|
+
const entry = inventory.data[0];
|
|
67
|
+
if (!isJsonObject(entry) || entry.cwd !== cwd || !Array.isArray(entry.hooks) || !Array.isArray(entry.errors) || entry.errors.length !== 0 || !Array.isArray(entry.warnings) || entry.warnings.length !== 0) throw new Error("Codex private completion could not verify its hook inventory");
|
|
68
|
+
let activeManagedHooks = false;
|
|
69
|
+
for (const hook of entry.hooks) {
|
|
70
|
+
if (!isJsonObject(hook) || typeof hook.key !== "string" || !hook.key.trim() || typeof hook.enabled !== "boolean" || typeof hook.isManaged !== "boolean") throw new Error("Codex private completion received invalid hook metadata");
|
|
71
|
+
if (hook.enabled && !hook.isManaged) throw new Error("Codex private completion cannot run unmanaged hooks");
|
|
72
|
+
activeManagedHooks ||= hook.enabled && hook.isManaged;
|
|
73
|
+
}
|
|
74
|
+
signal?.throwIfAborted();
|
|
75
|
+
return { activeManagedHooks };
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
15
78
|
//#region extensions/codex/src/app-server/bounded-turn.ts
|
|
16
79
|
const CODEX_APP_SERVER_ARGS_ENV_KEY = "OPENCLAW_CODEX_APP_SERVER_ARGS";
|
|
17
80
|
const CODEX_BOUNDED_THREAD_CONFIG = {
|
|
@@ -26,6 +89,7 @@ const CODEX_BOUNDED_THREAD_CONFIG = {
|
|
|
26
89
|
};
|
|
27
90
|
const CODEX_PRIVATE_BOUNDED_THREAD_CONFIG = {
|
|
28
91
|
"features.hooks": false,
|
|
92
|
+
project_root_markers: [],
|
|
29
93
|
notify: []
|
|
30
94
|
};
|
|
31
95
|
const CODEX_SETTLED_FINALIZER_THREAD_CONFIG = {
|
|
@@ -68,7 +132,7 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
|
|
|
68
132
|
if (timeoutMs <= 0) throw timeoutError;
|
|
69
133
|
params.assertCurrent?.();
|
|
70
134
|
const agentDir = params.agentDir?.trim() || void 0;
|
|
71
|
-
const startOptions = workspace.codexHome ? buildPrivateCodexAppServerStartOptions(appServer.start, workspace.codexHome) : appServer.start;
|
|
135
|
+
const startOptions = workspace.codexHome ? buildPrivateCodexAppServerStartOptions(appServer.start, workspace.codexHome, workspace.cwd, params.requireNoExternalCapabilities === true) : appServer.start;
|
|
72
136
|
const ownsClient = !params.options.clientFactory;
|
|
73
137
|
const clientOptions = {
|
|
74
138
|
startOptions,
|
|
@@ -80,7 +144,7 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
|
|
|
80
144
|
assertCurrent: params.assertCurrent,
|
|
81
145
|
...params.signal ? { abandonSignal: params.signal } : {}
|
|
82
146
|
};
|
|
83
|
-
const client = params.options.clientFactory ? await params.options.clientFactory(clientOptions) : await import("./shared-client-
|
|
147
|
+
const client = params.options.clientFactory ? await params.options.clientFactory(clientOptions) : await import("./shared-client-DqyTMYug.mjs").then((n) => n.v).then(({ createIsolatedCodexAppServerClient }) => createIsolatedCodexAppServerClient({
|
|
84
148
|
...clientOptions,
|
|
85
149
|
authProfileStore: params.authProfileStore
|
|
86
150
|
}));
|
|
@@ -107,7 +171,6 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
|
|
|
107
171
|
if (remainingRunMs <= 0) abortRun(timeoutError);
|
|
108
172
|
const timeout = setTimeout(() => abortRun(timeoutError), Math.max(1, remainingRunMs));
|
|
109
173
|
timeout.unref?.();
|
|
110
|
-
let retrySelection = false;
|
|
111
174
|
const requestOptions = {
|
|
112
175
|
timeoutMs,
|
|
113
176
|
signal: abortController.signal,
|
|
@@ -122,11 +185,23 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
|
|
|
122
185
|
...requestOptions
|
|
123
186
|
});
|
|
124
187
|
const inheritedMcpServerNames = params.requireNoExternalCapabilities ? await readCodexInheritedMcpServerNames(client, workspace.cwd, abortController.signal) : [];
|
|
125
|
-
|
|
126
|
-
|
|
188
|
+
let enableManagedHooks = false;
|
|
189
|
+
if (params.requireNoExternalCapabilities) {
|
|
190
|
+
let privateManagedHooksPresent = false;
|
|
191
|
+
if (workspace.codexHome) privateManagedHooksPresent = (await assertCodexPrivateHookIsolation(client, {
|
|
192
|
+
codexHome: workspace.codexHome,
|
|
193
|
+
cwd: workspace.cwd
|
|
194
|
+
}, abortController.signal)).activeManagedHooks;
|
|
195
|
+
({enableManagedHooks} = await assertCodexManagedRequirementsDoNotOverrideToolPolicy(client, {
|
|
196
|
+
restrictedToolSurface: true,
|
|
197
|
+
allowConfiguredManagedHooks: workspace.codexHome !== void 0,
|
|
198
|
+
privateManagedHooksPresent
|
|
199
|
+
}, abortController.signal));
|
|
200
|
+
}
|
|
201
|
+
const threadConfig = buildCodexRuntimeThreadConfig(resolveBoundedThreadConfig(params, workspace, inheritedMcpServerNames, enableManagedHooks), { nativeCodeModeEnabled: false });
|
|
127
202
|
params.assertCurrent?.();
|
|
128
203
|
const thread = assertCodexThreadStartResponse(await client.request("thread/start", {
|
|
129
|
-
model: modelSelection.
|
|
204
|
+
model: modelSelection.model,
|
|
130
205
|
...params.modelProvider ? { modelProvider: params.modelProvider } : {},
|
|
131
206
|
cwd: workspace.cwd,
|
|
132
207
|
approvalPolicy: "on-request",
|
|
@@ -157,7 +232,11 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
|
|
|
157
232
|
threadId: thread.thread.id,
|
|
158
233
|
input: params.input,
|
|
159
234
|
approvalPolicy: "on-request",
|
|
160
|
-
effort: "low"
|
|
235
|
+
effort: params.thinkLevel === void 0 ? "low" : resolveCodexAppServerReasoningEffort({
|
|
236
|
+
thinkLevel: params.thinkLevel,
|
|
237
|
+
modelId: modelSelection.model,
|
|
238
|
+
supportedReasoningEfforts: modelSelection.supportedReasoningEfforts
|
|
239
|
+
})
|
|
161
240
|
}, requestOptions));
|
|
162
241
|
activeTurnId = turn.turn.id;
|
|
163
242
|
if (abortController.signal.aborted) requestInterrupt();
|
|
@@ -171,17 +250,20 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
|
|
|
171
250
|
throw failure instanceof Error ? failure : new Error(failure ?? `codex app-server ${params.taskLabel} turn failed`);
|
|
172
251
|
}
|
|
173
252
|
if (result.turn?.status !== "completed") throw new Error(`codex app-server ${params.taskLabel} turn ended with status ${result.turn?.status ?? "unknown"}`);
|
|
174
|
-
|
|
253
|
+
const lastHookPrompt = enableManagedHooks ? result.items.findLastIndex((item) => item.type === "hookPrompt") : -1;
|
|
254
|
+
const text = lastHookPrompt < 0 ? result.text : result.items.slice(lastHookPrompt + 1).filter((item) => item.type === "agentMessage").map((item) => item.text?.trim()).filter(Boolean).join("\n\n");
|
|
255
|
+
if (!text && !params.allowEmptyText) throw new Error(`Codex app-server ${params.taskLabel} turn returned no text.`);
|
|
175
256
|
params.assertCurrent?.();
|
|
176
257
|
return {
|
|
177
|
-
text
|
|
258
|
+
text,
|
|
178
259
|
items: result.items,
|
|
179
260
|
usage: result.usage,
|
|
180
|
-
model: modelSelection.
|
|
261
|
+
model: modelSelection.id,
|
|
181
262
|
nativeSelection: {
|
|
182
263
|
model: thread.model,
|
|
183
264
|
modelProvider: thread.modelProvider
|
|
184
|
-
}
|
|
265
|
+
},
|
|
266
|
+
managedHooksEnabled: enableManagedHooks
|
|
185
267
|
};
|
|
186
268
|
} finally {
|
|
187
269
|
await interruptPromise;
|
|
@@ -189,28 +271,32 @@ async function runBoundedCodexAppServerTurnInWorkspace(params, appServer, worksp
|
|
|
189
271
|
}
|
|
190
272
|
} catch (error) {
|
|
191
273
|
if (abortController.signal.aborted) throw resolveCodexBoundedTurnAbortError(abortController.signal, params.taskLabel, timeoutError);
|
|
192
|
-
if (ownsClient
|
|
193
|
-
else throw error;
|
|
274
|
+
if (!ownsClient || !isCodexAppServerStartSelectionChangedError(error) || selectionAttempt !== 0) throw error;
|
|
194
275
|
} finally {
|
|
195
276
|
clearTimeout(timeout);
|
|
196
277
|
params.signal?.removeEventListener("abort", abortFromCaller);
|
|
197
278
|
await interruptPromise;
|
|
198
279
|
if (ownsClient) await closeCodexStartupClientBestEffort(client);
|
|
199
280
|
}
|
|
200
|
-
|
|
281
|
+
return await runBoundedCodexAppServerTurnInWorkspace(params, appServer, workspace, selectionAttempt + 1, {
|
|
201
282
|
deadline,
|
|
202
283
|
timeoutMs: totalTimeoutMs
|
|
203
284
|
});
|
|
204
|
-
throw new Error("Codex bounded turn selection retry exited unexpectedly");
|
|
205
285
|
}
|
|
206
|
-
function resolveBoundedThreadConfig(params, workspace, inheritedMcpServerNames) {
|
|
286
|
+
function resolveBoundedThreadConfig(params, workspace, inheritedMcpServerNames, enableManagedHooks) {
|
|
207
287
|
const boundedConfig = mergeCodexThreadConfigs(CODEX_BOUNDED_THREAD_CONFIG, params.threadConfig) ?? CODEX_BOUNDED_THREAD_CONFIG;
|
|
208
288
|
const privateConfig = workspace.codexHome ? mergeCodexThreadConfigs(boundedConfig, CODEX_PRIVATE_BOUNDED_THREAD_CONFIG) ?? boundedConfig : boundedConfig;
|
|
209
289
|
if (!params.requireNoExternalCapabilities) return privateConfig;
|
|
210
|
-
return mergeCodexThreadConfigs(privateConfig, CODEX_SETTLED_FINALIZER_THREAD_CONFIG, buildCodexRingZeroThreadConfigPatch({ toolsAllow: ["openclaw"] }, true, inheritedMcpServerNames)) ?? privateConfig;
|
|
290
|
+
return mergeCodexThreadConfigs(privateConfig, CODEX_SETTLED_FINALIZER_THREAD_CONFIG, buildCodexRingZeroThreadConfigPatch({ toolsAllow: ["openclaw"] }, true, inheritedMcpServerNames), enableManagedHooks ? { "features.hooks": true } : void 0) ?? privateConfig;
|
|
211
291
|
}
|
|
212
|
-
function buildPrivateCodexAppServerStartOptions(start, codexHome) {
|
|
213
|
-
const
|
|
292
|
+
function buildPrivateCodexAppServerStartOptions(start, codexHome, cwd, inspectManagedHooks) {
|
|
293
|
+
const launchCwd = start.cwd ?? process.cwd();
|
|
294
|
+
const { launcherArgs, nativeArgs } = resolveCodexPrivateLauncher({
|
|
295
|
+
command: start.command,
|
|
296
|
+
args: start.args,
|
|
297
|
+
cwd: launchCwd
|
|
298
|
+
});
|
|
299
|
+
const providerArgs = readCodexAppServerConfigOptions(nativeArgs).flatMap(({ name, value }) => (name === "-c" || name === "--config") && value && /^\s*(?:openai_base_url|model_catalog_json)\s*=/u.test(value) ? ["-c", resolvePrivateProviderOverride(value, launchCwd)] : []);
|
|
214
300
|
const privateEnv = Object.fromEntries(Object.entries(start.env ?? {}).filter(([name]) => name.trim().toUpperCase() !== CODEX_APP_SERVER_ARGS_ENV_KEY));
|
|
215
301
|
const clearEnv = (start.clearEnv ?? []).filter((name) => {
|
|
216
302
|
const normalized = name.trim().toUpperCase();
|
|
@@ -218,10 +304,21 @@ function buildPrivateCodexAppServerStartOptions(start, codexHome) {
|
|
|
218
304
|
});
|
|
219
305
|
return {
|
|
220
306
|
...start,
|
|
307
|
+
command: !path.isAbsolute(start.command) && /[\\/]/u.test(start.command) ? path.resolve(launchCwd, start.command) : start.command,
|
|
221
308
|
homeScope: "agent",
|
|
309
|
+
cwd,
|
|
222
310
|
args: [
|
|
311
|
+
...launcherArgs,
|
|
223
312
|
"app-server",
|
|
224
313
|
...providerArgs,
|
|
314
|
+
"-c",
|
|
315
|
+
"project_root_markers=[]",
|
|
316
|
+
...inspectManagedHooks ? [
|
|
317
|
+
"-c",
|
|
318
|
+
"features.hooks=true",
|
|
319
|
+
"-c",
|
|
320
|
+
"features.plugins=false"
|
|
321
|
+
] : [],
|
|
225
322
|
"--listen",
|
|
226
323
|
"stdio://"
|
|
227
324
|
],
|
|
@@ -232,6 +329,18 @@ function buildPrivateCodexAppServerStartOptions(start, codexHome) {
|
|
|
232
329
|
clearEnv: [...clearEnv, CODEX_APP_SERVER_ARGS_ENV_KEY]
|
|
233
330
|
};
|
|
234
331
|
}
|
|
332
|
+
function resolvePrivateProviderOverride(override, launchCwd) {
|
|
333
|
+
const separator = override.indexOf("=");
|
|
334
|
+
if (override.slice(0, separator).trim() !== "model_catalog_json") return override;
|
|
335
|
+
const rawPath = override.slice(separator + 1).trim();
|
|
336
|
+
let catalogPath;
|
|
337
|
+
try {
|
|
338
|
+
catalogPath = parse(`path = ${rawPath}`).path;
|
|
339
|
+
} catch {
|
|
340
|
+
catalogPath = rawPath;
|
|
341
|
+
}
|
|
342
|
+
return typeof catalogPath === "string" && catalogPath && !path.isAbsolute(catalogPath) ? `model_catalog_json=${JSON.stringify(path.resolve(launchCwd, catalogPath))}` : override;
|
|
343
|
+
}
|
|
235
344
|
function createCodexBoundedApprovalHandler(taskLabel) {
|
|
236
345
|
return (request) => {
|
|
237
346
|
if (request.method === "item/commandExecution/requestApproval" || request.method === "item/fileChange/requestApproval") return {
|
|
@@ -264,20 +373,14 @@ async function resolveCodexBoundedTurnModel(params) {
|
|
|
264
373
|
const supported = listed.filter((entry) => params.requiredModalities.every((modality) => entry.inputModalities.includes(modality)));
|
|
265
374
|
const selected = supported.find((entry) => entry.isDefault) ?? supported[0];
|
|
266
375
|
if (!selected) throw new Error(`Codex app-server has no model supporting ${params.requiredModalities.join(" and ")} input.`);
|
|
267
|
-
return
|
|
268
|
-
catalogId: selected.id,
|
|
269
|
-
runtimeModelId: selected.model
|
|
270
|
-
};
|
|
376
|
+
return selected;
|
|
271
377
|
}
|
|
272
378
|
const model = params.selection.id;
|
|
273
379
|
const match = listed.find((entry) => entry.model === model || entry.id === model);
|
|
274
380
|
if (!match) throw new Error(`Codex app-server model not found: ${model}`);
|
|
275
381
|
if (params.requiredModalities.includes("image") && !match.inputModalities.includes("image")) throw new Error(`Codex app-server model does not support images: ${model}`);
|
|
276
382
|
if (params.requiredModalities.includes("text") && !match.inputModalities.includes("text")) throw new Error(`Codex app-server model does not support text: ${model}`);
|
|
277
|
-
return
|
|
278
|
-
catalogId: match.id,
|
|
279
|
-
runtimeModelId: match.model
|
|
280
|
-
};
|
|
383
|
+
return match;
|
|
281
384
|
}
|
|
282
385
|
function resolveCodexBoundedTurnAbortError(signal, taskLabel, timeoutError) {
|
|
283
386
|
return signal.reason === timeoutError ? timeoutError : /* @__PURE__ */ new Error(`codex app-server ${taskLabel} turn aborted`);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { d as readCodexPluginConfig } from "./config-parsing-b088LyhT.mjs";
|
|
2
|
+
import { n as isCodexAppServerProxyLaunch } from "./launch-args-DbFCehO7.mjs";
|
|
3
|
+
import { i as resolveCodexAppServerHomeScope } from "./config-options-CzyWLTJt.mjs";
|
|
4
|
+
import "./config-DKhXquav.mjs";
|
|
5
|
+
import { n as resolveCodexAppServerRuntimeOptions } from "./config-runtime-C0NbLms1.mjs";
|
|
6
|
+
//#region extensions/codex/src/app-server/bounded-turn-isolation.ts
|
|
7
|
+
function resolveCodexBoundedTurnIsolation(options) {
|
|
8
|
+
const pluginConfig = readCodexPluginConfig(options.pluginConfig);
|
|
9
|
+
const homeScope = resolveCodexAppServerHomeScope({ appServer: pluginConfig.appServer });
|
|
10
|
+
const { start } = resolveCodexAppServerRuntimeOptions({ pluginConfig: options.pluginConfig });
|
|
11
|
+
return start.transport === "stdio" && (homeScope === "agent" || options.requireIsolatedAuth === true) && !isCodexAppServerProxyLaunch(start.args) ? "private-stdio" : "configured-transport";
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { resolveCodexBoundedTurnIsolation as t };
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as CodexAppServerRpcError } from "./rpc-error-BlD2vuzn.mjs";
|
|
2
2
|
//#region extensions/codex/src/app-server/capabilities.ts
|
|
3
|
-
/**
|
|
4
|
-
* Capability helpers for optional Codex app-server control-plane methods.
|
|
5
|
-
*/
|
|
6
|
-
/** Known app-server methods used by OpenClaw control surfaces. */
|
|
7
3
|
const CODEX_CONTROL_METHODS = {
|
|
8
4
|
account: "account/read",
|
|
9
5
|
installedApps: "app/installed",
|
|
@@ -31,13 +27,9 @@ const CODEX_CONTROL_METHODS = {
|
|
|
31
27
|
setThreadGoal: "thread/goal/set",
|
|
32
28
|
clearThreadGoal: "thread/goal/clear"
|
|
33
29
|
};
|
|
34
|
-
/** Formats unsupported control calls differently from ordinary RPC failures. */
|
|
35
30
|
function describeControlFailure(error) {
|
|
36
|
-
if (
|
|
31
|
+
if (error instanceof CodexAppServerRpcError && error.code === -32601) return "unsupported by this Codex app-server";
|
|
37
32
|
return error instanceof Error ? error.message : String(error);
|
|
38
33
|
}
|
|
39
|
-
function isUnsupportedControlError(error) {
|
|
40
|
-
return error instanceof CodexAppServerRpcError && error.code === -32601;
|
|
41
|
-
}
|
|
42
34
|
//#endregion
|
|
43
35
|
export { describeControlFailure as n, CODEX_CONTROL_METHODS as t };
|