agent-relay 3.2.10 → 3.2.12

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 (63) hide show
  1. package/README.md +2 -2
  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/index.cjs +858 -519
  7. package/package.json +8 -8
  8. package/packages/acp-bridge/package.json +2 -2
  9. package/packages/config/package.json +1 -1
  10. package/packages/hooks/package.json +4 -4
  11. package/packages/memory/package.json +2 -2
  12. package/packages/openclaw/package.json +2 -2
  13. package/packages/policy/package.json +2 -2
  14. package/packages/sdk/dist/cli-registry.d.ts +42 -0
  15. package/packages/sdk/dist/cli-registry.d.ts.map +1 -0
  16. package/packages/sdk/dist/cli-registry.js +126 -0
  17. package/packages/sdk/dist/cli-registry.js.map +1 -0
  18. package/packages/sdk/dist/cli-resolver.d.ts +30 -0
  19. package/packages/sdk/dist/cli-resolver.d.ts.map +1 -0
  20. package/packages/sdk/dist/cli-resolver.js +132 -0
  21. package/packages/sdk/dist/cli-resolver.js.map +1 -0
  22. package/packages/sdk/dist/index.d.ts +2 -0
  23. package/packages/sdk/dist/index.d.ts.map +1 -1
  24. package/packages/sdk/dist/index.js +2 -0
  25. package/packages/sdk/dist/index.js.map +1 -1
  26. package/packages/sdk/dist/spawn-from-env.d.ts.map +1 -1
  27. package/packages/sdk/dist/spawn-from-env.js +6 -15
  28. package/packages/sdk/dist/spawn-from-env.js.map +1 -1
  29. package/packages/sdk/dist/workflows/builder.d.ts +5 -0
  30. package/packages/sdk/dist/workflows/builder.d.ts.map +1 -1
  31. package/packages/sdk/dist/workflows/builder.js +36 -5
  32. package/packages/sdk/dist/workflows/builder.js.map +1 -1
  33. package/packages/sdk/dist/workflows/collectors/opencode.d.ts.map +1 -1
  34. package/packages/sdk/dist/workflows/collectors/opencode.js +26 -0
  35. package/packages/sdk/dist/workflows/collectors/opencode.js.map +1 -1
  36. package/packages/sdk/dist/workflows/default-logger.d.ts +9 -0
  37. package/packages/sdk/dist/workflows/default-logger.d.ts.map +1 -0
  38. package/packages/sdk/dist/workflows/default-logger.js +104 -0
  39. package/packages/sdk/dist/workflows/default-logger.js.map +1 -0
  40. package/packages/sdk/dist/workflows/index.d.ts +1 -0
  41. package/packages/sdk/dist/workflows/index.d.ts.map +1 -1
  42. package/packages/sdk/dist/workflows/index.js +1 -0
  43. package/packages/sdk/dist/workflows/index.js.map +1 -1
  44. package/packages/sdk/dist/workflows/runner.d.ts +1 -1
  45. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
  46. package/packages/sdk/dist/workflows/runner.js +16 -45
  47. package/packages/sdk/dist/workflows/runner.js.map +1 -1
  48. package/packages/sdk/package.json +2 -2
  49. package/packages/sdk/src/__tests__/workflow-runner.test.ts +2 -2
  50. package/packages/sdk/src/cli-registry.ts +148 -0
  51. package/packages/sdk/src/cli-resolver.ts +155 -0
  52. package/packages/sdk/src/index.ts +2 -0
  53. package/packages/sdk/src/spawn-from-env.ts +6 -17
  54. package/packages/sdk/src/workflows/builder.ts +44 -4
  55. package/packages/sdk/src/workflows/collectors/opencode.ts +26 -0
  56. package/packages/sdk/src/workflows/default-logger.ts +120 -0
  57. package/packages/sdk/src/workflows/index.ts +1 -0
  58. package/packages/sdk/src/workflows/runner.ts +16 -43
  59. package/packages/sdk-py/pyproject.toml +1 -1
  60. package/packages/telemetry/package.json +1 -1
  61. package/packages/trajectory/package.json +2 -2
  62. package/packages/user-directory/package.json +2 -2
  63. package/packages/utils/package.json +2 -2
@@ -4,7 +4,7 @@
4
4
  * persists state to DB, and supports pause/resume/abort with retries.
5
5
  */
6
6
 
7
- import { spawn as cpSpawn, execFileSync } from 'node:child_process';
7
+ import { spawn as cpSpawn } from 'node:child_process';
8
8
  import { randomBytes } from 'node:crypto';
9
9
  import {
10
10
  createWriteStream,
@@ -25,6 +25,8 @@ import { parse as parseYaml } from 'yaml';
25
25
  import { stripAnsi as stripAnsiFn } from '../pty.js';
26
26
  import type { BrokerEvent } from '../protocol.js';
27
27
  import { resolveSpawnPolicy } from '../spawn-from-env.js';
28
+ import { getCliDefinition } from '../cli-registry.js';
29
+ import { resolveCliSync } from '../cli-resolver.js';
28
30
 
29
31
  import {
30
32
  loadCustomSteps,
@@ -278,25 +280,12 @@ interface ChannelEvidenceOptions {
278
280
 
279
281
  /**
280
282
  * Resolve `cursor` to the concrete cursor agent binary available in PATH.
281
- * Prefers `cursor-agent` over `agent`. Falls back to `agent` if neither
282
- * `cursor-agent` nor a real cursor IDE CLI is found.
283
- * Result is memoized after the first call to avoid repeated sync PATH lookups.
283
+ * Delegates to the consolidated cli-resolver which checks PATH + well-known
284
+ * install directories. Falls back to `agent` if nothing found.
284
285
  */
285
- let _resolvedCursorCli: 'cursor-agent' | 'agent' | undefined;
286
286
  function resolveCursorCli(): 'cursor-agent' | 'agent' {
287
- if (_resolvedCursorCli !== undefined) return _resolvedCursorCli;
288
- const candidates: Array<'cursor-agent' | 'agent'> = ['cursor-agent', 'agent'];
289
- for (const candidate of candidates) {
290
- try {
291
- execFileSync('which', [candidate], { stdio: 'ignore' });
292
- _resolvedCursorCli = candidate;
293
- return candidate;
294
- } catch {
295
- // not in PATH, try next
296
- }
297
- }
298
- _resolvedCursorCli = 'agent'; // last-resort default
299
- return _resolvedCursorCli;
287
+ const resolved = resolveCliSync('cursor');
288
+ return (resolved?.binary as 'cursor-agent' | 'agent') ?? 'agent';
300
289
  }
301
290
 
302
291
  // ── WorkflowRunner ──────────────────────────────────────────────────────────
@@ -4738,38 +4727,22 @@ export class WorkflowRunner {
4738
4727
 
4739
4728
  /**
4740
4729
  * Build the CLI command and arguments for a non-interactive agent execution.
4741
- * Each CLI has a specific flag for one-shot prompt mode.
4730
+ * Delegates to the consolidated CLI registry for per-CLI arg formats.
4742
4731
  */
4743
4732
  static buildNonInteractiveCommand(
4744
4733
  cli: AgentCli,
4745
4734
  task: string,
4746
4735
  extraArgs: string[] = []
4747
4736
  ): { cmd: string; args: string[] } {
4748
- switch (cli) {
4749
- case 'claude':
4750
- // --dangerously-skip-permissions prevents any tool-use permission prompt
4751
- // from blocking the process when stdio is piped (no TTY available).
4752
- return { cmd: 'claude', args: ['-p', '--dangerously-skip-permissions', task, ...extraArgs] };
4753
- case 'codex':
4754
- return { cmd: 'codex', args: ['exec', task, ...extraArgs] };
4755
- case 'gemini':
4756
- return { cmd: 'gemini', args: ['-p', task, ...extraArgs] };
4757
- case 'opencode':
4758
- return { cmd: 'opencode', args: ['--prompt', task, ...extraArgs] };
4759
- case 'droid':
4760
- return { cmd: 'droid', args: ['exec', task, ...extraArgs] };
4761
- case 'aider':
4762
- return { cmd: 'aider', args: ['--message', task, '--yes-always', '--no-git', ...extraArgs] };
4763
- case 'goose':
4764
- return { cmd: 'goose', args: ['run', '--text', task, '--no-session', ...extraArgs] };
4765
- case 'cursor-agent':
4766
- case 'agent':
4767
- return { cmd: cli, args: ['--force', '-p', task, ...extraArgs] };
4768
- case 'cursor':
4769
- // Should not reach here after resolveAgentDef resolves to agent/cursor-agent,
4770
- // but handle as fallback.
4771
- return { cmd: resolveCursorCli(), args: ['--force', '-p', task, ...extraArgs] };
4737
+ const resolvedCli: AgentCli = cli === 'cursor' ? resolveCursorCli() : cli;
4738
+ const def = getCliDefinition(resolvedCli);
4739
+ if (!def) {
4740
+ throw new Error(`Unknown CLI: ${resolvedCli}`);
4772
4741
  }
4742
+ return {
4743
+ cmd: def.binaries[0],
4744
+ args: def.nonInteractiveArgs(task, extraArgs),
4745
+ };
4773
4746
  }
4774
4747
 
4775
4748
  /**
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "agent-relay-sdk"
7
- version = "3.2.10"
7
+ version = "3.2.12"
8
8
  description = "Python SDK for Agent Relay workflows"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/telemetry",
3
- "version": "3.2.10",
3
+ "version": "3.2.12",
4
4
  "description": "Anonymous telemetry for Agent Relay usage analytics",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/trajectory",
3
- "version": "3.2.10",
3
+ "version": "3.2.12",
4
4
  "description": "Trajectory integration utilities (trail/PDERO) for Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/config": "3.2.10"
25
+ "@agent-relay/config": "3.2.12"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/user-directory",
3
- "version": "3.2.10",
3
+ "version": "3.2.12",
4
4
  "description": "User directory service for agent-relay (per-user credential storage)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/utils": "3.2.10"
25
+ "@agent-relay/utils": "3.2.12"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/utils",
3
- "version": "3.2.10",
3
+ "version": "3.2.12",
4
4
  "description": "Shared utilities for agent-relay: logging, name generation, command resolution, update checking",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.js",
@@ -112,7 +112,7 @@
112
112
  "vitest": "^3.2.4"
113
113
  },
114
114
  "dependencies": {
115
- "@agent-relay/config": "3.2.10",
115
+ "@agent-relay/config": "3.2.12",
116
116
  "compare-versions": "^6.1.1"
117
117
  },
118
118
  "publishConfig": {