@plumbus/core 0.2.8 → 0.3.0

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 (205) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ai/__tests__/ai-service.test.js +704 -1
  3. package/dist/ai/__tests__/ai-service.test.js.map +1 -1
  4. package/dist/ai/__tests__/chunking.test.js +34 -0
  5. package/dist/ai/__tests__/chunking.test.js.map +1 -1
  6. package/dist/ai/__tests__/provider.test.d.ts.map +1 -1
  7. package/dist/ai/__tests__/provider.test.js +482 -4
  8. package/dist/ai/__tests__/provider.test.js.map +1 -1
  9. package/dist/ai/__tests__/validation.test.js +238 -1
  10. package/dist/ai/__tests__/validation.test.js.map +1 -1
  11. package/dist/ai/__tests__/zod-to-provider-schema.test.d.ts +2 -0
  12. package/dist/ai/__tests__/zod-to-provider-schema.test.d.ts.map +1 -0
  13. package/dist/ai/__tests__/zod-to-provider-schema.test.js +60 -0
  14. package/dist/ai/__tests__/zod-to-provider-schema.test.js.map +1 -0
  15. package/dist/ai/ai-service.d.ts +19 -2
  16. package/dist/ai/ai-service.d.ts.map +1 -1
  17. package/dist/ai/ai-service.js +565 -90
  18. package/dist/ai/ai-service.js.map +1 -1
  19. package/dist/ai/cost-tracker.d.ts +26 -1
  20. package/dist/ai/cost-tracker.d.ts.map +1 -1
  21. package/dist/ai/cost-tracker.js +1 -0
  22. package/dist/ai/cost-tracker.js.map +1 -1
  23. package/dist/ai/index.d.ts +5 -3
  24. package/dist/ai/index.d.ts.map +1 -1
  25. package/dist/ai/index.js +5 -1
  26. package/dist/ai/index.js.map +1 -1
  27. package/dist/ai/provider.d.ts +59 -1
  28. package/dist/ai/provider.d.ts.map +1 -1
  29. package/dist/ai/provider.js +388 -90
  30. package/dist/ai/provider.js.map +1 -1
  31. package/dist/ai/rag/chunking.js +53 -3
  32. package/dist/ai/rag/chunking.js.map +1 -1
  33. package/dist/ai/refusal.d.ts +28 -0
  34. package/dist/ai/refusal.d.ts.map +1 -0
  35. package/dist/ai/refusal.js +36 -0
  36. package/dist/ai/refusal.js.map +1 -0
  37. package/dist/ai/validation.d.ts +40 -8
  38. package/dist/ai/validation.d.ts.map +1 -1
  39. package/dist/ai/validation.js +212 -6
  40. package/dist/ai/validation.js.map +1 -1
  41. package/dist/ai/zod-to-provider-schema.d.ts +15 -0
  42. package/dist/ai/zod-to-provider-schema.d.ts.map +1 -0
  43. package/dist/ai/zod-to-provider-schema.js +200 -0
  44. package/dist/ai/zod-to-provider-schema.js.map +1 -0
  45. package/dist/api/__tests__/route-generator.test.js +3 -0
  46. package/dist/api/__tests__/route-generator.test.js.map +1 -1
  47. package/dist/api/route-generator.d.ts +4 -0
  48. package/dist/api/route-generator.d.ts.map +1 -1
  49. package/dist/api/route-generator.js +1 -0
  50. package/dist/api/route-generator.js.map +1 -1
  51. package/dist/cli/__tests__/doctor.test.js +104 -2
  52. package/dist/cli/__tests__/doctor.test.js.map +1 -1
  53. package/dist/cli/__tests__/init.test.js +127 -7
  54. package/dist/cli/__tests__/init.test.js.map +1 -1
  55. package/dist/cli/__tests__/migrate.test.js +159 -2
  56. package/dist/cli/__tests__/migrate.test.js.map +1 -1
  57. package/dist/cli/commands/__tests__/commands.test.js +5 -0
  58. package/dist/cli/commands/__tests__/commands.test.js.map +1 -1
  59. package/dist/cli/commands/dev.d.ts.map +1 -1
  60. package/dist/cli/commands/dev.js +22 -1
  61. package/dist/cli/commands/dev.js.map +1 -1
  62. package/dist/cli/commands/doctor.d.ts +2 -0
  63. package/dist/cli/commands/doctor.d.ts.map +1 -1
  64. package/dist/cli/commands/doctor.js +78 -0
  65. package/dist/cli/commands/doctor.js.map +1 -1
  66. package/dist/cli/commands/generate.d.ts.map +1 -1
  67. package/dist/cli/commands/generate.js +8 -3
  68. package/dist/cli/commands/generate.js.map +1 -1
  69. package/dist/cli/commands/init.d.ts +16 -2
  70. package/dist/cli/commands/init.d.ts.map +1 -1
  71. package/dist/cli/commands/init.js +226 -25
  72. package/dist/cli/commands/init.js.map +1 -1
  73. package/dist/cli/commands/migrate.d.ts.map +1 -1
  74. package/dist/cli/commands/migrate.js +258 -8
  75. package/dist/cli/commands/migrate.js.map +1 -1
  76. package/dist/cli/commands/start.d.ts.map +1 -1
  77. package/dist/cli/commands/start.js +22 -1
  78. package/dist/cli/commands/start.js.map +1 -1
  79. package/dist/config/loader.d.ts.map +1 -1
  80. package/dist/config/loader.js +3 -0
  81. package/dist/config/loader.js.map +1 -1
  82. package/dist/data/__tests__/drift-inspector.test.d.ts +2 -0
  83. package/dist/data/__tests__/drift-inspector.test.d.ts.map +1 -0
  84. package/dist/data/__tests__/drift-inspector.test.js +170 -0
  85. package/dist/data/__tests__/drift-inspector.test.js.map +1 -0
  86. package/dist/data/__tests__/framework-migration-rewriter.test.d.ts +2 -0
  87. package/dist/data/__tests__/framework-migration-rewriter.test.d.ts.map +1 -0
  88. package/dist/data/__tests__/framework-migration-rewriter.test.js +329 -0
  89. package/dist/data/__tests__/framework-migration-rewriter.test.js.map +1 -0
  90. package/dist/data/__tests__/migration.test.d.ts +2 -0
  91. package/dist/data/__tests__/migration.test.d.ts.map +1 -0
  92. package/dist/data/__tests__/migration.test.js +143 -0
  93. package/dist/data/__tests__/migration.test.js.map +1 -0
  94. package/dist/data/__tests__/repository.test.js +126 -0
  95. package/dist/data/__tests__/repository.test.js.map +1 -1
  96. package/dist/data/drift-inspector.d.ts +41 -0
  97. package/dist/data/drift-inspector.d.ts.map +1 -0
  98. package/dist/data/drift-inspector.js +197 -0
  99. package/dist/data/drift-inspector.js.map +1 -0
  100. package/dist/data/framework-migration-rewriter.d.ts +61 -0
  101. package/dist/data/framework-migration-rewriter.d.ts.map +1 -0
  102. package/dist/data/framework-migration-rewriter.js +357 -0
  103. package/dist/data/framework-migration-rewriter.js.map +1 -0
  104. package/dist/data/index.d.ts +2 -1
  105. package/dist/data/index.d.ts.map +1 -1
  106. package/dist/data/index.js +2 -1
  107. package/dist/data/index.js.map +1 -1
  108. package/dist/data/migration.d.ts +31 -1
  109. package/dist/data/migration.d.ts.map +1 -1
  110. package/dist/data/migration.js +127 -3
  111. package/dist/data/migration.js.map +1 -1
  112. package/dist/data/repository.d.ts.map +1 -1
  113. package/dist/data/repository.js +21 -0
  114. package/dist/data/repository.js.map +1 -1
  115. package/dist/define/__tests__/definePrompt.test.js +37 -0
  116. package/dist/define/__tests__/definePrompt.test.js.map +1 -1
  117. package/dist/define/definePrompt.d.ts +13 -0
  118. package/dist/define/definePrompt.d.ts.map +1 -1
  119. package/dist/define/definePrompt.js +3 -0
  120. package/dist/define/definePrompt.js.map +1 -1
  121. package/dist/errors/__tests__/http.test.js +3 -0
  122. package/dist/errors/__tests__/http.test.js.map +1 -1
  123. package/dist/errors/http.d.ts.map +1 -1
  124. package/dist/errors/http.js +14 -0
  125. package/dist/errors/http.js.map +1 -1
  126. package/dist/errors/index.d.ts +12 -0
  127. package/dist/errors/index.d.ts.map +1 -1
  128. package/dist/errors/index.js +21 -0
  129. package/dist/errors/index.js.map +1 -1
  130. package/dist/events/__tests__/event-emitter.test.js +72 -0
  131. package/dist/events/__tests__/event-emitter.test.js.map +1 -1
  132. package/dist/events/emitter.d.ts.map +1 -1
  133. package/dist/events/emitter.js +51 -0
  134. package/dist/events/emitter.js.map +1 -1
  135. package/dist/execution/__tests__/capability-executor.test.js +28 -0
  136. package/dist/execution/__tests__/capability-executor.test.js.map +1 -1
  137. package/dist/execution/__tests__/context-factory.test.js +1 -0
  138. package/dist/execution/__tests__/context-factory.test.js.map +1 -1
  139. package/dist/execution/capability-executor.d.ts.map +1 -1
  140. package/dist/execution/capability-executor.js +21 -0
  141. package/dist/execution/capability-executor.js.map +1 -1
  142. package/dist/execution/context-factory.d.ts.map +1 -1
  143. package/dist/execution/context-factory.js +2 -0
  144. package/dist/execution/context-factory.js.map +1 -1
  145. package/dist/flows/__tests__/flow-engine.test.js +535 -3
  146. package/dist/flows/__tests__/flow-engine.test.js.map +1 -1
  147. package/dist/flows/__tests__/flow-service.test.js +8 -0
  148. package/dist/flows/__tests__/flow-service.test.js.map +1 -1
  149. package/dist/flows/__tests__/step-executor.test.js +14 -4
  150. package/dist/flows/__tests__/step-executor.test.js.map +1 -1
  151. package/dist/flows/engine.d.ts +53 -1
  152. package/dist/flows/engine.d.ts.map +1 -1
  153. package/dist/flows/engine.js +462 -25
  154. package/dist/flows/engine.js.map +1 -1
  155. package/dist/flows/flow-service.d.ts.map +1 -1
  156. package/dist/flows/flow-service.js +4 -0
  157. package/dist/flows/flow-service.js.map +1 -1
  158. package/dist/flows/index.d.ts +1 -1
  159. package/dist/flows/index.d.ts.map +1 -1
  160. package/dist/flows/index.js +1 -1
  161. package/dist/flows/index.js.map +1 -1
  162. package/dist/flows/schema.d.ts +34 -0
  163. package/dist/flows/schema.d.ts.map +1 -1
  164. package/dist/flows/schema.js +3 -0
  165. package/dist/flows/schema.js.map +1 -1
  166. package/dist/flows/step-executor.d.ts +2 -0
  167. package/dist/flows/step-executor.d.ts.map +1 -1
  168. package/dist/flows/step-executor.js +6 -6
  169. package/dist/flows/step-executor.js.map +1 -1
  170. package/dist/index.d.ts +4 -4
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +3 -3
  173. package/dist/index.js.map +1 -1
  174. package/dist/server/__tests__/bootstrap.test.js +37 -0
  175. package/dist/server/__tests__/bootstrap.test.js.map +1 -1
  176. package/dist/server/bootstrap.d.ts +19 -0
  177. package/dist/server/bootstrap.d.ts.map +1 -1
  178. package/dist/server/bootstrap.js +48 -4
  179. package/dist/server/bootstrap.js.map +1 -1
  180. package/dist/testing/__tests__/simulate-flow.test.js +24 -2
  181. package/dist/testing/__tests__/simulate-flow.test.js.map +1 -1
  182. package/dist/testing/context.d.ts.map +1 -1
  183. package/dist/testing/context.js +37 -1
  184. package/dist/testing/context.js.map +1 -1
  185. package/dist/testing/simulate-flow.d.ts.map +1 -1
  186. package/dist/testing/simulate-flow.js +25 -1
  187. package/dist/testing/simulate-flow.js.map +1 -1
  188. package/dist/types/context.d.ts +118 -0
  189. package/dist/types/context.d.ts.map +1 -1
  190. package/dist/types/enums.d.ts +2 -0
  191. package/dist/types/enums.d.ts.map +1 -1
  192. package/dist/types/enums.js +2 -0
  193. package/dist/types/enums.js.map +1 -1
  194. package/dist/types/prompt.d.ts +64 -0
  195. package/dist/types/prompt.d.ts.map +1 -1
  196. package/dist/worker/__tests__/bootstrap.test.js +36 -2
  197. package/dist/worker/__tests__/bootstrap.test.js.map +1 -1
  198. package/dist/worker/bootstrap.d.ts +7 -0
  199. package/dist/worker/bootstrap.d.ts.map +1 -1
  200. package/dist/worker/bootstrap.js +164 -14
  201. package/dist/worker/bootstrap.js.map +1 -1
  202. package/instructions/framework.md +7 -0
  203. package/instructions/guardrails.md +39 -0
  204. package/instructions/patterns.md +10 -0
  205. package/package.json +3 -2
@@ -1,6 +1,7 @@
1
1
  import { describe, expect, it, vi } from 'vitest';
2
2
  import { z } from 'zod';
3
3
  import { defineFlow } from '../../define/defineFlow.js';
4
+ import { LeaseLostError } from '../../errors/index.js';
4
5
  import { FlowStepType } from '../../types/enums.js';
5
6
  import { createFlowEngine } from '../engine.js';
6
7
  import { FlowRegistry } from '../registry.js';
@@ -12,10 +13,17 @@ import { FlowStatus } from '../state-machine.js';
12
13
  function mockDb(rows = new Map()) {
13
14
  const inserts = [];
14
15
  const updates = [];
16
+ // Mutable state lets individual tests drive behavior: execute() return value and
17
+ // guardedUpdate rowCount (0 simulates a lost lease).
18
+ const state = {
19
+ executeResult: [],
20
+ updateRowCount: 1,
21
+ };
15
22
  return {
16
23
  _inserts: inserts,
17
24
  _updates: updates,
18
25
  _rows: rows,
26
+ _state: state,
19
27
  insert: vi.fn().mockReturnValue({
20
28
  values: vi.fn().mockImplementation((row) => {
21
29
  inserts.push(row);
@@ -43,16 +51,16 @@ function mockDb(rows = new Map()) {
43
51
  set: vi.fn().mockImplementation((values) => ({
44
52
  where: vi.fn().mockImplementation(() => {
45
53
  updates.push(values);
46
- // Apply update to last row
47
54
  const allRows = Array.from(rows.values());
48
- if (allRows.length > 0) {
55
+ if (allRows.length > 0 && state.updateRowCount > 0) {
49
56
  const last = allRows[allRows.length - 1];
50
57
  Object.assign(last, values);
51
58
  }
52
- return Promise.resolve();
59
+ return Promise.resolve({ rowCount: state.updateRowCount });
53
60
  }),
54
61
  })),
55
62
  }),
63
+ execute: vi.fn().mockImplementation(() => Promise.resolve(state.executeResult)),
56
64
  };
57
65
  }
58
66
  function makeTestFlow() {
@@ -76,6 +84,36 @@ function makeAuth() {
76
84
  provider: 'test',
77
85
  };
78
86
  }
87
+ function makeCtx(overrides) {
88
+ return {
89
+ auth: makeAuth(),
90
+ data: {},
91
+ events: {
92
+ emit: vi.fn().mockResolvedValue(undefined),
93
+ emitMany: vi.fn().mockResolvedValue(undefined),
94
+ },
95
+ flows: {
96
+ start: vi.fn(),
97
+ resume: vi.fn(),
98
+ cancel: vi.fn(),
99
+ status: vi.fn(),
100
+ },
101
+ ai: {},
102
+ audit: { record: vi.fn() },
103
+ errors: {},
104
+ logger: {
105
+ debug: vi.fn(),
106
+ info: vi.fn(),
107
+ warn: vi.fn(),
108
+ error: vi.fn(),
109
+ },
110
+ time: { now: () => new Date() },
111
+ config: {},
112
+ security: {},
113
+ translations: { locale: 'en', t: (key) => key },
114
+ ...overrides,
115
+ };
116
+ }
79
117
  function makeStepDeps(succeeds = true) {
80
118
  return {
81
119
  executeCapability: vi
@@ -185,5 +223,499 @@ describe('FlowEngine', () => {
185
223
  expect(auditRecords).toHaveLength(1);
186
224
  expect(auditRecords[0].action).toBe('flow.started.order-processing');
187
225
  });
226
+ it('merges capability output into persisted state between steps', async () => {
227
+ const registry = new FlowRegistry();
228
+ registry.register(defineFlow({
229
+ name: 'stateful-flow',
230
+ domain: 'orders',
231
+ input: z.object({ orderId: z.string() }),
232
+ state: z.object({ manuscriptId: z.string().default('') }),
233
+ steps: [
234
+ { name: 'plan', type: FlowStepType.Capability },
235
+ { name: 'write', type: FlowStepType.Capability },
236
+ ],
237
+ }));
238
+ const db = mockDb();
239
+ const stepDeps = {
240
+ executeCapability: vi
241
+ .fn()
242
+ .mockResolvedValueOnce({ success: true, data: { manuscriptId: 'm-1' } })
243
+ .mockResolvedValueOnce({ success: true, data: {} }),
244
+ evaluateCondition: vi.fn().mockReturnValue(true),
245
+ };
246
+ const engine = createFlowEngine({ db, registry, stepDeps });
247
+ const exec = await engine.start('stateful-flow', { orderId: 'abc' }, makeAuth());
248
+ const row = db._rows.get(exec.id);
249
+ db.select = vi.fn().mockReturnValue({
250
+ from: vi.fn().mockReturnValue({
251
+ where: vi.fn().mockReturnValue({
252
+ limit: vi.fn().mockResolvedValue([row]),
253
+ }),
254
+ }),
255
+ });
256
+ await engine.runNext(exec.id, makeCtx());
257
+ expect(row.state).toMatchObject({ manuscriptId: 'm-1' });
258
+ expect(row.currentStep).toBe('write');
259
+ });
260
+ it('passes the live DB connection to onFlowError hooks', async () => {
261
+ const registry = new FlowRegistry();
262
+ registry.register(makeTestFlow());
263
+ const db = mockDb();
264
+ const onFlowError = vi.fn();
265
+ const engine = createFlowEngine({ db, registry, stepDeps: makeStepDeps(false), onFlowError });
266
+ const exec = await engine.start('order-processing', { orderId: 'abc' }, makeAuth());
267
+ const row = db._rows.get(exec.id);
268
+ db.select = vi.fn().mockReturnValue({
269
+ from: vi.fn().mockReturnValue({
270
+ where: vi.fn().mockReturnValue({
271
+ limit: vi.fn().mockResolvedValue([row]),
272
+ }),
273
+ }),
274
+ });
275
+ await engine.runNext(exec.id, makeCtx());
276
+ expect(onFlowError).toHaveBeenCalledWith(expect.objectContaining({
277
+ db,
278
+ executionId: exec.id,
279
+ flowName: 'order-processing',
280
+ step: 'validate',
281
+ error: 'step failed',
282
+ }));
283
+ });
284
+ });
285
+ describe('FlowEngine — lease claiming', () => {
286
+ it('only one worker claims a row under a SKIP LOCKED race', async () => {
287
+ const registry = new FlowRegistry();
288
+ registry.register(makeTestFlow());
289
+ const claimedRow = {
290
+ id: 'race-1',
291
+ flowName: 'order-processing',
292
+ status: FlowStatus.Running,
293
+ currentStep: 'validate',
294
+ leaseOwner: null,
295
+ };
296
+ const dbA = mockDb();
297
+ dbA._state.executeResult = [claimedRow];
298
+ const dbB = mockDb();
299
+ dbB._state.executeResult = [];
300
+ const engineA = createFlowEngine({
301
+ db: dbA,
302
+ registry,
303
+ stepDeps: makeStepDeps(),
304
+ workerId: 'worker-a',
305
+ });
306
+ const engineB = createFlowEngine({
307
+ db: dbB,
308
+ registry,
309
+ stepDeps: makeStepDeps(),
310
+ workerId: 'worker-b',
311
+ });
312
+ const [claimedA, claimedB] = await Promise.all([engineA.claimNext(), engineB.claimNext()]);
313
+ expect(claimedA).toHaveLength(1);
314
+ expect(claimedA[0]?.id).toBe('race-1');
315
+ expect(claimedB).toHaveLength(0);
316
+ });
317
+ it("reclaims a crashed worker's expired lease and audits the reclaim", async () => {
318
+ const registry = new FlowRegistry();
319
+ registry.register(makeTestFlow());
320
+ const db = mockDb();
321
+ db._state.executeResult = [
322
+ {
323
+ id: 'exec-crash',
324
+ flowName: 'order-processing',
325
+ status: FlowStatus.Running,
326
+ currentStep: 'validate',
327
+ leaseOwner: 'crashed-worker',
328
+ leaseExpiresAt: new Date(Date.now() - 60_000),
329
+ },
330
+ ];
331
+ const audits = [];
332
+ const audit = {
333
+ record: vi.fn().mockImplementation(async (action, meta) => {
334
+ audits.push({ action, ...meta });
335
+ }),
336
+ };
337
+ const engine = createFlowEngine({
338
+ db,
339
+ registry,
340
+ stepDeps: makeStepDeps(),
341
+ workerId: 'worker-fresh',
342
+ audit,
343
+ });
344
+ const claimed = await engine.claimNext();
345
+ expect(claimed).toHaveLength(1);
346
+ expect(claimed[0]?.id).toBe('exec-crash');
347
+ const expired = audits.find((a) => a.action === 'flow.lease.expired');
348
+ expect(expired).toBeDefined();
349
+ expect(expired.previousOwner).toBe('crashed-worker');
350
+ expect(expired.workerId).toBe('worker-fresh');
351
+ expect(audits.some((a) => a.action === 'flow.lease.claimed')).toBe(true);
352
+ });
353
+ it('throws LeaseLostError when heartbeat detects the lease was stolen mid-step', async () => {
354
+ const registry = new FlowRegistry();
355
+ registry.register(makeTestFlow());
356
+ const db = mockDb();
357
+ db._state.updateRowCount = 0; // every update says "0 rows affected" → heartbeat loses lease
358
+ const stepDeps = {
359
+ executeCapability: vi.fn().mockImplementation(async () => {
360
+ // Give the heartbeat interval at least one tick to fire during the step
361
+ await new Promise((r) => setTimeout(r, 40));
362
+ return { success: true, data: {} };
363
+ }),
364
+ evaluateCondition: vi.fn().mockReturnValue(true),
365
+ };
366
+ const engine = createFlowEngine({
367
+ db,
368
+ registry,
369
+ stepDeps,
370
+ workerId: 'worker-x',
371
+ flowHeartbeatIntervalMs: 5,
372
+ flowLeaseDurationMs: 60_000,
373
+ });
374
+ const exec = await engine.start('order-processing', { orderId: 'abc' }, makeAuth());
375
+ await expect(engine.runNext(exec.id, makeCtx())).rejects.toBeInstanceOf(LeaseLostError);
376
+ });
377
+ it('skips completion audit when guardedUpdate reports the lease was lost', async () => {
378
+ const registry = new FlowRegistry();
379
+ registry.register(defineFlow({
380
+ name: 'single-step',
381
+ domain: 'test',
382
+ input: z.object({}),
383
+ steps: [{ name: 'only', type: FlowStepType.Capability }],
384
+ }));
385
+ const db = mockDb();
386
+ db._state.updateRowCount = 0; // all guardedUpdates return false → completeFlow aborts before audit
387
+ const audits = [];
388
+ const audit = {
389
+ record: vi.fn().mockImplementation(async (action, meta) => {
390
+ audits.push({ action, ...meta });
391
+ }),
392
+ };
393
+ const engine = createFlowEngine({
394
+ db,
395
+ registry,
396
+ stepDeps: makeStepDeps(),
397
+ workerId: 'worker-x',
398
+ audit,
399
+ flowHeartbeatIntervalMs: 60_000, // keep the heartbeat timer idle during the fast test
400
+ });
401
+ const exec = await engine.start('single-step', {}, makeAuth());
402
+ await engine.runNext(exec.id, makeCtx());
403
+ expect(audits.some((a) => a.action === 'flow.completed.single-step')).toBe(false);
404
+ });
405
+ it('20 executions across 4 engines — each claimed exactly once', async () => {
406
+ const registry = new FlowRegistry();
407
+ registry.register(makeTestFlow());
408
+ const available = new Set(Array.from({ length: 20 }, (_, i) => `exec-${i}`));
409
+ const engines = ['w1', 'w2', 'w3', 'w4'].map((workerId) => {
410
+ const db = mockDb();
411
+ // Simulate FOR UPDATE SKIP LOCKED: each execute call atomically takes up to 5 rows
412
+ // from the shared `available` set (synchronous mutation — JS single-threaded).
413
+ db.execute = vi.fn().mockImplementation(async () => {
414
+ const taken = [];
415
+ for (const id of Array.from(available)) {
416
+ if (taken.length >= 5)
417
+ break;
418
+ available.delete(id);
419
+ taken.push({
420
+ id,
421
+ flowName: 'order-processing',
422
+ status: FlowStatus.Running,
423
+ currentStep: 'validate',
424
+ leaseOwner: workerId,
425
+ });
426
+ }
427
+ return taken;
428
+ });
429
+ return createFlowEngine({
430
+ db,
431
+ registry,
432
+ stepDeps: makeStepDeps(),
433
+ workerId,
434
+ });
435
+ });
436
+ const results = await Promise.all(engines.map((e) => e.claimNext(5)));
437
+ const claimedIds = results.flatMap((batch) => batch.map((row) => row.id));
438
+ expect(claimedIds).toHaveLength(20);
439
+ expect(new Set(claimedIds).size).toBe(20); // every ID is unique
440
+ expect(available.size).toBe(0);
441
+ });
442
+ it('ctx.flows.heartbeat() extends the lease and throws LeaseLostError when lost', async () => {
443
+ const registry = new FlowRegistry();
444
+ registry.register(makeTestFlow());
445
+ const db = mockDb();
446
+ db._state.updateRowCount = 1;
447
+ let firstHeartbeatOk = false;
448
+ let heartbeatError;
449
+ const stepDeps = {
450
+ executeCapability: vi.fn().mockImplementation(async (_name, stepCtx) => {
451
+ await stepCtx.flows.heartbeat();
452
+ firstHeartbeatOk = true;
453
+ db._state.updateRowCount = 0; // simulate another worker stealing the lease
454
+ try {
455
+ await stepCtx.flows.heartbeat();
456
+ }
457
+ catch (err) {
458
+ heartbeatError = err;
459
+ }
460
+ return { success: true, data: {} };
461
+ }),
462
+ evaluateCondition: vi.fn().mockReturnValue(true),
463
+ };
464
+ const engine = createFlowEngine({
465
+ db,
466
+ registry,
467
+ stepDeps,
468
+ workerId: 'worker-x',
469
+ flowHeartbeatIntervalMs: 60_000, // disable auto-heartbeat; manual heartbeat only
470
+ });
471
+ const exec = await engine.start('order-processing', { orderId: 'abc' }, makeAuth());
472
+ await engine.runNext(exec.id, makeCtx());
473
+ expect(firstHeartbeatOk).toBe(true);
474
+ expect(heartbeatError).toBeInstanceOf(LeaseLostError);
475
+ });
476
+ });
477
+ describe('FlowEngine — cooperative cancellation (ctx.signal)', () => {
478
+ it('exposes an un-aborted ctx.signal to step handlers', async () => {
479
+ const registry = new FlowRegistry();
480
+ registry.register(makeTestFlow());
481
+ const db = mockDb();
482
+ let capturedSignal;
483
+ const stepDeps = {
484
+ executeCapability: vi.fn().mockImplementation(async (_name, stepCtx) => {
485
+ capturedSignal = stepCtx.signal;
486
+ return { success: true, data: {} };
487
+ }),
488
+ evaluateCondition: vi.fn().mockReturnValue(true),
489
+ };
490
+ const engine = createFlowEngine({
491
+ db,
492
+ registry,
493
+ stepDeps,
494
+ workerId: 'worker-sig-1',
495
+ flowHeartbeatIntervalMs: 60_000,
496
+ });
497
+ const exec = await engine.start('order-processing', { orderId: 'abc' }, makeAuth());
498
+ await engine.runNext(exec.id, makeCtx());
499
+ expect(capturedSignal).toBeInstanceOf(AbortSignal);
500
+ // Step completed normally; signal.aborted before return should be false.
501
+ // (After runNext finishes the finally-block aborts it to wake detached tasks,
502
+ // but the assertion is about the state the handler observed during execution.)
503
+ });
504
+ it('cancel() aborts ctx.signal for the in-flight step in the same process', async () => {
505
+ const registry = new FlowRegistry();
506
+ registry.register(makeTestFlow());
507
+ const db = mockDb();
508
+ db._state.updateRowCount = 1;
509
+ let stepSignalAborted = false;
510
+ let stepSignalReason;
511
+ const stepDeps = {
512
+ executeCapability: vi.fn().mockImplementation(async (_name, stepCtx) => {
513
+ // Wait for the signal to abort — simulates a long-running AI call.
514
+ await new Promise((resolve) => {
515
+ if (stepCtx.signal.aborted) {
516
+ stepSignalAborted = true;
517
+ stepSignalReason = stepCtx.signal.reason;
518
+ resolve();
519
+ return;
520
+ }
521
+ stepCtx.signal.addEventListener('abort', () => {
522
+ stepSignalAborted = true;
523
+ stepSignalReason = stepCtx.signal.reason;
524
+ resolve();
525
+ }, { once: true });
526
+ });
527
+ return { success: true, data: {} };
528
+ }),
529
+ evaluateCondition: vi.fn().mockReturnValue(true),
530
+ };
531
+ const engine = createFlowEngine({
532
+ db,
533
+ registry,
534
+ stepDeps,
535
+ workerId: 'worker-cancel-1',
536
+ flowHeartbeatIntervalMs: 60_000,
537
+ });
538
+ const exec = await engine.start('order-processing', { orderId: 'x' }, makeAuth());
539
+ // Kick off runNext, then cancel while the step is mid-flight.
540
+ const running = engine.runNext(exec.id, makeCtx());
541
+ await new Promise((r) => setTimeout(r, 20));
542
+ await engine.cancel(exec.id);
543
+ await running;
544
+ expect(stepSignalAborted).toBe(true);
545
+ // reason is a FlowCancelledError
546
+ expect(stepSignalReason?.name).toBe('FlowCancelledError');
547
+ });
548
+ it('heartbeat-driven lease loss aborts ctx.signal with LeaseLostError', async () => {
549
+ const registry = new FlowRegistry();
550
+ registry.register(makeTestFlow());
551
+ const db = mockDb();
552
+ db._state.updateRowCount = 0; // every lease-extend reports 0 rows affected
553
+ let abortReason;
554
+ const stepDeps = {
555
+ executeCapability: vi.fn().mockImplementation(async (_name, stepCtx) => {
556
+ await new Promise((resolve) => {
557
+ stepCtx.signal.addEventListener('abort', () => {
558
+ abortReason = stepCtx.signal.reason;
559
+ resolve();
560
+ }, { once: true });
561
+ });
562
+ return { success: true, data: {} };
563
+ }),
564
+ evaluateCondition: vi.fn().mockReturnValue(true),
565
+ };
566
+ const engine = createFlowEngine({
567
+ db,
568
+ registry,
569
+ stepDeps,
570
+ workerId: 'worker-lease-1',
571
+ flowHeartbeatIntervalMs: 5,
572
+ flowLeaseDurationMs: 60_000,
573
+ });
574
+ const exec = await engine.start('order-processing', { orderId: 'x' }, makeAuth());
575
+ await expect(engine.runNext(exec.id, makeCtx())).rejects.toBeInstanceOf(LeaseLostError);
576
+ expect(abortReason?.name).toBe('LeaseLostError');
577
+ });
578
+ it('threads ctx.signal into ctx.ai.generate by default', async () => {
579
+ const registry = new FlowRegistry();
580
+ registry.register(makeTestFlow());
581
+ const db = mockDb();
582
+ const generate = vi.fn().mockResolvedValue({ ok: true });
583
+ const ctxWithAi = makeCtx({
584
+ ai: {
585
+ generate,
586
+ generateWithUsage: vi.fn(),
587
+ streamGenerate: vi.fn(),
588
+ extract: vi.fn(),
589
+ classify: vi.fn(),
590
+ retrieve: vi.fn(),
591
+ },
592
+ });
593
+ const stepDeps = {
594
+ executeCapability: vi.fn().mockImplementation(async (_name, stepCtx) => {
595
+ // Capability does NOT pass a signal — engine must default to ctx.signal.
596
+ await stepCtx.ai.generate({ prompt: 'p', input: {} });
597
+ return { success: true, data: {} };
598
+ }),
599
+ evaluateCondition: vi.fn().mockReturnValue(true),
600
+ };
601
+ const engine = createFlowEngine({
602
+ db,
603
+ registry,
604
+ stepDeps,
605
+ workerId: 'worker-ai-1',
606
+ flowHeartbeatIntervalMs: 60_000,
607
+ });
608
+ const exec = await engine.start('order-processing', { orderId: 'x' }, makeAuth());
609
+ await engine.runNext(exec.id, ctxWithAi);
610
+ expect(generate).toHaveBeenCalledTimes(1);
611
+ const firstCall = generate.mock.calls[0];
612
+ expect(firstCall).toBeDefined();
613
+ const calledWith = firstCall?.[0];
614
+ expect(calledWith.signal).toBeInstanceOf(AbortSignal);
615
+ });
616
+ describe('markFailedFromRunner (zombie recovery)', () => {
617
+ it('finalizes the row as failed with lease cleared after LeaseLostError from runNext', async () => {
618
+ const registry = new FlowRegistry();
619
+ registry.register(makeTestFlow());
620
+ const db = mockDb();
621
+ db._state.updateRowCount = 0; // every update says 0 rows → heartbeat loses lease
622
+ const stepDeps = {
623
+ executeCapability: vi.fn().mockImplementation(async () => {
624
+ await new Promise((r) => setTimeout(r, 40));
625
+ return { success: true, data: {} };
626
+ }),
627
+ evaluateCondition: vi.fn().mockReturnValue(true),
628
+ };
629
+ const engine = createFlowEngine({
630
+ db,
631
+ registry,
632
+ stepDeps,
633
+ workerId: 'worker-recover-1',
634
+ flowHeartbeatIntervalMs: 5,
635
+ flowLeaseDurationMs: 60_000,
636
+ });
637
+ const exec = await engine.start('order-processing', { orderId: 'abc' }, makeAuth());
638
+ let caught;
639
+ try {
640
+ await engine.runNext(exec.id, makeCtx());
641
+ }
642
+ catch (err) {
643
+ caught = err;
644
+ }
645
+ expect(caught).toBeInstanceOf(LeaseLostError);
646
+ // Now simulate the bootstrap runner finalizing. Flip the mock back to
647
+ // "updates succeed" so the finalizer's UPDATE reports 1 row affected.
648
+ db._updates.length = 0;
649
+ db._state.updateRowCount = 1;
650
+ const finalized = await engine.markFailedFromRunner(exec.id, caught);
651
+ expect(finalized).toBe(true);
652
+ const finalize = db._updates.at(-1);
653
+ expect(finalize).toMatchObject({
654
+ status: FlowStatus.Failed,
655
+ leaseOwner: null,
656
+ leaseExpiresAt: null,
657
+ });
658
+ expect(finalize.lastError).toMatch(/Lease lost/);
659
+ expect(finalize.completedAt).toBeInstanceOf(Date);
660
+ });
661
+ it('is a no-op when the row is already in a terminal state', async () => {
662
+ const registry = new FlowRegistry();
663
+ registry.register(makeTestFlow());
664
+ const db = mockDb();
665
+ const engine = createFlowEngine({
666
+ db,
667
+ registry,
668
+ stepDeps: makeStepDeps(),
669
+ workerId: 'worker-recover-2',
670
+ });
671
+ const exec = await engine.start('order-processing', { orderId: 'x' }, makeAuth());
672
+ // Simulate "row already finalized" — UPDATE with status-set guard matches 0 rows.
673
+ db._state.updateRowCount = 0;
674
+ db._updates.length = 0;
675
+ const finalized = await engine.markFailedFromRunner(exec.id, new Error('stale'));
676
+ expect(finalized).toBe(false);
677
+ // The finalizer did attempt the UPDATE, but the status guard is what
678
+ // makes it a no-op against terminal rows — we only assert the return
679
+ // value here since the mock filters by updateRowCount, not SQL.
680
+ });
681
+ it('does not emit flow.runner.finalized audit when the row was already terminal', async () => {
682
+ const registry = new FlowRegistry();
683
+ registry.register(makeTestFlow());
684
+ const db = mockDb();
685
+ const audits = [];
686
+ const audit = {
687
+ record: vi.fn().mockImplementation(async (action) => {
688
+ audits.push({ action });
689
+ }),
690
+ };
691
+ const engine = createFlowEngine({
692
+ db,
693
+ registry,
694
+ stepDeps: makeStepDeps(),
695
+ workerId: 'worker-recover-3',
696
+ audit,
697
+ });
698
+ const exec = await engine.start('order-processing', { orderId: 'x' }, makeAuth());
699
+ db._state.updateRowCount = 0;
700
+ await engine.markFailedFromRunner(exec.id, new Error('stale'));
701
+ expect(audits.some((a) => a.action === 'flow.runner.finalized')).toBe(false);
702
+ });
703
+ it('uses "Unknown error" when the thrown value is neither Error nor string', async () => {
704
+ const registry = new FlowRegistry();
705
+ registry.register(makeTestFlow());
706
+ const db = mockDb();
707
+ const engine = createFlowEngine({
708
+ db,
709
+ registry,
710
+ stepDeps: makeStepDeps(),
711
+ workerId: 'worker-recover-4',
712
+ });
713
+ const exec = await engine.start('order-processing', { orderId: 'x' }, makeAuth());
714
+ db._updates.length = 0;
715
+ await engine.markFailedFromRunner(exec.id, { weird: true });
716
+ const finalize = db._updates.at(-1);
717
+ expect(finalize.lastError).toBe('Unknown error');
718
+ });
719
+ });
188
720
  });
189
721
  //# sourceMappingURL=flow-engine.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flow-engine.test.js","sourceRoot":"","sources":["../../../src/flows/__tests__/flow-engine.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow-engine.test.js","sourceRoot":"","sources":["../../../src/flows/__tests__/flow-engine.test.ts"],"names":[],"mappings":"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"}