oh-my-codex 0.21.8 → 0.21.9

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 (56) hide show
  1. package/Cargo.lock +8 -8
  2. package/Cargo.toml +1 -1
  3. package/README.md +14 -0
  4. package/dist/cli/__tests__/native-assets.test.js +1 -1
  5. package/dist/cli/__tests__/native-assets.test.js.map +1 -1
  6. package/dist/cli/__tests__/session-usage.test.d.ts +2 -0
  7. package/dist/cli/__tests__/session-usage.test.d.ts.map +1 -0
  8. package/dist/cli/__tests__/session-usage.test.js +88 -0
  9. package/dist/cli/__tests__/session-usage.test.js.map +1 -0
  10. package/dist/cli/session-search.d.ts.map +1 -1
  11. package/dist/cli/session-search.js +7 -0
  12. package/dist/cli/session-search.js.map +1 -1
  13. package/dist/cli/session-usage.d.ts +8 -0
  14. package/dist/cli/session-usage.d.ts.map +1 -0
  15. package/dist/cli/session-usage.js +100 -0
  16. package/dist/cli/session-usage.js.map +1 -0
  17. package/dist/evals/astra-defaults/__tests__/collector.test.d.ts +2 -0
  18. package/dist/evals/astra-defaults/__tests__/collector.test.d.ts.map +1 -0
  19. package/dist/evals/astra-defaults/__tests__/collector.test.js +139 -0
  20. package/dist/evals/astra-defaults/__tests__/collector.test.js.map +1 -0
  21. package/dist/evals/astra-defaults/collector.d.ts +31 -0
  22. package/dist/evals/astra-defaults/collector.d.ts.map +1 -0
  23. package/dist/evals/astra-defaults/collector.js +215 -0
  24. package/dist/evals/astra-defaults/collector.js.map +1 -0
  25. package/dist/native-assets/archive.js +2 -2
  26. package/dist/native-assets/archive.js.map +1 -1
  27. package/dist/scripts/__tests__/codex-native-hook.test.js +129 -0
  28. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  29. package/dist/scripts/__tests__/verify-native-release-assets.test.js +1 -1
  30. package/dist/scripts/__tests__/verify-native-release-assets.test.js.map +1 -1
  31. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  32. package/dist/scripts/codex-native-hook.js +29 -1
  33. package/dist/scripts/codex-native-hook.js.map +1 -1
  34. package/dist/scripts/eval/collect-astra-defaults.d.ts +2 -0
  35. package/dist/scripts/eval/collect-astra-defaults.d.ts.map +1 -0
  36. package/dist/scripts/eval/collect-astra-defaults.js +89 -0
  37. package/dist/scripts/eval/collect-astra-defaults.js.map +1 -0
  38. package/dist/session-history/__tests__/usage.test.d.ts +2 -0
  39. package/dist/session-history/__tests__/usage.test.d.ts.map +1 -0
  40. package/dist/session-history/__tests__/usage.test.js +216 -0
  41. package/dist/session-history/__tests__/usage.test.js.map +1 -0
  42. package/dist/session-history/search.d.ts +1 -1
  43. package/dist/session-history/search.d.ts.map +1 -1
  44. package/dist/session-history/search.js +6 -2
  45. package/dist/session-history/search.js.map +1 -1
  46. package/dist/session-history/usage.d.ts +44 -0
  47. package/dist/session-history/usage.d.ts.map +1 -0
  48. package/dist/session-history/usage.js +211 -0
  49. package/dist/session-history/usage.js.map +1 -0
  50. package/dist/verification/__tests__/native-release-manifest.test.js.map +1 -1
  51. package/package.json +3 -3
  52. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  53. package/src/scripts/__tests__/codex-native-hook.test.ts +182 -0
  54. package/src/scripts/__tests__/verify-native-release-assets.test.ts +3 -3
  55. package/src/scripts/codex-native-hook.ts +29 -0
  56. package/src/scripts/eval/collect-astra-defaults.ts +140 -0
@@ -0,0 +1,139 @@
1
+ import assert from 'node:assert';
2
+ import { test } from 'node:test';
3
+ import { collectRecord } from '../collector.js';
4
+ // Stub fixture with response checks
5
+ const fixture = {
6
+ id: 'test-fixture',
7
+ surface: 'explore',
8
+ title: 'Test explore task',
9
+ prompt: 'Find the bug in this code',
10
+ inputs: { 'code.ts': 'const x = 1\nconsole.log(x)' },
11
+ checks: [
12
+ { kind: 'must-include', name: 'mentions-code', values: ['code', 'bug'] },
13
+ { kind: 'must-not-include', name: 'no-vague-words', values: ['maybe', 'perhaps'] },
14
+ ],
15
+ };
16
+ // Stub config
17
+ const config = {
18
+ id: 'test-config',
19
+ label: 'Test config',
20
+ isBaseline: false,
21
+ omxRevision: 'abc123',
22
+ roles: {
23
+ explore: { model: 'gpt-6-test', reasoningEffort: 'medium' },
24
+ executor: { model: 'gpt-6-test', reasoningEffort: 'medium' },
25
+ 'code-reviewer': { model: 'gpt-6-test', reasoningEffort: 'medium' },
26
+ 'team-worker': { model: 'gpt-6-test', reasoningEffort: 'medium' },
27
+ sparkshell: { model: 'gpt-6-test', reasoningEffort: 'medium' },
28
+ },
29
+ serviceTier: 'test',
30
+ cacheConditions: 'test',
31
+ };
32
+ test('collector: pass when response matches checks', async () => {
33
+ const mockCodexInvoker = async () => ({
34
+ exitCode: 0,
35
+ stdout: JSON.stringify({
36
+ response: 'Found a bug in the code. The variable is used correctly.',
37
+ usage: { input_tokens: 100, output_tokens: 50 },
38
+ }),
39
+ stderr: '',
40
+ });
41
+ const result = await collectRecord(fixture, config, { invokeCodex: mockCodexInvoker });
42
+ assert.strictEqual(result.record.outcome, 'pass');
43
+ assert.strictEqual(result.record.checks.length, 2);
44
+ assert.ok(result.record.checks.every((c) => c.passed));
45
+ assert.deepStrictEqual(result.record.usage, {
46
+ inputTokens: 100,
47
+ outputTokens: 50,
48
+ uncachedInputTokens: null,
49
+ cacheReadTokens: null,
50
+ cacheWriteTokens: null,
51
+ source: 'codex exec --json',
52
+ });
53
+ assert.ok((result.record.latencyMs ?? 0) >= 0); // Latency is always recorded, even if 0
54
+ });
55
+ test('collector: fail when response does not match checks', async () => {
56
+ const mockCodexInvoker = async () => ({
57
+ exitCode: 0,
58
+ stdout: JSON.stringify({
59
+ response: 'Maybe this is a bug. Perhaps you should check.',
60
+ usage: { input_tokens: 100, output_tokens: 50 },
61
+ }),
62
+ stderr: '',
63
+ });
64
+ const result = await collectRecord(fixture, config, { invokeCodex: mockCodexInvoker });
65
+ assert.strictEqual(result.record.outcome, 'fail');
66
+ assert.ok(result.record.checks.some((c) => !c.passed));
67
+ });
68
+ test('collector: error when Codex exits non-zero', async () => {
69
+ const mockCodexInvoker = async () => ({
70
+ exitCode: 1,
71
+ stdout: '',
72
+ stderr: 'Codex error: authentication failed',
73
+ });
74
+ const result = await collectRecord(fixture, config, { invokeCodex: mockCodexInvoker });
75
+ assert.strictEqual(result.record.outcome, 'error');
76
+ assert.ok(result.record.notes?.includes('exit code 1'));
77
+ assert.strictEqual(result.record.usage, null);
78
+ });
79
+ test('collector: error when JSON parsing fails', async () => {
80
+ const mockCodexInvoker = async () => ({
81
+ exitCode: 0,
82
+ stdout: 'not valid json',
83
+ stderr: '',
84
+ });
85
+ const result = await collectRecord(fixture, config, { invokeCodex: mockCodexInvoker });
86
+ assert.strictEqual(result.record.outcome, 'error');
87
+ assert.ok(result.record.notes?.includes('Failed to parse'));
88
+ });
89
+ test('collector: error when missing role config', async () => {
90
+ const badConfig = {
91
+ ...config,
92
+ roles: { explore: { model: 'gpt-6-test', reasoningEffort: 'medium' } }, // Missing other surfaces
93
+ };
94
+ const mockCodexInvoker = async () => ({
95
+ exitCode: 0,
96
+ stdout: '{}',
97
+ stderr: '',
98
+ });
99
+ const result = await collectRecord({ ...fixture, surface: 'executor' }, badConfig, { invokeCodex: mockCodexInvoker });
100
+ assert.strictEqual(result.record.outcome, 'error');
101
+ assert.ok(result.record.notes?.includes('No role config'));
102
+ });
103
+ test('collector: handle null usage data gracefully', async () => {
104
+ const mockCodexInvoker = async () => ({
105
+ exitCode: 0,
106
+ stdout: JSON.stringify({ response: 'Found a bug in the code. The variable is used correctly.' }),
107
+ stderr: '',
108
+ });
109
+ const result = await collectRecord(fixture, config, { invokeCodex: mockCodexInvoker });
110
+ assert.strictEqual(result.record.outcome, 'pass');
111
+ assert.strictEqual(result.record.usage, null);
112
+ });
113
+ test('collector: records latency on success', async () => {
114
+ const mockCodexInvoker = async () => {
115
+ await new Promise((resolve) => setTimeout(resolve, 10));
116
+ return {
117
+ exitCode: 0,
118
+ stdout: JSON.stringify({
119
+ response: 'Found a bug in the code. The variable is used correctly.',
120
+ }),
121
+ stderr: '',
122
+ };
123
+ };
124
+ const result = await collectRecord(fixture, config, { invokeCodex: mockCodexInvoker });
125
+ assert.ok((result.record.latencyMs ?? 0) >= 10);
126
+ });
127
+ test('collector: records latency even on error', async () => {
128
+ const mockCodexInvoker = async () => {
129
+ await new Promise((resolve) => setTimeout(resolve, 10));
130
+ return {
131
+ exitCode: 1,
132
+ stdout: '',
133
+ stderr: 'Error',
134
+ };
135
+ };
136
+ const result = await collectRecord(fixture, config, { invokeCodex: mockCodexInvoker });
137
+ assert.ok((result.record.latencyMs ?? 0) >= 10);
138
+ });
139
+ //# sourceMappingURL=collector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.test.js","sourceRoot":"","sources":["../../../../src/evals/astra-defaults/__tests__/collector.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { EvalConfig, EvalFixture, RunRecord } from './types.js';
2
+ export interface CollectorOptions {
3
+ timeoutMs?: number;
4
+ /** Called to invoke Codex CLI. Default: npx -y @openai/codex */
5
+ invokeCodex?: (args: string[], cwd: string) => Promise<CodexOutput>;
6
+ }
7
+ export interface CodexOutput {
8
+ exitCode: number;
9
+ stdout: string;
10
+ stderr: string;
11
+ }
12
+ export interface CollectionResult {
13
+ record: RunRecord;
14
+ error?: string;
15
+ }
16
+ /**
17
+ * Collects a single RunRecord by executing Codex CLI against a fixture/config pair.
18
+ * Creates a disposable temp workspace, seeds it with fixture inputs, runs Codex,
19
+ * captures output/token usage/latency, and grades against fixture checks.
20
+ */
21
+ export declare function collectRecord(fixture: EvalFixture, config: EvalConfig, options?: CollectorOptions): Promise<CollectionResult>;
22
+ /**
23
+ * Collects RunRecords for a matrix of fixtures x configs.
24
+ * Yields results as they complete, allowing progress reporting and early abort.
25
+ */
26
+ export declare function collectMatrix(fixtures: EvalFixture[], configs: EvalConfig[], options?: CollectorOptions): AsyncGenerator<{
27
+ fixture: EvalFixture;
28
+ config: EvalConfig;
29
+ result: CollectionResult;
30
+ }>;
31
+ //# sourceMappingURL=collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/evals/astra-defaults/collector.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGrE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CA2K3B;AAwCD;;;GAGG;AACH,wBAAuB,aAAa,CAClC,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,GAAE,gBAAqB,GAC7B,cAAc,CAAC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAOxF"}
@@ -0,0 +1,215 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { mkdtempSync, writeFileSync, rmSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { scoreResponse } from './suite.js';
6
+ /**
7
+ * Collects a single RunRecord by executing Codex CLI against a fixture/config pair.
8
+ * Creates a disposable temp workspace, seeds it with fixture inputs, runs Codex,
9
+ * captures output/token usage/latency, and grades against fixture checks.
10
+ */
11
+ export async function collectRecord(fixture, config, options = {}) {
12
+ const timeoutMs = options.timeoutMs ?? 15 * 60 * 1000; // 15 minutes default
13
+ const invokeCodex = options.invokeCodex ?? defaultCodexInvoker;
14
+ const startTime = Date.now();
15
+ const tempDir = mkdtempSync(join(tmpdir(), 'codex-eval-'));
16
+ let output = null;
17
+ try {
18
+ // Seed temp workspace with fixture inputs
19
+ for (const [name, content] of Object.entries(fixture.inputs)) {
20
+ writeFileSync(join(tempDir, name), content, 'utf-8');
21
+ }
22
+ // Build Codex args with config model/reasoning overrides
23
+ // Use the surface from the fixture to select the right role config
24
+ const roleConfig = config.roles[fixture.surface];
25
+ if (!roleConfig) {
26
+ throw new Error(`No role config for surface "${fixture.surface}" in config "${config.id}"`);
27
+ }
28
+ // Build args for: codex exec --json --skip-git-repo-check --ephemeral -m <model> -c reasoning_effort=<effort> <prompt>
29
+ const args = [
30
+ 'exec',
31
+ '--json',
32
+ '--skip-git-repo-check',
33
+ '--ephemeral',
34
+ '-m',
35
+ roleConfig.model,
36
+ '-c',
37
+ `reasoning_effort='${roleConfig.reasoningEffort}'`,
38
+ fixture.prompt,
39
+ ];
40
+ // Run Codex CLI with timeout
41
+ output = await Promise.race([
42
+ invokeCodex(args, tempDir),
43
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Codex execution timeout after ${timeoutMs}ms`)), timeoutMs)),
44
+ ]);
45
+ // Parse output and grade response
46
+ const latencyMs = Date.now() - startTime;
47
+ if (output.exitCode !== 0) {
48
+ // Codex failed; record error outcome
49
+ return {
50
+ record: {
51
+ fixtureId: fixture.id,
52
+ configId: config.id,
53
+ outcome: 'error',
54
+ checks: [],
55
+ requiredChecksPassed: null,
56
+ retries: 0,
57
+ latencyMs,
58
+ usage: null, // No usage data on error
59
+ operatorMinutes: null,
60
+ difficult: false,
61
+ notes: `Codex exit code ${output.exitCode}; stderr: ${output.stderr.slice(0, 200)}`,
62
+ },
63
+ };
64
+ }
65
+ // Parse JSONL output (--json outputs one JSON object per line)
66
+ // The final event should contain the agent's final response
67
+ let finalEvent = null;
68
+ try {
69
+ const lines = output.stdout.trim().split('\n');
70
+ for (const line of lines) {
71
+ if (line.trim()) {
72
+ finalEvent = JSON.parse(line);
73
+ }
74
+ }
75
+ }
76
+ catch (e) {
77
+ return {
78
+ record: {
79
+ fixtureId: fixture.id,
80
+ configId: config.id,
81
+ outcome: 'error',
82
+ checks: [],
83
+ requiredChecksPassed: null,
84
+ retries: 0,
85
+ latencyMs,
86
+ usage: null,
87
+ operatorMinutes: null,
88
+ difficult: false,
89
+ notes: `Failed to parse Codex JSONL output: ${e.message}`,
90
+ },
91
+ };
92
+ }
93
+ if (!finalEvent) {
94
+ return {
95
+ record: {
96
+ fixtureId: fixture.id,
97
+ configId: config.id,
98
+ outcome: 'error',
99
+ checks: [],
100
+ requiredChecksPassed: null,
101
+ retries: 0,
102
+ latencyMs,
103
+ usage: null,
104
+ operatorMinutes: null,
105
+ difficult: false,
106
+ notes: 'No output from Codex exec',
107
+ },
108
+ };
109
+ }
110
+ // Extract response text and usage from final event
111
+ // The structure depends on what Codex outputs
112
+ const responseText = String(finalEvent.response ?? finalEvent.message ?? '');
113
+ const usageData = finalEvent.usage;
114
+ // Grade response
115
+ const checks = scoreResponse(fixture, responseText);
116
+ const passed = checks.every((check) => check.passed);
117
+ // Build usage record from Codex output
118
+ const usage = usageData
119
+ ? {
120
+ inputTokens: usageData.input_tokens ?? null,
121
+ outputTokens: usageData.output_tokens ?? null,
122
+ uncachedInputTokens: usageData.uncached_input_tokens ?? null,
123
+ cacheReadTokens: usageData.cache_read_tokens ?? null,
124
+ cacheWriteTokens: usageData.cache_write_tokens ?? null,
125
+ source: 'codex exec --json',
126
+ }
127
+ : null;
128
+ return {
129
+ record: {
130
+ fixtureId: fixture.id,
131
+ configId: config.id,
132
+ outcome: passed ? 'pass' : 'fail',
133
+ checks,
134
+ requiredChecksPassed: null, // Fixture repos not evaluated in this pass
135
+ retries: 0,
136
+ latencyMs,
137
+ usage,
138
+ operatorMinutes: null,
139
+ difficult: false,
140
+ },
141
+ };
142
+ }
143
+ catch (error) {
144
+ const latencyMs = Date.now() - startTime;
145
+ return {
146
+ record: {
147
+ fixtureId: fixture.id,
148
+ configId: config.id,
149
+ outcome: 'error',
150
+ checks: [],
151
+ requiredChecksPassed: null,
152
+ retries: 0,
153
+ latencyMs,
154
+ usage: null,
155
+ operatorMinutes: null,
156
+ difficult: false,
157
+ notes: `Collection failed: ${error.message}`,
158
+ },
159
+ error: error.message,
160
+ };
161
+ }
162
+ finally {
163
+ // Clean up temp workspace
164
+ try {
165
+ rmSync(tempDir, { recursive: true, force: true });
166
+ }
167
+ catch (e) {
168
+ // Best effort cleanup
169
+ }
170
+ }
171
+ }
172
+ /**
173
+ * Default Codex invoker using npx -y @openai/codex
174
+ */
175
+ async function defaultCodexInvoker(args, cwd) {
176
+ return new Promise((resolve, reject) => {
177
+ const child = spawn('npx', ['-y', '@openai/codex', ...args], {
178
+ cwd,
179
+ stdio: ['pipe', 'pipe', 'pipe'],
180
+ timeout: 16 * 60 * 1000, // 16 min hard timeout in spawn
181
+ });
182
+ let stdout = '';
183
+ let stderr = '';
184
+ child.stdout?.on('data', (data) => {
185
+ stdout += String(data);
186
+ });
187
+ child.stderr?.on('data', (data) => {
188
+ stderr += String(data);
189
+ });
190
+ child.on('error', (err) => {
191
+ reject(err);
192
+ });
193
+ child.on('exit', (code) => {
194
+ resolve({
195
+ exitCode: code ?? -1,
196
+ stdout,
197
+ stderr,
198
+ });
199
+ });
200
+ child.stdin?.end();
201
+ });
202
+ }
203
+ /**
204
+ * Collects RunRecords for a matrix of fixtures x configs.
205
+ * Yields results as they complete, allowing progress reporting and early abort.
206
+ */
207
+ export async function* collectMatrix(fixtures, configs, options = {}) {
208
+ for (const config of configs) {
209
+ for (const fixture of fixtures) {
210
+ const result = await collectRecord(fixture, config, options);
211
+ yield { fixture, config, result };
212
+ }
213
+ }
214
+ }
215
+ //# sourceMappingURL=collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../../src/evals/astra-defaults/collector.ts"],"names":[],"mappings":"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"}
@@ -48,7 +48,7 @@ async function inspectTar(archivePath, format) {
48
48
  }
49
49
  catch (error) {
50
50
  source.resume();
51
- next(error);
51
+ next(error instanceof Error ? error : new Error(String(error)));
52
52
  }
53
53
  });
54
54
  try {
@@ -153,7 +153,7 @@ async function streamTarMember(archivePath, format, rawName) {
153
153
  found = true;
154
154
  source.once('error', next);
155
155
  source.once('end', next);
156
- source.pipe(output, { end: false });
156
+ source.pipe(output);
157
157
  });
158
158
  void pipeline(await tarInput(archivePath, format), extractor).then(() => {
159
159
  if (!found)
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/native-assets/archive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/native-assets/archive.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ import { getLegacyWikiDir, serializePage, writePage, } from "../../wiki/storage.
23
23
  import { WIKI_SCHEMA_VERSION } from "../../wiki/types.js";
24
24
  import { createUltragoalPlan, readUltragoalPlan, } from "../../ultragoal/artifacts.js";
25
25
  import { getBaseStateDir } from "../../state/paths.js";
26
+ import { recordNativeSubagentAuthorityObservation } from "../../subagents/tracker.js";
26
27
  import { maybeNudgeLeaderForAllowedWorkerStop } from "../notify-hook/team-worker-stop.js";
27
28
  import { MAX_NATIVE_STDIN_JSON_BYTES } from "../hook-payload-guard.js";
28
29
  import { injectExecFollowup, readPendingExecFollowups, } from "../../exec/followup.js";
@@ -911,6 +912,134 @@ describe("codex native hook dispatch", { concurrency: false }, () => {
911
912
  await rm(cwd, { recursive: true, force: true });
912
913
  }
913
914
  });
915
+ it("records bounded completion evidence for native subagent Stop events (#3729)", async () => {
916
+ const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-stop-completion-evidence-"));
917
+ try {
918
+ const stateDir = join(cwd, ".omx", "state");
919
+ const sessionId = "sess-stop-subagent";
920
+ const threadId = "thread-stop-subagent";
921
+ const leaderThreadId = "leader-thread";
922
+ await mkdir(join(stateDir, "sessions", sessionId), { recursive: true });
923
+ await writeSessionStart(cwd, sessionId, { nativeSessionId: leaderThreadId, pid: process.pid });
924
+ // Create transcript with thread_spawn metadata to make dispatcher detect as subagent
925
+ const stopTranscriptPath = join(cwd, "stop-transcript.jsonl");
926
+ await writeFile(stopTranscriptPath, JSON.stringify({
927
+ type: "session_meta",
928
+ payload: { id: threadId, source: { subagent: { thread_spawn: { parent_thread_id: leaderThreadId } } } }
929
+ }) + "\n");
930
+ // Initialize subagent tracking by recording the native subagent observation
931
+ await recordNativeSubagentAuthorityObservation(cwd, {
932
+ sessionIds: [sessionId],
933
+ childThreadId: threadId,
934
+ parentThreadId: leaderThreadId,
935
+ rootNativeSessionId: leaderThreadId,
936
+ authorityEvidence: "valid",
937
+ });
938
+ // Send Stop event from subagent thread
939
+ const result = await dispatchCodexNativeHook({
940
+ hook_event_name: "Stop",
941
+ cwd,
942
+ session_id: sessionId,
943
+ thread_id: threadId,
944
+ stop_hook_active: true,
945
+ }, { cwd, sessionOwnerPid: process.pid });
946
+ // Verify completion evidence was recorded
947
+ const tracking = JSON.parse(await readFile(join(stateDir, "subagent-tracking.json"), "utf-8"));
948
+ const thread = tracking.sessions?.[sessionId]?.threads?.[threadId];
949
+ assert.ok(thread?.completed_at, "completion evidence must record completed_at timestamp");
950
+ assert.equal(thread?.completion_source, "native_stop_event", "completion evidence must mark completionSource as native_stop_event");
951
+ }
952
+ finally {
953
+ await rm(cwd, { recursive: true, force: true });
954
+ }
955
+ });
956
+ it("records bounded delivery evidence for native subagent SessionStart events (#3729)", async () => {
957
+ const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-sessionstart-delivery-evidence-"));
958
+ try {
959
+ const stateDir = join(cwd, ".omx", "state");
960
+ const sessionId = "sess-sessionstart-subagent";
961
+ const threadId = "thread-sessionstart-subagent";
962
+ const leaderThreadId = "leader-thread";
963
+ await mkdir(join(stateDir, "sessions", sessionId), { recursive: true });
964
+ await writeSessionStart(cwd, sessionId, { nativeSessionId: leaderThreadId, pid: process.pid });
965
+ // Create transcript with thread_spawn metadata to make dispatcher detect as subagent
966
+ const transcriptPath = join(cwd, "sessionstart-transcript.jsonl");
967
+ await writeFile(transcriptPath, JSON.stringify({
968
+ type: "session_meta",
969
+ payload: { id: threadId, source: { subagent: { thread_spawn: { parent_thread_id: leaderThreadId } } } }
970
+ }) + "\n");
971
+ // Send SessionStart event from subagent thread
972
+ // Note: session_id should be the child's thread ID, thread_id is required for evidence recording
973
+ const result = await dispatchCodexNativeHook({
974
+ hook_event_name: "SessionStart",
975
+ cwd,
976
+ session_id: threadId,
977
+ thread_id: threadId,
978
+ transcript_path: transcriptPath,
979
+ }, { cwd, sessionOwnerPid: process.pid });
980
+ // Verify delivery evidence was recorded (without completion_source)
981
+ // Note: Sessions are keyed by canonical session ID in tracking state
982
+ const canonicalFromPointer = JSON.parse(await readFile(join(stateDir, "session.json"), "utf-8"));
983
+ const canonicalSessionIdResult = canonicalFromPointer.session_id || sessionId;
984
+ const tracking = JSON.parse(await readFile(join(stateDir, "subagent-tracking.json"), "utf-8"));
985
+ const thread = tracking.sessions?.[canonicalSessionIdResult]?.threads?.[threadId];
986
+ assert.ok(thread, "thread should exist in tracking");
987
+ // SessionStart should record the turn (turn_count should be incremented to 1)
988
+ assert.equal(thread?.turn_count, 1, "SessionStart must record the turn (turn_count should be 1)");
989
+ // SessionStart should NOT set completed_at
990
+ assert.ok(!thread?.completed_at, "SessionStart must not set completed_at timestamp");
991
+ // SessionStart should NOT set completion_source
992
+ assert.ok(!thread?.completion_source, "SessionStart must not set completion_source");
993
+ }
994
+ finally {
995
+ await rm(cwd, { recursive: true, force: true });
996
+ }
997
+ });
998
+ it("does NOT record completion evidence for leader Stop events (#3729)", async () => {
999
+ const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-stop-leader-no-record-"));
1000
+ try {
1001
+ const stateDir = join(cwd, ".omx", "state");
1002
+ const sessionId = "sess-stop-leader";
1003
+ const leaderThreadId = "leader-thread-stop";
1004
+ await mkdir(join(stateDir, "sessions", sessionId), { recursive: true });
1005
+ // Initialize subagent tracking with only leader thread BEFORE writeSessionStart
1006
+ await writeJson(join(stateDir, "subagent-tracking.json"), {
1007
+ schemaVersion: 1,
1008
+ sessions: {
1009
+ [sessionId]: {
1010
+ session_id: sessionId,
1011
+ leader_thread_id: leaderThreadId,
1012
+ updated_at: new Date().toISOString(),
1013
+ threads: {
1014
+ [leaderThreadId]: {
1015
+ thread_id: leaderThreadId,
1016
+ kind: "leader",
1017
+ status: "available",
1018
+ first_seen_at: new Date().toISOString(),
1019
+ last_seen_at: new Date().toISOString(),
1020
+ },
1021
+ },
1022
+ },
1023
+ },
1024
+ });
1025
+ // Send Stop event from leader thread
1026
+ const result = await dispatchCodexNativeHook({
1027
+ hook_event_name: "Stop",
1028
+ cwd,
1029
+ session_id: sessionId,
1030
+ thread_id: leaderThreadId,
1031
+ stop_hook_active: true,
1032
+ }, { cwd });
1033
+ // Verify NO completion evidence was recorded for leader
1034
+ const tracking = JSON.parse(await readFile(join(stateDir, "subagent-tracking.json"), "utf-8"));
1035
+ const thread = tracking.sessions?.[sessionId]?.threads?.[leaderThreadId];
1036
+ assert.ok(!thread?.completed_at, "leader Stop must not record completed_at timestamp");
1037
+ assert.ok(!thread?.completion_source, "leader Stop must not record completion_source");
1038
+ }
1039
+ finally {
1040
+ await rm(cwd, { recursive: true, force: true });
1041
+ }
1042
+ });
914
1043
  it("emits no-op JSON for oversized Stop stdin without parsing or creating inactive state", async () => {
915
1044
  const cwd = await mkdtemp(join(tmpdir(), "omx-native-hook-cli-stop-oversized-"));
916
1045
  try {