@revisium/orchestrator 0.1.0-alpha.5 → 0.1.0-alpha.7

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 (193) hide show
  1. package/README.md +149 -1
  2. package/dist/api/graphql-api/filters/agent-observability-exception.filter.js +24 -0
  3. package/dist/api/graphql-api/filters/agent-observability-exception.filter.js.map +1 -0
  4. package/dist/api/graphql-api/graphql-api.module.js +2 -0
  5. package/dist/api/graphql-api/graphql-api.module.js.map +1 -1
  6. package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-bridge.service.js +296 -0
  7. package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-bridge.service.js.map +1 -0
  8. package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-mappers.js +64 -0
  9. package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-mappers.js.map +1 -0
  10. package/dist/api/graphql-api/graphql-ws/constants.js +2 -0
  11. package/dist/api/graphql-api/graphql-ws/constants.js.map +1 -1
  12. package/dist/api/graphql-api/graphql-ws/pubsub.module.js +5 -2
  13. package/dist/api/graphql-api/graphql-ws/pubsub.module.js.map +1 -1
  14. package/dist/api/graphql-api/registerGraphqlEnums.js +6 -1
  15. package/dist/api/graphql-api/registerGraphqlEnums.js.map +1 -1
  16. package/dist/api/graphql-api/runs/inputs/get-agent-log.input.js +48 -0
  17. package/dist/api/graphql-api/runs/inputs/get-agent-log.input.js.map +1 -0
  18. package/dist/api/graphql-api/runs/model/agent-activity.model.js +367 -0
  19. package/dist/api/graphql-api/runs/model/agent-activity.model.js.map +1 -0
  20. package/dist/api/graphql-api/runs/runs-subscription.resolver.js +35 -4
  21. package/dist/api/graphql-api/runs/runs-subscription.resolver.js.map +1 -1
  22. package/dist/api/graphql-api/runs/runs.resolver.js +35 -0
  23. package/dist/api/graphql-api/runs/runs.resolver.js.map +1 -1
  24. package/dist/cli/commands/doctor-report.js +52 -0
  25. package/dist/cli/commands/doctor-report.js.map +1 -0
  26. package/dist/cli/commands/lifecycle.js +304 -0
  27. package/dist/cli/commands/lifecycle.js.map +1 -0
  28. package/dist/cli/commands/mcp.js +46 -8
  29. package/dist/cli/commands/mcp.js.map +1 -1
  30. package/dist/cli/commands/revisium-helpers.js +2 -2
  31. package/dist/cli/index.js +5 -29
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/cli/program.js +7 -23
  34. package/dist/cli/program.js.map +1 -1
  35. package/dist/config.js +42 -5
  36. package/dist/config.js.map +1 -1
  37. package/dist/control-plane/bootstrap.js +93 -0
  38. package/dist/control-plane/bootstrap.js.map +1 -0
  39. package/dist/control-plane/schema-migration.js +7 -11
  40. package/dist/control-plane/schema-migration.js.map +1 -1
  41. package/dist/control-plane/seed-default-playbook.js +23 -0
  42. package/dist/control-plane/seed-default-playbook.js.map +1 -1
  43. package/dist/e2e/kit/agents.js +17 -5
  44. package/dist/e2e/kit/agents.js.map +1 -1
  45. package/dist/e2e/kit/assertions.js +20 -0
  46. package/dist/e2e/kit/assertions.js.map +1 -1
  47. package/dist/e2e/kit/harness.js +12 -1
  48. package/dist/e2e/kit/harness.js.map +1 -1
  49. package/dist/e2e/kit/scenarios.js +1 -1
  50. package/dist/e2e/recovery-dd-crash-child.js +3 -2
  51. package/dist/e2e/recovery-dd-crash-child.js.map +1 -1
  52. package/dist/engine/dbos.service.js +20 -0
  53. package/dist/engine/dbos.service.js.map +1 -1
  54. package/dist/engine/ensure-postgres.js +11 -9
  55. package/dist/engine/ensure-postgres.js.map +1 -1
  56. package/dist/features/runs/queries/handlers/runs-query.handlers.js +135 -0
  57. package/dist/features/runs/queries/handlers/runs-query.handlers.js.map +1 -1
  58. package/dist/features/runs/queries/impl/get-agent-activity.query.js +7 -0
  59. package/dist/features/runs/queries/impl/get-agent-activity.query.js.map +1 -0
  60. package/dist/features/runs/queries/impl/get-agent-attempts.query.js +7 -0
  61. package/dist/features/runs/queries/impl/get-agent-attempts.query.js.map +1 -0
  62. package/dist/features/runs/queries/impl/get-agent-log.query.js +7 -0
  63. package/dist/features/runs/queries/impl/get-agent-log.query.js.map +1 -0
  64. package/dist/features/runs/queries/index.js +4 -1
  65. package/dist/features/runs/queries/index.js.map +1 -1
  66. package/dist/features/runs/runs-api.service.js +12 -0
  67. package/dist/features/runs/runs-api.service.js.map +1 -1
  68. package/dist/host/daemon.js +86 -0
  69. package/dist/host/daemon.js.map +1 -0
  70. package/dist/host/ensure-host.js +116 -0
  71. package/dist/host/ensure-host.js.map +1 -0
  72. package/dist/host/host-runtime.js +72 -0
  73. package/dist/host/host-runtime.js.map +1 -0
  74. package/dist/host/queue-ownership.js +53 -0
  75. package/dist/host/queue-ownership.js.map +1 -0
  76. package/dist/http/graphql-host.js +8 -2
  77. package/dist/http/graphql-host.js.map +1 -1
  78. package/dist/http/graphql-host.module.js +3 -0
  79. package/dist/http/graphql-host.module.js.map +1 -1
  80. package/dist/mcp/mcp-capabilities.js +6 -1
  81. package/dist/mcp/mcp-capabilities.js.map +1 -1
  82. package/dist/mcp/mcp-facade.service.js +24 -0
  83. package/dist/mcp/mcp-facade.service.js.map +1 -1
  84. package/dist/mcp/mcp-http.service.js +95 -0
  85. package/dist/mcp/mcp-http.service.js.map +1 -0
  86. package/dist/mcp/mcp-tools.js +58 -0
  87. package/dist/mcp/mcp-tools.js.map +1 -1
  88. package/dist/observability/agent-activity-reporter.js +185 -0
  89. package/dist/observability/agent-activity-reporter.js.map +1 -0
  90. package/dist/observability/agent-observability.service.js +1142 -0
  91. package/dist/observability/agent-observability.service.js.map +1 -0
  92. package/dist/observability/index.js +4 -0
  93. package/dist/observability/index.js.map +1 -0
  94. package/dist/observability/types.js +11 -0
  95. package/dist/observability/types.js.map +1 -0
  96. package/dist/pipeline/data-driven-task.workflow.js +37 -75
  97. package/dist/pipeline/data-driven-task.workflow.js.map +1 -1
  98. package/dist/pipeline/pipeline.service.js +54 -15
  99. package/dist/pipeline/pipeline.service.js.map +1 -1
  100. package/dist/pipeline-core/validate-capability.js +23 -0
  101. package/dist/pipeline-core/validate-capability.js.map +1 -0
  102. package/dist/pipeline-core/validate-conflicts.js +37 -0
  103. package/dist/pipeline-core/validate-conflicts.js.map +1 -0
  104. package/dist/pipeline-core/validate-dataflow.js +180 -0
  105. package/dist/pipeline-core/validate-dataflow.js.map +1 -0
  106. package/dist/pipeline-core/validate-diff.js +158 -0
  107. package/dist/pipeline-core/validate-diff.js.map +1 -0
  108. package/dist/pipeline-core/validate-edges.js +44 -0
  109. package/dist/pipeline-core/validate-edges.js.map +1 -0
  110. package/dist/pipeline-core/validate-graph.js +123 -0
  111. package/dist/pipeline-core/validate-graph.js.map +1 -0
  112. package/dist/pipeline-core/validate-loops.js +226 -0
  113. package/dist/pipeline-core/validate-loops.js.map +1 -0
  114. package/dist/pipeline-core/validate-parallel.js +132 -0
  115. package/dist/pipeline-core/validate-parallel.js.map +1 -0
  116. package/dist/pipeline-core/validate-sink.js +27 -0
  117. package/dist/pipeline-core/validate-sink.js.map +1 -0
  118. package/dist/pipeline-core/validate-topology.js +140 -0
  119. package/dist/pipeline-core/validate-topology.js.map +1 -0
  120. package/dist/pipeline-core/validate-verdict.js +72 -0
  121. package/dist/pipeline-core/validate-verdict.js.map +1 -0
  122. package/dist/pipeline-core/validate.js +34 -1107
  123. package/dist/pipeline-core/validate.js.map +1 -1
  124. package/dist/revisium/run.service.js +15 -1
  125. package/dist/revisium/run.service.js.map +1 -1
  126. package/dist/runners/codex.service.js +51 -0
  127. package/dist/runners/codex.service.js.map +1 -0
  128. package/dist/runners/integrator-branch-naming.js +24 -0
  129. package/dist/runners/integrator-branch-naming.js.map +1 -0
  130. package/dist/runners/integrator-git.js +84 -0
  131. package/dist/runners/integrator-git.js.map +1 -0
  132. package/dist/runners/integrator-remote.js +34 -0
  133. package/dist/runners/integrator-remote.js.map +1 -0
  134. package/dist/runners/integrator-types.js +9 -0
  135. package/dist/runners/integrator-types.js.map +1 -0
  136. package/dist/runners/integrator.js +12 -132
  137. package/dist/runners/integrator.js.map +1 -1
  138. package/dist/runners/runner.module.js +4 -2
  139. package/dist/runners/runner.module.js.map +1 -1
  140. package/dist/smoke/cli.js +47 -0
  141. package/dist/smoke/cli.js.map +1 -0
  142. package/dist/smoke/isolation.js +113 -0
  143. package/dist/smoke/isolation.js.map +1 -0
  144. package/dist/task-control-plane/task-control-plane-api.service.js +24 -1
  145. package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
  146. package/dist/task-control-plane/task-control-plane.module.js +21 -1
  147. package/dist/task-control-plane/task-control-plane.module.js.map +1 -1
  148. package/dist/worker/artifact-store.js +6 -1
  149. package/dist/worker/artifact-store.js.map +1 -1
  150. package/dist/worker/build-context.js +135 -1
  151. package/dist/worker/build-context.js.map +1 -1
  152. package/dist/worker/claude-code-runner.js +132 -78
  153. package/dist/worker/claude-code-runner.js.map +1 -1
  154. package/dist/worker/codex-runner.js +474 -0
  155. package/dist/worker/codex-runner.js.map +1 -0
  156. package/dist/worker/result-envelope.js +91 -73
  157. package/dist/worker/result-envelope.js.map +1 -1
  158. package/dist/worker/runner-common.js +106 -0
  159. package/dist/worker/runner-common.js.map +1 -0
  160. package/dist/worker/runner-dispatch.js +3 -1
  161. package/dist/worker/runner-dispatch.js.map +1 -1
  162. package/dist/worker/runner.js.map +1 -1
  163. package/dist/worker/stub-runner.js +3 -3
  164. package/dist/worker/stub-runner.js.map +1 -1
  165. package/package.json +1 -1
  166. package/dist/app.module.js +0 -28
  167. package/dist/app.module.js.map +0 -1
  168. package/dist/cli/commands/bootstrap.js +0 -100
  169. package/dist/cli/commands/bootstrap.js.map +0 -1
  170. package/dist/cli/commands/dev.js +0 -143
  171. package/dist/cli/commands/dev.js.map +0 -1
  172. package/dist/cli/commands/inbox.js +0 -288
  173. package/dist/cli/commands/inbox.js.map +0 -1
  174. package/dist/cli/commands/playbook.js +0 -74
  175. package/dist/cli/commands/playbook.js.map +0 -1
  176. package/dist/cli/commands/poll-workflow-state.js +0 -144
  177. package/dist/cli/commands/poll-workflow-state.js.map +0 -1
  178. package/dist/cli/commands/revisium-context.js +0 -23
  179. package/dist/cli/commands/revisium-context.js.map +0 -1
  180. package/dist/cli/commands/revisium.js +0 -89
  181. package/dist/cli/commands/revisium.js.map +0 -1
  182. package/dist/cli/commands/run.js +0 -451
  183. package/dist/cli/commands/run.js.map +0 -1
  184. package/dist/cli/commands/serve.js +0 -26
  185. package/dist/cli/commands/serve.js.map +0 -1
  186. package/dist/cli/live-guard.js +0 -49
  187. package/dist/cli/live-guard.js.map +0 -1
  188. package/dist/cli/needs-host.js +0 -77
  189. package/dist/cli/needs-host.js.map +0 -1
  190. package/dist/mcp/mcp-stdio.service.js +0 -48
  191. package/dist/mcp/mcp-stdio.service.js.map +0 -1
  192. package/dist/mcp/mcp.module.js +0 -21
  193. package/dist/mcp/mcp.module.js.map +0 -1
@@ -0,0 +1,474 @@
1
+ import { join } from 'node:path';
2
+ import { mkdirSync, writeFileSync } from 'node:fs';
3
+ import { RunAgentError } from './runner.js';
4
+ import { boundedPreview, boundedPreviewValue, buildAttemptResult, buildUsageCosts, runnerError, tail, } from './runner-common.js';
5
+ const DEFAULT_TIMEOUT_MS = 600_000;
6
+ const DEFAULT_COMMAND = 'codex';
7
+ export const CODEX_OUTPUT_SCHEMA = {
8
+ type: 'object',
9
+ additionalProperties: false,
10
+ properties: {
11
+ verdict: {
12
+ type: 'string',
13
+ minLength: 1,
14
+ description: 'the single routing token for the role, lowercase',
15
+ },
16
+ output: {
17
+ description: 'the structured or textual output consumed by the orchestrator',
18
+ },
19
+ artifacts: {
20
+ description: 'nullable JSON artifacts; use null when there are no artifacts',
21
+ },
22
+ nextSteps: {
23
+ anyOf: [
24
+ {
25
+ type: 'array',
26
+ description: 'follow-up step specs; use [] when no follow-up work is needed',
27
+ items: { type: 'object' },
28
+ },
29
+ { type: 'null' },
30
+ ],
31
+ },
32
+ needsHuman: {
33
+ anyOf: [{ type: 'boolean' }, { type: 'null' }],
34
+ description: 'true only when a human must intervene; null is normalized to false',
35
+ },
36
+ lesson: {
37
+ anyOf: [{ type: 'string' }, { type: 'null' }],
38
+ description: 'nullable one-line lesson for a future attempt',
39
+ },
40
+ },
41
+ required: ['verdict', 'output', 'artifacts', 'nextSteps', 'needsHuman', 'lesson'],
42
+ };
43
+ const STRUCTURED_RESULT_NOTE = `
44
+ Return only JSON matching the provided output schema as your final answer.
45
+ All fields are required: verdict, output, artifacts, nextSteps, needsHuman, lesson.
46
+ Use null for nullable fields when they do not apply. Do not put the result only in prose.
47
+ `;
48
+ function writeCodexOutputSchema(processDir) {
49
+ mkdirSync(processDir, { recursive: true });
50
+ const schemaPath = join(processDir, 'codex-output.schema.json');
51
+ writeFileSync(schemaPath, JSON.stringify(CODEX_OUTPUT_SCHEMA, null, 2) + '\n', 'utf8');
52
+ return schemaPath;
53
+ }
54
+ function buildPrompt(context, attemptId) {
55
+ const idempotencyLine = `Attempt-Id: ${attemptId} - idempotency key. Reference it on any external effect you create.`;
56
+ return [context, idempotencyLine, STRUCTURED_RESULT_NOTE].join('\n');
57
+ }
58
+ function isOpenAiCompatibleProvider(provider) {
59
+ const normalized = provider.trim().toLowerCase();
60
+ return normalized.includes('openai') || normalized.includes('codex');
61
+ }
62
+ const WRITE_TOOL_NAMES = new Set(['edit', 'multiedit', 'notebookedit', 'write']);
63
+ const READ_ONLY_RIGHTS = new Set([
64
+ '',
65
+ 'deploy-read',
66
+ 'qa-live',
67
+ 'read only',
68
+ 'read-only',
69
+ 'read-only pr inspection',
70
+ 'readonly',
71
+ 'state and routing only',
72
+ ]);
73
+ const WORKSPACE_WRITE_RIGHTS = new Set([
74
+ 'git and github writes',
75
+ 'git-gh',
76
+ 'write',
77
+ 'write working tree',
78
+ 'write-working-tree',
79
+ 'working tree write',
80
+ 'working-tree-write',
81
+ ]);
82
+ function normalizedPolicyLabel(value) {
83
+ return (value ?? '').trim().toLowerCase().replaceAll('_', '-').replace(/\s+/g, ' ');
84
+ }
85
+ function isWriteToolName(tool) {
86
+ const normalized = tool.trim().toLowerCase();
87
+ return WRITE_TOOL_NAMES.has(normalized);
88
+ }
89
+ function sandboxForRole(role) {
90
+ if (role.allowedTools.some(isWriteToolName))
91
+ return 'workspace-write';
92
+ const rights = normalizedPolicyLabel(role.rights);
93
+ if (WORKSPACE_WRITE_RIGHTS.has(rights))
94
+ return 'workspace-write';
95
+ if (READ_ONLY_RIGHTS.has(rights))
96
+ return 'read-only';
97
+ if (rights.length > 0) {
98
+ throw new Error(`codex runner does not know how to map role rights "${role.rights}" to a sandbox`);
99
+ }
100
+ return 'read-only';
101
+ }
102
+ function buildArgs(modelId, sandbox, cwd, schemaPath) {
103
+ return [
104
+ 'exec',
105
+ '--json',
106
+ '--output-schema',
107
+ schemaPath,
108
+ '-c',
109
+ 'approval_policy="never"',
110
+ '--model',
111
+ modelId,
112
+ '--sandbox',
113
+ sandbox,
114
+ '--cd',
115
+ cwd,
116
+ '--ephemeral',
117
+ '--ignore-user-config',
118
+ '--color',
119
+ 'never',
120
+ '-',
121
+ ];
122
+ }
123
+ function requireCompatibleProfile(profile) {
124
+ if (profile.modelId.trim().length === 0) {
125
+ throw new Error('codex runner requires a non-empty model_profiles.model_id');
126
+ }
127
+ if (!isOpenAiCompatibleProvider(profile.provider)) {
128
+ throw new Error(`codex runner requires an OpenAI/Codex-compatible provider, got "${profile.provider}"`);
129
+ }
130
+ }
131
+ function readNumber(value) {
132
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
133
+ }
134
+ function readString(value) {
135
+ return typeof value === 'string' && value.trim().length > 0 ? value : undefined;
136
+ }
137
+ function maybeObject(value) {
138
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
139
+ }
140
+ function isStructuredCandidate(value) {
141
+ const obj = maybeObject(value);
142
+ return Boolean(obj && 'verdict' in obj && 'output' in obj);
143
+ }
144
+ function parseJsonObjectText(value) {
145
+ const trimmed = value.trim();
146
+ if (!trimmed.startsWith('{') || !trimmed.endsWith('}'))
147
+ return undefined;
148
+ try {
149
+ return JSON.parse(trimmed);
150
+ }
151
+ catch {
152
+ return undefined;
153
+ }
154
+ }
155
+ function candidateFromContentArray(value) {
156
+ if (!Array.isArray(value))
157
+ return undefined;
158
+ for (const entry of value) {
159
+ const obj = maybeObject(entry);
160
+ const text = readString(obj?.text) ?? readString(obj?.content);
161
+ if (!text)
162
+ continue;
163
+ const parsed = parseJsonObjectText(text);
164
+ if (isStructuredCandidate(parsed))
165
+ return parsed;
166
+ }
167
+ return undefined;
168
+ }
169
+ const TERMINAL_STRUCTURED_KEYS = ['structured_output', 'structuredOutput', 'final_output', 'finalOutput'];
170
+ const TERMINAL_OBJECT_KEYS = ['output', 'result'];
171
+ const TERMINAL_CONTENT_HOLDER_KEYS = ['output'];
172
+ const TERMINAL_TEXT_KEYS = ['output_text', 'text', 'result'];
173
+ function structuredCandidateFromObjectKeys(source, keys) {
174
+ for (const key of keys) {
175
+ const candidate = source[key];
176
+ if (isStructuredCandidate(candidate))
177
+ return candidate;
178
+ }
179
+ return undefined;
180
+ }
181
+ function structuredCandidateFromContentHolder(value) {
182
+ const obj = maybeObject(value);
183
+ if (!obj)
184
+ return undefined;
185
+ const outputCandidate = structuredCandidateFromObjectKeys(obj, TERMINAL_CONTENT_HOLDER_KEYS);
186
+ return outputCandidate ?? candidateFromContentArray(obj.content);
187
+ }
188
+ function structuredCandidateFromTextKeys(source) {
189
+ for (const key of TERMINAL_TEXT_KEYS) {
190
+ const value = readString(source[key]);
191
+ if (!value)
192
+ continue;
193
+ const parsed = parseJsonObjectText(value);
194
+ if (isStructuredCandidate(parsed))
195
+ return parsed;
196
+ }
197
+ return undefined;
198
+ }
199
+ function structuredCandidateFromTerminalEvent(event) {
200
+ if (event.type !== 'turn.completed')
201
+ return undefined;
202
+ return structuredCandidateFromObjectKeys(event, TERMINAL_STRUCTURED_KEYS)
203
+ ?? structuredCandidateFromObjectKeys(event, TERMINAL_OBJECT_KEYS)
204
+ ?? structuredCandidateFromContentHolder(event.item)
205
+ ?? structuredCandidateFromContentHolder(event.message)
206
+ ?? structuredCandidateFromTextKeys(event);
207
+ }
208
+ function eventFailureMessage(event) {
209
+ if (event.type !== 'turn.failed')
210
+ return undefined;
211
+ const error = maybeObject(event.error);
212
+ return readString(event.message)
213
+ ?? readString(event.reason)
214
+ ?? readString(error?.message)
215
+ ?? readString(error?.code)
216
+ ?? JSON.stringify(boundedPreviewValue(event));
217
+ }
218
+ function permissionBlockedText(value) {
219
+ const text = typeof value === 'string' ? value : JSON.stringify(boundedPreviewValue(value));
220
+ return /\b(permission|approval|approve|sandbox|policy)\b/i.test(text)
221
+ && /\b(denied|blocked|disallowed|not allowed|forbidden|rejected|never)\b/i.test(text);
222
+ }
223
+ function usageFromEvent(event) {
224
+ const usage = maybeObject(event.usage) ?? maybeObject(event.token_usage) ?? {};
225
+ return {
226
+ costUsd: readNumber(event.total_cost_usd) ?? readNumber(event.cost_usd) ?? readNumber(usage.cost_usd),
227
+ inputTokens: readNumber(event.input_tokens)
228
+ ?? readNumber(event.inputTokens)
229
+ ?? readNumber(usage.input_tokens)
230
+ ?? readNumber(usage.inputTokens),
231
+ outputTokens: readNumber(event.output_tokens)
232
+ ?? readNumber(event.outputTokens)
233
+ ?? readNumber(usage.output_tokens)
234
+ ?? readNumber(usage.outputTokens),
235
+ };
236
+ }
237
+ function parseJsonlEvent(line, lineNumber) {
238
+ let parsed;
239
+ try {
240
+ parsed = JSON.parse(line);
241
+ }
242
+ catch {
243
+ throw new Error(`codex exec returned malformed JSONL at line ${lineNumber}`);
244
+ }
245
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
246
+ throw new Error(`codex exec returned non-object JSONL at line ${lineNumber}`);
247
+ }
248
+ return parsed;
249
+ }
250
+ function reportJsonlEvent(event, reporter) {
251
+ reporter?.parsed({ type: readString(event.type) ?? 'event', preview: boundedPreview(event) });
252
+ }
253
+ function applyUsageSummary(summary, event) {
254
+ const usage = usageFromEvent(event);
255
+ summary.costUsd = usage.costUsd ?? summary.costUsd;
256
+ summary.inputTokens = usage.inputTokens ?? summary.inputTokens;
257
+ summary.outputTokens = usage.outputTokens ?? summary.outputTokens;
258
+ }
259
+ function applyFailureSummary(summary, event) {
260
+ const failure = eventFailureMessage(event);
261
+ if (!failure)
262
+ return;
263
+ summary.failedMessage = failure;
264
+ summary.permissionBlocked ||= permissionBlockedText(event);
265
+ }
266
+ function applyStructuredSummary(summary, event) {
267
+ const structured = structuredCandidateFromTerminalEvent(event);
268
+ if (structured !== undefined)
269
+ summary.finalStructured = structured;
270
+ }
271
+ function summarizeCodexEvents(events) {
272
+ if (events.length === 0)
273
+ throw new Error('codex exec did not return JSONL events');
274
+ const summary = { permissionBlocked: false };
275
+ for (const event of events) {
276
+ applyUsageSummary(summary, event);
277
+ applyFailureSummary(summary, event);
278
+ applyStructuredSummary(summary, event);
279
+ }
280
+ return summary;
281
+ }
282
+ function parseCodexJsonl(stdout, reporter) {
283
+ const lines = stdout.split(/\r?\n/).filter((line) => line.trim().length > 0);
284
+ const events = lines.map((line, index) => {
285
+ const event = parseJsonlEvent(line, index + 1);
286
+ reportJsonlEvent(event, reporter);
287
+ return event;
288
+ });
289
+ return summarizeCodexEvents(events);
290
+ }
291
+ function createStreamingJsonlCollector(reporter) {
292
+ let buffered = '';
293
+ let received = '';
294
+ const parsedEvents = [];
295
+ let parseError;
296
+ function parseLine(line) {
297
+ if (line.trim().length === 0)
298
+ return;
299
+ try {
300
+ const event = parseJsonlEvent(line, parsedEvents.length + 1);
301
+ parsedEvents.push(event);
302
+ reportJsonlEvent(event, reporter);
303
+ }
304
+ catch (err) {
305
+ parseError = err instanceof Error ? err : new Error(String(err));
306
+ }
307
+ }
308
+ return {
309
+ append(chunk) {
310
+ received += chunk;
311
+ buffered += chunk;
312
+ const parts = buffered.split(/\r?\n/);
313
+ buffered = parts.pop() ?? '';
314
+ for (const part of parts)
315
+ parseLine(part);
316
+ },
317
+ finish(fallbackStdout) {
318
+ if (received.length === 0)
319
+ return parseCodexJsonl(fallbackStdout, reporter);
320
+ parseLine(buffered);
321
+ if (parseError)
322
+ throw parseError;
323
+ return summarizeCodexEvents(parsedEvents);
324
+ },
325
+ };
326
+ }
327
+ function validateCodexOutputAgainstSchema(value) {
328
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
329
+ return [{ path: '$', message: 'must be an object' }];
330
+ }
331
+ const obj = value;
332
+ return [
333
+ ...missingRequiredIssues(obj),
334
+ ...additionalPropertyIssues(obj),
335
+ ...fieldTypeIssues(obj),
336
+ ...nextStepEntryIssues(obj),
337
+ ];
338
+ }
339
+ function missingRequiredIssues(obj) {
340
+ return CODEX_OUTPUT_SCHEMA.required
341
+ .filter((key) => !(key in obj))
342
+ .map((key) => ({ path: `$.${key}`, message: 'is required' }));
343
+ }
344
+ function additionalPropertyIssues(obj) {
345
+ if (CODEX_OUTPUT_SCHEMA.additionalProperties === false) {
346
+ const allowed = new Set(Object.keys(CODEX_OUTPUT_SCHEMA.properties));
347
+ return Object.keys(obj)
348
+ .filter((key) => !allowed.has(key))
349
+ .map((key) => ({ path: `$.${key}`, message: 'is not allowed by schema' }));
350
+ }
351
+ return [];
352
+ }
353
+ function fieldTypeIssues(obj) {
354
+ const issues = [];
355
+ if ('verdict' in obj && (typeof obj.verdict !== 'string' || obj.verdict.trim().length === 0)) {
356
+ issues.push({ path: '$.verdict', message: 'must be a non-empty string' });
357
+ }
358
+ if ('nextSteps' in obj && obj.nextSteps !== null && !Array.isArray(obj.nextSteps)) {
359
+ issues.push({ path: '$.nextSteps', message: 'must be an array or null' });
360
+ }
361
+ if ('needsHuman' in obj && obj.needsHuman !== null && typeof obj.needsHuman !== 'boolean') {
362
+ issues.push({ path: '$.needsHuman', message: 'must be a boolean or null' });
363
+ }
364
+ if ('lesson' in obj && obj.lesson !== null && typeof obj.lesson !== 'string') {
365
+ issues.push({ path: '$.lesson', message: 'must be a string or null' });
366
+ }
367
+ return issues;
368
+ }
369
+ function nextStepEntryIssues(obj) {
370
+ if (!Array.isArray(obj.nextSteps))
371
+ return [];
372
+ return obj.nextSteps.flatMap((entry, index) => entry && typeof entry === 'object' && !Array.isArray(entry)
373
+ ? []
374
+ : [{ path: `$.nextSteps[${index}]`, message: 'must be an object' }]);
375
+ }
376
+ function normalizeCodexResult(structured) {
377
+ if (structured === undefined)
378
+ throw new TypeError('codex structured result missing final schema output');
379
+ const issues = validateCodexOutputAgainstSchema(structured);
380
+ if (issues.length > 0) {
381
+ const detail = issues.map((issue) => `${issue.path} ${issue.message}`).join('; ');
382
+ throw new TypeError(`codex structured result violates output schema: ${detail}`);
383
+ }
384
+ const obj = structured;
385
+ return {
386
+ verdict: obj.verdict,
387
+ output: obj.output,
388
+ artifacts: obj.artifacts === null ? undefined : obj.artifacts,
389
+ nextSteps: Array.isArray(obj.nextSteps) ? obj.nextSteps : [],
390
+ needsHuman: obj.needsHuman === true,
391
+ lesson: typeof obj.lesson === 'string' ? obj.lesson : undefined,
392
+ };
393
+ }
394
+ export function createCodexRunner(deps) {
395
+ const fallbackTimeoutMs = deps.timeoutMs ?? DEFAULT_TIMEOUT_MS;
396
+ const command = deps.command ?? DEFAULT_COMMAND;
397
+ return async ({ role, profile, context, attemptId, step, reporter }) => {
398
+ let processArtifact;
399
+ try {
400
+ requireCompatibleProfile(profile);
401
+ const timeoutMs = role.timeoutMs ?? fallbackTimeoutMs;
402
+ const cwd = await deps.resolveCwd(step);
403
+ const sandbox = sandboxForRole(role);
404
+ const schemaPath = writeCodexOutputSchema(deps.artifactStore.resolveAttemptDir(step.runId, attemptId));
405
+ const args = buildArgs(profile.modelId, sandbox, cwd, schemaPath);
406
+ processArtifact = deps.artifactStore.startProcess({
407
+ runId: step.runId,
408
+ attemptId,
409
+ stepId: step.id,
410
+ role: role.name,
411
+ command,
412
+ args,
413
+ cwd,
414
+ timeoutMs,
415
+ });
416
+ const collector = createStreamingJsonlCollector(reporter);
417
+ reporter?.started();
418
+ const req = {
419
+ command,
420
+ args,
421
+ cwd,
422
+ timeoutMs,
423
+ input: buildPrompt(context, attemptId),
424
+ onSpawn: (pid) => reporter?.spawned(pid),
425
+ onStdoutChunk: (chunk) => {
426
+ processArtifact?.appendStdout(chunk);
427
+ reporter?.output('stdout', chunk);
428
+ collector.append(chunk);
429
+ },
430
+ onStderrChunk: (chunk) => {
431
+ processArtifact?.appendStderr(chunk);
432
+ reporter?.output('stderr', chunk);
433
+ },
434
+ };
435
+ const result = await deps.executor(req);
436
+ const processSnapshot = processArtifact.finish({ code: result.code, timedOut: result.timedOut });
437
+ if (result.timedOut) {
438
+ reporter?.failed(`codex runner exceeded ${timeoutMs}ms`, { timedOut: true, exitCode: result.code });
439
+ throw runnerError(`codex runner exceeded ${timeoutMs}ms`, processSnapshot);
440
+ }
441
+ if (result.code !== 0) {
442
+ const message = `codex runner exited with code ${String(result.code)}: ${tail(result.stderr || result.stdout)}`;
443
+ if (permissionBlockedText(result.stderr) || permissionBlockedText(result.stdout)) {
444
+ reporter?.status('permission_blocked', { preview: tail(result.stderr || result.stdout) });
445
+ throw runnerError(message, processSnapshot);
446
+ }
447
+ reporter?.failed(`codex runner exited with code ${String(result.code)}`, { exitCode: result.code });
448
+ throw runnerError(message, processSnapshot);
449
+ }
450
+ const summary = collector.finish(result.stdout);
451
+ if (summary.failedMessage) {
452
+ const message = `codex runner reported turn.failed: ${tail(summary.failedMessage)}`;
453
+ if (summary.permissionBlocked) {
454
+ reporter?.status('permission_blocked', { preview: tail(summary.failedMessage) });
455
+ throw runnerError(message, processSnapshot);
456
+ }
457
+ reporter?.failed(message, { exitCode: result.code });
458
+ throw runnerError(message, processSnapshot);
459
+ }
460
+ const agent = normalizeCodexResult(summary.finalStructured);
461
+ const costs = buildUsageCosts(step, profile, summary);
462
+ reporter?.finished({ exitCode: result.code, timedOut: result.timedOut });
463
+ return buildAttemptResult(agent, step, costs, processSnapshot);
464
+ }
465
+ catch (err) {
466
+ if (err instanceof RunAgentError)
467
+ throw err;
468
+ const processSnapshot = processArtifact?.finish({ error: String(err) });
469
+ reporter?.failed(err);
470
+ throw runnerError(String(err), processSnapshot);
471
+ }
472
+ };
473
+ }
474
+ //# sourceMappingURL=codex-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-runner.js","sourceRoot":"","sources":["../../src/worker/codex-runner.ts"],"names":[],"mappings":"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"}