@plumbus/core 0.2.9 → 0.3.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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/ai/__tests__/ai-service.test.js +704 -1
- package/dist/ai/__tests__/ai-service.test.js.map +1 -1
- package/dist/ai/__tests__/chunking.test.js +34 -0
- package/dist/ai/__tests__/chunking.test.js.map +1 -1
- package/dist/ai/__tests__/model-pricing.test.js +45 -1
- package/dist/ai/__tests__/model-pricing.test.js.map +1 -1
- package/dist/ai/__tests__/provider.test.d.ts.map +1 -1
- package/dist/ai/__tests__/provider.test.js +730 -1
- package/dist/ai/__tests__/provider.test.js.map +1 -1
- package/dist/ai/__tests__/validation.test.js +200 -1
- package/dist/ai/__tests__/validation.test.js.map +1 -1
- package/dist/ai/__tests__/zod-to-provider-schema.test.d.ts +2 -0
- package/dist/ai/__tests__/zod-to-provider-schema.test.d.ts.map +1 -0
- package/dist/ai/__tests__/zod-to-provider-schema.test.js +60 -0
- package/dist/ai/__tests__/zod-to-provider-schema.test.js.map +1 -0
- package/dist/ai/ai-service.d.ts +19 -2
- package/dist/ai/ai-service.d.ts.map +1 -1
- package/dist/ai/ai-service.js +544 -110
- package/dist/ai/ai-service.js.map +1 -1
- package/dist/ai/cost-tracker.d.ts +26 -1
- package/dist/ai/cost-tracker.d.ts.map +1 -1
- package/dist/ai/cost-tracker.js +1 -0
- package/dist/ai/cost-tracker.js.map +1 -1
- package/dist/ai/index.d.ts +6 -4
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +7 -3
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/model-pricing.d.ts +24 -1
- package/dist/ai/model-pricing.d.ts.map +1 -1
- package/dist/ai/model-pricing.js +83 -56
- package/dist/ai/model-pricing.js.map +1 -1
- package/dist/ai/provider.d.ts +110 -1
- package/dist/ai/provider.d.ts.map +1 -1
- package/dist/ai/provider.js +358 -32
- package/dist/ai/provider.js.map +1 -1
- package/dist/ai/rag/chunking.js +53 -3
- package/dist/ai/rag/chunking.js.map +1 -1
- package/dist/ai/refusal.d.ts +28 -0
- package/dist/ai/refusal.d.ts.map +1 -0
- package/dist/ai/refusal.js +36 -0
- package/dist/ai/refusal.js.map +1 -0
- package/dist/ai/validation.d.ts +40 -8
- package/dist/ai/validation.d.ts.map +1 -1
- package/dist/ai/validation.js +97 -6
- package/dist/ai/validation.js.map +1 -1
- package/dist/ai/zod-to-provider-schema.d.ts +15 -0
- package/dist/ai/zod-to-provider-schema.d.ts.map +1 -0
- package/dist/ai/zod-to-provider-schema.js +200 -0
- package/dist/ai/zod-to-provider-schema.js.map +1 -0
- package/dist/cli/__tests__/doctor.test.js +104 -2
- package/dist/cli/__tests__/doctor.test.js.map +1 -1
- package/dist/cli/__tests__/init.test.js +127 -7
- package/dist/cli/__tests__/init.test.js.map +1 -1
- package/dist/cli/__tests__/migrate.test.js +159 -2
- package/dist/cli/__tests__/migrate.test.js.map +1 -1
- package/dist/cli/commands/__tests__/commands.test.js +5 -0
- package/dist/cli/commands/__tests__/commands.test.js.map +1 -1
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +21 -1
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +78 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +7 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/init.d.ts +16 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +226 -25
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +258 -8
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +21 -1
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/data/__tests__/drift-inspector.test.d.ts +2 -0
- package/dist/data/__tests__/drift-inspector.test.d.ts.map +1 -0
- package/dist/data/__tests__/drift-inspector.test.js +170 -0
- package/dist/data/__tests__/drift-inspector.test.js.map +1 -0
- package/dist/data/__tests__/framework-migration-rewriter.test.d.ts +2 -0
- package/dist/data/__tests__/framework-migration-rewriter.test.d.ts.map +1 -0
- package/dist/data/__tests__/framework-migration-rewriter.test.js +329 -0
- package/dist/data/__tests__/framework-migration-rewriter.test.js.map +1 -0
- package/dist/data/__tests__/migration.test.js +93 -2
- package/dist/data/__tests__/migration.test.js.map +1 -1
- package/dist/data/__tests__/repository.test.js +126 -0
- package/dist/data/__tests__/repository.test.js.map +1 -1
- package/dist/data/drift-inspector.d.ts +41 -0
- package/dist/data/drift-inspector.d.ts.map +1 -0
- package/dist/data/drift-inspector.js +197 -0
- package/dist/data/drift-inspector.js.map +1 -0
- package/dist/data/framework-migration-rewriter.d.ts +61 -0
- package/dist/data/framework-migration-rewriter.d.ts.map +1 -0
- package/dist/data/framework-migration-rewriter.js +357 -0
- package/dist/data/framework-migration-rewriter.js.map +1 -0
- package/dist/data/index.d.ts +2 -1
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +2 -1
- package/dist/data/index.js.map +1 -1
- package/dist/data/migration.d.ts +31 -1
- package/dist/data/migration.d.ts.map +1 -1
- package/dist/data/migration.js +113 -3
- package/dist/data/migration.js.map +1 -1
- package/dist/data/repository.d.ts.map +1 -1
- package/dist/data/repository.js +21 -0
- package/dist/data/repository.js.map +1 -1
- package/dist/define/__tests__/definePrompt.test.js +37 -0
- package/dist/define/__tests__/definePrompt.test.js.map +1 -1
- package/dist/define/definePrompt.d.ts +13 -0
- package/dist/define/definePrompt.d.ts.map +1 -1
- package/dist/define/definePrompt.js +3 -0
- package/dist/define/definePrompt.js.map +1 -1
- package/dist/errors/http.d.ts.map +1 -1
- package/dist/errors/http.js +2 -0
- package/dist/errors/http.js.map +1 -1
- package/dist/errors/index.d.ts +12 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +21 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/events/__tests__/event-emitter.test.js +72 -0
- package/dist/events/__tests__/event-emitter.test.js.map +1 -1
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +51 -0
- package/dist/events/emitter.js.map +1 -1
- package/dist/execution/__tests__/context-factory.test.js +1 -0
- package/dist/execution/__tests__/context-factory.test.js.map +1 -1
- package/dist/execution/context-factory.d.ts.map +1 -1
- package/dist/execution/context-factory.js +2 -0
- package/dist/execution/context-factory.js.map +1 -1
- package/dist/flows/__tests__/flow-engine.test.js +451 -4
- package/dist/flows/__tests__/flow-engine.test.js.map +1 -1
- package/dist/flows/__tests__/flow-service.test.js +8 -0
- package/dist/flows/__tests__/flow-service.test.js.map +1 -1
- package/dist/flows/__tests__/step-executor.test.js +8 -2
- package/dist/flows/__tests__/step-executor.test.js.map +1 -1
- package/dist/flows/engine.d.ts +50 -1
- package/dist/flows/engine.d.ts.map +1 -1
- package/dist/flows/engine.js +427 -23
- package/dist/flows/engine.js.map +1 -1
- package/dist/flows/flow-service.d.ts.map +1 -1
- package/dist/flows/flow-service.js +4 -0
- package/dist/flows/flow-service.js.map +1 -1
- package/dist/flows/index.d.ts +1 -1
- package/dist/flows/index.d.ts.map +1 -1
- package/dist/flows/index.js +1 -1
- package/dist/flows/index.js.map +1 -1
- package/dist/flows/schema.d.ts +34 -0
- package/dist/flows/schema.d.ts.map +1 -1
- package/dist/flows/schema.js +3 -0
- package/dist/flows/schema.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/server/bootstrap.d.ts +14 -0
- package/dist/server/bootstrap.d.ts.map +1 -1
- package/dist/server/bootstrap.js +23 -4
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/testing/context.d.ts.map +1 -1
- package/dist/testing/context.js +37 -1
- package/dist/testing/context.js.map +1 -1
- package/dist/types/context.d.ts +110 -0
- package/dist/types/context.d.ts.map +1 -1
- package/dist/types/enums.d.ts +2 -0
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +2 -0
- package/dist/types/enums.js.map +1 -1
- package/dist/types/prompt.d.ts +64 -0
- package/dist/types/prompt.d.ts.map +1 -1
- package/dist/worker/__tests__/bootstrap.test.js +36 -2
- package/dist/worker/__tests__/bootstrap.test.js.map +1 -1
- package/dist/worker/bootstrap.d.ts +7 -0
- package/dist/worker/bootstrap.d.ts.map +1 -1
- package/dist/worker/bootstrap.js +153 -12
- package/dist/worker/bootstrap.js.map +1 -1
- package/instructions/framework.md +7 -0
- package/instructions/guardrails.md +39 -0
- package/instructions/patterns.md +10 -0
- 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() {
|
|
@@ -80,7 +88,10 @@ function makeCtx(overrides) {
|
|
|
80
88
|
return {
|
|
81
89
|
auth: makeAuth(),
|
|
82
90
|
data: {},
|
|
83
|
-
events: {
|
|
91
|
+
events: {
|
|
92
|
+
emit: vi.fn().mockResolvedValue(undefined),
|
|
93
|
+
emitMany: vi.fn().mockResolvedValue(undefined),
|
|
94
|
+
},
|
|
84
95
|
flows: {
|
|
85
96
|
start: vi.fn(),
|
|
86
97
|
resume: vi.fn(),
|
|
@@ -271,4 +282,440 @@ describe('FlowEngine', () => {
|
|
|
271
282
|
}));
|
|
272
283
|
});
|
|
273
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
|
+
});
|
|
720
|
+
});
|
|
274
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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"}
|
|
@@ -43,5 +43,13 @@ describe('FlowService', () => {
|
|
|
43
43
|
expect(st.status).toBe('running');
|
|
44
44
|
expect(engine.status).toHaveBeenCalledWith('exec-1');
|
|
45
45
|
});
|
|
46
|
+
it('heartbeat() is a no-op outside flow execution', async () => {
|
|
47
|
+
// The real heartbeat is injected onto flowCtx.flows.heartbeat by the engine during runNext.
|
|
48
|
+
// Calling it on a detached service (e.g. from a capability or API handler) must resolve silently
|
|
49
|
+
// rather than touch the db or throw — otherwise consumer code can't portably call ctx.flows.heartbeat().
|
|
50
|
+
const engine = mockEngine();
|
|
51
|
+
const svc = createFlowService(engine, auth);
|
|
52
|
+
await expect(svc.heartbeat()).resolves.toBeUndefined();
|
|
53
|
+
});
|
|
46
54
|
});
|
|
47
55
|
//# sourceMappingURL=flow-service.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-service.test.js","sourceRoot":"","sources":["../../../src/flows/__tests__/flow-service.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flow-service.test.js","sourceRoot":"","sources":["../../../src/flows/__tests__/flow-service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,10 @@ import { FlowStepType } from '../../types/enums.js';
|
|
|
3
3
|
import { StepStatus } from '../state-machine.js';
|
|
4
4
|
import { buildHistoryEntry, executeStep } from '../step-executor.js';
|
|
5
5
|
const mockCtx = {
|
|
6
|
-
events: {
|
|
6
|
+
events: {
|
|
7
|
+
emit: vi.fn().mockResolvedValue(undefined),
|
|
8
|
+
emitMany: vi.fn().mockResolvedValue(undefined),
|
|
9
|
+
},
|
|
7
10
|
};
|
|
8
11
|
const defaultDeps = {
|
|
9
12
|
executeCapability: vi.fn().mockResolvedValue({ success: true, data: {} }),
|
|
@@ -166,7 +169,10 @@ describe('StepExecutor', () => {
|
|
|
166
169
|
});
|
|
167
170
|
it('event emit step fails gracefully on emit error', async () => {
|
|
168
171
|
const ctx = {
|
|
169
|
-
events: {
|
|
172
|
+
events: {
|
|
173
|
+
emit: vi.fn().mockRejectedValue(new Error('emit failed')),
|
|
174
|
+
emitMany: vi.fn().mockResolvedValue(undefined),
|
|
175
|
+
},
|
|
170
176
|
};
|
|
171
177
|
const step = {
|
|
172
178
|
name: 'failEmit',
|