agent-relay 3.1.14 → 3.1.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 (47) hide show
  1. package/dist/index.cjs +126 -11
  2. package/dist/src/cli/commands/core.d.ts +3 -0
  3. package/dist/src/cli/commands/core.d.ts.map +1 -1
  4. package/dist/src/cli/commands/core.js +17 -0
  5. package/dist/src/cli/commands/core.js.map +1 -1
  6. package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
  7. package/dist/src/cli/lib/broker-lifecycle.js +47 -81
  8. package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
  9. package/dist/src/cli/lib/core-maintenance.js +1 -1
  10. package/dist/src/cli/lib/core-maintenance.js.map +1 -1
  11. package/package.json +8 -8
  12. package/packages/acp-bridge/package.json +2 -2
  13. package/packages/config/package.json +1 -1
  14. package/packages/hooks/package.json +4 -4
  15. package/packages/memory/package.json +2 -2
  16. package/packages/openclaw/README.md +4 -7
  17. package/packages/openclaw/dist/setup.d.ts.map +1 -1
  18. package/packages/openclaw/dist/setup.js +10 -3
  19. package/packages/openclaw/dist/setup.js.map +1 -1
  20. package/packages/openclaw/package.json +2 -2
  21. package/packages/openclaw/skill/SKILL.md +27 -5
  22. package/packages/openclaw/src/setup.ts +10 -3
  23. package/packages/policy/package.json +2 -2
  24. package/packages/sdk/dist/client.d.ts +1 -0
  25. package/packages/sdk/dist/client.d.ts.map +1 -1
  26. package/packages/sdk/dist/client.js +9 -1
  27. package/packages/sdk/dist/client.js.map +1 -1
  28. package/packages/sdk/dist/workflows/runner.d.ts +20 -0
  29. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
  30. package/packages/sdk/dist/workflows/runner.js +130 -11
  31. package/packages/sdk/dist/workflows/runner.js.map +1 -1
  32. package/packages/sdk/dist/workflows/types.d.ts +26 -0
  33. package/packages/sdk/dist/workflows/types.d.ts.map +1 -1
  34. package/packages/sdk/dist/workflows/types.js.map +1 -1
  35. package/packages/sdk/package.json +2 -2
  36. package/packages/sdk/src/client.ts +10 -1
  37. package/packages/sdk/src/workflows/runner.ts +158 -11
  38. package/packages/sdk/src/workflows/schema.json +219 -40
  39. package/packages/sdk/src/workflows/types.ts +29 -0
  40. package/packages/sdk-py/pyproject.toml +1 -1
  41. package/packages/sdk-py/src/agent_relay/__init__.py +2 -0
  42. package/packages/sdk-py/src/agent_relay/types.py +33 -0
  43. package/packages/telemetry/package.json +1 -1
  44. package/packages/trajectory/package.json +2 -2
  45. package/packages/user-directory/package.json +2 -2
  46. package/packages/utils/package.json +2 -2
  47. package/bin/agent-relay-broker-linux-arm64 +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workflows/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workflows/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workflows/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuPH,2EAA2E;AAC3E,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC;AACvC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;AAClC,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,IAAkB;IAC7C,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC;AAChC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workflows/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoRH,2EAA2E;AAC3E,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC;AACvC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,IAAkB;IAC/C,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;AAClC,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,IAAkB;IAC7C,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC;AAChC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;AACnE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/sdk",
3
- "version": "3.1.14",
3
+ "version": "3.1.16",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -81,7 +81,7 @@
81
81
  "typescript": "^5.7.3"
82
82
  },
83
83
  "dependencies": {
84
- "@agent-relay/config": "3.1.14",
84
+ "@agent-relay/config": "3.1.16",
85
85
  "@relaycast/sdk": "^0.4.0",
86
86
  "yaml": "^2.7.0"
87
87
  }
@@ -222,6 +222,10 @@ export class AgentRelayClient {
222
222
  };
223
223
  }
224
224
 
225
+ get brokerPid(): number | undefined {
226
+ return this.child?.pid;
227
+ }
228
+
225
229
  async start(): Promise<void> {
226
230
  if (this.child) {
227
231
  return;
@@ -496,7 +500,12 @@ export class AgentRelayClient {
496
500
  });
497
501
 
498
502
  this.exitPromise = new Promise<void>((resolve) => {
499
- child.once('exit', (code, signal) => {
503
+ // Use 'close' instead of 'exit' so that all buffered stderr/stdout
504
+ // data has been consumed before we build the error message. The
505
+ // 'exit' event fires when the process terminates, but stdio streams
506
+ // may still have unread data; 'close' fires after both the process
507
+ // exits AND all stdio streams have ended.
508
+ child.once('close', (code, signal) => {
500
509
  const detail = this.lastStderrLine ? `: ${this.lastStderrLine}` : '';
501
510
  const error = new AgentRelayProcessError(
502
511
  `broker exited (code=${code ?? 'null'}, signal=${signal ?? 'null'})${detail}`
@@ -30,6 +30,7 @@ import type {
30
30
  DryRunWave,
31
31
  ErrorHandlingConfig,
32
32
  IdleNudgeConfig,
33
+ PathDefinition,
33
34
  PreflightCheck,
34
35
  RelayYamlConfig,
35
36
  SwarmPattern,
@@ -202,6 +203,8 @@ export class WorkflowRunner {
202
203
  private readonly lastIdleLog = new Map<string, number>();
203
204
  /** Tracks last logged activity type per agent to avoid duplicate status lines. */
204
205
  private readonly lastActivity = new Map<string, string>();
206
+ /** Resolved named paths from the top-level `paths` config, keyed by name → absolute directory. */
207
+ private resolvedPaths = new Map<string, string>();
205
208
 
206
209
  constructor(options: WorkflowRunnerOptions = {}) {
207
210
  this.db = options.db ?? new InMemoryWorkflowDb();
@@ -213,6 +216,89 @@ export class WorkflowRunner {
213
216
  this.executor = options.executor;
214
217
  }
215
218
 
219
+ // ── Path resolution ─────────────────────────────────────────────────────
220
+
221
+ /** Expand environment variables like $HOME or $VAR in a path string. */
222
+ private static resolveEnvVars(p: string): string {
223
+ return p.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g, (_match, varName: string) => {
224
+ return process.env[varName] ?? _match;
225
+ });
226
+ }
227
+
228
+ /**
229
+ * Resolve and validate the top-level `paths` definitions from the config.
230
+ * Returns a map of name → absolute directory path.
231
+ * Throws if a required path does not exist.
232
+ */
233
+ private resolvePathDefinitions(
234
+ pathDefs: PathDefinition[] | undefined,
235
+ baseCwd: string
236
+ ): { resolved: Map<string, string>; errors: string[]; warnings: string[] } {
237
+ const resolved = new Map<string, string>();
238
+ const errors: string[] = [];
239
+ const warnings: string[] = [];
240
+ if (!pathDefs || pathDefs.length === 0) return { resolved, errors, warnings };
241
+
242
+ const seenNames = new Set<string>();
243
+ for (const pd of pathDefs) {
244
+ if (seenNames.has(pd.name)) {
245
+ errors.push(`Duplicate path name "${pd.name}"`);
246
+ continue;
247
+ }
248
+ seenNames.add(pd.name);
249
+
250
+ const expanded = WorkflowRunner.resolveEnvVars(pd.path);
251
+ const abs = path.resolve(baseCwd, expanded);
252
+ resolved.set(pd.name, abs);
253
+
254
+ const isRequired = pd.required !== false; // default true
255
+ if (!existsSync(abs)) {
256
+ if (isRequired) {
257
+ errors.push(`Path "${pd.name}" resolves to "${abs}" which does not exist (required)`);
258
+ } else {
259
+ warnings.push(`Path "${pd.name}" resolves to "${abs}" which does not exist (optional)`);
260
+ }
261
+ }
262
+ }
263
+
264
+ return { resolved, errors, warnings };
265
+ }
266
+
267
+ /**
268
+ * Resolve an agent's effective working directory, considering `workdir` (named path reference)
269
+ * and `cwd` (explicit path). `workdir` takes precedence when both are set.
270
+ */
271
+ private resolveAgentCwd(agent: AgentDefinition): string {
272
+ if (agent.workdir) {
273
+ const resolved = this.resolvedPaths.get(agent.workdir);
274
+ if (!resolved) {
275
+ throw new Error(
276
+ `Agent "${agent.name}" references workdir "${agent.workdir}" which is not defined in paths`
277
+ );
278
+ }
279
+ return resolved;
280
+ }
281
+ if (agent.cwd) {
282
+ return path.resolve(this.cwd, agent.cwd);
283
+ }
284
+ return this.cwd;
285
+ }
286
+
287
+ /**
288
+ * Resolve a step's working directory from its `workdir` field (named path reference).
289
+ * Returns undefined if no workdir is set.
290
+ */
291
+ private resolveStepWorkdir(step: WorkflowStep): string | undefined {
292
+ if (!step.workdir) return undefined;
293
+ const resolved = this.resolvedPaths.get(step.workdir);
294
+ if (!resolved) {
295
+ throw new Error(
296
+ `Step "${step.name}" references workdir "${step.workdir}" which is not defined in paths`
297
+ );
298
+ }
299
+ return resolved;
300
+ }
301
+
216
302
  // ── Progress logging ────────────────────────────────────────────────────
217
303
 
218
304
  /** Log a progress message with elapsed time since run start. */
@@ -496,6 +582,21 @@ export class WorkflowRunner {
496
582
  };
497
583
  }
498
584
 
585
+ // 1b. Resolve and validate named paths
586
+ const pathResult = this.resolvePathDefinitions(resolved.paths, this.cwd);
587
+ errors.push(...pathResult.errors);
588
+ warnings.push(...pathResult.warnings);
589
+ const dryRunPaths = pathResult.resolved;
590
+
591
+ // Validate workdir references on agents
592
+ for (const agent of resolved.agents) {
593
+ if (agent.workdir && !dryRunPaths.has(agent.workdir)) {
594
+ errors.push(
595
+ `Agent "${agent.name}" references workdir "${agent.workdir}" which is not defined in paths`
596
+ );
597
+ }
598
+ }
599
+
499
600
  // 2. Find target workflow
500
601
  const workflows = resolved.workflows ?? [];
501
602
  const workflow = workflowName ? workflows.find((w) => w.name === workflowName) : workflows[0];
@@ -566,6 +667,15 @@ export class WorkflowRunner {
566
667
  }
567
668
  }
568
669
 
670
+ // Validate workdir references on steps
671
+ for (const step of resolvedSteps) {
672
+ if (step.workdir && !dryRunPaths.has(step.workdir)) {
673
+ errors.push(
674
+ `Step "${step.name}" references workdir "${step.workdir}" which is not defined in paths`
675
+ );
676
+ }
677
+ }
678
+
569
679
  // Validate cwd paths
570
680
  for (const agent of resolved.agents) {
571
681
  if (agent.cwd) {
@@ -668,7 +778,7 @@ export class WorkflowRunner {
668
778
  name: a.name,
669
779
  cli: a.cli,
670
780
  role: a.role,
671
- cwd: a.cwd,
781
+ cwd: a.workdir ? dryRunPaths.get(a.workdir) : a.cwd,
672
782
  stepCount: stepAgentCounts.get(a.name) ?? 0,
673
783
  }));
674
784
 
@@ -992,6 +1102,19 @@ export class WorkflowRunner {
992
1102
  vars?: VariableContext
993
1103
  ): Promise<WorkflowRunRow> {
994
1104
  const resolved = vars ? this.resolveVariables(config, vars) : config;
1105
+
1106
+ // Resolve and validate named paths from the top-level `paths` config
1107
+ const pathResult = this.resolvePathDefinitions(resolved.paths, this.cwd);
1108
+ if (pathResult.errors.length > 0) {
1109
+ throw new Error(`Path validation failed:\n ${pathResult.errors.join('\n ')}`);
1110
+ }
1111
+ this.resolvedPaths = pathResult.resolved;
1112
+ if (this.resolvedPaths.size > 0) {
1113
+ for (const [name, abs] of this.resolvedPaths) {
1114
+ console.log(`[workflow] path "${name}" → ${abs}`);
1115
+ }
1116
+ }
1117
+
995
1118
  const workflows = resolved.workflows ?? [];
996
1119
 
997
1120
  const workflow = workflowName ? workflows.find((w) => w.name === workflowName) : workflows[0];
@@ -1073,6 +1196,14 @@ export class WorkflowRunner {
1073
1196
  }
1074
1197
 
1075
1198
  const config = vars ? this.resolveVariables(run.config, vars) : run.config;
1199
+
1200
+ // Resolve path definitions (same as execute()) so workdir lookups work on resume
1201
+ const pathResult = this.resolvePathDefinitions(config.paths, this.cwd);
1202
+ if (pathResult.errors.length > 0) {
1203
+ throw new Error(`Path validation failed:\n ${pathResult.errors.join('\n ')}`);
1204
+ }
1205
+ this.resolvedPaths = pathResult.resolved;
1206
+
1076
1207
  const workflows = config.workflows ?? [];
1077
1208
  const workflow = workflows.find((w) => w.name === run.workflowName);
1078
1209
  if (!workflow) {
@@ -1732,10 +1863,13 @@ export class WorkflowRunner {
1732
1863
  return value !== undefined ? String(value) : _match;
1733
1864
  });
1734
1865
 
1866
+ // Resolve step workdir (named path reference) for deterministic steps
1867
+ const stepCwd = this.resolveStepWorkdir(step) ?? this.cwd;
1868
+
1735
1869
  try {
1736
1870
  // Delegate to executor if present
1737
1871
  if (this.executor?.executeDeterministicStep) {
1738
- const result = await this.executor.executeDeterministicStep(step, resolvedCommand, this.cwd);
1872
+ const result = await this.executor.executeDeterministicStep(step, resolvedCommand, stepCwd);
1739
1873
  const failOnError = step.failOnError !== false;
1740
1874
  if (failOnError && result.exitCode !== 0) {
1741
1875
  throw new Error(`Command failed with exit code ${result.exitCode}: ${result.output.slice(0, 500)}`);
@@ -1761,7 +1895,7 @@ export class WorkflowRunner {
1761
1895
  const output = await new Promise<string>((resolve, reject) => {
1762
1896
  const child = cpSpawn('sh', ['-c', resolvedCommand], {
1763
1897
  stdio: 'pipe',
1764
- cwd: this.cwd,
1898
+ cwd: stepCwd,
1765
1899
  env: { ...process.env },
1766
1900
  });
1767
1901
 
@@ -1900,6 +2034,9 @@ export class WorkflowRunner {
1900
2034
  : path.join('.worktrees', step.name);
1901
2035
  const createBranch = step.createBranch !== false;
1902
2036
 
2037
+ // Resolve workdir for worktree steps (same as deterministic/agent steps)
2038
+ const stepCwd = this.resolveStepWorkdir(step) ?? this.cwd;
2039
+
1903
2040
  if (!branch) {
1904
2041
  const errorMsg = 'Worktree step missing required "branch" field';
1905
2042
  await this.markStepFailed(state, errorMsg, runId);
@@ -1909,7 +2046,7 @@ export class WorkflowRunner {
1909
2046
  try {
1910
2047
  // Build the git worktree command
1911
2048
  // If createBranch is true and branch doesn't exist, use -b flag
1912
- const absoluteWorktreePath = path.resolve(this.cwd, worktreePath);
2049
+ const absoluteWorktreePath = path.resolve(stepCwd, worktreePath);
1913
2050
 
1914
2051
  // First, check if the branch already exists
1915
2052
  const checkBranchCmd = `git rev-parse --verify --quiet ${branch} 2>/dev/null`;
@@ -1918,7 +2055,7 @@ export class WorkflowRunner {
1918
2055
  await new Promise<void>((resolve) => {
1919
2056
  const checkChild = cpSpawn('sh', ['-c', checkBranchCmd], {
1920
2057
  stdio: 'pipe',
1921
- cwd: this.cwd,
2058
+ cwd: stepCwd,
1922
2059
  env: { ...process.env },
1923
2060
  });
1924
2061
  checkChild.on('close', (code) => {
@@ -1946,7 +2083,7 @@ export class WorkflowRunner {
1946
2083
  const output = await new Promise<string>((resolve, reject) => {
1947
2084
  const child = cpSpawn('sh', ['-c', worktreeCmd], {
1948
2085
  stdio: 'pipe',
1949
- cwd: this.cwd,
2086
+ cwd: stepCwd,
1950
2087
  env: { ...process.env },
1951
2088
  });
1952
2089
 
@@ -2122,12 +2259,21 @@ export class WorkflowRunner {
2122
2259
  }
2123
2260
  }
2124
2261
 
2262
+ // Apply step-level workdir override to agent definition if present
2263
+ let effectiveAgentDef = agentDef;
2264
+ if (step.workdir) {
2265
+ const stepWorkdir = this.resolveStepWorkdir(step);
2266
+ if (stepWorkdir) {
2267
+ effectiveAgentDef = { ...agentDef, cwd: stepWorkdir, workdir: undefined };
2268
+ }
2269
+ }
2270
+
2125
2271
  // Spawn agent via AgentRelay
2126
- this.log(`[${step.name}] Spawning agent "${agentDef.name}" (cli: ${agentDef.cli})`);
2272
+ this.log(`[${step.name}] Spawning agent "${effectiveAgentDef.name}" (cli: ${effectiveAgentDef.cli})${step.workdir ? ` [workdir: ${step.workdir}]` : ''}`);
2127
2273
  const resolvedStep = { ...step, task: resolvedTask };
2128
2274
  const output = this.executor
2129
- ? await this.executor.executeAgentStep(resolvedStep, agentDef, resolvedTask, timeoutMs)
2130
- : await this.spawnAndWait(agentDef, resolvedStep, timeoutMs);
2275
+ ? await this.executor.executeAgentStep(resolvedStep, effectiveAgentDef, resolvedTask, timeoutMs)
2276
+ : await this.spawnAndWait(effectiveAgentDef, resolvedStep, timeoutMs);
2131
2277
  this.log(`[${step.name}] Agent "${agentDef.name}" exited`);
2132
2278
 
2133
2279
  // Run verification if configured
@@ -2336,7 +2482,7 @@ export class WorkflowRunner {
2336
2482
  const output = await new Promise<string>((resolve, reject) => {
2337
2483
  const child = cpSpawn(cmd, args, {
2338
2484
  stdio: ['ignore', 'pipe', 'pipe'],
2339
- cwd: agentDef.cwd ? path.resolve(this.cwd, agentDef.cwd) : this.cwd,
2485
+ cwd: this.resolveAgentCwd(agentDef),
2340
2486
  env: this.getRelayEnv() ?? { ...process.env },
2341
2487
  });
2342
2488
 
@@ -2515,6 +2661,7 @@ export class WorkflowRunner {
2515
2661
  let ptyChunks: string[] = [];
2516
2662
 
2517
2663
  try {
2664
+ const agentCwd = this.resolveAgentCwd(agentDef);
2518
2665
  agent = await this.relay.spawnPty({
2519
2666
  name: agentName,
2520
2667
  cli: agentDef.cli,
@@ -2523,7 +2670,7 @@ export class WorkflowRunner {
2523
2670
  channels: agentChannels,
2524
2671
  task: taskWithExit,
2525
2672
  idleThresholdSecs: agentDef.constraints?.idleThresholdSecs,
2526
- cwd: agentDef.cwd ? path.resolve(this.cwd, agentDef.cwd) : undefined,
2673
+ cwd: agentCwd !== this.cwd ? agentCwd : undefined,
2527
2674
  });
2528
2675
 
2529
2676
  // Re-key PTY maps if broker assigned a different name than requested