@agent-relay/sdk 3.2.8 → 3.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/agent-relay-broker-darwin-arm64 +0 -0
- package/bin/agent-relay-broker-darwin-x64 +0 -0
- package/bin/agent-relay-broker-linux-arm64 +0 -0
- package/bin/agent-relay-broker-linux-x64 +0 -0
- package/dist/workflows/__tests__/cli-session-collector.test.d.ts +2 -0
- package/dist/workflows/__tests__/cli-session-collector.test.d.ts.map +1 -0
- package/dist/workflows/__tests__/cli-session-collector.test.js +54 -0
- package/dist/workflows/__tests__/cli-session-collector.test.js.map +1 -0
- package/dist/workflows/__tests__/collectors/claude.test.d.ts +2 -0
- package/dist/workflows/__tests__/collectors/claude.test.d.ts.map +1 -0
- package/dist/workflows/__tests__/collectors/claude.test.js +85 -0
- package/dist/workflows/__tests__/collectors/claude.test.js.map +1 -0
- package/dist/workflows/__tests__/collectors/codex.test.d.ts +2 -0
- package/dist/workflows/__tests__/collectors/codex.test.d.ts.map +1 -0
- package/dist/workflows/__tests__/collectors/codex.test.js +67 -0
- package/dist/workflows/__tests__/collectors/codex.test.js.map +1 -0
- package/dist/workflows/__tests__/collectors/opencode.test.d.ts +2 -0
- package/dist/workflows/__tests__/collectors/opencode.test.d.ts.map +1 -0
- package/dist/workflows/__tests__/collectors/opencode.test.js +119 -0
- package/dist/workflows/__tests__/collectors/opencode.test.js.map +1 -0
- package/dist/workflows/__tests__/run-summary-table.test.d.ts +2 -0
- package/dist/workflows/__tests__/run-summary-table.test.d.ts.map +1 -0
- package/dist/workflows/__tests__/run-summary-table.test.js +130 -0
- package/dist/workflows/__tests__/run-summary-table.test.js.map +1 -0
- package/dist/workflows/__tests__/step-cwd.test.d.ts +2 -0
- package/dist/workflows/__tests__/step-cwd.test.d.ts.map +1 -0
- package/dist/workflows/__tests__/step-cwd.test.js +42 -0
- package/dist/workflows/__tests__/step-cwd.test.js.map +1 -0
- package/dist/workflows/builder.d.ts +2 -0
- package/dist/workflows/builder.d.ts.map +1 -1
- package/dist/workflows/builder.js +4 -0
- package/dist/workflows/builder.js.map +1 -1
- package/dist/workflows/cli-session-collector.d.ts +39 -0
- package/dist/workflows/cli-session-collector.d.ts.map +1 -0
- package/dist/workflows/cli-session-collector.js +23 -0
- package/dist/workflows/cli-session-collector.js.map +1 -0
- package/dist/workflows/cli.js +228 -48
- package/dist/workflows/cli.js.map +1 -1
- package/dist/workflows/collectors/claude.d.ts +6 -0
- package/dist/workflows/collectors/claude.d.ts.map +1 -0
- package/dist/workflows/collectors/claude.js +330 -0
- package/dist/workflows/collectors/claude.js.map +1 -0
- package/dist/workflows/collectors/codex.d.ts +18 -0
- package/dist/workflows/collectors/codex.d.ts.map +1 -0
- package/dist/workflows/collectors/codex.js +265 -0
- package/dist/workflows/collectors/codex.js.map +1 -0
- package/dist/workflows/collectors/opencode.d.ts +6 -0
- package/dist/workflows/collectors/opencode.d.ts.map +1 -0
- package/dist/workflows/collectors/opencode.js +178 -0
- package/dist/workflows/collectors/opencode.js.map +1 -0
- package/dist/workflows/index.d.ts +3 -0
- package/dist/workflows/index.d.ts.map +1 -1
- package/dist/workflows/index.js +3 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/listr-renderer.d.ts +26 -0
- package/dist/workflows/listr-renderer.d.ts.map +1 -0
- package/dist/workflows/listr-renderer.js +232 -0
- package/dist/workflows/listr-renderer.js.map +1 -0
- package/dist/workflows/run-summary-table.d.ts +4 -0
- package/dist/workflows/run-summary-table.d.ts.map +1 -0
- package/dist/workflows/run-summary-table.js +98 -0
- package/dist/workflows/run-summary-table.js.map +1 -0
- package/dist/workflows/runner.d.ts +11 -0
- package/dist/workflows/runner.d.ts.map +1 -1
- package/dist/workflows/runner.js +91 -26
- package/dist/workflows/runner.js.map +1 -1
- package/dist/workflows/types.d.ts +2 -0
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/types.js.map +1 -1
- package/package.json +5 -3
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* persists state to DB, and supports pause/resume/abort with retries.
|
|
5
5
|
*/
|
|
6
6
|
import type { BrokerEvent } from '../protocol.js';
|
|
7
|
+
import { type CliSessionReport } from './cli-session-collector.js';
|
|
7
8
|
import type { AgentCli, AgentDefinition, DryRunReport, RelayYamlConfig, StepCompletionEvidence, WorkflowRunRow, WorkflowStep, WorkflowExecuteOptions, WorkflowStepRow } from './types.js';
|
|
8
9
|
import { AgentRelay } from '../relay.js';
|
|
9
10
|
import type { AgentRelayOptions } from '../relay.js';
|
|
@@ -61,6 +62,11 @@ export type WorkflowEvent = {
|
|
|
61
62
|
runId: string;
|
|
62
63
|
stepName: string;
|
|
63
64
|
ownerName: string;
|
|
65
|
+
} | {
|
|
66
|
+
type: 'step:agent-report';
|
|
67
|
+
runId: string;
|
|
68
|
+
stepName: string;
|
|
69
|
+
report: CliSessionReport;
|
|
64
70
|
} | {
|
|
65
71
|
type: 'step:failed';
|
|
66
72
|
runId: string;
|
|
@@ -167,6 +173,8 @@ export declare class WorkflowRunner {
|
|
|
167
173
|
private resolvedPaths;
|
|
168
174
|
/** Tracks agent names currently assigned as reviewers (ref-counted to handle concurrent usage). */
|
|
169
175
|
private readonly activeReviewers;
|
|
176
|
+
/** Structured CLI session reports captured during the current run, keyed by step name. */
|
|
177
|
+
private readonly agentReports;
|
|
170
178
|
constructor(options?: WorkflowRunnerOptions);
|
|
171
179
|
/** Expand environment variables like $HOME or $VAR in a path string. */
|
|
172
180
|
private static resolveEnvVars;
|
|
@@ -186,6 +194,7 @@ export declare class WorkflowRunner {
|
|
|
186
194
|
* Returns undefined if no workdir is set.
|
|
187
195
|
*/
|
|
188
196
|
private resolveStepWorkdir;
|
|
197
|
+
private resolveEffectiveCwd;
|
|
189
198
|
private static readonly EVIDENCE_IGNORED_DIRS;
|
|
190
199
|
getStepCompletionEvidence(stepName: string): StepCompletionEvidence | undefined;
|
|
191
200
|
private getOrCreateStepEvidenceRecord;
|
|
@@ -375,6 +384,7 @@ export declare class WorkflowRunner {
|
|
|
375
384
|
private runVerification;
|
|
376
385
|
private updateRunStatus;
|
|
377
386
|
private markStepFailed;
|
|
387
|
+
private captureAgentReport;
|
|
378
388
|
private markDownstreamSkipped;
|
|
379
389
|
/**
|
|
380
390
|
* Walk the dependsOn graph backwards from a target step to collect ALL
|
|
@@ -442,6 +452,7 @@ export declare class WorkflowRunner {
|
|
|
442
452
|
private getStepOutputDir;
|
|
443
453
|
/** Persist step output to disk and post full output as a channel message. */
|
|
444
454
|
private persistStepOutput;
|
|
455
|
+
private persistAgentReport;
|
|
445
456
|
/** Scan .agent-relay/step-outputs/ for the most recent run directory containing the needed steps. */
|
|
446
457
|
private findMostRecentRunWithSteps;
|
|
447
458
|
/** Load persisted step output from disk. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/workflows/runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/workflows/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/workflows/runner.js
CHANGED
|
@@ -8,11 +8,14 @@ import { randomBytes } from 'node:crypto';
|
|
|
8
8
|
import { createWriteStream, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, writeFileSync, } from 'node:fs';
|
|
9
9
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
10
10
|
import path from 'node:path';
|
|
11
|
+
import chalk from 'chalk';
|
|
11
12
|
import { parse as parseYaml } from 'yaml';
|
|
12
13
|
import { stripAnsi as stripAnsiFn } from '../pty.js';
|
|
13
14
|
import { resolveSpawnPolicy } from '../spawn-from-env.js';
|
|
14
15
|
import { loadCustomSteps, resolveAllCustomSteps, validateCustomStepsUsage, CustomStepsParseError, CustomStepResolutionError, } from './custom-steps.js';
|
|
16
|
+
import { collectCliSession } from './cli-session-collector.js';
|
|
15
17
|
import { InMemoryWorkflowDb } from './memory-db.js';
|
|
18
|
+
import { formatRunSummaryTable } from './run-summary-table.js';
|
|
16
19
|
import { WorkflowTrajectory } from './trajectory.js';
|
|
17
20
|
// ── AgentRelay SDK imports ──────────────────────────────────────────────────
|
|
18
21
|
// Import from sub-paths to avoid pulling in the full @relaycast/sdk dependency.
|
|
@@ -120,6 +123,8 @@ export class WorkflowRunner {
|
|
|
120
123
|
resolvedPaths = new Map();
|
|
121
124
|
/** Tracks agent names currently assigned as reviewers (ref-counted to handle concurrent usage). */
|
|
122
125
|
activeReviewers = new Map();
|
|
126
|
+
/** Structured CLI session reports captured during the current run, keyed by step name. */
|
|
127
|
+
agentReports = new Map();
|
|
123
128
|
constructor(options = {}) {
|
|
124
129
|
this.db = options.db ?? new InMemoryWorkflowDb();
|
|
125
130
|
this.workspaceId = options.workspaceId ?? 'local';
|
|
@@ -199,6 +204,12 @@ export class WorkflowRunner {
|
|
|
199
204
|
}
|
|
200
205
|
return resolved;
|
|
201
206
|
}
|
|
207
|
+
resolveEffectiveCwd(step, agentDef) {
|
|
208
|
+
if (step.cwd) {
|
|
209
|
+
return path.resolve(this.cwd, step.cwd);
|
|
210
|
+
}
|
|
211
|
+
return this.resolveStepWorkdir(step) ?? (agentDef ? this.resolveAgentCwd(agentDef) : this.cwd);
|
|
212
|
+
}
|
|
202
213
|
static EVIDENCE_IGNORED_DIRS = new Set([
|
|
203
214
|
'.git',
|
|
204
215
|
'.agent-relay',
|
|
@@ -643,7 +654,7 @@ export class WorkflowRunner {
|
|
|
643
654
|
const ts = mins > 0
|
|
644
655
|
? `${String(mins).padStart(2, '0')}:${String(secs).padStart(2, '0')}`
|
|
645
656
|
: `00:${String(secs).padStart(2, '0')}`;
|
|
646
|
-
console.log(
|
|
657
|
+
console.log(`${chalk.dim.cyan('[workflow')} ${chalk.dim.cyan(ts)}${chalk.dim.cyan(']')} ${msg}`);
|
|
647
658
|
}
|
|
648
659
|
// ── Relaycast auto-provisioning ────────────────────────────────────────
|
|
649
660
|
/**
|
|
@@ -1500,6 +1511,7 @@ export class WorkflowRunner {
|
|
|
1500
1511
|
this.runStartTime = Date.now();
|
|
1501
1512
|
this.runtimeStepAgents.clear();
|
|
1502
1513
|
this.stepCompletionEvidence.clear();
|
|
1514
|
+
this.agentReports.clear();
|
|
1503
1515
|
this.log(`Starting workflow "${workflow.name}" (${workflow.steps.length} steps)`);
|
|
1504
1516
|
// Initialize trajectory recording
|
|
1505
1517
|
this.trajectory = new WorkflowTrajectory(config.trajectories, runId, this.cwd);
|
|
@@ -1713,7 +1725,7 @@ export class WorkflowRunner {
|
|
|
1713
1725
|
this.relaycastAgent = undefined;
|
|
1714
1726
|
// Wire broker stderr to console for observability
|
|
1715
1727
|
this.unsubBrokerStderr = this.relay.onBrokerStderr((line) => {
|
|
1716
|
-
console.log(
|
|
1728
|
+
console.log(`${chalk.dim.yellow('[broker]')} ${line}`);
|
|
1717
1729
|
});
|
|
1718
1730
|
if (!relaycastDisabled) {
|
|
1719
1731
|
this.log(`Creating channel: ${channel}...`);
|
|
@@ -2157,7 +2169,7 @@ export class WorkflowRunner {
|
|
|
2157
2169
|
return value !== undefined ? String(value) : _match;
|
|
2158
2170
|
});
|
|
2159
2171
|
// Resolve step workdir (named path reference) for deterministic steps
|
|
2160
|
-
const stepCwd = this.
|
|
2172
|
+
const stepCwd = this.resolveEffectiveCwd(step);
|
|
2161
2173
|
this.beginStepEvidence(step.name, [stepCwd], state.row.startedAt);
|
|
2162
2174
|
try {
|
|
2163
2175
|
// Delegate to executor if present
|
|
@@ -2534,6 +2546,9 @@ export class WorkflowRunner {
|
|
|
2534
2546
|
let lastExitCode;
|
|
2535
2547
|
let lastExitSignal;
|
|
2536
2548
|
let lastCompletionReason;
|
|
2549
|
+
let lastAttemptStartedAt;
|
|
2550
|
+
let lastEffectiveAgentDef;
|
|
2551
|
+
let lastEffectiveCwd;
|
|
2537
2552
|
// OWNER_DECISION: INCOMPLETE_RETRY is enforced here at the attempt-loop level so every
|
|
2538
2553
|
// interactive execution path shares the same contract:
|
|
2539
2554
|
// - retries remaining => throw back into the loop and retry
|
|
@@ -2561,6 +2576,7 @@ export class WorkflowRunner {
|
|
|
2561
2576
|
await this.delay(retryDelay);
|
|
2562
2577
|
}
|
|
2563
2578
|
try {
|
|
2579
|
+
lastAttemptStartedAt = Date.now();
|
|
2564
2580
|
// Mark step as running
|
|
2565
2581
|
state.row.status = 'running';
|
|
2566
2582
|
state.row.error = undefined;
|
|
@@ -2613,7 +2629,10 @@ export class WorkflowRunner {
|
|
|
2613
2629
|
}
|
|
2614
2630
|
}
|
|
2615
2631
|
// Apply step-level workdir override to agent definitions if present
|
|
2616
|
-
const
|
|
2632
|
+
const applyStepCwd = (def) => {
|
|
2633
|
+
if (step.cwd) {
|
|
2634
|
+
return { ...def, cwd: step.cwd, workdir: undefined };
|
|
2635
|
+
}
|
|
2617
2636
|
if (step.workdir) {
|
|
2618
2637
|
const stepWorkdir = this.resolveStepWorkdir(step);
|
|
2619
2638
|
if (stepWorkdir) {
|
|
@@ -2622,9 +2641,11 @@ export class WorkflowRunner {
|
|
|
2622
2641
|
}
|
|
2623
2642
|
return def;
|
|
2624
2643
|
};
|
|
2625
|
-
const effectiveSpecialist =
|
|
2626
|
-
const effectiveOwner =
|
|
2627
|
-
const effectiveReviewer = reviewDef ?
|
|
2644
|
+
const effectiveSpecialist = applyStepCwd(specialistDef);
|
|
2645
|
+
const effectiveOwner = applyStepCwd(ownerDef);
|
|
2646
|
+
const effectiveReviewer = reviewDef ? applyStepCwd(reviewDef) : undefined;
|
|
2647
|
+
lastEffectiveAgentDef = effectiveSpecialist;
|
|
2648
|
+
lastEffectiveCwd = this.resolveAgentCwd(effectiveSpecialist);
|
|
2628
2649
|
this.beginStepEvidence(step.name, [
|
|
2629
2650
|
this.resolveAgentCwd(effectiveSpecialist),
|
|
2630
2651
|
this.resolveAgentCwd(effectiveOwner),
|
|
@@ -2746,6 +2767,7 @@ export class WorkflowRunner {
|
|
|
2746
2767
|
this.activeReviewers.set(reviewDef.name, count);
|
|
2747
2768
|
}
|
|
2748
2769
|
}
|
|
2770
|
+
await this.captureAgentReport(runId, step.name, lastEffectiveAgentDef, lastEffectiveCwd, lastAttemptStartedAt, Date.now());
|
|
2749
2771
|
// Mark completed
|
|
2750
2772
|
state.row.status = 'completed';
|
|
2751
2773
|
state.row.output = combinedOutput;
|
|
@@ -2789,6 +2811,7 @@ export class WorkflowRunner {
|
|
|
2789
2811
|
const verificationValue = typeof step.verification === 'object' && 'value' in step.verification
|
|
2790
2812
|
? String(step.verification.value)
|
|
2791
2813
|
: undefined;
|
|
2814
|
+
await this.captureAgentReport(runId, step.name, lastEffectiveAgentDef, lastEffectiveCwd, lastAttemptStartedAt, Date.now());
|
|
2792
2815
|
await this.trajectory?.stepFailed(step, lastError ?? 'Unknown error', maxRetries + 1, maxRetries, {
|
|
2793
2816
|
agent: agentName,
|
|
2794
2817
|
nonInteractive,
|
|
@@ -3761,7 +3784,7 @@ export class WorkflowRunner {
|
|
|
3761
3784
|
const { stdout: output, exitCode, exitSignal } = await new Promise((resolve, reject) => {
|
|
3762
3785
|
const child = cpSpawn(cmd, args, {
|
|
3763
3786
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
3764
|
-
cwd: this.
|
|
3787
|
+
cwd: this.resolveEffectiveCwd(step, agentDef),
|
|
3765
3788
|
env: this.getRelayEnv() ?? { ...process.env },
|
|
3766
3789
|
});
|
|
3767
3790
|
// Update workers.json with PID now that we have it
|
|
@@ -4459,6 +4482,26 @@ export class WorkflowRunner {
|
|
|
4459
4482
|
});
|
|
4460
4483
|
this.finalizeStepEvidence(state.row.stepName, 'failed', state.row.completedAt, completionReason);
|
|
4461
4484
|
}
|
|
4485
|
+
async captureAgentReport(runId, stepName, agentDef, cwd, startedAt, completedAt) {
|
|
4486
|
+
if (!agentDef || !cwd || !startedAt)
|
|
4487
|
+
return;
|
|
4488
|
+
try {
|
|
4489
|
+
const report = await collectCliSession({
|
|
4490
|
+
cli: agentDef.cli,
|
|
4491
|
+
cwd,
|
|
4492
|
+
startedAt,
|
|
4493
|
+
completedAt,
|
|
4494
|
+
});
|
|
4495
|
+
if (!report)
|
|
4496
|
+
return;
|
|
4497
|
+
this.agentReports.set(stepName, report);
|
|
4498
|
+
this.emit({ type: 'step:agent-report', runId, stepName, report });
|
|
4499
|
+
await this.persistAgentReport(runId, stepName, report);
|
|
4500
|
+
}
|
|
4501
|
+
catch (error) {
|
|
4502
|
+
this.log(`[${stepName}] CLI session collection failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
4503
|
+
}
|
|
4504
|
+
}
|
|
4462
4505
|
async markDownstreamSkipped(failedStepName, allSteps, stepStates, runId) {
|
|
4463
4506
|
const queue = [failedStepName];
|
|
4464
4507
|
const visited = new Set();
|
|
@@ -4686,23 +4729,28 @@ export class WorkflowRunner {
|
|
|
4686
4729
|
const failed = outcomes.filter((o) => o.status === 'failed');
|
|
4687
4730
|
const skipped = outcomes.filter((o) => o.status === 'skipped');
|
|
4688
4731
|
console.log('');
|
|
4689
|
-
console.log('━'.repeat(70));
|
|
4690
|
-
console.log(` Workflow "${workflowName}" — ${failed.length === 0 ? 'COMPLETED' : 'FAILED'}`);
|
|
4691
|
-
console.log(` ${completed.length} passed, ${failed.length} failed, ${skipped.length} skipped`);
|
|
4692
|
-
console.log('━'.repeat(70));
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
|
|
4705
|
-
|
|
4732
|
+
console.log(chalk.dim('━'.repeat(70)));
|
|
4733
|
+
console.log(` Workflow "${workflowName}" — ${failed.length === 0 ? chalk.green('COMPLETED') : chalk.red('FAILED')}`);
|
|
4734
|
+
console.log(` ${chalk.green(`${completed.length} passed`)}, ${chalk.red(`${failed.length} failed`)}, ${chalk.dim(`${skipped.length} skipped`)}`);
|
|
4735
|
+
console.log(chalk.dim('━'.repeat(70)));
|
|
4736
|
+
if (this.agentReports.size > 0) {
|
|
4737
|
+
console.log(formatRunSummaryTable(outcomes, this.agentReports));
|
|
4738
|
+
}
|
|
4739
|
+
else {
|
|
4740
|
+
for (const outcome of outcomes) {
|
|
4741
|
+
const icon = outcome.status === 'completed' ? chalk.green('✓') : outcome.status === 'failed' ? chalk.red('✗') : chalk.dim('⊘');
|
|
4742
|
+
const retryNote = outcome.attempts > 1 ? ` (${outcome.attempts} attempts)` : '';
|
|
4743
|
+
console.log(` ${icon} ${outcome.name} [${outcome.agent}]${retryNote}`);
|
|
4744
|
+
if (outcome.error) {
|
|
4745
|
+
console.log(` Error: ${outcome.error}`);
|
|
4746
|
+
}
|
|
4747
|
+
// Extract last meaningful lines from raw PTY output
|
|
4748
|
+
if (outcome.output) {
|
|
4749
|
+
const excerpt = this.extractOutputExcerpt(outcome.output);
|
|
4750
|
+
if (excerpt) {
|
|
4751
|
+
for (const line of excerpt.split('\n')) {
|
|
4752
|
+
console.log(` ${line}`);
|
|
4753
|
+
}
|
|
4706
4754
|
}
|
|
4707
4755
|
}
|
|
4708
4756
|
}
|
|
@@ -4711,9 +4759,10 @@ export class WorkflowRunner {
|
|
|
4711
4759
|
const outputDir = this.getStepOutputDir(runId);
|
|
4712
4760
|
const logsDir = path.join(this.cwd, '.agent-relay', 'team', 'worker-logs');
|
|
4713
4761
|
console.log('');
|
|
4762
|
+
console.log(` Run ID: ${runId}`);
|
|
4714
4763
|
console.log(` Step output: ${outputDir}`);
|
|
4715
4764
|
console.log(` Agent logs: ${logsDir}`);
|
|
4716
|
-
console.log('━'.repeat(70));
|
|
4765
|
+
console.log(chalk.dim('━'.repeat(70)));
|
|
4717
4766
|
console.log('');
|
|
4718
4767
|
}
|
|
4719
4768
|
/**
|
|
@@ -4776,6 +4825,11 @@ export class WorkflowRunner {
|
|
|
4776
4825
|
const stepsWithVerification = new Set(steps?.filter((s) => s.verification).map((s) => s.name) ?? []);
|
|
4777
4826
|
const outcomes = [];
|
|
4778
4827
|
for (const [name, state] of stepStates) {
|
|
4828
|
+
const startedAtMs = state.row.startedAt ? Date.parse(state.row.startedAt) : Number.NaN;
|
|
4829
|
+
const completedAtMs = state.row.completedAt ? Date.parse(state.row.completedAt) : Number.NaN;
|
|
4830
|
+
const durationMs = Number.isFinite(startedAtMs) && Number.isFinite(completedAtMs)
|
|
4831
|
+
? Math.max(0, completedAtMs - startedAtMs)
|
|
4832
|
+
: undefined;
|
|
4779
4833
|
outcomes.push({
|
|
4780
4834
|
name,
|
|
4781
4835
|
agent: state.row.agentName ?? 'deterministic',
|
|
@@ -4788,6 +4842,7 @@ export class WorkflowRunner {
|
|
|
4788
4842
|
output: state.row.output,
|
|
4789
4843
|
error: state.row.error,
|
|
4790
4844
|
verificationPassed: state.row.status === 'completed' && stepsWithVerification.has(name),
|
|
4845
|
+
durationMs,
|
|
4791
4846
|
completionMode: state.row.completionReason
|
|
4792
4847
|
? this.buildStepCompletionDecision(name, state.row.completionReason)?.mode
|
|
4793
4848
|
: undefined,
|
|
@@ -4960,6 +5015,16 @@ export class WorkflowRunner {
|
|
|
4960
5015
|
const preview = scrubbed.length > maxMsg ? scrubbed.slice(-maxMsg) : scrubbed;
|
|
4961
5016
|
this.postToChannel(`**[${stepName}] Output:**\n\`\`\`\n${preview}\n\`\`\``, { stepName });
|
|
4962
5017
|
}
|
|
5018
|
+
async persistAgentReport(runId, stepName, report) {
|
|
5019
|
+
const reportPath = path.join(this.getStepOutputDir(runId), `${stepName}.report.json`);
|
|
5020
|
+
try {
|
|
5021
|
+
mkdirSync(this.getStepOutputDir(runId), { recursive: true });
|
|
5022
|
+
await writeFile(reportPath, JSON.stringify(report, null, 2), 'utf8');
|
|
5023
|
+
}
|
|
5024
|
+
catch {
|
|
5025
|
+
// Non-critical
|
|
5026
|
+
}
|
|
5027
|
+
}
|
|
4963
5028
|
/** Scan .agent-relay/step-outputs/ for the most recent run directory containing the needed steps. */
|
|
4964
5029
|
findMostRecentRunWithSteps(stepNames) {
|
|
4965
5030
|
try {
|