@excitedjs/agent-runtime-codex 0.6.1-beta.251 → 0.7.0-alpha.ged3454ecaaed

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 (111) hide show
  1. package/README.md +31 -8
  2. package/dist/activity/cursor.d.ts +0 -1
  3. package/dist/activity/cursor.d.ts.map +1 -1
  4. package/dist/activity/cursor.js +4 -8
  5. package/dist/activity/cursor.js.map +1 -1
  6. package/dist/activity/opened-file.d.ts.map +1 -1
  7. package/dist/activity/opened-file.js +13 -10
  8. package/dist/activity/opened-file.js.map +1 -1
  9. package/dist/activity/path.d.ts +9 -3
  10. package/dist/activity/path.d.ts.map +1 -1
  11. package/dist/activity/path.js +55 -49
  12. package/dist/activity/path.js.map +1 -1
  13. package/dist/activity/reader.d.ts +1 -4
  14. package/dist/activity/reader.d.ts.map +1 -1
  15. package/dist/activity/reader.js +30 -56
  16. package/dist/activity/reader.js.map +1 -1
  17. package/dist/args.d.ts +14 -18
  18. package/dist/args.d.ts.map +1 -1
  19. package/dist/args.js +17 -36
  20. package/dist/args.js.map +1 -1
  21. package/dist/codex-home.d.ts +10 -6
  22. package/dist/codex-home.d.ts.map +1 -1
  23. package/dist/codex-home.js +24 -29
  24. package/dist/codex-home.js.map +1 -1
  25. package/dist/config.d.ts +3 -32
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +12 -46
  28. package/dist/config.js.map +1 -1
  29. package/dist/diagnostic.d.ts +7 -3
  30. package/dist/diagnostic.d.ts.map +1 -1
  31. package/dist/diagnostic.js +12 -4
  32. package/dist/diagnostic.js.map +1 -1
  33. package/dist/events.d.ts +18 -47
  34. package/dist/events.d.ts.map +1 -1
  35. package/dist/events.js +29 -198
  36. package/dist/events.js.map +1 -1
  37. package/dist/handshake.d.ts +1 -1
  38. package/dist/handshake.d.ts.map +1 -1
  39. package/dist/handshake.js.map +1 -1
  40. package/dist/index.d.ts +9 -18
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +9 -24
  43. package/dist/index.js.map +1 -1
  44. package/dist/output-schema-codec.d.ts.map +1 -1
  45. package/dist/output-schema-codec.js +7 -15
  46. package/dist/output-schema-codec.js.map +1 -1
  47. package/dist/paths.d.ts +11 -6
  48. package/dist/paths.d.ts.map +1 -1
  49. package/dist/paths.js +25 -18
  50. package/dist/paths.js.map +1 -1
  51. package/dist/plugin.d.ts +14 -0
  52. package/dist/plugin.d.ts.map +1 -0
  53. package/dist/plugin.js +11 -0
  54. package/dist/plugin.js.map +1 -0
  55. package/dist/provider.d.ts +9 -30
  56. package/dist/provider.d.ts.map +1 -1
  57. package/dist/provider.js +14 -49
  58. package/dist/provider.js.map +1 -1
  59. package/dist/reasoning-effort.d.ts +23 -0
  60. package/dist/reasoning-effort.d.ts.map +1 -0
  61. package/dist/reasoning-effort.js +75 -0
  62. package/dist/reasoning-effort.js.map +1 -0
  63. package/dist/rpc.d.ts.map +1 -1
  64. package/dist/rpc.js.map +1 -1
  65. package/dist/runtime-deps.d.ts +6 -11
  66. package/dist/runtime-deps.d.ts.map +1 -1
  67. package/dist/runtime.d.ts +0 -1
  68. package/dist/runtime.d.ts.map +1 -1
  69. package/dist/runtime.js +82 -41
  70. package/dist/runtime.js.map +1 -1
  71. package/dist/skill-roots.d.ts.map +1 -1
  72. package/dist/skill-roots.js +1 -3
  73. package/dist/skill-roots.js.map +1 -1
  74. package/dist/supervisor.d.ts +1 -1
  75. package/dist/supervisor.d.ts.map +1 -1
  76. package/dist/system-prompt.d.ts +9 -0
  77. package/dist/system-prompt.d.ts.map +1 -0
  78. package/dist/system-prompt.js +26 -0
  79. package/dist/system-prompt.js.map +1 -0
  80. package/dist/tool-display.d.ts.map +1 -1
  81. package/dist/tool-display.js +70 -19
  82. package/dist/tool-display.js.map +1 -1
  83. package/dist/turn-manager.d.ts +8 -1
  84. package/dist/turn-manager.d.ts.map +1 -1
  85. package/dist/turn-manager.js +139 -89
  86. package/dist/turn-manager.js.map +1 -1
  87. package/dist/types.d.ts +4 -2
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/version.d.ts.map +1 -1
  90. package/dist/version.js.map +1 -1
  91. package/package.json +5 -4
  92. package/dist/activity/budget.d.ts +0 -8
  93. package/dist/activity/budget.d.ts.map +0 -1
  94. package/dist/activity/budget.js +0 -9
  95. package/dist/activity/budget.js.map +0 -1
  96. package/dist/activity/error.d.ts +0 -16
  97. package/dist/activity/error.d.ts.map +0 -1
  98. package/dist/activity/error.js +0 -22
  99. package/dist/activity/error.js.map +0 -1
  100. package/dist/approval.d.ts +0 -31
  101. package/dist/approval.d.ts.map +0 -1
  102. package/dist/approval.js +0 -43
  103. package/dist/approval.js.map +0 -1
  104. package/dist/provider-ref.d.ts +0 -8
  105. package/dist/provider-ref.d.ts.map +0 -1
  106. package/dist/provider-ref.js +0 -8
  107. package/dist/provider-ref.js.map +0 -1
  108. package/dist/runtime-support.d.ts +0 -14
  109. package/dist/runtime-support.d.ts.map +0 -1
  110. package/dist/runtime-support.js +0 -35
  111. package/dist/runtime-support.js.map +0 -1
@@ -1,9 +1,8 @@
1
- import { readBytesAt } from '@excitedjs/dreamux-utils';
2
- import { createCodexScanBudget } from './budget.js';
3
- import { codexQueryFingerprint, decodeCodexCursor, digest, encodeCodexCursor, } from './cursor.js';
4
- import { CodexActivityError } from './error.js';
1
+ import { activityQueryFingerprint, ActivityError, readBytesAt, } from '@excitedjs/dreamux-utils';
2
+ import { codexSpawnEnv } from '../paths.js';
3
+ import { decodeCodexCursor, digest, encodeCodexCursor, } from './cursor.js';
5
4
  import { openCodexRollout } from './opened-file.js';
6
- import { findCodexRolloutById, locateCodexRollout, readCodexRolloutText, resolveCodexRolloutRoots, } from './path.js';
5
+ import { createCodexScanBudget, findCodexRolloutById, locateCodexRollout, readCodexRolloutText, resolveCodexRolloutRoots, } from './path.js';
7
6
  import { projectCodexActivity, } from './projection.js';
8
7
  /** Native read bounds. The provider enforces these and reports truncation. */
9
8
  const MAX_DECODED_BYTES = 8_388_608;
@@ -19,33 +18,29 @@ const MAX_RECORD_LIMIT = 200;
19
18
  * session after its live runtime has closed: it discovers the rollout lineage
20
19
  * from the session id alone, and never depends on a persisted native path.
21
20
  */
22
- export async function readCodexRecentActivity(query, context, testHooks = {}) {
21
+ export async function readCodexRecentActivity(query, context) {
23
22
  const limit = resolveLimit(query.limit);
24
23
  const includeTools = query.includeTools ?? true;
25
- const roots = await resolveCodexRolloutRoots(effectiveEnvironment(context));
24
+ const roots = await resolveCodexRolloutRoots(codexSpawnEnv(context.config.extra_env));
26
25
  const discoveryBudget = createCodexScanBudget();
27
26
  const tail = await locateCodexRollout(null, query.sessionId, roots, discoveryBudget);
28
27
  const lineage = await buildLineage(tail, roots, discoveryBudget);
29
- await testHooks.afterLocate?.();
30
28
  const generation = lineageGeneration(lineage);
31
- const fingerprint = codexQueryFingerprint(includeTools);
29
+ const fingerprint = activityQueryFingerprint(includeTools);
32
30
  const cursor = query.cursor === undefined
33
31
  ? null
34
32
  : decodeCodexCursor(query.cursor, fingerprint);
35
33
  if (cursor !== null && cursor.gen !== generation) {
36
- throw new CodexActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
34
+ throw new ActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
37
35
  }
38
36
  if (cursor !== null) {
39
- await verifyBoundaryDigest(lineage, cursor.pos, cursor.bd, testHooks.maxReadChunkBytes);
37
+ await verifyBoundaryDigest(lineage, cursor.pos, cursor.bd);
40
38
  }
41
39
  const scan = await scanRecords({
42
40
  lineage,
43
41
  startPosition: cursor?.pos ?? null,
44
42
  limit,
45
43
  includeTools,
46
- ...(testHooks.maxReadChunkBytes !== undefined
47
- ? { maxReadChunkBytes: testHooks.maxReadChunkBytes }
48
- : {}),
49
44
  });
50
45
  const anchor = scan.hasOlder
51
46
  ? (scan.collected.at(-1) ?? scan.fallbackAnchor)
@@ -57,7 +52,7 @@ export async function readCodexRecentActivity(query, context, testHooks = {}) {
57
52
  offset: anchor.entry.start,
58
53
  };
59
54
  if (cursor !== null && !isStrictlyOlder(position, cursor.pos)) {
60
- throw new CodexActivityError('scan_unsupported', 'Codex activity pagination cannot make safe progress');
55
+ throw new ActivityError('scan_unsupported', 'Codex activity pagination cannot make safe progress');
61
56
  }
62
57
  nextCursor = encodeCodexCursor({
63
58
  fingerprint,
@@ -67,9 +62,7 @@ export async function readCodexRecentActivity(query, context, testHooks = {}) {
67
62
  });
68
63
  }
69
64
  return {
70
- records: scan.collected
71
- .map((entry) => entry.entry.record)
72
- .reverse(),
65
+ records: scan.collected.map((entry) => entry.entry.record).reverse(),
73
66
  ...(nextCursor !== undefined ? { nextCursor } : {}),
74
67
  truncated: scan.truncated,
75
68
  };
@@ -77,10 +70,8 @@ export async function readCodexRecentActivity(query, context, testHooks = {}) {
77
70
  function resolveLimit(limit) {
78
71
  if (limit === undefined)
79
72
  return DEFAULT_RECORD_LIMIT;
80
- if (!Number.isInteger(limit) ||
81
- limit < 1 ||
82
- limit > MAX_RECORD_LIMIT) {
83
- throw new CodexActivityError('invalid', `Codex activity limit must be an integer in 1..${MAX_RECORD_LIMIT}`);
73
+ if (!Number.isInteger(limit) || limit < 1 || limit > MAX_RECORD_LIMIT) {
74
+ throw new ActivityError('invalid', `Codex activity limit must be an integer in 1..${MAX_RECORD_LIMIT}`);
84
75
  }
85
76
  return limit;
86
77
  }
@@ -90,7 +81,7 @@ async function buildLineage(tail, roots, budget) {
90
81
  let current = tail;
91
82
  while (current.historyBase !== null) {
92
83
  if (visited.has(current.historyBase.rolloutId)) {
93
- throw new CodexActivityError('invalid', 'Codex activity history contains a cycle');
84
+ throw new ActivityError('invalid', 'Codex activity history contains a cycle');
94
85
  }
95
86
  const parent = await findCodexRolloutById(roots, current.historyBase.rolloutId, budget);
96
87
  visited.add(parent.rolloutId);
@@ -100,7 +91,7 @@ async function buildLineage(tail, roots, budget) {
100
91
  });
101
92
  current = parent;
102
93
  if (lineage.length > 64) {
103
- throw new CodexActivityError('scan_unsupported', 'Codex activity history exceeds the bounded depth');
94
+ throw new ActivityError('scan_unsupported', 'Codex activity history exceeds the bounded depth');
104
95
  }
105
96
  }
106
97
  return lineage;
@@ -116,7 +107,7 @@ function lineageGeneration(lineage) {
116
107
  async function scanRecords(input) {
117
108
  if (input.startPosition !== null &&
118
109
  input.startPosition.segment >= input.lineage.length) {
119
- throw new CodexActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
110
+ throw new ActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
120
111
  }
121
112
  const deadline = Date.now() + MAX_ELAPSED_MS;
122
113
  let bytesRemaining = MAX_DECODED_BYTES;
@@ -127,9 +118,7 @@ async function scanRecords(input) {
127
118
  let fallbackAnchor = null;
128
119
  const firstSegment = input.startPosition?.segment ?? 0;
129
120
  for (let segmentIndex = firstSegment; segmentIndex < input.lineage.length; segmentIndex += 1) {
130
- if (Date.now() > deadline ||
131
- bytesRemaining <= 0 ||
132
- recordsRemaining <= 0) {
121
+ if (Date.now() > deadline || bytesRemaining <= 0 || recordsRemaining <= 0) {
133
122
  boundsHit = true;
134
123
  break;
135
124
  }
@@ -137,7 +126,7 @@ async function scanRecords(input) {
137
126
  const endOffset = segmentIndex === firstSegment && input.startPosition !== null
138
127
  ? input.startPosition.offset
139
128
  : segment.endOffset;
140
- const window = await loadLineWindow(segment.transcript, endOffset, bytesRemaining, input.maxReadChunkBytes);
129
+ const window = await loadLineWindow(segment.transcript, endOffset, bytesRemaining);
141
130
  bytesRemaining -= window.bytesRead;
142
131
  recordsRemaining -= window.lines.length;
143
132
  const projected = projectCodexActivity(window.lines, input.includeTools);
@@ -176,7 +165,7 @@ async function scanRecords(input) {
176
165
  fallbackAnchor,
177
166
  };
178
167
  }
179
- async function loadLineWindow(transcript, requestedEndOffset, maxBytes, maxReadChunkBytes) {
168
+ async function loadLineWindow(transcript, requestedEndOffset, maxBytes) {
180
169
  if (maxBytes <= 0) {
181
170
  return { lines: [], startOffset: 0, endOffset: 0, bytesRead: 0 };
182
171
  }
@@ -197,11 +186,7 @@ async function loadLineWindow(transcript, requestedEndOffset, maxBytes, maxReadC
197
186
  const end = Math.min(requestedEndOffset ?? opened.size, opened.size);
198
187
  const start = Math.max(0, end - maxBytes);
199
188
  const length = end - start;
200
- const data = await readBytesAt(opened.handle, start, length, {
201
- ...(maxReadChunkBytes !== undefined
202
- ? { maxChunkBytes: maxReadChunkBytes }
203
- : {}),
204
- });
189
+ const data = await readBytesAt(opened.handle, start, length);
205
190
  return {
206
191
  lines: parseLines(data, start, start === 0),
207
192
  startOffset: start,
@@ -234,7 +219,7 @@ function parseLines(bytes, baseOffset, startsAtBoundary) {
234
219
  value = JSON.parse(raw);
235
220
  }
236
221
  catch (error) {
237
- throw new CodexActivityError('invalid', 'Codex activity contains an unreadable record', { cause: error });
222
+ throw new ActivityError('invalid', 'Codex activity contains an unreadable record', { cause: error });
238
223
  }
239
224
  if (isRecord(value)) {
240
225
  lines.push({
@@ -248,17 +233,17 @@ function parseLines(bytes, baseOffset, startsAtBoundary) {
248
233
  }
249
234
  return lines;
250
235
  }
251
- async function verifyBoundaryDigest(lineage, position, expectedDigest, maxReadChunkBytes) {
236
+ async function verifyBoundaryDigest(lineage, position, expectedDigest) {
252
237
  const segment = lineage[position.segment];
253
238
  if (segment === undefined) {
254
- throw new CodexActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
239
+ throw new ActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
255
240
  }
256
- const boundaryBytes = await readBoundaryRecordBytes(segment.transcript, position.offset, maxReadChunkBytes);
241
+ const boundaryBytes = await readBoundaryRecordBytes(segment.transcript, position.offset);
257
242
  if (digest(boundaryBytes) !== expectedDigest) {
258
- throw new CodexActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
243
+ throw new ActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
259
244
  }
260
245
  }
261
- async function readBoundaryRecordBytes(transcript, offset, maxReadChunkBytes) {
246
+ async function readBoundaryRecordBytes(transcript, offset) {
262
247
  const opened = await openValidatedSegment(transcript);
263
248
  try {
264
249
  if (opened.path.endsWith('.zst')) {
@@ -266,14 +251,10 @@ async function readBoundaryRecordBytes(transcript, offset, maxReadChunkBytes) {
266
251
  return boundaryRecordFromBuffer(Buffer.from(text, 'utf8'), offset);
267
252
  }
268
253
  if (offset >= opened.size) {
269
- throw new CodexActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
254
+ throw new ActivityError('cursor_stale', 'Codex activity cursor is no longer valid');
270
255
  }
271
256
  const length = Math.min(MAX_DECODED_BYTES, opened.size - offset);
272
- const bytes = await readBytesAt(opened.handle, offset, length, {
273
- ...(maxReadChunkBytes !== undefined
274
- ? { maxChunkBytes: maxReadChunkBytes }
275
- : {}),
276
- });
257
+ const bytes = await readBytesAt(opened.handle, offset, length);
277
258
  return boundaryRecordFromBuffer(bytes, 0);
278
259
  }
279
260
  finally {
@@ -285,24 +266,17 @@ async function openValidatedSegment(transcript) {
285
266
  if (transcript.dev !== -1 &&
286
267
  (opened.dev !== transcript.dev || opened.ino !== transcript.ino)) {
287
268
  await opened.handle.close();
288
- throw new CodexActivityError('unreadable', 'Codex activity source changed after validation');
269
+ throw new ActivityError('unreadable', 'Codex activity source changed after validation');
289
270
  }
290
271
  return opened;
291
272
  }
292
273
  function boundaryRecordFromBuffer(bytes, offset) {
293
274
  const newline = bytes.indexOf(0x0a, offset);
294
275
  if (newline < 0) {
295
- throw new CodexActivityError('scan_unsupported', 'Codex activity cursor boundary exceeds the bounded limit');
276
+ throw new ActivityError('scan_unsupported', 'Codex activity cursor boundary exceeds the bounded limit');
296
277
  }
297
278
  return bytes.subarray(offset, newline + 1);
298
279
  }
299
- function effectiveEnvironment(context) {
300
- return {
301
- ...process.env,
302
- ...(context.injectEnv ?? {}),
303
- ...context.config.extra_env,
304
- };
305
- }
306
280
  function isRecord(value) {
307
281
  return value !== null && typeof value === 'object' && !Array.isArray(value);
308
282
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/activity/reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/activity/reader.ts"],"names":[],"mappings":"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"}
package/dist/args.d.ts CHANGED
@@ -1,33 +1,30 @@
1
1
  /**
2
2
  * Parse `dispatchers.codex_args_json` into the CLI-arg array passed to
3
- * the codex app-server child, AND validate that the trusted-local
4
- * invariants from issue #2 "trust model" hold.
3
+ * the codex app-server child.
5
4
  *
6
5
  * Canonical shape:
7
6
  * {
8
- * "approvalPolicy": "never", // from dispatchers[].runtime.config
9
- * "sandboxMode": "workspace-write", // from dispatchers[].runtime.config
10
- * "extraArgs": ["--model", "..."] // from runtime.config.extra_args
7
+ * "sandboxMode": "workspace-write", // from the dispatcher's agents[] entry config
8
+ * "extraArgs": ["--model", "..."] // from that entry's config.extra_args
11
9
  * }
12
10
  *
13
- * This JSON is encoded per dispatcher from
14
- * `dispatchers[].runtime.config` (every field carries a dispatcher-local
15
- * default), so it is the sole source of truth. The optional `defaults` param
11
+ * This JSON is encoded per dispatcher from its `agents[dispatcher.agentRuntime]`
12
+ * entry's config (every field carries a dispatcher-local default), so it is
13
+ * the sole source of truth. The optional `defaults` param
16
14
  * remains a thin seam; with the top-level `codex` block removed there is no
17
15
  * global layer, and a caller normally passes nothing.
18
16
  *
19
17
  * Precedence for each field (highest wins):
20
18
  * 1. dispatchers.codex_args_json (this JSON)
21
19
  * 2. `defaults` (optional caller seam)
22
- * 3. hardcoded fallbacks (`'never'`, `'workspace-write'`, `[]`)
20
+ * 3. hardcoded fallbacks (`'workspace-write'`, `[]`)
23
21
  *
24
- * `approvalPolicy` not in the trusted-local allowlist fails-fast at startup
25
- * (issue #2 "implementation pitfalls"): dispatcher refuses to come up if the
26
- * policy may request approval AND no approval handler is wired.
22
+ * `approvalPolicy` is always `'never'` (issue #2 "trust model": the dreamux
23
+ * MVP only ships with a fail-fast approval handler, so no other policy is
24
+ * safe to run) — it is not read from config.
27
25
  *
28
- * `sandboxMode` is similarly validated against the codex 0.134 enum so a
29
- * typo doesn't reach the daemon (where the only feedback is a fatal early
30
- * exit).
26
+ * `sandboxMode` is validated against the codex 0.134 enum so a typo doesn't
27
+ * reach the daemon (where the only feedback is a fatal early exit).
31
28
  */
32
29
  export interface ParsedCodexArgs {
33
30
  approvalPolicy: string;
@@ -35,19 +32,18 @@ export interface ParsedCodexArgs {
35
32
  extraArgs: string[];
36
33
  }
37
34
  export interface CodexArgsDefaults {
38
- approvalPolicy?: string;
39
35
  sandboxMode?: string;
40
36
  extraArgs?: string[];
41
37
  }
42
38
  export declare function parseCodexArgs(json: string, defaults?: CodexArgsDefaults): ParsedCodexArgs;
43
39
  /**
44
40
  * Build the codex CLI-arg model directly from the structured codex config
45
- * block (`dispatchers[].runtime.config`), without round-tripping through JSON.
41
+ * block (the dispatcher's `agents[]` entry config), without round-tripping
42
+ * through JSON.
46
43
  * Behavior-equivalent to encoding that block and calling {@link parseCodexArgs}:
47
44
  * the same trusted-local invariants are enforced.
48
45
  */
49
46
  export declare function codexArgsFromConfig(config: {
50
- approval_policy: string;
51
47
  sandbox_mode: string;
52
48
  extra_args: string[];
53
49
  }): ParsedCodexArgs;
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAeH,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,iBAAsB,GAC/B,eAAe,CAkCjB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,eAAe,CAMlB;AAmBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAahE"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAQH,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,iBAAsB,GAC/B,eAAe,CA2BjB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG,eAAe,CAMlB;AAYD,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAahE"}
package/dist/args.js CHANGED
@@ -1,40 +1,31 @@
1
1
  /**
2
2
  * Parse `dispatchers.codex_args_json` into the CLI-arg array passed to
3
- * the codex app-server child, AND validate that the trusted-local
4
- * invariants from issue #2 "trust model" hold.
3
+ * the codex app-server child.
5
4
  *
6
5
  * Canonical shape:
7
6
  * {
8
- * "approvalPolicy": "never", // from dispatchers[].runtime.config
9
- * "sandboxMode": "workspace-write", // from dispatchers[].runtime.config
10
- * "extraArgs": ["--model", "..."] // from runtime.config.extra_args
7
+ * "sandboxMode": "workspace-write", // from the dispatcher's agents[] entry config
8
+ * "extraArgs": ["--model", "..."] // from that entry's config.extra_args
11
9
  * }
12
10
  *
13
- * This JSON is encoded per dispatcher from
14
- * `dispatchers[].runtime.config` (every field carries a dispatcher-local
15
- * default), so it is the sole source of truth. The optional `defaults` param
11
+ * This JSON is encoded per dispatcher from its `agents[dispatcher.agentRuntime]`
12
+ * entry's config (every field carries a dispatcher-local default), so it is
13
+ * the sole source of truth. The optional `defaults` param
16
14
  * remains a thin seam; with the top-level `codex` block removed there is no
17
15
  * global layer, and a caller normally passes nothing.
18
16
  *
19
17
  * Precedence for each field (highest wins):
20
18
  * 1. dispatchers.codex_args_json (this JSON)
21
19
  * 2. `defaults` (optional caller seam)
22
- * 3. hardcoded fallbacks (`'never'`, `'workspace-write'`, `[]`)
20
+ * 3. hardcoded fallbacks (`'workspace-write'`, `[]`)
23
21
  *
24
- * `approvalPolicy` not in the trusted-local allowlist fails-fast at startup
25
- * (issue #2 "implementation pitfalls"): dispatcher refuses to come up if the
26
- * policy may request approval AND no approval handler is wired.
22
+ * `approvalPolicy` is always `'never'` (issue #2 "trust model": the dreamux
23
+ * MVP only ships with a fail-fast approval handler, so no other policy is
24
+ * safe to run) — it is not read from config.
27
25
  *
28
- * `sandboxMode` is similarly validated against the codex 0.134 enum so a
29
- * typo doesn't reach the daemon (where the only feedback is a fatal early
30
- * exit).
26
+ * `sandboxMode` is validated against the codex 0.134 enum so a typo doesn't
27
+ * reach the daemon (where the only feedback is a fatal early exit).
31
28
  */
32
- const TRUSTED_LOCAL_APPROVAL_POLICIES = new Set([
33
- 'never',
34
- 'auto',
35
- 'auto-approve',
36
- 'on-failure',
37
- ]);
38
29
  const ALLOWED_SANDBOX_MODES = new Set([
39
30
  'read-only',
40
31
  'workspace-write',
@@ -52,9 +43,6 @@ export function parseCodexArgs(json, defaults = {}) {
52
43
  throw new Error('codex_args_json must be a JSON object');
53
44
  }
54
45
  const obj = raw;
55
- const approvalPolicy = typeof obj['approvalPolicy'] === 'string'
56
- ? obj['approvalPolicy']
57
- : (defaults.approvalPolicy ?? 'never');
58
46
  const sandboxMode = typeof obj['sandboxMode'] === 'string'
59
47
  ? obj['sandboxMode']
60
48
  : (defaults.sandboxMode ?? 'workspace-write');
@@ -65,31 +53,24 @@ export function parseCodexArgs(json, defaults = {}) {
65
53
  // extraArgs are appended. codex's CLI is order-sensitive for `-c key=value`
66
54
  // overrides — last write wins — so the dispatcher value overrides a same-key
67
55
  // default.
68
- const extraArgs = [
69
- ...(defaults.extraArgs ?? []),
70
- ...perDispatcherExtra,
71
- ];
72
- return validateCodexArgs({ approvalPolicy, sandboxMode, extraArgs });
56
+ const extraArgs = [...(defaults.extraArgs ?? []), ...perDispatcherExtra];
57
+ return validateCodexArgs({ approvalPolicy: 'never', sandboxMode, extraArgs });
73
58
  }
74
59
  /**
75
60
  * Build the codex CLI-arg model directly from the structured codex config
76
- * block (`dispatchers[].runtime.config`), without round-tripping through JSON.
61
+ * block (the dispatcher's `agents[]` entry config), without round-tripping
62
+ * through JSON.
77
63
  * Behavior-equivalent to encoding that block and calling {@link parseCodexArgs}:
78
64
  * the same trusted-local invariants are enforced.
79
65
  */
80
66
  export function codexArgsFromConfig(config) {
81
67
  return validateCodexArgs({
82
- approvalPolicy: config.approval_policy,
68
+ approvalPolicy: 'never',
83
69
  sandboxMode: config.sandbox_mode,
84
70
  extraArgs: [...config.extra_args],
85
71
  });
86
72
  }
87
73
  function validateCodexArgs(parsed) {
88
- if (!TRUSTED_LOCAL_APPROVAL_POLICIES.has(parsed.approvalPolicy)) {
89
- throw new Error(`dispatcher startup refused: approvalPolicy='${parsed.approvalPolicy}' may request approval, ` +
90
- `but the dreamux MVP only ships with a fail-fast approval handler ` +
91
- `(issue #2 "trust model"). Configure approvalPolicy='never' or extend the trust model first.`);
92
- }
93
74
  if (!ALLOWED_SANDBOX_MODES.has(parsed.sandboxMode)) {
94
75
  throw new Error(`dispatcher startup refused: sandboxMode='${parsed.sandboxMode}' is not one of ` +
95
76
  `${Array.from(ALLOWED_SANDBOX_MODES).join(' | ')} (codex 0.134 enum).`);
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,WAAW;IACX,iBAAiB;IACjB,oBAAoB;CACrB,CAAC,CAAC;AAaH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,WAA8B,EAAE;IAEhC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,sCAAuC,CAAW,CAAC,OAAO,EAAE,CAC7D,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,WAAW,GACf,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,QAAQ;QACpC,CAAC,CAAE,GAAG,CAAC,aAAa,CAAY;QAChC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,IAAI,iBAAiB,CAAC,CAAC;IAClD,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC,CAAE,GAAG,CAAC,WAAW,CAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,EAAE,CAAC;IACP,uEAAuE;IACvE,4EAA4E;IAC5E,6EAA6E;IAC7E,WAAW;IACX,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,CAAC;IAEzE,OAAO,iBAAiB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;AAChF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAGnC;IACC,OAAO,iBAAiB,CAAC;QACvB,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,YAAY;QAChC,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;KAClC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAuB;IAChD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,4CAA4C,MAAM,CAAC,WAAW,kBAAkB;YAC9E,GAAG,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAuB;IACpD,gEAAgE;IAChE,qEAAqE;IACrE,qEAAqE;IACrE,2EAA2E;IAC3E,0DAA0D;IAC1D,OAAO;QACL,IAAI;QACJ,mBAAmB,MAAM,CAAC,cAAc,EAAE;QAC1C,IAAI;QACJ,gBAAgB,MAAM,CAAC,WAAW,EAAE;QACpC,GAAG,MAAM,CAAC,SAAS;KACpB,CAAC;AACJ,CAAC"}
@@ -23,9 +23,8 @@ export interface DispatcherCodexHomeDoctorResult {
23
23
  errors: string[];
24
24
  context: DispatcherCodexHomeDoctorContext;
25
25
  }
26
- export type DispatcherCodexHomeDoctor = (context: DispatcherCodexHomeDoctorContext) => void | Promise<void>;
27
26
  interface DoctorContextOptions {
28
- codexCliArgs?: string[];
27
+ codexCliArgs?: string[] | undefined;
29
28
  dispatcherCwd?: string;
30
29
  /** Representative socket sample (from the path context's `runtimeSocketDirs()`). */
31
30
  socketPath?: string;
@@ -34,9 +33,14 @@ interface DoctorOptions {
34
33
  env?: DreamuxEnvironment;
35
34
  codexCliArgs?: string[];
36
35
  }
37
- export declare function dispatcherCodexHomeDoctorContext(dispatcherId: string, options?: DoctorContextOptions): DispatcherCodexHomeDoctorContext;
38
- export declare function validateDispatcherCodexHome(input: string | DispatcherCodexHomeDoctorContext, options?: DoctorOptions): Promise<DispatcherCodexHomeDoctorResult>;
39
- export declare function assertDispatcherCodexHomeReady(context: DispatcherCodexHomeDoctorContext): Promise<void>;
40
- export declare function formatDispatcherCodexHomeErrors(result: DispatcherCodexHomeDoctorResult): string;
36
+ /**
37
+ * Build the doctor context for a runtime, from the same env its Codex child
38
+ * would actually spawn with — a per-agent `CODEX_HOME` override in
39
+ * `extra_env` must be reflected here too, not just in the runtime's own spawn
40
+ * path. Pass `paths.ts`'s `codexSpawnEnv` result, not the ambient diagnostic
41
+ * env.
42
+ */
43
+ export declare function dispatcherCodexHomeDoctorContext(dispatcherId: string, env: DreamuxEnvironment, options?: DoctorContextOptions): DispatcherCodexHomeDoctorContext;
44
+ export declare function validateDispatcherCodexHome(input: DispatcherCodexHomeDoctorContext, options?: DoctorOptions): Promise<DispatcherCodexHomeDoctorResult>;
41
45
  export {};
42
46
  //# sourceMappingURL=codex-home.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-home.d.ts","sourceRoot":"","sources":["../src/codex-home.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAInE,eAAO,MAAM,2CAA2C,MACpB,CAAC;AAErC,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,+BAA+B;IAC9C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,gCAAgC,CAAC;CAC3C;AAED,MAAM,MAAM,yBAAyB,GAAG,CACtC,OAAO,EAAE,gCAAgC,KACtC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,UAAU,oBAAoB;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,oBAAyB,GACjC,gCAAgC,CASlC;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,GAAG,gCAAgC,EAChD,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,+BAA+B,CAAC,CAyD1C;AAED,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,+BAA+B,GACtC,MAAM,CAGR"}
1
+ {"version":3,"file":"codex-home.d.ts","sourceRoot":"","sources":["../src/codex-home.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAInE,eAAO,MAAM,2CAA2C,MACpB,CAAC;AAErC,MAAM,WAAW,gCAAgC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,+BAA+B;IAC9C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,gCAAgC,CAAC;CAC3C;AAED,UAAU,oBAAoB;IAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,kBAAkB,EACvB,OAAO,GAAE,oBAAyB,GACjC,gCAAgC,CAUlC;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,gCAAgC,EACvC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,+BAA+B,CAAC,CAoD1C"}
@@ -2,39 +2,44 @@
2
2
  * Codex home/auth pre-start validation (issue #209 cleanup — relocated from
3
3
  * Dreamux core into the owning package).
4
4
  *
5
- * This is the codex-engine readiness check: it validates that Codex's own global
6
- * home (`~/.codex`) exists, parses its `config.toml`, carries usable auth, and
7
- * that the representative app-server socket placement is sane. It is
8
- * codex-specific and carries NO `~/.dreamux` knowledge — the host's socket
9
- * placement arrives as a neutral sample (`socketPath`) computed from the path
10
- * context's `runtimeSocketDirs()`, and `dispatcherCwd` is optional (the
11
- * validation never reads it).
5
+ * This is the codex-engine readiness check: it validates that the Codex home a
6
+ * runtime will actually use (its `extra_env`'s `CODEX_HOME` override, or else
7
+ * `~/.codex` — see `paths.ts`'s `resolveCodexHomeDir`) exists, parses its
8
+ * `config.toml`, carries usable auth, and that the representative app-server
9
+ * socket placement is sane. It is codex-specific and carries NO `~/.dreamux`
10
+ * knowledge — the host's socket placement arrives as a neutral sample
11
+ * (`socketPath`) computed from the path context's `runtimeSocketDirs()`, and
12
+ * `dispatcherCwd` is optional (the validation never reads it).
12
13
  */
13
14
  import { readFile } from 'node:fs/promises';
14
15
  import { join, normalize, sep } from 'node:path';
15
16
  import { parse as parseToml, TomlError } from 'smol-toml';
16
17
  import { DREAMUX_UNIX_SOCKET_PATH_MAX_BYTES, pathExists, unixSocketPathFitsBudget, } from '@excitedjs/dreamux-utils';
17
- import { dispatcherCodexConfigPath, dispatcherCodexHome } from './paths.js';
18
+ import { resolveCodexHomeDir } from './paths.js';
18
19
  export const DISPATCHER_APP_SERVER_SOCKET_PATH_MAX_BYTES = DREAMUX_UNIX_SOCKET_PATH_MAX_BYTES;
19
- export function dispatcherCodexHomeDoctorContext(dispatcherId, options = {}) {
20
+ /**
21
+ * Build the doctor context for a runtime, from the same env its Codex child
22
+ * would actually spawn with — a per-agent `CODEX_HOME` override in
23
+ * `extra_env` must be reflected here too, not just in the runtime's own spawn
24
+ * path. Pass `paths.ts`'s `codexSpawnEnv` result, not the ambient diagnostic
25
+ * env.
26
+ */
27
+ export function dispatcherCodexHomeDoctorContext(dispatcherId, env, options = {}) {
28
+ const codexHome = resolveCodexHomeDir(env);
20
29
  return {
21
30
  dispatcherId,
22
- codexHome: dispatcherCodexHome(dispatcherId),
23
- configPath: dispatcherCodexConfigPath(dispatcherId),
31
+ codexHome,
32
+ configPath: join(codexHome, 'config.toml'),
24
33
  dispatcherCwd: options.dispatcherCwd ?? '',
25
34
  socketPath: options.socketPath ?? '',
26
35
  codexCliArgs: options.codexCliArgs ?? [],
27
36
  };
28
37
  }
29
38
  export async function validateDispatcherCodexHome(input, options = {}) {
30
- const context = typeof input === 'string'
31
- ? dispatcherCodexHomeDoctorContext(input, {
32
- codexCliArgs: options.codexCliArgs,
33
- })
34
- : {
35
- ...input,
36
- codexCliArgs: options.codexCliArgs ?? input.codexCliArgs,
37
- };
39
+ const context = {
40
+ ...input,
41
+ codexCliArgs: options.codexCliArgs ?? input.codexCliArgs,
42
+ };
38
43
  const errors = [];
39
44
  const env = options.env ?? process.env;
40
45
  if (await pathExists(context.configPath)) {
@@ -74,16 +79,6 @@ export async function validateDispatcherCodexHome(input, options = {}) {
74
79
  context,
75
80
  };
76
81
  }
77
- export async function assertDispatcherCodexHomeReady(context) {
78
- const result = await validateDispatcherCodexHome(context);
79
- if (result.ok)
80
- return;
81
- throw new Error(formatDispatcherCodexHomeErrors(result));
82
- }
83
- export function formatDispatcherCodexHomeErrors(result) {
84
- const header = `dispatcher '${result.context.dispatcherId}' Codex home is not ready`;
85
- return [header, ...result.errors.map((e) => `- ${e}`)].join('\n');
86
- }
87
82
  function formatTomlError(err, file) {
88
83
  if (err instanceof TomlError) {
89
84
  const where = typeof err.line === 'number' && typeof err.column === 'number'
@@ -1 +1 @@
1
- {"version":3,"file":"codex-home.js","sourceRoot":"","sources":["../src/codex-home.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-home.js","sourceRoot":"","sources":["../src/codex-home.ts"],"names":[],"mappings":"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"}