oh-my-codex 0.21.19 → 0.21.20
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/Cargo.lock +6 -6
- package/Cargo.toml +1 -1
- package/dist/cli/__tests__/plugin-cache-live-pin-3790.test.js +1 -1
- package/dist/team/__tests__/tmux-session.test.js +60 -0
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +32 -10
- package/dist/team/tmux-session.js.map +1 -1
- package/package.json +1 -1
- package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
package/Cargo.lock
CHANGED
|
@@ -32,7 +32,7 @@ checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
|
|
|
32
32
|
|
|
33
33
|
[[package]]
|
|
34
34
|
name = "omx-api"
|
|
35
|
-
version = "0.21.
|
|
35
|
+
version = "0.21.20"
|
|
36
36
|
dependencies = [
|
|
37
37
|
"serde",
|
|
38
38
|
"serde_json",
|
|
@@ -40,14 +40,14 @@ dependencies = [
|
|
|
40
40
|
|
|
41
41
|
[[package]]
|
|
42
42
|
name = "omx-explore-harness"
|
|
43
|
-
version = "0.21.
|
|
43
|
+
version = "0.21.20"
|
|
44
44
|
dependencies = [
|
|
45
45
|
"libc",
|
|
46
46
|
]
|
|
47
47
|
|
|
48
48
|
[[package]]
|
|
49
49
|
name = "omx-mux"
|
|
50
|
-
version = "0.21.
|
|
50
|
+
version = "0.21.20"
|
|
51
51
|
dependencies = [
|
|
52
52
|
"serde",
|
|
53
53
|
"serde_json",
|
|
@@ -55,7 +55,7 @@ dependencies = [
|
|
|
55
55
|
|
|
56
56
|
[[package]]
|
|
57
57
|
name = "omx-runtime"
|
|
58
|
-
version = "0.21.
|
|
58
|
+
version = "0.21.20"
|
|
59
59
|
dependencies = [
|
|
60
60
|
"fs2",
|
|
61
61
|
"libc",
|
|
@@ -67,7 +67,7 @@ dependencies = [
|
|
|
67
67
|
|
|
68
68
|
[[package]]
|
|
69
69
|
name = "omx-runtime-core"
|
|
70
|
-
version = "0.21.
|
|
70
|
+
version = "0.21.20"
|
|
71
71
|
dependencies = [
|
|
72
72
|
"fs2",
|
|
73
73
|
"serde",
|
|
@@ -76,7 +76,7 @@ dependencies = [
|
|
|
76
76
|
|
|
77
77
|
[[package]]
|
|
78
78
|
name = "omx-sparkshell"
|
|
79
|
-
version = "0.21.
|
|
79
|
+
version = "0.21.20"
|
|
80
80
|
dependencies = [
|
|
81
81
|
"omx-mux",
|
|
82
82
|
]
|
package/Cargo.toml
CHANGED
|
@@ -266,7 +266,7 @@ describe("issue 3790 live plugin cache pins", () => {
|
|
|
266
266
|
const packaged = await resolvePackagedOmxMarketplace(packageRoot);
|
|
267
267
|
assert.ok(packaged);
|
|
268
268
|
const pluginManifest = JSON.parse(await readFile(packaged.pluginManifestPath, "utf-8"));
|
|
269
|
-
assert.equal(pluginManifest.version, "0.21.
|
|
269
|
+
assert.equal(pluginManifest.version, "0.21.20");
|
|
270
270
|
const published = await materializePackagedOmxPluginCache(codexHomeDir, packaged);
|
|
271
271
|
assert.equal(published.status, "materialized");
|
|
272
272
|
assert.ok(legacySnapshots.every((snapshot) => published.cacheDir !== snapshot));
|
|
@@ -4006,6 +4006,36 @@ esac
|
|
|
4006
4006
|
assert.equal(result, false, "waitForWorkerReady with timeout=0 should return false, not run checks after deadline");
|
|
4007
4007
|
});
|
|
4008
4008
|
});
|
|
4009
|
+
it('enforces deadline on every poll including when ready (Codex finding 4310966027)', async () => {
|
|
4010
|
+
// Test that even if a poll returns true (ready), we recheck the deadline.
|
|
4011
|
+
// Mock tmux to return ready after a delay that causes us to exceed the timeout.
|
|
4012
|
+
const delaySeconds = 0.15;
|
|
4013
|
+
const timeoutMs = 100;
|
|
4014
|
+
// With a timeout shorter than the delay, the poll will complete after deadline
|
|
4015
|
+
// and should return false despite the ready output.
|
|
4016
|
+
await withMockTmuxFixture('omx-worker-ready-deadline-enforce-', (logPath) => `#!/bin/sh
|
|
4017
|
+
set -eu
|
|
4018
|
+
printf '%s\\n' "$*" >> "${logPath}"
|
|
4019
|
+
case "$1" in
|
|
4020
|
+
capture-pane)
|
|
4021
|
+
# Simulate slow capture-pane that takes longer than the remaining timeout
|
|
4022
|
+
sleep ${delaySeconds}
|
|
4023
|
+
cat <<'EOF'
|
|
4024
|
+
${READY_HELPER_CAPTURE}
|
|
4025
|
+
EOF
|
|
4026
|
+
exit 0
|
|
4027
|
+
;;
|
|
4028
|
+
*)
|
|
4029
|
+
exit 0
|
|
4030
|
+
;;
|
|
4031
|
+
esac`, async () => {
|
|
4032
|
+
// Poll with a very short timeout that will be exceeded during the capture
|
|
4033
|
+
const result = waitForWorkerReady('omx-team-x', 1, timeoutMs);
|
|
4034
|
+
// Even though capture-pane returns ready, the deadline was exceeded
|
|
4035
|
+
// so we should return false
|
|
4036
|
+
assert.equal(result, false, "waitForWorkerReady should return false when poll completes after deadline");
|
|
4037
|
+
});
|
|
4038
|
+
});
|
|
4009
4039
|
});
|
|
4010
4040
|
describe('waitForWorkerReadyAsync parity', () => {
|
|
4011
4041
|
it('uses visible capture-pane argv without tail flags', async () => {
|
|
@@ -4288,6 +4318,36 @@ esac
|
|
|
4288
4318
|
assert.equal(result, false, "waitForWorkerReadyAsync with timeout=0 should return false, not run checks after deadline");
|
|
4289
4319
|
});
|
|
4290
4320
|
});
|
|
4321
|
+
it('enforces deadline on every poll including when ready (Codex finding 4310966027)', async () => {
|
|
4322
|
+
// Test that even if a poll returns true (ready), we recheck the deadline.
|
|
4323
|
+
// Mock tmux to return ready after a delay that causes us to exceed the timeout.
|
|
4324
|
+
const delaySeconds = 0.15;
|
|
4325
|
+
const timeoutMs = 100;
|
|
4326
|
+
// With a timeout shorter than the delay, the poll will complete after deadline
|
|
4327
|
+
// and should return false despite the ready output.
|
|
4328
|
+
await withMockTmuxFixture('omx-worker-ready-deadline-enforce-async-', (logPath) => `#!/bin/sh
|
|
4329
|
+
set -eu
|
|
4330
|
+
printf '%s\\n' "$*" >> "${logPath}"
|
|
4331
|
+
case "$1" in
|
|
4332
|
+
capture-pane)
|
|
4333
|
+
# Simulate slow capture-pane that takes longer than the remaining timeout
|
|
4334
|
+
sleep ${delaySeconds}
|
|
4335
|
+
cat <<'EOF'
|
|
4336
|
+
${READY_HELPER_CAPTURE}
|
|
4337
|
+
EOF
|
|
4338
|
+
exit 0
|
|
4339
|
+
;;
|
|
4340
|
+
*)
|
|
4341
|
+
exit 0
|
|
4342
|
+
;;
|
|
4343
|
+
esac`, async () => {
|
|
4344
|
+
// Poll with a very short timeout that will be exceeded during the capture
|
|
4345
|
+
const result = await waitForWorkerReadyAsync('omx-team-x', 1, timeoutMs);
|
|
4346
|
+
// Even though capture-pane returns ready, the deadline was exceeded
|
|
4347
|
+
// so we should return false
|
|
4348
|
+
assert.equal(result, false, "waitForWorkerReadyAsync should return false when poll completes after deadline");
|
|
4349
|
+
});
|
|
4350
|
+
});
|
|
4291
4351
|
});
|
|
4292
4352
|
describe('createTeamSession tmux instance tagging', () => {
|
|
4293
4353
|
it('rejects split-window output unless it contains one canonical pane id and optional expected receipt', () => {
|