@openclaw/codex 2026.10.5-beta.4 → 2026.10.10-beta.1
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 +10 -3
- package/dist/.setup/{account-usage-runtime-CoVpNIlD.mjs → account-usage-runtime-DDCDkvtl.mjs} +15 -9
- package/dist/.setup/{app-server-policy-D_zv8J7V.mjs → app-server-policy-Cog6mm2i.mjs} +1 -1
- package/dist/.setup/{apply-BXDMd05l.mjs → apply-BVSXYkTV.mjs} +11 -11
- package/dist/.setup/{attempt-client-cleanup-zNuNTKVr.mjs → attempt-client-cleanup-6OcbMH46.mjs} +14 -8
- package/dist/.setup/attempt-terminal-sZutF0WY.mjs +1 -0
- package/dist/.setup/{attempt-workspace-context-CcwP3DA3.mjs → attempt-workspace-context-GYPLawX6.mjs} +2 -2
- package/dist/.setup/{auth-binding-BaxlhaNx.mjs → auth-binding-830RLAJW.mjs} +2 -2
- package/dist/.setup/{auth-cache-key-f8ODJ_OX.mjs → auth-cache-key-CVcYw8HD.mjs} +92 -80
- package/dist/.setup/{auth-profile-CgHQ8Vot.mjs → auth-profile-auwzSwwy.mjs} +14 -8
- package/dist/.setup/{auth-profile-health-oHizqgye.mjs → auth-profile-health-BVPZU9I8.mjs} +15 -8
- package/dist/.setup/{auth-profile-selection-hr8ocLtz.mjs → auth-profile-selection-Bp5PDk3W.mjs} +24 -7
- package/dist/.setup/{binding-connection-B7HAAZSI.mjs → binding-connection-GTgUj9pi.mjs} +2 -2
- package/dist/.setup/{binding-connection.runtime-DAXn7iFl.mjs → binding-connection.runtime-RcWR3vQu.mjs} +4 -3
- package/dist/.setup/{bounded-turn-isolation-BfDAo-qZ.mjs → bounded-turn-isolation-D8CDrAVX.mjs} +3 -3
- package/dist/.setup/{bounded-turn-DfIJtRlv.mjs → bounded-turn-mN_ekXYW.mjs} +18 -22
- package/dist/.setup/{build-state-Ds14X10-.mjs → build-state-VcujMRqP.mjs} +1 -1
- package/dist/.setup/{capabilities-DbOzOglY.mjs → capabilities-DAS-JX1z.mjs} +1 -1
- package/dist/.setup/{client-D93nbdB8.mjs → client-BS8X7HmG.mjs} +47 -317
- package/dist/.setup/{client-catalog-response-CuVLp4I0.mjs → client-catalog-response-jM38o5w1.mjs} +2 -2
- package/dist/.setup/client-initialize-CjgZcX61.mjs +165 -0
- package/dist/.setup/{command-dispatch-DxdH5a9-.mjs → command-dispatch-DzXbHqCn.mjs} +3 -3
- package/dist/.setup/{command-formatters-xW9KpoSZ.mjs → command-formatters-B_7-QZ1c.mjs} +2 -2
- package/dist/.setup/{command-handlers-fiYvYYq0.mjs → command-handlers-tfb5Uq-O.mjs} +539 -406
- package/dist/.setup/command-rpc-SXqLQukR.mjs +296 -0
- package/dist/.setup/compact-M-JxLcbZ.mjs +823 -0
- package/dist/.setup/{computer-use-DL2v3Kxq.mjs → computer-use-FqQ-Flbl.mjs} +21 -68
- package/dist/.setup/{config-C1YVVLEA.mjs → config-BfrAlTMT.mjs} +3 -3
- package/dist/.setup/{config-options-DDzeNQ8m.mjs → config-options-DMFZkd3X.mjs} +1 -1
- package/dist/.setup/{config-runtime-DWzK-k0n.mjs → config-runtime-BZRizyuG.mjs} +2 -2
- package/dist/.setup/{context-engine-projection-ps-yn_ci.mjs → context-engine-projection-PIeLSnR-.mjs} +16 -30
- package/dist/.setup/{conversation-binding-BieJZRRV.mjs → conversation-binding-C7MZy-Cx.mjs} +228 -116
- package/dist/.setup/{conversation-binding-data-UgLuTSQT.mjs → conversation-binding-data-khgW0n-o.mjs} +4 -2
- package/dist/.setup/{conversation-control-GXM3unE4.mjs → conversation-control-B2EpVZEb.mjs} +53 -23
- package/dist/.setup/{cyber-failover-D4dgNfFf.mjs → cyber-failover-CqEZoQsj.mjs} +1 -1
- package/dist/.setup/{cyber-failover-notice-ljgGGL0s.mjs → cyber-failover-notice-poL3Advd.mjs} +1 -1
- package/dist/.setup/{doctor-start-options-JjTAl-q_.mjs → doctor-start-options-8uIBXIzR.mjs} +8 -5
- package/dist/.setup/{dynamic-tool-build-DcaPmBlE.mjs → dynamic-tool-build-BjFAIG-f.mjs} +208 -218
- package/dist/.setup/{dynamic-tools-CnQFnNKH.mjs → dynamic-tools-XqWsVjcC.mjs} +344 -118
- package/dist/.setup/{effective-mcp-catalog-B5HKFZNK.mjs → effective-mcp-catalog-C3ta5hHc.mjs} +11 -9
- package/dist/.setup/{ephemeral-turn-De3qb8EQ.mjs → ephemeral-turn-1ZF17fUR.mjs} +5 -4
- package/dist/.setup/{event-projector-assistant-message-CLMKN4x-.mjs → event-projector-assistant-message-ChOAY7rW.mjs} +16 -11
- package/dist/.setup/{event-projector-usage-BpKfdoTm.mjs → event-projector-usage-CBY0Hkga.mjs} +2 -2
- package/dist/.setup/{event-projector-values-CLvG1Hil.mjs → event-projector-values-yf4us9Pf.mjs} +1 -1
- package/dist/.setup/experimental-features-uGnVDtp-.mjs +19 -0
- package/dist/.setup/inference-context-mv_dBpAL.mjs +209 -0
- package/dist/.setup/{inference-dispatch-CO6tTs4q.mjs → inference-dispatch-C2zVSnrr.mjs} +2 -2
- package/dist/.setup/{inference-metadata-DCvcG_N_.mjs → inference-metadata-CYFWLHVk.mjs} +3 -1
- package/dist/.setup/{inference-proxy-BDWV0djM.mjs → inference-proxy-yd3hr2dr.mjs} +8 -8
- package/dist/.setup/installed-probe-lVC1X5ve.mjs +185 -0
- package/dist/.setup/{isolated-completion-BPJdvk5F.mjs → isolated-completion-P-r8NRE4.mjs} +7 -7
- package/dist/.setup/managed-binary-DbKvGXKl.mjs +395 -0
- package/dist/.setup/{mcp-app-session-preparation-Dz2GOwyE.mjs → mcp-app-session-preparation-fnsnCovu.mjs} +18 -14
- package/dist/.setup/{model-catalog-ZNwltCKl.mjs → model-catalog-Y_esgRPY.mjs} +28 -17
- package/dist/.setup/{models-BHpbAuz8.mjs → models-BWLEUo2E.mjs} +3 -3
- package/dist/.setup/{native-auth-esN5MdIv.mjs → native-auth-DpZIaY8N.mjs} +7 -4
- package/dist/.setup/native-execution-policy-D09tLP-u.mjs +152 -0
- package/dist/.setup/{native-hook-relay-wq7jrNLk.mjs → native-hook-relay-C7aaLJaP.mjs} +45 -10
- package/dist/.setup/{native-mcp-app-DX3nyTtc.mjs → native-mcp-app-CsWj-v_x.mjs} +5 -5
- package/dist/.setup/{native-skill-isolation-DSBeF-Yy.mjs → native-skill-isolation-CMimsKYy.mjs} +7 -7
- package/dist/.setup/{native-subagent-monitor-DOLEIf9r.mjs → native-subagent-monitor-CFE7b4oC.mjs} +485 -239
- package/dist/.setup/{native-subagent-pending-assignments-DmVhedNs.mjs → native-subagent-pending-assignments-CTinVtjo.mjs} +1 -1
- package/dist/.setup/{native-task-assignments-DimsQ9Qa.mjs → native-task-assignments-YJopbaVO.mjs} +9 -5
- package/dist/.setup/{node-cli-sessions-CzKg2nGq.mjs → node-cli-sessions-BuJnBnEq.mjs} +7 -4
- package/dist/.setup/{node-exec-server.runtime-BWkULhBM.mjs → node-exec-server.runtime-CP7RC1Nd.mjs} +3 -3
- package/dist/.setup/{plan-41-YOBMq.mjs → plan-B4cHgqNv.mjs} +7 -20
- package/dist/.setup/{plugin-activation-D7WkJMvU.mjs → plugin-activation-CXPWe-hl.mjs} +4 -4
- package/dist/.setup/{plugin-app-cache-key-Bg9DbDI6.mjs → plugin-app-cache-key-DRb-niJc.mjs} +17 -55
- package/dist/.setup/{plugin-approval-roundtrip-CD88q3yx.mjs → plugin-approval-roundtrip-DIZHLbAM.mjs} +1 -1
- package/dist/.setup/{plugin-inventory-CYgdo14P.mjs → plugin-inventory-DE9wcaeH.mjs} +2 -2
- package/dist/.setup/{plugin-metadata-cache-Bi8TAPwX.mjs → plugin-metadata-cache-BqC-a6Fb.mjs} +2 -15
- package/dist/.setup/{project-doc-thread-config-BVcvnps8.mjs → project-doc-thread-config-B0UI3f1D.mjs} +6 -6
- package/dist/.setup/protocol-CaPAVwe9.mjs +12 -0
- package/dist/.setup/{provider-capabilities-Dn2WwH4P.mjs → provider-capabilities-DjcKunHS.mjs} +1 -1
- package/dist/.setup/{provider-LWKll6dV.mjs → provider-wj_LFJH3.mjs} +4 -4
- package/dist/.setup/{rate-limits-CI8pTPqL.mjs → rate-limits-BpfURnuy.mjs} +1 -1
- package/dist/.setup/{request-Bo0kKABI.mjs → request-ePeNJrOd.mjs} +132 -136
- package/dist/.setup/{responses-oauth-twnuTaAa.mjs → responses-oauth-CCV7aVYF.mjs} +6 -6
- package/dist/.setup/{rpc-error-C98SHchT.mjs → rpc-error-DemqqaxE.mjs} +7 -3
- package/dist/.setup/{run-attempt-ClU8MxhZ.mjs → run-attempt-BcWArowv.mjs} +595 -426
- package/dist/.setup/{run-attempt-lifecycle-KN4oh-7O.mjs → run-attempt-lifecycle-DN-ATDp9.mjs} +1 -1
- package/dist/.setup/{runtime-artifact-C13pR7tD.mjs → runtime-artifact-CmLWeyJB.mjs} +3 -3
- package/dist/.setup/{runtime-artifact-connection-jS5DeCok.mjs → runtime-artifact-connection-DpWlZ02e.mjs} +3 -3
- package/dist/.setup/{sandbox-guard-DIImwCy1.mjs → sandbox-guard-DneAfNye.mjs} +70 -30
- package/dist/.setup/{session-binding-JEHNMPsr.mjs → session-binding-BgsWcbdY.mjs} +25 -23
- package/dist/.setup/{session-binding-record-DU_0biMD.mjs → session-binding-record-C_THntMe.mjs} +27 -12
- package/dist/.setup/{session-binding-record-codec-BpH8u_G9.mjs → session-binding-record-codec-DvmOI7g_.mjs} +1 -0
- package/dist/.setup/{session-binding-sidecars-DD-enC8w.mjs → session-binding-sidecars-BNSS6WL4.mjs} +55 -63
- package/dist/.setup/session-cancellation-DLBSJO5n.mjs +43 -0
- package/dist/.setup/{session-catalog-adoption-Ca3OYGYM.mjs → session-catalog-adoption-ppsLlVLB.mjs} +24 -38
- package/dist/.setup/{session-catalog-archive-Bv6gV7x9.mjs → session-catalog-archive-CqLRHJ6z.mjs} +11 -13
- package/dist/.setup/{session-catalog-events-kR2Ot6nX.mjs → session-catalog-events-DK0opVp3.mjs} +5 -5
- package/dist/.setup/{session-catalog-index-CrnfVEnT.mjs → session-catalog-index-BfzfdtH7.mjs} +96 -271
- package/dist/.setup/{session-catalog-index-order-CTfoefow.mjs → session-catalog-index-order-0Zqng2u8.mjs} +1 -1
- package/dist/.setup/{session-catalog-limits-BynIoOYm.mjs → session-catalog-limits-Dc6E0BZz.mjs} +1 -1
- package/dist/.setup/{session-catalog-list-request-D4MYNgDB.mjs → session-catalog-list-request-CAjoWjaH.mjs} +3 -4
- package/dist/.setup/{session-catalog-native-projection-CWqCU1I_.mjs → session-catalog-native-projection-G3lSDYYG.mjs} +5 -5
- package/dist/.setup/{session-catalog-node-adoption-BdP9Zjqo.mjs → session-catalog-node-adoption-e9v8mGgx.mjs} +5 -5
- package/dist/.setup/{session-catalog-node-continue-CNJibO4_.mjs → session-catalog-node-continue-H7nrzcUD.mjs} +5 -5
- package/dist/.setup/{session-catalog-node-lookup-BH_DBGa9.mjs → session-catalog-node-lookup-BrZfDkA8.mjs} +2 -2
- package/dist/.setup/{session-catalog-parsing-DkeoVn60.mjs → session-catalog-parsing-V6jyFg9g.mjs} +2 -2
- package/dist/.setup/{session-catalog-projection-BzHiV818.mjs → session-catalog-projection-BjWE414G.mjs} +8 -7
- package/dist/.setup/{session-catalog-provenance-CmsOE5mh.mjs → session-catalog-provenance-Dg9s12z-.mjs} +50 -30
- package/dist/.setup/{session-catalog-source-DGuRdGvM.mjs → session-catalog-source-DqyuNxCe.mjs} +2 -6
- package/dist/.setup/{session-cli-GwU0izn-.mjs → session-cli-CBGKiqdv.mjs} +1 -1
- package/dist/.setup/{session-history-BO6i_pfk.mjs → session-history-7W0cgTXF.mjs} +11 -9
- package/dist/.setup/{session-history-import-CaO8s6ta.mjs → session-history-import-BwPKwcNi.mjs} +4 -4
- package/dist/.setup/{session-initialization-Bi_2DKhc.mjs → session-initialization-Dn3vveGv.mjs} +2 -2
- package/dist/.setup/{session-retirement-B3U5hpGJ.mjs → session-retirement-Ci_JvOfH.mjs} +8 -8
- package/dist/.setup/{session-history.worker-DJQfek5p.mjs → settled-turn-evidence--tRW6fSm.mjs} +2 -18
- package/dist/.setup/{settled-turn-finalizer-CYCVpTv2.mjs → settled-turn-finalizer-D3-KXsbP.mjs} +8 -8
- package/dist/.setup/{shared-client-BCx1wbyA.mjs → shared-client-CE_uY0A1.mjs} +380 -557
- package/dist/.setup/side-question-OM18H9WJ.mjs +998 -0
- package/dist/.setup/{source-DipMO9hL.mjs → source-uGKgKWm8.mjs} +5 -5
- package/dist/.setup/{thread-archive-guard-LKdwQKyr.mjs → thread-archive-guard-BWjSsA92.mjs} +1 -1
- package/dist/.setup/{thread-lifecycle-run-C_aYiYqk.mjs → thread-lifecycle-run-mLueY6pH.mjs} +172 -75
- package/dist/.setup/{thread-model-selection-DcVebr8N.mjs → thread-model-selection-DxposL4X.mjs} +9 -9
- package/dist/.setup/{thread-ownership-BoUd0i6L.mjs → thread-ownership-t6Y9fLQS.mjs} +7 -7
- package/dist/.setup/{thread-policy-B3wBRNph.mjs → thread-policy-Cy301Or8.mjs} +6 -6
- package/dist/.setup/{thread-requests-BgzJwJtS.mjs → thread-requests-BjawdIVV.mjs} +14 -14
- package/dist/.setup/{thread-resume-D-3bsr1j.mjs → thread-resume-BUbsUfgF.mjs} +6 -6
- package/dist/.setup/{transcript-history-projection-DfKcoZCB.mjs → transcript-history-projection-i-FVpyha.mjs} +1 -1
- package/dist/.setup/{transcript-mirror-Bee2o6jj.mjs → transcript-mirror-CEQJZlF3.mjs} +6 -9
- package/dist/.setup/{transport-stdio-CRWTkKOn.mjs → transport-stdio-Bq160Dhv.mjs} +63 -64
- package/dist/.setup/{transport-websocket-DIyPfkHo.mjs → transport-websocket-0YqiI_MH.mjs} +1 -1
- package/dist/.setup/{turn-router-DBVMToGo.mjs → turn-router-Dbw17k3K.mjs} +2 -2
- package/dist/.setup/{upstream-session-fork-p5fwKi7w.mjs → upstream-session-fork-_LYkh0nZ.mjs} +46 -219
- package/dist/.setup/{usage-limit-error-BQX8RHAd.mjs → usage-limit-error-DcOSH3J4.mjs} +4 -4
- package/dist/.setup/{usage-C2Kq7oej.mjs → usage-w_93wnnR.mjs} +4 -4
- package/dist/.setup/{web-search-item-CvokaZOo.mjs → web-search-item-DHVuNSqk.mjs} +1 -1
- package/dist/.setup/{web-search-provider.runtime-D89djc7e.mjs → web-search-provider.runtime-DMHxve5v.mjs} +3 -3
- package/dist/.setup/{workspace-write-sandbox-probe-BDWO2Qkh.mjs → workspace-write-sandbox-probe-DJxOXcF3.mjs} +2 -2
- package/dist/api.js +7 -28
- package/dist/catalog-page.worker.js +1 -1
- package/dist/cli-metadata.js +1 -1
- package/dist/client-version-api.js +25 -0
- package/dist/doctor-contract-api.js +5 -5
- package/dist/harness.js +59 -36
- package/dist/index.js +259 -295
- package/dist/media-understanding-provider.js +2 -2
- package/dist/migration-provider-api.js +1 -2
- package/dist/native-session-binding-api.js +1 -2
- package/dist/provider-discovery.js +1 -1
- package/dist/session-history-worker-entrypoint.js +12 -0
- package/dist/session-history-worker-runtime.js +7 -18
- package/dist/session-history.worker.js +18 -2
- package/openclaw.plugin.json +1 -1
- package/package.json +6 -6
- package/dist/.setup/attempt-terminal-jO5IMj9K.mjs +0 -2
- package/dist/.setup/command-rpc-HIvsy3wS.mjs +0 -247
- package/dist/.setup/compact-ClZ7Ar7L.mjs +0 -808
- package/dist/.setup/inference-context-DNlGwzwy.mjs +0 -91
- package/dist/.setup/managed-binary-BtIjV7yN.mjs +0 -175
- package/dist/.setup/native-execution-policy-MXEe7PB3.mjs +0 -75
- package/dist/.setup/protocol-CANUwXJ3.mjs +0 -17
- package/dist/.setup/side-question-Bz2UQW0l.mjs +0 -826
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { CODEX_NATIVE_TOOL_REQUIREMENTS } from "../native-tool-policy.js";
|
|
2
2
|
import { c as isCodexPairedNodeRemoteExecPlacementSandbox, d as readCodexPluginConfig, l as isCodexRemoteExecPlacementSandbox } from "./config-parsing-DsWSCPHO.mjs";
|
|
3
|
-
import "./config-
|
|
4
|
-
import { a as isCodexResponsesOAuthRun } from "./responses-oauth-
|
|
5
|
-
import { F as isForcedPrivateQaCodexRuntime, L as isSystemAgentOnlyCodexDynamicToolAllowlist, P as filterCodexDynamicTools, R as normalizeCodexDynamicToolName, h as resolveCodexWebSearchPlan } from "./thread-requests-
|
|
6
|
-
import {
|
|
7
|
-
import { _ as createGatewayProcessProjection, b as isCodexDynamicToolExcluded, g as createGatewayExecProjection, v as createNodeExecAliasDynamicTool, x as placeDisabledNativeShellToolsInDirectNamespace, y as createSandboxShellProjection } from "./native-hook-relay-
|
|
3
|
+
import "./config-BfrAlTMT.mjs";
|
|
4
|
+
import { a as isCodexResponsesOAuthRun } from "./responses-oauth-CCV7aVYF.mjs";
|
|
5
|
+
import { F as isForcedPrivateQaCodexRuntime, L as isSystemAgentOnlyCodexDynamicToolAllowlist, P as filterCodexDynamicTools, R as normalizeCodexDynamicToolName, h as resolveCodexWebSearchPlan } from "./thread-requests-BjawdIVV.mjs";
|
|
6
|
+
import { a as resolveCodexNodeExecToolOverrides, r as prepareCodexNativeExecutionPolicyForRun } from "./native-execution-policy-D09tLP-u.mjs";
|
|
7
|
+
import { _ as createGatewayProcessProjection, b as isCodexDynamicToolExcluded, g as createGatewayExecProjection, v as createNodeExecAliasDynamicTool, x as placeDisabledNativeShellToolsInDirectNamespace, y as createSandboxShellProjection } from "./native-hook-relay-C7aaLJaP.mjs";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import { createStageTimingTracker, formatStageTimings } from "openclaw/plugin-sdk/time-runtime";
|
|
10
10
|
import { resolveAgentDir } from "openclaw/plugin-sdk/agent-runtime";
|
|
11
|
-
import { applyEmbeddedAttemptToolsAllow, buildAgentHookContextChannelFields, buildEmbeddedAttemptToolRunContext, embeddedAgentLog, filterProviderNormalizableTools, getPluginToolMeta, isHostScopedAgentToolActive, isSubagentSessionKey, normalizeAgentRuntimeTools, resolveAttemptSpawnWorkspaceDir,
|
|
11
|
+
import { applyEmbeddedAttemptToolsAllow, buildAgentHookContextChannelFields, buildEmbeddedAttemptToolRunContext, embeddedAgentLog, filterProviderNormalizableTools, getPluginToolMeta, isHostScopedAgentToolActive, isSubagentSessionKey, normalizeAgentRuntimeTools, resolveAttemptSpawnWorkspaceDir, resolveModelAuthModeAsync, supportsModelTools } from "openclaw/plugin-sdk/agent-harness-runtime";
|
|
12
12
|
import { isToolAllowed } from "openclaw/plugin-sdk/sandbox";
|
|
13
13
|
import { resolveCodexScheduledToolProjectionFactory, runWithCronCreatorAuthorityCapabilityResolver } from "openclaw/plugin-sdk/codex-mcp-projection";
|
|
14
14
|
//#region extensions/codex/src/app-server/dynamic-tool-construction-plan.ts
|
|
@@ -138,238 +138,228 @@ async function buildDynamicTools(input) {
|
|
|
138
138
|
const toolBuildStages = createStageTimingTracker();
|
|
139
139
|
const modelHasVision = params.model.input?.includes("image") ?? false;
|
|
140
140
|
const agentDir = params.agentDir ?? resolveAgentDir(params.config ?? {}, input.sessionAgentId);
|
|
141
|
-
const
|
|
141
|
+
const preparedExecution = input.nativeExecutionPolicy ?? await prepareCodexNativeExecutionPolicyForRun(params, {
|
|
142
142
|
agentId: input.policyAgentId,
|
|
143
143
|
runtimeSessionKey: input.sandboxSessionKey,
|
|
144
144
|
sandbox: input.sandbox
|
|
145
145
|
});
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
nativeToolSurfaceEnabled: isCodexResponsesOAuthRun(params) || input.nativeToolSurfaceEnabled,
|
|
150
|
-
nativeProviderWebSearchSupport: input.nativeProviderWebSearchSupport
|
|
151
|
-
});
|
|
152
|
-
const messageToolProvider = resolveCodexMessageToolProvider(params);
|
|
153
|
-
const webFetchHostnameAllowlistRef = {};
|
|
154
|
-
const toolConstructionPlan = resolveCodexToolConstructionPlan(input.sandbox, input.nativeToolSurfaceEnabled, params.requireWorkspaceOnly);
|
|
155
|
-
const options = {
|
|
156
|
-
agentId: input.sessionAgentId,
|
|
157
|
-
policyAgentId: input.policyAgentId,
|
|
158
|
-
...toolRunContext,
|
|
159
|
-
exec: {
|
|
160
|
-
...params.execOverrides,
|
|
161
|
-
...input.sessionPermissionPolicy ? { mode: input.sessionPermissionPolicy.execMode } : {},
|
|
162
|
-
...resolveCodexNodeExecToolOverrides(nativeExecutionPolicy),
|
|
146
|
+
try {
|
|
147
|
+
const nativeExecutionPolicy = preparedExecution.policy;
|
|
148
|
+
const webSearchPlan = resolveCodexWebSearchPlan({
|
|
163
149
|
config: params.config,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
memoryAudience: params.memoryAudience,
|
|
187
|
-
agentDir,
|
|
188
|
-
preparedModelRuntime: params.preparedModelRuntime,
|
|
189
|
-
cwd: input.effectiveCwd ?? input.effectiveWorkspace,
|
|
190
|
-
workspaceDir: input.effectiveWorkspace,
|
|
191
|
-
spawnWorkspaceDir: input.effectiveCwd && input.effectiveCwd !== input.effectiveWorkspace ? input.resolvedWorkspace : resolveAttemptSpawnWorkspaceDir({
|
|
150
|
+
disableTools: params.disableTools,
|
|
151
|
+
nativeToolSurfaceEnabled: isCodexResponsesOAuthRun(params) || input.nativeToolSurfaceEnabled,
|
|
152
|
+
nativeProviderWebSearchSupport: input.nativeProviderWebSearchSupport
|
|
153
|
+
});
|
|
154
|
+
const messageToolProvider = resolveCodexMessageToolProvider(params);
|
|
155
|
+
const webFetchHostnameAllowlistRef = {};
|
|
156
|
+
const toolConstructionPlan = resolveCodexToolConstructionPlan(input.sandbox, input.nativeToolSurfaceEnabled, params.requireWorkspaceOnly);
|
|
157
|
+
const options = {
|
|
158
|
+
agentId: input.sessionAgentId,
|
|
159
|
+
policyAgentId: input.policyAgentId,
|
|
160
|
+
...toolRunContext,
|
|
161
|
+
exec: {
|
|
162
|
+
...params.execOverrides,
|
|
163
|
+
...input.sessionPermissionPolicy ? { mode: input.sessionPermissionPolicy.execMode } : {},
|
|
164
|
+
...resolveCodexNodeExecToolOverrides(nativeExecutionPolicy),
|
|
165
|
+
config: params.config,
|
|
166
|
+
elevated: params.bashElevated
|
|
167
|
+
},
|
|
168
|
+
sessionPermissionPolicy: input.sessionPermissionPolicy ? {
|
|
169
|
+
mode: input.sessionPermissionPolicy.mode,
|
|
170
|
+
root: input.sessionPermissionPolicy.root
|
|
171
|
+
} : void 0,
|
|
192
172
|
sandbox: input.sandbox,
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
config: params.config,
|
|
196
|
-
skillsSnapshot: params.skillsSnapshot,
|
|
197
|
-
...params.skillLibraryAuthoring ? { skillWorkshop: { libraryAuthoring: params.skillLibraryAuthoring } } : {},
|
|
198
|
-
authProfileStore: params.toolAuthProfileStore ?? params.authProfileStore,
|
|
199
|
-
abortSignal: input.runAbortController.signal,
|
|
200
|
-
emitBeforeToolCallDiagnostics: false,
|
|
201
|
-
modelProvider: params.model.provider,
|
|
202
|
-
modelId: params.modelId,
|
|
203
|
-
modelCompat: params.model.compat && typeof params.model.compat === "object" ? params.model.compat : void 0,
|
|
204
|
-
modelApi: params.model.api,
|
|
205
|
-
modelContextWindowTokens: params.model.contextWindow,
|
|
206
|
-
delegationCapability: params.delegationCapability,
|
|
207
|
-
modelAuthMode: resolveModelAuthMode(params.model.provider, params.config, params.toolAuthProfileStore ?? params.authProfileStore, { workspaceDir: input.effectiveWorkspace }),
|
|
208
|
-
suppressManagedWebSearch: false,
|
|
209
|
-
webFetchHostnameAllowlistRef,
|
|
210
|
-
hookChannelId: resolveCodexAppServerHookChannelId(params, input.sandboxSessionKey),
|
|
211
|
-
modelHasVision,
|
|
212
|
-
computerContextEpoch: input.computerContextEpoch,
|
|
213
|
-
oneShotCliRun: params.oneShotCliRun,
|
|
214
|
-
registerRunCleanup: input.registerRunCleanup,
|
|
215
|
-
requireExplicitMessageTarget: params.requireExplicitMessageTarget ?? isSubagentSessionKey(params.sessionKey),
|
|
216
|
-
disableMessageTool: input.ignoreDisableMessageTool ? false : params.disableMessageTool,
|
|
217
|
-
forceMessageTool: shouldForceMessageTool(messagePolicyParams),
|
|
218
|
-
enableHeartbeatTool: params.trigger === "heartbeat" || input.forceHeartbeatTool === true,
|
|
219
|
-
forceHeartbeatTool: params.trigger === "heartbeat" || input.forceHeartbeatTool === true,
|
|
220
|
-
onYield: (message, acknowledgment) => {
|
|
221
|
-
input.onYieldDetected(message, acknowledgment);
|
|
222
|
-
input.onCodexAppServerEvent?.({
|
|
223
|
-
stream: "codex_app_server.tool",
|
|
224
|
-
data: {
|
|
225
|
-
name: "sessions_yield",
|
|
226
|
-
message
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
},
|
|
230
|
-
claimYieldCompletion: input.claimYieldCompletion,
|
|
231
|
-
recordToolPrepStage: (name) => {
|
|
232
|
-
toolBuildStages.mark(name);
|
|
233
|
-
},
|
|
234
|
-
onToolOutcome: params.onToolOutcome,
|
|
235
|
-
isTurnTainted: params.isTurnTainted,
|
|
236
|
-
allocateToolOutcomeOrdinal: params.allocateToolOutcomeOrdinal,
|
|
237
|
-
cronCreatorToolAllowlistRef: input.cronCreatorToolAllowlistRef,
|
|
238
|
-
cronCreatorToolAllowlistCaptureRef: input.cronCreatorToolAllowlistCaptureRef,
|
|
239
|
-
cronCreatorAuthorityUnavailableReason: input.cronCreatorAuthorityUnavailableReason
|
|
240
|
-
};
|
|
241
|
-
input.onMessageToolTargetResolved?.(options.requireExplicitMessageTarget === true);
|
|
242
|
-
const allTools = await createCodexHostToolSurface(params, options, { cwd: input.effectiveCwd ?? input.effectiveWorkspace }, input.resolveCronCreatorToolAuthority);
|
|
243
|
-
toolBuildStages.mark("create-openclaw-coding-tools");
|
|
244
|
-
const preNormalizationDiagnostics = [];
|
|
245
|
-
const readableAllToolProjection = filterProviderNormalizableTools(allTools);
|
|
246
|
-
preNormalizationDiagnostics.push(...readableAllToolProjection.diagnostics);
|
|
247
|
-
const readableAllTools = [...readableAllToolProjection.tools];
|
|
248
|
-
const normallyProfiledTools = filterCodexDynamicTools(readableAllTools, input.pluginConfig, { disabledNativeSurface: input.nativeToolSurfaceEnabled === false ? { preserveShell: !isCodexMemoryFlushRun(params) && input.sandbox?.enabled !== true && nativeExecutionPolicy.effectiveExecHost !== "node" } : void 0 });
|
|
249
|
-
const systemAgentTool = (input.isHostScopedToolActive?.("openclaw") ?? isHostScopedAgentToolActive("openclaw")) && isSystemAgentOnlyCodexDynamicToolAllowlist(params.toolsAllow) && readableAllTools.find((tool) => tool.name === "openclaw" && tool.catalogMode === "direct-only");
|
|
250
|
-
const profileFilteredTools = systemAgentTool ? [systemAgentTool, ...normallyProfiledTools.filter((tool) => tool.name !== "openclaw")] : normallyProfiledTools;
|
|
251
|
-
const codexFilteredTools = await addShellDynamicTools(isCodexMemoryFlushRun(params) ? readableAllTools.filter((tool) => CODEX_MEMORY_FLUSH_DYNAMIC_TOOL_ALLOW.has(normalizeCodexDynamicToolName(tool.name))) : profileFilteredTools, readableAllTools, input, nativeExecutionPolicy);
|
|
252
|
-
toolBuildStages.mark("codex-filtering");
|
|
253
|
-
const visionFilteredTools = filterCodexVisionTools(codexFilteredTools, {
|
|
254
|
-
modelHasVision,
|
|
255
|
-
nativeImageInspectionEnabled: input.nativeToolSurfaceEnabled === true
|
|
256
|
-
});
|
|
257
|
-
toolBuildStages.mark("vision-filtering");
|
|
258
|
-
const webSearchPresent = visionFilteredTools.some((tool) => tool.name === "web_search");
|
|
259
|
-
const persistentCodexWebSearchSurface = params.config?.tools?.web?.search?.enabled !== false && !isCodexDynamicToolExcluded(input.pluginConfig, ["web_search"]);
|
|
260
|
-
const persistentHostedWebSearchEligible = resolveCodexWebSearchPlan({
|
|
261
|
-
config: params.config,
|
|
262
|
-
nativeProviderWebSearchSupport: input.nativeProviderWebSearchSupport
|
|
263
|
-
}).kind === "native-hosted";
|
|
264
|
-
let nativeWebSearchAllowed = false;
|
|
265
|
-
let persistentWebSearchAllowed = webSearchPresent;
|
|
266
|
-
if ((input.onPersistentWebSearchPolicyResolved || webSearchPlan.kind === "native-hosted" && (input.onWebSearchPolicyResolved || webSearchPlan.webFetchHostnameAllowlist)) && !webSearchPresent && persistentCodexWebSearchSurface) {
|
|
267
|
-
const webSearchPolicy = (await import("openclaw/plugin-sdk/agent-harness")).resolveWebSearchToolPolicy({
|
|
268
|
-
config: params.config,
|
|
269
|
-
modelProvider: params.model.provider,
|
|
270
|
-
modelId: params.modelId,
|
|
271
|
-
agentId: input.policyAgentId,
|
|
272
|
-
sessionKey: input.sandboxSessionKey,
|
|
273
|
-
sessionId: params.sessionId,
|
|
274
|
-
...persistentHostedWebSearchEligible ? { runtimeToolAllowlist: toolRunContext.runtimeToolAllowlist } : {},
|
|
275
|
-
sandboxToolPolicy: input.sandbox?.tools,
|
|
173
|
+
requireWorkspaceOnly: params.requireWorkspaceOnly,
|
|
174
|
+
...toolConstructionPlan ? { toolConstructionPlan } : {},
|
|
276
175
|
messageProvider: messageToolProvider,
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
senderId: params.senderId,
|
|
283
|
-
senderName: params.senderName,
|
|
284
|
-
senderUsername: params.senderUsername,
|
|
285
|
-
senderE164: params.senderE164,
|
|
176
|
+
toolPolicyMessageProvider: params.messageProvider ?? params.messageChannel,
|
|
177
|
+
...params.onToolResult ? { questionPrompt: {
|
|
178
|
+
send: params.onToolResult,
|
|
179
|
+
messageChannel: messageToolProvider
|
|
180
|
+
} } : {},
|
|
286
181
|
inputProvenance: params.inputProvenance,
|
|
287
182
|
trustedInternalHandoff: params.trustedInternalHandoff,
|
|
288
|
-
|
|
183
|
+
allowGatewaySubagentBinding: params.allowGatewaySubagentBinding || isForcedPrivateQaCodexRuntime(),
|
|
184
|
+
sessionKey: input.sandboxSessionKey,
|
|
185
|
+
runSessionKey: params.sessionKey && params.sessionKey !== input.sandboxSessionKey ? params.sessionKey : void 0,
|
|
186
|
+
sessionId: params.sessionId,
|
|
187
|
+
runId: params.runId,
|
|
188
|
+
memoryAudience: params.memoryAudience,
|
|
189
|
+
agentDir,
|
|
190
|
+
preparedModelRuntime: params.preparedModelRuntime,
|
|
191
|
+
cwd: input.effectiveCwd ?? input.effectiveWorkspace,
|
|
192
|
+
workspaceDir: input.effectiveWorkspace,
|
|
193
|
+
spawnWorkspaceDir: input.effectiveCwd && input.effectiveCwd !== input.effectiveWorkspace ? input.resolvedWorkspace : resolveAttemptSpawnWorkspaceDir({
|
|
194
|
+
sandbox: input.sandbox,
|
|
195
|
+
resolvedWorkspace: input.resolvedWorkspace
|
|
196
|
+
}),
|
|
197
|
+
config: params.config,
|
|
198
|
+
skillsSnapshot: params.skillsSnapshot,
|
|
199
|
+
...params.skillLibraryAuthoring ? { skillWorkshop: { libraryAuthoring: params.skillLibraryAuthoring } } : {},
|
|
200
|
+
authProfileStore: params.toolAuthProfileStore ?? params.authProfileStore,
|
|
201
|
+
abortSignal: input.runAbortController.signal,
|
|
202
|
+
emitBeforeToolCallDiagnostics: false,
|
|
203
|
+
modelProvider: params.model.provider,
|
|
204
|
+
modelId: params.modelId,
|
|
205
|
+
modelCompat: params.model.compat && typeof params.model.compat === "object" ? params.model.compat : void 0,
|
|
206
|
+
modelApi: params.model.api,
|
|
207
|
+
modelContextWindowTokens: params.model.contextWindow,
|
|
208
|
+
delegationCapability: params.delegationCapability,
|
|
209
|
+
modelAuthMode: await resolveModelAuthModeAsync(params.model.provider, params.config, params.toolAuthProfileStore ?? params.authProfileStore, { workspaceDir: input.effectiveWorkspace }),
|
|
210
|
+
suppressManagedWebSearch: false,
|
|
211
|
+
webFetchHostnameAllowlistRef,
|
|
212
|
+
hookChannelId: resolveCodexAppServerHookChannelId(params, input.sandboxSessionKey),
|
|
213
|
+
modelHasVision,
|
|
214
|
+
computerContextEpoch: input.computerContextEpoch,
|
|
215
|
+
oneShotCliRun: params.oneShotCliRun,
|
|
216
|
+
registerRunCleanup: input.registerRunCleanup,
|
|
217
|
+
requireExplicitMessageTarget: params.requireExplicitMessageTarget ?? isSubagentSessionKey(params.sessionKey),
|
|
218
|
+
disableMessageTool: input.ignoreDisableMessageTool ? false : params.disableMessageTool,
|
|
219
|
+
forceMessageTool: shouldForceMessageTool(messagePolicyParams),
|
|
220
|
+
enableHeartbeatTool: params.trigger === "heartbeat" || input.forceHeartbeatTool === true,
|
|
221
|
+
forceHeartbeatTool: params.trigger === "heartbeat" || input.forceHeartbeatTool === true,
|
|
222
|
+
onYield: (message, acknowledgment) => {
|
|
223
|
+
input.onYieldDetected(message, acknowledgment);
|
|
224
|
+
input.onCodexAppServerEvent?.({
|
|
225
|
+
stream: "codex_app_server.tool",
|
|
226
|
+
data: {
|
|
227
|
+
name: "sessions_yield",
|
|
228
|
+
message
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
},
|
|
232
|
+
claimYieldCompletion: input.claimYieldCompletion,
|
|
233
|
+
recordToolPrepStage: (name) => {
|
|
234
|
+
toolBuildStages.mark(name);
|
|
235
|
+
},
|
|
236
|
+
onToolOutcome: params.onToolOutcome,
|
|
237
|
+
isTurnTainted: params.isTurnTainted,
|
|
238
|
+
allocateToolOutcomeOrdinal: params.allocateToolOutcomeOrdinal,
|
|
239
|
+
cronCreatorToolAllowlistRef: input.cronCreatorToolAllowlistRef,
|
|
240
|
+
cronCreatorToolAllowlistCaptureRef: input.cronCreatorToolAllowlistCaptureRef,
|
|
241
|
+
cronCreatorAuthorityUnavailableReason: input.cronCreatorAuthorityUnavailableReason
|
|
242
|
+
};
|
|
243
|
+
input.onMessageToolTargetResolved?.(options.requireExplicitMessageTarget === true);
|
|
244
|
+
const allTools = await createCodexHostToolSurface(params, options, { cwd: input.effectiveCwd ?? input.effectiveWorkspace }, input.resolveCronCreatorToolAuthority);
|
|
245
|
+
toolBuildStages.mark("create-openclaw-coding-tools");
|
|
246
|
+
const preNormalizationDiagnostics = [];
|
|
247
|
+
const readableAllToolProjection = filterProviderNormalizableTools(allTools);
|
|
248
|
+
preNormalizationDiagnostics.push(...readableAllToolProjection.diagnostics);
|
|
249
|
+
const readableAllTools = [...readableAllToolProjection.tools];
|
|
250
|
+
const normallyProfiledTools = filterCodexDynamicTools(readableAllTools, input.pluginConfig, { disabledNativeSurface: input.nativeToolSurfaceEnabled === false ? { preserveShell: !isCodexMemoryFlushRun(params) && input.sandbox?.enabled !== true && nativeExecutionPolicy.effectiveExecHost !== "node" } : void 0 });
|
|
251
|
+
const systemAgentTool = (input.isHostScopedToolActive?.("openclaw") ?? isHostScopedAgentToolActive("openclaw")) && isSystemAgentOnlyCodexDynamicToolAllowlist(params.toolsAllow) && readableAllTools.find((tool) => tool.name === "openclaw" && tool.catalogMode === "direct-only");
|
|
252
|
+
const profileFilteredTools = systemAgentTool ? [systemAgentTool, ...normallyProfiledTools.filter((tool) => tool.name !== "openclaw")] : normallyProfiledTools;
|
|
253
|
+
const codexFilteredTools = await addShellDynamicTools(isCodexMemoryFlushRun(params) ? readableAllTools.filter((tool) => CODEX_MEMORY_FLUSH_DYNAMIC_TOOL_ALLOW.has(normalizeCodexDynamicToolName(tool.name))) : profileFilteredTools, readableAllTools, input, nativeExecutionPolicy);
|
|
254
|
+
toolBuildStages.mark("codex-filtering");
|
|
255
|
+
const visionFilteredTools = filterCodexVisionTools(codexFilteredTools, {
|
|
256
|
+
modelHasVision,
|
|
257
|
+
nativeImageInspectionEnabled: input.nativeToolSurfaceEnabled === true
|
|
289
258
|
});
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
259
|
+
toolBuildStages.mark("vision-filtering");
|
|
260
|
+
const webSearchPresent = visionFilteredTools.some((tool) => tool.name === "web_search");
|
|
261
|
+
const persistentCodexWebSearchSurface = params.config?.tools?.web?.search?.enabled !== false && !isCodexDynamicToolExcluded(input.pluginConfig, ["web_search"]);
|
|
262
|
+
const persistentHostedWebSearchEligible = resolveCodexWebSearchPlan({
|
|
263
|
+
config: params.config,
|
|
264
|
+
nativeProviderWebSearchSupport: input.nativeProviderWebSearchSupport
|
|
265
|
+
}).kind === "native-hosted";
|
|
266
|
+
let nativeWebSearchAllowed = false;
|
|
267
|
+
let persistentWebSearchAllowed = webSearchPresent;
|
|
268
|
+
if ((input.onPersistentWebSearchPolicyResolved || webSearchPlan.kind === "native-hosted" && (input.onWebSearchPolicyResolved || webSearchPlan.webFetchHostnameAllowlist)) && !webSearchPresent && persistentCodexWebSearchSurface) {
|
|
269
|
+
const webSearchPolicy = (await import("openclaw/plugin-sdk/agent-harness")).resolveWebSearchToolPolicy({
|
|
270
|
+
config: params.config,
|
|
271
|
+
modelProvider: params.model.provider,
|
|
272
|
+
modelId: params.modelId,
|
|
273
|
+
agentId: input.policyAgentId,
|
|
274
|
+
sessionKey: input.sandboxSessionKey,
|
|
275
|
+
sessionId: params.sessionId,
|
|
276
|
+
...persistentHostedWebSearchEligible ? { runtimeToolAllowlist: toolRunContext.runtimeToolAllowlist } : {},
|
|
277
|
+
sandboxToolPolicy: input.sandbox?.tools,
|
|
278
|
+
messageProvider: messageToolProvider,
|
|
279
|
+
agentAccountId: params.agentAccountId,
|
|
280
|
+
groupId: params.groupId,
|
|
281
|
+
groupChannel: params.groupChannel,
|
|
282
|
+
groupSpace: params.groupSpace,
|
|
283
|
+
spawnedBy: params.spawnedBy,
|
|
284
|
+
senderId: params.senderId,
|
|
285
|
+
senderName: params.senderName,
|
|
286
|
+
senderUsername: params.senderUsername,
|
|
287
|
+
senderE164: params.senderE164,
|
|
288
|
+
inputProvenance: params.inputProvenance,
|
|
289
|
+
trustedInternalHandoff: params.trustedInternalHandoff,
|
|
290
|
+
scheduledToolPolicy: params.scheduledToolPolicy
|
|
291
|
+
});
|
|
292
|
+
persistentWebSearchAllowed = webSearchPolicy.persistentAllowed && (persistentHostedWebSearchEligible || !webSearchPolicy.allowed || isCodexMemoryFlushRun(params));
|
|
293
|
+
nativeWebSearchAllowed = webSearchPlan.kind === "native-hosted" && webSearchPolicy.allowed && !isCodexMemoryFlushRun(params);
|
|
299
294
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
}))
|
|
330
|
-
});
|
|
331
|
-
const summary = toolBuildStages.snapshot();
|
|
332
|
-
if (shouldWarnCodexDynamicToolBuildStageSummary(summary, input.profilerEnabled)) {
|
|
333
|
-
const phase = input.forceHeartbeatTool ? "registered-tools" : "runtime-tools";
|
|
334
|
-
embeddedAgentLog.warn(`codex app-server dynamic tool build timings runId=${params.runId} sessionId=${params.sessionId} phase=${phase} totalMs=${summary.totalMs} stages=${formatStageTimings(summary.stages)}`, {
|
|
295
|
+
input.onPersistentWebSearchPolicyResolved?.(persistentWebSearchAllowed);
|
|
296
|
+
const filteredTools = applyEmbeddedAttemptToolsAllow(visionFilteredTools, toolRunContext.runtimeToolAllowlist, {
|
|
297
|
+
toolMeta: getPluginToolMeta,
|
|
298
|
+
toolAliases: (tool) => {
|
|
299
|
+
const normalized = normalizeCodexDynamicToolName(tool.name);
|
|
300
|
+
return normalized === "sandbox_exec" || normalized === "gateway_exec" || normalized === "node_exec" ? ["exec"] : normalized === "sandbox_process" || normalized === "gateway_process" ? ["exec", "process"] : [];
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
toolBuildStages.mark("allowlist-filter");
|
|
304
|
+
const normalizedTools = normalizeAgentRuntimeTools({
|
|
305
|
+
runtimePlan: input.ignoreRuntimePlan ? void 0 : params.runtimePlan,
|
|
306
|
+
tools: filteredTools,
|
|
307
|
+
provider: params.provider,
|
|
308
|
+
config: params.config,
|
|
309
|
+
workspaceDir: input.effectiveWorkspace,
|
|
310
|
+
env: process.env,
|
|
311
|
+
modelId: params.modelId,
|
|
312
|
+
modelApi: params.model.api,
|
|
313
|
+
model: params.model,
|
|
314
|
+
allowProviderRuntimePluginLoad: input.ignoreRuntimePlan ? false : void 0,
|
|
315
|
+
onPreNormalizationSchemaDiagnostics: (diagnostics) => preNormalizationDiagnostics.push(...diagnostics)
|
|
316
|
+
});
|
|
317
|
+
toolBuildStages.mark("runtime-normalization");
|
|
318
|
+
const webSearchAllowed = nativeWebSearchAllowed || normalizedTools.some((tool) => tool.name === "web_search");
|
|
319
|
+
webFetchHostnameAllowlistRef.value = webSearchAllowed ? webSearchPlan.webFetchHostnameAllowlist : void 0;
|
|
320
|
+
input.onWebSearchPolicyResolved?.(webSearchAllowed);
|
|
321
|
+
const webSearchFilteredTools = webSearchPlan.suppressManagedWebSearch ? normalizedTools.filter((tool) => tool.name !== "web_search") : normalizedTools;
|
|
322
|
+
const exposedTools = placeDisabledNativeShellToolsInDirectNamespace(webSearchFilteredTools, input.nativeToolSurfaceEnabled);
|
|
323
|
+
if (preNormalizationDiagnostics.length > 0) embeddedAgentLog.warn(`codex app-server quarantined ${preNormalizationDiagnostics.length} unsupported runtime tool schema${preNormalizationDiagnostics.length === 1 ? "" : "s"} before dynamic tool registration`, {
|
|
335
324
|
runId: params.runId,
|
|
336
325
|
sessionId: params.sessionId,
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
filteredToolCount: filteredTools.length,
|
|
344
|
-
normalizedToolCount: exposedTools.length,
|
|
345
|
-
forceHeartbeatTool: input.forceHeartbeatTool === true,
|
|
346
|
-
ignoreRuntimePlan: input.ignoreRuntimePlan === true,
|
|
347
|
-
nativeToolSurfaceEnabled: input.nativeToolSurfaceEnabled === true
|
|
326
|
+
diagnostics: preNormalizationDiagnostics.map((diagnostic) => ({
|
|
327
|
+
index: diagnostic.toolIndex,
|
|
328
|
+
tool: diagnostic.toolName,
|
|
329
|
+
violations: diagnostic.violations.slice(0, 12),
|
|
330
|
+
violationCount: diagnostic.violations.length
|
|
331
|
+
}))
|
|
348
332
|
});
|
|
333
|
+
const summary = toolBuildStages.snapshot();
|
|
334
|
+
if (shouldWarnCodexDynamicToolBuildStageSummary(summary, input.profilerEnabled)) {
|
|
335
|
+
const phase = input.forceHeartbeatTool ? "registered-tools" : "runtime-tools";
|
|
336
|
+
embeddedAgentLog.warn(`codex app-server dynamic tool build timings runId=${params.runId} sessionId=${params.sessionId} phase=${phase} totalMs=${summary.totalMs} stages=${formatStageTimings(summary.stages)}`, {
|
|
337
|
+
runId: params.runId,
|
|
338
|
+
sessionId: params.sessionId,
|
|
339
|
+
phase,
|
|
340
|
+
totalMs: summary.totalMs,
|
|
341
|
+
stages: summary.stages,
|
|
342
|
+
allToolCount: readableAllTools.length,
|
|
343
|
+
codexFilteredToolCount: codexFilteredTools.length,
|
|
344
|
+
visionFilteredToolCount: visionFilteredTools.length,
|
|
345
|
+
filteredToolCount: filteredTools.length,
|
|
346
|
+
normalizedToolCount: exposedTools.length,
|
|
347
|
+
forceHeartbeatTool: input.forceHeartbeatTool === true,
|
|
348
|
+
ignoreRuntimePlan: input.ignoreRuntimePlan === true,
|
|
349
|
+
nativeToolSurfaceEnabled: input.nativeToolSurfaceEnabled === true
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
return exposedTools;
|
|
353
|
+
} finally {
|
|
354
|
+
if (!input.nativeExecutionPolicy) preparedExecution.release();
|
|
349
355
|
}
|
|
350
|
-
return exposedTools;
|
|
351
356
|
}
|
|
352
|
-
function shouldEnableCodexAppServerNativeToolSurface(params, sandbox, options
|
|
357
|
+
function shouldEnableCodexAppServerNativeToolSurface(params, sandbox, options) {
|
|
353
358
|
if (isCodexResponsesOAuthRun(params) || params.requireWorkspaceOnly === true || params.pluginHarnessToolPolicyRestricted === true || isCodexMemoryFlushRun(params) || params.disableTools) return false;
|
|
354
|
-
if (!
|
|
355
|
-
agentId: options.agentId,
|
|
356
|
-
runtimeSessionKey: options.runtimeSessionKey,
|
|
357
|
-
sandbox
|
|
358
|
-
}).nativeToolSurfaceAllowed) return false;
|
|
359
|
+
if (!options.nativeExecutionPolicy.policy.nativeToolSurfaceAllowed) return false;
|
|
359
360
|
const toolsAllow = params.toolsAllow;
|
|
360
361
|
return (toolsAllow === void 0 || toolsAllow.some((name) => normalizeCodexDynamicToolName(name) === "*")) && canCodexAppServerNativeToolSurfaceHonorSandbox(sandbox, options);
|
|
361
362
|
}
|
|
362
|
-
function resolveCodexNativeExecutionPolicyForRun(params, options = {}) {
|
|
363
|
-
return resolveCodexNativeExecutionPolicy({
|
|
364
|
-
config: params.config,
|
|
365
|
-
sessionKey: options.runtimeSessionKey?.trim() || params.sandboxSessionKey?.trim() || params.sessionKey?.trim() || params.sessionId,
|
|
366
|
-
sessionId: params.sessionId,
|
|
367
|
-
agentId: options.agentId,
|
|
368
|
-
execOverrides: params.execOverrides,
|
|
369
|
-
sandboxAvailable: options.sandbox === null ? false : options.sandbox?.enabled,
|
|
370
|
-
readRuntimeSessionEntry: true
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
363
|
function canCodexAppServerNativeToolSurfaceHonorSandbox(sandbox, options = {}) {
|
|
374
364
|
if (!sandbox?.enabled) return true;
|
|
375
365
|
return options.sandboxExecServerEnabled === true && (sandbox.backend || isCodexRemoteExecPlacementSandbox(sandbox)) && CODEX_NATIVE_TOOL_REQUIREMENTS.every((toolName) => isToolAllowed(sandbox.tools, toolName));
|