@agent-relay/sdk 2.3.14 → 2.3.15

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,144 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI entry point for running relay.yaml workflows.
4
+ *
5
+ * Usage:
6
+ * relay-workflow <yaml-path> [--workflow <name>]
7
+ * relay-workflow --resume <run-id>
8
+ * npx @agent-relay/sdk run <yaml-path> [--workflow <name>]
9
+ */
10
+ import path from 'node:path';
11
+ import { WorkflowRunner } from './runner.js';
12
+ import { JsonFileWorkflowDb } from './file-db.js';
13
+ function printUsage() {
14
+ console.log(`
15
+ Usage: relay-workflow <yaml-path> [options]
16
+ relay-workflow --resume <run-id>
17
+
18
+ Run a relay.yaml workflow file.
19
+
20
+ Arguments:
21
+ <yaml-path> Path to the relay.yaml workflow file
22
+
23
+ Options:
24
+ --workflow <name> Run a specific workflow by name (default: first)
25
+ --resume <run-id> Resume a failed or interrupted run by its run ID
26
+ --validate Validate workflow YAML for common issues without running
27
+ --help Show this help message
28
+
29
+ Examples:
30
+ relay-workflow workflows/daytona-migration.yaml
31
+ relay-workflow workflows/feature-dev.yaml --workflow build-and-test
32
+ relay-workflow --resume f409ce1d1788710bcc6abb55
33
+ `.trim());
34
+ }
35
+ function formatEvent(event) {
36
+ switch (event.type) {
37
+ case 'run:started':
38
+ return `[run] started (${event.runId})`;
39
+ case 'run:completed':
40
+ return `[run] completed`;
41
+ case 'run:failed':
42
+ return `[run] failed: ${event.error}`;
43
+ case 'run:cancelled':
44
+ return `[run] cancelled`;
45
+ case 'step:started':
46
+ return `[step] ${event.stepName} started`;
47
+ case 'step:completed':
48
+ return `[step] ${event.stepName} completed`;
49
+ case 'step:failed':
50
+ return `[step] ${event.stepName} failed: ${event.error}`;
51
+ case 'step:skipped':
52
+ return `[step] ${event.stepName} skipped`;
53
+ case 'step:retrying':
54
+ return `[step] ${event.stepName} retrying (attempt ${event.attempt})`;
55
+ case 'step:nudged':
56
+ return `[step] ${event.stepName} nudged (nudge #${event.nudgeCount})`;
57
+ case 'step:force-released':
58
+ return `[step] ${event.stepName} force-released`;
59
+ }
60
+ }
61
+ async function main() {
62
+ const args = process.argv.slice(2);
63
+ if (args.length === 0 || args.includes('--help')) {
64
+ printUsage();
65
+ process.exit(args.includes('--help') ? 0 : 1);
66
+ }
67
+ // Use a file-backed DB so runs survive process restarts and --resume works.
68
+ const dbPath = path.join(process.cwd(), '.agent-relay', 'workflow-runs.jsonl');
69
+ const fileDb = new JsonFileWorkflowDb(dbPath);
70
+ if (!fileDb.isWritable()) {
71
+ console.warn(`[workflow] warning: cannot write to ${dbPath} — run state will not be persisted (--resume unavailable)`);
72
+ }
73
+ const runner = new WorkflowRunner({ db: fileDb });
74
+ let shuttingDown = false;
75
+ const shutdown = async (signal) => {
76
+ if (shuttingDown)
77
+ return;
78
+ shuttingDown = true;
79
+ console.log(`\n[workflow] ${signal} received — shutting down broker...`);
80
+ await runner.relay?.shutdown().catch(() => undefined);
81
+ process.exit(130);
82
+ };
83
+ process.on('SIGINT', () => void shutdown('SIGINT'));
84
+ process.on('SIGTERM', () => void shutdown('SIGTERM'));
85
+ // ── Resume mode ────────────────────────────────────────────────────────────
86
+ const resumeIdx = args.indexOf('--resume');
87
+ if (resumeIdx !== -1) {
88
+ const runId = args[resumeIdx + 1];
89
+ if (!runId) {
90
+ console.error('Error: --resume requires a run ID');
91
+ process.exit(1);
92
+ }
93
+ console.log(`Resuming run ${runId}...`);
94
+ runner.on((event) => console.log(formatEvent(event)));
95
+ const result = await runner.resume(runId);
96
+ if (result.status === 'completed') {
97
+ console.log(`\nWorkflow completed successfully.`);
98
+ process.exit(0);
99
+ }
100
+ else {
101
+ console.error(`\nWorkflow ${result.status}${result.error ? `: ${result.error}` : ''}`);
102
+ process.exit(1);
103
+ }
104
+ return;
105
+ }
106
+ // ── Normal / validate / dry-run mode ──────────────────────────────────────
107
+ const yamlPath = args[0];
108
+ let workflowName;
109
+ const workflowIdx = args.indexOf('--workflow');
110
+ if (workflowIdx !== -1 && args[workflowIdx + 1]) {
111
+ workflowName = args[workflowIdx + 1];
112
+ }
113
+ const isValidate = args.includes('--validate');
114
+ console.log(`Running workflow from ${yamlPath}...`);
115
+ const isDryRun = !!process.env.DRY_RUN;
116
+ const config = await runner.parseYamlFile(yamlPath);
117
+ if (isValidate) {
118
+ const { validateWorkflow, formatValidationReport } = await import('./validator.js');
119
+ const issues = validateWorkflow(config);
120
+ console.log(formatValidationReport(issues, yamlPath));
121
+ process.exit(issues.some((i) => i.severity === 'error') ? 1 : 0);
122
+ }
123
+ if (isDryRun) {
124
+ const { formatDryRunReport } = await import('./dry-run-format.js');
125
+ const report = runner.dryRun(config, workflowName);
126
+ console.log(formatDryRunReport(report));
127
+ process.exit(report.valid ? 0 : 1);
128
+ }
129
+ runner.on((event) => console.log(formatEvent(event)));
130
+ const result = await runner.execute(config, workflowName);
131
+ if (result.status === 'completed') {
132
+ console.log(`\nWorkflow completed successfully.`);
133
+ process.exit(0);
134
+ }
135
+ else {
136
+ console.error(`\nWorkflow ${result.status}${result.error ? `: ${result.error}` : ''}`);
137
+ process.exit(1);
138
+ }
139
+ }
140
+ main().catch((err) => {
141
+ console.error(`Error: ${err.message}`);
142
+ process.exit(1);
143
+ });
144
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/workflows/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Swarm Coordinator — pattern selection, agent topology, and workflow lifecycle.
3
+ *
4
+ * Orchestrates workflow runs: picks the right swarm pattern (or auto-selects),
5
+ * resolves agent topology from the config, and drives the run through its
6
+ * lifecycle states (pending → running → completed / failed / cancelled).
7
+ */
8
+ import { EventEmitter } from 'node:events';
9
+ import type { AgentDefinition, RelayYamlConfig, SwarmPattern, WorkflowRunRow, WorkflowRunStatus, WorkflowStepRow } from './types.js';
10
+ /** Minimal database client contract accepted by all services. */
11
+ export interface DbClient {
12
+ query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<{
13
+ rows: T[];
14
+ }>;
15
+ }
16
+ /** Describes the communication graph for a set of agents. */
17
+ export interface AgentTopology {
18
+ pattern: SwarmPattern;
19
+ agents: AgentDefinition[];
20
+ /** Agent name → names it can send messages to. */
21
+ edges: Map<string, string[]>;
22
+ /** Optional hub agent for hub-spoke / hierarchical. */
23
+ hub?: string;
24
+ /** Ordered pipeline stages (pipeline pattern only). */
25
+ pipelineOrder?: string[];
26
+ }
27
+ export interface SwarmCoordinatorEvents {
28
+ 'run:created': (run: WorkflowRunRow) => void;
29
+ 'run:started': (run: WorkflowRunRow) => void;
30
+ 'run:completed': (run: WorkflowRunRow) => void;
31
+ 'run:failed': (run: WorkflowRunRow) => void;
32
+ 'run:cancelled': (run: WorkflowRunRow) => void;
33
+ 'step:started': (step: WorkflowStepRow) => void;
34
+ 'step:completed': (step: WorkflowStepRow) => void;
35
+ 'step:failed': (step: WorkflowStepRow) => void;
36
+ }
37
+ export declare class SwarmCoordinator extends EventEmitter {
38
+ private db;
39
+ constructor(db: DbClient);
40
+ /**
41
+ * Select the swarm pattern to use for a config. If the config already
42
+ * specifies a pattern, it is returned as-is. Otherwise heuristics apply.
43
+ */
44
+ selectPattern(config: RelayYamlConfig): SwarmPattern;
45
+ /**
46
+ * Build the agent communication topology for a given config and pattern.
47
+ * Non-interactive agents are excluded from message edges — they only communicate
48
+ * through step output chaining ({{steps.X.output}}).
49
+ */
50
+ resolveTopology(config: RelayYamlConfig, pattern?: SwarmPattern): AgentTopology;
51
+ /** Internal: resolve topology edges for interactive agents only. */
52
+ private resolveInteractiveTopology;
53
+ createRun(workspaceId: string, config: RelayYamlConfig): Promise<WorkflowRunRow>;
54
+ startRun(runId: string): Promise<WorkflowRunRow>;
55
+ completeRun(runId: string, stateSnapshot?: Record<string, unknown>): Promise<WorkflowRunRow>;
56
+ failRun(runId: string, error: string): Promise<WorkflowRunRow>;
57
+ cancelRun(runId: string): Promise<WorkflowRunRow>;
58
+ createSteps(runId: string, config: RelayYamlConfig): Promise<WorkflowStepRow[]>;
59
+ startStep(stepId: string): Promise<WorkflowStepRow>;
60
+ completeStep(stepId: string, output?: string): Promise<WorkflowStepRow>;
61
+ failStep(stepId: string, error: string): Promise<WorkflowStepRow>;
62
+ skipStep(stepId: string): Promise<WorkflowStepRow>;
63
+ getRun(runId: string): Promise<WorkflowRunRow | null>;
64
+ getSteps(runId: string): Promise<WorkflowStepRow[]>;
65
+ getReadySteps(runId: string): Promise<WorkflowStepRow[]>;
66
+ getRunsByWorkspace(workspaceId: string, status?: WorkflowRunStatus): Promise<WorkflowRunRow[]>;
67
+ private transitionRun;
68
+ private pickHub;
69
+ private resolvePipelineOrder;
70
+ private resolveEscalationOrder;
71
+ private resolveDAGEdges;
72
+ }
73
+ //# sourceMappingURL=coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/workflows/coordinator.ts"],"names":[],"mappings":"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"}