yaml-flow 8.5.3 → 8.6.2

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 (176) hide show
  1. package/browser/asset-integrity.json +3 -3
  2. package/examples/board/demo-shell-with-server.html +2 -2
  3. package/examples/board/doc.html +2 -2
  4. package/examples/board/server/board-server.js +773 -13
  5. package/examples/board/server/board-worker/task-executor.js +166 -51
  6. package/examples/board/server/chat-flow/copilot-chat/assistant.js +25 -12
  7. package/examples/board/server/chat-flow/copilot-chat/probe.js +7 -0
  8. package/examples/board/server/chat-flow/copilot-chat/shared.js +97 -0
  9. package/examples/board/server/chat-flow/flow-steps.json +109 -51
  10. package/examples/board/server-config.json +2 -0
  11. package/examples/board/test/server-http-test.js +878 -67
  12. package/examples/board-local/demo-shell-localstorage.html +3 -3
  13. package/lib/{artifacts-store-lib-CVgtQrNZ.d.cts → artifacts-store-lib-BR-Samty.d.cts} +1 -1
  14. package/lib/{artifacts-store-lib-D-k-E8Vy.d.ts → artifacts-store-lib-DT7XlWUL.d.ts} +1 -1
  15. package/lib/artifacts-store-public.cjs +1 -1
  16. package/lib/artifacts-store-public.d.cts +3 -3
  17. package/lib/artifacts-store-public.d.ts +3 -3
  18. package/lib/artifacts-store-public.js +1 -1
  19. package/lib/batch/index.cjs +1 -1
  20. package/lib/batch/index.js +1 -1
  21. package/lib/board-live-cards-mcp.cjs +1 -1
  22. package/lib/board-live-cards-mcp.d.cts +87 -34
  23. package/lib/board-live-cards-mcp.d.ts +87 -34
  24. package/lib/board-live-cards-mcp.js +1 -1
  25. package/lib/board-live-cards-node.cjs +8 -16
  26. package/lib/board-live-cards-node.d.cts +52 -14
  27. package/lib/board-live-cards-node.d.ts +52 -14
  28. package/lib/board-live-cards-node.js +8 -16
  29. package/lib/{board-live-cards-public-BGS22cMb.d.ts → board-live-cards-public-BMUIPOrc.d.ts} +90 -30
  30. package/lib/board-live-cards-public-async-DKZqbJVU.d.ts +256 -0
  31. package/lib/board-live-cards-public-async-dMWNbWq6.d.cts +256 -0
  32. package/lib/{board-live-cards-public-B13InXhC.d.cts → board-live-cards-public-wkNmBIRC.d.cts} +90 -30
  33. package/lib/board-live-cards-public.cjs +1 -2
  34. package/lib/board-live-cards-public.d.cts +2 -2
  35. package/lib/board-live-cards-public.d.ts +2 -2
  36. package/lib/board-live-cards-public.js +1 -2
  37. package/lib/board-live-cards-server-runtime.cjs +1 -7
  38. package/lib/board-live-cards-server-runtime.d.cts +7 -6
  39. package/lib/board-live-cards-server-runtime.d.ts +7 -6
  40. package/lib/board-live-cards-server-runtime.js +1 -7
  41. package/lib/board-livegraph-runtime/index.cjs +1 -2
  42. package/lib/board-livegraph-runtime/index.js +1 -2
  43. package/lib/board-worker-adapter.cjs +22 -7
  44. package/lib/board-worker-adapter.d.cts +28 -3
  45. package/lib/board-worker-adapter.d.ts +28 -3
  46. package/lib/board-worker-adapter.js +22 -7
  47. package/lib/card-compute/index.cjs +1 -9
  48. package/lib/card-compute/index.js +1 -9
  49. package/lib/card-store-public.cjs +1 -1
  50. package/lib/card-store-public.d.cts +2 -2
  51. package/lib/card-store-public.d.ts +2 -2
  52. package/lib/card-store-public.js +1 -1
  53. package/lib/card-validation.cjs +1 -9
  54. package/lib/card-validation.js +1 -9
  55. package/lib/{chat-storage-lib-0imhRX3l.d.cts → chat-storage-lib-BIUbE-fM.d.cts} +1 -1
  56. package/lib/{chat-storage-lib-CJn7a6OH.d.ts → chat-storage-lib-BlG-sobS.d.ts} +1 -1
  57. package/lib/chat-store-public.cjs +1 -1
  58. package/lib/chat-store-public.d.cts +3 -3
  59. package/lib/chat-store-public.d.ts +3 -3
  60. package/lib/chat-store-public.js +1 -1
  61. package/lib/chunk-2MZUYY65.cjs +2 -0
  62. package/lib/chunk-5EA2ESS4.cjs +16 -0
  63. package/lib/chunk-76ON3V7R.js +2 -0
  64. package/lib/chunk-7BKNHFNH.js +2 -0
  65. package/lib/chunk-BQS3EIEK.js +3 -0
  66. package/lib/chunk-CIAJNUR4.js +2 -0
  67. package/lib/chunk-DAXACY63.js +2 -0
  68. package/lib/chunk-FW4363Y4.js +2 -0
  69. package/lib/chunk-FZ2SBU5M.js +3 -0
  70. package/lib/chunk-G4XXRHL2.cjs +3 -0
  71. package/lib/chunk-GJJMEAVN.cjs +2 -0
  72. package/lib/chunk-GNFE24S7.cjs +2 -0
  73. package/lib/chunk-GYQXDNNI.cjs +2 -0
  74. package/lib/chunk-H5HBXPOI.cjs +3 -0
  75. package/lib/chunk-H5KD3JPY.cjs +2 -0
  76. package/lib/chunk-HEEDJEKM.js +2 -0
  77. package/lib/chunk-HLJH7LGW.js +16 -0
  78. package/lib/chunk-IXZG74EW.cjs +2 -0
  79. package/lib/chunk-JAL25FGA.cjs +2 -0
  80. package/lib/chunk-JM5EKT57.js +2 -0
  81. package/lib/chunk-JMDHDY6M.js +2 -0
  82. package/lib/chunk-KBELAKIY.js +2 -0
  83. package/lib/chunk-KHJABJ45.cjs +3 -0
  84. package/lib/chunk-KLRUISRY.cjs +2 -0
  85. package/lib/chunk-KQX6R4PV.cjs +8 -0
  86. package/lib/chunk-LODXIALE.cjs +2 -0
  87. package/lib/chunk-MLVTJASJ.js +2 -0
  88. package/lib/chunk-MNEOJWPS.js +10 -0
  89. package/lib/chunk-N6P2JW4W.js +3 -0
  90. package/lib/chunk-NMZ6XNLB.cjs +3 -0
  91. package/lib/chunk-OEFTOO47.cjs +3 -0
  92. package/lib/chunk-OPNGCSXJ.js +2 -0
  93. package/lib/chunk-OSWJKJLB.js +8 -0
  94. package/lib/chunk-P7ZCDICS.cjs +2 -0
  95. package/lib/chunk-PBCDDO4V.cjs +2 -0
  96. package/lib/chunk-PMUSJQSR.cjs +2 -0
  97. package/lib/chunk-Q6H7NINN.cjs +5 -0
  98. package/lib/chunk-QWBNDVUA.js +5 -0
  99. package/lib/chunk-S6DRP2HX.cjs +2 -0
  100. package/lib/chunk-SCWHDI3I.js +2 -0
  101. package/lib/chunk-SFVO2LB2.cjs +3 -0
  102. package/lib/chunk-U2N6MCD5.cjs +2 -0
  103. package/lib/chunk-UJ7ZTV4J.cjs +10 -0
  104. package/lib/chunk-VGT3TRQG.js +3 -0
  105. package/lib/chunk-VLBB3D6B.js +3 -0
  106. package/lib/chunk-VMW4Z6EF.js +3 -0
  107. package/lib/chunk-WDPOGXTY.js +2 -0
  108. package/lib/chunk-WOALA3V5.cjs +2 -0
  109. package/lib/chunk-X3LC4LII.js +2 -0
  110. package/lib/chunk-XQRNDX4Q.js +2 -0
  111. package/lib/chunk-YGKDQLYP.js +2 -0
  112. package/lib/chunk-YMEIPKLW.cjs +2 -0
  113. package/lib/cloud-storage.cjs +2 -0
  114. package/lib/cloud-storage.d.cts +177 -0
  115. package/lib/cloud-storage.d.ts +177 -0
  116. package/lib/cloud-storage.js +2 -0
  117. package/lib/config/index.cjs +1 -1
  118. package/lib/config/index.js +1 -1
  119. package/lib/continuous-event-graph/index.cjs +1 -2
  120. package/lib/continuous-event-graph/index.js +1 -2
  121. package/lib/event-graph/index.cjs +1 -22
  122. package/lib/event-graph/index.js +1 -22
  123. package/lib/execution-refs.cjs +1 -2
  124. package/lib/execution-refs.d.cts +3 -2
  125. package/lib/execution-refs.d.ts +3 -2
  126. package/lib/execution-refs.js +1 -2
  127. package/lib/index.cjs +2 -24
  128. package/lib/index.d.cts +1 -1
  129. package/lib/index.d.ts +1 -1
  130. package/lib/index.js +2 -24
  131. package/lib/{types-CIgsh56O.d.cts → queue-lane-registry-BPKWWgd4.d.cts} +66 -14
  132. package/lib/{types-30R357js.d.ts → queue-lane-registry-Be6c0ftj.d.ts} +66 -14
  133. package/lib/server-runtime/index.cjs +1 -7
  134. package/lib/server-runtime/index.d.cts +18 -7
  135. package/lib/server-runtime/index.d.ts +18 -7
  136. package/lib/server-runtime/index.js +1 -7
  137. package/lib/step-machine/index.cjs +1 -11
  138. package/lib/step-machine/index.js +1 -11
  139. package/lib/step-machine-public/index.cjs +1 -4
  140. package/lib/step-machine-public/index.d.cts +1 -1
  141. package/lib/step-machine-public/index.d.ts +1 -1
  142. package/lib/step-machine-public/index.js +1 -4
  143. package/lib/{storage-interface-B2WD9D5n.d.cts → storage-interface-BFiD3kyB.d.cts} +38 -1
  144. package/lib/{storage-interface-B2WD9D5n.d.ts → storage-interface-BFiD3kyB.d.ts} +38 -1
  145. package/lib/stores/index.cjs +1 -2
  146. package/lib/stores/index.d.cts +1 -1
  147. package/lib/stores/index.d.ts +1 -1
  148. package/lib/stores/index.js +1 -2
  149. package/lib/stores/kv.cjs +1 -2
  150. package/lib/stores/kv.d.cts +1 -1
  151. package/lib/stores/kv.d.ts +1 -1
  152. package/lib/stores/kv.js +1 -2
  153. package/lib/stores/memory.cjs +1 -1
  154. package/lib/stores/memory.js +1 -1
  155. package/package.json +7 -16
  156. package/cli/board-live-cards-lib-COi4bSpk.d.ts +0 -322
  157. package/cli/browser-api/board-live-cards-browser-adapter.d.ts +0 -36
  158. package/cli/browser-api/board-live-cards-browser-adapter.js +0 -4
  159. package/cli/browser-api/card-store-browser-api.d.ts +0 -25
  160. package/cli/browser-api/card-store-browser-api.js +0 -2
  161. package/cli/browser-api/jsonata-sync.cjs +0 -7623
  162. package/cli/bundled/artifacts-store-cli.mjs +0 -12
  163. package/cli/bundled/batch-runner-cli.mjs +0 -3
  164. package/cli/bundled/board-live-cards-cli.mjs +0 -29
  165. package/cli/bundled/card-store-cli.mjs +0 -154
  166. package/cli/bundled/chat-store-cli.mjs +0 -16
  167. package/cli/bundled/jsonata-sync.cjs +0 -7623
  168. package/cli/bundled/step-machine-cli.mjs +0 -150
  169. package/cli/execution-interface-BCIhu1gO.d.ts +0 -442
  170. package/cli/types-H3EMBPY2.d.ts +0 -398
  171. package/examples/board/server/README-mcp-api.md +0 -690
  172. package/examples/board/test/server-http-mcp-test.js +0 -1280
  173. package/lib/board-livegraph-runtime/jsonata-sync.cjs +0 -7623
  174. package/lib/card-compute/jsonata-sync.cjs +0 -7623
  175. package/lib/continuous-event-graph/jsonata-sync.cjs +0 -7623
  176. package/lib/server-runtime/jsonata-sync.cjs +0 -7623
@@ -0,0 +1,177 @@
1
+ import { b as AsyncJSONStorage, c as AsyncKVStorage, d as AsyncBlobStorage, e as AsyncJournalStorage, f as AsyncStorageProvider, g as AsyncAtomicRelayLock, h as AsyncQueueStorage } from './board-live-cards-public-async-dMWNbWq6.cjs';
2
+ export { i as AsyncBoardConfigStore, A as AsyncBoardLiveCardsPublic, a as AsyncBoardPlatformAdapter, j as AsyncBoardWorkerDeadLetterRequest, k as AsyncBoardWorkerLeasedRequest, l as AsyncBoardWorkerQueuedRequest, m as AsyncBoardWorkerRequest, n as AsyncBoardWorkerStore, H as HostedAsyncBoardPlatformAdapterOptions, o as HostedFetchLike, p as HostedFetchResponseLike, q as createAsyncBoardConfigStore, r as createAsyncBoardLiveCardsPublic, s as createAsyncBoardWorkerStore, t as createHostedAsyncBoardPlatformAdapter, w as withAsyncRelayLock } from './board-live-cards-public-async-dMWNbWq6.cjs';
3
+ import { L as LiveCard, i as CardChecksumIndex, j as CardUpsertValidation, k as CardIndex, S as StateSnapshotReadView } from './board-live-cards-public-wkNmBIRC.cjs';
4
+ import { a as KindValueRef } from './storage-interface-BFiD3kyB.cjs';
5
+ import './execution-refs.cjs';
6
+ import './types-BBhqYGhE.cjs';
7
+
8
+ interface AsyncCardStorageAdapter {
9
+ readIndex(): Promise<CardIndex | null>;
10
+ writeIndex(index: CardIndex): Promise<void>;
11
+ readCard(key: string): Promise<LiveCard | null>;
12
+ writeCard(key: string, card: LiveCard): Promise<string>;
13
+ removeCard(key: string): Promise<void>;
14
+ cardExists(key: string): Promise<boolean>;
15
+ defaultCardKey(cardId: string): string;
16
+ }
17
+ interface AsyncCardStore {
18
+ readCard(id: string): Promise<LiveCard | null>;
19
+ readCardKey(id: string): Promise<string | null>;
20
+ readAllCards(): Promise<LiveCard[]>;
21
+ readChecksumIndex(): Promise<CardChecksumIndex>;
22
+ changedSince(snapshotChecksumIndex: CardChecksumIndex): Promise<string[]>;
23
+ }
24
+ interface AsyncCardAdminStore extends AsyncCardStore {
25
+ validateUpsert(id: string, cardKey: string): Promise<CardUpsertValidation>;
26
+ writeCard(id: string, card: LiveCard, cardKey?: string): Promise<void>;
27
+ patchCard(id: string, jsonPath: string, value: unknown): Promise<void>;
28
+ removeCard(id: string): Promise<void>;
29
+ readIndex(): Promise<CardIndex>;
30
+ }
31
+ interface AsyncStateSnapshotStorageAdapter {
32
+ readValues(scopeId: string): Promise<StateSnapshotReadView>;
33
+ writeValues(scopeId: string, nextValues: Record<string, unknown>, deletedKeys: string[]): Promise<string>;
34
+ }
35
+ declare function createAsyncJsonStorage(kv: AsyncKVStorage): AsyncJSONStorage;
36
+ declare function createAsyncCardStorageAdapter(json: AsyncJSONStorage, computeHash: (v: unknown) => string): AsyncCardStorageAdapter;
37
+ declare function createAsyncCardStore(adapter: AsyncCardStorageAdapter, onWarn?: (msg: string) => void): AsyncCardAdminStore;
38
+ declare function createAsyncStateSnapshotAdapter(kvFactory: (scopeId: string) => AsyncKVStorage, computeHash: (v: unknown) => string): AsyncStateSnapshotStorageAdapter;
39
+ declare function createAsyncStorageProvider(blob: AsyncBlobStorage, kv: AsyncKVStorage, journal: AsyncJournalStorage): AsyncStorageProvider;
40
+
41
+ type CosmosStatusResult<T> = {
42
+ resource?: T;
43
+ statusCode?: number;
44
+ };
45
+ type CosmosAccessCondition = {
46
+ type: 'IfMatch';
47
+ condition: string;
48
+ };
49
+ interface CosmosSqlQuerySpec {
50
+ query: string;
51
+ parameters?: Array<{
52
+ name: string;
53
+ value: unknown;
54
+ }>;
55
+ }
56
+ interface CosmosQueryIteratorLike<T> {
57
+ fetchAll(): Promise<{
58
+ resources: T[];
59
+ }>;
60
+ }
61
+ interface CosmosItemLike<T> {
62
+ read(): Promise<CosmosStatusResult<T>>;
63
+ replace(body: T, options?: {
64
+ accessCondition?: CosmosAccessCondition;
65
+ }): Promise<CosmosStatusResult<T>>;
66
+ delete(): Promise<{
67
+ statusCode?: number;
68
+ }>;
69
+ }
70
+ interface CosmosContainerLike {
71
+ item<T = unknown>(id: string, partitionKey?: unknown): CosmosItemLike<T>;
72
+ items: {
73
+ upsert<T>(body: T): Promise<CosmosStatusResult<T>>;
74
+ create<T>(body: T): Promise<CosmosStatusResult<T>>;
75
+ query<T>(query: CosmosSqlQuerySpec): CosmosQueryIteratorLike<T>;
76
+ };
77
+ }
78
+ type PartitionResolver = string | ((key: string) => string);
79
+ interface CosmosKvStorageOptions {
80
+ partitionKey?: PartitionResolver;
81
+ }
82
+ interface CosmosJournalStorageOptions {
83
+ partitionKey?: PartitionResolver;
84
+ now?: () => Date;
85
+ idFactory?: () => string;
86
+ }
87
+ interface CosmosAtomicRelayLockOptions {
88
+ partitionKey?: string;
89
+ holderId?: string;
90
+ ttlMs?: number;
91
+ now?: () => Date;
92
+ }
93
+ declare function createCosmosKvStorage(container: CosmosContainerLike, options?: CosmosKvStorageOptions): AsyncKVStorage;
94
+ declare function createCosmosJournalStorage(container: CosmosContainerLike, streamKey: string, options?: CosmosJournalStorageOptions): AsyncJournalStorage;
95
+ declare function createCosmosAtomicRelayLock(container: CosmosContainerLike, lockId: string, options?: CosmosAtomicRelayLockOptions): AsyncAtomicRelayLock;
96
+
97
+ interface AzureBlobItemLike {
98
+ name: string;
99
+ properties?: {
100
+ contentLength?: number;
101
+ lastModified?: Date;
102
+ contentType?: string;
103
+ };
104
+ }
105
+ interface AzureBlobClientLike {
106
+ downloadToBuffer(): Promise<Uint8Array>;
107
+ exists(): Promise<boolean>;
108
+ deleteIfExists(): Promise<unknown>;
109
+ getProperties(): Promise<{
110
+ contentLength?: number;
111
+ lastModified?: Date;
112
+ contentType?: string;
113
+ }>;
114
+ }
115
+ interface AzureBlockBlobClientLike {
116
+ upload(data: string | Uint8Array, length: number, options?: {
117
+ blobHTTPHeaders?: {
118
+ blobContentType?: string;
119
+ };
120
+ }): Promise<unknown>;
121
+ }
122
+ interface AzureBlobContainerClientLike {
123
+ getBlobClient(key: string): AzureBlobClientLike;
124
+ getBlockBlobClient(key: string): AzureBlockBlobClientLike;
125
+ listBlobsFlat(options?: {
126
+ prefix?: string;
127
+ }): AsyncIterable<AzureBlobItemLike>;
128
+ }
129
+ interface AzureBlobStorageOptions {
130
+ defaultContentType?: string;
131
+ keyRef?: (key: string) => KindValueRef;
132
+ }
133
+ declare function createAzureBlobStorage(containerClient: AzureBlobContainerClientLike, options?: AzureBlobStorageOptions): AsyncBlobStorage;
134
+
135
+ interface AzureQueueSentMessageLike {
136
+ messageId?: string;
137
+ insertionTime?: Date;
138
+ }
139
+ interface AzureQueueReceivedMessageLike {
140
+ messageId?: string;
141
+ messageText?: string;
142
+ insertedOn?: Date;
143
+ insertionTime?: Date;
144
+ dequeueCount?: number;
145
+ popReceipt?: string;
146
+ nextVisibleOn?: Date;
147
+ }
148
+ interface AzureQueuePeekedMessageLike {
149
+ messageId?: string;
150
+ messageText?: string;
151
+ insertedOn?: Date;
152
+ insertionTime?: Date;
153
+ dequeueCount?: number;
154
+ }
155
+ interface AzureQueueClientLike {
156
+ sendMessage(content: string): Promise<AzureQueueSentMessageLike>;
157
+ receiveMessages(options?: {
158
+ numberOfMessages?: number;
159
+ visibilityTimeout?: number;
160
+ }): Promise<{
161
+ receivedMessageItems: AzureQueueReceivedMessageLike[];
162
+ }>;
163
+ deleteMessage(messageId: string, popReceipt: string): Promise<unknown>;
164
+ updateMessage(messageId: string, popReceipt: string, content: string, visibilityTimeout?: number): Promise<unknown>;
165
+ peekMessages(options?: {
166
+ numberOfMessages?: number;
167
+ }): Promise<{
168
+ peekedMessageItems: AzureQueuePeekedMessageLike[];
169
+ }>;
170
+ }
171
+ interface AzureQueueStorageOptions {
172
+ deadLetterQueueClient?: AzureQueueClientLike;
173
+ now?: () => Date;
174
+ }
175
+ declare function createAzureQueueStorage(queueClient: AzureQueueClientLike, options?: AzureQueueStorageOptions): AsyncQueueStorage;
176
+
177
+ export { AsyncAtomicRelayLock, AsyncBlobStorage, type AsyncCardAdminStore, type AsyncCardStorageAdapter, type AsyncCardStore, AsyncJSONStorage, AsyncJournalStorage, AsyncKVStorage, AsyncQueueStorage, type AsyncStateSnapshotStorageAdapter, AsyncStorageProvider, type AzureBlobClientLike, type AzureBlobContainerClientLike, type AzureBlobItemLike, type AzureBlobStorageOptions, type AzureBlockBlobClientLike, type AzureQueueClientLike, type AzureQueuePeekedMessageLike, type AzureQueueReceivedMessageLike, type AzureQueueSentMessageLike, type AzureQueueStorageOptions, type CosmosAtomicRelayLockOptions, type CosmosContainerLike, type CosmosItemLike, type CosmosJournalStorageOptions, type CosmosKvStorageOptions, type CosmosQueryIteratorLike, type CosmosSqlQuerySpec, createAsyncCardStorageAdapter, createAsyncCardStore, createAsyncJsonStorage, createAsyncStateSnapshotAdapter, createAsyncStorageProvider, createAzureBlobStorage, createAzureQueueStorage, createCosmosAtomicRelayLock, createCosmosJournalStorage, createCosmosKvStorage };
@@ -0,0 +1,177 @@
1
+ import { b as AsyncJSONStorage, c as AsyncKVStorage, d as AsyncBlobStorage, e as AsyncJournalStorage, f as AsyncStorageProvider, g as AsyncAtomicRelayLock, h as AsyncQueueStorage } from './board-live-cards-public-async-DKZqbJVU.js';
2
+ export { i as AsyncBoardConfigStore, A as AsyncBoardLiveCardsPublic, a as AsyncBoardPlatformAdapter, j as AsyncBoardWorkerDeadLetterRequest, k as AsyncBoardWorkerLeasedRequest, l as AsyncBoardWorkerQueuedRequest, m as AsyncBoardWorkerRequest, n as AsyncBoardWorkerStore, H as HostedAsyncBoardPlatformAdapterOptions, o as HostedFetchLike, p as HostedFetchResponseLike, q as createAsyncBoardConfigStore, r as createAsyncBoardLiveCardsPublic, s as createAsyncBoardWorkerStore, t as createHostedAsyncBoardPlatformAdapter, w as withAsyncRelayLock } from './board-live-cards-public-async-DKZqbJVU.js';
3
+ import { L as LiveCard, i as CardChecksumIndex, j as CardUpsertValidation, k as CardIndex, S as StateSnapshotReadView } from './board-live-cards-public-BMUIPOrc.js';
4
+ import { a as KindValueRef } from './storage-interface-BFiD3kyB.js';
5
+ import './execution-refs.js';
6
+ import './types-BBhqYGhE.js';
7
+
8
+ interface AsyncCardStorageAdapter {
9
+ readIndex(): Promise<CardIndex | null>;
10
+ writeIndex(index: CardIndex): Promise<void>;
11
+ readCard(key: string): Promise<LiveCard | null>;
12
+ writeCard(key: string, card: LiveCard): Promise<string>;
13
+ removeCard(key: string): Promise<void>;
14
+ cardExists(key: string): Promise<boolean>;
15
+ defaultCardKey(cardId: string): string;
16
+ }
17
+ interface AsyncCardStore {
18
+ readCard(id: string): Promise<LiveCard | null>;
19
+ readCardKey(id: string): Promise<string | null>;
20
+ readAllCards(): Promise<LiveCard[]>;
21
+ readChecksumIndex(): Promise<CardChecksumIndex>;
22
+ changedSince(snapshotChecksumIndex: CardChecksumIndex): Promise<string[]>;
23
+ }
24
+ interface AsyncCardAdminStore extends AsyncCardStore {
25
+ validateUpsert(id: string, cardKey: string): Promise<CardUpsertValidation>;
26
+ writeCard(id: string, card: LiveCard, cardKey?: string): Promise<void>;
27
+ patchCard(id: string, jsonPath: string, value: unknown): Promise<void>;
28
+ removeCard(id: string): Promise<void>;
29
+ readIndex(): Promise<CardIndex>;
30
+ }
31
+ interface AsyncStateSnapshotStorageAdapter {
32
+ readValues(scopeId: string): Promise<StateSnapshotReadView>;
33
+ writeValues(scopeId: string, nextValues: Record<string, unknown>, deletedKeys: string[]): Promise<string>;
34
+ }
35
+ declare function createAsyncJsonStorage(kv: AsyncKVStorage): AsyncJSONStorage;
36
+ declare function createAsyncCardStorageAdapter(json: AsyncJSONStorage, computeHash: (v: unknown) => string): AsyncCardStorageAdapter;
37
+ declare function createAsyncCardStore(adapter: AsyncCardStorageAdapter, onWarn?: (msg: string) => void): AsyncCardAdminStore;
38
+ declare function createAsyncStateSnapshotAdapter(kvFactory: (scopeId: string) => AsyncKVStorage, computeHash: (v: unknown) => string): AsyncStateSnapshotStorageAdapter;
39
+ declare function createAsyncStorageProvider(blob: AsyncBlobStorage, kv: AsyncKVStorage, journal: AsyncJournalStorage): AsyncStorageProvider;
40
+
41
+ type CosmosStatusResult<T> = {
42
+ resource?: T;
43
+ statusCode?: number;
44
+ };
45
+ type CosmosAccessCondition = {
46
+ type: 'IfMatch';
47
+ condition: string;
48
+ };
49
+ interface CosmosSqlQuerySpec {
50
+ query: string;
51
+ parameters?: Array<{
52
+ name: string;
53
+ value: unknown;
54
+ }>;
55
+ }
56
+ interface CosmosQueryIteratorLike<T> {
57
+ fetchAll(): Promise<{
58
+ resources: T[];
59
+ }>;
60
+ }
61
+ interface CosmosItemLike<T> {
62
+ read(): Promise<CosmosStatusResult<T>>;
63
+ replace(body: T, options?: {
64
+ accessCondition?: CosmosAccessCondition;
65
+ }): Promise<CosmosStatusResult<T>>;
66
+ delete(): Promise<{
67
+ statusCode?: number;
68
+ }>;
69
+ }
70
+ interface CosmosContainerLike {
71
+ item<T = unknown>(id: string, partitionKey?: unknown): CosmosItemLike<T>;
72
+ items: {
73
+ upsert<T>(body: T): Promise<CosmosStatusResult<T>>;
74
+ create<T>(body: T): Promise<CosmosStatusResult<T>>;
75
+ query<T>(query: CosmosSqlQuerySpec): CosmosQueryIteratorLike<T>;
76
+ };
77
+ }
78
+ type PartitionResolver = string | ((key: string) => string);
79
+ interface CosmosKvStorageOptions {
80
+ partitionKey?: PartitionResolver;
81
+ }
82
+ interface CosmosJournalStorageOptions {
83
+ partitionKey?: PartitionResolver;
84
+ now?: () => Date;
85
+ idFactory?: () => string;
86
+ }
87
+ interface CosmosAtomicRelayLockOptions {
88
+ partitionKey?: string;
89
+ holderId?: string;
90
+ ttlMs?: number;
91
+ now?: () => Date;
92
+ }
93
+ declare function createCosmosKvStorage(container: CosmosContainerLike, options?: CosmosKvStorageOptions): AsyncKVStorage;
94
+ declare function createCosmosJournalStorage(container: CosmosContainerLike, streamKey: string, options?: CosmosJournalStorageOptions): AsyncJournalStorage;
95
+ declare function createCosmosAtomicRelayLock(container: CosmosContainerLike, lockId: string, options?: CosmosAtomicRelayLockOptions): AsyncAtomicRelayLock;
96
+
97
+ interface AzureBlobItemLike {
98
+ name: string;
99
+ properties?: {
100
+ contentLength?: number;
101
+ lastModified?: Date;
102
+ contentType?: string;
103
+ };
104
+ }
105
+ interface AzureBlobClientLike {
106
+ downloadToBuffer(): Promise<Uint8Array>;
107
+ exists(): Promise<boolean>;
108
+ deleteIfExists(): Promise<unknown>;
109
+ getProperties(): Promise<{
110
+ contentLength?: number;
111
+ lastModified?: Date;
112
+ contentType?: string;
113
+ }>;
114
+ }
115
+ interface AzureBlockBlobClientLike {
116
+ upload(data: string | Uint8Array, length: number, options?: {
117
+ blobHTTPHeaders?: {
118
+ blobContentType?: string;
119
+ };
120
+ }): Promise<unknown>;
121
+ }
122
+ interface AzureBlobContainerClientLike {
123
+ getBlobClient(key: string): AzureBlobClientLike;
124
+ getBlockBlobClient(key: string): AzureBlockBlobClientLike;
125
+ listBlobsFlat(options?: {
126
+ prefix?: string;
127
+ }): AsyncIterable<AzureBlobItemLike>;
128
+ }
129
+ interface AzureBlobStorageOptions {
130
+ defaultContentType?: string;
131
+ keyRef?: (key: string) => KindValueRef;
132
+ }
133
+ declare function createAzureBlobStorage(containerClient: AzureBlobContainerClientLike, options?: AzureBlobStorageOptions): AsyncBlobStorage;
134
+
135
+ interface AzureQueueSentMessageLike {
136
+ messageId?: string;
137
+ insertionTime?: Date;
138
+ }
139
+ interface AzureQueueReceivedMessageLike {
140
+ messageId?: string;
141
+ messageText?: string;
142
+ insertedOn?: Date;
143
+ insertionTime?: Date;
144
+ dequeueCount?: number;
145
+ popReceipt?: string;
146
+ nextVisibleOn?: Date;
147
+ }
148
+ interface AzureQueuePeekedMessageLike {
149
+ messageId?: string;
150
+ messageText?: string;
151
+ insertedOn?: Date;
152
+ insertionTime?: Date;
153
+ dequeueCount?: number;
154
+ }
155
+ interface AzureQueueClientLike {
156
+ sendMessage(content: string): Promise<AzureQueueSentMessageLike>;
157
+ receiveMessages(options?: {
158
+ numberOfMessages?: number;
159
+ visibilityTimeout?: number;
160
+ }): Promise<{
161
+ receivedMessageItems: AzureQueueReceivedMessageLike[];
162
+ }>;
163
+ deleteMessage(messageId: string, popReceipt: string): Promise<unknown>;
164
+ updateMessage(messageId: string, popReceipt: string, content: string, visibilityTimeout?: number): Promise<unknown>;
165
+ peekMessages(options?: {
166
+ numberOfMessages?: number;
167
+ }): Promise<{
168
+ peekedMessageItems: AzureQueuePeekedMessageLike[];
169
+ }>;
170
+ }
171
+ interface AzureQueueStorageOptions {
172
+ deadLetterQueueClient?: AzureQueueClientLike;
173
+ now?: () => Date;
174
+ }
175
+ declare function createAzureQueueStorage(queueClient: AzureQueueClientLike, options?: AzureQueueStorageOptions): AsyncQueueStorage;
176
+
177
+ export { AsyncAtomicRelayLock, AsyncBlobStorage, type AsyncCardAdminStore, type AsyncCardStorageAdapter, type AsyncCardStore, AsyncJSONStorage, AsyncJournalStorage, AsyncKVStorage, AsyncQueueStorage, type AsyncStateSnapshotStorageAdapter, AsyncStorageProvider, type AzureBlobClientLike, type AzureBlobContainerClientLike, type AzureBlobItemLike, type AzureBlobStorageOptions, type AzureBlockBlobClientLike, type AzureQueueClientLike, type AzureQueuePeekedMessageLike, type AzureQueueReceivedMessageLike, type AzureQueueSentMessageLike, type AzureQueueStorageOptions, type CosmosAtomicRelayLockOptions, type CosmosContainerLike, type CosmosItemLike, type CosmosJournalStorageOptions, type CosmosKvStorageOptions, type CosmosQueryIteratorLike, type CosmosSqlQuerySpec, createAsyncCardStorageAdapter, createAsyncCardStore, createAsyncJsonStorage, createAsyncStateSnapshotAdapter, createAsyncStorageProvider, createAzureBlobStorage, createAzureQueueStorage, createCosmosAtomicRelayLock, createCosmosJournalStorage, createCosmosKvStorage };
@@ -0,0 +1,2 @@
1
+ export{h as createAsyncBoardConfigStore,j as createAsyncBoardLiveCardsPublic,g as createAsyncBoardWorkerStore,c as createAsyncCardStorageAdapter,d as createAsyncCardStore,b as createAsyncJsonStorage,e as createAsyncStateSnapshotAdapter,f as createAsyncStorageProvider,i as createHostedAsyncBoardPlatformAdapter,a as withAsyncRelayLock}from'./chunk-VMW4Z6EF.js';import'./chunk-HEEDJEKM.js';import'./chunk-N6P2JW4W.js';import'./chunk-XQRNDX4Q.js';import'./chunk-BQS3EIEK.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-JMDHDY6M.js';import'./chunk-VLBB3D6B.js';import'./chunk-MNEOJWPS.js';import'./chunk-KBELAKIY.js';import'./chunk-FW4363Y4.js';function Q(e){if(!e||typeof e!="object")return;let t=e;if(typeof t.statusCode=="number")return t.statusCode;if(typeof t.code=="number")return t.code}function c(e,t){return Q(e)===t}function l(e,t,r){return t?typeof t=="function"?t(e):t:r}function b(e){return (e?.()??new Date).toISOString()}function O(e,t){if(t)return t();let r=String((e?.()??new Date).getTime()).padStart(13,"0"),n=Math.random().toString(36).slice(2,10).padEnd(8,"0");return `${r}-${n}`}function p(e){return {id:e.id,payload:e.payload}}function z(e,t={}){return {async read(r){let n=l(r,t.partitionKey,"kv");try{return (await e.item(r,n).read()).resource?.value??null}catch(o){if(c(o,404))return null;throw o}},async write(r,n){let o=l(r,t.partitionKey,"kv");await e.items.upsert({id:r,pk:o,kind:"kv",value:n});},async delete(r){let n=l(r,t.partitionKey,"kv");try{await e.item(r,n).delete();}catch(o){if(!c(o,404))throw o}},async listKeys(r=""){let{resources:n}=await e.items.query({query:"SELECT c.id FROM c WHERE c.kind = @kind AND STARTSWITH(c.id, @prefix)",parameters:[{name:"@kind",value:"kv"},{name:"@prefix",value:r}]}).fetchAll();return n.map(o=>o.id).sort()}}}function I(e,t,r={}){let n=l(t,r.partitionKey,`journal:${t}`);return {async append(o){let s={id:O(r.now,r.idFactory),pk:n,kind:"journal",streamKey:t,createdAt:b(r.now),payload:o};return await e.items.create(s),p(s)},async readAll(){let{resources:o}=await e.items.query({query:"SELECT * FROM c WHERE c.kind = @kind AND c.pk = @pk AND c.streamKey = @streamKey ORDER BY c.id",parameters:[{name:"@kind",value:"journal"},{name:"@pk",value:n},{name:"@streamKey",value:t}]}).fetchAll();return o.sort((s,a)=>s.id.localeCompare(a.id)).map(p)},async readAfter(o){let{resources:s}=await e.items.query({query:o?"SELECT * FROM c WHERE c.kind = @kind AND c.pk = @pk AND c.streamKey = @streamKey AND c.id > @cursor ORDER BY c.id":"SELECT * FROM c WHERE c.kind = @kind AND c.pk = @pk AND c.streamKey = @streamKey ORDER BY c.id",parameters:[{name:"@kind",value:"journal"},{name:"@pk",value:n},{name:"@streamKey",value:t},...o?[{name:"@cursor",value:o}]:[]]}).fetchAll(),a=s.sort((m,g)=>m.id.localeCompare(g.id));return {entries:a.map(p),newCursor:a.length>0?a[a.length-1].id:o}},async clear(){let o=await this.readAll();await Promise.all(o.map(s=>e.item(s.id,n).delete()));}}}function K(e,t,r={}){let n=r.partitionKey??"lock",o=r.holderId??`holder-${Math.random().toString(36).slice(2,10)}`,s=r.now,a=r.ttlMs??3e4;function m(){let i=s?.()??new Date;return {id:t,pk:n,kind:"lock",held:true,holderId:o,expiresAt:new Date(i.getTime()+a).toISOString(),updatedAt:i.toISOString()}}function g(i){return {...i??{id:t,pk:n,kind:"lock"},kind:"lock",held:false,holderId:o,expiresAt:null,updatedAt:b(s)}}async function k(){try{return (await e.item(t,n).read()).resource??null}catch(i){if(c(i,404))return null;throw i}}function S(i){return i?.held?i.expiresAt?Date.parse(i.expiresAt)>(s?.()??new Date).getTime():true:false}return {async tryAcquire(){let i=await k(),A=m();if(i){if(S(i))return null;try{await e.item(t,n).replace(A,i._etag?{accessCondition:{type:"IfMatch",condition:i._etag}}:void 0);}catch(u){if(c(u,412)||c(u,409))return null;throw u}}else try{await e.items.create(A);}catch(u){if(c(u,409))return null;throw u}return async()=>{let u=await k();if(!u)return;let w=g(u);try{await e.item(t,n).replace(w,u._etag?{accessCondition:{type:"IfMatch",condition:u._etag}}:void 0);}catch{}}}}}function E(e){return new TextDecoder().decode(e)}function J(e,t={}){return {async read(r){if(!await e.getBlobClient(r).exists())return null;let n=await e.getBlobClient(r).downloadToBuffer();return E(n)},async write(r,n){await e.getBlockBlobClient(r).upload(n,new TextEncoder().encode(n).byteLength,{blobHTTPHeaders:{blobContentType:t.defaultContentType??"application/json; charset=utf-8"}});},exists(r){return e.getBlobClient(r).exists()},async remove(r){await e.getBlobClient(r).deleteIfExists();},async readBytes(r){return await e.getBlobClient(r).exists()?await e.getBlobClient(r).downloadToBuffer():null},async writeBytes(r,n){await e.getBlockBlobClient(r).upload(n,n.byteLength,{blobHTTPHeaders:{blobContentType:t.defaultContentType??"application/octet-stream"}});},async listKeys(r=""){let n=[];for await(let o of e.listBlobsFlat({prefix:r}))n.push(o.name);return n.sort()},async stat(r){if(!await e.getBlobClient(r).exists())return null;let n=await e.getBlobClient(r).getProperties();return {key:r,size:Number(n.contentLength??0),updatedAt:n.lastModified?.toISOString(),contentType:n.contentType}},keyRef(r){return t.keyRef?.(r)??{kind:"azure-blob-key",value:r}}}}function C(e){if(!e||typeof e!="object")return;let t=e;if(typeof t.statusCode=="number")return t.statusCode;if(typeof t.code=="number")return t.code}function y(e){let t=JSON.stringify(e),r=globalThis.Buffer;if(r)return r.from(t,"utf-8").toString("base64");if(typeof btoa=="function")return btoa(t);throw new Error("No base64 encoder available in this runtime")}function f(e){let t=e??"",r=globalThis.Buffer;if(r)return JSON.parse(r.from(t,"base64").toString("utf-8"));if(typeof atob=="function")return JSON.parse(atob(t));throw new Error("No base64 decoder available in this runtime")}function d(e,t){return (e??t()).toISOString()}function q(e,t){return {id:String(e.messageId??""),body:f(e.messageText),enqueuedAt:d(e.insertedOn??e.insertionTime,t),attempt:Number(e.dequeueCount??0)}}function j(e,t){return {id:String(e.messageId??""),body:f(e.messageText),enqueuedAt:d(e.insertedOn??e.insertionTime,t),attempt:Number(e.dequeueCount??0),leaseToken:String(e.popReceipt??""),leaseExpiresAt:d(e.nextVisibleOn,t)}}function N(e,t={}){let r=t.now??(()=>new Date);return {async enqueue(n){let o=await e.sendMessage(y(n));return {id:String(o.messageId??""),body:n,enqueuedAt:d(o.insertionTime,r),attempt:0}},async lease(n){return (await e.receiveMessages({numberOfMessages:n?.max,visibilityTimeout:n?.visibilityMs?Math.max(1,Math.ceil(n.visibilityMs/1e3)):void 0})).receivedMessageItems.map(s=>j(s,r))},async ack(n,o){try{return await e.deleteMessage(n,o),!0}catch(s){if(C(s)===404)return false;throw s}},async nack(n,o,s){try{if(s?.dead){if(!t.deadLetterQueueClient)return !1;let a={messageId:n,reason:s.reason??null};return await t.deadLetterQueueClient.sendMessage(y(a)),await e.deleteMessage(n,o),!0}return await e.updateMessage(n,o,y({requeued:!0}),0),!0}catch(a){if(C(a)===404)return false;throw a}},async peekActive(n=""){return (await e.peekMessages({numberOfMessages:32})).peekedMessageItems.map(s=>q(s,r)).filter(s=>!n||s.id.startsWith(n))},async peekDeadLetter(n=""){return t.deadLetterQueueClient?(await t.deadLetterQueueClient.peekMessages({numberOfMessages:32})).peekedMessageItems.map(s=>{let a=f(s.messageText);return {id:String(s.messageId??""),body:a,enqueuedAt:d(s.insertedOn??s.insertionTime,r),attempt:Number(s.dequeueCount??0),reason:typeof a.reason=="string"?a.reason:void 0}}).filter(s=>!n||s.id.startsWith(n)):[]}}}export{J as createAzureBlobStorage,N as createAzureQueueStorage,K as createCosmosAtomicRelayLock,I as createCosmosJournalStorage,z as createCosmosKvStorage};//# sourceMappingURL=cloud-storage.js.map
2
+ //# sourceMappingURL=cloud-storage.js.map
@@ -1,2 +1,2 @@
1
- 'use strict';function u(e,s){return e.replace(/\$\{([^}]+)\}/g,(n,t)=>{let r=s[t.trim()];return r!==void 0?String(r):n})}function f(e,s){if(typeof e=="string")return u(e,s);if(Array.isArray(e))return e.map(n=>f(n,s));if(e!==null&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=f(r,s);return n}return e}function d(e,s){return f(e,s)}function m(e,s){let n={...e};for(let[t,r]of Object.entries(s))t!=="config-template"&&(r!==null&&typeof r=="object"&&!Array.isArray(r)&&n[t]!==null&&typeof n[t]=="object"&&!Array.isArray(n[t])?n[t]={...n[t],...r}:n[t]=r);return n}function k(e){let s=e.configTemplates??e["config-templates"]??{},n="tasks"in e?"tasks":"steps"in e?"steps":null;if(!n)return e;let t=e[n];if(!t||typeof t!="object")return e;let r={};for(let[c,o]of Object.entries(t)){let i=o.config,l=i?.["config-template"];if(!l||!i){r[c]=o;continue}let g=s[l];if(!g){let{"config-template":T,...p}=i;r[c]={...o,config:p};continue}r[c]={...o,config:m(g,i)};}let a={...e,[n]:r};return delete a.configTemplates,delete a["config-templates"],a}exports.resolveConfigTemplates=k;exports.resolveVariables=d;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var chunk2MZUYY65_cjs=require('../chunk-2MZUYY65.cjs');require('../chunk-GNFE24S7.cjs');Object.defineProperty(exports,"resolveConfigTemplates",{enumerable:true,get:function(){return chunk2MZUYY65_cjs.b}});Object.defineProperty(exports,"resolveVariables",{enumerable:true,get:function(){return chunk2MZUYY65_cjs.a}});//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- function u(e,s){return e.replace(/\$\{([^}]+)\}/g,(n,t)=>{let r=s[t.trim()];return r!==void 0?String(r):n})}function f(e,s){if(typeof e=="string")return u(e,s);if(Array.isArray(e))return e.map(n=>f(n,s));if(e!==null&&typeof e=="object"){let n={};for(let[t,r]of Object.entries(e))n[t]=f(r,s);return n}return e}function d(e,s){return f(e,s)}function m(e,s){let n={...e};for(let[t,r]of Object.entries(s))t!=="config-template"&&(r!==null&&typeof r=="object"&&!Array.isArray(r)&&n[t]!==null&&typeof n[t]=="object"&&!Array.isArray(n[t])?n[t]={...n[t],...r}:n[t]=r);return n}function k(e){let s=e.configTemplates??e["config-templates"]??{},n="tasks"in e?"tasks":"steps"in e?"steps":null;if(!n)return e;let t=e[n];if(!t||typeof t!="object")return e;let r={};for(let[c,o]of Object.entries(t)){let i=o.config,l=i?.["config-template"];if(!l||!i){r[c]=o;continue}let g=s[l];if(!g){let{"config-template":T,...p}=i;r[c]={...o,config:p};continue}r[c]={...o,config:m(g,i)};}let a={...e,[n]:r};return delete a.configTemplates,delete a["config-templates"],a}export{k as resolveConfigTemplates,d as resolveVariables};//# sourceMappingURL=index.js.map
1
+ export{b as resolveConfigTemplates,a as resolveVariables}from'../chunk-DAXACY63.js';import'../chunk-FW4363Y4.js';//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,2 @@
1
- 'use strict';var child_process=require('child_process'),module$1=require('module');require('ajv-formats');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var x={NOT_STARTED:"not-started",RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function C(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function O(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function G(e){return e.tasks??{}}function I(e){return e?e.status===x.FAILED||e.status===x.INACTIVATED:false}function ae(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ie(e){return e.maxExecutions}function ce(e,t){let r=new Set;for(let[n,s]of Object.entries(t))if(s.status===x.COMPLETED){let o=e.tasks[n];o&&C(o).forEach(c=>r.add(c));}return Array.from(r)}function ue(e,t){let r={};return e.forEach(n=>{let s=t[n];if(!s)return;C(s).forEach(a=>{r[a]||(r[a]=[]),r[a].push(n);});}),r}function de(e,t,r){let n=e.tasks[t]??P(),s={};if(r){let a=r.tasks[t],c=O(a);for(let p of c)for(let[i,d]of Object.entries(r.tasks))if(C(d).includes(p)){let u=e.tasks[i];u?.lastDataHash&&(s[p]=u.lastDataHash);break}}let o={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function pe(e,t,r,n,s,o){let a=e.tasks[r]??P(),c=t.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let p;n&&c.on&&c.on[n]?p=c.on[n]:p=C(c);let i=a.startConsumedHashes?{...a.startConsumedHashes}:{...a.lastConsumedHashes};if(!a.startConsumedHashes){let l=c.requires??[];for(let k of l)for(let[m,y]of Object.entries(t.tasks))if(C(y).includes(k)){let S=e.tasks[m];S?.lastDataHash&&(i[k]=S.lastDataHash);break}}let d={...a,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:a.executionCount+1,lastEpoch:a.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:i,error:void 0},u=[...new Set([...e.availableOutputs,...p])];return {...e,tasks:{...e.tasks,[r]:d},availableOutputs:u,lastUpdated:new Date().toISOString()}}function fe(e,t,r,n){let s=e.tasks[r]??P(),o=t.tasks[r];if(o?.retry){let p=s.retryCount+1;if(p<=o.retry.max_attempts){let i={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:i},lastUpdated:new Date().toISOString()}}}let a={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},c=e.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(c=[...new Set([...e.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&a.executionCount>=o.circuit_breaker.max_executions){let p=o.circuit_breaker.on_break;c=[...new Set([...c,...p])];}return {...e,tasks:{...e.tasks,[r]:a},availableOutputs:c,lastUpdated:new Date().toISOString()}}function le(e,t,r,n){let s=e.tasks[t]??P(),o={...s,progress:typeof n=="number"?n:s.progress,messages:[...s.messages??[],...r?[{message:r,timestamp:new Date().toISOString(),status:s.status}]:[]],lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function ge(e,t){let r=e.tasks[t];if(!r)return e;let n={...r,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:n},lastUpdated:new Date().toISOString()}}function P(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Y(e,t){let r=t??`live-${Date.now()}`,n={};for(let o of Object.keys(e.tasks))n[o]=V();let s={status:"running",tasks:n,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:r,executionConfig:{executionMode:e.settings.execution_mode??"eligibility-mode",conflictStrategy:e.settings.conflict_strategy??"alphabetical",completionStrategy:e.settings.completion}};return {config:e,state:s}}function X(e,t){let{config:r,state:n}=e;if("executionId"in t&&t.executionId&&t.executionId!==n.executionId)return e;switch(t.type){case "task-started":return {config:r,state:de(n,t.taskName,r)};case "task-completed":return {config:r,state:pe(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:fe(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:le(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:ge(n,t.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...t.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Ee(n,t.action)};case "task-upsert":return M(e,t.taskName,t.taskConfig);case "task-removal":return q(e,t.taskName);case "node-requires-add":return F(e,t.nodeName,t.tokens);case "node-requires-remove":return U(e,t.nodeName,t.tokens);case "node-provides-add":return $(e,t.nodeName,t.tokens);case "node-provides-remove":return K(e,t.nodeName,t.tokens);default:return e}}function L(e,t){return t.reduce((r,n)=>X(r,n),e)}function M(e,t,r){let n=!!e.config.tasks[t];return {config:{...e.config,tasks:{...e.config.tasks,[t]:r}},state:{...e.state,tasks:{...e.state.tasks,[t]:n?e.state.tasks[t]:V()},lastUpdated:new Date().toISOString()}}}function q(e,t){if(!e.config.tasks[t])return e;let{[t]:r,...n}=e.config.tasks,{[t]:s,...o}=e.state.tasks;return {config:{...e.config,tasks:n},state:{...e.state,tasks:o,lastUpdated:new Date().toISOString()}}}function F(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:[...s,...o]}}},state:e.state}}function U(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:o}}},state:e.state}}function $(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=C(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:[...s,...o]}}},state:e.state}}function K(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=C(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:o}}},state:e.state}}function z(e,t){return X(e,{type:"inject-tokens",tokens:t,timestamp:new Date().toISOString()})}function Q(e,t){let r=new Set(t),n=e.state.availableOutputs.filter(s=>!r.has(s));return n.length===e.state.availableOutputs.length?e:{config:e.config,state:{...e.state,availableOutputs:n,lastUpdated:new Date().toISOString()}}}function Z(e,t){return !e.config.tasks[t]||!e.state.tasks[t]?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:V()},lastUpdated:new Date().toISOString()}}}function ee(e,t){let r=e.state.tasks[t];return !r||r.status==="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"inactivated",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function te(e,t){let r=e.state.tasks[t];return !r||r.status!=="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"not-started",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function xe(e,t){let r=e.config.tasks[t];if(!r)return;let n=e.state.tasks[t]??V();return {name:t,config:r,state:n}}function ne(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function Ce(e){if(!e||typeof e!="object")throw new Error("Invalid snapshot: expected an object");let t=e;if(!t.config||typeof t.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!t.state||typeof t.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=t.config,n=t.state;if(!r.settings||typeof r.settings!="object")throw new Error("Invalid snapshot: config.settings missing");if(!r.tasks||typeof r.tasks!="object")throw new Error("Invalid snapshot: config.tasks missing");if(!n.tasks||typeof n.tasks!="object")throw new Error("Invalid snapshot: state.tasks missing");if(!Array.isArray(n.availableOutputs))throw new Error("Invalid snapshot: state.availableOutputs must be an array");return {config:r,state:n}}function V(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Ee(e,t){let r=new Date().toISOString();switch(t){case "stop":return {...e,status:"stopped",lastUpdated:r};case "pause":return {...e,status:"paused",lastUpdated:r};case "resume":return {...e,status:"running",lastUpdated:r};default:return e}}function B(e){let{config:t,state:r}=e,n=G(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=_e(n),a=ce(t,r.tasks),c=new Set([...a,...r.availableOutputs]),p=[],i=[],d=[],u=[];for(let[k,m]of Object.entries(n)){let y=r.tasks[k],S=ae(m,t.settings),w=S!=="once";if(y?.status===x.RUNNING||I(y))continue;let R=ie(m);if(R!==void 0&&y&&y.executionCount>=R||m.circuit_breaker&&y&&y.executionCount>=m.circuit_breaker.max_executions||!w&&y?.status===x.COMPLETED)continue;if(w&&y?.status===x.COMPLETED){let v=O(m),b=false;switch(S){case "data-changed":{v.length>0&&v.some(_=>{for(let[A,j]of Object.entries(n))if(C(j).includes(_)){let N=r.tasks[A];if(!N)continue;let D=y.lastConsumedHashes?.[_];return N.lastDataHash==null?N.executionCount>y.lastEpoch:N.lastDataHash!==D}return false})||(b=true);break}case "epoch-changed":{v.length>0&&v.some(_=>{for(let[A,j]of Object.entries(n))if(C(j).includes(_)){let N=r.tasks[A];if(N&&N.executionCount>y.lastEpoch)return true}return false})||(b=true);break}case "time-based":{let E=m.refreshInterval??0;if(E<=0){b=true;break}let _=y.completedAt;if(!_){b=true;break}(Date.now()-Date.parse(_))/1e3<E&&(b=true);break}case "manual":b=true;break}if(b)continue}let f=O(m);if(f.length===0){p.push(k);continue}let h=[],g=[],T=[];for(let v of f){if(c.has(v))continue;let b=o[v]||[];b.length===0?h.push(v):b.every(_=>I(r.tasks[_]))?T.push({token:v,failedProducer:b[0]}):g.push(v);}h.length>0?d.push({taskName:k,missingTokens:h}):T.length>0?u.push({taskName:k,failedTokens:T.map(v=>v.token),failedProducers:[...new Set(T.map(v=>v.failedProducer))]}):g.length>0?i.push({taskName:k,waitingOn:g}):p.push(k);}let l={};if(p.length>1){let k=ue(p,n);for(let[m,y]of Object.entries(k))y.length>1&&(l[m]=y);}return {eligible:p,pending:i,unresolved:d,blocked:u,conflicts:l}}function _e(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of C(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function Oe(e){let{config:t,state:r}=e,n=G(t),s=Object.keys(n),o=0,a=0,c=0,p=0,i=0,d=0;for(let R of s){let f=r.tasks[R];if(!f||f.status===x.NOT_STARTED)i++;else switch(f.status){case x.RUNNING:o++;break;case x.COMPLETED:a++;break;case x.FAILED:c++;break;case "inactivated":d++;break;default:p++;}}let u={};for(let[R,f]of Object.entries(n)){for(let h of C(f))u[h]||(u[h]=[]),u[h].push(R);if(f.on)for(let h of Object.values(f.on))for(let g of h)u[g]||(u[g]=[]),u[g].includes(R)||u[g].push(R);if(f.on_failure)for(let h of f.on_failure)u[h]||(u[h]=[]),u[h].includes(R)||u[h].push(R);}let l=new Set,k=0,m=0;for(let[R,f]of Object.entries(n)){let h=r.tasks[R];if(h?.status===x.COMPLETED||h?.status===x.RUNNING)continue;let g=false,T=false;for(let v of O(f)){let b=u[v]||[];b.length===0?(l.add(v),g=true):b.every(_=>{let A=r.tasks[_];return A?.status===x.FAILED||A?.status==="inactivated"})&&(T=true);}g&&k++,T&&!g&&m++;}let y=[];for(let[R,f]of Object.entries(u))f.length>1&&y.push(R);let S=Ae(n,u),w=Ge(s,S);return {totalNodes:s.length,running:o,completed:a,failed:c,waiting:p,notStarted:i,disabled:d,unresolvedCount:k,blockedCount:m,openDependencies:[...l],cycles:w,conflictTokens:y}}function Ae(e,t){let r={};for(let[n,s]of Object.entries(e)){r[n]=new Set;for(let o of O(s))for(let a of t[o]||[])a!==n&&r[n].add(a);}return r}function Ge(e,t){let o={},a={},c=[];for(let i of e)o[i]=0,a[i]=null;function p(i){o[i]=1;for(let d of t[i]||[])if(o[d]===1){let u=[d],l=i;for(;l!==d;)u.push(l),l=a[l];u.push(d),u.reverse(),c.push(u);}else o[d]===0&&(a[d]=i,p(d));o[i]=2;}for(let i of e)o[i]===0&&p(i);return c}function ke(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of C(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function me(e){let{config:t,state:r}=e,n=G(t),s=ke(n),o=new Set([...r.availableOutputs]);for(let[u,l]of Object.entries(r.tasks))if(l.status==="completed"){let k=n[u];k&&C(k).forEach(m=>o.add(m));}let a=new Set;for(let u of Object.values(n))for(let l of O(u))a.add(l);let c=new Set,p=new Set;for(let u of a){if(o.has(u))continue;(s[u]||[]).length===0&&c.add(u);}let i=true;for(;i;){i=false;for(let[u,l]of Object.entries(n)){if(p.has(u))continue;let k=r.tasks[u];if(k?.status==="completed")continue;let m=I(k),S=O(l).some(w=>c.has(w));(m||S)&&(p.has(u)||(p.add(u),i=true));}for(let u of a){if(c.has(u)||o.has(u))continue;let l=s[u]||[],k=l.length>0&&l.every(m=>p.has(m)||I(r.tasks[m]));(l.length===0||k)&&(c.has(u)||(c.add(u),i=true));}}let d=[];for(let u of c){let l=s[u]||[],k;l.length===0?k="no-producer":k=l.every(y=>I(r.tasks[y]))?"all-producers-failed":"transitive",d.push({token:u,reason:k,producers:l});}return {tokens:d}}function Ne(e){let{config:t,state:r}=e,n=G(t),{tokens:s}=me(e),o=new Set(s.map(c=>c.token)),a=[];for(let[c,p]of Object.entries(n)){let i=r.tasks[c];if(i?.status==="completed")continue;let u=O(p).filter(l=>o.has(l));u.length>0?a.push({nodeName:c,missingTokens:u}):I(i)&&a.push({nodeName:c,missingTokens:[]});}return {nodes:a}}function Ie(e,t){let r=G(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n=ke(r),s=new Set,o=new Set,a=new Map;function c(i){let d=r[i];if(d)for(let u of O(d)){let l=n[u]||[];for(let k of l)k!==t&&(o.add(u),a.has(k)||a.set(k,new Set),a.get(k).add(u),s.has(k)||(s.add(k),c(k)));}}c(t);let p=[...a.entries()].map(([i,d])=>({nodeName:i,providesTokens:[...d]}));return {nodeName:t,nodes:p,tokens:[...o]}}function je(e,t){let r=G(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n={};for(let[i,d]of Object.entries(r))for(let u of O(d))n[u]||(n[u]=[]),n[u].push(i);let s=new Set,o=new Set,a=new Map;function c(i){let d=r[i];if(d)for(let u of C(d)){let l=n[u]||[];for(let k of l)k!==t&&(o.add(u),a.has(k)||a.set(k,new Set),a.get(k).add(u),s.has(k)||(s.add(k),c(k)));}}c(t);let p=[...a.entries()].map(([i,d])=>({nodeName:i,requiresTokens:[...d]}));return {nodeName:t,nodes:p,tokens:[...o]}}var H=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function W(e){let t=re(e);return He(t)}function re(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(re).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+re(t[n])).join(",")+"}"}function He(e){let t=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<e.length;s++)t^=BigInt(e.charCodeAt(s)),t=t*r&n;return t.toString(16).padStart(16,"0")}function Le(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),r="";for(let n of t)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function De(e){if(typeof Buffer<"u")return Buffer.from(e,"base64url").toString("utf8");if(typeof atob=="function"){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),s=new Uint8Array(n.length);for(let o=0;o<n.length;o++)s[o]=n.charCodeAt(o);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function he(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Le(t)}function Pe(e){try{let t=JSON.parse(De(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function se(e,t,r){let{handlers:n,onNodeRemoved:s,onDrain:o}=t,a=new H,c="state"in e&&"config"in e?e:Y(e,r),p=false,i=new Set,d=new Map(Object.entries(n)),u=new H,l=false,k=false;function m(){if(!p){if(l){k=true;return}l=true;try{do k=!1,y();while(k)}finally{l=false;}}}function y(){let f=u.drain(),h=a.drain(),g=[...f,...h];if(g.length>0&&(c=L(c,g),s)){for(let v of g)if(v.type==="task-removal")try{s(v.taskName);}catch(b){console.warn("[reactive] onNodeRemoved failed:",b instanceof Error?b.message:String(b));}}let T=B(c);g.length>0&&o?.(g,c,T);for(let v of T.eligible)R(v);for(let v of g)if(v.type==="task-progress"){let{taskName:b,update:E}=v;if(!c.config.tasks[b])continue;let A=c.state.tasks[b];if(!A||A.status!=="running")continue;let j=he(b),N=w(b,j,E).catch(D=>{p||(u.append({type:"task-failed",taskName:b,error:D.message??String(D),timestamp:new Date().toISOString()}),m());}).finally(()=>{i.delete(N);});i.add(N);}}function S(f){let g=c.config.tasks[f].requires??[],T=new Map;for(let[b,E]of Object.entries(c.config.tasks))for(let _ of E.provides??[])T.set(_,b);let v={};for(let b of g){let E=T.get(b);E?v[b]=c.state.tasks[E]?.data:v[b]=void 0;}return v}async function w(f,h,g){let T=c.config.tasks[f],v=T.taskHandlers??[],b=S(f);for(let E of v){let _=d.get(E);if(!_)throw new Error(`Handler '${E}' not found in registry (task '${f}')`);let A={nodeId:f,state:b,taskState:c.state.tasks[f],config:T,callbackToken:h,update:g};if(await _(A)==="task-initiate-failure")throw new Error(`Handler '${E}' returned task-initiate-failure (task '${f}')`)}}function R(f){let g=c.config.tasks[f]?.taskHandlers;if(!g||g.length===0)return;u.append({type:"task-started",taskName:f,timestamp:new Date().toISOString()}),m();let T=he(f),v=w(f,T).catch(b=>{p||(u.append({type:"task-failed",taskName:f,error:b.message??String(b),timestamp:new Date().toISOString()}),m());}).finally(()=>{i.delete(v);});i.add(v);}return {push(f){p||(f.type==="task-completed"&&f.data&&!f.dataHash&&(f={...f,dataHash:W(f.data)}),a.append(f),m());},pushAll(f){if(!p){for(let h of f)h.type==="task-completed"&&h.data&&!h.dataHash?a.append({...h,dataHash:W(h.data)}):a.append(h);m();}},resolveCallback(f,h,g){if(p)return;let T=Pe(f);if(!T)return;let{taskName:v}=T;if(c.config.tasks[v]){if(g&&g.length>0)a.append({type:"task-failed",taskName:v,error:g.join("; "),timestamp:new Date().toISOString()});else {let b=h&&Object.keys(h).length>0?W(h):void 0;a.append({type:"task-completed",taskName:v,data:h,dataHash:b,timestamp:new Date().toISOString()});}m();}},addNode(f,h){p||(a.append({type:"task-upsert",taskName:f,taskConfig:h,timestamp:new Date().toISOString()}),m());},removeNode(f){p||(a.append({type:"task-removal",taskName:f,timestamp:new Date().toISOString()}),m());},addRequires(f,h){p||(a.append({type:"node-requires-add",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},removeRequires(f,h){p||(a.append({type:"node-requires-remove",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},addProvides(f,h){p||(a.append({type:"node-provides-add",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},removeProvides(f,h){p||(a.append({type:"node-provides-remove",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},registerHandler(f,h){d.set(f,h);},unregisterHandler(f){d.delete(f);},retrigger(f){p||c.config.tasks[f]&&(a.append({type:"task-restart",taskName:f,timestamp:new Date().toISOString()}),m());},retriggerAll(f){if(!p){for(let h of f)c.config.tasks[h]&&a.append({type:"task-restart",taskName:h,timestamp:new Date().toISOString()});m();}},snapshot(){return ne(c)},getState(){return c},getSchedule(){return B(c)},async waitForHandlers(){i.size>0&&await Promise.allSettled([...i]);},async dispose(f){f?.wait&&i.size>0&&await Promise.allSettled([...i]),p=true;}}}function ve(e){let t=[],{config:r,state:n}=e,s=G(r),o=Object.keys(s);for(let i of o)n.tasks[i]||t.push({severity:"error",code:"MISSING_STATE",message:`Task "${i}" exists in config but has no state entry`,tasks:[i]});for(let i of Object.keys(n.tasks))s[i]||t.push({severity:"warning",code:"ORPHAN_STATE",message:`State entry "${i}" has no corresponding task config`,tasks:[i]});for(let i of o){let d=n.tasks[i];d&&(d.status===x.RUNNING&&!d.startedAt&&t.push({severity:"warning",code:"RUNNING_WITHOUT_START",message:`Task "${i}" is running but has no startedAt timestamp`,tasks:[i]}),d.status===x.COMPLETED&&!d.completedAt&&t.push({severity:"warning",code:"COMPLETED_WITHOUT_TIMESTAMP",message:`Task "${i}" is completed but has no completedAt timestamp`,tasks:[i]}),d.status===x.FAILED&&(d.failedAt||t.push({severity:"warning",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no failedAt timestamp`,tasks:[i]}),d.error||t.push({severity:"info",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no error message`,tasks:[i]})));}let a=new Set;for(let i of o)if(n.tasks[i]?.status===x.COMPLETED)for(let u of C(s[i]))a.add(u);let c=new Set(n.availableOutputs),p=new Set;for(let i of Object.values(s)){for(let d of C(i))p.add(d);if(i.on)for(let d of Object.values(i.on))for(let u of d)p.add(u);if(i.on_failure)for(let d of i.on_failure)p.add(d);}for(let i of c)!a.has(i)&&!p.has(i)&&t.push({severity:"info",code:"INJECTED_TOKEN",message:`Token "${i}" is available but no task in the graph can produce it (likely injected)`,tokens:[i]});for(let i of a)c.has(i)||t.push({severity:"warning",code:"MISSING_OUTPUT",message:`Token "${i}" should be available (its producer completed) but is not in availableOutputs`,tokens:[i]});for(let i of o){let d=n.tasks[i];if(!d)continue;d.executionCount<0&&t.push({severity:"error",code:"INVALID_EXECUTION_COUNT",message:`Task "${i}" has negative execution count: ${d.executionCount}`,tasks:[i]});let u=s[i].maxExecutions;u!==void 0&&d.executionCount>u&&t.push({severity:"error",code:"EXCEEDED_MAX_EXECUTIONS",message:`Task "${i}" executed ${d.executionCount} times, exceeding maxExecutions of ${u}`,tasks:[i]});}return ye(t)}function Me(e){let{graph:t,handlers:r}=e,n=t.getState(),s=[],o=G(n.config),a=Object.keys(o),c=new Set(Object.keys(r)),p=new Set;for(let d of a){let u=o[d].taskHandlers;if(u)for(let l of u)p.add(l);}for(let d of a){let u=o[d].taskHandlers;if(u)for(let l of u)r[l]||s.push({severity:"error",code:"MISSING_HANDLER",message:`Task "${d}" references handler "${l}" but it is not in the registry`,tasks:[d]});}for(let d of c)p.has(d)||s.push({severity:"warning",code:"ORPHAN_HANDLER",message:`Handler "${d}" is registered but not referenced by any task's taskHandlers`,tasks:[d]});let i=ve(n);return s.push(...i.issues),ye(s)}function ye(e){let t=e.filter(n=>n.severity==="error"),r=e.filter(n=>n.severity==="warning");return {valid:t.length===0,issues:e,errors:t,warnings:r}}function qe(e,t){let r=e;for(let n of t)r=Fe(r,n);return r}function Fe(e,t){switch(t.type){case "add-node":return M(e,t.name,t.config);case "remove-node":return q(e,t.name);case "add-requires":return F(e,t.taskName,t.tokens);case "remove-requires":return U(e,t.taskName,t.tokens);case "add-provides":return $(e,t.taskName,t.tokens);case "remove-provides":return K(e,t.taskName,t.tokens);case "inject-tokens":return z(e,t.tokens);case "drain-tokens":return Q(e,t.tokens);case "reset-node":return Z(e,t.name);case "disable-node":return ee(e,t.name);case "enable-node":return te(e,t.name);case "apply-events":return L(e,t.events);default:throw new Error(`Unknown mutation type: ${t.type}`)}}function Ke(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(s=>t()(n,s)).catch(s=>t()(n,{},[s instanceof Error?s.message:String(s)])),"task-initiated"}}function Ve(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(()=>t()(n,{})).catch(()=>t()(n,{})),"task-initiated"}}function Be(e){let{command:t,cwd:r,env:n,timeoutMs:s=3e4,exitCodeMap:o,captureOutput:a=false,getResolve:c}=e;return async p=>{let{callbackToken:i,nodeId:d}=p,u=t.replace(/\$\{taskName\}/g,d);return child_process.exec(u,{cwd:r,env:n?{...process.env,...n}:void 0,timeout:s,maxBuffer:10*1024*1024},(l,k,m)=>{let y=l?.code??(l?1:0);if(y!==0&&!o?.[y]){c()(i,{},[`Command exited with code ${y}: ${m||l?.message}`]);return}let S={};a&&(S.stdout=k,S.stderr=m,S.exitCode=y),c()(i,S);}),"task-initiated"}}function be(e){let{command:t,args:r=[],cwd:n,env:s,timeoutMs:o=3e4,exitCodeMap:a,captureOutput:c=false,getResolve:p}=e;return async i=>{let{callbackToken:d,nodeId:u}=i,l=t.replace(/\$\{taskName\}/g,u),k=r.map(m=>m.replace(/\$\{taskName\}/g,u));return child_process.execFile(l,k,{cwd:n,env:s?{...process.env,...s}:void 0,timeout:o,maxBuffer:10*1024*1024,encoding:"utf8",windowsHide:true},(m,y,S)=>{let w=m?.code??(m?1:0);if(w!==0&&!a?.[w]){p()(d,{},[`Process exited with code ${w}: ${S||m?.message}`]);return}let R={};c&&(R.stdout=y,R.stderr=S,R.exitCode=w),p()(d,R);}),"task-initiated"}}function We(e){return e.endsWith(".js")||e.endsWith(".mjs")||e.endsWith(".ts")?"node":e.endsWith(".py")?"python3":(e.endsWith(".sh"),"bash")}function Je(e){let{scriptPath:t,runtime:r,args:n=[],cwd:s,timeoutMs:o=6e4,captureOutput:a=false,getResolve:c}=e,p=r??We(t),i=p==="node"?process.execPath:p;return be({command:i,args:[t,"${taskName}",...n],cwd:s,timeoutMs:o,captureOutput:a,getResolve:c})}function Ye(e){let{url:t,method:r="POST",headers:n={},timeoutMs:s=3e4,failOnNon2xx:o=true,getResolve:a}=e;return async c=>{let{callbackToken:p,nodeId:i,config:d}=c,u=t.replace(/\$\{taskName\}/g,i),l=JSON.stringify({taskName:i,callbackToken:p,config:d}),k=new AbortController,m=setTimeout(()=>k.abort(),s);return fetch(u,{method:r,headers:{"Content-Type":"application/json",...n},body:l,signal:k.signal}).then(async y=>{if(clearTimeout(m),o&&!y.ok){let w=await y.text().catch(()=>"");a()(p,{},[`HTTP ${y.status}: ${w}`]);return}let S=await y.json().catch(()=>({}));a()(p,S);}).catch(y=>{clearTimeout(m),a()(p,{},[y instanceof Error?y.message:String(y)]);}),"task-initiated"}}function Xe(e,t){return async r=>(e()(r.callbackToken,t??{}),"task-initiated")}var Qe=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));Qe("./jsonata-sync.cjs");var et=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))),J=et("./jsonata-sync.cjs"),Re=J;function Te(e,t){if(!t||!e)return;let r=t.split("."),n=e;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function we(e,t,r){let n=t.split("."),s=e;for(let o=0;o<n.length-1;o++)(s[n[o]]==null||typeof s[n[o]]!="object")&&(s[n[o]]={}),s=s[n[o]];s[n[n.length-1]]=r;}async function tt(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let s of e.compute)try{let o=await J(s.expr).evaluate(n);we(e.computed_values,s.bindTo,o),n.computed_values=e.computed_values;}catch{}return e}function nt(e,t){if(!e?.compute?.length)return {ok:true,node:e};e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values},s=[];for(let o of e.compute)try{let a=Re(o.expr).evaluate(n);we(e.computed_values,o.bindTo,a),n.computed_values=e.computed_values;}catch(a){let c=a instanceof Error?a.message:String(a);s.push({bindTo:o.bindTo,error:c});}return s.length>0?{ok:true,node:e,errors:s}:{ok:true,node:e}}async function rt(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return J(e).evaluate(n)}function st(e,t){return t.startsWith("fetched_sources.")?Te(e._sourcesData??{},t.slice(16)):Te(e,t)}var Se=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),ot=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function at(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:false,errors:["Node must be a non-null object"]};let r=e;(typeof r.id!="string"||!r.id)&&t.push("id: required, must be a non-empty string");for(let n of Object.keys(r))ot.has(n)||t.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&t.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))t.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&t.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&t.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&t.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`provides[${s}]: must be an object with bindTo and ref`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`provides[${s}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&t.push(`provides[${s}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`compute[${s}]: must be a compute step object`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`compute[${s}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&t.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))t.push("source_defs: must be an array");else {let n=new Set,s=new Set;r.source_defs.forEach((o,a)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${a}]: must be an object`);else {let c=o;typeof c.bindTo!="string"||!c.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(n.has(c.bindTo)&&t.push(`source_defs[${a}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(s.has(c.outputFile)&&t.push(`source_defs[${a}]: outputFile "${c.outputFile}" is not unique across source_defs`),s.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${a}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))t.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?t.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,o)=>{if(!s||typeof s!="object"){t.push(`view.elements[${o}]: must be an object`);return}!s.kind||typeof s.kind!="string"?t.push(`view.elements[${o}].kind: required, must be a string`):Se.has(s.kind)||t.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...Se].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&t.push(`view.elements[${o}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&t.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function it(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(e.map(async n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=await J(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function ct(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return e.map(n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=Re(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var oe={run:tt,runSync:nt,eval:rt,resolve:st,validate:at,enrichSources:it,enrichSourcesSync:ct};function ut(e,t={}){let r,n={},s;if(!Array.isArray(e)&&"nodes"in e){let g=e;r=g.nodes,s=g.id,n=g.settings??{};}else r=e;let{sourceHandlers:o={},defaultSourceHandler:a,cardHandlers:c={},reactiveOptions:p={},graphSettings:i={},executionId:d}=t,u=new Map;for(let g of r){if(u.has(g.id))throw new Error(`Duplicate card ID: "${g.id}"`);u.set(g.id,g);}let l=t.sharedState??new Map,k={},m=new Set,y=new Map;for(let g of r)for(let T of g.provides??[{bindTo:g.id,ref:"card_data"}])m.add(T.bindTo),y.set(T.bindTo,g.id);for(let g of r){let T=g.requires??[];for(let v of T)if(!m.has(v))throw new Error(`Card "${g.id}" requires "${v}" but no card provides that token`);k[g.id]={requires:T.length>0?T:void 0,provides:(g.provides??[{bindTo:g.id,ref:"card_data"}]).map(v=>v.bindTo),taskHandlers:[g.id],description:g.meta?.title??g.id};}let S={id:s??`live-cards-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n,...i},tasks:k},w={},R=null,f=()=>(g,T,v)=>{R.resolveCallback(g,T,v);};for(let g of r)g.source_defs&&g.source_defs.length>0?w[g.id]=dt(g,o,a,l,f):w[g.id]=pt(g,c,l,u,y,f);let h=se(S,{...p,handlers:w},d);return R=h,{graph:h,config:S,handlers:w,cards:u,sharedState:l}}function dt(e,t,r,n,s){if(t[e.id]){let o=t[e.id];return async a=>o(a)}if(r){let o=r(e);return async a=>o(a)}return async o=>{let a={...e.card_data};return n.set(e.id,a),s()(o.callbackToken,a),"task-initiated"}}function pt(e,t,r,n,s,o){if(t[e.id]){let a=t[e.id];return async c=>a(c)}return async a=>{let c={},p=e.requires??[];for(let l of p){let k=s.get(l)??l,m=r.get(k);m&&(c[l]=m[l]??m);}let i={id:e.id,card_data:{...e.card_data},requires:c,compute:e.compute};await oe.run(i);let d;if(e.provides&&e.provides.length>0){d={};for(let{bindTo:l,ref:k}of e.provides)d[l]=oe.resolve(i,k);}else d={...i.card_data,...i.computed_values};let u={...i.card_data,...i.computed_values};return r.set(e.id,u),o()(a.callbackToken,d),"task-initiated"}}
2
- exports.MemoryJournal=H;exports.addNode=M;exports.addProvides=$;exports.addRequires=F;exports.applyEvent=X;exports.applyEvents=L;exports.computeDataHash=W;exports.createCallbackHandler=Ke;exports.createFireAndForgetHandler=Ve;exports.createLiveGraph=Y;exports.createNoopHandler=Xe;exports.createProcessHandler=be;exports.createReactiveGraph=se;exports.createScriptHandler=Je;exports.createShellHandler=Be;exports.createWebhookHandler=Ye;exports.disableNode=ee;exports.drainTokens=Q;exports.enableNode=te;exports.getDownstream=je;exports.getNode=xe;exports.getUnreachableNodes=Ne;exports.getUnreachableTokens=me;exports.getUpstream=Ie;exports.injectTokens=z;exports.inspect=Oe;exports.liveCardsToReactiveGraph=ut;exports.mutateGraph=qe;exports.removeNode=q;exports.removeProvides=K;exports.removeRequires=U;exports.resetNode=Z;exports.restore=Ce;exports.schedule=B;exports.snapshot=ne;exports.validateLiveGraph=ve;exports.validateReactiveGraph=Me;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var chunkJAL25FGA_cjs=require('../chunk-JAL25FGA.cjs'),chunkG4XXRHL2_cjs=require('../chunk-G4XXRHL2.cjs');require('../chunk-LODXIALE.cjs'),require('../chunk-IXZG74EW.cjs'),require('../chunk-NMZ6XNLB.cjs'),require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createCallbackHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.i}});Object.defineProperty(exports,"createFireAndForgetHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.j}});Object.defineProperty(exports,"createNoopHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.o}});Object.defineProperty(exports,"createProcessHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.l}});Object.defineProperty(exports,"createScriptHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.m}});Object.defineProperty(exports,"createShellHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.k}});Object.defineProperty(exports,"createWebhookHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.n}});Object.defineProperty(exports,"getDownstream",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.e}});Object.defineProperty(exports,"getUnreachableNodes",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.c}});Object.defineProperty(exports,"getUnreachableTokens",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.b}});Object.defineProperty(exports,"getUpstream",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.d}});Object.defineProperty(exports,"inspect",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.a}});Object.defineProperty(exports,"liveCardsToReactiveGraph",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.p}});Object.defineProperty(exports,"mutateGraph",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.h}});Object.defineProperty(exports,"validateLiveGraph",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.f}});Object.defineProperty(exports,"validateReactiveGraph",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.g}});Object.defineProperty(exports,"MemoryJournal",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.s}});Object.defineProperty(exports,"addNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.d}});Object.defineProperty(exports,"addProvides",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.h}});Object.defineProperty(exports,"addRequires",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.f}});Object.defineProperty(exports,"applyEvent",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.b}});Object.defineProperty(exports,"applyEvents",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.c}});Object.defineProperty(exports,"computeDataHash",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.t}});Object.defineProperty(exports,"createLiveGraph",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.a}});Object.defineProperty(exports,"createReactiveGraph",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.u}});Object.defineProperty(exports,"disableNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.m}});Object.defineProperty(exports,"drainTokens",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.k}});Object.defineProperty(exports,"enableNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.n}});Object.defineProperty(exports,"getNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.o}});Object.defineProperty(exports,"injectTokens",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.j}});Object.defineProperty(exports,"removeNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.e}});Object.defineProperty(exports,"removeProvides",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.i}});Object.defineProperty(exports,"removeRequires",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.g}});Object.defineProperty(exports,"resetNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.l}});Object.defineProperty(exports,"restore",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.q}});Object.defineProperty(exports,"schedule",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.r}});Object.defineProperty(exports,"snapshot",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.p}});//# sourceMappingURL=index.cjs.map
3
2
  //# sourceMappingURL=index.cjs.map
@@ -1,3 +1,2 @@
1
- import {exec,execFile}from'child_process';import {createRequire}from'module';import'ajv-formats';var x={NOT_STARTED:"not-started",RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function C(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function O(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function G(e){return e.tasks??{}}function I(e){return e?e.status===x.FAILED||e.status===x.INACTIVATED:false}function ae(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ie(e){return e.maxExecutions}function ce(e,t){let r=new Set;for(let[n,s]of Object.entries(t))if(s.status===x.COMPLETED){let o=e.tasks[n];o&&C(o).forEach(c=>r.add(c));}return Array.from(r)}function ue(e,t){let r={};return e.forEach(n=>{let s=t[n];if(!s)return;C(s).forEach(a=>{r[a]||(r[a]=[]),r[a].push(n);});}),r}function de(e,t,r){let n=e.tasks[t]??P(),s={};if(r){let a=r.tasks[t],c=O(a);for(let p of c)for(let[i,d]of Object.entries(r.tasks))if(C(d).includes(p)){let u=e.tasks[i];u?.lastDataHash&&(s[p]=u.lastDataHash);break}}let o={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function pe(e,t,r,n,s,o){let a=e.tasks[r]??P(),c=t.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let p;n&&c.on&&c.on[n]?p=c.on[n]:p=C(c);let i=a.startConsumedHashes?{...a.startConsumedHashes}:{...a.lastConsumedHashes};if(!a.startConsumedHashes){let l=c.requires??[];for(let k of l)for(let[m,y]of Object.entries(t.tasks))if(C(y).includes(k)){let S=e.tasks[m];S?.lastDataHash&&(i[k]=S.lastDataHash);break}}let d={...a,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:a.executionCount+1,lastEpoch:a.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:i,error:void 0},u=[...new Set([...e.availableOutputs,...p])];return {...e,tasks:{...e.tasks,[r]:d},availableOutputs:u,lastUpdated:new Date().toISOString()}}function fe(e,t,r,n){let s=e.tasks[r]??P(),o=t.tasks[r];if(o?.retry){let p=s.retryCount+1;if(p<=o.retry.max_attempts){let i={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:i},lastUpdated:new Date().toISOString()}}}let a={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},c=e.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(c=[...new Set([...e.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&a.executionCount>=o.circuit_breaker.max_executions){let p=o.circuit_breaker.on_break;c=[...new Set([...c,...p])];}return {...e,tasks:{...e.tasks,[r]:a},availableOutputs:c,lastUpdated:new Date().toISOString()}}function le(e,t,r,n){let s=e.tasks[t]??P(),o={...s,progress:typeof n=="number"?n:s.progress,messages:[...s.messages??[],...r?[{message:r,timestamp:new Date().toISOString(),status:s.status}]:[]],lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function ge(e,t){let r=e.tasks[t];if(!r)return e;let n={...r,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:n},lastUpdated:new Date().toISOString()}}function P(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Y(e,t){let r=t??`live-${Date.now()}`,n={};for(let o of Object.keys(e.tasks))n[o]=V();let s={status:"running",tasks:n,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:r,executionConfig:{executionMode:e.settings.execution_mode??"eligibility-mode",conflictStrategy:e.settings.conflict_strategy??"alphabetical",completionStrategy:e.settings.completion}};return {config:e,state:s}}function X(e,t){let{config:r,state:n}=e;if("executionId"in t&&t.executionId&&t.executionId!==n.executionId)return e;switch(t.type){case "task-started":return {config:r,state:de(n,t.taskName,r)};case "task-completed":return {config:r,state:pe(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:fe(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:le(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:ge(n,t.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...t.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Ee(n,t.action)};case "task-upsert":return M(e,t.taskName,t.taskConfig);case "task-removal":return q(e,t.taskName);case "node-requires-add":return F(e,t.nodeName,t.tokens);case "node-requires-remove":return U(e,t.nodeName,t.tokens);case "node-provides-add":return $(e,t.nodeName,t.tokens);case "node-provides-remove":return K(e,t.nodeName,t.tokens);default:return e}}function L(e,t){return t.reduce((r,n)=>X(r,n),e)}function M(e,t,r){let n=!!e.config.tasks[t];return {config:{...e.config,tasks:{...e.config.tasks,[t]:r}},state:{...e.state,tasks:{...e.state.tasks,[t]:n?e.state.tasks[t]:V()},lastUpdated:new Date().toISOString()}}}function q(e,t){if(!e.config.tasks[t])return e;let{[t]:r,...n}=e.config.tasks,{[t]:s,...o}=e.state.tasks;return {config:{...e.config,tasks:n},state:{...e.state,tasks:o,lastUpdated:new Date().toISOString()}}}function F(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:[...s,...o]}}},state:e.state}}function U(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:o}}},state:e.state}}function $(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=C(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:[...s,...o]}}},state:e.state}}function K(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=C(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:o}}},state:e.state}}function z(e,t){return X(e,{type:"inject-tokens",tokens:t,timestamp:new Date().toISOString()})}function Q(e,t){let r=new Set(t),n=e.state.availableOutputs.filter(s=>!r.has(s));return n.length===e.state.availableOutputs.length?e:{config:e.config,state:{...e.state,availableOutputs:n,lastUpdated:new Date().toISOString()}}}function Z(e,t){return !e.config.tasks[t]||!e.state.tasks[t]?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:V()},lastUpdated:new Date().toISOString()}}}function ee(e,t){let r=e.state.tasks[t];return !r||r.status==="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"inactivated",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function te(e,t){let r=e.state.tasks[t];return !r||r.status!=="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"not-started",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function xe(e,t){let r=e.config.tasks[t];if(!r)return;let n=e.state.tasks[t]??V();return {name:t,config:r,state:n}}function ne(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function Ce(e){if(!e||typeof e!="object")throw new Error("Invalid snapshot: expected an object");let t=e;if(!t.config||typeof t.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!t.state||typeof t.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=t.config,n=t.state;if(!r.settings||typeof r.settings!="object")throw new Error("Invalid snapshot: config.settings missing");if(!r.tasks||typeof r.tasks!="object")throw new Error("Invalid snapshot: config.tasks missing");if(!n.tasks||typeof n.tasks!="object")throw new Error("Invalid snapshot: state.tasks missing");if(!Array.isArray(n.availableOutputs))throw new Error("Invalid snapshot: state.availableOutputs must be an array");return {config:r,state:n}}function V(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Ee(e,t){let r=new Date().toISOString();switch(t){case "stop":return {...e,status:"stopped",lastUpdated:r};case "pause":return {...e,status:"paused",lastUpdated:r};case "resume":return {...e,status:"running",lastUpdated:r};default:return e}}function B(e){let{config:t,state:r}=e,n=G(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=_e(n),a=ce(t,r.tasks),c=new Set([...a,...r.availableOutputs]),p=[],i=[],d=[],u=[];for(let[k,m]of Object.entries(n)){let y=r.tasks[k],S=ae(m,t.settings),w=S!=="once";if(y?.status===x.RUNNING||I(y))continue;let R=ie(m);if(R!==void 0&&y&&y.executionCount>=R||m.circuit_breaker&&y&&y.executionCount>=m.circuit_breaker.max_executions||!w&&y?.status===x.COMPLETED)continue;if(w&&y?.status===x.COMPLETED){let v=O(m),b=false;switch(S){case "data-changed":{v.length>0&&v.some(_=>{for(let[A,j]of Object.entries(n))if(C(j).includes(_)){let N=r.tasks[A];if(!N)continue;let D=y.lastConsumedHashes?.[_];return N.lastDataHash==null?N.executionCount>y.lastEpoch:N.lastDataHash!==D}return false})||(b=true);break}case "epoch-changed":{v.length>0&&v.some(_=>{for(let[A,j]of Object.entries(n))if(C(j).includes(_)){let N=r.tasks[A];if(N&&N.executionCount>y.lastEpoch)return true}return false})||(b=true);break}case "time-based":{let E=m.refreshInterval??0;if(E<=0){b=true;break}let _=y.completedAt;if(!_){b=true;break}(Date.now()-Date.parse(_))/1e3<E&&(b=true);break}case "manual":b=true;break}if(b)continue}let f=O(m);if(f.length===0){p.push(k);continue}let h=[],g=[],T=[];for(let v of f){if(c.has(v))continue;let b=o[v]||[];b.length===0?h.push(v):b.every(_=>I(r.tasks[_]))?T.push({token:v,failedProducer:b[0]}):g.push(v);}h.length>0?d.push({taskName:k,missingTokens:h}):T.length>0?u.push({taskName:k,failedTokens:T.map(v=>v.token),failedProducers:[...new Set(T.map(v=>v.failedProducer))]}):g.length>0?i.push({taskName:k,waitingOn:g}):p.push(k);}let l={};if(p.length>1){let k=ue(p,n);for(let[m,y]of Object.entries(k))y.length>1&&(l[m]=y);}return {eligible:p,pending:i,unresolved:d,blocked:u,conflicts:l}}function _e(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of C(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function Oe(e){let{config:t,state:r}=e,n=G(t),s=Object.keys(n),o=0,a=0,c=0,p=0,i=0,d=0;for(let R of s){let f=r.tasks[R];if(!f||f.status===x.NOT_STARTED)i++;else switch(f.status){case x.RUNNING:o++;break;case x.COMPLETED:a++;break;case x.FAILED:c++;break;case "inactivated":d++;break;default:p++;}}let u={};for(let[R,f]of Object.entries(n)){for(let h of C(f))u[h]||(u[h]=[]),u[h].push(R);if(f.on)for(let h of Object.values(f.on))for(let g of h)u[g]||(u[g]=[]),u[g].includes(R)||u[g].push(R);if(f.on_failure)for(let h of f.on_failure)u[h]||(u[h]=[]),u[h].includes(R)||u[h].push(R);}let l=new Set,k=0,m=0;for(let[R,f]of Object.entries(n)){let h=r.tasks[R];if(h?.status===x.COMPLETED||h?.status===x.RUNNING)continue;let g=false,T=false;for(let v of O(f)){let b=u[v]||[];b.length===0?(l.add(v),g=true):b.every(_=>{let A=r.tasks[_];return A?.status===x.FAILED||A?.status==="inactivated"})&&(T=true);}g&&k++,T&&!g&&m++;}let y=[];for(let[R,f]of Object.entries(u))f.length>1&&y.push(R);let S=Ae(n,u),w=Ge(s,S);return {totalNodes:s.length,running:o,completed:a,failed:c,waiting:p,notStarted:i,disabled:d,unresolvedCount:k,blockedCount:m,openDependencies:[...l],cycles:w,conflictTokens:y}}function Ae(e,t){let r={};for(let[n,s]of Object.entries(e)){r[n]=new Set;for(let o of O(s))for(let a of t[o]||[])a!==n&&r[n].add(a);}return r}function Ge(e,t){let o={},a={},c=[];for(let i of e)o[i]=0,a[i]=null;function p(i){o[i]=1;for(let d of t[i]||[])if(o[d]===1){let u=[d],l=i;for(;l!==d;)u.push(l),l=a[l];u.push(d),u.reverse(),c.push(u);}else o[d]===0&&(a[d]=i,p(d));o[i]=2;}for(let i of e)o[i]===0&&p(i);return c}function ke(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of C(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function me(e){let{config:t,state:r}=e,n=G(t),s=ke(n),o=new Set([...r.availableOutputs]);for(let[u,l]of Object.entries(r.tasks))if(l.status==="completed"){let k=n[u];k&&C(k).forEach(m=>o.add(m));}let a=new Set;for(let u of Object.values(n))for(let l of O(u))a.add(l);let c=new Set,p=new Set;for(let u of a){if(o.has(u))continue;(s[u]||[]).length===0&&c.add(u);}let i=true;for(;i;){i=false;for(let[u,l]of Object.entries(n)){if(p.has(u))continue;let k=r.tasks[u];if(k?.status==="completed")continue;let m=I(k),S=O(l).some(w=>c.has(w));(m||S)&&(p.has(u)||(p.add(u),i=true));}for(let u of a){if(c.has(u)||o.has(u))continue;let l=s[u]||[],k=l.length>0&&l.every(m=>p.has(m)||I(r.tasks[m]));(l.length===0||k)&&(c.has(u)||(c.add(u),i=true));}}let d=[];for(let u of c){let l=s[u]||[],k;l.length===0?k="no-producer":k=l.every(y=>I(r.tasks[y]))?"all-producers-failed":"transitive",d.push({token:u,reason:k,producers:l});}return {tokens:d}}function Ne(e){let{config:t,state:r}=e,n=G(t),{tokens:s}=me(e),o=new Set(s.map(c=>c.token)),a=[];for(let[c,p]of Object.entries(n)){let i=r.tasks[c];if(i?.status==="completed")continue;let u=O(p).filter(l=>o.has(l));u.length>0?a.push({nodeName:c,missingTokens:u}):I(i)&&a.push({nodeName:c,missingTokens:[]});}return {nodes:a}}function Ie(e,t){let r=G(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n=ke(r),s=new Set,o=new Set,a=new Map;function c(i){let d=r[i];if(d)for(let u of O(d)){let l=n[u]||[];for(let k of l)k!==t&&(o.add(u),a.has(k)||a.set(k,new Set),a.get(k).add(u),s.has(k)||(s.add(k),c(k)));}}c(t);let p=[...a.entries()].map(([i,d])=>({nodeName:i,providesTokens:[...d]}));return {nodeName:t,nodes:p,tokens:[...o]}}function je(e,t){let r=G(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n={};for(let[i,d]of Object.entries(r))for(let u of O(d))n[u]||(n[u]=[]),n[u].push(i);let s=new Set,o=new Set,a=new Map;function c(i){let d=r[i];if(d)for(let u of C(d)){let l=n[u]||[];for(let k of l)k!==t&&(o.add(u),a.has(k)||a.set(k,new Set),a.get(k).add(u),s.has(k)||(s.add(k),c(k)));}}c(t);let p=[...a.entries()].map(([i,d])=>({nodeName:i,requiresTokens:[...d]}));return {nodeName:t,nodes:p,tokens:[...o]}}var H=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function W(e){let t=re(e);return He(t)}function re(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(re).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+re(t[n])).join(",")+"}"}function He(e){let t=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<e.length;s++)t^=BigInt(e.charCodeAt(s)),t=t*r&n;return t.toString(16).padStart(16,"0")}function Le(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),r="";for(let n of t)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function De(e){if(typeof Buffer<"u")return Buffer.from(e,"base64url").toString("utf8");if(typeof atob=="function"){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),s=new Uint8Array(n.length);for(let o=0;o<n.length;o++)s[o]=n.charCodeAt(o);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function he(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Le(t)}function Pe(e){try{let t=JSON.parse(De(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function se(e,t,r){let{handlers:n,onNodeRemoved:s,onDrain:o}=t,a=new H,c="state"in e&&"config"in e?e:Y(e,r),p=false,i=new Set,d=new Map(Object.entries(n)),u=new H,l=false,k=false;function m(){if(!p){if(l){k=true;return}l=true;try{do k=!1,y();while(k)}finally{l=false;}}}function y(){let f=u.drain(),h=a.drain(),g=[...f,...h];if(g.length>0&&(c=L(c,g),s)){for(let v of g)if(v.type==="task-removal")try{s(v.taskName);}catch(b){console.warn("[reactive] onNodeRemoved failed:",b instanceof Error?b.message:String(b));}}let T=B(c);g.length>0&&o?.(g,c,T);for(let v of T.eligible)R(v);for(let v of g)if(v.type==="task-progress"){let{taskName:b,update:E}=v;if(!c.config.tasks[b])continue;let A=c.state.tasks[b];if(!A||A.status!=="running")continue;let j=he(b),N=w(b,j,E).catch(D=>{p||(u.append({type:"task-failed",taskName:b,error:D.message??String(D),timestamp:new Date().toISOString()}),m());}).finally(()=>{i.delete(N);});i.add(N);}}function S(f){let g=c.config.tasks[f].requires??[],T=new Map;for(let[b,E]of Object.entries(c.config.tasks))for(let _ of E.provides??[])T.set(_,b);let v={};for(let b of g){let E=T.get(b);E?v[b]=c.state.tasks[E]?.data:v[b]=void 0;}return v}async function w(f,h,g){let T=c.config.tasks[f],v=T.taskHandlers??[],b=S(f);for(let E of v){let _=d.get(E);if(!_)throw new Error(`Handler '${E}' not found in registry (task '${f}')`);let A={nodeId:f,state:b,taskState:c.state.tasks[f],config:T,callbackToken:h,update:g};if(await _(A)==="task-initiate-failure")throw new Error(`Handler '${E}' returned task-initiate-failure (task '${f}')`)}}function R(f){let g=c.config.tasks[f]?.taskHandlers;if(!g||g.length===0)return;u.append({type:"task-started",taskName:f,timestamp:new Date().toISOString()}),m();let T=he(f),v=w(f,T).catch(b=>{p||(u.append({type:"task-failed",taskName:f,error:b.message??String(b),timestamp:new Date().toISOString()}),m());}).finally(()=>{i.delete(v);});i.add(v);}return {push(f){p||(f.type==="task-completed"&&f.data&&!f.dataHash&&(f={...f,dataHash:W(f.data)}),a.append(f),m());},pushAll(f){if(!p){for(let h of f)h.type==="task-completed"&&h.data&&!h.dataHash?a.append({...h,dataHash:W(h.data)}):a.append(h);m();}},resolveCallback(f,h,g){if(p)return;let T=Pe(f);if(!T)return;let{taskName:v}=T;if(c.config.tasks[v]){if(g&&g.length>0)a.append({type:"task-failed",taskName:v,error:g.join("; "),timestamp:new Date().toISOString()});else {let b=h&&Object.keys(h).length>0?W(h):void 0;a.append({type:"task-completed",taskName:v,data:h,dataHash:b,timestamp:new Date().toISOString()});}m();}},addNode(f,h){p||(a.append({type:"task-upsert",taskName:f,taskConfig:h,timestamp:new Date().toISOString()}),m());},removeNode(f){p||(a.append({type:"task-removal",taskName:f,timestamp:new Date().toISOString()}),m());},addRequires(f,h){p||(a.append({type:"node-requires-add",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},removeRequires(f,h){p||(a.append({type:"node-requires-remove",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},addProvides(f,h){p||(a.append({type:"node-provides-add",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},removeProvides(f,h){p||(a.append({type:"node-provides-remove",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},registerHandler(f,h){d.set(f,h);},unregisterHandler(f){d.delete(f);},retrigger(f){p||c.config.tasks[f]&&(a.append({type:"task-restart",taskName:f,timestamp:new Date().toISOString()}),m());},retriggerAll(f){if(!p){for(let h of f)c.config.tasks[h]&&a.append({type:"task-restart",taskName:h,timestamp:new Date().toISOString()});m();}},snapshot(){return ne(c)},getState(){return c},getSchedule(){return B(c)},async waitForHandlers(){i.size>0&&await Promise.allSettled([...i]);},async dispose(f){f?.wait&&i.size>0&&await Promise.allSettled([...i]),p=true;}}}function ve(e){let t=[],{config:r,state:n}=e,s=G(r),o=Object.keys(s);for(let i of o)n.tasks[i]||t.push({severity:"error",code:"MISSING_STATE",message:`Task "${i}" exists in config but has no state entry`,tasks:[i]});for(let i of Object.keys(n.tasks))s[i]||t.push({severity:"warning",code:"ORPHAN_STATE",message:`State entry "${i}" has no corresponding task config`,tasks:[i]});for(let i of o){let d=n.tasks[i];d&&(d.status===x.RUNNING&&!d.startedAt&&t.push({severity:"warning",code:"RUNNING_WITHOUT_START",message:`Task "${i}" is running but has no startedAt timestamp`,tasks:[i]}),d.status===x.COMPLETED&&!d.completedAt&&t.push({severity:"warning",code:"COMPLETED_WITHOUT_TIMESTAMP",message:`Task "${i}" is completed but has no completedAt timestamp`,tasks:[i]}),d.status===x.FAILED&&(d.failedAt||t.push({severity:"warning",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no failedAt timestamp`,tasks:[i]}),d.error||t.push({severity:"info",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no error message`,tasks:[i]})));}let a=new Set;for(let i of o)if(n.tasks[i]?.status===x.COMPLETED)for(let u of C(s[i]))a.add(u);let c=new Set(n.availableOutputs),p=new Set;for(let i of Object.values(s)){for(let d of C(i))p.add(d);if(i.on)for(let d of Object.values(i.on))for(let u of d)p.add(u);if(i.on_failure)for(let d of i.on_failure)p.add(d);}for(let i of c)!a.has(i)&&!p.has(i)&&t.push({severity:"info",code:"INJECTED_TOKEN",message:`Token "${i}" is available but no task in the graph can produce it (likely injected)`,tokens:[i]});for(let i of a)c.has(i)||t.push({severity:"warning",code:"MISSING_OUTPUT",message:`Token "${i}" should be available (its producer completed) but is not in availableOutputs`,tokens:[i]});for(let i of o){let d=n.tasks[i];if(!d)continue;d.executionCount<0&&t.push({severity:"error",code:"INVALID_EXECUTION_COUNT",message:`Task "${i}" has negative execution count: ${d.executionCount}`,tasks:[i]});let u=s[i].maxExecutions;u!==void 0&&d.executionCount>u&&t.push({severity:"error",code:"EXCEEDED_MAX_EXECUTIONS",message:`Task "${i}" executed ${d.executionCount} times, exceeding maxExecutions of ${u}`,tasks:[i]});}return ye(t)}function Me(e){let{graph:t,handlers:r}=e,n=t.getState(),s=[],o=G(n.config),a=Object.keys(o),c=new Set(Object.keys(r)),p=new Set;for(let d of a){let u=o[d].taskHandlers;if(u)for(let l of u)p.add(l);}for(let d of a){let u=o[d].taskHandlers;if(u)for(let l of u)r[l]||s.push({severity:"error",code:"MISSING_HANDLER",message:`Task "${d}" references handler "${l}" but it is not in the registry`,tasks:[d]});}for(let d of c)p.has(d)||s.push({severity:"warning",code:"ORPHAN_HANDLER",message:`Handler "${d}" is registered but not referenced by any task's taskHandlers`,tasks:[d]});let i=ve(n);return s.push(...i.issues),ye(s)}function ye(e){let t=e.filter(n=>n.severity==="error"),r=e.filter(n=>n.severity==="warning");return {valid:t.length===0,issues:e,errors:t,warnings:r}}function qe(e,t){let r=e;for(let n of t)r=Fe(r,n);return r}function Fe(e,t){switch(t.type){case "add-node":return M(e,t.name,t.config);case "remove-node":return q(e,t.name);case "add-requires":return F(e,t.taskName,t.tokens);case "remove-requires":return U(e,t.taskName,t.tokens);case "add-provides":return $(e,t.taskName,t.tokens);case "remove-provides":return K(e,t.taskName,t.tokens);case "inject-tokens":return z(e,t.tokens);case "drain-tokens":return Q(e,t.tokens);case "reset-node":return Z(e,t.name);case "disable-node":return ee(e,t.name);case "enable-node":return te(e,t.name);case "apply-events":return L(e,t.events);default:throw new Error(`Unknown mutation type: ${t.type}`)}}function Ke(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(s=>t()(n,s)).catch(s=>t()(n,{},[s instanceof Error?s.message:String(s)])),"task-initiated"}}function Ve(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(()=>t()(n,{})).catch(()=>t()(n,{})),"task-initiated"}}function Be(e){let{command:t,cwd:r,env:n,timeoutMs:s=3e4,exitCodeMap:o,captureOutput:a=false,getResolve:c}=e;return async p=>{let{callbackToken:i,nodeId:d}=p,u=t.replace(/\$\{taskName\}/g,d);return exec(u,{cwd:r,env:n?{...process.env,...n}:void 0,timeout:s,maxBuffer:10*1024*1024},(l,k,m)=>{let y=l?.code??(l?1:0);if(y!==0&&!o?.[y]){c()(i,{},[`Command exited with code ${y}: ${m||l?.message}`]);return}let S={};a&&(S.stdout=k,S.stderr=m,S.exitCode=y),c()(i,S);}),"task-initiated"}}function be(e){let{command:t,args:r=[],cwd:n,env:s,timeoutMs:o=3e4,exitCodeMap:a,captureOutput:c=false,getResolve:p}=e;return async i=>{let{callbackToken:d,nodeId:u}=i,l=t.replace(/\$\{taskName\}/g,u),k=r.map(m=>m.replace(/\$\{taskName\}/g,u));return execFile(l,k,{cwd:n,env:s?{...process.env,...s}:void 0,timeout:o,maxBuffer:10*1024*1024,encoding:"utf8",windowsHide:true},(m,y,S)=>{let w=m?.code??(m?1:0);if(w!==0&&!a?.[w]){p()(d,{},[`Process exited with code ${w}: ${S||m?.message}`]);return}let R={};c&&(R.stdout=y,R.stderr=S,R.exitCode=w),p()(d,R);}),"task-initiated"}}function We(e){return e.endsWith(".js")||e.endsWith(".mjs")||e.endsWith(".ts")?"node":e.endsWith(".py")?"python3":(e.endsWith(".sh"),"bash")}function Je(e){let{scriptPath:t,runtime:r,args:n=[],cwd:s,timeoutMs:o=6e4,captureOutput:a=false,getResolve:c}=e,p=r??We(t),i=p==="node"?process.execPath:p;return be({command:i,args:[t,"${taskName}",...n],cwd:s,timeoutMs:o,captureOutput:a,getResolve:c})}function Ye(e){let{url:t,method:r="POST",headers:n={},timeoutMs:s=3e4,failOnNon2xx:o=true,getResolve:a}=e;return async c=>{let{callbackToken:p,nodeId:i,config:d}=c,u=t.replace(/\$\{taskName\}/g,i),l=JSON.stringify({taskName:i,callbackToken:p,config:d}),k=new AbortController,m=setTimeout(()=>k.abort(),s);return fetch(u,{method:r,headers:{"Content-Type":"application/json",...n},body:l,signal:k.signal}).then(async y=>{if(clearTimeout(m),o&&!y.ok){let w=await y.text().catch(()=>"");a()(p,{},[`HTTP ${y.status}: ${w}`]);return}let S=await y.json().catch(()=>({}));a()(p,S);}).catch(y=>{clearTimeout(m),a()(p,{},[y instanceof Error?y.message:String(y)]);}),"task-initiated"}}function Xe(e,t){return async r=>(e()(r.callbackToken,t??{}),"task-initiated")}var Qe=createRequire(import.meta.url);Qe("./jsonata-sync.cjs");var et=createRequire(import.meta.url),J=et("./jsonata-sync.cjs"),Re=J;function Te(e,t){if(!t||!e)return;let r=t.split("."),n=e;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function we(e,t,r){let n=t.split("."),s=e;for(let o=0;o<n.length-1;o++)(s[n[o]]==null||typeof s[n[o]]!="object")&&(s[n[o]]={}),s=s[n[o]];s[n[n.length-1]]=r;}async function tt(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let s of e.compute)try{let o=await J(s.expr).evaluate(n);we(e.computed_values,s.bindTo,o),n.computed_values=e.computed_values;}catch{}return e}function nt(e,t){if(!e?.compute?.length)return {ok:true,node:e};e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values},s=[];for(let o of e.compute)try{let a=Re(o.expr).evaluate(n);we(e.computed_values,o.bindTo,a),n.computed_values=e.computed_values;}catch(a){let c=a instanceof Error?a.message:String(a);s.push({bindTo:o.bindTo,error:c});}return s.length>0?{ok:true,node:e,errors:s}:{ok:true,node:e}}async function rt(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return J(e).evaluate(n)}function st(e,t){return t.startsWith("fetched_sources.")?Te(e._sourcesData??{},t.slice(16)):Te(e,t)}var Se=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),ot=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function at(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:false,errors:["Node must be a non-null object"]};let r=e;(typeof r.id!="string"||!r.id)&&t.push("id: required, must be a non-empty string");for(let n of Object.keys(r))ot.has(n)||t.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&t.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))t.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&t.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&t.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&t.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`provides[${s}]: must be an object with bindTo and ref`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`provides[${s}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&t.push(`provides[${s}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`compute[${s}]: must be a compute step object`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`compute[${s}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&t.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))t.push("source_defs: must be an array");else {let n=new Set,s=new Set;r.source_defs.forEach((o,a)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${a}]: must be an object`);else {let c=o;typeof c.bindTo!="string"||!c.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(n.has(c.bindTo)&&t.push(`source_defs[${a}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(s.has(c.outputFile)&&t.push(`source_defs[${a}]: outputFile "${c.outputFile}" is not unique across source_defs`),s.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${a}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))t.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?t.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,o)=>{if(!s||typeof s!="object"){t.push(`view.elements[${o}]: must be an object`);return}!s.kind||typeof s.kind!="string"?t.push(`view.elements[${o}].kind: required, must be a string`):Se.has(s.kind)||t.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...Se].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&t.push(`view.elements[${o}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&t.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function it(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(e.map(async n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=await J(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function ct(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return e.map(n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=Re(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var oe={run:tt,runSync:nt,eval:rt,resolve:st,validate:at,enrichSources:it,enrichSourcesSync:ct};function ut(e,t={}){let r,n={},s;if(!Array.isArray(e)&&"nodes"in e){let g=e;r=g.nodes,s=g.id,n=g.settings??{};}else r=e;let{sourceHandlers:o={},defaultSourceHandler:a,cardHandlers:c={},reactiveOptions:p={},graphSettings:i={},executionId:d}=t,u=new Map;for(let g of r){if(u.has(g.id))throw new Error(`Duplicate card ID: "${g.id}"`);u.set(g.id,g);}let l=t.sharedState??new Map,k={},m=new Set,y=new Map;for(let g of r)for(let T of g.provides??[{bindTo:g.id,ref:"card_data"}])m.add(T.bindTo),y.set(T.bindTo,g.id);for(let g of r){let T=g.requires??[];for(let v of T)if(!m.has(v))throw new Error(`Card "${g.id}" requires "${v}" but no card provides that token`);k[g.id]={requires:T.length>0?T:void 0,provides:(g.provides??[{bindTo:g.id,ref:"card_data"}]).map(v=>v.bindTo),taskHandlers:[g.id],description:g.meta?.title??g.id};}let S={id:s??`live-cards-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n,...i},tasks:k},w={},R=null,f=()=>(g,T,v)=>{R.resolveCallback(g,T,v);};for(let g of r)g.source_defs&&g.source_defs.length>0?w[g.id]=dt(g,o,a,l,f):w[g.id]=pt(g,c,l,u,y,f);let h=se(S,{...p,handlers:w},d);return R=h,{graph:h,config:S,handlers:w,cards:u,sharedState:l}}function dt(e,t,r,n,s){if(t[e.id]){let o=t[e.id];return async a=>o(a)}if(r){let o=r(e);return async a=>o(a)}return async o=>{let a={...e.card_data};return n.set(e.id,a),s()(o.callbackToken,a),"task-initiated"}}function pt(e,t,r,n,s,o){if(t[e.id]){let a=t[e.id];return async c=>a(c)}return async a=>{let c={},p=e.requires??[];for(let l of p){let k=s.get(l)??l,m=r.get(k);m&&(c[l]=m[l]??m);}let i={id:e.id,card_data:{...e.card_data},requires:c,compute:e.compute};await oe.run(i);let d;if(e.provides&&e.provides.length>0){d={};for(let{bindTo:l,ref:k}of e.provides)d[l]=oe.resolve(i,k);}else d={...i.card_data,...i.computed_values};let u={...i.card_data,...i.computed_values};return r.set(e.id,u),o()(a.callbackToken,d),"task-initiated"}}
2
- export{H as MemoryJournal,M as addNode,$ as addProvides,F as addRequires,X as applyEvent,L as applyEvents,W as computeDataHash,Ke as createCallbackHandler,Ve as createFireAndForgetHandler,Y as createLiveGraph,Xe as createNoopHandler,be as createProcessHandler,se as createReactiveGraph,Je as createScriptHandler,Be as createShellHandler,Ye as createWebhookHandler,ee as disableNode,Q as drainTokens,te as enableNode,je as getDownstream,xe as getNode,Ne as getUnreachableNodes,me as getUnreachableTokens,Ie as getUpstream,z as injectTokens,Oe as inspect,ut as liveCardsToReactiveGraph,qe as mutateGraph,q as removeNode,K as removeProvides,U as removeRequires,Z as resetNode,Ce as restore,B as schedule,ne as snapshot,ve as validateLiveGraph,Me as validateReactiveGraph};//# sourceMappingURL=index.js.map
1
+ export{i as createCallbackHandler,j as createFireAndForgetHandler,o as createNoopHandler,l as createProcessHandler,m as createScriptHandler,k as createShellHandler,n as createWebhookHandler,e as getDownstream,c as getUnreachableNodes,b as getUnreachableTokens,d as getUpstream,a as inspect,p as liveCardsToReactiveGraph,h as mutateGraph,f as validateLiveGraph,g as validateReactiveGraph}from'../chunk-OPNGCSXJ.js';export{s as MemoryJournal,d as addNode,h as addProvides,f as addRequires,b as applyEvent,c as applyEvents,t as computeDataHash,a as createLiveGraph,u as createReactiveGraph,m as disableNode,k as drainTokens,n as enableNode,o as getNode,j as injectTokens,e as removeNode,i as removeProvides,g as removeRequires,l as resetNode,q as restore,r as schedule,p as snapshot}from'../chunk-VGT3TRQG.js';import'../chunk-WDPOGXTY.js';import'../chunk-JMDHDY6M.js';import'../chunk-VLBB3D6B.js';import'../chunk-MNEOJWPS.js';import'../chunk-FW4363Y4.js';//# sourceMappingURL=index.js.map
3
2
  //# sourceMappingURL=index.js.map