@relayflows/core 0.0.1 → 1.0.1

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/dist/agent-handle.d.ts +27 -0
  2. package/dist/agent-handle.d.ts.map +1 -0
  3. package/dist/agent-handle.js +32 -0
  4. package/dist/agent-handle.js.map +1 -0
  5. package/dist/api-executor.d.ts +16 -0
  6. package/dist/api-executor.d.ts.map +1 -0
  7. package/dist/api-executor.js +94 -0
  8. package/dist/api-executor.js.map +1 -0
  9. package/dist/barrier.d.ts +72 -0
  10. package/dist/barrier.d.ts.map +1 -0
  11. package/dist/barrier.js +162 -0
  12. package/dist/barrier.js.map +1 -0
  13. package/dist/budget-tracker.d.ts +75 -0
  14. package/dist/budget-tracker.d.ts.map +1 -0
  15. package/dist/budget-tracker.js +184 -0
  16. package/dist/budget-tracker.js.map +1 -0
  17. package/dist/builder.d.ts +229 -0
  18. package/dist/builder.d.ts.map +1 -0
  19. package/dist/builder.js +430 -0
  20. package/dist/builder.js.map +1 -0
  21. package/dist/builtin-templates/bug-fix.yaml +139 -0
  22. package/dist/builtin-templates/code-review.yaml +137 -0
  23. package/dist/builtin-templates/competitive.yaml +107 -0
  24. package/dist/builtin-templates/documentation.yaml +128 -0
  25. package/dist/builtin-templates/feature-dev.yaml +146 -0
  26. package/dist/builtin-templates/refactor.yaml +145 -0
  27. package/dist/builtin-templates/review-loop.yaml +227 -0
  28. package/dist/builtin-templates/security-audit.yaml +139 -0
  29. package/dist/channel-messenger.d.ts +28 -0
  30. package/dist/channel-messenger.d.ts.map +1 -0
  31. package/dist/channel-messenger.js +275 -0
  32. package/dist/channel-messenger.js.map +1 -0
  33. package/dist/cli-registry.d.ts +77 -0
  34. package/dist/cli-registry.d.ts.map +1 -0
  35. package/dist/cli-registry.js +268 -0
  36. package/dist/cli-registry.js.map +1 -0
  37. package/dist/cli-session-collector.d.ts +39 -0
  38. package/dist/cli-session-collector.d.ts.map +1 -0
  39. package/dist/cli-session-collector.js +23 -0
  40. package/dist/cli-session-collector.js.map +1 -0
  41. package/dist/cli.d.ts +11 -0
  42. package/dist/cli.d.ts.map +1 -0
  43. package/dist/cli.js +395 -0
  44. package/dist/cli.js.map +1 -0
  45. package/dist/cloud-runner.d.ts +15 -0
  46. package/dist/cloud-runner.d.ts.map +1 -0
  47. package/dist/cloud-runner.js +41 -0
  48. package/dist/cloud-runner.js.map +1 -0
  49. package/dist/cloud-schedules.d.ts +3 -0
  50. package/dist/cloud-schedules.d.ts.map +1 -0
  51. package/dist/cloud-schedules.js +2 -0
  52. package/dist/cloud-schedules.js.map +1 -0
  53. package/dist/collectors/claude.d.ts +6 -0
  54. package/dist/collectors/claude.d.ts.map +1 -0
  55. package/dist/collectors/claude.js +330 -0
  56. package/dist/collectors/claude.js.map +1 -0
  57. package/dist/collectors/codex.d.ts +18 -0
  58. package/dist/collectors/codex.d.ts.map +1 -0
  59. package/dist/collectors/codex.js +265 -0
  60. package/dist/collectors/codex.js.map +1 -0
  61. package/dist/collectors/opencode.d.ts +6 -0
  62. package/dist/collectors/opencode.d.ts.map +1 -0
  63. package/dist/collectors/opencode.js +204 -0
  64. package/dist/collectors/opencode.js.map +1 -0
  65. package/dist/coordinator.d.ts +73 -0
  66. package/dist/coordinator.d.ts.map +1 -0
  67. package/dist/coordinator.js +647 -0
  68. package/dist/coordinator.js.map +1 -0
  69. package/dist/custom-steps.d.ts +73 -0
  70. package/dist/custom-steps.d.ts.map +1 -0
  71. package/dist/custom-steps.js +321 -0
  72. package/dist/custom-steps.js.map +1 -0
  73. package/dist/default-logger.d.ts +9 -0
  74. package/dist/default-logger.d.ts.map +1 -0
  75. package/dist/default-logger.js +104 -0
  76. package/dist/default-logger.js.map +1 -0
  77. package/dist/dry-run-format.d.ts +6 -0
  78. package/dist/dry-run-format.d.ts.map +1 -0
  79. package/dist/dry-run-format.js +79 -0
  80. package/dist/dry-run-format.js.map +1 -0
  81. package/dist/file-db.d.ts +85 -0
  82. package/dist/file-db.d.ts.map +1 -0
  83. package/dist/file-db.js +215 -0
  84. package/dist/file-db.js.map +1 -0
  85. package/dist/index.d.ts +37 -1
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +34 -3
  88. package/dist/index.js.map +1 -0
  89. package/dist/integrations/browser.d.ts +99 -0
  90. package/dist/integrations/browser.d.ts.map +1 -0
  91. package/dist/integrations/browser.js +419 -0
  92. package/dist/integrations/browser.js.map +1 -0
  93. package/dist/integrations/github.d.ts +79 -0
  94. package/dist/integrations/github.d.ts.map +1 -0
  95. package/dist/integrations/github.js +459 -0
  96. package/dist/integrations/github.js.map +1 -0
  97. package/dist/integrations/slack.d.ts +80 -0
  98. package/dist/integrations/slack.d.ts.map +1 -0
  99. package/dist/integrations/slack.js +355 -0
  100. package/dist/integrations/slack.js.map +1 -0
  101. package/dist/listr-renderer.d.ts +26 -0
  102. package/dist/listr-renderer.d.ts.map +1 -0
  103. package/dist/listr-renderer.js +230 -0
  104. package/dist/listr-renderer.js.map +1 -0
  105. package/dist/memory-db.d.ts +17 -0
  106. package/dist/memory-db.d.ts.map +1 -0
  107. package/dist/memory-db.js +33 -0
  108. package/dist/memory-db.js.map +1 -0
  109. package/dist/process-backend-executor.d.ts +18 -0
  110. package/dist/process-backend-executor.d.ts.map +1 -0
  111. package/dist/process-backend-executor.js +74 -0
  112. package/dist/process-backend-executor.js.map +1 -0
  113. package/dist/process-spawner.d.ts +35 -0
  114. package/dist/process-spawner.d.ts.map +1 -0
  115. package/dist/process-spawner.js +173 -0
  116. package/dist/process-spawner.js.map +1 -0
  117. package/dist/provisioner.d.ts +64 -0
  118. package/dist/provisioner.d.ts.map +1 -0
  119. package/dist/provisioner.js +269 -0
  120. package/dist/provisioner.js.map +1 -0
  121. package/dist/proxy-env.d.ts +52 -0
  122. package/dist/proxy-env.d.ts.map +1 -0
  123. package/dist/proxy-env.js +92 -0
  124. package/dist/proxy-env.js.map +1 -0
  125. package/dist/run-script.d.ts +82 -0
  126. package/dist/run-script.d.ts.map +1 -0
  127. package/dist/run-script.js +527 -0
  128. package/dist/run-script.js.map +1 -0
  129. package/dist/run-summary-table.d.ts +5 -0
  130. package/dist/run-summary-table.d.ts.map +1 -0
  131. package/dist/run-summary-table.js +132 -0
  132. package/dist/run-summary-table.js.map +1 -0
  133. package/dist/run.d.ts +45 -0
  134. package/dist/run.d.ts.map +1 -0
  135. package/dist/run.js +37 -0
  136. package/dist/run.js.map +1 -0
  137. package/dist/runner.d.ts +528 -0
  138. package/dist/runner.d.ts.map +1 -0
  139. package/dist/runner.js +6269 -0
  140. package/dist/runner.js.map +1 -0
  141. package/dist/schema.d.ts +275 -0
  142. package/dist/schema.d.ts.map +1 -0
  143. package/dist/schema.js +27 -0
  144. package/dist/schema.js.map +1 -0
  145. package/dist/schema.json +940 -0
  146. package/dist/sibling-links.d.ts +100 -0
  147. package/dist/sibling-links.d.ts.map +1 -0
  148. package/dist/sibling-links.js +205 -0
  149. package/dist/sibling-links.js.map +1 -0
  150. package/dist/state.d.ts +77 -0
  151. package/dist/state.d.ts.map +1 -0
  152. package/dist/state.js +140 -0
  153. package/dist/state.js.map +1 -0
  154. package/dist/step-executor.d.ts +95 -0
  155. package/dist/step-executor.d.ts.map +1 -0
  156. package/dist/step-executor.js +393 -0
  157. package/dist/step-executor.js.map +1 -0
  158. package/dist/template-resolver.d.ts +33 -0
  159. package/dist/template-resolver.d.ts.map +1 -0
  160. package/dist/template-resolver.js +144 -0
  161. package/dist/template-resolver.js.map +1 -0
  162. package/dist/templates.d.ts +47 -0
  163. package/dist/templates.d.ts.map +1 -0
  164. package/dist/templates.js +405 -0
  165. package/dist/templates.js.map +1 -0
  166. package/dist/trajectory.d.ts +87 -0
  167. package/dist/trajectory.d.ts.map +1 -0
  168. package/dist/trajectory.js +412 -0
  169. package/dist/trajectory.js.map +1 -0
  170. package/dist/types.d.ts +471 -0
  171. package/dist/types.d.ts.map +1 -0
  172. package/dist/types.js +37 -0
  173. package/dist/types.js.map +1 -0
  174. package/dist/validator.d.ts +11 -0
  175. package/dist/validator.d.ts.map +1 -0
  176. package/dist/validator.js +186 -0
  177. package/dist/validator.js.map +1 -0
  178. package/dist/verification.d.ts +53 -0
  179. package/dist/verification.d.ts.map +1 -0
  180. package/dist/verification.js +238 -0
  181. package/dist/verification.js.map +1 -0
  182. package/package.json +12 -8
@@ -0,0 +1,355 @@
1
+ import { SlackClient } from '@relayflows/slack-primitive';
2
+ import { SlackAction, SLACK_ACTIONS, } from '@relayflows/slack-primitive';
3
+ const SLACK_INTEGRATION = 'slack';
4
+ const RESERVED_PARAM_KEYS = new Set(['action', 'config', 'slackConfig', 'output', 'params']);
5
+ /**
6
+ * Create a Relay integration step for posting a Slack message.
7
+ * @param config - Slack step configuration.
8
+ * @returns Workflow integration step.
9
+ */
10
+ export function createSlackStep(config) {
11
+ validateSlackStepConfig(config);
12
+ const params = {
13
+ text: config.text,
14
+ };
15
+ if (config.channel !== undefined)
16
+ params.channel = config.channel;
17
+ if (config.threadTs !== undefined)
18
+ params.threadTs = config.threadTs;
19
+ if (config.mentions !== undefined)
20
+ params.mentions = JSON.stringify(config.mentions);
21
+ if (config.unfurl !== undefined)
22
+ params.unfurl = String(config.unfurl);
23
+ if (config.config !== undefined)
24
+ params.config = JSON.stringify(config.config);
25
+ if (config.output !== undefined)
26
+ params.output = JSON.stringify(config.output);
27
+ const step = {
28
+ name: config.name,
29
+ type: 'integration',
30
+ integration: SLACK_INTEGRATION,
31
+ action: config.action,
32
+ params,
33
+ };
34
+ if (config.dependsOn !== undefined)
35
+ step.dependsOn = config.dependsOn;
36
+ if (config.timeoutMs !== undefined)
37
+ step.timeoutMs = config.timeoutMs;
38
+ if (config.retries !== undefined)
39
+ step.retries = config.retries;
40
+ return step;
41
+ }
42
+ export class SlackStepExecutor {
43
+ options;
44
+ constructor(options = {}) {
45
+ this.options = options;
46
+ }
47
+ async executeAgentStep() {
48
+ throw new Error('SlackStepExecutor only executes Slack integration steps.');
49
+ }
50
+ async execute(config, context = {}) {
51
+ validateSlackStepConfig(config);
52
+ const runtimeConfig = mergeRuntimeConfig(this.options, context.config, config.config);
53
+ const client = context.client ?? new SlackClient(runtimeConfig);
54
+ const params = buildActionParams(config);
55
+ const result = await client.executeAction(SlackAction.PostMessage, params);
56
+ const output = formatStepOutput(config, result);
57
+ return {
58
+ success: result.success,
59
+ output,
60
+ result,
61
+ error: result.error,
62
+ };
63
+ }
64
+ async executeIntegrationStep(step, resolvedParams) {
65
+ if (step.integration !== SLACK_INTEGRATION) {
66
+ return {
67
+ success: false,
68
+ output: `SlackStepExecutor only handles "${SLACK_INTEGRATION}" integration steps`,
69
+ };
70
+ }
71
+ try {
72
+ const config = slackStepConfigFromWorkflowStep(step, resolvedParams);
73
+ const result = await this.execute(config);
74
+ return {
75
+ success: result.success,
76
+ output: result.success ? result.output : result.output || result.error || 'Slack step failed',
77
+ };
78
+ }
79
+ catch (error) {
80
+ return {
81
+ success: false,
82
+ output: error instanceof Error ? error.message : String(error),
83
+ };
84
+ }
85
+ }
86
+ }
87
+ /**
88
+ * Rebuild a Slack step config from resolved workflow params.
89
+ * @param step - Workflow step.
90
+ * @param resolvedParams - Params after workflow templating.
91
+ * @returns Slack step configuration.
92
+ */
93
+ export function slackStepConfigFromWorkflowStep(step, resolvedParams) {
94
+ const params = normalizeResolvedParams(resolvedParams);
95
+ const action = step.action;
96
+ if (action !== SlackAction.PostMessage) {
97
+ throw new Error(`Slack step "${step.name}" requires action "postMessage"`);
98
+ }
99
+ const config = readJsonParam(params.config ?? params.slackConfig, 'config') ?? undefined;
100
+ const output = readJsonParam(params.output, 'output') ?? undefined;
101
+ const actionParams = readActionParams(params);
102
+ return {
103
+ name: step.name,
104
+ dependsOn: step.dependsOn,
105
+ action: SlackAction.PostMessage,
106
+ channel: readOptionalString(actionParams.channel),
107
+ text: readRequiredString(actionParams.text, 'text'),
108
+ threadTs: readOptionalString(actionParams.threadTs),
109
+ mentions: readStringArray(actionParams.mentions),
110
+ unfurl: readOptionalBoolean(actionParams.unfurl, 'unfurl'),
111
+ config,
112
+ output,
113
+ timeoutMs: step.timeoutMs,
114
+ retries: step.retries,
115
+ };
116
+ }
117
+ export function renderSlackTemplates(value, data) {
118
+ return value.replace(/\{\{\s*steps\.([A-Za-z0-9_-]+)\.output(?:\.([A-Za-z0-9_.-]+))?\s*\}\}/g, (_match, step, path) => {
119
+ const stepData = data.steps;
120
+ if (!isRecord(stepData))
121
+ return '';
122
+ const entry = stepData[String(step)];
123
+ if (!isRecord(entry))
124
+ return '';
125
+ const output = entry.output;
126
+ const resolved = typeof path === 'string' && path.length > 0 ? resolvePath(output, path) : output;
127
+ return projectionToText(resolved);
128
+ });
129
+ }
130
+ function validateSlackStepConfig(config) {
131
+ if (!config.name) {
132
+ throw new Error('Slack step requires a non-empty name');
133
+ }
134
+ if (!SLACK_ACTIONS.includes(config.action)) {
135
+ throw new Error(`Slack step "${config.name}" uses unsupported action "${config.action}"`);
136
+ }
137
+ if (config.action !== SlackAction.PostMessage) {
138
+ throw new Error(`Slack step "${config.name}" requires action "postMessage"`);
139
+ }
140
+ if (typeof config.text !== 'string' || config.text.length === 0) {
141
+ throw new Error(`Slack step "${config.name}" requires message text`);
142
+ }
143
+ }
144
+ function buildActionParams(config) {
145
+ return {
146
+ channel: config.channel,
147
+ text: config.text,
148
+ threadTs: config.threadTs,
149
+ mentions: config.mentions,
150
+ unfurl: config.unfurl,
151
+ };
152
+ }
153
+ function readActionParams(params) {
154
+ const serializedParams = params.params;
155
+ if (serializedParams !== undefined) {
156
+ const parsed = readJsonParam(serializedParams, 'params');
157
+ if (parsed === undefined)
158
+ return {};
159
+ if (!isRecord(parsed)) {
160
+ throw new Error('Slack step params.params must be a JSON object');
161
+ }
162
+ return parsed;
163
+ }
164
+ const actionParams = {};
165
+ for (const [key, value] of Object.entries(params)) {
166
+ if (RESERVED_PARAM_KEYS.has(key))
167
+ continue;
168
+ actionParams[key] = value;
169
+ }
170
+ return actionParams;
171
+ }
172
+ function mergeRuntimeConfig(...configs) {
173
+ const merged = {};
174
+ for (const config of configs) {
175
+ if (!config)
176
+ continue;
177
+ const { env, ...flatConfig } = config;
178
+ Object.assign(merged, flatConfig);
179
+ if (env) {
180
+ merged.env = {
181
+ ...merged.env,
182
+ ...env,
183
+ };
184
+ }
185
+ }
186
+ return merged;
187
+ }
188
+ function formatStepOutput(config, result) {
189
+ const outputConfig = config.output ?? {};
190
+ const mode = outputConfig.mode ?? 'data';
191
+ const format = outputConfig.format ?? 'json';
192
+ if (mode === 'none') {
193
+ return '';
194
+ }
195
+ let projection = buildOutputProjection(mode, result, outputConfig);
196
+ if (outputConfig.path) {
197
+ projection = resolvePath(projection, outputConfig.path);
198
+ }
199
+ if (format === 'text') {
200
+ return projectionToText(projection);
201
+ }
202
+ return JSON.stringify(projection, undefined, outputConfig.pretty ? 2 : undefined);
203
+ }
204
+ function buildOutputProjection(mode, result, outputConfig) {
205
+ if (mode === 'raw')
206
+ return result.output;
207
+ if (mode === 'summary') {
208
+ return withOptionalMetadata(summarizeResult(result), result, outputConfig);
209
+ }
210
+ if (mode === 'result') {
211
+ const projected = {
212
+ success: result.success,
213
+ output: result.output,
214
+ };
215
+ if (result.data !== undefined)
216
+ projected.data = result.data;
217
+ if (result.error !== undefined)
218
+ projected.error = result.error;
219
+ return withOptionalMetadata(projected, result, outputConfig);
220
+ }
221
+ return withOptionalMetadata(result.data ?? (result.output ? result.output : (result.error ?? null)), result, outputConfig);
222
+ }
223
+ function summarizeResult(result) {
224
+ if (!result.success) {
225
+ return {
226
+ success: false,
227
+ error: result.error ?? 'Slack action failed',
228
+ };
229
+ }
230
+ if (isRecord(result.data)) {
231
+ return {
232
+ success: true,
233
+ channel: result.data.channel,
234
+ ts: result.data.ts,
235
+ unresolvedMentions: result.data.unresolvedMentions,
236
+ };
237
+ }
238
+ return {
239
+ success: true,
240
+ value: result.data ?? result.output,
241
+ };
242
+ }
243
+ function withOptionalMetadata(value, result, outputConfig) {
244
+ if (!outputConfig.includeMetadata || result.metadata === undefined) {
245
+ return value;
246
+ }
247
+ return {
248
+ value,
249
+ metadata: result.metadata,
250
+ };
251
+ }
252
+ function projectionToText(value) {
253
+ if (typeof value === 'string')
254
+ return value;
255
+ if (value === null || value === undefined)
256
+ return '';
257
+ if (Array.isArray(value))
258
+ return value.map((entry) => projectionToText(entry)).join('\n');
259
+ if (isRecord(value)) {
260
+ if ('output' in value)
261
+ return projectionToText(value.output);
262
+ if ('value' in value)
263
+ return projectionToText(value.value);
264
+ if ('text' in value)
265
+ return projectionToText(value.text);
266
+ if ('ts' in value)
267
+ return projectionToText(value.ts);
268
+ if ('channel' in value)
269
+ return projectionToText(value.channel);
270
+ }
271
+ return JSON.stringify(value);
272
+ }
273
+ function resolvePath(value, path) {
274
+ if (!path)
275
+ return value;
276
+ let current = value;
277
+ for (const segment of path.split('.')) {
278
+ if (Array.isArray(current) && /^\d+$/.test(segment)) {
279
+ current = current[Number(segment)];
280
+ continue;
281
+ }
282
+ if (isRecord(current)) {
283
+ current = current[segment];
284
+ continue;
285
+ }
286
+ return undefined;
287
+ }
288
+ return current;
289
+ }
290
+ function normalizeResolvedParams(params) {
291
+ const normalized = {};
292
+ for (const [key, value] of Object.entries(params)) {
293
+ normalized[key] = coerceScalar(value);
294
+ }
295
+ return normalized;
296
+ }
297
+ function coerceScalar(value) {
298
+ if (typeof value !== 'string') {
299
+ return value;
300
+ }
301
+ const trimmed = value.trim();
302
+ if ((trimmed.startsWith('{') && trimmed.endsWith('}')) ||
303
+ (trimmed.startsWith('[') && trimmed.endsWith(']')) ||
304
+ (trimmed.startsWith('"') && trimmed.endsWith('"'))) {
305
+ try {
306
+ return JSON.parse(trimmed);
307
+ }
308
+ catch {
309
+ return value;
310
+ }
311
+ }
312
+ return value;
313
+ }
314
+ function readJsonParam(value, name) {
315
+ if (value === undefined)
316
+ return undefined;
317
+ if (typeof value !== 'string')
318
+ return value;
319
+ try {
320
+ return JSON.parse(value);
321
+ }
322
+ catch (error) {
323
+ throw new Error(`Slack step params.${name} must be valid JSON: ${error instanceof Error ? error.message : String(error)}`);
324
+ }
325
+ }
326
+ function readRequiredString(value, name) {
327
+ if (typeof value === 'string' && value.length > 0)
328
+ return value;
329
+ throw new Error(`Slack step requires ${name}`);
330
+ }
331
+ function readOptionalString(value) {
332
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
333
+ }
334
+ function readStringArray(value) {
335
+ if (value === undefined)
336
+ return undefined;
337
+ if (Array.isArray(value) && value.every((item) => typeof item === 'string'))
338
+ return value;
339
+ throw new Error('Slack step mentions must be a string array');
340
+ }
341
+ function readOptionalBoolean(value, name) {
342
+ if (value === undefined)
343
+ return undefined;
344
+ if (typeof value === 'boolean')
345
+ return value;
346
+ if (value === 'true')
347
+ return true;
348
+ if (value === 'false')
349
+ return false;
350
+ throw new Error(`Slack step ${name} must be a boolean`);
351
+ }
352
+ function isRecord(value) {
353
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
354
+ }
355
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/integrations/slack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { WorkflowEventListener } from './runner.js';
2
+ export interface WorkflowRenderer {
3
+ /** Pass this to `.run({ onEvent })` in your TypeScript workflow. */
4
+ onEvent: WorkflowEventListener;
5
+ /** Start the listr renderer. Run this concurrently with your workflow. */
6
+ start: () => Promise<void>;
7
+ /** Restore console.log after the workflow finishes. */
8
+ unmount: () => void;
9
+ }
10
+ /**
11
+ * Creates a listr2-based renderer for TypeScript workflows.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { workflow, createWorkflowRenderer } from '@relayflows/core';
16
+ *
17
+ * const renderer = createWorkflowRenderer();
18
+ * const [result] = await Promise.all([
19
+ * workflow('my-workflow').step(...).run({ onEvent: renderer.onEvent }),
20
+ * renderer.start(),
21
+ * ]);
22
+ * renderer.unmount();
23
+ * ```
24
+ */
25
+ export declare function createWorkflowRenderer(): WorkflowRenderer;
26
+ //# sourceMappingURL=listr-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listr-renderer.d.ts","sourceRoot":"","sources":["../src/listr-renderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAmCxE,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,OAAO,EAAE,qBAAqB,CAAC;IAC/B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,uDAAuD;IACvD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAsNzD"}
@@ -0,0 +1,230 @@
1
+ import chalk from 'chalk';
2
+ // Filter console.log while listr owns the terminal.
3
+ // Blocks [broker] noise and [workflow HH:MM] timing lines, but lets the
4
+ // observer URL and channel name through so users can track the run.
5
+ function installOutputFilter() {
6
+ const orig = console.log.bind(console);
7
+ console.log = (...args) => {
8
+ const str = String(args[0] ?? '');
9
+ // Always show the observer URL and channel so users can follow the run
10
+ if (str.includes('Observer:') || str.includes('agentrelay.com') || str.includes('Channel: wf-')) {
11
+ orig(...args);
12
+ return;
13
+ }
14
+ // Block [broker] lines and [workflow HH:MM] timing lines
15
+ if (/\[broker\]/.test(str) || /\[workflow\s+\d{2}:\d{2}\]/.test(str))
16
+ return;
17
+ orig(...args);
18
+ };
19
+ return () => {
20
+ console.log = orig;
21
+ };
22
+ }
23
+ /**
24
+ * Creates a listr2-based renderer for TypeScript workflows.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * import { workflow, createWorkflowRenderer } from '@relayflows/core';
29
+ *
30
+ * const renderer = createWorkflowRenderer();
31
+ * const [result] = await Promise.all([
32
+ * workflow('my-workflow').step(...).run({ onEvent: renderer.onEvent }),
33
+ * renderer.start(),
34
+ * ]);
35
+ * renderer.unmount();
36
+ * ```
37
+ */
38
+ export function createWorkflowRenderer() {
39
+ const stepHandles = new Map();
40
+ let resolveWorkflow;
41
+ let rejectWorkflow;
42
+ const workflowDone = new Promise((resolve, reject) => {
43
+ resolveWorkflow = resolve;
44
+ rejectWorkflow = reject;
45
+ });
46
+ // Prevent unhandled rejection if run:failed fires before the header task
47
+ // reaches `await workflowDone`.
48
+ workflowDone.catch(() => { });
49
+ let setHeader = () => { };
50
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
+ let listr = null;
52
+ const pendingAdds = [];
53
+ async function ensureListr() {
54
+ if (listr)
55
+ return listr;
56
+ const { Listr } = await import('listr2');
57
+ listr = new Listr([
58
+ {
59
+ title: chalk.dim('Workflow starting...'),
60
+ task: async (_ctx, task) => {
61
+ setHeader = (text) => {
62
+ task.title = text;
63
+ };
64
+ await workflowDone;
65
+ },
66
+ },
67
+ ], {
68
+ concurrent: true,
69
+ renderer: process.stdout.isTTY ? 'default' : 'verbose',
70
+ rendererOptions: {
71
+ collapseErrors: false,
72
+ showErrorMessage: true,
73
+ },
74
+ });
75
+ for (const task of pendingAdds)
76
+ listr.add(task);
77
+ pendingAdds.length = 0;
78
+ return listr;
79
+ }
80
+ const addTask = (task) => {
81
+ if (listr)
82
+ listr.add(task);
83
+ else
84
+ pendingAdds.push(task);
85
+ };
86
+ const onEvent = (event) => {
87
+ switch (event.type) {
88
+ case 'run:started': {
89
+ setHeader(chalk.dim(`[workflow] run ${event.runId.slice(0, 8)}...`));
90
+ break;
91
+ }
92
+ case 'step:started': {
93
+ let resolveStep;
94
+ let rejectStep;
95
+ let taskRef = null;
96
+ let skipped = false;
97
+ const done = new Promise((resolve, reject) => {
98
+ resolveStep = resolve;
99
+ rejectStep = reject;
100
+ });
101
+ // Prevent unhandled rejection if the step fails before the listr
102
+ // task function has started and reached `await done`.
103
+ done.catch(() => { });
104
+ stepHandles.set(event.stepName, {
105
+ resolve: resolveStep,
106
+ reject: rejectStep,
107
+ setOutput: (text) => {
108
+ if (taskRef)
109
+ taskRef.output = text;
110
+ },
111
+ markSkipped: () => {
112
+ skipped = true;
113
+ if (taskRef)
114
+ taskRef.title = chalk.dim(`${event.stepName} (skipped)`);
115
+ },
116
+ });
117
+ addTask({
118
+ title: chalk.white(event.stepName),
119
+ task: async (_ctx, task) => {
120
+ taskRef = task;
121
+ if (skipped)
122
+ taskRef.title = chalk.dim(`${event.stepName} (skipped)`);
123
+ await done;
124
+ },
125
+ rendererOptions: { persistentOutput: true },
126
+ });
127
+ break;
128
+ }
129
+ case 'step:owner-assigned': {
130
+ const handle = stepHandles.get(event.stepName);
131
+ if (handle) {
132
+ handle.setOutput(chalk.dim(`> Owner: ${event.ownerName}`) +
133
+ (event.specialistName ? chalk.dim(` · specialist: ${event.specialistName}`) : ''));
134
+ }
135
+ break;
136
+ }
137
+ case 'step:retrying': {
138
+ stepHandles.get(event.stepName)?.setOutput(chalk.yellow(`Retrying (attempt ${event.attempt})`));
139
+ break;
140
+ }
141
+ case 'step:nudged': {
142
+ stepHandles.get(event.stepName)?.setOutput(chalk.dim(`> Nudge #${event.nudgeCount}`));
143
+ break;
144
+ }
145
+ case 'step:force-released': {
146
+ stepHandles.get(event.stepName)?.setOutput(chalk.yellow('> Force-released'));
147
+ break;
148
+ }
149
+ case 'step:review-completed': {
150
+ stepHandles
151
+ .get(event.stepName)
152
+ ?.setOutput(chalk.dim(`> Review: ${event.decision} by ${event.reviewerName}`));
153
+ break;
154
+ }
155
+ case 'step:owner-timeout': {
156
+ stepHandles.get(event.stepName)?.setOutput(chalk.red(`> Owner ${event.ownerName} timed out`));
157
+ break;
158
+ }
159
+ case 'step:agent-report': {
160
+ const handle = stepHandles.get(event.stepName);
161
+ if (handle) {
162
+ const model = event.report.model ? `:${event.report.model}` : '';
163
+ handle.setOutput(chalk.dim(`> Report collected (${event.report.cli}${model})`));
164
+ }
165
+ break;
166
+ }
167
+ case 'step:completed': {
168
+ stepHandles.get(event.stepName)?.resolve();
169
+ break;
170
+ }
171
+ case 'step:skipped': {
172
+ const handle = stepHandles.get(event.stepName);
173
+ if (handle) {
174
+ handle.markSkipped();
175
+ handle.resolve();
176
+ }
177
+ else {
178
+ // Step was skipped without ever being started (downstream of a failure).
179
+ addTask({
180
+ title: chalk.dim(`${event.stepName} (skipped)`),
181
+ task: async () => { },
182
+ rendererOptions: { persistentOutput: true },
183
+ });
184
+ }
185
+ break;
186
+ }
187
+ case 'step:failed': {
188
+ stepHandles.get(event.stepName)?.reject(new Error(event.error ?? 'Step failed'));
189
+ break;
190
+ }
191
+ case 'run:completed': {
192
+ setHeader(chalk.green('Workflow completed'));
193
+ resolveWorkflow();
194
+ break;
195
+ }
196
+ case 'run:failed': {
197
+ setHeader(chalk.red(`Workflow failed: ${event.error ?? 'unknown error'}`));
198
+ rejectWorkflow(new Error(event.error ?? 'Workflow failed'));
199
+ break;
200
+ }
201
+ case 'run:cancelled': {
202
+ setHeader(chalk.yellow('Workflow cancelled'));
203
+ resolveWorkflow();
204
+ break;
205
+ }
206
+ case 'broker:event':
207
+ break;
208
+ default: {
209
+ const _exhaustive = event;
210
+ void _exhaustive;
211
+ }
212
+ }
213
+ };
214
+ let restoreConsole;
215
+ return {
216
+ onEvent,
217
+ start: async () => {
218
+ restoreConsole = installOutputFilter();
219
+ const l = await ensureListr();
220
+ return l.run().catch(() => {
221
+ // Step failures are already represented in the workflow result.
222
+ });
223
+ },
224
+ unmount: () => {
225
+ restoreConsole?.();
226
+ restoreConsole = undefined;
227
+ },
228
+ };
229
+ }
230
+ //# sourceMappingURL=listr-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listr-renderer.js","sourceRoot":"","sources":["../src/listr-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { WorkflowRunRow, WorkflowStepRow } from './types.js';
2
+ import type { WorkflowDb } from './runner.js';
3
+ /**
4
+ * In-memory implementation of WorkflowDb for local workflow runs.
5
+ * No persistence — state lives only for the duration of the process.
6
+ */
7
+ export declare class InMemoryWorkflowDb implements WorkflowDb {
8
+ private runs;
9
+ private steps;
10
+ insertRun(run: WorkflowRunRow): Promise<void>;
11
+ updateRun(id: string, patch: Partial<WorkflowRunRow>): Promise<void>;
12
+ getRun(id: string): Promise<WorkflowRunRow | null>;
13
+ insertStep(step: WorkflowStepRow): Promise<void>;
14
+ updateStep(id: string, patch: Partial<WorkflowStepRow>): Promise<void>;
15
+ getStepsByRunId(runId: string): Promise<WorkflowStepRow[]>;
16
+ }
17
+ //# sourceMappingURL=memory-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-db.d.ts","sourceRoot":"","sources":["../src/memory-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,IAAI,CAAqC;IACjD,OAAO,CAAC,KAAK,CAAsC;IAE7C,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAIlD,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAGjE"}