@polpo-ai/core 0.18.16 → 0.18.18
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/loop/pipeline.d.ts +1 -0
- package/dist/loop/pipeline.d.ts.map +1 -1
- package/dist/loop/pipeline.js +7 -1
- package/dist/loop/pipeline.js.map +1 -1
- package/dist/loop/run-store.d.ts +8 -0
- package/dist/loop/run-store.d.ts.map +1 -1
- package/dist/loop/run-store.js.map +1 -1
- package/dist/loop/runner.d.ts +9 -0
- package/dist/loop/runner.d.ts.map +1 -1
- package/dist/loop/runner.js +17 -2
- package/dist/loop/runner.js.map +1 -1
- package/dist/run-delivery-owner.d.ts +1 -1
- package/dist/run-delivery-owner.d.ts.map +1 -1
- package/dist/run-delivery-owner.js +78 -18
- package/dist/run-delivery-owner.js.map +1 -1
- package/dist/run-delivery-owner.test.js +198 -0
- package/dist/run-delivery-owner.test.js.map +1 -1
- package/dist/runtime-hooks.d.ts +25 -2
- package/dist/runtime-hooks.d.ts.map +1 -1
- package/dist/runtime-hooks.js +54 -17
- package/dist/runtime-hooks.js.map +1 -1
- package/dist/termination-gate.d.ts +45 -0
- package/dist/termination-gate.d.ts.map +1 -0
- package/dist/termination-gate.js +102 -0
- package/dist/termination-gate.js.map +1 -0
- package/dist/termination-gate.test.d.ts +2 -0
- package/dist/termination-gate.test.d.ts.map +1 -0
- package/dist/termination-gate.test.js +79 -0
- package/dist/termination-gate.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -341,6 +341,204 @@ describe("executeOwnedRun", () => {
|
|
|
341
341
|
]);
|
|
342
342
|
expect(await cancellations.get("run-a")).toBeNull();
|
|
343
343
|
});
|
|
344
|
+
it("contains a heartbeat transport failure, aborts the producer and writes one retryable terminal", async () => {
|
|
345
|
+
const events = new InMemoryRunEventStore();
|
|
346
|
+
const baseLeases = new InMemoryRunExecutionLeaseStore();
|
|
347
|
+
let renewCount = 0;
|
|
348
|
+
const release = vi.fn(baseLeases.release.bind(baseLeases));
|
|
349
|
+
const leaseStore = {
|
|
350
|
+
claim: baseLeases.claim.bind(baseLeases),
|
|
351
|
+
get: baseLeases.get.bind(baseLeases),
|
|
352
|
+
release,
|
|
353
|
+
renew: async (...args) => {
|
|
354
|
+
renewCount += 1;
|
|
355
|
+
if (renewCount === 2) {
|
|
356
|
+
throw new Error("secret postgres heartbeat diagnostics");
|
|
357
|
+
}
|
|
358
|
+
return baseLeases.renew(...args);
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
let abortReason;
|
|
362
|
+
const result = await executeOwnedRun({
|
|
363
|
+
runId: "run-heartbeat-failure",
|
|
364
|
+
...lease,
|
|
365
|
+
journal: new RunEventJournal(events),
|
|
366
|
+
leaseStore,
|
|
367
|
+
heartbeatIntervalMs: 5,
|
|
368
|
+
leaseDurationMs: 50,
|
|
369
|
+
producer: async ({ signal }) => {
|
|
370
|
+
await new Promise((resolve) => signal.addEventListener("abort", () => {
|
|
371
|
+
abortReason = signal.reason;
|
|
372
|
+
resolve();
|
|
373
|
+
}, { once: true }));
|
|
374
|
+
},
|
|
375
|
+
});
|
|
376
|
+
expect(result).toEqual({
|
|
377
|
+
status: "failed",
|
|
378
|
+
error: "Run execution heartbeat failed",
|
|
379
|
+
});
|
|
380
|
+
expect(abortReason).toBe("run_heartbeat_failed");
|
|
381
|
+
const history = (await events.listAfter("run-heartbeat-failure")).events;
|
|
382
|
+
expect(history.map((event) => event.type)).toEqual(["run.started", "run.failed"]);
|
|
383
|
+
expect(history.at(-1)).toMatchObject({
|
|
384
|
+
data: {
|
|
385
|
+
code: "run_heartbeat_failed",
|
|
386
|
+
message: "Run execution heartbeat failed",
|
|
387
|
+
retryable: true,
|
|
388
|
+
},
|
|
389
|
+
});
|
|
390
|
+
expect(JSON.stringify(history)).not.toContain("secret postgres heartbeat diagnostics");
|
|
391
|
+
expect(release).toHaveBeenCalledOnce();
|
|
392
|
+
expect(await baseLeases.get("run-heartbeat-failure")).toBeNull();
|
|
393
|
+
});
|
|
394
|
+
it("fails closed when cancellation polling throws during a heartbeat", async () => {
|
|
395
|
+
const events = new InMemoryRunEventStore();
|
|
396
|
+
const leases = new InMemoryRunExecutionLeaseStore();
|
|
397
|
+
const baseCancellations = new InMemoryRunCancellationStore();
|
|
398
|
+
let pollCount = 0;
|
|
399
|
+
const cancellations = {
|
|
400
|
+
request: baseCancellations.request.bind(baseCancellations),
|
|
401
|
+
clear: baseCancellations.clear.bind(baseCancellations),
|
|
402
|
+
get: async (...args) => {
|
|
403
|
+
pollCount += 1;
|
|
404
|
+
if (pollCount === 2)
|
|
405
|
+
throw new Error("cancellation backend unavailable");
|
|
406
|
+
return baseCancellations.get(...args);
|
|
407
|
+
},
|
|
408
|
+
};
|
|
409
|
+
const result = await executeOwnedRun({
|
|
410
|
+
runId: "run-cancellation-poll-failure",
|
|
411
|
+
...lease,
|
|
412
|
+
journal: new RunEventJournal(events),
|
|
413
|
+
leaseStore: leases,
|
|
414
|
+
cancellationStore: cancellations,
|
|
415
|
+
heartbeatIntervalMs: 5,
|
|
416
|
+
leaseDurationMs: 50,
|
|
417
|
+
producer: async ({ signal }) => {
|
|
418
|
+
await new Promise((resolve) => signal.addEventListener("abort", () => resolve(), { once: true }));
|
|
419
|
+
},
|
|
420
|
+
});
|
|
421
|
+
expect(result).toEqual({
|
|
422
|
+
status: "failed",
|
|
423
|
+
error: "Run execution heartbeat failed",
|
|
424
|
+
});
|
|
425
|
+
expect((await events.listAfter("run-cancellation-poll-failure")).events)
|
|
426
|
+
.toMatchObject([
|
|
427
|
+
{ type: "run.started" },
|
|
428
|
+
{ type: "run.failed", data: { code: "run_heartbeat_failed", retryable: true } },
|
|
429
|
+
]);
|
|
430
|
+
expect(await leases.get("run-cancellation-poll-failure")).toBeNull();
|
|
431
|
+
});
|
|
432
|
+
it("drains an in-flight heartbeat failure before choosing run.completed", async () => {
|
|
433
|
+
const events = new InMemoryRunEventStore();
|
|
434
|
+
const leases = new InMemoryRunExecutionLeaseStore();
|
|
435
|
+
const baseCancellations = new InMemoryRunCancellationStore();
|
|
436
|
+
let pollCount = 0;
|
|
437
|
+
let heartbeatPollStarted;
|
|
438
|
+
const heartbeatPoll = new Promise((resolve) => { heartbeatPollStarted = resolve; });
|
|
439
|
+
let rejectHeartbeatPoll;
|
|
440
|
+
const pendingHeartbeatPoll = new Promise((_resolve, reject) => {
|
|
441
|
+
rejectHeartbeatPoll = reject;
|
|
442
|
+
});
|
|
443
|
+
const cancellations = {
|
|
444
|
+
request: baseCancellations.request.bind(baseCancellations),
|
|
445
|
+
clear: baseCancellations.clear.bind(baseCancellations),
|
|
446
|
+
get: async (...args) => {
|
|
447
|
+
pollCount += 1;
|
|
448
|
+
if (pollCount === 2) {
|
|
449
|
+
heartbeatPollStarted();
|
|
450
|
+
return pendingHeartbeatPoll;
|
|
451
|
+
}
|
|
452
|
+
return baseCancellations.get(...args);
|
|
453
|
+
},
|
|
454
|
+
};
|
|
455
|
+
let finishProducer;
|
|
456
|
+
const producerMayFinish = new Promise((resolve) => { finishProducer = resolve; });
|
|
457
|
+
const execution = executeOwnedRun({
|
|
458
|
+
runId: "run-heartbeat-finalization-race",
|
|
459
|
+
...lease,
|
|
460
|
+
journal: new RunEventJournal(events),
|
|
461
|
+
leaseStore: leases,
|
|
462
|
+
cancellationStore: cancellations,
|
|
463
|
+
heartbeatIntervalMs: 5,
|
|
464
|
+
leaseDurationMs: 50,
|
|
465
|
+
producer: async () => producerMayFinish,
|
|
466
|
+
});
|
|
467
|
+
await heartbeatPoll;
|
|
468
|
+
finishProducer();
|
|
469
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
470
|
+
rejectHeartbeatPoll(new Error("late private database failure"));
|
|
471
|
+
await expect(execution).resolves.toEqual({
|
|
472
|
+
status: "failed",
|
|
473
|
+
error: "Run execution heartbeat failed",
|
|
474
|
+
});
|
|
475
|
+
const history = (await events.listAfter("run-heartbeat-finalization-race")).events;
|
|
476
|
+
expect(history.map((event) => event.type)).toEqual(["run.started", "run.failed"]);
|
|
477
|
+
expect(JSON.stringify(history)).not.toContain("late private database failure");
|
|
478
|
+
});
|
|
479
|
+
it("does not terminalize a heartbeat failure after ownership moved", async () => {
|
|
480
|
+
const events = new InMemoryRunEventStore();
|
|
481
|
+
const baseLeases = new InMemoryRunExecutionLeaseStore();
|
|
482
|
+
let renewCount = 0;
|
|
483
|
+
const leaseStore = {
|
|
484
|
+
claim: baseLeases.claim.bind(baseLeases),
|
|
485
|
+
get: baseLeases.get.bind(baseLeases),
|
|
486
|
+
release: baseLeases.release.bind(baseLeases),
|
|
487
|
+
renew: async (...args) => {
|
|
488
|
+
renewCount += 1;
|
|
489
|
+
if (renewCount === 2) {
|
|
490
|
+
const current = await baseLeases.get(args[0]);
|
|
491
|
+
if (current)
|
|
492
|
+
await baseLeases.release(args[0], current);
|
|
493
|
+
await baseLeases.claim(args[0], {
|
|
494
|
+
owner: "replacement-worker",
|
|
495
|
+
token: "replacement-token",
|
|
496
|
+
expiresAt: new Date(Date.now() + 60_000).toISOString(),
|
|
497
|
+
});
|
|
498
|
+
throw new Error("heartbeat acknowledgement lost during owner replacement");
|
|
499
|
+
}
|
|
500
|
+
return baseLeases.renew(...args);
|
|
501
|
+
},
|
|
502
|
+
};
|
|
503
|
+
const result = await executeOwnedRun({
|
|
504
|
+
runId: "run-heartbeat-owner-replaced",
|
|
505
|
+
...lease,
|
|
506
|
+
journal: new RunEventJournal(events),
|
|
507
|
+
leaseStore,
|
|
508
|
+
heartbeatIntervalMs: 5,
|
|
509
|
+
leaseDurationMs: 50,
|
|
510
|
+
producer: async ({ signal }) => {
|
|
511
|
+
await new Promise((resolve) => signal.addEventListener("abort", () => resolve(), { once: true }));
|
|
512
|
+
},
|
|
513
|
+
});
|
|
514
|
+
expect(result).toEqual({ status: "lost-lease" });
|
|
515
|
+
expect((await events.listAfter("run-heartbeat-owner-replaced")).events.map((event) => event.type)).toEqual(["run.started"]);
|
|
516
|
+
await expect(baseLeases.get("run-heartbeat-owner-replaced")).resolves.toMatchObject({
|
|
517
|
+
owner: "replacement-worker",
|
|
518
|
+
token: "replacement-token",
|
|
519
|
+
});
|
|
520
|
+
});
|
|
521
|
+
it("does not turn a durable completion into a request failure when lease release fails", async () => {
|
|
522
|
+
const events = new InMemoryRunEventStore();
|
|
523
|
+
const baseLeases = new InMemoryRunExecutionLeaseStore();
|
|
524
|
+
const leaseStore = {
|
|
525
|
+
claim: baseLeases.claim.bind(baseLeases),
|
|
526
|
+
get: baseLeases.get.bind(baseLeases),
|
|
527
|
+
renew: baseLeases.renew.bind(baseLeases),
|
|
528
|
+
release: vi.fn(async () => {
|
|
529
|
+
throw new Error("release acknowledgement lost");
|
|
530
|
+
}),
|
|
531
|
+
};
|
|
532
|
+
await expect(executeOwnedRun({
|
|
533
|
+
runId: "run-release-ack-lost",
|
|
534
|
+
...lease,
|
|
535
|
+
journal: new RunEventJournal(events),
|
|
536
|
+
leaseStore,
|
|
537
|
+
producer: async () => undefined,
|
|
538
|
+
})).resolves.toEqual({ status: "completed" });
|
|
539
|
+
expect((await events.listAfter("run-release-ack-lost")).events.map((event) => event.type)).toEqual(["run.started", "run.completed"]);
|
|
540
|
+
expect(leaseStore.release).toHaveBeenCalledOnce();
|
|
541
|
+
});
|
|
344
542
|
it("does not terminalize after losing its lease to another owner", async () => {
|
|
345
543
|
let renewCount = 0;
|
|
346
544
|
const baseLeases = new InMemoryRunExecutionLeaseStore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-delivery-owner.test.js","sourceRoot":"","sources":["../src/run-delivery-owner.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,EACrB,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,SAAS;CACjB,CAAC;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,OAAO;YACd,GAAG,KAAK;YACR,OAAO;YACP,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE;gBAC/C,MAAM,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE;oBACpC,IAAI,EAAE,mBAAmB;oBACzB,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;iBACxB,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAClF,aAAa;YACb,mBAAmB;YACnB,eAAe;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;YAC1B,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,aAAa;YACpB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;SAC1D,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,OAAO;YACd,GAAG,KAAK;YACR,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;SACzC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;QACxG,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE;YACnC,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE;YACnC,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;QACjE,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,cAAc;YACrB,GAAG,KAAK;YACR,OAAO;YACP,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACpG,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE;YACnC,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE;YACnC,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE;YACnC,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;SACpC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;QACjE,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,cAAc;YACrB,GAAG,KAAK;YACR,OAAO;YACP,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE;YACpC,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,eAAe;YACtB,GAAG,KAAK;YACR,OAAO;YACP,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,iDAAiD;SACzD,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;YACrE,EAAE,IAAI,EAAE,aAAa,EAAE;YACvB;gBACE,EAAE,EAAE,kCAAkC;gBACtC,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE;oBACJ,IAAI,EAAE,2BAA2B;oBACjC,OAAO,EAAE,iDAAiD;oBAC1D,SAAS,EAAE,IAAI;iBAChB;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACxD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,kBAA+B,CAAC;QACpC,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,IAAI,kBAA+B,CAAC;QACpC,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,UAAU,GAAG;YACjB,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;YACpC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACxC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5C,KAAK,EAAE,KAAK,EAAE,GAAG,IAAyC,EAAE,EAAE;gBAC5D,UAAU,IAAI,CAAC,CAAC;gBAChB,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBACrB,kBAAkB,EAAE,CAAC;oBACrB,MAAM,mBAAmB,CAAC;gBAC5B,CAAC;gBACD,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACnC,CAAC;SACF,CAAC;QACF,IAAI,WAAwB,CAAC;QAC7B,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,KAAK,EAAE,uBAAuB;YAC9B,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU;YACV,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,aAAa,IAAI,CAAC,CAAC;gBACnB,MAAM,cAAc,CAAC;YACvB,CAAC;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,CAAC;YAC7B,KAAK,EAAE,uBAAuB;YAC9B,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU;YACV,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,kBAAkB,CAAC;QACzB,WAAW,EAAE,CAAC;QACd,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9D,kBAAkB,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CACtB,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,eAAe,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACpD,IAAI,0BAA0B,GAAG,IAAI,CAAC;QACtC,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YACpD,SAAS,EAAE,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;YAC1D,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;YAC5D,MAAM,EAAE,KAAK,EAAE,GAAG,IAA+C,EAAE,EAAE;gBACnE,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBACpD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,0BAA0B,EAAE,CAAC;oBAC/D,0BAA0B,GAAG,KAAK,CAAC;oBACnC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;SACF,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,MAAM,MAAM,CAAC,eAAe,CAAC;YAC3B,KAAK,EAAE,sBAAsB;YAC7B,GAAG,KAAK;YACR,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE5D,MAAM,MAAM,CAAC,eAAe,CAAC;YAC3B,KAAK,EAAE,sBAAsB;YAC7B,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YACnB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,iDAAiD;SACzD,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,MAAM,eAAe,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACzE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CACtB,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC7C,MAAM,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE;YAC3C,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QACH,MAAM,UAAU,GAAG;YACjB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC9C,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5C,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACtE,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAE9C,MAAM,MAAM,CAAC,eAAe,CAAC;YAC3B,KAAK,EAAE,qBAAqB;YAC5B,GAAG,KAAK;YACR,OAAO,EAAE,IAAI,eAAe,CAAC,UAAU,CAAC;YACxC,UAAU,EAAE,MAAM;YAClB,QAAQ;SACT,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC;QAEvD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACxC,MAAM,CAAC,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,OAAO;YACd,GAAG,KAAK;YACR,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;SACnE,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CACjC,IAAI,KAAK,CAAC,2DAA2D,EAAE;YACrE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SAC5E,CAAC,EACF,EAAE,KAAK,EAAE,gCAAgC,EAAE,MAAM,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAC5E,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,qBAAqB;YAC5B,GAAG,KAAK;YACR,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,0BAA0B,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;SAClF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC;QACtF,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;YAC5B,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE;gBACJ,OAAO,EAAE,gCAAgC;gBACzC,IAAI,EAAE,gCAAgC;gBACtC,SAAS,EAAE,OAAO;gBAClB,UAAU,EAAE,4BAA4B;gBACxC,SAAS,EAAE,qBAAqB;gBAChC,QAAQ,EAAE,CAAC;aACZ;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,IAAI,4BAA4B,EAAE,CAAC;QACzD,IAAI,eAA4B,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,eAAe,CAAC;YAChC,KAAK,EAAE,OAAO;YACd,GAAG,KAAK;YACR,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU,EAAE,MAAM;YAClB,iBAAiB,EAAE,aAAa;YAChC,mBAAmB,EAAE,CAAC;YACtB,eAAe,EAAE,EAAE;YACnB,QAAQ,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC7B,eAAe,EAAE,CAAC;gBAClB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1G,CAAC;SACF,CAAC,CAAC;QACH,MAAM,OAAO,CAAC;QAEd,MAAM,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE;YACnC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAClF,aAAa;YACb,gBAAgB;YAChB,eAAe;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,UAAU,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG;YACjB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACxC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;YACpC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5C,KAAK,EAAE,KAAK,EAAE,GAAG,IAAyC,EAAE,EAAE;gBAC5D,UAAU,IAAI,CAAC,CAAC;gBAChB,IAAI,UAAU,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACnC,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACnC,CAAC;SACF,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,OAAO;YACd,GAAG,KAAK;YACR,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU;YACV,mBAAmB,EAAE,CAAC;YACtB,eAAe,EAAE,EAAE;YACnB,QAAQ,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC7B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1G,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAClF,aAAa;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,UAAU,GAAG,IAAI,8BAA8B,EAAE,CAAC;QACxD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,UAAU,GAAG;YACjB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACxC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;YACpC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5C,KAAK,EAAE,KAAK,EAAE,GAAG,IAAyC,EAAE,EAAE;gBAC5D,UAAU,IAAI,CAAC,CAAC;gBAChB,IAAI,UAAU,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACnC,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACnC,CAAC;SACF,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,KAAK,EAAE,mBAAmB;YAC1B,GAAG,KAAK;YACR,OAAO,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YACpC,UAAU;YACV,mBAAmB,EAAE,MAAM;YAC3B,eAAe,EAAE,MAAM;YACvB,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAC7D,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CACtB,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"run-delivery-owner.test.js","sourceRoot":"","sources":["../src/run-delivery-owner.test.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime-hooks.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import type { Shell } from "./shell.js";
|
|
2
|
+
import { type TerminationGatePolicy } from "./termination-gate.js";
|
|
3
|
+
export { TerminationGate, TerminationGateError, validateTerminationGatePolicy } from "./termination-gate.js";
|
|
4
|
+
export type { TerminationGatePolicy, TerminationGateState } from "./termination-gate.js";
|
|
1
5
|
export declare const RUNTIME_HOOK_CONTRACT_VERSION: 1;
|
|
2
6
|
export declare const DEFAULT_RUNTIME_HOOK_TIMEOUT_MS = 5000;
|
|
3
7
|
export declare const DEFAULT_RUNTIME_HOOK_MAX_PAYLOAD_BYTES: number;
|
|
@@ -16,6 +20,7 @@ export interface RuntimeHookCapabilities {
|
|
|
16
20
|
surfaces: readonly RuntimeHookSurface[];
|
|
17
21
|
scopes: readonly RuntimeHookScope[];
|
|
18
22
|
durableReplay: true;
|
|
23
|
+
terminationGate: true;
|
|
19
24
|
fileEvents: "tool_attributed";
|
|
20
25
|
}
|
|
21
26
|
export declare const PORTABLE_RUNTIME_HOOK_CAPABILITIES: RuntimeHookCapabilities;
|
|
@@ -110,6 +115,8 @@ export interface RuntimeHookDefinition {
|
|
|
110
115
|
enabled?: boolean;
|
|
111
116
|
/** Recursive hook execution is denied unless explicitly enabled and bounded. */
|
|
112
117
|
allowRecursive?: boolean;
|
|
118
|
+
/** Opt-in pre-completion validation with bounded same-agent continuation. */
|
|
119
|
+
terminationGate?: TerminationGatePolicy;
|
|
113
120
|
}
|
|
114
121
|
export interface RuntimeHookPack {
|
|
115
122
|
version: typeof RUNTIME_HOOK_CONTRACT_VERSION;
|
|
@@ -144,16 +151,29 @@ export type RuntimeHookDecision = {
|
|
|
144
151
|
action: "stop";
|
|
145
152
|
reason?: string;
|
|
146
153
|
feedback?: string;
|
|
154
|
+
} | {
|
|
155
|
+
action: "continue";
|
|
156
|
+
feedback: RuntimeHookJson;
|
|
147
157
|
};
|
|
148
158
|
export interface RuntimeHookHandlerResult {
|
|
149
159
|
decision?: RuntimeHookDecision;
|
|
150
160
|
output?: RuntimeHookJson;
|
|
151
161
|
}
|
|
162
|
+
/** Trusted live resources, never serialized into hook envelopes or model context. */
|
|
163
|
+
export interface RuntimeHookResources {
|
|
164
|
+
shell?: Shell;
|
|
165
|
+
cwd?: string;
|
|
166
|
+
executeTool?: (name: string, input: Record<string, unknown>, execution: {
|
|
167
|
+
callId: string;
|
|
168
|
+
signal: AbortSignal;
|
|
169
|
+
}) => Promise<string>;
|
|
170
|
+
}
|
|
152
171
|
export interface RuntimeHookExecutionRequest {
|
|
153
172
|
hook: RuntimeHookDefinition;
|
|
154
173
|
envelope: RuntimeHookEnvelope;
|
|
155
174
|
idempotencyKey: string;
|
|
156
175
|
signal: AbortSignal;
|
|
176
|
+
resources?: RuntimeHookResources;
|
|
157
177
|
}
|
|
158
178
|
export interface RuntimeHookHost {
|
|
159
179
|
execute(request: RuntimeHookExecutionRequest): Promise<RuntimeHookHandlerResult | void>;
|
|
@@ -181,7 +201,7 @@ export interface RuntimeHookExecution {
|
|
|
181
201
|
startedAt: string;
|
|
182
202
|
completedAt: string;
|
|
183
203
|
durationMs: number;
|
|
184
|
-
outcome: "allowed" | "denied" | "modified" | "stopped" | "observed" | "failed" | "timed_out";
|
|
204
|
+
outcome: "allowed" | "denied" | "modified" | "stopped" | "continued" | "observed" | "failed" | "timed_out";
|
|
185
205
|
decision?: RuntimeHookDecision["action"];
|
|
186
206
|
error?: string;
|
|
187
207
|
replayed?: boolean;
|
|
@@ -197,11 +217,14 @@ export interface RuntimeHookDispatchInput {
|
|
|
197
217
|
identity?: RuntimeHookIdentity;
|
|
198
218
|
data?: Record<string, unknown>;
|
|
199
219
|
eventId?: string;
|
|
220
|
+
signal?: AbortSignal;
|
|
221
|
+
resources?: RuntimeHookResources;
|
|
200
222
|
occurredAt?: string;
|
|
201
223
|
origin?: RuntimeHookOrigin;
|
|
202
224
|
}
|
|
203
225
|
export interface RuntimeHookDispatcher {
|
|
204
226
|
dispatch(input: RuntimeHookDispatchInput): Promise<RuntimeHookDispatchResult>;
|
|
227
|
+
getTerminationGatePolicy?(input: Pick<RuntimeHookDispatchInput, "surface" | "identity">): TerminationGatePolicy | undefined;
|
|
205
228
|
}
|
|
206
229
|
export interface RuntimeHookEngineOptions {
|
|
207
230
|
definitions: readonly RuntimeHookDefinition[];
|
|
@@ -226,6 +249,7 @@ export declare class RuntimeHookEngine implements RuntimeHookDispatcher {
|
|
|
226
249
|
private readonly maxPayloadBytes;
|
|
227
250
|
private readonly maxDepth;
|
|
228
251
|
constructor(options: RuntimeHookEngineOptions);
|
|
252
|
+
getTerminationGatePolicy(input: Pick<RuntimeHookDispatchInput, "surface" | "identity">): TerminationGatePolicy | undefined;
|
|
229
253
|
dispatch(input: RuntimeHookDispatchInput): Promise<RuntimeHookDispatchResult>;
|
|
230
254
|
private execute;
|
|
231
255
|
}
|
|
@@ -237,5 +261,4 @@ export declare function runtimeHookIdempotencyKey(eventId: string, hookId: strin
|
|
|
237
261
|
export declare function matchesRuntimeHook(matcher: RuntimeHookMatcher | undefined, envelope: RuntimeHookEnvelope): boolean;
|
|
238
262
|
/** Normalize file mutations produced by the portable workspace tool contract. */
|
|
239
263
|
export declare function runtimeHookFileChangeForTool(tool: string, input: Readonly<Record<string, unknown>>, result: string): Record<string, RuntimeHookJson> | undefined;
|
|
240
|
-
export {};
|
|
241
264
|
//# sourceMappingURL=runtime-hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-hooks.d.ts","sourceRoot":"","sources":["../src/runtime-hooks.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,EAAG,CAAU,CAAC;AACxD,eAAO,MAAM,+BAA+B,OAAQ,CAAC;AACrD,eAAO,MAAM,sCAAsC,QAAa,CAAC;AACjE,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,MAAM,MAAM,oBAAoB,GAC5B,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,WAAW,GACX,YAAY,GACZ,cAAc,GACd,aAAa,GACb,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,iBAAiB,GACjB,YAAY,GACZ,YAAY,GACZ,kBAAkB,GAClB,aAAa,GACb,WAAW,GACX,wBAAwB,GACxB,uBAAuB,GACvB,qBAAqB,GACrB,oBAAoB,GACpB,YAAY,GACZ,aAAa,GACb,iBAAiB,GACjB,YAAY,GACZ,WAAW,GACX,UAAU,GACV,eAAe,GACf,qBAAqB,GACrB,sBAAsB,GACtB,aAAa,GACb,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,MAAM,GACN,SAAS,GACT,MAAM,GACN,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,cAAc,GACd,SAAS,GACT,aAAa,GACb,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,CAAC;AAEX,eAAO,MAAM,wBAAwB,sjBAOe,CAAC;AAErD,eAAO,MAAM,0BAA0B,qEAEmB,CAAC;AAE3D,eAAO,MAAM,0BAA0B,qEAEW,CAAC;AAEnD,eAAO,MAAM,wBAAwB,mGAEW,CAAC;AAEjD,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,OAAO,6BAA6B,CAAC;IACtD,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACxC,YAAY,EAAE,SAAS,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;IACpD,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,aAAa,EAAE,IAAI,CAAC;IACpB,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED,eAAO,MAAM,kCAAkC,EAAE,
|
|
1
|
+
{"version":3,"file":"runtime-hooks.d.ts","sourceRoot":"","sources":["../src/runtime-hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime-hooks.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { intersectTerminationGatePolicies, validateTerminationGatePolicy } from "./termination-gate.js";
|
|
2
|
+
export { TerminationGate, TerminationGateError, validateTerminationGatePolicy } from "./termination-gate.js";
|
|
1
3
|
export const RUNTIME_HOOK_CONTRACT_VERSION = 1;
|
|
2
4
|
export const DEFAULT_RUNTIME_HOOK_TIMEOUT_MS = 5_000;
|
|
3
5
|
export const DEFAULT_RUNTIME_HOOK_MAX_PAYLOAD_BYTES = 256 * 1024;
|
|
@@ -26,6 +28,7 @@ export const PORTABLE_RUNTIME_HOOK_CAPABILITIES = Object.freeze({
|
|
|
26
28
|
surfaces: RUNTIME_HOOK_SURFACE_NAMES,
|
|
27
29
|
scopes: RUNTIME_HOOK_SCOPE_NAMES,
|
|
28
30
|
durableReplay: true,
|
|
31
|
+
terminationGate: true,
|
|
29
32
|
fileEvents: "tool_attributed",
|
|
30
33
|
});
|
|
31
34
|
const SCOPE_ORDER = {
|
|
@@ -65,7 +68,14 @@ export class RuntimeHookEngine {
|
|
|
65
68
|
this.maxDepth = options.maxDepth ?? DEFAULT_RUNTIME_HOOK_MAX_DEPTH;
|
|
66
69
|
this.definitions = options.definitions.map((definition, index) => validateRuntimeHookDefinition(definition, index));
|
|
67
70
|
}
|
|
71
|
+
getTerminationGatePolicy(input) {
|
|
72
|
+
const envelope = createRuntimeHookEnvelope({ ...input, event: "turn:stop" }, this.now, this.maxPayloadBytes);
|
|
73
|
+
return intersectTerminationGatePolicies(this.definitions
|
|
74
|
+
.filter(hook => hook.enabled !== false && hook.terminationGate && matchesRuntimeHook(hook.matcher, envelope))
|
|
75
|
+
.map(hook => hook.terminationGate));
|
|
76
|
+
}
|
|
68
77
|
async dispatch(input) {
|
|
78
|
+
input.signal?.throwIfAborted();
|
|
69
79
|
const envelope = createRuntimeHookEnvelope(input, this.now, this.maxPayloadBytes);
|
|
70
80
|
const matching = this.definitions
|
|
71
81
|
.map((definition, declarationOrder) => ({ definition, declarationOrder }))
|
|
@@ -85,17 +95,17 @@ export class RuntimeHookEngine {
|
|
|
85
95
|
const executions = [];
|
|
86
96
|
let decision = { action: "allow" };
|
|
87
97
|
for (const { definition } of controlling) {
|
|
88
|
-
const result = await this.execute(definition, envelope);
|
|
98
|
+
const result = await this.execute(definition, envelope, false, input.signal, input.resources);
|
|
89
99
|
executions.push(result.execution);
|
|
90
100
|
if (!result.replayed)
|
|
91
101
|
await this.host.trace?.(result.execution, result.decision, envelope);
|
|
92
102
|
if (result.decision)
|
|
93
103
|
decision = composeRuntimeHookDecision(decision, result.decision);
|
|
94
|
-
if (["deny", "ask", "defer", "stop"].includes(decision.action))
|
|
104
|
+
if (["deny", "ask", "defer", "stop", "continue"].includes(decision.action))
|
|
95
105
|
break;
|
|
96
106
|
}
|
|
97
107
|
const observed = await Promise.all(observing.map(async ({ definition }) => {
|
|
98
|
-
const result = await this.execute(definition, envelope, true);
|
|
108
|
+
const result = await this.execute(definition, envelope, true, input.signal, input.resources);
|
|
99
109
|
if (!result.replayed)
|
|
100
110
|
await this.host.trace?.(result.execution, undefined, envelope);
|
|
101
111
|
return result.execution;
|
|
@@ -103,17 +113,22 @@ export class RuntimeHookEngine {
|
|
|
103
113
|
executions.push(...observed);
|
|
104
114
|
return { envelope, decision, executions };
|
|
105
115
|
}
|
|
106
|
-
async execute(hook, envelope, observeOnly = false) {
|
|
116
|
+
async execute(hook, envelope, observeOnly = false, parentSignal, resources) {
|
|
107
117
|
const startedAt = this.now().toISOString();
|
|
118
|
+
parentSignal?.throwIfAborted();
|
|
108
119
|
const controller = new AbortController();
|
|
120
|
+
const abort = () => controller.abort(parentSignal?.reason);
|
|
121
|
+
parentSignal?.addEventListener("abort", abort, { once: true });
|
|
109
122
|
const timeoutMs = hook.handler.timeoutMs ?? DEFAULT_RUNTIME_HOOK_TIMEOUT_MS;
|
|
110
123
|
const timeout = setTimeout(() => controller.abort(new Error("Runtime hook timed out")), timeoutMs);
|
|
111
124
|
const idempotencyKey = runtimeHookIdempotencyKey(envelope.eventId, hook.id);
|
|
125
|
+
const attempt = hook.terminationGate && Number.isSafeInteger(envelope.data.terminationAttempt) && Number(envelope.data.terminationAttempt) > 0 ? Number(envelope.data.terminationAttempt) : 1;
|
|
112
126
|
const request = {
|
|
113
127
|
hook,
|
|
114
128
|
envelope,
|
|
115
129
|
idempotencyKey,
|
|
116
130
|
signal: controller.signal,
|
|
131
|
+
...(resources ? { resources } : {}),
|
|
117
132
|
};
|
|
118
133
|
try {
|
|
119
134
|
const replay = await this.host.findCompleted?.(request);
|
|
@@ -122,19 +137,20 @@ export class RuntimeHookEngine {
|
|
|
122
137
|
const decision = observeOnly
|
|
123
138
|
? undefined
|
|
124
139
|
: normalizeRuntimeHookDecision(replay.decision);
|
|
140
|
+
validateGateDecision(hook, envelope.event, decision, observeOnly);
|
|
125
141
|
return {
|
|
126
142
|
execution: { ...replay.execution, replayed: true },
|
|
127
143
|
...(decision ? { decision } : {}),
|
|
128
144
|
replayed: true,
|
|
129
145
|
};
|
|
130
146
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
]);
|
|
147
|
+
controller.signal.throwIfAborted();
|
|
148
|
+
const aborted = new Promise((_, reject) => {
|
|
149
|
+
controller.signal.addEventListener("abort", () => reject(controller.signal.reason), { once: true });
|
|
150
|
+
});
|
|
151
|
+
const result = await Promise.race([aborted, this.host.execute(request)]);
|
|
137
152
|
const decision = observeOnly ? undefined : normalizeRuntimeHookDecision(result?.decision);
|
|
153
|
+
validateGateDecision(hook, envelope.event, decision, observeOnly);
|
|
138
154
|
const completedAt = this.now().toISOString();
|
|
139
155
|
return {
|
|
140
156
|
...(decision ? { decision } : {}),
|
|
@@ -147,7 +163,7 @@ export class RuntimeHookEngine {
|
|
|
147
163
|
scope: hook.scope ?? "project",
|
|
148
164
|
mode: hook.mode ?? "control",
|
|
149
165
|
priority: hook.priority ?? 0,
|
|
150
|
-
attempt
|
|
166
|
+
attempt,
|
|
151
167
|
timeoutMs,
|
|
152
168
|
onFailure: hook.onFailure ?? "continue",
|
|
153
169
|
startedAt,
|
|
@@ -159,9 +175,9 @@ export class RuntimeHookEngine {
|
|
|
159
175
|
? "denied"
|
|
160
176
|
: decision?.action === "modify"
|
|
161
177
|
? "modified"
|
|
162
|
-
: decision?.action === "stop"
|
|
163
|
-
? "
|
|
164
|
-
: "allowed",
|
|
178
|
+
: decision?.action === "continue" || (hook.terminationGate && decision?.action === "stop" && Boolean(decision.feedback?.trim()))
|
|
179
|
+
? "continued"
|
|
180
|
+
: decision?.action === "stop" ? "stopped" : "allowed",
|
|
165
181
|
...(decision ? { decision: decision.action } : {}),
|
|
166
182
|
},
|
|
167
183
|
};
|
|
@@ -179,7 +195,7 @@ export class RuntimeHookEngine {
|
|
|
179
195
|
scope: hook.scope ?? "project",
|
|
180
196
|
mode: hook.mode ?? "control",
|
|
181
197
|
priority: hook.priority ?? 0,
|
|
182
|
-
attempt
|
|
198
|
+
attempt,
|
|
183
199
|
timeoutMs,
|
|
184
200
|
onFailure: hook.onFailure ?? "continue",
|
|
185
201
|
startedAt,
|
|
@@ -188,7 +204,7 @@ export class RuntimeHookEngine {
|
|
|
188
204
|
outcome: timedOut ? "timed_out" : "failed",
|
|
189
205
|
error: message,
|
|
190
206
|
};
|
|
191
|
-
if (!observeOnly && (hook.onFailure ?? "continue") === "block") {
|
|
207
|
+
if (!observeOnly && (error instanceof RuntimeHookBlockedError || hook.terminationGate || (hook.onFailure ?? "continue") === "block")) {
|
|
192
208
|
return {
|
|
193
209
|
execution,
|
|
194
210
|
decision: { action: "deny", reason: message, code: timedOut ? "runtime_hook_timeout" : "runtime_hook_failed" },
|
|
@@ -198,9 +214,19 @@ export class RuntimeHookEngine {
|
|
|
198
214
|
}
|
|
199
215
|
finally {
|
|
200
216
|
clearTimeout(timeout);
|
|
217
|
+
parentSignal?.removeEventListener("abort", abort);
|
|
201
218
|
}
|
|
202
219
|
}
|
|
203
220
|
}
|
|
221
|
+
function validateGateDecision(hook, event, decision, observeOnly) {
|
|
222
|
+
if (observeOnly)
|
|
223
|
+
return;
|
|
224
|
+
if (hook.terminationGate && (!decision || decision.action === "modify"))
|
|
225
|
+
throw new RuntimeHookBlockedError("Termination validator must return an explicit decision", hook.id);
|
|
226
|
+
if (decision?.action === "continue" && (!hook.terminationGate || event !== "turn:stop")) {
|
|
227
|
+
throw new RuntimeHookBlockedError("Continuation requires a configured turn:stop termination gate", hook.id);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
204
230
|
function assertReplayMatches(replay, request) {
|
|
205
231
|
const execution = replay.execution;
|
|
206
232
|
if (execution.idempotencyKey !== request.idempotencyKey
|
|
@@ -250,6 +276,13 @@ export function validateRuntimeHookPack(input) {
|
|
|
250
276
|
export function validateRuntimeHookDefinition(input, index = 0) {
|
|
251
277
|
if (!isRecord(input))
|
|
252
278
|
throw new RuntimeHookValidationError(`Hook ${index} must be an object`);
|
|
279
|
+
if (input.terminationGate !== undefined) {
|
|
280
|
+
if (input.event !== "turn:stop" || input.mode === "observe")
|
|
281
|
+
throw new RuntimeHookValidationError("terminationGate is only valid for controlling turn:stop hooks");
|
|
282
|
+
validateTerminationGatePolicy(input.terminationGate);
|
|
283
|
+
if (input.handler?.type === "prompt" || input.handler?.type === "agent")
|
|
284
|
+
throw new RuntimeHookValidationError("terminationGate requires a deterministic command, HTTP, tool or MCP validator");
|
|
285
|
+
}
|
|
253
286
|
if (typeof input.id !== "string" || !input.id.trim() || input.id.length > 128) {
|
|
254
287
|
throw new RuntimeHookValidationError(`Hook ${index} id must contain 1-128 characters`);
|
|
255
288
|
}
|
|
@@ -392,6 +425,7 @@ export function composeRuntimeHookDecision(current, next) {
|
|
|
392
425
|
defer: 2,
|
|
393
426
|
ask: 3,
|
|
394
427
|
stop: 4,
|
|
428
|
+
continue: 4,
|
|
395
429
|
deny: 5,
|
|
396
430
|
};
|
|
397
431
|
if (current.action === "modify" && next.action === "modify") {
|
|
@@ -440,9 +474,12 @@ export function runtimeHookFileChangeForTool(tool, input, result) {
|
|
|
440
474
|
function normalizeRuntimeHookDecision(decision) {
|
|
441
475
|
if (!decision)
|
|
442
476
|
return undefined;
|
|
443
|
-
if (!["allow", "deny", "ask", "defer", "modify", "stop"].includes(decision.action)) {
|
|
477
|
+
if (!["allow", "deny", "ask", "defer", "modify", "stop", "continue"].includes(decision.action)) {
|
|
444
478
|
throw new RuntimeHookValidationError("Hook returned an unsupported decision");
|
|
445
479
|
}
|
|
480
|
+
if (decision.action === "continue" && (decision.feedback === undefined || decision.feedback === null || decision.feedback === "")) {
|
|
481
|
+
throw new RuntimeHookValidationError("Continuation requires non-empty validation feedback");
|
|
482
|
+
}
|
|
446
483
|
return sanitizeRuntimeHookValue(decision, 64 * 1024);
|
|
447
484
|
}
|
|
448
485
|
function sanitizeRuntimeHookValue(value, maxBytes) {
|