@openclaw/codex 2026.6.8 → 2026.6.9-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.
Files changed (34) hide show
  1. package/dist/{notification-correlation-BGoG0N90.js → app-server-policy-KpyUye2D.js} +15 -74
  2. package/dist/attempt-notifications-Meja3TX6.js +249 -0
  3. package/dist/{client-factory-C71Xdb6z.js → client-factory-CPuoOOx6.js} +3 -2
  4. package/dist/{client-DovmVtbr.js → client-m7XiCQpO.js} +24 -2
  5. package/dist/{command-handlers-DHecBkuc.js → command-handlers-CqS0Kv3Z.js} +17 -13
  6. package/dist/{compact-GEKusemL.js → compact-CMVlldii.js} +5 -5
  7. package/dist/{computer-use-D1qxvTE_.js → computer-use-qLm7Gf35.js} +3 -3
  8. package/dist/{config-DJXpBkGf.js → config-BksX0T33.js} +160 -20
  9. package/dist/{conversation-binding-CbnMilVW.js → conversation-binding-DBof5w9J.js} +166 -58
  10. package/dist/doctor-contract-api.js +37 -3
  11. package/dist/harness.js +6 -6
  12. package/dist/index.js +108 -27
  13. package/dist/media-understanding-provider-CiwPkR58.js +463 -0
  14. package/dist/media-understanding-provider.js +1 -355
  15. package/dist/{models-DRKnOpzF.js → models-BsyV1Psm.js} +2 -2
  16. package/dist/{plugin-app-cache-key-kIqpGTQj.js → plugin-app-cache-key-CN9zBiCG.js} +17 -6
  17. package/dist/{protocol-oeJQu4rs.js → protocol-dh-ETiNd.js} +4 -1
  18. package/dist/{protocol-validators-B48C6S9O.js → protocol-validators-B19q5BIX.js} +210 -16
  19. package/dist/{native-hook-relay-C3i3FYtc.js → provider-capabilities-BOvTfMhF.js} +803 -78
  20. package/dist/{provider-C5P6352f.js → provider-qJygHQx4.js} +4 -4
  21. package/dist/provider.js +1 -1
  22. package/dist/{request-BxZ40QKY.js → request-DTIEyUrA.js} +2 -2
  23. package/dist/{run-attempt-D_q-VrpR.js → run-attempt-DRhB6bTc.js} +421 -774
  24. package/dist/{sandbox-guard-C-Yv9uwY.js → sandbox-guard-3tnjhjFb.js} +37 -10
  25. package/dist/{session-binding-ElbcSq2o.js → session-binding-BRUi8y6E.js} +27 -8
  26. package/dist/{shared-client-jFMumCOe.js → shared-client-Bg5d7VV9.js} +4 -4
  27. package/dist/{side-question-DqKLfWMB.js → side-question-BdYL4kj1.js} +106 -42
  28. package/dist/{thread-lifecycle-cban34w3.js → thread-lifecycle-CbJqqnEw.js} +912 -616
  29. package/dist/web-search-contract-api.js +10 -0
  30. package/dist/web-search-provider.runtime-DrpQ8Cyd.js +74 -0
  31. package/dist/web-search-provider.shared-BrZmlqyR.js +32 -0
  32. package/npm-shrinkwrap.json +2 -2
  33. package/openclaw.plugin.json +129 -4
  34. package/package.json +4 -4
@@ -0,0 +1,10 @@
1
+ import { t as createCodexWebSearchProviderBase } from "./web-search-provider.shared-BrZmlqyR.js";
2
+ //#region extensions/codex/web-search-contract-api.ts
3
+ function createCodexWebSearchProvider() {
4
+ return {
5
+ ...createCodexWebSearchProviderBase(),
6
+ createTool: () => null
7
+ };
8
+ }
9
+ //#endregion
10
+ export { createCodexWebSearchProvider };
@@ -0,0 +1,74 @@
1
+ import { n as isJsonObject } from "./protocol-dh-ETiNd.js";
2
+ import { g as buildCodexNativeWebSearchThreadConfig } from "./thread-lifecycle-CbJqqnEw.js";
3
+ import { n as runBoundedCodexAppServerTurn } from "./media-understanding-provider-CiwPkR58.js";
4
+ import { readStringParam, resolveSearchTimeoutSeconds, wrapWebContent } from "openclaw/plugin-sdk/provider-web-search";
5
+ //#region extensions/codex/src/web-search-provider.runtime.ts
6
+ async function executeCodexWebSearchProviderTool(ctx, args, executionContext, options) {
7
+ const query = readStringParam(args, "query", { required: true });
8
+ const start = Date.now();
9
+ const result = await runBoundedCodexAppServerTurn({
10
+ config: ctx.config,
11
+ model: { mode: "live-default" },
12
+ timeoutMs: resolveSearchTimeoutSeconds(ctx.searchConfig) * 1e3,
13
+ signal: executionContext?.signal,
14
+ agentDir: ctx.agentDir,
15
+ options,
16
+ taskLabel: "hosted search",
17
+ developerInstructions: "You are OpenClaw's bounded web-search worker. You must use Codex hosted web_search to answer the user's search query. Return a concise grounded answer with source URLs. Do not call other tools, edit files, or ask follow-up questions.",
18
+ input: [{
19
+ type: "text",
20
+ text: query,
21
+ text_elements: []
22
+ }],
23
+ requiredModalities: ["text"],
24
+ isolation: "private-stdio",
25
+ threadConfig: buildCodexNativeWebSearchThreadConfig(ctx.config)
26
+ });
27
+ const searches = result.items.filter((item) => item.type === "webSearch").map(summarizeCodexWebSearchItem);
28
+ if (searches.length === 0) throw new Error("Codex hosted search completed without invoking web search.");
29
+ return {
30
+ query,
31
+ provider: "codex",
32
+ model: result.model,
33
+ tookMs: Date.now() - start,
34
+ externalContent: {
35
+ untrusted: true,
36
+ source: "web_search",
37
+ provider: "codex",
38
+ wrapped: true
39
+ },
40
+ content: wrapWebContent(result.text, "web_search"),
41
+ searches
42
+ };
43
+ }
44
+ function summarizeCodexWebSearchItem(item) {
45
+ const action = isJsonObject(item.action) ? item.action : void 0;
46
+ const actionType = readNonEmptyString(action, "type");
47
+ const queries = actionType === "search" ? readNonEmptyStringArray(action, "queries") : [];
48
+ const query = normalizeNonEmptyString(item.query) ?? (actionType === "search" ? readNonEmptyString(action, "query") : void 0) ?? queries[0];
49
+ const url = readNonEmptyString(action, "url");
50
+ const pattern = readNonEmptyString(action, "pattern");
51
+ return {
52
+ ...query ? { query } : {},
53
+ ...queries.length > 0 ? { queries } : {},
54
+ ...actionType && actionType !== "search" ? { action: actionType } : {},
55
+ ...url ? { url } : {},
56
+ ...pattern ? { pattern } : {}
57
+ };
58
+ }
59
+ function readNonEmptyString(record, key) {
60
+ return record ? normalizeNonEmptyString(record[key]) : void 0;
61
+ }
62
+ function readNonEmptyStringArray(record, key) {
63
+ const value = record?.[key];
64
+ if (!Array.isArray(value)) return [];
65
+ return value.flatMap((entry) => {
66
+ const normalized = normalizeNonEmptyString(entry);
67
+ return normalized ? [normalized] : [];
68
+ });
69
+ }
70
+ function normalizeNonEmptyString(value) {
71
+ return typeof value === "string" ? value.trim() || void 0 : void 0;
72
+ }
73
+ //#endregion
74
+ export { executeCodexWebSearchProviderTool };
@@ -0,0 +1,32 @@
1
+ import { createWebSearchProviderContractFields } from "openclaw/plugin-sdk/provider-web-search-contract";
2
+ //#region extensions/codex/src/web-search-provider.shared.ts
3
+ function createCodexWebSearchProviderBase() {
4
+ return {
5
+ id: "codex",
6
+ label: "Codex Hosted Search",
7
+ hint: "Grounded answers through your Codex app-server account",
8
+ onboardingScopes: ["text-inference"],
9
+ requiresCredential: false,
10
+ envVars: [],
11
+ placeholder: "(uses Codex sign-in)",
12
+ signupUrl: "https://chatgpt.com/codex",
13
+ docsUrl: "https://docs.openclaw.ai/tools/web",
14
+ autoDetectOrder: 900,
15
+ credentialPath: "",
16
+ ...createWebSearchProviderContractFields({
17
+ credentialPath: "",
18
+ searchCredential: { type: "none" },
19
+ selectionPluginId: "codex"
20
+ }),
21
+ runSetup: async (ctx) => {
22
+ await ctx.prompter.note([
23
+ "Codex Hosted Search uses the bundled Codex app-server and your Codex/OpenAI sign-in.",
24
+ "If needed, sign in with: openclaw models auth login --provider openai",
25
+ "Verify the app-server account with /codex status."
26
+ ].join("\n"), "Codex Hosted Search");
27
+ return ctx.config;
28
+ }
29
+ };
30
+ }
31
+ //#endregion
32
+ export { createCodexWebSearchProviderBase as t };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@openclaw/codex",
3
- "version": "2026.6.8",
3
+ "version": "2026.6.9-beta.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/codex",
9
- "version": "2026.6.8",
9
+ "version": "2026.6.9-beta.1",
10
10
  "dependencies": {
11
11
  "@openai/codex": "0.139.0",
12
12
  "typebox": "1.1.39",
@@ -5,7 +5,8 @@
5
5
  "providers": ["codex"],
6
6
  "contracts": {
7
7
  "mediaUnderstandingProviders": ["codex"],
8
- "migrationProviders": ["codex"]
8
+ "migrationProviders": ["codex"],
9
+ "webSearchProviders": ["codex"]
9
10
  },
10
11
  "mediaUnderstandingProviderMetadata": {
11
12
  "codex": {
@@ -100,7 +101,7 @@
100
101
  "default": false
101
102
  },
102
103
  "allow_destructive_actions": {
103
- "type": "boolean",
104
+ "oneOf": [{ "type": "boolean" }, { "const": "auto" }],
104
105
  "default": true
105
106
  },
106
107
  "plugins": {
@@ -120,7 +121,7 @@
120
121
  "type": "string"
121
122
  },
122
123
  "allow_destructive_actions": {
123
- "type": "boolean"
124
+ "oneOf": [{ "type": "boolean" }, { "const": "auto" }]
124
125
  }
125
126
  }
126
127
  }
@@ -160,6 +161,9 @@
160
161
  "type": "array",
161
162
  "items": { "type": "string" }
162
163
  },
164
+ "remoteWorkspaceRoot": {
165
+ "type": "string"
166
+ },
163
167
  "codeModeOnly": {
164
168
  "type": "boolean",
165
169
  "default": false
@@ -192,6 +196,47 @@
192
196
  "enum": ["user", "auto_review", "guardian_subagent"]
193
197
  },
194
198
  "serviceTier": { "type": ["string", "null"] },
199
+ "networkProxy": {
200
+ "type": "object",
201
+ "additionalProperties": false,
202
+ "properties": {
203
+ "enabled": {
204
+ "type": "boolean",
205
+ "default": false
206
+ },
207
+ "profileName": { "type": "string" },
208
+ "baseProfile": {
209
+ "type": "string",
210
+ "enum": ["read-only", "workspace"]
211
+ },
212
+ "mode": {
213
+ "type": "string",
214
+ "enum": ["limited", "full"]
215
+ },
216
+ "domains": {
217
+ "type": "object",
218
+ "additionalProperties": {
219
+ "type": "string",
220
+ "enum": ["allow", "deny"]
221
+ }
222
+ },
223
+ "unixSockets": {
224
+ "type": "object",
225
+ "additionalProperties": {
226
+ "type": "string",
227
+ "enum": ["allow", "none"]
228
+ }
229
+ },
230
+ "proxyUrl": { "type": "string" },
231
+ "socksUrl": { "type": "string" },
232
+ "enableSocks5": { "type": "boolean" },
233
+ "enableSocks5Udp": { "type": "boolean" },
234
+ "allowUpstreamProxy": { "type": "boolean" },
235
+ "allowLocalBinding": { "type": "boolean" },
236
+ "dangerouslyAllowNonLoopbackProxy": { "type": "boolean" },
237
+ "dangerouslyAllowAllUnixSockets": { "type": "boolean" }
238
+ }
239
+ },
195
240
  "defaultWorkspaceDir": {
196
241
  "type": "string"
197
242
  },
@@ -290,7 +335,7 @@
290
335
  },
291
336
  "codexPlugins.allow_destructive_actions": {
292
337
  "label": "Allow Destructive Plugin Actions",
293
- "help": "Default policy for plugin app write or destructive action elicitations. Defaults to true.",
338
+ "help": "Default policy for plugin app write or destructive action elicitations. Use true to accept safe schemas without prompting, false to decline, or auto to ask through plugin approvals.",
294
339
  "advanced": true
295
340
  },
296
341
  "codexPlugins.plugins": {
@@ -344,6 +389,11 @@
344
389
  "help": "Environment variable names removed from the spawned stdio app-server process after overrides are applied.",
345
390
  "advanced": true
346
391
  },
392
+ "appServer.remoteWorkspaceRoot": {
393
+ "label": "Remote Workspace Root",
394
+ "help": "Remote Codex app-server workspace root used to project OpenClaw cwd suffixes before starting Codex threads.",
395
+ "advanced": true
396
+ },
347
397
  "appServer.codeModeOnly": {
348
398
  "label": "Code Mode Only",
349
399
  "help": "Expose Codex's code-mode-only tool surface. OpenClaw dynamic tools remain available through Codex nested tool calls.",
@@ -384,6 +434,81 @@
384
434
  "help": "Optional Codex app-server service tier. Use priority, flex, or null. Legacy fast is accepted as priority.",
385
435
  "advanced": true
386
436
  },
437
+ "appServer.networkProxy": {
438
+ "label": "Network Proxy",
439
+ "help": "Enable Codex permissions-profile networking for app-server commands.",
440
+ "advanced": true
441
+ },
442
+ "appServer.networkProxy.enabled": {
443
+ "label": "Network Proxy Enabled",
444
+ "help": "When enabled, OpenClaw defines a Codex permissions profile and selects it with default_permissions instead of sandbox fields.",
445
+ "advanced": true
446
+ },
447
+ "appServer.networkProxy.profileName": {
448
+ "label": "Network Proxy Profile",
449
+ "help": "Optional stable Codex permissions profile name. Leave unset to use a generated openclaw-network fingerprint name.",
450
+ "advanced": true
451
+ },
452
+ "appServer.networkProxy.baseProfile": {
453
+ "label": "Network Proxy Base",
454
+ "help": "Filesystem access used by the generated profile. Defaults to read-only for read-only sandboxes and workspace otherwise.",
455
+ "advanced": true
456
+ },
457
+ "appServer.networkProxy.domains": {
458
+ "label": "Network Domains",
459
+ "help": "Domain allow and deny rules for Codex sandboxed networking.",
460
+ "advanced": true
461
+ },
462
+ "appServer.networkProxy.unixSockets": {
463
+ "label": "Unix Sockets",
464
+ "help": "Unix socket allow and none rules for Codex sandboxed networking.",
465
+ "advanced": true
466
+ },
467
+ "appServer.networkProxy.proxyUrl": {
468
+ "label": "HTTP Proxy URL",
469
+ "help": "HTTP listener URL used by Codex sandboxed networking.",
470
+ "advanced": true
471
+ },
472
+ "appServer.networkProxy.socksUrl": {
473
+ "label": "SOCKS Proxy URL",
474
+ "help": "SOCKS listener URL used by Codex sandboxed networking.",
475
+ "advanced": true
476
+ },
477
+ "appServer.networkProxy.enableSocks5": {
478
+ "label": "Enable SOCKS5",
479
+ "help": "Expose SOCKS5 support for the generated Codex permissions profile.",
480
+ "advanced": true
481
+ },
482
+ "appServer.networkProxy.enableSocks5Udp": {
483
+ "label": "Enable SOCKS5 UDP",
484
+ "help": "Allow UDP over the SOCKS5 listener when SOCKS5 is enabled.",
485
+ "advanced": true
486
+ },
487
+ "appServer.networkProxy.allowUpstreamProxy": {
488
+ "label": "Allow Upstream Proxy",
489
+ "help": "Allow Codex sandboxed networking to chain through inherited HTTP(S)_PROXY or ALL_PROXY settings.",
490
+ "advanced": true
491
+ },
492
+ "appServer.networkProxy.allowLocalBinding": {
493
+ "label": "Allow Local Binding",
494
+ "help": "Permit broader local and private-network access through Codex sandboxed networking.",
495
+ "advanced": true
496
+ },
497
+ "appServer.networkProxy.mode": {
498
+ "label": "Network Mode",
499
+ "help": "Codex sandboxed networking mode for subprocess traffic.",
500
+ "advanced": true
501
+ },
502
+ "appServer.networkProxy.dangerouslyAllowNonLoopbackProxy": {
503
+ "label": "Allow Non-Loopback Proxy",
504
+ "help": "Permit non-loopback bind addresses for Codex sandboxed networking listeners.",
505
+ "advanced": true
506
+ },
507
+ "appServer.networkProxy.dangerouslyAllowAllUnixSockets": {
508
+ "label": "Allow All Unix Sockets",
509
+ "help": "Bypass Codex's Unix socket allowlist for tightly controlled environments.",
510
+ "advanced": true
511
+ },
387
512
  "appServer.defaultWorkspaceDir": {
388
513
  "label": "Default Workspace",
389
514
  "help": "Workspace used by /codex bind when --cwd is omitted.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/codex",
3
- "version": "2026.6.8",
3
+ "version": "2026.6.9-beta.1",
4
4
  "description": "OpenClaw Codex app-server harness and model provider plugin with a Codex-managed GPT catalog.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,10 +34,10 @@
34
34
  ]
35
35
  },
36
36
  "compat": {
37
- "pluginApi": ">=2026.6.8"
37
+ "pluginApi": ">=2026.6.9-beta.1"
38
38
  },
39
39
  "build": {
40
- "openclawVersion": "2026.6.8"
40
+ "openclawVersion": "2026.6.9-beta.1"
41
41
  },
42
42
  "release": {
43
43
  "publishToClawHub": true,
@@ -55,7 +55,7 @@
55
55
  "README.md"
56
56
  ],
57
57
  "peerDependencies": {
58
- "openclaw": ">=2026.6.8"
58
+ "openclaw": ">=2026.6.9-beta.1"
59
59
  },
60
60
  "peerDependenciesMeta": {
61
61
  "openclaw": {