@graphrefly/ts 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +135 -0
- package/dist/adapters/index.cjs +105 -66
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +11 -136
- package/dist/adapters/index.d.ts +11 -136
- package/dist/adapters/index.js +27 -225
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/observe-storage.d.cts +4 -4
- package/dist/adapters/observe-storage.d.ts +4 -4
- package/dist/adapters/observe-storage.js +1 -0
- package/dist/adapters/observe-storage.js.map +1 -1
- package/dist/adapters/react.cjs +166 -0
- package/dist/adapters/react.cjs.map +1 -0
- package/dist/adapters/react.d.cts +31 -0
- package/dist/adapters/react.d.ts +31 -0
- package/dist/adapters/react.js +51 -0
- package/dist/adapters/react.js.map +1 -0
- package/dist/adapters/solid.cjs +157 -0
- package/dist/adapters/solid.cjs.map +1 -0
- package/dist/adapters/solid.d.cts +26 -0
- package/dist/adapters/solid.d.ts +26 -0
- package/dist/adapters/solid.js +48 -0
- package/dist/adapters/solid.js.map +1 -0
- package/dist/adapters/svelte.cjs +148 -0
- package/dist/adapters/svelte.cjs.map +1 -0
- package/dist/adapters/svelte.d.cts +31 -0
- package/dist/adapters/svelte.d.ts +31 -0
- package/dist/adapters/svelte.js +46 -0
- package/dist/adapters/svelte.js.map +1 -0
- package/dist/adapters/vue.cjs +155 -0
- package/dist/adapters/vue.cjs.map +1 -0
- package/dist/adapters/vue.d.cts +26 -0
- package/dist/adapters/vue.d.ts +26 -0
- package/dist/adapters/vue.js +46 -0
- package/dist/adapters/vue.js.map +1 -0
- package/dist/agent-runtime-BesGDZcB.d.ts +555 -0
- package/dist/agent-runtime-DZTJ3C-p.d.cts +555 -0
- package/dist/agentic-memory-BmRCvh0d.d.ts +517 -0
- package/dist/agentic-memory-DfuVZ-lY.d.cts +517 -0
- package/dist/capability-admission-B0BzqAm5.d.cts +102 -0
- package/dist/capability-admission-g0mn9hpq.d.ts +102 -0
- package/dist/{chunk-JR4IKCR2.js → chunk-2747WN4Y.js} +5 -5
- package/dist/{chunk-2ILL7HQI.js → chunk-3JR3EDB2.js} +17 -17
- package/dist/{chunk-2ILL7HQI.js.map → chunk-3JR3EDB2.js.map} +1 -1
- package/dist/{chunk-GDL26N2T.js → chunk-3KN7NJDR.js} +2 -2
- package/dist/{chunk-DJC4CHLQ.js → chunk-43BKLFZU.js} +9 -9
- package/dist/chunk-6XAIOL3X.js +2407 -0
- package/dist/chunk-6XAIOL3X.js.map +1 -0
- package/dist/{chunk-SCRFRCGR.js → chunk-BSQGE5PS.js} +1 -1
- package/dist/{chunk-Y3ZLRGHC.js → chunk-CZNV3VXM.js} +16 -16
- package/dist/chunk-DGUM43GV.js +11 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/{chunk-JIMUDQN3.js → chunk-FBUU43PM.js} +2 -2
- package/dist/chunk-H75VXTGT.js +219 -0
- package/dist/chunk-H75VXTGT.js.map +1 -0
- package/dist/{chunk-RIIOUTGM.js → chunk-HKK2JD7Z.js} +12 -9
- package/dist/chunk-HKK2JD7Z.js.map +1 -0
- package/dist/{chunk-D6BG7U6A.js → chunk-IXZBUWSP.js} +3 -3
- package/dist/chunk-PC3BTTBE.js +3217 -0
- package/dist/chunk-PC3BTTBE.js.map +1 -0
- package/dist/chunk-QFY4AFY4.js +879 -0
- package/dist/chunk-QFY4AFY4.js.map +1 -0
- package/dist/{chunk-DK554R7P.js → chunk-S6HXABGL.js} +2 -1
- package/dist/chunk-S6HXABGL.js.map +1 -0
- package/dist/{chunk-PKVBHGBM.js → chunk-SS2A464I.js} +7 -7
- package/dist/chunk-UT3MHJCW.js +49 -0
- package/dist/chunk-UT3MHJCW.js.map +1 -0
- package/dist/{chunk-G4M3NHRJ.js → chunk-V7CIJE4B.js} +3 -3
- package/dist/{chunk-TEW47IVR.js → chunk-VPEFSDME.js} +2 -2
- package/dist/chunk-VTHLCFN4.js +368 -0
- package/dist/chunk-VTHLCFN4.js.map +1 -0
- package/dist/{chunk-SWTLEQL6.js → chunk-WQIA3GFB.js} +2 -2
- package/dist/chunk-WQIA3GFB.js.map +1 -0
- package/dist/{chunk-I3IHOHCJ.js → chunk-XKXWK2KP.js} +108 -64
- package/dist/chunk-XKXWK2KP.js.map +1 -0
- package/dist/{chunk-COHO25CZ.js → chunk-YDSIVHRR.js} +553 -7
- package/dist/chunk-YDSIVHRR.js.map +1 -0
- package/dist/chunk-YXMZ2N6J.js +1884 -0
- package/dist/chunk-YXMZ2N6J.js.map +1 -0
- package/dist/composition/index.cjs +102 -57
- package/dist/composition/index.cjs.map +1 -1
- package/dist/composition/index.d.cts +4 -4
- package/dist/composition/index.d.ts +4 -4
- package/dist/composition/index.js +6 -5
- package/dist/core/index.cjs +102 -57
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +5 -4
- package/dist/cqrs/index.cjs.map +1 -1
- package/dist/cqrs/index.d.cts +4 -4
- package/dist/cqrs/index.d.ts +4 -4
- package/dist/cqrs/index.js +3 -2
- package/dist/cqrs/index.js.map +1 -1
- package/dist/cqrs/messaging.cjs +312 -0
- package/dist/cqrs/messaging.cjs.map +1 -0
- package/dist/cqrs/messaging.d.cts +57 -0
- package/dist/cqrs/messaging.d.ts +57 -0
- package/dist/cqrs/messaging.js +274 -0
- package/dist/cqrs/messaging.js.map +1 -0
- package/dist/cqrs/work-queue.cjs +329 -0
- package/dist/cqrs/work-queue.cjs.map +1 -0
- package/dist/cqrs/work-queue.d.cts +90 -0
- package/dist/cqrs/work-queue.d.ts +90 -0
- package/dist/cqrs/work-queue.js +292 -0
- package/dist/cqrs/work-queue.js.map +1 -0
- package/dist/data/index.cjs +19 -0
- package/dist/data/index.cjs.map +1 -0
- package/dist/data/index.d.cts +36 -0
- package/dist/data/index.d.ts +36 -0
- package/dist/data/index.js +1 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data-structures/index.cjs +105 -57
- package/dist/data-structures/index.cjs.map +1 -1
- package/dist/data-structures/index.d.cts +8 -8
- package/dist/data-structures/index.d.ts +8 -8
- package/dist/data-structures/index.js +7 -6
- package/dist/{describe-BZb7AS2y.d.ts → describe-BpyJuWkw.d.ts} +1 -1
- package/dist/{describe-Ciu8SUnN.d.cts → describe-DYMw_l1C.d.cts} +1 -1
- package/dist/executors/work-queue.cjs +342 -0
- package/dist/executors/work-queue.cjs.map +1 -0
- package/dist/executors/work-queue.d.cts +90 -0
- package/dist/executors/work-queue.d.ts +90 -0
- package/dist/executors/work-queue.js +306 -0
- package/dist/executors/work-queue.js.map +1 -0
- package/dist/graph/index.cjs +112 -58
- package/dist/graph/index.cjs.map +1 -1
- package/dist/graph/index.d.cts +9 -9
- package/dist/graph/index.d.ts +9 -9
- package/dist/graph/index.js +18 -17
- package/dist/{graph-DfdF9zy4.d.ts → graph-D-1-SQeC.d.ts} +3 -3
- package/dist/{graph-s23RbbFO.d.cts → graph-DCEWh4T2.d.cts} +3 -3
- package/dist/{index-CAEmLCYF.d.cts → index-72VZC0-E.d.cts} +2 -2
- package/dist/{index-SnzZu3x7.d.ts → index-Bmxeu0nK.d.ts} +2 -2
- package/dist/index.cjs +112 -58
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -10
- package/dist/index.d.ts +11 -10
- package/dist/index.js +118 -113
- package/dist/inspection/boundary.cjs +98 -0
- package/dist/inspection/boundary.cjs.map +1 -0
- package/dist/inspection/boundary.d.cts +61 -0
- package/dist/inspection/boundary.d.ts +61 -0
- package/dist/inspection/boundary.js +75 -0
- package/dist/inspection/boundary.js.map +1 -0
- package/dist/{messages-BZqrGGm1.d.ts → messages-CAzUPPJM.d.cts} +10 -5
- package/dist/{messages-BZqrGGm1.d.cts → messages-CAzUPPJM.d.ts} +10 -5
- package/dist/messaging/index.cjs +744 -613
- package/dist/messaging/index.cjs.map +1 -1
- package/dist/messaging/index.d.cts +216 -160
- package/dist/messaging/index.d.ts +216 -160
- package/dist/messaging/index.js +19 -749
- package/dist/messaging/index.js.map +1 -1
- package/dist/operators/index.cjs +102 -57
- package/dist/operators/index.cjs.map +1 -1
- package/dist/operators/index.d.cts +6 -6
- package/dist/operators/index.d.ts +6 -6
- package/dist/operators/index.js +8 -7
- package/dist/orchestration/index.cjs +3333 -59
- package/dist/orchestration/index.cjs.map +1 -1
- package/dist/orchestration/index.d.cts +7 -4
- package/dist/orchestration/index.d.ts +7 -4
- package/dist/orchestration/index.js +49 -8
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/messaging.cjs +314 -0
- package/dist/orchestration/messaging.cjs.map +1 -0
- package/dist/orchestration/messaging.d.cts +59 -0
- package/dist/orchestration/messaging.d.ts +59 -0
- package/dist/orchestration/messaging.js +276 -0
- package/dist/orchestration/messaging.js.map +1 -0
- package/dist/orchestration/work-queue.cjs +262 -0
- package/dist/orchestration/work-queue.cjs.map +1 -0
- package/dist/orchestration/work-queue.d.cts +85 -0
- package/dist/orchestration/work-queue.d.ts +85 -0
- package/dist/orchestration/work-queue.js +226 -0
- package/dist/orchestration/work-queue.js.map +1 -0
- package/dist/patterns/event-flow.cjs +447 -0
- package/dist/patterns/event-flow.cjs.map +1 -0
- package/dist/patterns/event-flow.d.cts +115 -0
- package/dist/patterns/event-flow.d.ts +115 -0
- package/dist/patterns/event-flow.js +14 -0
- package/dist/patterns/event-flow.js.map +1 -0
- package/dist/patterns/index.cjs +423 -18
- package/dist/patterns/index.cjs.map +1 -1
- package/dist/patterns/index.d.cts +8 -5
- package/dist/patterns/index.d.ts +8 -5
- package/dist/patterns/index.js +13 -4
- package/dist/{reactive-collection-Cb1II1Fi.d.ts → reactive-collection-BAmfrGjd.d.ts} +9 -9
- package/dist/{reactive-collection-BxBqtIOE.d.cts → reactive-collection-DNV0-gFi.d.cts} +9 -9
- package/dist/{reactive-collection-storage-D-KmjE0J.d.cts → reactive-collection-storage-BNEldDyi.d.cts} +5 -5
- package/dist/{reactive-collection-storage-BNiEc-Gd.d.ts → reactive-collection-storage-YZsAQsWK.d.ts} +5 -5
- package/dist/{reactive-map-D-g3dv8I.d.cts → reactive-map-DRD1LJ2H.d.cts} +6 -6
- package/dist/{reactive-map-BcB4KsQR.d.ts → reactive-map-EsDiCmJk.d.ts} +6 -6
- package/dist/render/index.d.cts +3 -3
- package/dist/render/index.d.ts +3 -3
- package/dist/render/index.js +1 -0
- package/dist/{semantic-memory-graph-BYoIlP35.d.cts → semantic-memory-graph-DKuNzuWw.d.cts} +2 -2
- package/dist/{semantic-memory-graph-CxyXLms3.d.ts → semantic-memory-graph-uwbwJdhe.d.ts} +2 -2
- package/dist/solutions/index.cjs +4478 -2
- package/dist/solutions/index.cjs.map +1 -1
- package/dist/solutions/index.d.cts +13 -519
- package/dist/solutions/index.d.ts +13 -519
- package/dist/solutions/index.js +90 -6
- package/dist/solutions/reactive-layout/browser/index.cjs +449 -0
- package/dist/solutions/reactive-layout/browser/index.cjs.map +1 -0
- package/dist/solutions/reactive-layout/browser/index.d.cts +44 -0
- package/dist/solutions/reactive-layout/browser/index.d.ts +44 -0
- package/dist/solutions/reactive-layout/browser/index.js +69 -0
- package/dist/solutions/reactive-layout/browser/index.js.map +1 -0
- package/dist/solutions/reactive-layout/index.cjs +4266 -0
- package/dist/solutions/reactive-layout/index.cjs.map +1 -0
- package/dist/solutions/reactive-layout/index.d.cts +581 -0
- package/dist/solutions/reactive-layout/index.d.ts +581 -0
- package/dist/solutions/reactive-layout/index.js +86 -0
- package/dist/solutions/reactive-layout/index.js.map +1 -0
- package/dist/solutions/reactive-layout/node-canvas/index.cjs +545 -0
- package/dist/solutions/reactive-layout/node-canvas/index.cjs.map +1 -0
- package/dist/solutions/reactive-layout/node-canvas/index.d.cts +54 -0
- package/dist/solutions/reactive-layout/node-canvas/index.d.ts +54 -0
- package/dist/solutions/reactive-layout/node-canvas/index.js +131 -0
- package/dist/solutions/reactive-layout/node-canvas/index.js.map +1 -0
- package/dist/solutions/reactive-layout/react-native/index.cjs +494 -0
- package/dist/solutions/reactive-layout/react-native/index.cjs.map +1 -0
- package/dist/solutions/reactive-layout/react-native/index.d.cts +51 -0
- package/dist/solutions/reactive-layout/react-native/index.d.ts +51 -0
- package/dist/solutions/reactive-layout/react-native/index.js +77 -0
- package/dist/solutions/reactive-layout/react-native/index.js.map +1 -0
- package/dist/solutions/reactive-layout/skia/index.cjs +547 -0
- package/dist/solutions/reactive-layout/skia/index.cjs.map +1 -0
- package/dist/solutions/reactive-layout/skia/index.d.cts +64 -0
- package/dist/solutions/reactive-layout/skia/index.d.ts +64 -0
- package/dist/solutions/reactive-layout/skia/index.js +70 -0
- package/dist/solutions/reactive-layout/skia/index.js.map +1 -0
- package/dist/solutions/work-item/actions.cjs +2164 -0
- package/dist/solutions/work-item/actions.cjs.map +1 -0
- package/dist/solutions/work-item/actions.d.cts +201 -0
- package/dist/solutions/work-item/actions.d.ts +201 -0
- package/dist/solutions/work-item/actions.js +1454 -0
- package/dist/solutions/work-item/actions.js.map +1 -0
- package/dist/solutions/work-item/scheduling.cjs +2454 -0
- package/dist/solutions/work-item/scheduling.cjs.map +1 -0
- package/dist/solutions/work-item/scheduling.d.cts +433 -0
- package/dist/solutions/work-item/scheduling.d.ts +433 -0
- package/dist/solutions/work-item/scheduling.js +32 -0
- package/dist/solutions/work-item/scheduling.js.map +1 -0
- package/dist/solutions/work-item/work-queue.cjs +306 -0
- package/dist/solutions/work-item/work-queue.cjs.map +1 -0
- package/dist/solutions/work-item/work-queue.d.cts +71 -0
- package/dist/solutions/work-item/work-queue.d.ts +71 -0
- package/dist/solutions/work-item/work-queue.js +270 -0
- package/dist/solutions/work-item/work-queue.js.map +1 -0
- package/dist/sources/browser.cjs +169 -57
- package/dist/sources/browser.cjs.map +1 -1
- package/dist/sources/browser.d.cts +33 -6
- package/dist/sources/browser.d.ts +33 -6
- package/dist/sources/browser.js +73 -6
- package/dist/sources/browser.js.map +1 -1
- package/dist/sources/index.cjs +102 -57
- package/dist/sources/index.cjs.map +1 -1
- package/dist/sources/index.d.cts +5 -5
- package/dist/sources/index.d.ts +5 -5
- package/dist/sources/index.js +6 -5
- package/dist/sources/node.cjs.map +1 -1
- package/dist/sources/node.d.cts +4 -4
- package/dist/sources/node.d.ts +4 -4
- package/dist/sources/node.js +2 -1
- package/dist/sources/node.js.map +1 -1
- package/dist/storage/browser.js +1 -0
- package/dist/storage/browser.js.map +1 -1
- package/dist/storage/index.d.cts +5 -5
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +5 -4
- package/dist/storage/node.js +1 -0
- package/dist/storage/node.js.map +1 -1
- package/dist/store-C-joM4gh.d.ts +123 -0
- package/dist/store-CNJwmT-h.d.cts +123 -0
- package/dist/testing/index.cjs +1 -0
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +3 -2
- package/dist/{types-h12mNYbq.d.ts → types-BsJvElYZ.d.ts} +31 -31
- package/dist/{types-bNMSWKqF.d.cts → types-CcPIn7sy.d.cts} +31 -31
- package/dist/work-item-runtime-C3M79vE9.d.ts +228 -0
- package/dist/work-item-runtime-qaVgsL0T.d.cts +228 -0
- package/dist/work-queue/index.cjs +1132 -0
- package/dist/work-queue/index.cjs.map +1 -0
- package/dist/work-queue/index.d.cts +369 -0
- package/dist/work-queue/index.d.ts +369 -0
- package/dist/work-queue/index.js +1078 -0
- package/dist/work-queue/index.js.map +1 -0
- package/package.json +266 -2
- package/dist/chunk-COHO25CZ.js.map +0 -1
- package/dist/chunk-DK554R7P.js.map +0 -1
- package/dist/chunk-I3IHOHCJ.js.map +0 -1
- package/dist/chunk-RIIOUTGM.js.map +0 -1
- package/dist/chunk-SWTLEQL6.js.map +0 -1
- /package/dist/{chunk-JR4IKCR2.js.map → chunk-2747WN4Y.js.map} +0 -0
- /package/dist/{chunk-GDL26N2T.js.map → chunk-3KN7NJDR.js.map} +0 -0
- /package/dist/{chunk-DJC4CHLQ.js.map → chunk-43BKLFZU.js.map} +0 -0
- /package/dist/{chunk-SCRFRCGR.js.map → chunk-BSQGE5PS.js.map} +0 -0
- /package/dist/{chunk-Y3ZLRGHC.js.map → chunk-CZNV3VXM.js.map} +0 -0
- /package/dist/{chunk-JIMUDQN3.js.map → chunk-FBUU43PM.js.map} +0 -0
- /package/dist/{chunk-D6BG7U6A.js.map → chunk-IXZBUWSP.js.map} +0 -0
- /package/dist/{chunk-PKVBHGBM.js.map → chunk-SS2A464I.js.map} +0 -0
- /package/dist/{chunk-G4M3NHRJ.js.map → chunk-V7CIJE4B.js.map} +0 -0
- /package/dist/{chunk-TEW47IVR.js.map → chunk-VPEFSDME.js.map} +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { DataIssue } from '../data/index.cjs';
|
|
2
|
+
import { d as Graph } from '../graph-DCEWh4T2.cjs';
|
|
3
|
+
import { N as Node } from '../types-CcPIn7sy.cjs';
|
|
4
|
+
import { ProcessEffectRequest } from './index.cjs';
|
|
5
|
+
import { WorkQueueRecord, WorkQueueCommand } from '../work-queue/index.cjs';
|
|
6
|
+
import '../core/index.cjs';
|
|
7
|
+
import '../messages-CAzUPPJM.cjs';
|
|
8
|
+
import '../codec-BB7p8fJc.cjs';
|
|
9
|
+
import '../describe-DYMw_l1C.cjs';
|
|
10
|
+
import '../resilience-Dig3Q7n0.cjs';
|
|
11
|
+
import '../agent-runtime-DZTJ3C-p.cjs';
|
|
12
|
+
import '../work-item-runtime-qaVgsL0T.cjs';
|
|
13
|
+
import '../messaging/index.cjs';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Optional orchestration-over-workQueue recipe (D349/D353).
|
|
17
|
+
*
|
|
18
|
+
* Queue lifecycle remains disposition evidence. This module maps visible
|
|
19
|
+
* ProcessEffectRequest facts to queue commands and maps terminal queue records
|
|
20
|
+
* back to graph-visible orchestration evidence/status/issue facts.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
interface OrchestrationQueuedEffectPayload<TEffect = unknown> {
|
|
24
|
+
readonly kind: "orchestration-queued-effect";
|
|
25
|
+
readonly effect: ProcessEffectRequest<TEffect>;
|
|
26
|
+
readonly idempotencyKey?: string;
|
|
27
|
+
readonly sourceRefs?: readonly string[];
|
|
28
|
+
readonly policyRefs?: readonly string[];
|
|
29
|
+
readonly metadata?: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
interface OrchestrationQueueEvidence {
|
|
32
|
+
readonly kind: "orchestration-queue-evidence";
|
|
33
|
+
readonly evidenceId: string;
|
|
34
|
+
readonly effectId: string;
|
|
35
|
+
readonly effectType: string;
|
|
36
|
+
readonly workId: string;
|
|
37
|
+
readonly queueRecordKind: WorkQueueRecord["kind"];
|
|
38
|
+
readonly result?: unknown;
|
|
39
|
+
readonly error?: unknown;
|
|
40
|
+
readonly recordedAtMs: number;
|
|
41
|
+
}
|
|
42
|
+
interface OrchestrationQueueStatus {
|
|
43
|
+
readonly kind: "orchestration-queue-status";
|
|
44
|
+
readonly state: "evidence-recorded" | "mapping-issue";
|
|
45
|
+
readonly effectId?: string;
|
|
46
|
+
readonly effectType?: string;
|
|
47
|
+
readonly workId?: string;
|
|
48
|
+
readonly queueRecordKind?: WorkQueueRecord["kind"];
|
|
49
|
+
readonly evidenceId?: string;
|
|
50
|
+
readonly issues?: readonly DataIssue[];
|
|
51
|
+
}
|
|
52
|
+
interface OrchestrationQueueAuditRecord {
|
|
53
|
+
readonly kind: "orchestration-queue-audit";
|
|
54
|
+
readonly seq: number;
|
|
55
|
+
readonly outcome: "mapped" | "issue";
|
|
56
|
+
readonly effectId?: string;
|
|
57
|
+
readonly effectType?: string;
|
|
58
|
+
readonly workId?: string;
|
|
59
|
+
readonly queueRecordKind?: WorkQueueRecord["kind"];
|
|
60
|
+
readonly evidenceId?: string;
|
|
61
|
+
}
|
|
62
|
+
interface OrchestrationWorkQueueRecipeOptions<TEffect = unknown> {
|
|
63
|
+
readonly name?: string;
|
|
64
|
+
readonly effectRequests?: Node<ProcessEffectRequest<TEffect>>;
|
|
65
|
+
readonly records: Node<WorkQueueRecord<OrchestrationQueuedEffectPayload<TEffect>>>;
|
|
66
|
+
}
|
|
67
|
+
interface OrchestrationWorkQueueRecipeBundle<TEffect = unknown> {
|
|
68
|
+
readonly submitCommands?: Node<WorkQueueCommand<OrchestrationQueuedEffectPayload<TEffect>>>;
|
|
69
|
+
readonly evidence: Node<OrchestrationQueueEvidence>;
|
|
70
|
+
readonly status: Node<OrchestrationQueueStatus>;
|
|
71
|
+
readonly issues: Node<DataIssue>;
|
|
72
|
+
readonly audit: Node<OrchestrationQueueAuditRecord>;
|
|
73
|
+
}
|
|
74
|
+
/** Build the optional D349 orchestration workQueue recipe. */
|
|
75
|
+
declare function orchestrationWorkQueueRecipe<TEffect = unknown>(graph: Graph, opts: OrchestrationWorkQueueRecipeOptions<TEffect>): OrchestrationWorkQueueRecipeBundle<TEffect>;
|
|
76
|
+
declare function processEffectSubmitCommand<TEffect>(effect: ProcessEffectRequest<TEffect>, opts?: {
|
|
77
|
+
readonly workId?: string;
|
|
78
|
+
readonly commandId?: string;
|
|
79
|
+
readonly idempotencyKey?: string;
|
|
80
|
+
readonly sourceRefs?: readonly string[];
|
|
81
|
+
readonly policyRefs?: readonly string[];
|
|
82
|
+
readonly metadata?: Record<string, unknown>;
|
|
83
|
+
}): WorkQueueCommand<OrchestrationQueuedEffectPayload<TEffect>>;
|
|
84
|
+
|
|
85
|
+
export { type OrchestrationQueueAuditRecord, type OrchestrationQueueEvidence, type OrchestrationQueueStatus, type OrchestrationQueuedEffectPayload, type OrchestrationWorkQueueRecipeBundle, type OrchestrationWorkQueueRecipeOptions, orchestrationWorkQueueRecipe, processEffectSubmitCommand };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { DataIssue } from '../data/index.js';
|
|
2
|
+
import { d as Graph } from '../graph-D-1-SQeC.js';
|
|
3
|
+
import { N as Node } from '../types-BsJvElYZ.js';
|
|
4
|
+
import { ProcessEffectRequest } from './index.js';
|
|
5
|
+
import { WorkQueueRecord, WorkQueueCommand } from '../work-queue/index.js';
|
|
6
|
+
import '../core/index.js';
|
|
7
|
+
import '../messages-CAzUPPJM.js';
|
|
8
|
+
import '../codec-BB7p8fJc.js';
|
|
9
|
+
import '../describe-BpyJuWkw.js';
|
|
10
|
+
import '../resilience-Dig3Q7n0.js';
|
|
11
|
+
import '../agent-runtime-BesGDZcB.js';
|
|
12
|
+
import '../work-item-runtime-C3M79vE9.js';
|
|
13
|
+
import '../messaging/index.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Optional orchestration-over-workQueue recipe (D349/D353).
|
|
17
|
+
*
|
|
18
|
+
* Queue lifecycle remains disposition evidence. This module maps visible
|
|
19
|
+
* ProcessEffectRequest facts to queue commands and maps terminal queue records
|
|
20
|
+
* back to graph-visible orchestration evidence/status/issue facts.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
interface OrchestrationQueuedEffectPayload<TEffect = unknown> {
|
|
24
|
+
readonly kind: "orchestration-queued-effect";
|
|
25
|
+
readonly effect: ProcessEffectRequest<TEffect>;
|
|
26
|
+
readonly idempotencyKey?: string;
|
|
27
|
+
readonly sourceRefs?: readonly string[];
|
|
28
|
+
readonly policyRefs?: readonly string[];
|
|
29
|
+
readonly metadata?: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
interface OrchestrationQueueEvidence {
|
|
32
|
+
readonly kind: "orchestration-queue-evidence";
|
|
33
|
+
readonly evidenceId: string;
|
|
34
|
+
readonly effectId: string;
|
|
35
|
+
readonly effectType: string;
|
|
36
|
+
readonly workId: string;
|
|
37
|
+
readonly queueRecordKind: WorkQueueRecord["kind"];
|
|
38
|
+
readonly result?: unknown;
|
|
39
|
+
readonly error?: unknown;
|
|
40
|
+
readonly recordedAtMs: number;
|
|
41
|
+
}
|
|
42
|
+
interface OrchestrationQueueStatus {
|
|
43
|
+
readonly kind: "orchestration-queue-status";
|
|
44
|
+
readonly state: "evidence-recorded" | "mapping-issue";
|
|
45
|
+
readonly effectId?: string;
|
|
46
|
+
readonly effectType?: string;
|
|
47
|
+
readonly workId?: string;
|
|
48
|
+
readonly queueRecordKind?: WorkQueueRecord["kind"];
|
|
49
|
+
readonly evidenceId?: string;
|
|
50
|
+
readonly issues?: readonly DataIssue[];
|
|
51
|
+
}
|
|
52
|
+
interface OrchestrationQueueAuditRecord {
|
|
53
|
+
readonly kind: "orchestration-queue-audit";
|
|
54
|
+
readonly seq: number;
|
|
55
|
+
readonly outcome: "mapped" | "issue";
|
|
56
|
+
readonly effectId?: string;
|
|
57
|
+
readonly effectType?: string;
|
|
58
|
+
readonly workId?: string;
|
|
59
|
+
readonly queueRecordKind?: WorkQueueRecord["kind"];
|
|
60
|
+
readonly evidenceId?: string;
|
|
61
|
+
}
|
|
62
|
+
interface OrchestrationWorkQueueRecipeOptions<TEffect = unknown> {
|
|
63
|
+
readonly name?: string;
|
|
64
|
+
readonly effectRequests?: Node<ProcessEffectRequest<TEffect>>;
|
|
65
|
+
readonly records: Node<WorkQueueRecord<OrchestrationQueuedEffectPayload<TEffect>>>;
|
|
66
|
+
}
|
|
67
|
+
interface OrchestrationWorkQueueRecipeBundle<TEffect = unknown> {
|
|
68
|
+
readonly submitCommands?: Node<WorkQueueCommand<OrchestrationQueuedEffectPayload<TEffect>>>;
|
|
69
|
+
readonly evidence: Node<OrchestrationQueueEvidence>;
|
|
70
|
+
readonly status: Node<OrchestrationQueueStatus>;
|
|
71
|
+
readonly issues: Node<DataIssue>;
|
|
72
|
+
readonly audit: Node<OrchestrationQueueAuditRecord>;
|
|
73
|
+
}
|
|
74
|
+
/** Build the optional D349 orchestration workQueue recipe. */
|
|
75
|
+
declare function orchestrationWorkQueueRecipe<TEffect = unknown>(graph: Graph, opts: OrchestrationWorkQueueRecipeOptions<TEffect>): OrchestrationWorkQueueRecipeBundle<TEffect>;
|
|
76
|
+
declare function processEffectSubmitCommand<TEffect>(effect: ProcessEffectRequest<TEffect>, opts?: {
|
|
77
|
+
readonly workId?: string;
|
|
78
|
+
readonly commandId?: string;
|
|
79
|
+
readonly idempotencyKey?: string;
|
|
80
|
+
readonly sourceRefs?: readonly string[];
|
|
81
|
+
readonly policyRefs?: readonly string[];
|
|
82
|
+
readonly metadata?: Record<string, unknown>;
|
|
83
|
+
}): WorkQueueCommand<OrchestrationQueuedEffectPayload<TEffect>>;
|
|
84
|
+
|
|
85
|
+
export { type OrchestrationQueueAuditRecord, type OrchestrationQueueEvidence, type OrchestrationQueueStatus, type OrchestrationQueuedEffectPayload, type OrchestrationWorkQueueRecipeBundle, type OrchestrationWorkQueueRecipeOptions, orchestrationWorkQueueRecipe, processEffectSubmitCommand };
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import {
|
|
2
|
+
depBatch
|
|
3
|
+
} from "../chunk-WQIA3GFB.js";
|
|
4
|
+
import "../chunk-S6HXABGL.js";
|
|
5
|
+
import "../chunk-DGUM43GV.js";
|
|
6
|
+
|
|
7
|
+
// src/orchestration/work-queue.ts
|
|
8
|
+
function orchestrationWorkQueueRecipe(graph, opts) {
|
|
9
|
+
const name = opts.name ?? "orchestrationWorkQueue";
|
|
10
|
+
const submitCommands = opts.effectRequests === void 0 ? void 0 : graph.node(
|
|
11
|
+
[opts.effectRequests],
|
|
12
|
+
(ctx) => {
|
|
13
|
+
for (const raw of depBatch(ctx, 0) ?? []) {
|
|
14
|
+
ctx.down([
|
|
15
|
+
["DATA", processEffectSubmitCommand(raw)]
|
|
16
|
+
]);
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: `${name}/submitCommands`,
|
|
21
|
+
factory: "orchestrationWorkQueueSubmitCommands",
|
|
22
|
+
completeWhenDepsComplete: false,
|
|
23
|
+
errorWhenDepsError: false
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
const runtime = graph.node(
|
|
27
|
+
[opts.records],
|
|
28
|
+
(ctx) => {
|
|
29
|
+
const state = ctx.state.get() ?? {
|
|
30
|
+
payloads: /* @__PURE__ */ new Map(),
|
|
31
|
+
terminalRecords: /* @__PURE__ */ new Set(),
|
|
32
|
+
auditSeq: 0
|
|
33
|
+
};
|
|
34
|
+
for (const raw of depBatch(ctx, 0) ?? []) {
|
|
35
|
+
reduceRecord(ctx, state, raw);
|
|
36
|
+
}
|
|
37
|
+
ctx.state.set(state);
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: `${name}/runtime`,
|
|
41
|
+
factory: "orchestrationWorkQueueRuntime",
|
|
42
|
+
partial: true,
|
|
43
|
+
completeWhenDepsComplete: false,
|
|
44
|
+
errorWhenDepsError: false
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
return {
|
|
48
|
+
...submitCommands === void 0 ? {} : { submitCommands },
|
|
49
|
+
evidence: project(
|
|
50
|
+
graph,
|
|
51
|
+
runtime,
|
|
52
|
+
`${name}/evidence`,
|
|
53
|
+
"orchestrationWorkQueueEvidence",
|
|
54
|
+
(fact) => fact.kind === "evidence" ? fact.evidence : void 0
|
|
55
|
+
),
|
|
56
|
+
status: project(
|
|
57
|
+
graph,
|
|
58
|
+
runtime,
|
|
59
|
+
`${name}/status`,
|
|
60
|
+
"orchestrationWorkQueueStatus",
|
|
61
|
+
(fact) => fact.kind === "status" ? fact.status : void 0
|
|
62
|
+
),
|
|
63
|
+
issues: project(
|
|
64
|
+
graph,
|
|
65
|
+
runtime,
|
|
66
|
+
`${name}/issues`,
|
|
67
|
+
"orchestrationWorkQueueIssues",
|
|
68
|
+
(fact) => fact.kind === "issue" ? fact.issue : void 0
|
|
69
|
+
),
|
|
70
|
+
audit: project(
|
|
71
|
+
graph,
|
|
72
|
+
runtime,
|
|
73
|
+
`${name}/audit`,
|
|
74
|
+
"orchestrationWorkQueueAudit",
|
|
75
|
+
(fact) => fact.kind === "audit" ? fact.audit : void 0
|
|
76
|
+
)
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function processEffectSubmitCommand(effect, opts = {}) {
|
|
80
|
+
const payload = {
|
|
81
|
+
kind: "orchestration-queued-effect",
|
|
82
|
+
effect,
|
|
83
|
+
idempotencyKey: opts.idempotencyKey ?? effect.id,
|
|
84
|
+
sourceRefs: opts.sourceRefs,
|
|
85
|
+
policyRefs: opts.policyRefs,
|
|
86
|
+
metadata: opts.metadata
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
kind: "submit",
|
|
90
|
+
commandId: opts.commandId ?? `${effect.id}:orchestration-work-queue-submit`,
|
|
91
|
+
workId: opts.workId ?? `process-effect:${effect.id}`,
|
|
92
|
+
payload,
|
|
93
|
+
idempotencyKey: opts.idempotencyKey ?? effect.id,
|
|
94
|
+
sourceRefs: opts.sourceRefs,
|
|
95
|
+
policyRefs: opts.policyRefs
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function reduceRecord(ctx, state, record) {
|
|
99
|
+
if (record.kind === "work-admitted") {
|
|
100
|
+
if (isQueuedEffectPayload(record.payload)) {
|
|
101
|
+
state.payloads.set(record.workId, record.payload);
|
|
102
|
+
} else {
|
|
103
|
+
emitIssue(ctx, state, record, "orchestration-queue-malformed-payload");
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!isTerminalEvidenceRecord(record)) return;
|
|
108
|
+
const key = `${record.kind}:${record.recordSeq}`;
|
|
109
|
+
if (state.terminalRecords.has(key)) return;
|
|
110
|
+
state.terminalRecords.add(key);
|
|
111
|
+
const payload = record.workId === void 0 ? void 0 : state.payloads.get(record.workId);
|
|
112
|
+
if (payload === void 0) {
|
|
113
|
+
emitIssue(ctx, state, record, "orchestration-queue-record-without-payload");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const evidence = evidenceFromRecord(record, payload);
|
|
117
|
+
emit(ctx, { kind: "evidence", evidence });
|
|
118
|
+
emit(ctx, { kind: "status", status: statusFromEvidence(evidence, payload) });
|
|
119
|
+
state.auditSeq += 1;
|
|
120
|
+
emit(ctx, { kind: "audit", audit: auditFromEvidence(state.auditSeq, evidence, payload) });
|
|
121
|
+
}
|
|
122
|
+
function isTerminalEvidenceRecord(record) {
|
|
123
|
+
return record.kind === "work-completed" || record.kind === "attempt-completed" || record.kind === "work-canceled" || record.kind === "work-dead-lettered" || record.kind === "attempt-failed";
|
|
124
|
+
}
|
|
125
|
+
function evidenceFromRecord(record, payload) {
|
|
126
|
+
return {
|
|
127
|
+
kind: "orchestration-queue-evidence",
|
|
128
|
+
evidenceId: `work-queue:${record.recordSeq}`,
|
|
129
|
+
effectId: payload.effect.id,
|
|
130
|
+
effectType: payload.effect.type,
|
|
131
|
+
workId: record.workId ?? `unknown:${record.recordSeq}`,
|
|
132
|
+
queueRecordKind: record.kind,
|
|
133
|
+
result: "result" in record ? record.result : void 0,
|
|
134
|
+
error: "error" in record ? record.error : void 0,
|
|
135
|
+
recordedAtMs: record.recordedAtMs
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function statusFromEvidence(evidence, payload) {
|
|
139
|
+
return {
|
|
140
|
+
kind: "orchestration-queue-status",
|
|
141
|
+
state: "evidence-recorded",
|
|
142
|
+
effectId: payload.effect.id,
|
|
143
|
+
effectType: payload.effect.type,
|
|
144
|
+
workId: evidence.workId,
|
|
145
|
+
queueRecordKind: evidence.queueRecordKind,
|
|
146
|
+
evidenceId: evidence.evidenceId
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function auditFromEvidence(seq, evidence, payload) {
|
|
150
|
+
return {
|
|
151
|
+
kind: "orchestration-queue-audit",
|
|
152
|
+
seq,
|
|
153
|
+
outcome: "mapped",
|
|
154
|
+
effectId: payload.effect.id,
|
|
155
|
+
effectType: payload.effect.type,
|
|
156
|
+
workId: evidence.workId,
|
|
157
|
+
queueRecordKind: evidence.queueRecordKind,
|
|
158
|
+
evidenceId: evidence.evidenceId
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function auditFromIssue(seq, record) {
|
|
162
|
+
return {
|
|
163
|
+
kind: "orchestration-queue-audit",
|
|
164
|
+
seq,
|
|
165
|
+
outcome: "issue",
|
|
166
|
+
workId: record.workId,
|
|
167
|
+
queueRecordKind: record.kind
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function project(graph, runtime, name, factory, pick) {
|
|
171
|
+
return graph.node(
|
|
172
|
+
[runtime],
|
|
173
|
+
(ctx) => {
|
|
174
|
+
for (const fact of depBatch(ctx, 0) ?? []) {
|
|
175
|
+
const value = pick(fact);
|
|
176
|
+
if (value !== void 0) ctx.down([["DATA", value]]);
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
{ name, factory, partial: true, completeWhenDepsComplete: false, errorWhenDepsError: false }
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
function emit(ctx, fact) {
|
|
183
|
+
ctx.down([["DATA", fact]]);
|
|
184
|
+
}
|
|
185
|
+
function emitIssue(ctx, state, record, code) {
|
|
186
|
+
const issue = queueIssue(record, code);
|
|
187
|
+
emit(ctx, { kind: "issue", issue });
|
|
188
|
+
state.auditSeq += 1;
|
|
189
|
+
emit(ctx, {
|
|
190
|
+
kind: "status",
|
|
191
|
+
status: {
|
|
192
|
+
kind: "orchestration-queue-status",
|
|
193
|
+
state: "mapping-issue",
|
|
194
|
+
workId: record.workId,
|
|
195
|
+
queueRecordKind: record.kind,
|
|
196
|
+
issues: [issue]
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
emit(ctx, {
|
|
200
|
+
kind: "audit",
|
|
201
|
+
audit: auditFromIssue(state.auditSeq, record)
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
function queueIssue(record, code) {
|
|
205
|
+
return {
|
|
206
|
+
kind: "issue",
|
|
207
|
+
code,
|
|
208
|
+
message: `Orchestration workQueue recipe could not map record '${record.kind}'`,
|
|
209
|
+
severity: "error",
|
|
210
|
+
source: "orchestration.workQueue",
|
|
211
|
+
details: record
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function isQueuedEffectPayload(value) {
|
|
215
|
+
if (!isObjectRecord(value) || value.kind !== "orchestration-queued-effect") return false;
|
|
216
|
+
const effect = value.effect;
|
|
217
|
+
return isObjectRecord(effect) && typeof effect.id === "string" && typeof effect.type === "string";
|
|
218
|
+
}
|
|
219
|
+
function isObjectRecord(value) {
|
|
220
|
+
return typeof value === "object" && value !== null;
|
|
221
|
+
}
|
|
222
|
+
export {
|
|
223
|
+
orchestrationWorkQueueRecipe,
|
|
224
|
+
processEffectSubmitCommand
|
|
225
|
+
};
|
|
226
|
+
//# sourceMappingURL=work-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/orchestration/work-queue.ts"],"sourcesContent":["/**\n * Optional orchestration-over-workQueue recipe (D349/D353).\n *\n * Queue lifecycle remains disposition evidence. This module maps visible\n * ProcessEffectRequest facts to queue commands and maps terminal queue records\n * back to graph-visible orchestration evidence/status/issue facts.\n */\n\nimport { type Ctx, depBatch } from \"../ctx/types.js\";\nimport type { DataIssue } from \"../data/index.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type { Node } from \"../node/node.js\";\nimport type { ProcessEffectRequest } from \"../orchestration/index.js\";\nimport type { WorkQueueCommand, WorkQueueRecord } from \"../work-queue/index.js\";\n\nexport interface OrchestrationQueuedEffectPayload<TEffect = unknown> {\n\treadonly kind: \"orchestration-queued-effect\";\n\treadonly effect: ProcessEffectRequest<TEffect>;\n\treadonly idempotencyKey?: string;\n\treadonly sourceRefs?: readonly string[];\n\treadonly policyRefs?: readonly string[];\n\treadonly metadata?: Record<string, unknown>;\n}\n\nexport interface OrchestrationQueueEvidence {\n\treadonly kind: \"orchestration-queue-evidence\";\n\treadonly evidenceId: string;\n\treadonly effectId: string;\n\treadonly effectType: string;\n\treadonly workId: string;\n\treadonly queueRecordKind: WorkQueueRecord[\"kind\"];\n\treadonly result?: unknown;\n\treadonly error?: unknown;\n\treadonly recordedAtMs: number;\n}\n\nexport interface OrchestrationQueueStatus {\n\treadonly kind: \"orchestration-queue-status\";\n\treadonly state: \"evidence-recorded\" | \"mapping-issue\";\n\treadonly effectId?: string;\n\treadonly effectType?: string;\n\treadonly workId?: string;\n\treadonly queueRecordKind?: WorkQueueRecord[\"kind\"];\n\treadonly evidenceId?: string;\n\treadonly issues?: readonly DataIssue[];\n}\n\nexport interface OrchestrationQueueAuditRecord {\n\treadonly kind: \"orchestration-queue-audit\";\n\treadonly seq: number;\n\treadonly outcome: \"mapped\" | \"issue\";\n\treadonly effectId?: string;\n\treadonly effectType?: string;\n\treadonly workId?: string;\n\treadonly queueRecordKind?: WorkQueueRecord[\"kind\"];\n\treadonly evidenceId?: string;\n}\n\nexport interface OrchestrationWorkQueueRecipeOptions<TEffect = unknown> {\n\treadonly name?: string;\n\treadonly effectRequests?: Node<ProcessEffectRequest<TEffect>>;\n\treadonly records: Node<WorkQueueRecord<OrchestrationQueuedEffectPayload<TEffect>>>;\n}\n\nexport interface OrchestrationWorkQueueRecipeBundle<TEffect = unknown> {\n\treadonly submitCommands?: Node<WorkQueueCommand<OrchestrationQueuedEffectPayload<TEffect>>>;\n\treadonly evidence: Node<OrchestrationQueueEvidence>;\n\treadonly status: Node<OrchestrationQueueStatus>;\n\treadonly issues: Node<DataIssue>;\n\treadonly audit: Node<OrchestrationQueueAuditRecord>;\n}\n\ntype OrchestrationQueueFact =\n\t| { readonly kind: \"evidence\"; readonly evidence: OrchestrationQueueEvidence }\n\t| { readonly kind: \"status\"; readonly status: OrchestrationQueueStatus }\n\t| { readonly kind: \"issue\"; readonly issue: DataIssue }\n\t| { readonly kind: \"audit\"; readonly audit: OrchestrationQueueAuditRecord };\n\ninterface QueueState<TEffect> {\n\treadonly payloads: Map<string, OrchestrationQueuedEffectPayload<TEffect>>;\n\treadonly terminalRecords: Set<string>;\n\tauditSeq: number;\n}\n\n/** Build the optional D349 orchestration workQueue recipe. */\nexport function orchestrationWorkQueueRecipe<TEffect = unknown>(\n\tgraph: Graph,\n\topts: OrchestrationWorkQueueRecipeOptions<TEffect>,\n): OrchestrationWorkQueueRecipeBundle<TEffect> {\n\tconst name = opts.name ?? \"orchestrationWorkQueue\";\n\tconst submitCommands =\n\t\topts.effectRequests === undefined\n\t\t\t? undefined\n\t\t\t: graph.node<WorkQueueCommand<OrchestrationQueuedEffectPayload<TEffect>>>(\n\t\t\t\t\t[opts.effectRequests],\n\t\t\t\t\t(ctx) => {\n\t\t\t\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\"DATA\", processEffectSubmitCommand(raw as ProcessEffectRequest<TEffect>)],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: `${name}/submitCommands`,\n\t\t\t\t\t\tfactory: \"orchestrationWorkQueueSubmitCommands\",\n\t\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t\t},\n\t\t\t\t);\n\tconst runtime = graph.node<OrchestrationQueueFact>(\n\t\t[opts.records],\n\t\t(ctx) => {\n\t\t\tconst state = ctx.state.get<QueueState<TEffect>>() ?? {\n\t\t\t\tpayloads: new Map(),\n\t\t\t\tterminalRecords: new Set(),\n\t\t\t\tauditSeq: 0,\n\t\t\t};\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\treduceRecord(ctx, state, raw as WorkQueueRecord<OrchestrationQueuedEffectPayload<TEffect>>);\n\t\t\t}\n\t\t\tctx.state.set(state);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/runtime`,\n\t\t\tfactory: \"orchestrationWorkQueueRuntime\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\treturn {\n\t\t...(submitCommands === undefined ? {} : { submitCommands }),\n\t\tevidence: project(\n\t\t\tgraph,\n\t\t\truntime,\n\t\t\t`${name}/evidence`,\n\t\t\t\"orchestrationWorkQueueEvidence\",\n\t\t\t(fact) => (fact.kind === \"evidence\" ? fact.evidence : undefined),\n\t\t),\n\t\tstatus: project(graph, runtime, `${name}/status`, \"orchestrationWorkQueueStatus\", (fact) =>\n\t\t\tfact.kind === \"status\" ? fact.status : undefined,\n\t\t),\n\t\tissues: project(graph, runtime, `${name}/issues`, \"orchestrationWorkQueueIssues\", (fact) =>\n\t\t\tfact.kind === \"issue\" ? fact.issue : undefined,\n\t\t),\n\t\taudit: project(graph, runtime, `${name}/audit`, \"orchestrationWorkQueueAudit\", (fact) =>\n\t\t\tfact.kind === \"audit\" ? fact.audit : undefined,\n\t\t),\n\t};\n}\n\nexport function processEffectSubmitCommand<TEffect>(\n\teffect: ProcessEffectRequest<TEffect>,\n\topts: {\n\t\treadonly workId?: string;\n\t\treadonly commandId?: string;\n\t\treadonly idempotencyKey?: string;\n\t\treadonly sourceRefs?: readonly string[];\n\t\treadonly policyRefs?: readonly string[];\n\t\treadonly metadata?: Record<string, unknown>;\n\t} = {},\n): WorkQueueCommand<OrchestrationQueuedEffectPayload<TEffect>> {\n\tconst payload: OrchestrationQueuedEffectPayload<TEffect> = {\n\t\tkind: \"orchestration-queued-effect\",\n\t\teffect,\n\t\tidempotencyKey: opts.idempotencyKey ?? effect.id,\n\t\tsourceRefs: opts.sourceRefs,\n\t\tpolicyRefs: opts.policyRefs,\n\t\tmetadata: opts.metadata,\n\t};\n\treturn {\n\t\tkind: \"submit\",\n\t\tcommandId: opts.commandId ?? `${effect.id}:orchestration-work-queue-submit`,\n\t\tworkId: opts.workId ?? `process-effect:${effect.id}`,\n\t\tpayload,\n\t\tidempotencyKey: opts.idempotencyKey ?? effect.id,\n\t\tsourceRefs: opts.sourceRefs,\n\t\tpolicyRefs: opts.policyRefs,\n\t};\n}\n\nfunction reduceRecord<TEffect>(\n\tctx: Ctx,\n\tstate: QueueState<TEffect>,\n\trecord: WorkQueueRecord<OrchestrationQueuedEffectPayload<TEffect>>,\n): void {\n\tif (record.kind === \"work-admitted\") {\n\t\tif (isQueuedEffectPayload(record.payload)) {\n\t\t\tstate.payloads.set(record.workId, record.payload);\n\t\t} else {\n\t\t\temitIssue(ctx, state, record, \"orchestration-queue-malformed-payload\");\n\t\t}\n\t\treturn;\n\t}\n\tif (!isTerminalEvidenceRecord(record)) return;\n\tconst key = `${record.kind}:${record.recordSeq}`;\n\tif (state.terminalRecords.has(key)) return;\n\tstate.terminalRecords.add(key);\n\tconst payload = record.workId === undefined ? undefined : state.payloads.get(record.workId);\n\tif (payload === undefined) {\n\t\temitIssue(ctx, state, record, \"orchestration-queue-record-without-payload\");\n\t\treturn;\n\t}\n\tconst evidence = evidenceFromRecord(record, payload);\n\temit(ctx, { kind: \"evidence\", evidence });\n\temit(ctx, { kind: \"status\", status: statusFromEvidence(evidence, payload) });\n\tstate.auditSeq += 1;\n\temit(ctx, { kind: \"audit\", audit: auditFromEvidence(state.auditSeq, evidence, payload) });\n}\n\nfunction isTerminalEvidenceRecord(record: WorkQueueRecord): boolean {\n\treturn (\n\t\trecord.kind === \"work-completed\" ||\n\t\trecord.kind === \"attempt-completed\" ||\n\t\trecord.kind === \"work-canceled\" ||\n\t\trecord.kind === \"work-dead-lettered\" ||\n\t\trecord.kind === \"attempt-failed\"\n\t);\n}\n\nfunction evidenceFromRecord<TEffect>(\n\trecord: WorkQueueRecord<OrchestrationQueuedEffectPayload<TEffect>>,\n\tpayload: OrchestrationQueuedEffectPayload<TEffect>,\n): OrchestrationQueueEvidence {\n\treturn {\n\t\tkind: \"orchestration-queue-evidence\",\n\t\tevidenceId: `work-queue:${record.recordSeq}`,\n\t\teffectId: payload.effect.id,\n\t\teffectType: payload.effect.type,\n\t\tworkId: record.workId ?? `unknown:${record.recordSeq}`,\n\t\tqueueRecordKind: record.kind,\n\t\tresult: \"result\" in record ? record.result : undefined,\n\t\terror: \"error\" in record ? record.error : undefined,\n\t\trecordedAtMs: record.recordedAtMs,\n\t};\n}\n\nfunction statusFromEvidence<TEffect>(\n\tevidence: OrchestrationQueueEvidence,\n\tpayload: OrchestrationQueuedEffectPayload<TEffect>,\n): OrchestrationQueueStatus {\n\treturn {\n\t\tkind: \"orchestration-queue-status\",\n\t\tstate: \"evidence-recorded\",\n\t\teffectId: payload.effect.id,\n\t\teffectType: payload.effect.type,\n\t\tworkId: evidence.workId,\n\t\tqueueRecordKind: evidence.queueRecordKind,\n\t\tevidenceId: evidence.evidenceId,\n\t};\n}\n\nfunction auditFromEvidence<TEffect>(\n\tseq: number,\n\tevidence: OrchestrationQueueEvidence,\n\tpayload: OrchestrationQueuedEffectPayload<TEffect>,\n): OrchestrationQueueAuditRecord {\n\treturn {\n\t\tkind: \"orchestration-queue-audit\",\n\t\tseq,\n\t\toutcome: \"mapped\",\n\t\teffectId: payload.effect.id,\n\t\teffectType: payload.effect.type,\n\t\tworkId: evidence.workId,\n\t\tqueueRecordKind: evidence.queueRecordKind,\n\t\tevidenceId: evidence.evidenceId,\n\t};\n}\n\nfunction auditFromIssue(\n\tseq: number,\n\trecord: WorkQueueRecord<unknown>,\n): OrchestrationQueueAuditRecord {\n\treturn {\n\t\tkind: \"orchestration-queue-audit\",\n\t\tseq,\n\t\toutcome: \"issue\",\n\t\tworkId: record.workId,\n\t\tqueueRecordKind: record.kind,\n\t};\n}\n\nfunction project<T>(\n\tgraph: Graph,\n\truntime: Node<OrchestrationQueueFact>,\n\tname: string,\n\tfactory: string,\n\tpick: (fact: OrchestrationQueueFact) => T | undefined,\n): Node<T> {\n\treturn graph.node<T>(\n\t\t[runtime],\n\t\t(ctx) => {\n\t\t\tfor (const fact of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst value = pick(fact as OrchestrationQueueFact);\n\t\t\t\tif (value !== undefined) ctx.down([[\"DATA\", value]]);\n\t\t\t}\n\t\t},\n\t\t{ name, factory, partial: true, completeWhenDepsComplete: false, errorWhenDepsError: false },\n\t);\n}\n\nfunction emit(ctx: Ctx, fact: OrchestrationQueueFact): void {\n\tctx.down([[\"DATA\", fact]]);\n}\n\nfunction emitIssue(\n\tctx: Ctx,\n\tstate: QueueState<unknown>,\n\trecord: WorkQueueRecord<unknown>,\n\tcode: string,\n): void {\n\tconst issue = queueIssue(record, code);\n\temit(ctx, { kind: \"issue\", issue });\n\tstate.auditSeq += 1;\n\temit(ctx, {\n\t\tkind: \"status\",\n\t\tstatus: {\n\t\t\tkind: \"orchestration-queue-status\",\n\t\t\tstate: \"mapping-issue\",\n\t\t\tworkId: record.workId,\n\t\t\tqueueRecordKind: record.kind,\n\t\t\tissues: [issue],\n\t\t},\n\t});\n\temit(ctx, {\n\t\tkind: \"audit\",\n\t\taudit: auditFromIssue(state.auditSeq, record),\n\t});\n}\n\nfunction queueIssue(record: WorkQueueRecord<unknown>, code: string): DataIssue {\n\treturn {\n\t\tkind: \"issue\",\n\t\tcode,\n\t\tmessage: `Orchestration workQueue recipe could not map record '${record.kind}'`,\n\t\tseverity: \"error\",\n\t\tsource: \"orchestration.workQueue\",\n\t\tdetails: record,\n\t};\n}\n\nfunction isQueuedEffectPayload<TEffect>(\n\tvalue: unknown,\n): value is OrchestrationQueuedEffectPayload<TEffect> {\n\tif (!isObjectRecord(value) || value.kind !== \"orchestration-queued-effect\") return false;\n\tconst effect = value.effect;\n\treturn isObjectRecord(effect) && typeof effect.id === \"string\" && typeof effect.type === \"string\";\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n"],"mappings":"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","names":[]}
|