@agent-relay/sdk 2.3.14 → 2.3.16

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 (182) hide show
  1. package/README.md +68 -838
  2. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  3. package/bin/agent-relay-broker-darwin-x64 +0 -0
  4. package/bin/agent-relay-broker-linux-arm64 +0 -0
  5. package/bin/agent-relay-broker-linux-x64 +0 -0
  6. package/dist/__tests__/contract-fixtures.test.d.ts +2 -0
  7. package/dist/__tests__/contract-fixtures.test.d.ts.map +1 -0
  8. package/dist/__tests__/contract-fixtures.test.js +85 -0
  9. package/dist/__tests__/contract-fixtures.test.js.map +1 -0
  10. package/dist/__tests__/facade.test.d.ts +2 -0
  11. package/dist/__tests__/facade.test.d.ts.map +1 -0
  12. package/dist/__tests__/facade.test.js +305 -0
  13. package/dist/__tests__/facade.test.js.map +1 -0
  14. package/dist/__tests__/integration.test.d.ts +2 -0
  15. package/dist/__tests__/integration.test.d.ts.map +1 -0
  16. package/dist/__tests__/integration.test.js +169 -0
  17. package/dist/__tests__/integration.test.js.map +1 -0
  18. package/dist/__tests__/pty.test.d.ts +2 -0
  19. package/dist/__tests__/pty.test.d.ts.map +1 -0
  20. package/dist/__tests__/pty.test.js +20 -0
  21. package/dist/__tests__/pty.test.js.map +1 -0
  22. package/dist/__tests__/quickstart.test.d.ts +2 -0
  23. package/dist/__tests__/quickstart.test.d.ts.map +1 -0
  24. package/dist/__tests__/quickstart.test.js +176 -0
  25. package/dist/__tests__/quickstart.test.js.map +1 -0
  26. package/dist/__tests__/spawn-from-env.test.d.ts +2 -0
  27. package/dist/__tests__/spawn-from-env.test.d.ts.map +1 -0
  28. package/dist/__tests__/spawn-from-env.test.js +206 -0
  29. package/dist/__tests__/spawn-from-env.test.js.map +1 -0
  30. package/dist/__tests__/unit.test.d.ts +2 -0
  31. package/dist/__tests__/unit.test.d.ts.map +1 -0
  32. package/dist/__tests__/unit.test.js +347 -0
  33. package/dist/__tests__/unit.test.js.map +1 -0
  34. package/dist/browser.d.ts +16 -0
  35. package/dist/browser.d.ts.map +1 -0
  36. package/dist/browser.js +19 -0
  37. package/dist/browser.js.map +1 -0
  38. package/dist/client.d.ts +140 -526
  39. package/dist/client.d.ts.map +1 -1
  40. package/dist/client.js +430 -1509
  41. package/dist/client.js.map +1 -1
  42. package/dist/consensus-helpers.d.ts +103 -0
  43. package/dist/consensus-helpers.d.ts.map +1 -0
  44. package/dist/consensus-helpers.js +147 -0
  45. package/dist/consensus-helpers.js.map +1 -0
  46. package/dist/consensus.d.ts +72 -0
  47. package/dist/consensus.d.ts.map +1 -0
  48. package/dist/consensus.js +378 -0
  49. package/dist/consensus.js.map +1 -0
  50. package/dist/examples/demo.d.ts +2 -0
  51. package/dist/examples/demo.d.ts.map +1 -0
  52. package/dist/examples/demo.js +63 -0
  53. package/dist/examples/demo.js.map +1 -0
  54. package/dist/examples/example.d.ts +2 -0
  55. package/dist/examples/example.d.ts.map +1 -0
  56. package/dist/examples/example.js +80 -0
  57. package/dist/examples/example.js.map +1 -0
  58. package/dist/examples/quickstart.d.ts +2 -0
  59. package/dist/examples/quickstart.d.ts.map +1 -0
  60. package/dist/examples/quickstart.js +56 -0
  61. package/dist/examples/quickstart.js.map +1 -0
  62. package/dist/examples/ralph-loop.d.ts +2 -0
  63. package/dist/examples/ralph-loop.d.ts.map +1 -0
  64. package/dist/examples/ralph-loop.js +281 -0
  65. package/dist/examples/ralph-loop.js.map +1 -0
  66. package/dist/examples/workflow-superiority.d.ts +32 -0
  67. package/dist/examples/workflow-superiority.d.ts.map +1 -0
  68. package/dist/examples/workflow-superiority.js +1421 -0
  69. package/dist/examples/workflow-superiority.js.map +1 -0
  70. package/dist/index.d.ts +13 -20
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +12 -26
  73. package/dist/index.js.map +1 -1
  74. package/dist/logs.d.ts +70 -25
  75. package/dist/logs.d.ts.map +1 -1
  76. package/dist/logs.js +238 -42
  77. package/dist/logs.js.map +1 -1
  78. package/dist/models.d.ts +9 -0
  79. package/dist/models.d.ts.map +1 -0
  80. package/dist/models.js +17 -0
  81. package/dist/models.js.map +1 -0
  82. package/dist/protocol.d.ts +366 -0
  83. package/dist/protocol.d.ts.map +1 -0
  84. package/dist/protocol.js +2 -0
  85. package/dist/protocol.js.map +1 -0
  86. package/dist/pty.d.ts +8 -0
  87. package/dist/pty.d.ts.map +1 -0
  88. package/dist/pty.js +26 -0
  89. package/dist/pty.js.map +1 -0
  90. package/dist/relay-adapter.d.ts +139 -0
  91. package/dist/relay-adapter.d.ts.map +1 -0
  92. package/dist/relay-adapter.js +210 -0
  93. package/dist/relay-adapter.js.map +1 -0
  94. package/dist/relay.d.ts +304 -0
  95. package/dist/relay.d.ts.map +1 -0
  96. package/dist/relay.js +910 -0
  97. package/dist/relay.js.map +1 -0
  98. package/dist/shadow.d.ts +101 -0
  99. package/dist/shadow.d.ts.map +1 -0
  100. package/dist/shadow.js +174 -0
  101. package/dist/shadow.js.map +1 -0
  102. package/dist/spawn-from-env.d.ts +77 -0
  103. package/dist/spawn-from-env.d.ts.map +1 -0
  104. package/dist/spawn-from-env.js +172 -0
  105. package/dist/spawn-from-env.js.map +1 -0
  106. package/dist/workflows/barrier.d.ts +72 -0
  107. package/dist/workflows/barrier.d.ts.map +1 -0
  108. package/dist/workflows/barrier.js +162 -0
  109. package/dist/workflows/barrier.js.map +1 -0
  110. package/dist/workflows/builder.d.ts +114 -0
  111. package/dist/workflows/builder.d.ts.map +1 -0
  112. package/dist/workflows/builder.js +201 -0
  113. package/dist/workflows/builder.js.map +1 -0
  114. package/dist/workflows/cli.d.ts +11 -0
  115. package/dist/workflows/cli.d.ts.map +1 -0
  116. package/dist/workflows/cli.js +144 -0
  117. package/dist/workflows/cli.js.map +1 -0
  118. package/dist/workflows/coordinator.d.ts +73 -0
  119. package/dist/workflows/coordinator.d.ts.map +1 -0
  120. package/dist/workflows/coordinator.js +647 -0
  121. package/dist/workflows/coordinator.js.map +1 -0
  122. package/dist/workflows/custom-steps.d.ts +73 -0
  123. package/dist/workflows/custom-steps.d.ts.map +1 -0
  124. package/dist/workflows/custom-steps.js +321 -0
  125. package/dist/workflows/custom-steps.js.map +1 -0
  126. package/dist/workflows/dry-run-format.d.ts +6 -0
  127. package/dist/workflows/dry-run-format.d.ts.map +1 -0
  128. package/dist/workflows/dry-run-format.js +68 -0
  129. package/dist/workflows/dry-run-format.js.map +1 -0
  130. package/dist/workflows/file-db.d.ts +33 -0
  131. package/dist/workflows/file-db.d.ts.map +1 -0
  132. package/dist/workflows/file-db.js +108 -0
  133. package/dist/workflows/file-db.js.map +1 -0
  134. package/dist/workflows/index.d.ts +15 -0
  135. package/dist/workflows/index.d.ts.map +1 -0
  136. package/dist/workflows/index.js +15 -0
  137. package/dist/workflows/index.js.map +1 -0
  138. package/dist/workflows/memory-db.d.ts +17 -0
  139. package/dist/workflows/memory-db.d.ts.map +1 -0
  140. package/dist/workflows/memory-db.js +33 -0
  141. package/dist/workflows/memory-db.js.map +1 -0
  142. package/dist/workflows/run.d.ts +38 -0
  143. package/dist/workflows/run.d.ts.map +1 -0
  144. package/dist/workflows/run.js +25 -0
  145. package/dist/workflows/run.js.map +1 -0
  146. package/dist/workflows/runner.d.ts +320 -0
  147. package/dist/workflows/runner.d.ts.map +1 -0
  148. package/dist/workflows/runner.js +2821 -0
  149. package/dist/workflows/runner.js.map +1 -0
  150. package/dist/workflows/state.d.ts +77 -0
  151. package/dist/workflows/state.d.ts.map +1 -0
  152. package/dist/workflows/state.js +140 -0
  153. package/dist/workflows/state.js.map +1 -0
  154. package/dist/workflows/templates.d.ts +47 -0
  155. package/dist/workflows/templates.d.ts.map +1 -0
  156. package/dist/workflows/templates.js +405 -0
  157. package/dist/workflows/templates.js.map +1 -0
  158. package/dist/workflows/trajectory.d.ts +87 -0
  159. package/dist/workflows/trajectory.d.ts.map +1 -0
  160. package/dist/workflows/trajectory.js +441 -0
  161. package/dist/workflows/trajectory.js.map +1 -0
  162. package/dist/workflows/types.d.ts +306 -0
  163. package/dist/workflows/types.d.ts.map +1 -0
  164. package/dist/workflows/types.js +23 -0
  165. package/dist/workflows/types.js.map +1 -0
  166. package/dist/workflows/validator.d.ts +11 -0
  167. package/dist/workflows/validator.d.ts.map +1 -0
  168. package/dist/workflows/validator.js +128 -0
  169. package/dist/workflows/validator.js.map +1 -0
  170. package/package.json +59 -53
  171. package/dist/discovery.d.ts +0 -10
  172. package/dist/discovery.d.ts.map +0 -1
  173. package/dist/discovery.js +0 -22
  174. package/dist/discovery.js.map +0 -1
  175. package/dist/errors.d.ts +0 -9
  176. package/dist/errors.d.ts.map +0 -1
  177. package/dist/errors.js +0 -9
  178. package/dist/errors.js.map +0 -1
  179. package/dist/protocol/index.d.ts +0 -8
  180. package/dist/protocol/index.d.ts.map +0 -1
  181. package/dist/protocol/index.js +0 -8
  182. package/dist/protocol/index.js.map +0 -1
@@ -0,0 +1,441 @@
1
+ /**
2
+ * WorkflowTrajectory — records a structured trajectory for each workflow run.
3
+ *
4
+ * Writes trajectory JSON files directly to `.trajectories/active/` in a format
5
+ * compatible with `trail show`. No external CLI or package dependency required.
6
+ *
7
+ * Design principles:
8
+ * 1. One trajectory per workflow run
9
+ * 2. Chapters map to workflow phases, not individual steps
10
+ * 3. Non-blocking — trajectory recording never fails the workflow
11
+ * 4. Opt-in but default-on
12
+ */
13
+ import { randomBytes } from 'node:crypto';
14
+ import { existsSync } from 'node:fs';
15
+ import { mkdir, writeFile, rename } from 'node:fs/promises';
16
+ import path from 'node:path';
17
+ function classifyFailure(error) {
18
+ const e = error.toLowerCase();
19
+ if (e.includes('timed out') || e.includes('timeout'))
20
+ return 'timeout';
21
+ if (e.includes('output does not contain') || e.includes('verification failed'))
22
+ return 'verification_mismatch';
23
+ if (e.includes('failed to spawn') || e.includes('enoent'))
24
+ return 'spawn_failed';
25
+ if (e.includes('exit code') || e.includes('exited with'))
26
+ return 'exit_nonzero';
27
+ if (e.includes('aborted') || e.includes('cancelled'))
28
+ return 'aborted';
29
+ return 'unknown';
30
+ }
31
+ function diagnosisFor(cause, outcome) {
32
+ switch (cause) {
33
+ case 'timeout':
34
+ if (outcome.nonInteractive) {
35
+ return (`Non-interactive agent timed out — the task is likely too large or complex for a single subprocess call. ` +
36
+ `Consider pre-reading large files in a deterministic step and injecting only the relevant excerpt via {{steps.X.output}}.`);
37
+ }
38
+ return (`Interactive agent timed out — it may have gone idle, failed to self-terminate, or the task scope was too broad. ` +
39
+ `Check if the agent was waiting for relay signals that never arrived.`);
40
+ case 'verification_mismatch':
41
+ return (`Agent completed but did not output the expected sentinel "${outcome.verificationValue ?? '(unknown)'}". ` +
42
+ `The task prompt may not clearly specify the required output format, ` +
43
+ `or the agent produced correct work but did not emit the signal.`);
44
+ case 'spawn_failed':
45
+ return `The agent process could not be started — the CLI binary may be missing from PATH or the working directory is incorrect.`;
46
+ case 'exit_nonzero':
47
+ return `The agent process exited with a non-zero exit code. Check stderr for the root cause.`;
48
+ case 'aborted':
49
+ return `The step was cancelled (user interrupt or upstream abort).`;
50
+ default:
51
+ return `Unexpected failure. Review the error and step definition.`;
52
+ }
53
+ }
54
+ // ── WorkflowTrajectory ──────────────────────────────────────────────────────
55
+ export class WorkflowTrajectory {
56
+ trajectory = null;
57
+ currentChapterId = null;
58
+ enabled;
59
+ reflectOnBarriers;
60
+ reflectOnConverge;
61
+ autoDecisions;
62
+ dataDir;
63
+ runId;
64
+ startTime = 0;
65
+ swarmPattern = 'dag';
66
+ constructor(config, runId, cwd) {
67
+ const cfg = config === false ? { enabled: false } : (config ?? {});
68
+ this.enabled = cfg.enabled !== false;
69
+ this.reflectOnBarriers = cfg.reflectOnBarriers !== false;
70
+ this.reflectOnConverge = cfg.reflectOnConverge !== false;
71
+ this.autoDecisions = cfg.autoDecisions !== false;
72
+ this.runId = runId;
73
+ this.dataDir = process.env.TRAJECTORIES_DATA_DIR ?? path.join(cwd, '.trajectories');
74
+ }
75
+ // ── Lifecycle ──────────────────────────────────────────────────────────────
76
+ /** Start the trajectory (called at run:started). */
77
+ async start(workflowName, stepCount, trackInfo, description, pattern) {
78
+ if (!this.enabled)
79
+ return;
80
+ this.startTime = Date.now();
81
+ this.swarmPattern = pattern ?? 'dag';
82
+ const id = `traj_${Date.now()}_${randomBytes(4).toString('hex')}`;
83
+ this.trajectory = {
84
+ id,
85
+ version: 1,
86
+ task: {
87
+ title: `${workflowName} run #${this.runId.slice(0, 8)}`,
88
+ source: { system: 'workflow-runner', id: this.runId },
89
+ },
90
+ status: 'active',
91
+ startedAt: new Date().toISOString(),
92
+ agents: [{ name: 'orchestrator', role: 'workflow-runner', joinedAt: new Date().toISOString() }],
93
+ chapters: [],
94
+ };
95
+ // Open Planning chapter — record intent, not just mechanics
96
+ this.openChapter('Planning', 'orchestrator');
97
+ if (description) {
98
+ // Record why this workflow exists
99
+ this.addEvent('note', `Purpose: ${description.trim()}`);
100
+ }
101
+ this.addEvent('note', `Approach: ${stepCount}-step ${this.swarmPattern} workflow${trackInfo ? ` — ${trackInfo}` : ''}`);
102
+ await this.flush();
103
+ }
104
+ // ── Chapters ───────────────────────────────────────────────────────────────
105
+ /** Begin a new parallel track chapter. */
106
+ async beginTrack(trackName) {
107
+ if (!this.enabled || !this.trajectory)
108
+ return;
109
+ this.closeCurrentChapter();
110
+ this.openChapter(`Execution: ${trackName}`, 'orchestrator');
111
+ await this.flush();
112
+ }
113
+ /** Begin a convergence chapter (after barrier/parallel completion). */
114
+ async beginConvergence(label) {
115
+ if (!this.enabled || !this.trajectory)
116
+ return;
117
+ this.closeCurrentChapter();
118
+ this.openChapter(`Convergence: ${label}`, 'orchestrator');
119
+ await this.flush();
120
+ }
121
+ /** Begin the retrospective chapter. */
122
+ openRetrospective() {
123
+ if (!this.trajectory)
124
+ return;
125
+ this.closeCurrentChapter();
126
+ this.openChapter('Retrospective', 'orchestrator');
127
+ }
128
+ // ── Step events ────────────────────────────────────────────────────────────
129
+ /** Record step started — captures intent, not just assignment. */
130
+ async stepStarted(step, agent) {
131
+ if (!this.enabled || !this.trajectory)
132
+ return;
133
+ // Register agent if not seen
134
+ if (!this.trajectory.agents.some((a) => a.name === agent)) {
135
+ this.trajectory.agents.push({
136
+ name: agent,
137
+ role: step.agent ?? 'deterministic',
138
+ joinedAt: new Date().toISOString(),
139
+ });
140
+ }
141
+ // Capture the step's purpose: first non-empty sentence of the task
142
+ const intent = step.task
143
+ ? step.task
144
+ .trim()
145
+ .split(/\n|\.(?=\s)/)[0]
146
+ .trim()
147
+ .slice(0, 120)
148
+ : `${step.type ?? 'deterministic'} step`;
149
+ this.addEvent('note', `"${step.name}": ${intent}`, undefined, { agent });
150
+ await this.flush();
151
+ }
152
+ /** Record step completed — captures what was accomplished. */
153
+ async stepCompleted(step, output, attempt) {
154
+ if (!this.enabled || !this.trajectory)
155
+ return;
156
+ const suffix = attempt > 1 ? ` (after ${attempt} attempts)` : '';
157
+ // Prefer the last non-empty line of output as the completion signal —
158
+ // agents conventionally output their sentinel last (e.g. "ANALYSIS_DONE")
159
+ const lines = output
160
+ .split('\n')
161
+ .map((l) => l.trim())
162
+ .filter(Boolean);
163
+ const lastMeaningful = lines.at(-1) ?? '';
164
+ const completion = lastMeaningful.length > 0 && lastMeaningful.length < 100
165
+ ? lastMeaningful
166
+ : output.trim().slice(0, 120) || '(no output)';
167
+ this.addEvent('finding', `"${step.name}" completed${suffix} → ${completion}`, 'medium');
168
+ await this.flush();
169
+ }
170
+ /** Record step failed — categorizes root cause for actionable diagnosis. */
171
+ async stepFailed(step, error, attempt, maxRetries, outcome) {
172
+ if (!this.enabled || !this.trajectory)
173
+ return;
174
+ const cause = classifyFailure(error);
175
+ const diagnosis = diagnosisFor(cause, {
176
+ name: step.name,
177
+ agent: outcome?.agent ?? step.agent ?? '',
178
+ status: 'failed',
179
+ attempts: attempt,
180
+ error,
181
+ verificationValue: outcome?.verificationValue,
182
+ nonInteractive: outcome?.nonInteractive,
183
+ });
184
+ this.addEvent('error', `"${step.name}" failed [${cause}]: ${diagnosis}`, 'high', {
185
+ cause,
186
+ rawError: error,
187
+ attempt,
188
+ maxRetries,
189
+ });
190
+ await this.flush();
191
+ }
192
+ /** Record step skipped — note the cascade impact. */
193
+ async stepSkipped(step, reason) {
194
+ if (!this.enabled || !this.trajectory)
195
+ return;
196
+ this.addEvent('note', `"${step.name}" skipped — ${reason}`);
197
+ await this.flush();
198
+ }
199
+ /** Record step retrying. */
200
+ async stepRetrying(step, attempt, maxRetries) {
201
+ if (!this.enabled || !this.trajectory)
202
+ return;
203
+ this.addEvent('note', `"${step.name}" retrying (attempt ${attempt}/${maxRetries + 1})`);
204
+ await this.flush();
205
+ }
206
+ // ── Reflections ────────────────────────────────────────────────────────────
207
+ /** Record a reflection at a convergence point. */
208
+ async reflect(synthesis, confidence, focalPoints) {
209
+ if (!this.enabled || !this.trajectory)
210
+ return;
211
+ const raw = { confidence };
212
+ if (focalPoints?.length) {
213
+ raw.focalPoints = focalPoints;
214
+ }
215
+ this.addEvent('reflection', synthesis, 'high', raw);
216
+ await this.flush();
217
+ }
218
+ /** Synthesize and reflect after a set of steps complete (barrier or parallel convergence). */
219
+ async synthesizeAndReflect(label, outcomes, unblocks) {
220
+ if (!this.enabled || !this.trajectory)
221
+ return;
222
+ const synthesis = this.buildSynthesis(label, outcomes, unblocks);
223
+ const confidence = this.computeConfidence(outcomes);
224
+ const focalPoints = outcomes.map((o) => `${o.name}: ${o.status}`);
225
+ await this.beginConvergence(label);
226
+ await this.reflect(synthesis, confidence, focalPoints);
227
+ }
228
+ // ── Decisions ──────────────────────────────────────────────────────────────
229
+ /** Record an orchestrator decision. */
230
+ async decide(question, chosen, reasoning) {
231
+ if (!this.enabled || !this.trajectory || !this.autoDecisions)
232
+ return;
233
+ this.addEvent('decision', `${question} → ${chosen}: ${reasoning}`, 'medium', {
234
+ question,
235
+ chosen,
236
+ reasoning,
237
+ });
238
+ await this.flush();
239
+ }
240
+ // ── Completion ─────────────────────────────────────────────────────────────
241
+ /** Complete the trajectory with a summary. */
242
+ async complete(summary, confidence, meta) {
243
+ if (!this.enabled || !this.trajectory)
244
+ return;
245
+ this.openRetrospective();
246
+ const elapsed = Date.now() - this.startTime;
247
+ const elapsedStr = elapsed > 60_000 ? `${Math.round(elapsed / 60_000)} minutes` : `${Math.round(elapsed / 1_000)} seconds`;
248
+ this.addEvent('reflection', `${summary} (completed in ${elapsedStr})`, 'high');
249
+ this.trajectory.status = 'completed';
250
+ this.trajectory.completedAt = new Date().toISOString();
251
+ this.trajectory.retrospective = {
252
+ summary,
253
+ approach: `${this.swarmPattern} workflow (${this.trajectory.agents.filter((a) => a.role !== 'workflow-runner').length} agents)`,
254
+ confidence,
255
+ learnings: meta?.learnings,
256
+ challenges: meta?.challenges,
257
+ };
258
+ this.closeCurrentChapter();
259
+ await this.flush();
260
+ await this.moveToCompleted();
261
+ }
262
+ /** Abandon the trajectory. */
263
+ async abandon(reason) {
264
+ if (!this.enabled || !this.trajectory)
265
+ return;
266
+ this.addEvent('error', `Workflow abandoned: ${reason}`, 'high');
267
+ this.trajectory.status = 'abandoned';
268
+ this.trajectory.completedAt = new Date().toISOString();
269
+ this.closeCurrentChapter();
270
+ await this.flush();
271
+ await this.moveToCompleted();
272
+ }
273
+ // ── Getters ────────────────────────────────────────────────────────────────
274
+ isEnabled() {
275
+ return this.enabled;
276
+ }
277
+ shouldReflectOnConverge() {
278
+ return this.enabled && this.reflectOnConverge;
279
+ }
280
+ shouldReflectOnBarriers() {
281
+ return this.enabled && this.reflectOnBarriers;
282
+ }
283
+ getTrajectoryId() {
284
+ return this.trajectory?.id ?? null;
285
+ }
286
+ // ── Synthesis helpers ──────────────────────────────────────────────────────
287
+ buildSynthesis(label, outcomes, unblocks) {
288
+ const completed = outcomes.filter((o) => o.status === 'completed');
289
+ const failed = outcomes.filter((o) => o.status === 'failed');
290
+ const retried = outcomes.filter((o) => o.attempts > 1 && o.status !== 'failed');
291
+ const parts = [`${label} resolved.`, `${completed.length}/${outcomes.length} steps completed.`];
292
+ if (failed.length > 0) {
293
+ parts.push(`${failed.length} step(s) failed: ${failed.map((s) => s.name).join(', ')}.`);
294
+ }
295
+ if (retried.length > 0) {
296
+ parts.push(`${retried.length} step(s) required retries: ${retried.map((s) => s.name).join(', ')}.`);
297
+ }
298
+ else if (failed.length === 0) {
299
+ parts.push('All steps completed on first attempt.');
300
+ }
301
+ if (unblocks?.length) {
302
+ parts.push(`Unblocking: ${unblocks.join(', ')}.`);
303
+ }
304
+ return parts.join(' ');
305
+ }
306
+ computeConfidence(outcomes) {
307
+ if (outcomes.length === 0)
308
+ return 0.7;
309
+ const total = outcomes.length;
310
+ const completed = outcomes.filter((o) => o.status === 'completed').length;
311
+ const firstAttempt = outcomes.filter((o) => o.attempts === 1 && o.status === 'completed').length;
312
+ const verified = outcomes.filter((o) => o.verificationPassed).length;
313
+ // Base: 0.5 scaled by completion rate, +0.25 for first-attempt, +0.25 for verified
314
+ const completionRate = completed / total;
315
+ return Math.min(1.0, 0.5 * completionRate + (firstAttempt / total) * 0.25 + (verified / total) * 0.25);
316
+ }
317
+ buildRunSummary(outcomes) {
318
+ const completed = outcomes.filter((o) => o.status === 'completed');
319
+ const failed = outcomes.filter((o) => o.status === 'failed');
320
+ const skipped = outcomes.filter((o) => o.status === 'skipped');
321
+ const elapsed = Date.now() - this.startTime;
322
+ const elapsedStr = elapsed > 60_000 ? `${Math.round(elapsed / 60_000)}min` : `${Math.round(elapsed / 1_000)}s`;
323
+ if (failed.length === 0) {
324
+ const retried = completed.filter((o) => o.attempts > 1);
325
+ const base = `All ${completed.length} steps completed in ${elapsedStr}.`;
326
+ return retried.length > 0
327
+ ? `${base} ${retried.length} step(s) needed retries: ${retried.map((o) => o.name).join(', ')}.`
328
+ : base;
329
+ }
330
+ // Failure narrative — focus on root cause of the first failure
331
+ const firstFailure = failed[0];
332
+ const cause = classifyFailure(firstFailure.error ?? '');
333
+ const cascaded = skipped.length > 0
334
+ ? ` Caused ${skipped.length} downstream step(s) to be skipped: ${skipped.map((o) => o.name).join(', ')}.`
335
+ : '';
336
+ return (`Failed at "${firstFailure.name}" [${cause}] after ${elapsedStr}.${cascaded} ` +
337
+ `${completed.length}/${outcomes.length} steps completed before failure.`);
338
+ }
339
+ extractLearnings(outcomes) {
340
+ const learnings = [];
341
+ const timeouts = outcomes.filter((o) => o.status === 'failed' && classifyFailure(o.error ?? '') === 'timeout');
342
+ if (timeouts.some((o) => o.nonInteractive)) {
343
+ learnings.push(`Non-interactive agent timeouts detected (${timeouts.map((o) => o.name).join(', ')}). ` +
344
+ `Use deterministic steps to pre-read files and inject content — non-interactive agents should not discover information via tools.`);
345
+ }
346
+ const verifyFails = outcomes.filter((o) => o.status === 'failed' && classifyFailure(o.error ?? '') === 'verification_mismatch');
347
+ if (verifyFails.length > 0) {
348
+ learnings.push(`Verification mismatch on: ${verifyFails.map((o) => `"${o.name}" (expected "${o.verificationValue ?? '?'}")`).join(', ')}. ` +
349
+ `Make the required output format more explicit in the task prompt.`);
350
+ }
351
+ const retried = outcomes.filter((o) => o.attempts > 1 && o.status === 'completed');
352
+ if (retried.length > 0) {
353
+ learnings.push(`${retried.map((o) => `"${o.name}" (${o.attempts} attempts)`).join(', ')} succeeded after retries — ` +
354
+ `consider adding clearer output instructions to reduce retries.`);
355
+ }
356
+ return learnings;
357
+ }
358
+ extractChallenges(outcomes) {
359
+ const challenges = [];
360
+ const failed = outcomes.filter((o) => o.status === 'failed');
361
+ for (const step of failed) {
362
+ const cause = classifyFailure(step.error ?? '');
363
+ challenges.push(diagnosisFor(cause, step));
364
+ }
365
+ return challenges;
366
+ }
367
+ // ── Internal helpers ───────────────────────────────────────────────────────
368
+ openChapter(title, agentName) {
369
+ if (!this.trajectory)
370
+ return;
371
+ const chapter = {
372
+ id: `ch_${randomBytes(4).toString('hex')}`,
373
+ title,
374
+ agentName,
375
+ startedAt: new Date().toISOString(),
376
+ events: [],
377
+ };
378
+ this.trajectory.chapters.push(chapter);
379
+ this.currentChapterId = chapter.id;
380
+ }
381
+ closeCurrentChapter() {
382
+ if (!this.trajectory || !this.currentChapterId)
383
+ return;
384
+ const chapter = this.trajectory.chapters.find((c) => c.id === this.currentChapterId);
385
+ if (chapter && !chapter.endedAt) {
386
+ chapter.endedAt = new Date().toISOString();
387
+ }
388
+ this.currentChapterId = null;
389
+ }
390
+ addEvent(type, content, significance, raw) {
391
+ if (!this.trajectory)
392
+ return;
393
+ // Find current chapter or create a default one
394
+ let chapter = this.trajectory.chapters.find((c) => c.id === this.currentChapterId);
395
+ if (!chapter) {
396
+ this.openChapter('Execution', 'orchestrator');
397
+ chapter = this.trajectory.chapters[this.trajectory.chapters.length - 1];
398
+ }
399
+ const event = {
400
+ ts: Date.now(),
401
+ type,
402
+ content,
403
+ };
404
+ if (significance)
405
+ event.significance = significance;
406
+ if (raw)
407
+ event.raw = raw;
408
+ chapter.events.push(event);
409
+ }
410
+ async flush() {
411
+ if (!this.trajectory)
412
+ return;
413
+ try {
414
+ const activeDir = path.join(this.dataDir, 'active');
415
+ await mkdir(activeDir, { recursive: true });
416
+ const filePath = path.join(activeDir, `${this.trajectory.id}.json`);
417
+ await writeFile(filePath, JSON.stringify(this.trajectory, null, 2), 'utf-8');
418
+ }
419
+ catch {
420
+ // Non-blocking: trajectory recording failure should never break the workflow
421
+ }
422
+ }
423
+ async moveToCompleted() {
424
+ if (!this.trajectory)
425
+ return;
426
+ try {
427
+ const activeDir = path.join(this.dataDir, 'active');
428
+ const completedDir = path.join(this.dataDir, 'completed');
429
+ await mkdir(completedDir, { recursive: true });
430
+ const activePath = path.join(activeDir, `${this.trajectory.id}.json`);
431
+ const completedPath = path.join(completedDir, `${this.trajectory.id}.json`);
432
+ if (existsSync(activePath)) {
433
+ await rename(activePath, completedPath);
434
+ }
435
+ }
436
+ catch {
437
+ // Non-blocking
438
+ }
439
+ }
440
+ }
441
+ //# sourceMappingURL=trajectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../src/workflows/trajectory.ts"],"names":[],"mappings":"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"}