@backendkit-labs/agent-enterprise 0.3.2 → 0.3.6

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 (120) hide show
  1. package/README.md +2 -0
  2. package/dist/__tests__/integration/EventPublisher.integration.test.d.ts +2 -0
  3. package/dist/__tests__/integration/EventPublisher.integration.test.d.ts.map +1 -0
  4. package/dist/__tests__/integration/EventPublisher.integration.test.js +122 -0
  5. package/dist/__tests__/integration/EventPublisher.integration.test.js.map +1 -0
  6. package/dist/__tests__/unit/ComplianceGate.test.d.ts +2 -0
  7. package/dist/__tests__/unit/ComplianceGate.test.d.ts.map +1 -0
  8. package/dist/__tests__/unit/ComplianceGate.test.js +271 -0
  9. package/dist/__tests__/unit/ComplianceGate.test.js.map +1 -0
  10. package/dist/__tests__/unit/EventPublisher.test.d.ts +2 -0
  11. package/dist/__tests__/unit/EventPublisher.test.d.ts.map +1 -0
  12. package/dist/__tests__/unit/EventPublisher.test.js +160 -0
  13. package/dist/__tests__/unit/EventPublisher.test.js.map +1 -0
  14. package/dist/__tests__/unit/FlowLoader.test.d.ts +2 -0
  15. package/dist/__tests__/unit/FlowLoader.test.d.ts.map +1 -0
  16. package/dist/__tests__/unit/FlowLoader.test.js +283 -0
  17. package/dist/__tests__/unit/FlowLoader.test.js.map +1 -0
  18. package/dist/__tests__/unit/FlowRunner.test.d.ts +2 -0
  19. package/dist/__tests__/unit/FlowRunner.test.d.ts.map +1 -0
  20. package/dist/__tests__/unit/FlowRunner.test.js +386 -0
  21. package/dist/__tests__/unit/FlowRunner.test.js.map +1 -0
  22. package/dist/__tests__/unit/PolicySeeder.test.d.ts +2 -0
  23. package/dist/__tests__/unit/PolicySeeder.test.d.ts.map +1 -0
  24. package/dist/__tests__/unit/PolicySeeder.test.js +146 -0
  25. package/dist/__tests__/unit/PolicySeeder.test.js.map +1 -0
  26. package/dist/__tests__/unit/ProfilePolicies.test.d.ts +2 -0
  27. package/dist/__tests__/unit/ProfilePolicies.test.d.ts.map +1 -0
  28. package/dist/__tests__/unit/ProfilePolicies.test.js +70 -0
  29. package/dist/__tests__/unit/ProfilePolicies.test.js.map +1 -0
  30. package/dist/__tests__/unit/ReconciliationSweeper.test.d.ts +2 -0
  31. package/dist/__tests__/unit/ReconciliationSweeper.test.d.ts.map +1 -0
  32. package/dist/__tests__/unit/ReconciliationSweeper.test.js +235 -0
  33. package/dist/__tests__/unit/ReconciliationSweeper.test.js.map +1 -0
  34. package/dist/__tests__/unit/n8nTriggerTool.test.d.ts +2 -0
  35. package/dist/__tests__/unit/n8nTriggerTool.test.d.ts.map +1 -0
  36. package/dist/__tests__/unit/n8nTriggerTool.test.js +103 -0
  37. package/dist/__tests__/unit/n8nTriggerTool.test.js.map +1 -0
  38. package/dist/events/EventPublisher.d.ts +47 -0
  39. package/dist/events/EventPublisher.d.ts.map +1 -0
  40. package/dist/events/EventPublisher.js +75 -0
  41. package/dist/events/EventPublisher.js.map +1 -0
  42. package/dist/events/ReconciliationSweeper.d.ts +37 -0
  43. package/dist/events/ReconciliationSweeper.d.ts.map +1 -0
  44. package/dist/events/ReconciliationSweeper.js +151 -0
  45. package/dist/events/ReconciliationSweeper.js.map +1 -0
  46. package/dist/events/index.d.ts +6 -0
  47. package/dist/events/index.d.ts.map +1 -0
  48. package/dist/events/index.js +8 -0
  49. package/dist/events/index.js.map +1 -0
  50. package/dist/events/types.d.ts +48 -0
  51. package/dist/events/types.d.ts.map +1 -0
  52. package/dist/events/types.js +3 -0
  53. package/dist/events/types.js.map +1 -0
  54. package/dist/factory.d.ts +6 -0
  55. package/dist/factory.d.ts.map +1 -1
  56. package/dist/factory.js +11 -5
  57. package/dist/factory.js.map +1 -1
  58. package/dist/flow/ComplianceGate.d.ts +80 -0
  59. package/dist/flow/ComplianceGate.d.ts.map +1 -0
  60. package/dist/flow/ComplianceGate.js +214 -0
  61. package/dist/flow/ComplianceGate.js.map +1 -0
  62. package/dist/flow/FlowLoader.d.ts +22 -0
  63. package/dist/flow/FlowLoader.d.ts.map +1 -0
  64. package/dist/flow/FlowLoader.js +170 -0
  65. package/dist/flow/FlowLoader.js.map +1 -0
  66. package/dist/flow/FlowRunner.d.ts +66 -0
  67. package/dist/flow/FlowRunner.d.ts.map +1 -0
  68. package/dist/flow/FlowRunner.js +153 -0
  69. package/dist/flow/FlowRunner.js.map +1 -0
  70. package/dist/flow/index.d.ts +8 -0
  71. package/dist/flow/index.d.ts.map +1 -0
  72. package/dist/flow/index.js +21 -0
  73. package/dist/flow/index.js.map +1 -0
  74. package/dist/flow/types.d.ts +306 -0
  75. package/dist/flow/types.d.ts.map +1 -0
  76. package/dist/flow/types.js +63 -0
  77. package/dist/flow/types.js.map +1 -0
  78. package/dist/index.d.ts +8 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +26 -1
  81. package/dist/index.js.map +1 -1
  82. package/dist/integrations/index.d.ts +3 -0
  83. package/dist/integrations/index.d.ts.map +1 -0
  84. package/dist/integrations/index.js +6 -0
  85. package/dist/integrations/index.js.map +1 -0
  86. package/dist/integrations/n8nTriggerTool.d.ts +12 -0
  87. package/dist/integrations/n8nTriggerTool.d.ts.map +1 -0
  88. package/dist/integrations/n8nTriggerTool.js +45 -0
  89. package/dist/integrations/n8nTriggerTool.js.map +1 -0
  90. package/dist/policies/PolicySeeder.d.ts +31 -0
  91. package/dist/policies/PolicySeeder.d.ts.map +1 -0
  92. package/dist/policies/PolicySeeder.js +270 -0
  93. package/dist/policies/PolicySeeder.js.map +1 -0
  94. package/dist/policies/index.d.ts +3 -0
  95. package/dist/policies/index.d.ts.map +1 -0
  96. package/dist/policies/index.js +6 -0
  97. package/dist/policies/index.js.map +1 -0
  98. package/dist/profiles/constants.d.ts +4 -0
  99. package/dist/profiles/constants.d.ts.map +1 -1
  100. package/dist/profiles/constants.js +4 -0
  101. package/dist/profiles/constants.js.map +1 -1
  102. package/dist/profiles/finance.d.ts.map +1 -1
  103. package/dist/profiles/finance.js +7 -8
  104. package/dist/profiles/finance.js.map +1 -1
  105. package/dist/profiles/general.d.ts.map +1 -1
  106. package/dist/profiles/general.js +1 -0
  107. package/dist/profiles/general.js.map +1 -1
  108. package/dist/profiles/hr.d.ts.map +1 -1
  109. package/dist/profiles/hr.js +6 -8
  110. package/dist/profiles/hr.js.map +1 -1
  111. package/dist/profiles/ops.d.ts.map +1 -1
  112. package/dist/profiles/ops.js +6 -10
  113. package/dist/profiles/ops.js.map +1 -1
  114. package/dist/profiles/sales.d.ts.map +1 -1
  115. package/dist/profiles/sales.js +3 -1
  116. package/dist/profiles/sales.js.map +1 -1
  117. package/dist/profiles/support.d.ts.map +1 -1
  118. package/dist/profiles/support.js +2 -4
  119. package/dist/profiles/support.js.map +1 -1
  120. package/package.json +6 -2
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const FlowLoader_1 = require("../../flow/FlowLoader");
4
+ const FlowRunner_1 = require("../../flow/FlowRunner");
5
+ // ── Helpers ───────────────────────────────────────────────────────────────────
6
+ function makeTransport() {
7
+ return { emit: jest.fn(), onInput: jest.fn(() => () => { }), close: jest.fn() };
8
+ }
9
+ const THREE_STEP_FLOW = (0, FlowLoader_1.parseFlow)(`
10
+ flow: onboarding
11
+ trigger: { type: manual }
12
+ steps:
13
+ - id: ficha
14
+ agent: rrhh
15
+ prompt: "Prepara la ficha de {{payload.nombre}}"
16
+ - id: bienvenida
17
+ agent: onboarding
18
+ after: [ficha]
19
+ prompt: "Email de bienvenida"
20
+ - id: preliquidacion
21
+ agent: nomina
22
+ after: [ficha]
23
+ prompt: "Preliquidación de {{payload.nombre}}"
24
+ compensation:
25
+ - on: preliquidacion.failed
26
+ agent: nomina
27
+ prompt: "Revierte la preliquidación de {{payload.nombre}}"
28
+ `);
29
+ // ── interpolate ───────────────────────────────────────────────────────────────
30
+ describe('interpolate', () => {
31
+ it('replaces {{payload}} with the full payload as JSON', () => {
32
+ expect((0, FlowRunner_1.interpolate)('Datos: {{payload}}', { a: 1 })).toBe('Datos: {"a":1}');
33
+ });
34
+ it('replaces {{payload}} with the raw string when payload is a string', () => {
35
+ expect((0, FlowRunner_1.interpolate)('Datos: {{payload}}', 'hola')).toBe('Datos: hola');
36
+ });
37
+ it('resolves nested paths', () => {
38
+ expect((0, FlowRunner_1.interpolate)('Hola {{payload.empleado.nombre}}', { empleado: { nombre: 'Juan' } }))
39
+ .toBe('Hola Juan');
40
+ });
41
+ it('renders null for missing paths', () => {
42
+ expect((0, FlowRunner_1.interpolate)('{{payload.no.existe}}', { a: 1 })).toBe('null');
43
+ });
44
+ it('renders null when there is no payload', () => {
45
+ expect((0, FlowRunner_1.interpolate)('{{payload}}', undefined)).toBe('null');
46
+ });
47
+ it('supports whitespace inside braces and multiple occurrences', () => {
48
+ expect((0, FlowRunner_1.interpolate)('{{ payload.a }} y {{payload.b}}', { a: 'x', b: 'y' })).toBe('x y y');
49
+ });
50
+ it('leaves non-payload templates untouched', () => {
51
+ expect((0, FlowRunner_1.interpolate)('hola {{otro}}', { a: 1 })).toBe('hola {{otro}}');
52
+ });
53
+ });
54
+ // ── FlowRunner: execution ─────────────────────────────────────────────────────
55
+ describe('FlowRunner — execution', () => {
56
+ it('runs a 3-step DAG defined only in YAML end-to-end (criterio de salida fase 1)', async () => {
57
+ const calls = [];
58
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
59
+ payload: { nombre: 'Juan' },
60
+ transport: makeTransport(),
61
+ runAgent: async (agentId, input, _ctx, stepId) => {
62
+ calls.push({ agentId, input, stepId });
63
+ return { content: `done by ${agentId}` };
64
+ },
65
+ });
66
+ const result = await runner.run();
67
+ expect(result.status).toBe('completed');
68
+ expect(Object.keys(result.steps)).toHaveLength(3);
69
+ expect(result.steps['ficha'].status).toBe('completed');
70
+ expect(result.steps['bienvenida'].status).toBe('completed');
71
+ expect(result.steps['preliquidacion'].status).toBe('completed');
72
+ expect(result.compensations).toEqual([]);
73
+ });
74
+ it('interpolates the payload into step prompts', async () => {
75
+ const inputs = [];
76
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
77
+ payload: { nombre: 'Juan' },
78
+ transport: makeTransport(),
79
+ runAgent: async (_a, input) => { inputs.push(input); return { content: 'ok' }; },
80
+ });
81
+ await runner.run();
82
+ expect(inputs).toContain('Prepara la ficha de Juan');
83
+ expect(inputs).toContain('Preliquidación de Juan');
84
+ });
85
+ it('runs the ficha step before its dependents', async () => {
86
+ const order = [];
87
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
88
+ transport: makeTransport(),
89
+ runAgent: async (_a, _i, _c, stepId) => { order.push(stepId); return { content: 'ok' }; },
90
+ });
91
+ await runner.run();
92
+ expect(order[0]).toBe('ficha');
93
+ expect(order.slice(1).sort()).toEqual(['bienvenida', 'preliquidacion']);
94
+ });
95
+ it('passes dependency outputs as context', async () => {
96
+ const contexts = {};
97
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
98
+ transport: makeTransport(),
99
+ runAgent: async (_a, _i, context, stepId) => {
100
+ contexts[stepId] = context;
101
+ return { content: `output-of-${stepId}` };
102
+ },
103
+ });
104
+ await runner.run();
105
+ expect(contexts['ficha']).toBeUndefined();
106
+ expect(contexts['bienvenida']).toContain('output-of-ficha');
107
+ });
108
+ });
109
+ // ── FlowRunner: transitions (append-only log) ─────────────────────────────────
110
+ describe('FlowRunner — transition log', () => {
111
+ it('records started and completed for every executed step', async () => {
112
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
113
+ transport: makeTransport(),
114
+ runAgent: async () => ({ content: 'ok' }),
115
+ });
116
+ const result = await runner.run();
117
+ for (const stepId of ['ficha', 'bienvenida', 'preliquidacion']) {
118
+ const events = result.transitions.filter(t => t.stepId === stepId).map(t => t.event);
119
+ expect(events).toContain('started');
120
+ expect(events).toContain('completed');
121
+ }
122
+ expect(result.transitions.every(t => typeof t.at === 'string' && t.at.length > 0)).toBe(true);
123
+ });
124
+ it('notifies the onTransition observer in order', async () => {
125
+ const seen = [];
126
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
127
+ transport: makeTransport(),
128
+ runAgent: async () => ({ content: 'ok' }),
129
+ onTransition: t => seen.push(t),
130
+ });
131
+ const result = await runner.run();
132
+ expect(seen).toEqual(result.transitions);
133
+ });
134
+ it('records failed with the error detail', async () => {
135
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
136
+ transport: makeTransport(),
137
+ runAgent: async (_a, _i, _c, stepId) => {
138
+ if (stepId === 'ficha')
139
+ throw new Error('odoo caído');
140
+ return { content: 'ok' };
141
+ },
142
+ });
143
+ const result = await runner.run();
144
+ const failed = result.transitions.find(t => t.event === 'failed');
145
+ expect(failed?.stepId).toBe('ficha');
146
+ expect(failed?.detail).toBe('odoo caído');
147
+ });
148
+ it('records skipped for steps blocked by a failed dependency', async () => {
149
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
150
+ transport: makeTransport(),
151
+ runAgent: async (_a, _i, _c, stepId) => {
152
+ if (stepId === 'ficha')
153
+ throw new Error('boom');
154
+ return { content: 'ok' };
155
+ },
156
+ });
157
+ const result = await runner.run();
158
+ const skipped = result.transitions.filter(t => t.event === 'skipped').map(t => t.stepId);
159
+ expect(skipped.sort()).toEqual(['bienvenida', 'preliquidacion']);
160
+ expect(result.status).toBe('failed');
161
+ });
162
+ });
163
+ // ── FlowRunner: human approval gates ──────────────────────────────────────────
164
+ describe('FlowRunner — approval gates', () => {
165
+ const APPROVAL_FLOW = (0, FlowLoader_1.parseFlow)(`
166
+ flow: con-aprobacion
167
+ trigger: { type: manual }
168
+ steps:
169
+ - id: trabajo
170
+ agent: rrhh
171
+ prompt: "Hace el trabajo"
172
+ - id: confirmar
173
+ agent: nomina
174
+ after: [trabajo]
175
+ prompt: "Confirma el pago"
176
+ gate:
177
+ approval: human
178
+ criteria: ["Pago dentro del presupuesto"]
179
+ evaluator: auditor
180
+ `);
181
+ it('invokes onApprovalRequired with the flow step including its gate', async () => {
182
+ const approvals = [];
183
+ const runner = new FlowRunner_1.FlowRunner(APPROVAL_FLOW, {
184
+ transport: makeTransport(),
185
+ runAgent: async () => ({ content: 'ok' }),
186
+ onApprovalRequired: async (step) => {
187
+ approvals.push(step.id);
188
+ expect(step.gate?.criteria).toEqual(['Pago dentro del presupuesto']);
189
+ expect(step.gate?.evaluator).toBe('auditor');
190
+ return true;
191
+ },
192
+ });
193
+ const result = await runner.run();
194
+ expect(approvals).toEqual(['confirmar']);
195
+ expect(result.status).toBe('completed');
196
+ });
197
+ it('rejection marks the step rejected and the flow rejected', async () => {
198
+ const runner = new FlowRunner_1.FlowRunner(APPROVAL_FLOW, {
199
+ transport: makeTransport(),
200
+ runAgent: async () => ({ content: 'ok' }),
201
+ onApprovalRequired: async () => false,
202
+ });
203
+ const result = await runner.run();
204
+ expect(result.steps['confirmar'].status).toBe('rejected');
205
+ expect(result.status).toBe('rejected');
206
+ const events = result.transitions.filter(t => t.stepId === 'confirmar').map(t => t.event);
207
+ expect(events).toContain('approval_requested');
208
+ expect(events).toContain('rejected');
209
+ });
210
+ it('auto-approves when no onApprovalRequired is provided', async () => {
211
+ const runner = new FlowRunner_1.FlowRunner(APPROVAL_FLOW, {
212
+ transport: makeTransport(),
213
+ runAgent: async () => ({ content: 'ok' }),
214
+ });
215
+ const result = await runner.run();
216
+ expect(result.status).toBe('completed');
217
+ });
218
+ });
219
+ // ── FlowRunner: compensation ──────────────────────────────────────────────────
220
+ describe('FlowRunner — compensation', () => {
221
+ it('runs the matching compensation when its step fails', async () => {
222
+ const compensationCalls = [];
223
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
224
+ payload: { nombre: 'Juan' },
225
+ transport: makeTransport(),
226
+ runAgent: async (agentId, input, context, stepId) => {
227
+ if (stepId === 'preliquidacion')
228
+ throw new Error('monto inválido');
229
+ if (stepId === 'preliquidacion:compensation') {
230
+ compensationCalls.push({ agentId, input, context });
231
+ }
232
+ return { content: 'ok' };
233
+ },
234
+ });
235
+ const result = await runner.run();
236
+ expect(result.compensations).toHaveLength(1);
237
+ expect(result.compensations[0]).toMatchObject({ on: 'preliquidacion.failed', agent: 'nomina', status: 'completed' });
238
+ expect(compensationCalls[0].input).toBe('Revierte la preliquidación de Juan');
239
+ expect(compensationCalls[0].context).toContain('monto inválido');
240
+ const events = result.transitions.filter(t => t.stepId === 'preliquidacion').map(t => t.event);
241
+ expect(events).toContain('compensation_started');
242
+ expect(events).toContain('compensation_completed');
243
+ });
244
+ it('does not run compensation when the step succeeds', async () => {
245
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
246
+ transport: makeTransport(),
247
+ runAgent: async () => ({ content: 'ok' }),
248
+ });
249
+ const result = await runner.run();
250
+ expect(result.compensations).toEqual([]);
251
+ });
252
+ it('records compensation_failed when the compensating agent also fails', async () => {
253
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
254
+ transport: makeTransport(),
255
+ runAgent: async (_a, _i, _c, stepId) => {
256
+ if (stepId === 'preliquidacion')
257
+ throw new Error('fallo original');
258
+ if (stepId === 'preliquidacion:compensation')
259
+ throw new Error('compensación falló');
260
+ return { content: 'ok' };
261
+ },
262
+ });
263
+ const result = await runner.run();
264
+ expect(result.compensations[0].status).toBe('failed');
265
+ expect(result.compensations[0].error).toBe('compensación falló');
266
+ expect(result.transitions.some(t => t.event === 'compensation_failed')).toBe(true);
267
+ });
268
+ it('does not run compensation for skipped steps', async () => {
269
+ // ficha fails → preliquidacion is skipped (not failed) → no compensation
270
+ const runner = new FlowRunner_1.FlowRunner(THREE_STEP_FLOW, {
271
+ transport: makeTransport(),
272
+ runAgent: async (_a, _i, _c, stepId) => {
273
+ if (stepId === 'ficha')
274
+ throw new Error('boom');
275
+ return { content: 'ok' };
276
+ },
277
+ });
278
+ const result = await runner.run();
279
+ expect(result.steps['preliquidacion'].status).toBe('skipped');
280
+ expect(result.compensations).toEqual([]);
281
+ });
282
+ });
283
+ // ── FlowRunner: compliance gates ──────────────────────────────────────────────
284
+ describe('FlowRunner — compliance gates', () => {
285
+ const GATE_FLOW = (0, FlowLoader_1.parseFlow)(`
286
+ flow: con-gate
287
+ trigger: { type: manual }
288
+ steps:
289
+ - id: ejecutar
290
+ agent: rrhh
291
+ prompt: "Ejecuta la tarea"
292
+ gate:
293
+ criteria:
294
+ - "Resultado documentado"
295
+ - "Sin errores en Odoo"
296
+ evaluator: auditor
297
+ evidence: required
298
+ - id: siguiente
299
+ agent: onboarding
300
+ after: [ejecutar]
301
+ prompt: "Paso siguiente"
302
+ `);
303
+ it('calls onGateRequired after the step executes successfully', async () => {
304
+ const gateCalls = [];
305
+ const runner = new FlowRunner_1.FlowRunner(GATE_FLOW, {
306
+ transport: makeTransport(),
307
+ runAgent: async () => ({ content: 'output del paso' }),
308
+ onGateRequired: async (gate, step, output) => {
309
+ gateCalls.push({ stepId: step.id, output });
310
+ gate.evaluateCriterion(0, 'auditor', true, 'ref-1');
311
+ gate.evaluateCriterion(1, 'auditor', true, 'ref-2');
312
+ },
313
+ });
314
+ const result = await runner.run();
315
+ expect(gateCalls).toHaveLength(1);
316
+ expect(gateCalls[0].stepId).toBe('ejecutar');
317
+ expect(gateCalls[0].output).toBe('output del paso');
318
+ expect(result.status).toBe('completed');
319
+ });
320
+ it('records gate_evaluation_started and gate_passed transitions', async () => {
321
+ const runner = new FlowRunner_1.FlowRunner(GATE_FLOW, {
322
+ transport: makeTransport(),
323
+ runAgent: async () => ({ content: 'ok' }),
324
+ onGateRequired: async (gate) => {
325
+ gate.evaluateCriterion(0, 'auditor', true, 'ev');
326
+ gate.evaluateCriterion(1, 'auditor', true, 'ev');
327
+ },
328
+ });
329
+ const result = await runner.run();
330
+ const events = result.transitions.filter(t => t.stepId === 'ejecutar').map(t => t.event);
331
+ expect(events).toContain('gate_evaluation_started');
332
+ expect(events).toContain('gate_passed');
333
+ });
334
+ it('fails the step when onGateRequired leaves the gate in pending state', async () => {
335
+ const runner = new FlowRunner_1.FlowRunner(GATE_FLOW, {
336
+ transport: makeTransport(),
337
+ runAgent: async () => ({ content: 'ok' }),
338
+ onGateRequired: async (_gate) => {
339
+ // only evaluates 1 of 2 criteria → verdict stays pending
340
+ _gate.evaluateCriterion(0, 'auditor', true, 'ev');
341
+ },
342
+ });
343
+ const result = await runner.run();
344
+ expect(result.steps['ejecutar'].status).toBe('failed');
345
+ expect(result.status).toBe('failed');
346
+ const events = result.transitions.filter(t => t.stepId === 'ejecutar').map(t => t.event);
347
+ expect(events).toContain('gate_failed');
348
+ });
349
+ it('fails the step when evaluator rejects the gate', async () => {
350
+ const runner = new FlowRunner_1.FlowRunner(GATE_FLOW, {
351
+ transport: makeTransport(),
352
+ runAgent: async () => ({ content: 'ok' }),
353
+ onGateRequired: async (gate) => {
354
+ gate.reject('auditor', 'output incompleto');
355
+ },
356
+ });
357
+ const result = await runner.run();
358
+ expect(result.steps['ejecutar'].status).toBe('failed');
359
+ });
360
+ it('auto-passes when onGateRequired is not provided', async () => {
361
+ const runner = new FlowRunner_1.FlowRunner(GATE_FLOW, {
362
+ transport: makeTransport(),
363
+ runAgent: async () => ({ content: 'ok' }),
364
+ // no onGateRequired
365
+ });
366
+ const result = await runner.run();
367
+ // Gate auto-passed → flow completes (same default as onApprovalRequired)
368
+ expect(result.status).toBe('completed');
369
+ });
370
+ it('skips onGateRequired for steps without gate criteria', async () => {
371
+ const gateCalls = [];
372
+ const runner = new FlowRunner_1.FlowRunner(GATE_FLOW, {
373
+ transport: makeTransport(),
374
+ runAgent: async () => ({ content: 'ok' }),
375
+ onGateRequired: async (_gate, step) => {
376
+ gateCalls.push(step.id);
377
+ _gate.evaluateCriterion(0, 'auditor', true, 'ev');
378
+ _gate.evaluateCriterion(1, 'auditor', true, 'ev');
379
+ },
380
+ });
381
+ await runner.run();
382
+ // Only 'ejecutar' has gate criteria; 'siguiente' does not
383
+ expect(gateCalls).toEqual(['ejecutar']);
384
+ });
385
+ });
386
+ //# sourceMappingURL=FlowRunner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowRunner.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/FlowRunner.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PolicySeeder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolicySeeder.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/PolicySeeder.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("fs/promises"));
37
+ const path = __importStar(require("path"));
38
+ const os = __importStar(require("os"));
39
+ const PolicySeeder_1 = require("../../policies/PolicySeeder");
40
+ // ── Helpers ───────────────────────────────────────────────────────────────────
41
+ async function makeTmpVault() {
42
+ return fs.mkdtemp(path.join(os.tmpdir(), 'seeder-'));
43
+ }
44
+ // ── seed ──────────────────────────────────────────────────────────────────────
45
+ describe('PolicySeeder — seed', () => {
46
+ let vault;
47
+ beforeEach(async () => { vault = await makeTmpVault(); });
48
+ afterEach(async () => { await fs.rm(vault, { recursive: true, force: true }); });
49
+ it('returns the list of files written', async () => {
50
+ const seeder = new PolicySeeder_1.PolicySeeder(vault);
51
+ const written = await seeder.seed();
52
+ expect(written.length).toBeGreaterThan(0);
53
+ for (const f of written) {
54
+ expect(f).toContain('politicas');
55
+ expect(f.endsWith('.md')).toBe(true);
56
+ }
57
+ });
58
+ it('writes all 6 seed policies', async () => {
59
+ const seeder = new PolicySeeder_1.PolicySeeder(vault);
60
+ await seeder.seed();
61
+ const allFiles = [];
62
+ for (const domain of ['finanzas', 'operaciones', 'ventas', 'soporte', 'rrhh']) {
63
+ const dir = path.join(vault, 'politicas', domain);
64
+ const files = await fs.readdir(dir);
65
+ allFiles.push(...files.filter(f => f.endsWith('.md')));
66
+ }
67
+ expect(allFiles.length).toBe(6);
68
+ });
69
+ it('creates files with correct frontmatter fields', async () => {
70
+ const seeder = new PolicySeeder_1.PolicySeeder(vault);
71
+ await seeder.seed();
72
+ const file = path.join(vault, 'politicas', 'finanzas', 'approval-authority.md');
73
+ const content = await fs.readFile(file, 'utf-8');
74
+ expect(content).toContain('vigente_desde:');
75
+ expect(content).toContain('aprobada_por:');
76
+ expect(content).toContain('version:');
77
+ });
78
+ it('finance approval policy contains the approval matrix', async () => {
79
+ const seeder = new PolicySeeder_1.PolicySeeder(vault);
80
+ await seeder.seed();
81
+ const content = await fs.readFile(path.join(vault, 'politicas', 'finanzas', 'approval-authority.md'), 'utf-8');
82
+ expect(content).toContain('Approval Authority Matrix');
83
+ expect(content).toContain('$500'); // thresholds live in the vault, not in prompts
84
+ expect(content).toContain('$5,000');
85
+ expect(content).toContain('$50,000');
86
+ });
87
+ it('ops policy contains incident severity levels', async () => {
88
+ const seeder = new PolicySeeder_1.PolicySeeder(vault);
89
+ await seeder.seed();
90
+ const content = await fs.readFile(path.join(vault, 'politicas', 'operaciones', 'incident-severity.md'), 'utf-8');
91
+ expect(content).toContain('P1');
92
+ expect(content).toContain('P2');
93
+ expect(content).toContain('P3');
94
+ expect(content).toContain('P4');
95
+ });
96
+ it('support policy contains escalation tier definitions', async () => {
97
+ const seeder = new PolicySeeder_1.PolicySeeder(vault);
98
+ await seeder.seed();
99
+ const content = await fs.readFile(path.join(vault, 'politicas', 'soporte', 'escalation-levels.md'), 'utf-8');
100
+ expect(content).toContain('Tier 1');
101
+ expect(content).toContain('Tier 2');
102
+ expect(content).toContain('Tier 3');
103
+ });
104
+ });
105
+ // ── overwrite behaviour ───────────────────────────────────────────────────────
106
+ describe('PolicySeeder — overwrite behaviour', () => {
107
+ let vault;
108
+ beforeEach(async () => { vault = await makeTmpVault(); });
109
+ afterEach(async () => { await fs.rm(vault, { recursive: true, force: true }); });
110
+ it('does NOT overwrite existing files by default', async () => {
111
+ const seeder = new PolicySeeder_1.PolicySeeder(vault);
112
+ await seeder.seed();
113
+ // Customise the finance policy
114
+ const file = path.join(vault, 'politicas', 'finanzas', 'approval-authority.md');
115
+ await fs.writeFile(file, '# Custom policy', 'utf-8');
116
+ // Second seed call — should skip existing
117
+ const written = await seeder.seed();
118
+ expect(written).not.toContain(file);
119
+ expect(await fs.readFile(file, 'utf-8')).toBe('# Custom policy');
120
+ });
121
+ it('overwrites existing files when overwrite: true', async () => {
122
+ const seeder = new PolicySeeder_1.PolicySeeder(vault);
123
+ await seeder.seed();
124
+ const file = path.join(vault, 'politicas', 'finanzas', 'approval-authority.md');
125
+ await fs.writeFile(file, '# Custom policy', 'utf-8');
126
+ const written = await seeder.seed({ overwrite: true });
127
+ expect(written).toContain(file);
128
+ const content = await fs.readFile(file, 'utf-8');
129
+ expect(content).not.toBe('# Custom policy');
130
+ expect(content).toContain('Approval Authority Matrix');
131
+ });
132
+ it('second default seed call returns empty array (all files already exist)', async () => {
133
+ const seeder = new PolicySeeder_1.PolicySeeder(vault);
134
+ await seeder.seed();
135
+ const written2 = await seeder.seed();
136
+ expect(written2).toEqual([]);
137
+ });
138
+ });
139
+ // ── policyPath ────────────────────────────────────────────────────────────────
140
+ describe('PolicySeeder — policyPath', () => {
141
+ it('returns the correct absolute path for a given domain and slug', () => {
142
+ const seeder = new PolicySeeder_1.PolicySeeder('/vault');
143
+ expect(seeder.policyPath('finanzas', 'approval-authority')).toBe(path.join('/vault', 'politicas', 'finanzas', 'approval-authority.md'));
144
+ });
145
+ });
146
+ //# sourceMappingURL=PolicySeeder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolicySeeder.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/PolicySeeder.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ProfilePolicies.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfilePolicies.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/ProfilePolicies.test.ts"],"names":[],"mappings":""}