mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
chore(codex): update app-server to 0.144.6 [AI] (#110821)
* build(codex): bump app-server to 0.144.6 * build(codex): align ACP runtime to 0.144.6 * test(codex): harden live image probe * test(codex): accept alphanumeric image tokens * test(codex): stabilize image probe glyphs * test(gateway): disable cron probe delivery * test(codex): enlarge live image token * test(codex): tie compaction proof to native output * test(codex): accept wrapped native stress commands * test(codex): stabilize compaction acknowledgements * docs(changelog): note Codex 0.144.6 update * docs(changelog): defer Codex note to release
This commit is contained in:
committed by
GitHub
parent
138d2d071c
commit
04a9552a1f
@@ -131,7 +131,7 @@ flags, and plugin allow/deny references into this block. Explicit canonical
|
||||
## App-server transport
|
||||
|
||||
For ordinary harness turns, OpenClaw starts the managed Codex binary shipped
|
||||
with the official plugin (currently `@openai/codex` `0.144.5`):
|
||||
with the official plugin (currently `@openai/codex` `0.144.6`):
|
||||
|
||||
```bash
|
||||
codex app-server --listen stdio://
|
||||
@@ -255,7 +255,7 @@ networking, so a full-access profile would not protect outbound traffic.
|
||||
|
||||
The plugin blocks older, newer-unvalidated, prerelease, build-suffixed, or
|
||||
unversioned app-server handshakes. Codex app-server must report a stable version
|
||||
from `0.143.0` through the bundled `0.144.5`.
|
||||
from `0.143.0` through the bundled `0.144.6`.
|
||||
|
||||
OpenClaw treats non-loopback WebSocket app-server URLs as remote and requires
|
||||
identity-bearing WebSocket auth through `appServer.authToken` or an
|
||||
@@ -599,7 +599,7 @@ If discovery fails or times out, OpenClaw uses a bundled fallback catalog:
|
||||
| `gpt-5.4-mini` | GPT-5.4-Mini | low, medium, high, xhigh |
|
||||
|
||||
<Note>
|
||||
The current bundled harness is `@openai/codex` `0.144.5`. A `model/list` probe
|
||||
The current bundled harness is `@openai/codex` `0.144.6`. A `model/list` probe
|
||||
against that bundled app-server returned these public picker rows:
|
||||
|
||||
| Model id | Input modalities | Reasoning efforts |
|
||||
|
||||
@@ -56,7 +56,7 @@ channel is the communication surface.
|
||||
|
||||
- The official `@openclaw/codex` plugin installed. Include `codex` in
|
||||
`plugins.allow` if your config uses an allowlist.
|
||||
- A stable Codex app-server from `0.143.0` through `0.144.5`. The plugin manages a compatible
|
||||
- A stable Codex app-server from `0.143.0` through `0.144.6`. The plugin manages a compatible
|
||||
binary by default, so a `codex` command on `PATH` does not affect normal
|
||||
startup.
|
||||
- Codex auth through `openclaw models auth login --provider openai`, an
|
||||
@@ -976,7 +976,7 @@ Doctor rewrites legacy model refs to `openai/*`, removes stale session and
|
||||
whole-agent runtime pins, and preserves existing auth-profile overrides.
|
||||
|
||||
**The app-server is rejected:** use a stable Codex app-server from `0.143.0`
|
||||
through the bundled `0.144.5`. Prereleases, build-suffixed versions, and newer
|
||||
through the bundled `0.144.6`. Prereleases, build-suffixed versions, and newer
|
||||
unvalidated releases are rejected because OpenClaw validates generated schemas
|
||||
against the bundled app-server version.
|
||||
|
||||
|
||||
Generated
+27
-27
@@ -722,9 +722,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@openai/codex": {
|
||||
"version": "0.144.4",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4.tgz",
|
||||
"integrity": "sha512-DTHzYatlKq9dw55E0/HsbK4tRCEKabuJ10ybbqpsG8gVv/kvwEdg3Z4OI3cvLXKa21xkIa4lkGlZoO/HmqmFFw==",
|
||||
"version": "0.144.6",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6.tgz",
|
||||
"integrity": "sha512-wk+2CWiBNXiJLBoN2D08N9RceWkSBnlgk5g2K1a4CXrP/C0gdlHyRUG7RFzm9y41DCK/7tvCct233JVxyFmznw==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"codex": "bin/codex.js"
|
||||
@@ -733,19 +733,19 @@
|
||||
"node": ">=16"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@openai/codex-darwin-arm64": "npm:@openai/codex@0.144.4-darwin-arm64",
|
||||
"@openai/codex-darwin-x64": "npm:@openai/codex@0.144.4-darwin-x64",
|
||||
"@openai/codex-linux-arm64": "npm:@openai/codex@0.144.4-linux-arm64",
|
||||
"@openai/codex-linux-x64": "npm:@openai/codex@0.144.4-linux-x64",
|
||||
"@openai/codex-win32-arm64": "npm:@openai/codex@0.144.4-win32-arm64",
|
||||
"@openai/codex-win32-x64": "npm:@openai/codex@0.144.4-win32-x64"
|
||||
"@openai/codex-darwin-arm64": "npm:@openai/codex@0.144.6-darwin-arm64",
|
||||
"@openai/codex-darwin-x64": "npm:@openai/codex@0.144.6-darwin-x64",
|
||||
"@openai/codex-linux-arm64": "npm:@openai/codex@0.144.6-linux-arm64",
|
||||
"@openai/codex-linux-x64": "npm:@openai/codex@0.144.6-linux-x64",
|
||||
"@openai/codex-win32-arm64": "npm:@openai/codex@0.144.6-win32-arm64",
|
||||
"@openai/codex-win32-x64": "npm:@openai/codex@0.144.6-win32-x64"
|
||||
}
|
||||
},
|
||||
"node_modules/@openai/codex-darwin-arm64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.4-darwin-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-darwin-arm64.tgz",
|
||||
"integrity": "sha512-6J3g498cM2oA7vYIJhpuGJlnIi/M5JdYmjB5BZ1Of5HQ0ziIlplFSvH801oVy9J5TQFp642ODzOu/ZEokDUXsg==",
|
||||
"version": "0.144.6-darwin-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-darwin-arm64.tgz",
|
||||
"integrity": "sha512-6zgvh70MzBNSeT17HEhSOrmmGGZGAKzSC7x6JAq+edkJkdPYA9P0I1tG7aJ49GlBkBxuC+MKBH1qm6+2Cghcww==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -760,9 +760,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-darwin-x64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.4-darwin-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-darwin-x64.tgz",
|
||||
"integrity": "sha512-k1HC8gdbAy+VmMbekYkhM+r+QE2Xfgd67n1VSp94tjz7aXVKoalHcDkdKNM/uUQ8o2tvbiwhHSUftJF8Sm9/Lw==",
|
||||
"version": "0.144.6-darwin-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-darwin-x64.tgz",
|
||||
"integrity": "sha512-THRyPG0zSU6M8NQAge1LHEHsJDnoH4BpKsfJHB/qe3Fm+Wf6zqAmWJFlOKzBm27m0K2Hq3za4Ac2I5p5i4yp/A==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -777,9 +777,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-linux-arm64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.4-linux-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-linux-arm64.tgz",
|
||||
"integrity": "sha512-OlKx65579OwIzech9Tt3OUH9+hFZfFrCBP1hL2MudnMIoNr1+cFZjB5YIj5MWMRoBD+K5W3wdBIpQSH855b5Sg==",
|
||||
"version": "0.144.6-linux-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-linux-arm64.tgz",
|
||||
"integrity": "sha512-PGiLXMN+2IQRkf7tOLi64dMInjU1pRLbz0Rwfj/yt2Y97SZQqAjFQoi2wmswmqtqMDnfwCPTC1DRXVQkvU6T6Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -794,9 +794,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-linux-x64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.4-linux-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-linux-x64.tgz",
|
||||
"integrity": "sha512-2jxrmV6+/7eBNdg5uhhmOEPFu2o28eYY/ClLzWhSBHH8uo3f2KA1z9JQcVtwlbToW03nEPlEzYNYfCF1UBqsVQ==",
|
||||
"version": "0.144.6-linux-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-linux-x64.tgz",
|
||||
"integrity": "sha512-4E7EnzCg0OnBxCyYnwJ+qnZwWHYe0YScr5ucKWbngE9u4+0XrpWELqq2Kn9jl5GZK8MDjU7PrJwFIwusHOHjuw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -811,9 +811,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-win32-arm64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.4-win32-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-win32-arm64.tgz",
|
||||
"integrity": "sha512-CCgfI1smFhHZTIpTuBwDJwBr/AR40RTqaFxbBWVabu0RMeYDteRuPiDfdTlktf3C43Y1q10VZXhVGYtCokDg2w==",
|
||||
"version": "0.144.6-win32-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-win32-arm64.tgz",
|
||||
"integrity": "sha512-SpMjXJLW43JzMP0K62mVcYfmFcpk0BK4AOgYmWSfyZHs3iRtHMd0UYw7605n/9lwkT2EqbwQLT2omZFeKJFzwA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -828,9 +828,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-win32-x64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.4-win32-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.4-win32-x64.tgz",
|
||||
"integrity": "sha512-iL1ky0ERgdQJOKzom/Ms1fhpwkSmpsA9eVrzAqURFlYGS8z7JqwEgm33+nLGCsY7y25d8Xs/LJ91Oiqz3yXcUg==",
|
||||
"version": "0.144.6-win32-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-win32-x64.tgz",
|
||||
"integrity": "sha512-dN39VnjEthKz5io1RNWwZDtErdSn07nW3pGUgvlA6DMxgm/nuGaIAZO/sG/Hgxq/x5j9HteAENfrFgVkpZ0lFg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
||||
Generated
+28
-28
@@ -8,7 +8,7 @@
|
||||
"name": "@openclaw/codex",
|
||||
"version": "2026.7.2",
|
||||
"dependencies": {
|
||||
"@openai/codex": "0.144.5",
|
||||
"@openai/codex": "0.144.6",
|
||||
"semver": "7.8.5",
|
||||
"smol-toml": "1.7.0",
|
||||
"typebox": "1.3.3",
|
||||
@@ -17,9 +17,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@openai/codex": {
|
||||
"version": "0.144.5",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.5.tgz",
|
||||
"integrity": "sha512-jjB+K+OMv572mKhS+2QuLxWXDJNdpwbPenf+V+8bdq7wg4Scqt3cn6WEekD8wPqDVZqck0HSX17K9rD9kbDJQA==",
|
||||
"version": "0.144.6",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6.tgz",
|
||||
"integrity": "sha512-wk+2CWiBNXiJLBoN2D08N9RceWkSBnlgk5g2K1a4CXrP/C0gdlHyRUG7RFzm9y41DCK/7tvCct233JVxyFmznw==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"codex": "bin/codex.js"
|
||||
@@ -28,19 +28,19 @@
|
||||
"node": ">=16"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@openai/codex-darwin-arm64": "npm:@openai/codex@0.144.5-darwin-arm64",
|
||||
"@openai/codex-darwin-x64": "npm:@openai/codex@0.144.5-darwin-x64",
|
||||
"@openai/codex-linux-arm64": "npm:@openai/codex@0.144.5-linux-arm64",
|
||||
"@openai/codex-linux-x64": "npm:@openai/codex@0.144.5-linux-x64",
|
||||
"@openai/codex-win32-arm64": "npm:@openai/codex@0.144.5-win32-arm64",
|
||||
"@openai/codex-win32-x64": "npm:@openai/codex@0.144.5-win32-x64"
|
||||
"@openai/codex-darwin-arm64": "npm:@openai/codex@0.144.6-darwin-arm64",
|
||||
"@openai/codex-darwin-x64": "npm:@openai/codex@0.144.6-darwin-x64",
|
||||
"@openai/codex-linux-arm64": "npm:@openai/codex@0.144.6-linux-arm64",
|
||||
"@openai/codex-linux-x64": "npm:@openai/codex@0.144.6-linux-x64",
|
||||
"@openai/codex-win32-arm64": "npm:@openai/codex@0.144.6-win32-arm64",
|
||||
"@openai/codex-win32-x64": "npm:@openai/codex@0.144.6-win32-x64"
|
||||
}
|
||||
},
|
||||
"node_modules/@openai/codex-darwin-arm64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.5-darwin-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.5-darwin-arm64.tgz",
|
||||
"integrity": "sha512-zcT6NfBCqLFt+BReNSETTZW6v6PdbH0dzNtm9j7l7mDGqwPbKZDGJdnpkBao2389I0ZacyIKgSZoI0vez1d4Dw==",
|
||||
"version": "0.144.6-darwin-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-darwin-arm64.tgz",
|
||||
"integrity": "sha512-6zgvh70MzBNSeT17HEhSOrmmGGZGAKzSC7x6JAq+edkJkdPYA9P0I1tG7aJ49GlBkBxuC+MKBH1qm6+2Cghcww==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -55,9 +55,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-darwin-x64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.5-darwin-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.5-darwin-x64.tgz",
|
||||
"integrity": "sha512-//Mo0m1MwaoT6psu5xsmofXpKx4/0irIkeq10xJvk59+886EG355ibjA+ZmlRcKhE3bLjsKD7p81nTbAdRL/bw==",
|
||||
"version": "0.144.6-darwin-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-darwin-x64.tgz",
|
||||
"integrity": "sha512-THRyPG0zSU6M8NQAge1LHEHsJDnoH4BpKsfJHB/qe3Fm+Wf6zqAmWJFlOKzBm27m0K2Hq3za4Ac2I5p5i4yp/A==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -72,9 +72,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-linux-arm64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.5-linux-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.5-linux-arm64.tgz",
|
||||
"integrity": "sha512-zAHggxVwR2TBxKmybXY7ZMiB0G8DMonY2YPdwNNjwXcf+LOIqNGgswwNCDMbP/HEe6r8j+R9ZX/yYoo8f+n/RQ==",
|
||||
"version": "0.144.6-linux-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-linux-arm64.tgz",
|
||||
"integrity": "sha512-PGiLXMN+2IQRkf7tOLi64dMInjU1pRLbz0Rwfj/yt2Y97SZQqAjFQoi2wmswmqtqMDnfwCPTC1DRXVQkvU6T6Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -89,9 +89,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-linux-x64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.5-linux-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.5-linux-x64.tgz",
|
||||
"integrity": "sha512-FalLJlBQGFdK8Gc3kj9sa/ekNdgkHhUawLaKkvy5CtB18JaP2YxtTP/Pe1pD2iBiq8mMUliRnafpF6AdBdQMbg==",
|
||||
"version": "0.144.6-linux-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-linux-x64.tgz",
|
||||
"integrity": "sha512-4E7EnzCg0OnBxCyYnwJ+qnZwWHYe0YScr5ucKWbngE9u4+0XrpWELqq2Kn9jl5GZK8MDjU7PrJwFIwusHOHjuw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -106,9 +106,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-win32-arm64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.5-win32-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.5-win32-arm64.tgz",
|
||||
"integrity": "sha512-0Pj7iqjEOEvPQPO3kFfCy9vGX4BTu76ChFFZHr2eNNIfVc3FOENAv/X98u4L+iIUtDOK9DbqmfUudW3DPapshg==",
|
||||
"version": "0.144.6-win32-arm64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-win32-arm64.tgz",
|
||||
"integrity": "sha512-SpMjXJLW43JzMP0K62mVcYfmFcpk0BK4AOgYmWSfyZHs3iRtHMd0UYw7605n/9lwkT2EqbwQLT2omZFeKJFzwA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -123,9 +123,9 @@
|
||||
},
|
||||
"node_modules/@openai/codex-win32-x64": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.144.5-win32-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.5-win32-x64.tgz",
|
||||
"integrity": "sha512-DnsSTlnnzleTxvLwIGnBitKInscxn2I7qASqosS8Fv+qysBygd+ZiBn/SQsRCgQ28PAlsNzmd3Gf3ZTecolAmg==",
|
||||
"version": "0.144.6-win32-x64",
|
||||
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.144.6-win32-x64.tgz",
|
||||
"integrity": "sha512-dN39VnjEthKz5io1RNWwZDtErdSn07nW3pGUgvlA6DMxgm/nuGaIAZO/sG/Hgxq/x5j9HteAENfrFgVkpZ0lFg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@openai/codex": "0.144.5",
|
||||
"@openai/codex": "0.144.6",
|
||||
"semver": "7.8.5",
|
||||
"smol-toml": "1.7.0",
|
||||
"typebox": "1.3.3",
|
||||
|
||||
@@ -257,7 +257,7 @@ describe("shared Codex app-server client", () => {
|
||||
await sendInitializeResult(harness, "openclaw/0.117.9 (macOS; test)");
|
||||
|
||||
await expect(listPromise).rejects.toThrow(
|
||||
"A stable Codex app-server from 0.143.0 through 0.144.5 is required",
|
||||
"A stable Codex app-server from 0.143.0 through 0.144.6 is required",
|
||||
);
|
||||
expect(harness.process.stdin.destroyed).toBe(true);
|
||||
startSpy.mockRestore();
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
/** Minimum Codex app-server version supported by the OpenClaw Codex bridge. */
|
||||
export const MIN_CODEX_APP_SERVER_VERSION = "0.143.0";
|
||||
/** Newest Codex app-server version validated by the OpenClaw Codex bridge. */
|
||||
export const MAX_CODEX_APP_SERVER_VERSION = "0.144.5";
|
||||
export const MAX_CODEX_APP_SERVER_VERSION = "0.144.6";
|
||||
/** npm package name for the managed Codex app-server binary. */
|
||||
export const MANAGED_CODEX_APP_SERVER_PACKAGE = "@openai/codex";
|
||||
|
||||
Generated
+30
-98
@@ -591,8 +591,8 @@ importers:
|
||||
extensions/codex:
|
||||
dependencies:
|
||||
'@openai/codex':
|
||||
specifier: 0.144.5
|
||||
version: 0.144.5
|
||||
specifier: 0.144.6
|
||||
version: 0.144.6
|
||||
semver:
|
||||
specifier: 7.8.5
|
||||
version: 7.8.5
|
||||
@@ -3643,84 +3643,43 @@ packages:
|
||||
resolution: {integrity: sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==}
|
||||
engines: {node: ^20.17.0 || >=22.9.0}
|
||||
|
||||
'@openai/codex@0.144.4':
|
||||
resolution: {integrity: sha512-DTHzYatlKq9dw55E0/HsbK4tRCEKabuJ10ybbqpsG8gVv/kvwEdg3Z4OI3cvLXKa21xkIa4lkGlZoO/HmqmFFw==}
|
||||
'@openai/codex@0.144.6':
|
||||
resolution: {integrity: sha512-wk+2CWiBNXiJLBoN2D08N9RceWkSBnlgk5g2K1a4CXrP/C0gdlHyRUG7RFzm9y41DCK/7tvCct233JVxyFmznw==}
|
||||
engines: {node: '>=16'}
|
||||
hasBin: true
|
||||
|
||||
'@openai/codex@0.144.4-darwin-arm64':
|
||||
resolution: {integrity: sha512-6J3g498cM2oA7vYIJhpuGJlnIi/M5JdYmjB5BZ1Of5HQ0ziIlplFSvH801oVy9J5TQFp642ODzOu/ZEokDUXsg==}
|
||||
'@openai/codex@0.144.6-darwin-arm64':
|
||||
resolution: {integrity: sha512-6zgvh70MzBNSeT17HEhSOrmmGGZGAKzSC7x6JAq+edkJkdPYA9P0I1tG7aJ49GlBkBxuC+MKBH1qm6+2Cghcww==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@openai/codex@0.144.4-darwin-x64':
|
||||
resolution: {integrity: sha512-k1HC8gdbAy+VmMbekYkhM+r+QE2Xfgd67n1VSp94tjz7aXVKoalHcDkdKNM/uUQ8o2tvbiwhHSUftJF8Sm9/Lw==}
|
||||
'@openai/codex@0.144.6-darwin-x64':
|
||||
resolution: {integrity: sha512-THRyPG0zSU6M8NQAge1LHEHsJDnoH4BpKsfJHB/qe3Fm+Wf6zqAmWJFlOKzBm27m0K2Hq3za4Ac2I5p5i4yp/A==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@openai/codex@0.144.4-linux-arm64':
|
||||
resolution: {integrity: sha512-OlKx65579OwIzech9Tt3OUH9+hFZfFrCBP1hL2MudnMIoNr1+cFZjB5YIj5MWMRoBD+K5W3wdBIpQSH855b5Sg==}
|
||||
'@openai/codex@0.144.6-linux-arm64':
|
||||
resolution: {integrity: sha512-PGiLXMN+2IQRkf7tOLi64dMInjU1pRLbz0Rwfj/yt2Y97SZQqAjFQoi2wmswmqtqMDnfwCPTC1DRXVQkvU6T6Q==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@openai/codex@0.144.4-linux-x64':
|
||||
resolution: {integrity: sha512-2jxrmV6+/7eBNdg5uhhmOEPFu2o28eYY/ClLzWhSBHH8uo3f2KA1z9JQcVtwlbToW03nEPlEzYNYfCF1UBqsVQ==}
|
||||
'@openai/codex@0.144.6-linux-x64':
|
||||
resolution: {integrity: sha512-4E7EnzCg0OnBxCyYnwJ+qnZwWHYe0YScr5ucKWbngE9u4+0XrpWELqq2Kn9jl5GZK8MDjU7PrJwFIwusHOHjuw==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@openai/codex@0.144.4-win32-arm64':
|
||||
resolution: {integrity: sha512-CCgfI1smFhHZTIpTuBwDJwBr/AR40RTqaFxbBWVabu0RMeYDteRuPiDfdTlktf3C43Y1q10VZXhVGYtCokDg2w==}
|
||||
'@openai/codex@0.144.6-win32-arm64':
|
||||
resolution: {integrity: sha512-SpMjXJLW43JzMP0K62mVcYfmFcpk0BK4AOgYmWSfyZHs3iRtHMd0UYw7605n/9lwkT2EqbwQLT2omZFeKJFzwA==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@openai/codex@0.144.4-win32-x64':
|
||||
resolution: {integrity: sha512-iL1ky0ERgdQJOKzom/Ms1fhpwkSmpsA9eVrzAqURFlYGS8z7JqwEgm33+nLGCsY7y25d8Xs/LJ91Oiqz3yXcUg==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@openai/codex@0.144.5':
|
||||
resolution: {integrity: sha512-jjB+K+OMv572mKhS+2QuLxWXDJNdpwbPenf+V+8bdq7wg4Scqt3cn6WEekD8wPqDVZqck0HSX17K9rD9kbDJQA==}
|
||||
engines: {node: '>=16'}
|
||||
hasBin: true
|
||||
|
||||
'@openai/codex@0.144.5-darwin-arm64':
|
||||
resolution: {integrity: sha512-zcT6NfBCqLFt+BReNSETTZW6v6PdbH0dzNtm9j7l7mDGqwPbKZDGJdnpkBao2389I0ZacyIKgSZoI0vez1d4Dw==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@openai/codex@0.144.5-darwin-x64':
|
||||
resolution: {integrity: sha512-//Mo0m1MwaoT6psu5xsmofXpKx4/0irIkeq10xJvk59+886EG355ibjA+ZmlRcKhE3bLjsKD7p81nTbAdRL/bw==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@openai/codex@0.144.5-linux-arm64':
|
||||
resolution: {integrity: sha512-zAHggxVwR2TBxKmybXY7ZMiB0G8DMonY2YPdwNNjwXcf+LOIqNGgswwNCDMbP/HEe6r8j+R9ZX/yYoo8f+n/RQ==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@openai/codex@0.144.5-linux-x64':
|
||||
resolution: {integrity: sha512-FalLJlBQGFdK8Gc3kj9sa/ekNdgkHhUawLaKkvy5CtB18JaP2YxtTP/Pe1pD2iBiq8mMUliRnafpF6AdBdQMbg==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@openai/codex@0.144.5-win32-arm64':
|
||||
resolution: {integrity: sha512-0Pj7iqjEOEvPQPO3kFfCy9vGX4BTu76ChFFZHr2eNNIfVc3FOENAv/X98u4L+iIUtDOK9DbqmfUudW3DPapshg==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@openai/codex@0.144.5-win32-x64':
|
||||
resolution: {integrity: sha512-DnsSTlnnzleTxvLwIGnBitKInscxn2I7qASqosS8Fv+qysBygd+ZiBn/SQsRCgQ28PAlsNzmd3Gf3ZTecolAmg==}
|
||||
'@openai/codex@0.144.6-win32-x64':
|
||||
resolution: {integrity: sha512-dN39VnjEthKz5io1RNWwZDtErdSn07nW3pGUgvlA6DMxgm/nuGaIAZO/sG/Hgxq/x5j9HteAENfrFgVkpZ0lFg==}
|
||||
engines: {node: '>=16'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
@@ -8398,7 +8357,7 @@ snapshots:
|
||||
'@agentclientprotocol/codex-acp@1.1.2':
|
||||
dependencies:
|
||||
'@agentclientprotocol/sdk': 1.2.1(zod@4.4.3)
|
||||
'@openai/codex': 0.144.4
|
||||
'@openai/codex': 0.144.6
|
||||
diff: 9.0.0
|
||||
open: 11.0.0
|
||||
vscode-jsonrpc: 9.0.1
|
||||
@@ -10057,58 +10016,31 @@ snapshots:
|
||||
|
||||
'@npmcli/redact@4.0.0': {}
|
||||
|
||||
'@openai/codex@0.144.4':
|
||||
'@openai/codex@0.144.6':
|
||||
optionalDependencies:
|
||||
'@openai/codex-darwin-arm64': '@openai/codex@0.144.4-darwin-arm64'
|
||||
'@openai/codex-darwin-x64': '@openai/codex@0.144.4-darwin-x64'
|
||||
'@openai/codex-linux-arm64': '@openai/codex@0.144.4-linux-arm64'
|
||||
'@openai/codex-linux-x64': '@openai/codex@0.144.4-linux-x64'
|
||||
'@openai/codex-win32-arm64': '@openai/codex@0.144.4-win32-arm64'
|
||||
'@openai/codex-win32-x64': '@openai/codex@0.144.4-win32-x64'
|
||||
'@openai/codex-darwin-arm64': '@openai/codex@0.144.6-darwin-arm64'
|
||||
'@openai/codex-darwin-x64': '@openai/codex@0.144.6-darwin-x64'
|
||||
'@openai/codex-linux-arm64': '@openai/codex@0.144.6-linux-arm64'
|
||||
'@openai/codex-linux-x64': '@openai/codex@0.144.6-linux-x64'
|
||||
'@openai/codex-win32-arm64': '@openai/codex@0.144.6-win32-arm64'
|
||||
'@openai/codex-win32-x64': '@openai/codex@0.144.6-win32-x64'
|
||||
|
||||
'@openai/codex@0.144.4-darwin-arm64':
|
||||
'@openai/codex@0.144.6-darwin-arm64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.4-darwin-x64':
|
||||
'@openai/codex@0.144.6-darwin-x64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.4-linux-arm64':
|
||||
'@openai/codex@0.144.6-linux-arm64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.4-linux-x64':
|
||||
'@openai/codex@0.144.6-linux-x64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.4-win32-arm64':
|
||||
'@openai/codex@0.144.6-win32-arm64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.4-win32-x64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.5':
|
||||
optionalDependencies:
|
||||
'@openai/codex-darwin-arm64': '@openai/codex@0.144.5-darwin-arm64'
|
||||
'@openai/codex-darwin-x64': '@openai/codex@0.144.5-darwin-x64'
|
||||
'@openai/codex-linux-arm64': '@openai/codex@0.144.5-linux-arm64'
|
||||
'@openai/codex-linux-x64': '@openai/codex@0.144.5-linux-x64'
|
||||
'@openai/codex-win32-arm64': '@openai/codex@0.144.5-win32-arm64'
|
||||
'@openai/codex-win32-x64': '@openai/codex@0.144.5-win32-x64'
|
||||
|
||||
'@openai/codex@0.144.5-darwin-arm64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.5-darwin-x64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.5-linux-arm64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.5-linux-x64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.5-win32-arm64':
|
||||
optional: true
|
||||
|
||||
'@openai/codex@0.144.5-win32-x64':
|
||||
'@openai/codex@0.144.6-win32-x64':
|
||||
optional: true
|
||||
|
||||
'@openclaw/crabline@0.1.11':
|
||||
|
||||
@@ -802,7 +802,11 @@ function formatAssistantTextPreview(texts: string[], maxChars = 800): string {
|
||||
if (!combined) {
|
||||
return "<none>";
|
||||
}
|
||||
return combined.length > maxChars ? `${combined.slice(0, maxChars)}...` : combined;
|
||||
if (combined.length <= maxChars) {
|
||||
return combined;
|
||||
}
|
||||
const half = Math.floor(maxChars / 2);
|
||||
return `${combined.slice(0, half)}\n...\n${combined.slice(-half)}`;
|
||||
}
|
||||
|
||||
async function readCodexHarnessCompactionCount(params: {
|
||||
@@ -852,30 +856,69 @@ async function verifyCodexCompactionStress(params: {
|
||||
let completedCompactions = 0;
|
||||
let reportedCompactions = 0;
|
||||
for (let turn = 1; turn <= CODEX_HARNESS_COMPACTION_STRESS_TURNS; turn += 1) {
|
||||
const acknowledgement = `CODEX-LARGE-OUTPUT-${turn}-${randomBytes(3)
|
||||
.toString("hex")
|
||||
.toUpperCase()}`;
|
||||
const acknowledgement = `CODEX-LARGE-OUTPUT-${turn}-OK`;
|
||||
const largeOutputCommand = `node -e 'for(let i=0;i<${outputLines};i++){console.log(i.toString(36).padStart(8,"0")+"-"+((i*2654435761)>>>0).toString(16).padStart(8,"0")+"-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")}'`;
|
||||
const { text, events, compactionCount } = await requestAgentTextWithEvents({
|
||||
client: params.client,
|
||||
eventPrefixes: ["codex_app_server.", "compaction"],
|
||||
eventPrefixes: ["codex_app_server.", "compaction", "tool"],
|
||||
sessionKey: params.sessionKey,
|
||||
message: [
|
||||
"Large-output compaction probe.",
|
||||
"Use the native exec_command tool exactly once.",
|
||||
`Run this exact command: node -e 'for(let i=0;i<${outputLines};i++){console.log(i.toString(36).padStart(8,"0")+"-"+((i*2654435761)>>>0).toString(16).padStart(8,"0")+"-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")}'`,
|
||||
`Run this exact command: ${largeOutputCommand}`,
|
||||
"Set max_output_tokens to 10000.",
|
||||
`After the tool completes, reply exactly ${acknowledgement} and nothing else.`,
|
||||
].join("\n"),
|
||||
});
|
||||
expect(text).toContain(acknowledgement);
|
||||
recordCodexAttemptIdentity({ events, sessionKey: params.sessionKey });
|
||||
completedCompactions += events.filter(
|
||||
const turnCompletedCompactions = events.filter(
|
||||
(event) =>
|
||||
event.stream === "compaction" &&
|
||||
event.data?.phase === "end" &&
|
||||
event.data?.completed === true,
|
||||
).length;
|
||||
completedCompactions += turnCompletedCompactions;
|
||||
reportedCompactions += compactionCount;
|
||||
const commandStartIndex = events.findIndex((event) => {
|
||||
if (
|
||||
event.stream !== "tool" ||
|
||||
event.data?.phase !== "start" ||
|
||||
event.data?.name !== "bash" ||
|
||||
!event.data?.args ||
|
||||
typeof event.data.args !== "object"
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
const command = (event.data.args as { command?: unknown }).command;
|
||||
// Codex may preserve the command text or wrap it in a login shell.
|
||||
return (
|
||||
typeof command === "string" &&
|
||||
command.includes("node -e") &&
|
||||
command.includes(`i<${outputLines}`) &&
|
||||
command.includes("2654435761") &&
|
||||
command.includes("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
|
||||
);
|
||||
});
|
||||
const commandItemId = events[commandStartIndex]?.data?.itemId;
|
||||
const commandResultIndex = events.findIndex((event, index) => {
|
||||
const result = event.data?.result;
|
||||
return (
|
||||
index > commandStartIndex &&
|
||||
event.stream === "tool" &&
|
||||
event.data?.phase === "result" &&
|
||||
event.data?.itemId === commandItemId &&
|
||||
event.data?.status === "completed" &&
|
||||
event.data?.isError === false &&
|
||||
result !== null &&
|
||||
typeof result === "object" &&
|
||||
(result as { exitCode?: unknown }).exitCode === 0
|
||||
);
|
||||
});
|
||||
expect(
|
||||
commandResultIndex,
|
||||
`large-output turn did not successfully complete the exact native command; events=${JSON.stringify(events)}`,
|
||||
).toBeGreaterThan(commandStartIndex);
|
||||
|
||||
const history: { messages?: unknown[] } = await params.client.request("chat.history", {
|
||||
sessionKey: params.sessionKey,
|
||||
@@ -885,9 +928,18 @@ async function verifyCodexCompactionStress(params: {
|
||||
const originalLengths = Array.from(serialized.matchAll(/original (\d+) chars/gu), (match) =>
|
||||
Number(match[1]),
|
||||
);
|
||||
const hasTruncatedToolResult = originalLengths.some((length) => length > 10_000);
|
||||
const postCommandCompaction = events.some(
|
||||
(event, index) =>
|
||||
index > commandResultIndex &&
|
||||
event.stream === "compaction" &&
|
||||
event.data?.phase === "end" &&
|
||||
event.data?.completed === true,
|
||||
);
|
||||
// Native compaction can replace the command row after the successful large-output result.
|
||||
expect(
|
||||
originalLengths.some((length) => length > 10_000),
|
||||
`expected a truncated large native tool result; lengths=${JSON.stringify(originalLengths)}`,
|
||||
hasTruncatedToolResult || postCommandCompaction,
|
||||
`expected a truncated large native tool result or its later native compaction; lengths=${JSON.stringify(originalLengths)}`,
|
||||
).toBe(true);
|
||||
}
|
||||
|
||||
@@ -940,12 +992,9 @@ async function waitForAssistantText(params: {
|
||||
limit: 24,
|
||||
});
|
||||
const assistantTexts = extractAssistantTexts(history.messages ?? []);
|
||||
const normalizedContains = params.contains.toUpperCase();
|
||||
const normalizedContains = normalizeAssistantTokenText(params.contains);
|
||||
const matched = assistantTexts.find((text) =>
|
||||
text
|
||||
.toUpperCase()
|
||||
.replace(/[^A-F0-9]/g, "")
|
||||
.includes(normalizedContains),
|
||||
normalizeAssistantTokenText(text).includes(normalizedContains),
|
||||
);
|
||||
if (matched) {
|
||||
return matched;
|
||||
@@ -964,6 +1013,10 @@ async function waitForAssistantText(params: {
|
||||
);
|
||||
}
|
||||
|
||||
function normalizeAssistantTokenText(text: string): string {
|
||||
return text.toUpperCase().replace(/[^A-Z0-9]/g, "");
|
||||
}
|
||||
|
||||
async function verifyCodexImageProbe(params: {
|
||||
client: GatewayClient;
|
||||
sessionKey: string;
|
||||
@@ -1033,7 +1086,7 @@ async function verifyCodexChatImageProbe(params: {
|
||||
{
|
||||
mimeType: "image/png",
|
||||
fileName: "codex-chat-image-probe.png",
|
||||
content: renderBitmapTextPngBase64(token),
|
||||
content: renderBitmapTextPngBase64(token, { scale: 12, padding: 24 }),
|
||||
},
|
||||
],
|
||||
originatingChannel: "codex-harness-live",
|
||||
@@ -1051,14 +1104,15 @@ async function verifyCodexChatImageProbe(params: {
|
||||
sessionKey: params.sessionKey,
|
||||
contains: token,
|
||||
});
|
||||
const normalized = text.toUpperCase().replace(/[^A-F0-9]/g, "");
|
||||
const normalized = normalizeAssistantTokenText(text);
|
||||
expect(normalized, `Expected Codex to read bitmap token ${token}; received:\n${text}`).toContain(
|
||||
token,
|
||||
);
|
||||
}
|
||||
|
||||
function randomBitmapTextToken(length = 6): string {
|
||||
const alphabet = "24567ACEF";
|
||||
// Keep glyphs visually distinct so this checks image transport, not tiny-font OCR quality.
|
||||
const alphabet = "247";
|
||||
return [...randomBytes(length)].map((byte) => alphabet[byte % alphabet.length]).join("");
|
||||
}
|
||||
|
||||
@@ -1747,7 +1801,13 @@ describeLive("gateway live (Codex harness)", () => {
|
||||
|
||||
if (CODEX_HARNESS_CHAT_IMAGE_PROBE) {
|
||||
logCodexLiveStep("chat-image-probe:start", { sessionKey });
|
||||
await verifyCodexChatImageProbe({ client: activeClient, sessionKey });
|
||||
const unsubscribeChatImageDebugEvents =
|
||||
await subscribeCodexLiveDebugEvents(sessionKey);
|
||||
try {
|
||||
await verifyCodexChatImageProbe({ client: activeClient, sessionKey });
|
||||
} finally {
|
||||
unsubscribeChatImageDebugEvents();
|
||||
}
|
||||
logCodexLiveStep("chat-image-probe:done");
|
||||
}
|
||||
|
||||
|
||||
@@ -74,11 +74,17 @@ describe("live-agent-probes", () => {
|
||||
}),
|
||||
).toContain("previous OpenClaw cron MCP tool call was cancelled");
|
||||
const args = JSON.parse(spec.argsJson) as {
|
||||
job?: { sessionTarget?: string; agentId?: string; sessionKey?: string };
|
||||
job?: {
|
||||
sessionTarget?: string;
|
||||
agentId?: string;
|
||||
sessionKey?: string;
|
||||
delivery?: { mode?: string };
|
||||
};
|
||||
};
|
||||
expect(args.job?.sessionTarget).toBe("session:agent:codex:acp:test");
|
||||
expect(args.job?.agentId).toBe("codex");
|
||||
expect(args.job?.sessionKey).toBe("agent:codex:acp:test");
|
||||
expect(args.job?.delivery).toEqual({ mode: "none" });
|
||||
});
|
||||
|
||||
it("builds a cron probe spec when the process clock is outside the Date range", () => {
|
||||
|
||||
@@ -83,6 +83,8 @@ export function createLiveCronProbeSpec(
|
||||
name,
|
||||
schedule: { kind: "at", at },
|
||||
payload: { kind: "agentTurn", message },
|
||||
// Live harnesses use synthetic channels that must not become announce targets.
|
||||
delivery: { mode: "none" },
|
||||
sessionTarget: params.sessionKey ? `session:${params.sessionKey}` : "current",
|
||||
...(params.agentId ? { agentId: params.agentId } : {}),
|
||||
...(params.sessionKey ? { sessionKey: params.sessionKey } : {}),
|
||||
|
||||
Reference in New Issue
Block a user