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.
- package/browser/asset-integrity.json +3 -3
- package/examples/board/demo-shell-with-server.html +2 -2
- package/examples/board/doc.html +2 -2
- package/examples/board/server/board-server.js +773 -13
- package/examples/board/server/board-worker/task-executor.js +166 -51
- package/examples/board/server/chat-flow/copilot-chat/assistant.js +25 -12
- package/examples/board/server/chat-flow/copilot-chat/probe.js +7 -0
- package/examples/board/server/chat-flow/copilot-chat/shared.js +97 -0
- package/examples/board/server/chat-flow/flow-steps.json +109 -51
- package/examples/board/server-config.json +2 -0
- package/examples/board/test/server-http-test.js +878 -67
- package/examples/board-local/demo-shell-localstorage.html +3 -3
- package/lib/{artifacts-store-lib-CVgtQrNZ.d.cts → artifacts-store-lib-BR-Samty.d.cts} +1 -1
- package/lib/{artifacts-store-lib-D-k-E8Vy.d.ts → artifacts-store-lib-DT7XlWUL.d.ts} +1 -1
- package/lib/artifacts-store-public.cjs +1 -1
- package/lib/artifacts-store-public.d.cts +3 -3
- package/lib/artifacts-store-public.d.ts +3 -3
- package/lib/artifacts-store-public.js +1 -1
- package/lib/batch/index.cjs +1 -1
- package/lib/batch/index.js +1 -1
- package/lib/board-live-cards-mcp.cjs +1 -1
- package/lib/board-live-cards-mcp.d.cts +87 -34
- package/lib/board-live-cards-mcp.d.ts +87 -34
- package/lib/board-live-cards-mcp.js +1 -1
- package/lib/board-live-cards-node.cjs +8 -16
- package/lib/board-live-cards-node.d.cts +52 -14
- package/lib/board-live-cards-node.d.ts +52 -14
- package/lib/board-live-cards-node.js +8 -16
- package/lib/{board-live-cards-public-BGS22cMb.d.ts → board-live-cards-public-BMUIPOrc.d.ts} +90 -30
- package/lib/board-live-cards-public-async-DKZqbJVU.d.ts +256 -0
- package/lib/board-live-cards-public-async-dMWNbWq6.d.cts +256 -0
- package/lib/{board-live-cards-public-B13InXhC.d.cts → board-live-cards-public-wkNmBIRC.d.cts} +90 -30
- package/lib/board-live-cards-public.cjs +1 -2
- package/lib/board-live-cards-public.d.cts +2 -2
- package/lib/board-live-cards-public.d.ts +2 -2
- package/lib/board-live-cards-public.js +1 -2
- package/lib/board-live-cards-server-runtime.cjs +1 -7
- package/lib/board-live-cards-server-runtime.d.cts +7 -6
- package/lib/board-live-cards-server-runtime.d.ts +7 -6
- package/lib/board-live-cards-server-runtime.js +1 -7
- package/lib/board-livegraph-runtime/index.cjs +1 -2
- package/lib/board-livegraph-runtime/index.js +1 -2
- package/lib/board-worker-adapter.cjs +22 -7
- package/lib/board-worker-adapter.d.cts +28 -3
- package/lib/board-worker-adapter.d.ts +28 -3
- package/lib/board-worker-adapter.js +22 -7
- package/lib/card-compute/index.cjs +1 -9
- package/lib/card-compute/index.js +1 -9
- package/lib/card-store-public.cjs +1 -1
- package/lib/card-store-public.d.cts +2 -2
- package/lib/card-store-public.d.ts +2 -2
- package/lib/card-store-public.js +1 -1
- package/lib/card-validation.cjs +1 -9
- package/lib/card-validation.js +1 -9
- package/lib/{chat-storage-lib-0imhRX3l.d.cts → chat-storage-lib-BIUbE-fM.d.cts} +1 -1
- package/lib/{chat-storage-lib-CJn7a6OH.d.ts → chat-storage-lib-BlG-sobS.d.ts} +1 -1
- package/lib/chat-store-public.cjs +1 -1
- package/lib/chat-store-public.d.cts +3 -3
- package/lib/chat-store-public.d.ts +3 -3
- package/lib/chat-store-public.js +1 -1
- package/lib/chunk-2MZUYY65.cjs +2 -0
- package/lib/chunk-5EA2ESS4.cjs +16 -0
- package/lib/chunk-76ON3V7R.js +2 -0
- package/lib/chunk-7BKNHFNH.js +2 -0
- package/lib/chunk-BQS3EIEK.js +3 -0
- package/lib/chunk-CIAJNUR4.js +2 -0
- package/lib/chunk-DAXACY63.js +2 -0
- package/lib/chunk-FW4363Y4.js +2 -0
- package/lib/chunk-FZ2SBU5M.js +3 -0
- package/lib/chunk-G4XXRHL2.cjs +3 -0
- package/lib/chunk-GJJMEAVN.cjs +2 -0
- package/lib/chunk-GNFE24S7.cjs +2 -0
- package/lib/chunk-GYQXDNNI.cjs +2 -0
- package/lib/chunk-H5HBXPOI.cjs +3 -0
- package/lib/chunk-H5KD3JPY.cjs +2 -0
- package/lib/chunk-HEEDJEKM.js +2 -0
- package/lib/chunk-HLJH7LGW.js +16 -0
- package/lib/chunk-IXZG74EW.cjs +2 -0
- package/lib/chunk-JAL25FGA.cjs +2 -0
- package/lib/chunk-JM5EKT57.js +2 -0
- package/lib/chunk-JMDHDY6M.js +2 -0
- package/lib/chunk-KBELAKIY.js +2 -0
- package/lib/chunk-KHJABJ45.cjs +3 -0
- package/lib/chunk-KLRUISRY.cjs +2 -0
- package/lib/chunk-KQX6R4PV.cjs +8 -0
- package/lib/chunk-LODXIALE.cjs +2 -0
- package/lib/chunk-MLVTJASJ.js +2 -0
- package/lib/chunk-MNEOJWPS.js +10 -0
- package/lib/chunk-N6P2JW4W.js +3 -0
- package/lib/chunk-NMZ6XNLB.cjs +3 -0
- package/lib/chunk-OEFTOO47.cjs +3 -0
- package/lib/chunk-OPNGCSXJ.js +2 -0
- package/lib/chunk-OSWJKJLB.js +8 -0
- package/lib/chunk-P7ZCDICS.cjs +2 -0
- package/lib/chunk-PBCDDO4V.cjs +2 -0
- package/lib/chunk-PMUSJQSR.cjs +2 -0
- package/lib/chunk-Q6H7NINN.cjs +5 -0
- package/lib/chunk-QWBNDVUA.js +5 -0
- package/lib/chunk-S6DRP2HX.cjs +2 -0
- package/lib/chunk-SCWHDI3I.js +2 -0
- package/lib/chunk-SFVO2LB2.cjs +3 -0
- package/lib/chunk-U2N6MCD5.cjs +2 -0
- package/lib/chunk-UJ7ZTV4J.cjs +10 -0
- package/lib/chunk-VGT3TRQG.js +3 -0
- package/lib/chunk-VLBB3D6B.js +3 -0
- package/lib/chunk-VMW4Z6EF.js +3 -0
- package/lib/chunk-WDPOGXTY.js +2 -0
- package/lib/chunk-WOALA3V5.cjs +2 -0
- package/lib/chunk-X3LC4LII.js +2 -0
- package/lib/chunk-XQRNDX4Q.js +2 -0
- package/lib/chunk-YGKDQLYP.js +2 -0
- package/lib/chunk-YMEIPKLW.cjs +2 -0
- package/lib/cloud-storage.cjs +2 -0
- package/lib/cloud-storage.d.cts +177 -0
- package/lib/cloud-storage.d.ts +177 -0
- package/lib/cloud-storage.js +2 -0
- package/lib/config/index.cjs +1 -1
- package/lib/config/index.js +1 -1
- package/lib/continuous-event-graph/index.cjs +1 -2
- package/lib/continuous-event-graph/index.js +1 -2
- package/lib/event-graph/index.cjs +1 -22
- package/lib/event-graph/index.js +1 -22
- package/lib/execution-refs.cjs +1 -2
- package/lib/execution-refs.d.cts +3 -2
- package/lib/execution-refs.d.ts +3 -2
- package/lib/execution-refs.js +1 -2
- package/lib/index.cjs +2 -24
- package/lib/index.d.cts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -24
- package/lib/{types-CIgsh56O.d.cts → queue-lane-registry-BPKWWgd4.d.cts} +66 -14
- package/lib/{types-30R357js.d.ts → queue-lane-registry-Be6c0ftj.d.ts} +66 -14
- package/lib/server-runtime/index.cjs +1 -7
- package/lib/server-runtime/index.d.cts +18 -7
- package/lib/server-runtime/index.d.ts +18 -7
- package/lib/server-runtime/index.js +1 -7
- package/lib/step-machine/index.cjs +1 -11
- package/lib/step-machine/index.js +1 -11
- package/lib/step-machine-public/index.cjs +1 -4
- package/lib/step-machine-public/index.d.cts +1 -1
- package/lib/step-machine-public/index.d.ts +1 -1
- package/lib/step-machine-public/index.js +1 -4
- package/lib/{storage-interface-B2WD9D5n.d.cts → storage-interface-BFiD3kyB.d.cts} +38 -1
- package/lib/{storage-interface-B2WD9D5n.d.ts → storage-interface-BFiD3kyB.d.ts} +38 -1
- package/lib/stores/index.cjs +1 -2
- package/lib/stores/index.d.cts +1 -1
- package/lib/stores/index.d.ts +1 -1
- package/lib/stores/index.js +1 -2
- package/lib/stores/kv.cjs +1 -2
- package/lib/stores/kv.d.cts +1 -1
- package/lib/stores/kv.d.ts +1 -1
- package/lib/stores/kv.js +1 -2
- package/lib/stores/memory.cjs +1 -1
- package/lib/stores/memory.js +1 -1
- package/package.json +7 -16
- package/cli/board-live-cards-lib-COi4bSpk.d.ts +0 -322
- package/cli/browser-api/board-live-cards-browser-adapter.d.ts +0 -36
- package/cli/browser-api/board-live-cards-browser-adapter.js +0 -4
- package/cli/browser-api/card-store-browser-api.d.ts +0 -25
- package/cli/browser-api/card-store-browser-api.js +0 -2
- package/cli/browser-api/jsonata-sync.cjs +0 -7623
- package/cli/bundled/artifacts-store-cli.mjs +0 -12
- package/cli/bundled/batch-runner-cli.mjs +0 -3
- package/cli/bundled/board-live-cards-cli.mjs +0 -29
- package/cli/bundled/card-store-cli.mjs +0 -154
- package/cli/bundled/chat-store-cli.mjs +0 -16
- package/cli/bundled/jsonata-sync.cjs +0 -7623
- package/cli/bundled/step-machine-cli.mjs +0 -150
- package/cli/execution-interface-BCIhu1gO.d.ts +0 -442
- package/cli/types-H3EMBPY2.d.ts +0 -398
- package/examples/board/server/README-mcp-api.md +0 -690
- package/examples/board/test/server-http-mcp-test.js +0 -1280
- package/lib/board-livegraph-runtime/jsonata-sync.cjs +0 -7623
- package/lib/card-compute/jsonata-sync.cjs +0 -7623
- package/lib/continuous-event-graph/jsonata-sync.cjs +0 -7623
- package/lib/server-runtime/jsonata-sync.cjs +0 -7623
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { b as BlobStat, a as KindValueRef, c as JournalEntry, d as JournalReadResult, Q as QueueMessage, e as QueueLeasedMessage, f as QueueDeadLetterMessage } from './storage-interface-BFiD3kyB.cjs';
|
|
2
|
+
import { g as BoardCallbackTransport, c as BoardChangeNotification, a as CommandInput, C as CommandResult, h as BoardStatusObject } from './board-live-cards-public-wkNmBIRC.cjs';
|
|
3
|
+
import { ExecutionRef } from './execution-refs.cjs';
|
|
4
|
+
|
|
5
|
+
interface AsyncBlobStorage {
|
|
6
|
+
read(key: string): Promise<string | null>;
|
|
7
|
+
write(key: string, content: string): Promise<void>;
|
|
8
|
+
exists(key: string): Promise<boolean>;
|
|
9
|
+
remove(key: string): Promise<void>;
|
|
10
|
+
readBytes?(key: string): Promise<Uint8Array | null>;
|
|
11
|
+
writeBytes?(key: string, content: Uint8Array): Promise<void>;
|
|
12
|
+
listKeys(prefix?: string): Promise<string[]>;
|
|
13
|
+
stat?(key: string): Promise<BlobStat | null>;
|
|
14
|
+
keyRef?(key: string): Promise<KindValueRef> | KindValueRef;
|
|
15
|
+
}
|
|
16
|
+
interface AsyncJournalStorage {
|
|
17
|
+
append(payload: unknown): Promise<JournalEntry>;
|
|
18
|
+
readAll(): Promise<JournalEntry[]>;
|
|
19
|
+
readAfter(cursor: string | null): Promise<JournalReadResult>;
|
|
20
|
+
clear?(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
interface AsyncQueueStorage {
|
|
23
|
+
enqueue<T>(body: T): Promise<QueueMessage<T>>;
|
|
24
|
+
/** See QueueStorage.enqueueIfAbsent. Optional on adapters that cannot cheaply dedup. */
|
|
25
|
+
enqueueIfAbsent?<T>(body: T, dedupKey: string): Promise<QueueMessage<T> | null>;
|
|
26
|
+
lease<T>(opts?: {
|
|
27
|
+
max?: number;
|
|
28
|
+
visibilityMs?: number;
|
|
29
|
+
}): Promise<QueueLeasedMessage<T>[]>;
|
|
30
|
+
ack(messageId: string, leaseToken: string): Promise<boolean>;
|
|
31
|
+
nack(messageId: string, leaseToken: string, opts?: {
|
|
32
|
+
dead?: boolean;
|
|
33
|
+
reason?: string;
|
|
34
|
+
}): Promise<boolean>;
|
|
35
|
+
peekActive<T>(prefix?: string): Promise<QueueMessage<T>[]>;
|
|
36
|
+
peekDeadLetter<T>(prefix?: string): Promise<QueueDeadLetterMessage<T>[]>;
|
|
37
|
+
}
|
|
38
|
+
interface AsyncKVStorage {
|
|
39
|
+
read(key: string): Promise<unknown | null>;
|
|
40
|
+
write(key: string, value: unknown): Promise<void>;
|
|
41
|
+
delete(key: string): Promise<void>;
|
|
42
|
+
listKeys(prefix?: string): Promise<string[]>;
|
|
43
|
+
}
|
|
44
|
+
interface AsyncJSONStorage {
|
|
45
|
+
read(key: string): Promise<unknown | null>;
|
|
46
|
+
get(key: string, jsonPath: string): Promise<unknown | null>;
|
|
47
|
+
write(key: string, value: unknown): Promise<void>;
|
|
48
|
+
delete(key: string): Promise<void>;
|
|
49
|
+
listKeys(prefix?: string): Promise<string[]>;
|
|
50
|
+
shallowMerge(key: string, patch: Record<string, unknown>): Promise<void>;
|
|
51
|
+
deepMerge(key: string, patch: Record<string, unknown>): Promise<void>;
|
|
52
|
+
patch(key: string, jsonPath: string, value: unknown): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
interface AsyncScratchStorage extends AsyncBlobStorage {
|
|
55
|
+
getUniqueKey(prefix?: string, suffix?: string): Promise<string>;
|
|
56
|
+
create(data: string, prefix?: string, suffix?: string): Promise<string>;
|
|
57
|
+
keyRef(key: string): Promise<KindValueRef> | KindValueRef;
|
|
58
|
+
config: {
|
|
59
|
+
get(k: string): Promise<unknown> | unknown;
|
|
60
|
+
set(k: string, v: unknown): Promise<void> | void;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
interface AsyncArchiveFactory {
|
|
64
|
+
stream(name: string): AsyncJournalStorage;
|
|
65
|
+
blob(name: string): AsyncBlobStorage;
|
|
66
|
+
listStreams(prefix?: string): Promise<string[]>;
|
|
67
|
+
listBlobs(prefix?: string): Promise<string[]>;
|
|
68
|
+
config: {
|
|
69
|
+
get(k: string): Promise<unknown> | unknown;
|
|
70
|
+
set(k: string, v: unknown): Promise<void> | void;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
interface AsyncStorageProvider {
|
|
74
|
+
blob: AsyncBlobStorage;
|
|
75
|
+
journal: AsyncJournalStorage;
|
|
76
|
+
kv: AsyncKVStorage;
|
|
77
|
+
}
|
|
78
|
+
interface AsyncAtomicRelayLock {
|
|
79
|
+
tryAcquire(): Promise<(() => Promise<void> | void) | null>;
|
|
80
|
+
}
|
|
81
|
+
declare function withAsyncRelayLock(lock: AsyncAtomicRelayLock, work: () => Promise<void>, continuation?: () => Promise<void> | void): Promise<boolean>;
|
|
82
|
+
|
|
83
|
+
interface AsyncBoardWorkerRequest {
|
|
84
|
+
boardId?: string;
|
|
85
|
+
ref: ExecutionRef;
|
|
86
|
+
args: Record<string, unknown>;
|
|
87
|
+
}
|
|
88
|
+
interface AsyncBoardWorkerQueuedRequest {
|
|
89
|
+
messageId: string;
|
|
90
|
+
enqueuedAt: string;
|
|
91
|
+
attempt: number;
|
|
92
|
+
request: AsyncBoardWorkerRequest;
|
|
93
|
+
}
|
|
94
|
+
interface AsyncBoardWorkerLeasedRequest extends AsyncBoardWorkerQueuedRequest {
|
|
95
|
+
leaseToken: string;
|
|
96
|
+
leaseExpiresAt: string;
|
|
97
|
+
}
|
|
98
|
+
interface AsyncBoardWorkerDeadLetterRequest extends AsyncBoardWorkerQueuedRequest {
|
|
99
|
+
reason?: string;
|
|
100
|
+
}
|
|
101
|
+
interface AsyncBoardWorkerStore {
|
|
102
|
+
enqueueRequest(request: AsyncBoardWorkerRequest): Promise<string>;
|
|
103
|
+
leaseRequests(opts?: {
|
|
104
|
+
max?: number;
|
|
105
|
+
visibilityMs?: number;
|
|
106
|
+
}): Promise<AsyncBoardWorkerLeasedRequest[]>;
|
|
107
|
+
ackRequest(messageId: string, leaseToken: string): Promise<boolean>;
|
|
108
|
+
nackRequest(messageId: string, leaseToken: string, opts?: {
|
|
109
|
+
dead?: boolean;
|
|
110
|
+
reason?: string;
|
|
111
|
+
}): Promise<boolean>;
|
|
112
|
+
peekActive(): Promise<AsyncBoardWorkerQueuedRequest[]>;
|
|
113
|
+
peekDeadLetter(): Promise<AsyncBoardWorkerDeadLetterRequest[]>;
|
|
114
|
+
}
|
|
115
|
+
interface AsyncBoardConfigStore {
|
|
116
|
+
readTaskExecutorRef(): Promise<ExecutionRef | undefined>;
|
|
117
|
+
writeTaskExecutorRef(ref: ExecutionRef): Promise<void>;
|
|
118
|
+
readChatHandlerFlow(): Promise<unknown>;
|
|
119
|
+
writeChatHandlerFlow(flow: unknown): Promise<void>;
|
|
120
|
+
readCardStoreRef(): Promise<string | null>;
|
|
121
|
+
writeCardStoreRef(ref: string): Promise<void>;
|
|
122
|
+
readOutputsStoreRef(): Promise<string | null>;
|
|
123
|
+
writeOutputsStoreRef(ref: string): Promise<void>;
|
|
124
|
+
readScratchStoreRef(): Promise<string | null>;
|
|
125
|
+
writeScratchStoreRef(ref: string): Promise<void>;
|
|
126
|
+
readArchiveStoreRef(): Promise<string | null>;
|
|
127
|
+
writeArchiveStoreRef(ref: string): Promise<void>;
|
|
128
|
+
readChatStoreRef(): Promise<string | null>;
|
|
129
|
+
writeChatStoreRef(ref: string): Promise<void>;
|
|
130
|
+
readArtifactsStoreRef(): Promise<string | null>;
|
|
131
|
+
writeArtifactsStoreRef(ref: string): Promise<void>;
|
|
132
|
+
}
|
|
133
|
+
interface AsyncBoardPlatformAdapter {
|
|
134
|
+
kvStorage(namespace: string): AsyncKVStorage;
|
|
135
|
+
kvStorageForRef(ref: string): AsyncKVStorage;
|
|
136
|
+
blobStorage(namespace: string): AsyncBlobStorage;
|
|
137
|
+
scratchStorage(): AsyncScratchStorage;
|
|
138
|
+
scratchStorageForRef(ref: string): AsyncScratchStorage;
|
|
139
|
+
archiveFactory(): AsyncArchiveFactory;
|
|
140
|
+
archiveFactoryForRef(ref: string): AsyncArchiveFactory;
|
|
141
|
+
journalStorage(): AsyncJournalStorage;
|
|
142
|
+
boardWorkerStore(): AsyncBoardWorkerStore;
|
|
143
|
+
chatAgentStore(): AsyncBoardWorkerStore;
|
|
144
|
+
processAccumulatedStore(): AsyncQueueStorage;
|
|
145
|
+
lock: AsyncAtomicRelayLock;
|
|
146
|
+
callbackTransport?: BoardCallbackTransport;
|
|
147
|
+
dispatchExecution(ref: ExecutionRef, args: Record<string, unknown>): Promise<{
|
|
148
|
+
dispatched: boolean;
|
|
149
|
+
error?: string;
|
|
150
|
+
}>;
|
|
151
|
+
supportsDirectSourceOutput?(ref: ExecutionRef): boolean;
|
|
152
|
+
resolveBlob(ref: KindValueRef): Promise<string>;
|
|
153
|
+
hashFn(value: unknown): string;
|
|
154
|
+
genId(): string;
|
|
155
|
+
requestProcessAccumulated?(): void | Promise<void>;
|
|
156
|
+
publishBoardChangeNotifications?(notifications: BoardChangeNotification[]): void | Promise<void>;
|
|
157
|
+
warn?: (msg: string) => void;
|
|
158
|
+
}
|
|
159
|
+
interface HostedFetchResponseLike {
|
|
160
|
+
ok: boolean;
|
|
161
|
+
status: number;
|
|
162
|
+
text(): Promise<string>;
|
|
163
|
+
}
|
|
164
|
+
interface HostedFetchLike {
|
|
165
|
+
(input: string, init: {
|
|
166
|
+
method: string;
|
|
167
|
+
headers: Record<string, string>;
|
|
168
|
+
body: string;
|
|
169
|
+
}): Promise<HostedFetchResponseLike>;
|
|
170
|
+
}
|
|
171
|
+
interface HostedAsyncBoardPlatformAdapterOptions {
|
|
172
|
+
boardId?: string;
|
|
173
|
+
kvStorage(namespace: string): AsyncKVStorage;
|
|
174
|
+
kvStorageForRef(ref: string): AsyncKVStorage;
|
|
175
|
+
blobStorage(namespace: string): AsyncBlobStorage;
|
|
176
|
+
scratchStorage(): AsyncScratchStorage;
|
|
177
|
+
scratchStorageForRef(ref: string): AsyncScratchStorage;
|
|
178
|
+
archiveFactory(): AsyncArchiveFactory;
|
|
179
|
+
archiveFactoryForRef(ref: string): AsyncArchiveFactory;
|
|
180
|
+
journalStorage(): AsyncJournalStorage;
|
|
181
|
+
queueStorage?: AsyncQueueStorage;
|
|
182
|
+
boardWorkerStore?: AsyncBoardWorkerStore;
|
|
183
|
+
chatAgentQueueStorage?: AsyncQueueStorage;
|
|
184
|
+
chatAgentStore?: AsyncBoardWorkerStore;
|
|
185
|
+
processAccumulatedQueueStorage?: AsyncQueueStorage;
|
|
186
|
+
processAccumulatedStore?: AsyncQueueStorage;
|
|
187
|
+
lock: AsyncAtomicRelayLock;
|
|
188
|
+
callbackTransport?: BoardCallbackTransport;
|
|
189
|
+
fetch?: HostedFetchLike;
|
|
190
|
+
dispatchExecution?: (ref: ExecutionRef, args: Record<string, unknown>) => Promise<{
|
|
191
|
+
dispatched: boolean;
|
|
192
|
+
error?: string;
|
|
193
|
+
}>;
|
|
194
|
+
supportsDirectSourceOutput?: (ref: ExecutionRef) => boolean;
|
|
195
|
+
resolveBlob?: (ref: KindValueRef) => Promise<string>;
|
|
196
|
+
hashFn: (value: unknown) => string;
|
|
197
|
+
genId: () => string;
|
|
198
|
+
requestProcessAccumulated?: () => void | Promise<void>;
|
|
199
|
+
publishBoardChangeNotifications?: (notifications: BoardChangeNotification[]) => void | Promise<void>;
|
|
200
|
+
onWarn?: (msg: string) => void;
|
|
201
|
+
}
|
|
202
|
+
declare function createAsyncBoardWorkerStore(queue: AsyncQueueStorage): AsyncBoardWorkerStore;
|
|
203
|
+
declare function createAsyncBoardConfigStore(kv: AsyncKVStorage): AsyncBoardConfigStore;
|
|
204
|
+
declare function createHostedAsyncBoardPlatformAdapter(options: HostedAsyncBoardPlatformAdapterOptions): AsyncBoardPlatformAdapter;
|
|
205
|
+
|
|
206
|
+
interface AsyncBoardLiveCardsPublic {
|
|
207
|
+
init(input: CommandInput): Promise<CommandResult>;
|
|
208
|
+
status(input: CommandInput): Promise<CommandResult<BoardStatusObject>>;
|
|
209
|
+
getCardStoreRef(input: CommandInput): Promise<CommandResult<{
|
|
210
|
+
storeRef: string;
|
|
211
|
+
}>>;
|
|
212
|
+
getOutputsStoreRef(input: CommandInput): Promise<CommandResult<{
|
|
213
|
+
storeRef: string;
|
|
214
|
+
}>>;
|
|
215
|
+
getScratchStoreRef(input: CommandInput): Promise<CommandResult<{
|
|
216
|
+
storeRef: string | null;
|
|
217
|
+
}>>;
|
|
218
|
+
getArchiveStoreRef(input: CommandInput): Promise<CommandResult<{
|
|
219
|
+
storeRef: string | null;
|
|
220
|
+
}>>;
|
|
221
|
+
getChatStoreRef(input: CommandInput): Promise<CommandResult<{
|
|
222
|
+
storeRef: string | null;
|
|
223
|
+
}>>;
|
|
224
|
+
getArtifactsStoreRef(input: CommandInput): Promise<CommandResult<{
|
|
225
|
+
storeRef: string | null;
|
|
226
|
+
}>>;
|
|
227
|
+
getConfig(input: CommandInput): Promise<CommandResult<{
|
|
228
|
+
value: unknown;
|
|
229
|
+
}>>;
|
|
230
|
+
getOutputsDataObject(input: CommandInput): Promise<CommandResult>;
|
|
231
|
+
getAllOutputsDataObjects(input: CommandInput): Promise<CommandResult<Record<string, unknown>>>;
|
|
232
|
+
getOutputsComputedValues(input: CommandInput): Promise<CommandResult>;
|
|
233
|
+
getAllOutputsComputedValues(input: CommandInput): Promise<CommandResult<Record<string, unknown>>>;
|
|
234
|
+
getOutputsFetchedSources(input: CommandInput): Promise<CommandResult<Record<string, string>>>;
|
|
235
|
+
getAllOutputsFetchedSources(input: CommandInput): Promise<CommandResult<Record<string, Record<string, string>>>>;
|
|
236
|
+
addCardFiles(input: CommandInput): Promise<CommandResult<{
|
|
237
|
+
cardId: string;
|
|
238
|
+
files_added: Array<{
|
|
239
|
+
idx: number;
|
|
240
|
+
entry: unknown;
|
|
241
|
+
}>;
|
|
242
|
+
notified: true;
|
|
243
|
+
}>>;
|
|
244
|
+
cardRefreshedNotify(input: CommandInput): Promise<CommandResult>;
|
|
245
|
+
removeCard(input: CommandInput): Promise<CommandResult>;
|
|
246
|
+
retrigger(input: CommandInput): Promise<CommandResult>;
|
|
247
|
+
upsertCard(input: CommandInput): Promise<CommandResult>;
|
|
248
|
+
processAccumulatedEvents(input: CommandInput): Promise<CommandResult>;
|
|
249
|
+
taskFailed(input: CommandInput): Promise<CommandResult>;
|
|
250
|
+
taskProgress(input: CommandInput): Promise<CommandResult>;
|
|
251
|
+
sourceDataFetched(input: CommandInput): Promise<CommandResult>;
|
|
252
|
+
sourceDataFetchFailure(input: CommandInput): Promise<CommandResult>;
|
|
253
|
+
}
|
|
254
|
+
declare function createAsyncBoardLiveCardsPublic(baseRef: KindValueRef, adapter: AsyncBoardPlatformAdapter): AsyncBoardLiveCardsPublic;
|
|
255
|
+
|
|
256
|
+
export { type AsyncBoardLiveCardsPublic as A, type HostedAsyncBoardPlatformAdapterOptions as H, type AsyncBoardPlatformAdapter as a, type AsyncJSONStorage as b, type AsyncKVStorage as c, type AsyncBlobStorage as d, type AsyncJournalStorage as e, type AsyncStorageProvider as f, type AsyncAtomicRelayLock as g, type AsyncQueueStorage as h, type AsyncBoardConfigStore as i, type AsyncBoardWorkerDeadLetterRequest as j, type AsyncBoardWorkerLeasedRequest as k, type AsyncBoardWorkerQueuedRequest as l, type AsyncBoardWorkerRequest as m, type AsyncBoardWorkerStore as n, type HostedFetchLike as o, type HostedFetchResponseLike as p, createAsyncBoardConfigStore as q, createAsyncBoardLiveCardsPublic as r, createAsyncBoardWorkerStore as s, createHostedAsyncBoardPlatformAdapter as t, withAsyncRelayLock as w };
|
package/lib/{board-live-cards-public-B13InXhC.d.cts → board-live-cards-public-wkNmBIRC.d.cts}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { K as KVStorage, B as BlobStorage, S as ScratchStorage, A as ArchiveFactory,
|
|
1
|
+
import { g as QueueStorage, K as KVStorage, B as BlobStorage, S as ScratchStorage, A as ArchiveFactory, h as AtomicRelayLock, a as KindValueRef } from './storage-interface-BFiD3kyB.cjs';
|
|
2
2
|
import { ExecutionRef } from './execution-refs.cjs';
|
|
3
3
|
import { f as GraphEvent, G as GraphConfig } from './types-BBhqYGhE.cjs';
|
|
4
4
|
|
|
@@ -71,6 +71,10 @@ interface JournalStorageAdapter {
|
|
|
71
71
|
}
|
|
72
72
|
declare const SNAPSHOT_SCHEMA_VERSION_V1 = "v1";
|
|
73
73
|
declare const BOARD_GRAPH_KEY = "board/graph";
|
|
74
|
+
interface StateSnapshotReadView {
|
|
75
|
+
version: string | null;
|
|
76
|
+
values: Record<string, unknown>;
|
|
77
|
+
}
|
|
74
78
|
type OutputStoreEvent = {
|
|
75
79
|
kind: 'computed_values';
|
|
76
80
|
cardId: string;
|
|
@@ -136,6 +140,52 @@ interface BoardStatusObject {
|
|
|
136
140
|
}
|
|
137
141
|
declare const EMPTY_CONFIG: GraphConfig;
|
|
138
142
|
|
|
143
|
+
interface BoardTaskCallback {
|
|
144
|
+
token: string;
|
|
145
|
+
via: ExecutionRef;
|
|
146
|
+
}
|
|
147
|
+
interface BoardCallbackTransport {
|
|
148
|
+
createCallback(token: string): BoardTaskCallback;
|
|
149
|
+
}
|
|
150
|
+
declare function createHttpBoardCallbackTransport(baseUrl: string): BoardCallbackTransport;
|
|
151
|
+
declare function createInProcessBoardCallbackTransport(handlerKey: string): BoardCallbackTransport;
|
|
152
|
+
declare function createLocalNodeBoardCallbackTransport(notifyChannel?: string): BoardCallbackTransport;
|
|
153
|
+
|
|
154
|
+
interface BoardWorkerRequest {
|
|
155
|
+
boardId?: string;
|
|
156
|
+
ref: ExecutionRef;
|
|
157
|
+
args: Record<string, unknown>;
|
|
158
|
+
}
|
|
159
|
+
interface BoardWorkerQueuedRequest {
|
|
160
|
+
messageId: string;
|
|
161
|
+
enqueuedAt: string;
|
|
162
|
+
attempt: number;
|
|
163
|
+
request: BoardWorkerRequest;
|
|
164
|
+
}
|
|
165
|
+
interface BoardWorkerLeasedRequest extends BoardWorkerQueuedRequest {
|
|
166
|
+
leaseToken: string;
|
|
167
|
+
leaseExpiresAt: string;
|
|
168
|
+
}
|
|
169
|
+
interface BoardWorkerDeadLetterRequest extends BoardWorkerQueuedRequest {
|
|
170
|
+
reason?: string;
|
|
171
|
+
}
|
|
172
|
+
interface BoardWorkerStore {
|
|
173
|
+
enqueueRequest(request: BoardWorkerRequest): string;
|
|
174
|
+
enqueueRequestIfAbsent?(request: BoardWorkerRequest, dedupKey: string): string | null;
|
|
175
|
+
leaseRequests(opts?: {
|
|
176
|
+
max?: number;
|
|
177
|
+
visibilityMs?: number;
|
|
178
|
+
}): BoardWorkerLeasedRequest[];
|
|
179
|
+
ackRequest(messageId: string, leaseToken: string): boolean;
|
|
180
|
+
nackRequest(messageId: string, leaseToken: string, opts?: {
|
|
181
|
+
dead?: boolean;
|
|
182
|
+
reason?: string;
|
|
183
|
+
}): boolean;
|
|
184
|
+
peekActive(): BoardWorkerQueuedRequest[];
|
|
185
|
+
peekDeadLetter(): BoardWorkerDeadLetterRequest[];
|
|
186
|
+
}
|
|
187
|
+
declare function createBoardWorkerStore(queue: QueueStorage): BoardWorkerStore;
|
|
188
|
+
|
|
139
189
|
/**
|
|
140
190
|
* board-live-cards-public.ts
|
|
141
191
|
*
|
|
@@ -233,6 +283,22 @@ interface BoardPlatformAdapter {
|
|
|
233
283
|
* One journal per board — no namespace parameter needed.
|
|
234
284
|
*/
|
|
235
285
|
journalAdapter(): JournalStorageAdapter;
|
|
286
|
+
/**
|
|
287
|
+
* Semantic board-worker queue for hosted task execution.
|
|
288
|
+
* Implementations may back this with QueueStorage, Service Bus, Pub/Sub, etc.
|
|
289
|
+
*/
|
|
290
|
+
boardWorkerStore(): BoardWorkerStore;
|
|
291
|
+
/**
|
|
292
|
+
* Semantic queue for chat-agent dispatch requests.
|
|
293
|
+
* Kept separate from task execution so chat work can be drained independently.
|
|
294
|
+
*/
|
|
295
|
+
chatAgentStore(): BoardWorkerStore;
|
|
296
|
+
/**
|
|
297
|
+
* Queue of board wake-up requests for processAccumulatedEvents scheduling.
|
|
298
|
+
* Implementations should use enqueueIfAbsent when they want single-pending
|
|
299
|
+
* drain semantics.
|
|
300
|
+
*/
|
|
301
|
+
processAccumulatedStore(): QueueStorage;
|
|
236
302
|
/**
|
|
237
303
|
* AtomicRelayLock — non-blocking try-acquire with relay-on-busy semantics.
|
|
238
304
|
* Guards processAccumulatedEvents drain cycle.
|
|
@@ -242,17 +308,15 @@ interface BoardPlatformAdapter {
|
|
|
242
308
|
*/
|
|
243
309
|
lock: AtomicRelayLock;
|
|
244
310
|
/**
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
* Node/FS: { howToRun: 'local-node', whatToRun: 'b64:<base64url({"kind":"yaml-flow-cli","value":"board-live-cards-cli.js"})>' }
|
|
248
|
-
* Azure Fn: { howToRun: 'http:post', whatToRun: 'b64:<base64url({"kind":"http-url","value":"https://…/api/board"})>' }
|
|
311
|
+
* Adapter-owned callback transport used to build worker callback payloads.
|
|
312
|
+
* The board core treats callback delivery as a platform concern.
|
|
249
313
|
*/
|
|
250
|
-
|
|
314
|
+
callbackTransport?: BoardCallbackTransport;
|
|
251
315
|
/**
|
|
252
316
|
* Generic execution dispatch — platform adapts ExecutionRef → actual transport.
|
|
253
317
|
* Public layer constructs fully-formed semantic args (source def, base_ref,
|
|
254
318
|
* callback token with selfRef baked in). Platform handles transport:
|
|
255
|
-
|
|
319
|
+
* Node host adapter: may write args to temp file and may spawn a detached process
|
|
256
320
|
* Azure: HTTP POST args as JSON body
|
|
257
321
|
* Firebase: publishes args as pubsub message
|
|
258
322
|
*/
|
|
@@ -260,6 +324,12 @@ interface BoardPlatformAdapter {
|
|
|
260
324
|
dispatched: boolean;
|
|
261
325
|
error?: string;
|
|
262
326
|
}>;
|
|
327
|
+
/**
|
|
328
|
+
* Whether dispatchExecution can accept a board-owned staged source output ref
|
|
329
|
+
* for this executor. When false/absent, the adapter keeps its legacy staging
|
|
330
|
+
* protocol such as scratch in/out refs for local process launch.
|
|
331
|
+
*/
|
|
332
|
+
supportsDirectSourceOutput?(ref: ExecutionRef): boolean;
|
|
263
333
|
/**
|
|
264
334
|
* Resolve a blob ref to its string contents.
|
|
265
335
|
* The adapter handles the platform-specific lookup (e.g. absolute FS path vs board-relative key).
|
|
@@ -355,13 +425,13 @@ type BoardChangeNotification = OutputStoreEvent | {
|
|
|
355
425
|
declare function createBoardLiveCardsPublic(baseRef: KindValueRef, adapter: BoardPlatformAdapter): BoardLiveCardsPublic;
|
|
356
426
|
interface BoardNonCorePlatformAdapter extends BoardPlatformAdapter {
|
|
357
427
|
/**
|
|
358
|
-
*
|
|
359
|
-
* Throws on non-zero exit or timeout.
|
|
428
|
+
* Invoke a task executor subcommand and return stdout.
|
|
429
|
+
* Throws on transport failure, non-zero exit, or timeout.
|
|
360
430
|
*/
|
|
361
|
-
|
|
431
|
+
invokeExecutor(ref: ExecutionRef, subcommand: string, opts?: {
|
|
362
432
|
timeout?: number;
|
|
363
433
|
input?: string;
|
|
364
|
-
}): string
|
|
434
|
+
}): Promise<string>;
|
|
365
435
|
/** Schema-only card validator (no executor invocation). */
|
|
366
436
|
validateSchema(card: Record<string, unknown>): {
|
|
367
437
|
ok: boolean;
|
|
@@ -370,7 +440,7 @@ interface BoardNonCorePlatformAdapter extends BoardPlatformAdapter {
|
|
|
370
440
|
/** Absolute-path blob I/O for resolving arbitrary KindValueRef blobs. */
|
|
371
441
|
absoluteBlob: BlobStorage;
|
|
372
442
|
/**
|
|
373
|
-
|
|
443
|
+
* Default timeouts (ms) for executor request/response calls.
|
|
374
444
|
* Each field can also be overridden per-source via source_def.timeout.
|
|
375
445
|
*
|
|
376
446
|
* validationMs — validate-source-def, validate-card-preflight (structural, fast). Default: 10_000.
|
|
@@ -386,31 +456,21 @@ interface BoardNonCorePlatformAdapter extends BoardPlatformAdapter {
|
|
|
386
456
|
};
|
|
387
457
|
}
|
|
388
458
|
interface BoardLiveCardsNonCorePublic {
|
|
389
|
-
/** params: cardId? or all?; returns array even for single card */
|
|
390
|
-
validateCard(input: CommandInput): CommandResult<Array<{
|
|
391
|
-
cardId: string;
|
|
392
|
-
isValid: boolean;
|
|
393
|
-
issues: string[];
|
|
394
|
-
}>>;
|
|
395
459
|
/** body: { "card-content": <card> } — card JSON arrives via stdin; validates schema + JSONata + provides refs + source_defs (executor, if configured) */
|
|
396
|
-
validateCardPreflight(input: CommandInput): CommandResult<{
|
|
460
|
+
validateCardPreflight(input: CommandInput): Promise<CommandResult<{
|
|
397
461
|
cardId: string;
|
|
398
462
|
isValid: boolean;
|
|
399
463
|
issues: string[];
|
|
400
|
-
}
|
|
401
|
-
/** params: cardId, sourceIdx, outRef?; body — mockProjections object */
|
|
402
|
-
probeSource(input: CommandInput): CommandResult;
|
|
403
|
-
/** body: { sourceDef, mockProjections }; params: outRef? */
|
|
404
|
-
probeTmpSource(input: CommandInput): CommandResult;
|
|
464
|
+
}>>;
|
|
405
465
|
/** body: { "card-content": <card>, "mock-projections"?: {} }; params: sourceIdx, outRef? — card JSON arrives via stdin; no board state needed */
|
|
406
|
-
probeSourcePreflight(input: CommandInput): CommandResult
|
|
466
|
+
probeSourcePreflight(input: CommandInput): Promise<CommandResult>;
|
|
407
467
|
/** body: { "card-content": <card>, "mock-projections"?: {} }; params: sourceIdx, outRef? — runs the real source fetch flow as a preflight */
|
|
408
|
-
runSourcePreflight(input: CommandInput): CommandResult<{
|
|
468
|
+
runSourcePreflight(input: CommandInput): Promise<CommandResult<{
|
|
409
469
|
bindTo: string;
|
|
410
470
|
ok: boolean;
|
|
411
471
|
result: unknown;
|
|
412
472
|
issues: string[];
|
|
413
|
-
}
|
|
473
|
+
}>>;
|
|
414
474
|
/** body: { "card-content": <card>, "mock-fetched-sources"?: {}, "mock-requires"?: {} } — evaluates compute expressions with supplied data; no board state needed */
|
|
415
475
|
evalCardCompute(input: CommandInput): CommandResult<{
|
|
416
476
|
cardId: string;
|
|
@@ -422,9 +482,9 @@ interface BoardLiveCardsNonCorePublic {
|
|
|
422
482
|
}>;
|
|
423
483
|
}>;
|
|
424
484
|
/** body: { "card-content": <card>, "mock-fetched-sources"?: {}, "mock-requires"?: {} } — full cycle: validate → resolve projections → probe sources → compute */
|
|
425
|
-
simulateCardCycle(input: CommandInput): CommandResult
|
|
485
|
+
simulateCardCycle(input: CommandInput): Promise<CommandResult>;
|
|
426
486
|
/** no params needed */
|
|
427
|
-
describeTaskExecutorCapabilities(input: CommandInput): CommandResult
|
|
487
|
+
describeTaskExecutorCapabilities(input: CommandInput): Promise<CommandResult>;
|
|
428
488
|
/**
|
|
429
489
|
* Write/update cards in the configured card store.
|
|
430
490
|
* body: { ops: Array<{ op: 'update', id: string, 'card-content': LiveCard }> }
|
|
@@ -443,4 +503,4 @@ interface BoardLiveCardsNonCorePublic {
|
|
|
443
503
|
}
|
|
444
504
|
declare function createBoardLiveCardsNonCorePublic(baseRef: KindValueRef, adapter: BoardNonCorePlatformAdapter): BoardLiveCardsNonCorePublic;
|
|
445
505
|
|
|
446
|
-
export { type
|
|
506
|
+
export { type BoardWorkerRequest as B, type CommandResult as C, EMPTY_CONFIG as E, type LiveCard as L, type StateSnapshotReadView as S, type CommandInput as a, type CardAdminStore as b, type BoardChangeNotification as c, type BoardLiveCardsPublic as d, type BoardNonCorePlatformAdapter as e, type BoardPlatformAdapter as f, type BoardCallbackTransport as g, type BoardStatusObject as h, type CardChecksumIndex as i, type CardUpsertValidation as j, type CardIndex as k, type BoardWorkerStore as l, BOARD_GRAPH_KEY as m, type BoardLiveCardsNonCorePublic as n, type BoardWorkerDeadLetterRequest as o, type BoardWorkerLeasedRequest as p, type BoardWorkerQueuedRequest as q, SNAPSHOT_SCHEMA_VERSION_V1 as r, createBoardLiveCardsNonCorePublic as s, createBoardLiveCardsPublic as t, createBoardWorkerStore as u, createCardStore as v, createHttpBoardCallbackTransport as w, createInProcessBoardCallbackTransport as x, createLocalNodeBoardCallbackTransport as y };
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
'use strict';var module$1=require('module');require('ajv-formats');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var Ie="b64:";function Vt(e){let t=new TextEncoder().encode(e),r=globalThis.Buffer,n;if(r)n=r.from(t).toString("base64");else if(typeof btoa=="function"){let s="";for(let o of t)s+=String.fromCharCode(o);n=btoa(s);}else throw new Error("No base64 encoder available in this runtime");return n.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Bt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-e.length%4)%4),r=globalThis.Buffer;if(r)return r.from(t,"base64").toString("utf8");if(typeof atob=="function"){let n=atob(t),s=new Uint8Array(n.length);for(let o=0;o<n.length;o+=1)s[o]=n.charCodeAt(o);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function re(e){return `${Ie}${Vt(JSON.stringify(e))}`}function Oe(e){if(!e.startsWith(Ie))throw new Error(`Invalid ref format (expected ${Ie}<base64url(json)>): ${e}`);let t;try{t=JSON.parse(Bt(e.slice(Ie.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${e}`)}if(!t||typeof t!="object")throw new Error(`Invalid ref format (expected object payload): ${e}`);let r=t;if(typeof r.kind!="string"||typeof r.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${e}`);return {kind:r.kind,value:r.value}}async function et(e,t,r){let n=e.tryAcquire();if(!n)return false;try{await t();}finally{n();}return r?.(),true}var fe={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function ne(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function pe(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function tt(e){return e.tasks??{}}function Me(e){return e?e.status===fe.FAILED||e.status===fe.INACTIVATED:false}function rt(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function nt(e){return e.maxExecutions}function ot(e,t){let r=new Set;for(let[n,s]of Object.entries(t))if(s.status===fe.COMPLETED){let o=e.tasks[n];o&&ne(o).forEach(u=>r.add(u));}return Array.from(r)}function st(e,t){let r={};return e.forEach(n=>{let s=t[n];if(!s)return;ne(s).forEach(a=>{r[a]||(r[a]=[]),r[a].push(n);});}),r}function at(e,t,r){let n=e.tasks[t]??je(),s={};if(r){let a=r.tasks[t],u=pe(a);for(let f of u)for(let[C,I]of Object.entries(r.tasks))if(ne(I).includes(f)){let F=e.tasks[C];F?.lastDataHash&&(s[f]=F.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 it(e,t,r,n,s,o){let a=e.tasks[r]??je(),u=t.tasks[r];if(!u)throw new Error(`Task "${r}" not found in graph`);let f;n&&u.on&&u.on[n]?f=u.on[n]:f=ne(u);let C=a.startConsumedHashes?{...a.startConsumedHashes}:{...a.lastConsumedHashes};if(!a.startConsumedHashes){let G=u.requires??[];for(let $ of G)for(let[k,R]of Object.entries(t.tasks))if(ne(R).includes($)){let P=e.tasks[k];P?.lastDataHash&&(C[$]=P.lastDataHash);break}}let I={...a,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:a.executionCount+1,lastEpoch:a.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:C,error:void 0},F=[...new Set([...e.availableOutputs,...f])];return {...e,tasks:{...e.tasks,[r]:I},availableOutputs:F,lastUpdated:new Date().toISOString()}}function ut(e,t,r,n){let s=e.tasks[r]??je(),o=t.tasks[r];if(o?.retry){let f=s.retryCount+1;if(f<=o.retry.max_attempts){let C={...s,status:"not-started",retryCount:f,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:C},lastUpdated:new Date().toISOString()}}}let a={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},u=e.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(u=[...new Set([...e.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&a.executionCount>=o.circuit_breaker.max_executions){let f=o.circuit_breaker.on_break;u=[...new Set([...u,...f])];}return {...e,tasks:{...e.tasks,[r]:a},availableOutputs:u,lastUpdated:new Date().toISOString()}}function ct(e,t,r,n){let s=e.tasks[t]??je(),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 dt(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 je(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function qe(e,t){let r=`live-${Date.now()}`,n={};for(let o of Object.keys(e.tasks))n[o]=ft();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 Kt(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:at(n,t.taskName,r)};case "task-completed":return {config:r,state:it(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:ut(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:ct(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:dt(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:Xt(n,t.action)};case "task-upsert":return Mt(e,t.taskName,t.taskConfig);case "task-removal":return Ut(e,t.taskName);case "node-requires-add":return Ht(e,t.nodeName,t.tokens);case "node-requires-remove":return Jt(e,t.nodeName,t.tokens);case "node-provides-add":return zt(e,t.nodeName,t.tokens);case "node-provides-remove":return Yt(e,t.nodeName,t.tokens);default:return e}}function lt(e,t){return t.reduce((r,n)=>Kt(r,n),e)}function Mt(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]:ft()},lastUpdated:new Date().toISOString()}}}function Ut(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 Ht(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=pe(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 Jt(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=pe(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 zt(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=ne(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 Yt(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=ne(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 we(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function Ne(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 ft(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Xt(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 xe(e){let{config:t,state:r}=e,n=tt(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=Wt(n),a=ot(t,r.tasks),u=new Set([...a,...r.availableOutputs]),f=[],C=[],I=[],F=[];for(let[$,k]of Object.entries(n)){let R=r.tasks[$],P=rt(k,t.settings),K=P!=="once";if(R?.status===fe.RUNNING||Me(R))continue;let H=nt(k);if(H!==void 0&&R&&R.executionCount>=H||k.circuit_breaker&&R&&R.executionCount>=k.circuit_breaker.max_executions||!K&&R?.status===fe.COMPLETED)continue;if(K&&R?.status===fe.COMPLETED){let c=pe(k),l=false;switch(P){case "data-changed":{c.length>0&&c.some(b=>{for(let[w,O]of Object.entries(n))if(ne(O).includes(b)){let j=r.tasks[w];if(!j)continue;let J=R.lastConsumedHashes?.[b];return j.lastDataHash==null?j.executionCount>R.lastEpoch:j.lastDataHash!==J}return false})||(l=true);break}case "epoch-changed":{c.length>0&&c.some(b=>{for(let[w,O]of Object.entries(n))if(ne(O).includes(b)){let j=r.tasks[w];if(j&&j.executionCount>R.lastEpoch)return true}return false})||(l=true);break}case "time-based":{let h=k.refreshInterval??0;if(h<=0){l=true;break}let b=R.completedAt;if(!b){l=true;break}(Date.now()-Date.parse(b))/1e3<h&&(l=true);break}case "manual":l=true;break}if(l)continue}let m=pe(k);if(m.length===0){f.push($);continue}let A=[],p=[],d=[];for(let c of m){if(u.has(c))continue;let l=o[c]||[];l.length===0?A.push(c):l.every(b=>Me(r.tasks[b]))?d.push({token:c,failedProducer:l[0]}):p.push(c);}A.length>0?I.push({taskName:$,missingTokens:A}):d.length>0?F.push({taskName:$,failedTokens:d.map(c=>c.token),failedProducers:[...new Set(d.map(c=>c.failedProducer))]}):p.length>0?C.push({taskName:$,waitingOn:p}):f.push($);}let G={};if(f.length>1){let $=st(f,n);for(let[k,R]of Object.entries($))R.length>1&&(G[k]=R);}return {eligible:f,pending:C,unresolved:I,blocked:F,conflicts:G}}function Wt(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of ne(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}var Ee=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function Ue(e){let t=He(e);return Qt(t)}function He(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(He).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+He(t[n])).join(",")+"}"}function Qt(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 Zt(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 er(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 pt(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Zt(t)}function tr(e){try{let t=JSON.parse(er(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function gt(e,t,r){let{handlers:n,onNodeRemoved:s,onDrain:o}=t,a=new Ee,u="state"in e&&"config"in e?e:qe(e),f=false,C=new Set,I=new Map(Object.entries(n)),F=new Ee,G=false,$=false;function k(){if(!f){if(G){$=true;return}G=true;try{do $=!1,R();while($)}finally{G=false;}}}function R(){let m=F.drain(),A=a.drain(),p=[...m,...A];if(p.length>0&&(u=lt(u,p),s)){for(let c of p)if(c.type==="task-removal")try{s(c.taskName);}catch(l){console.warn("[reactive] onNodeRemoved failed:",l instanceof Error?l.message:String(l));}}let d=xe(u);p.length>0&&o?.(p,u,d);for(let c of d.eligible)H(c);for(let c of p)if(c.type==="task-progress"){let{taskName:l,update:h}=c;if(!u.config.tasks[l])continue;let w=u.state.tasks[l];if(!w||w.status!=="running")continue;let O=pt(l),j=K(l,O,h).catch(J=>{f||(F.append({type:"task-failed",taskName:l,error:J.message??String(J),timestamp:new Date().toISOString()}),k());}).finally(()=>{C.delete(j);});C.add(j);}}function P(m){let p=u.config.tasks[m].requires??[],d=new Map;for(let[l,h]of Object.entries(u.config.tasks))for(let b of h.provides??[])d.set(b,l);let c={};for(let l of p){let h=d.get(l);h?c[l]=u.state.tasks[h]?.data:c[l]=void 0;}return c}async function K(m,A,p){let d=u.config.tasks[m],c=d.taskHandlers??[],l=P(m);for(let h of c){let b=I.get(h);if(!b)throw new Error(`Handler '${h}' not found in registry (task '${m}')`);let w={nodeId:m,state:l,taskState:u.state.tasks[m],config:d,callbackToken:A,update:p};if(await b(w)==="task-initiate-failure")throw new Error(`Handler '${h}' returned task-initiate-failure (task '${m}')`)}}function H(m){let p=u.config.tasks[m]?.taskHandlers;if(!p||p.length===0)return;F.append({type:"task-started",taskName:m,timestamp:new Date().toISOString()}),k();let d=pt(m),c=K(m,d).catch(l=>{f||(F.append({type:"task-failed",taskName:m,error:l.message??String(l),timestamp:new Date().toISOString()}),k());}).finally(()=>{C.delete(c);});C.add(c);}return {push(m){f||(m.type==="task-completed"&&m.data&&!m.dataHash&&(m={...m,dataHash:Ue(m.data)}),a.append(m),k());},pushAll(m){if(!f){for(let A of m)A.type==="task-completed"&&A.data&&!A.dataHash?a.append({...A,dataHash:Ue(A.data)}):a.append(A);k();}},resolveCallback(m,A,p){if(f)return;let d=tr(m);if(!d)return;let{taskName:c}=d;if(u.config.tasks[c]){if(p&&p.length>0)a.append({type:"task-failed",taskName:c,error:p.join("; "),timestamp:new Date().toISOString()});else {let l=A&&Object.keys(A).length>0?Ue(A):void 0;a.append({type:"task-completed",taskName:c,data:A,dataHash:l,timestamp:new Date().toISOString()});}k();}},addNode(m,A){f||(a.append({type:"task-upsert",taskName:m,taskConfig:A,timestamp:new Date().toISOString()}),k());},removeNode(m){f||(a.append({type:"task-removal",taskName:m,timestamp:new Date().toISOString()}),k());},addRequires(m,A){f||(a.append({type:"node-requires-add",nodeName:m,tokens:A,timestamp:new Date().toISOString()}),k());},removeRequires(m,A){f||(a.append({type:"node-requires-remove",nodeName:m,tokens:A,timestamp:new Date().toISOString()}),k());},addProvides(m,A){f||(a.append({type:"node-provides-add",nodeName:m,tokens:A,timestamp:new Date().toISOString()}),k());},removeProvides(m,A){f||(a.append({type:"node-provides-remove",nodeName:m,tokens:A,timestamp:new Date().toISOString()}),k());},registerHandler(m,A){I.set(m,A);},unregisterHandler(m){I.delete(m);},retrigger(m){f||u.config.tasks[m]&&(a.append({type:"task-restart",taskName:m,timestamp:new Date().toISOString()}),k());},retriggerAll(m){if(!f){for(let A of m)u.config.tasks[A]&&a.append({type:"task-restart",taskName:A,timestamp:new Date().toISOString()});k();}},snapshot(){return we(u)},getState(){return u},getSchedule(){return xe(u)},async waitForHandlers(){C.size>0&&await Promise.allSettled([...C]);},async dispose(m){m?.wait&&C.size>0&&await Promise.allSettled([...C]),f=true;}}}var nr=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('board-live-cards-public.cjs', document.baseURI).href)));nr("./jsonata-sync.cjs");var sr=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('board-live-cards-public.cjs', document.baseURI).href))),De=sr("./jsonata-sync.cjs"),kt=De;function mt(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 yt(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 ar(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 De(s.expr).evaluate(n);yt(e.computed_values,s.bindTo,o),n.computed_values=e.computed_values;}catch{}return e}function ir(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=kt(o.expr).evaluate(n);yt(e.computed_values,o.bindTo,a),n.computed_values=e.computed_values;}catch(a){let u=a instanceof Error?a.message:String(a);s.push({bindTo:o.bindTo,error:u});}return s.length>0?{ok:true,node:e,errors:s}:{ok:true,node:e}}async function ur(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return De(e).evaluate(n)}function cr(e,t){return t.startsWith("fetched_sources.")?mt(e._sourcesData??{},t.slice(16)):mt(e,t)}var ht=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),dr=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function lr(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))dr.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 u=o;typeof u.bindTo!="string"||!u.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(n.has(u.bindTo)&&t.push(`source_defs[${a}]: bindTo "${u.bindTo}" is not unique across source_defs`),n.add(u.bindTo)),typeof u.outputFile!="string"||!u.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(s.has(u.outputFile)&&t.push(`source_defs[${a}]: outputFile "${u.outputFile}" is not unique across source_defs`),s.add(u.outputFile)),u.optionalForCompletionGating!=null&&typeof u.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`):ht.has(s.kind)||t.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...ht].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 fr(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 De(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function pr(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]=kt(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var ge={run:ar,runSync:ir,eval:ur,resolve:cr,validate:lr,enrichSources:fr,enrichSourcesSync:pr};function St(e){return JSON.stringify(e)}function Ct(e){let t;try{t=JSON.parse(e);}catch{throw new Error(`parseExecutionRef: invalid JSON \u2014 ${e}`)}if(typeof t!="object"||t===null||typeof t.howToRun!="string"||typeof t.whatToRun!="string")throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun \u2014 ${e}`);return t}function Je(e,t){function r(){return e.readIndex()??{}}function n(s,o,a){let u=String(o||"").split(".").filter(Boolean);if(u.length===0)return a&&typeof a=="object"&&!Array.isArray(a)?a:{value:a};let f={...s},C=f;for(let I=0;I<u.length-1;I++){let F=u[I],G=C[F],$=G&&typeof G=="object"&&!Array.isArray(G)?{...G}:{};C[F]=$,C=$;}return C[u[u.length-1]]=a,f}return {readCard(s){let o=r()[s];return !o||!e.cardExists(o.key)?null:e.readCard(o.key)},readCardKey(s){return r()[s]?.key??null},readAllCards(){let s=[];for(let[o,a]of Object.entries(r())){if(!e.cardExists(a.key))continue;let u=e.readCard(a.key);u?s.push(u):t?.(`[card-store] could not read card "${o}" at key "${a.key}"`);}return s},readChecksumIndex(){let s={};for(let[o,a]of Object.entries(r()))s[o]=a.checksum;return s},changedSince(s){let o=r(),a=[];for(let[u,f]of Object.entries(o))s[u]!==f.checksum&&a.push(u);for(let u of Object.keys(s))o[u]||a.push(u);return a},validateUpsert(s,o){let a=r(),u=a[s],f=Object.entries(a).find(([,C])=>C.key===o);return u&&u.key!==o?{ok:false,error:`Card id "${s}" is already mapped to key "${u.key}", cannot remap to "${o}"`}:f&&f[0]!==s?{ok:false,error:`Key "${o}" is already mapped to card id "${f[0]}", cannot remap to "${s}"`}:{ok:true}},writeCard(s,o,a){let u=r(),f=a??u[s]?.key??e.defaultCardKey(s),C=e.writeCard(f,o);u[s]={key:f,checksum:C,updatedAt:new Date().toISOString()},e.writeIndex(u);},patchCard(s,o,a){let u=r(),f=u[s];if(!f||!e.cardExists(f.key))throw new Error(`card "${s}" not found`);let C=e.readCard(f.key);if(!C||typeof C!="object"||Array.isArray(C))throw new Error(`card "${s}" is not patchable`);let I=n(C,o,a),F=e.writeCard(f.key,I);u[s]={key:f.key,checksum:F,updatedAt:new Date().toISOString()},e.writeIndex(u);},removeCard(s){let o=r(),a=o[s];a&&(e.removeCard(a.key),delete o[s],e.writeIndex(o));},readIndex(){return r()}}}function Fe(e,t){return {readSourceData(r,n){let s=e.read(`${r}/${n}`);if(s==null)return null;let o=s.trim();if(!o)return null;try{return JSON.parse(o)}catch{return o}},ingestSourceDataStaged(r,n,s,o){let a=t(s);e.write(`${r}/.staged/${o}/${n}`,a);},commitSourceData(r,n,s){let o=`${r}/.staged/${s}/${n}`,a=e.read(o);return a==null?false:(e.write(`${r}/${n}`,a),e.remove(o),true)},hasSource(r,n){return e.exists(`${r}/${n}`)},listSources(r){return e.listKeys(`${r}/`).filter(n=>!n.includes("/.staged/")).map(n=>n.slice(`${r}/`.length))}}}function xt(e){function t(r){let n=e.readAllEntries();if(!r)return n;let s=n.findIndex(o=>o.id===r);return s===-1?n:n.slice(s+1)}return {readEntriesAfterCursor(r){let n=t(r);return n.length===0?{events:[],newCursor:r}:{events:n.map(s=>s.event),newCursor:n[n.length-1].id}},pendingCount(r){return t(r).length},appendEvent(r){e.appendEntry({id:e.generateId(),event:r});}}}function Et(e,t){return {appendEntries(r,n){if(!r||n.length===0)return;let s=e.read(r)??[];e.write(r,[...s,...n]);},dispatchEntriesForJournalId(r,n){if(!r)return;let s=e.read(r);if(!(!s||s.length===0)){for(let o of s)try{n(o);}catch(a){let u=a instanceof Error?a.message:String(a);try{t(o,u);}catch{}}e.delete(r);}}}}var Pe="v1",ye="board/graph",Tt="board/lastJournalProcessedId";function Rt(e){return `cards/${e}/runtime`}function At(e){return {readRuntime(t){return e.read(Rt(t))??{_sources:{}}},writeRuntime(t,r){e.write(Rt(t),r);}}}function gr(e,t){let r={...e};for(let n of t.deleteKeys)delete r[n];return {...r,...t.shallowMerge}}function _t(e){return {readSnapshot(t){return e.readValues(t)},commitSnapshot(t,r){if(r.schemaVersion!==Pe)throw new Error(`Unsupported snapshot schema version: ${r.schemaVersion}`);let n=e.readValues(t);if(n.version!==r.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:n.version};let s=gr(n.values,r);return {ok:true,newVersion:e.writeValues(t,s,r.deleteKeys)}}}}function ze(e){function t(r){let n=e.read(r);return n==null?null:typeof n=="string"?n:JSON.stringify(n)}return {readTaskExecutorRef(){let r=t("task-executor");if(r?.trim())return Ct(r.trim())},writeTaskExecutorRef(r){e.write("task-executor",St(r));},readChatHandlerFlow(){return e.read("chat-handler-flow")},writeChatHandlerFlow(r){e.write("chat-handler-flow",r);},readCardStoreRef(){return t("card-store-ref")},writeCardStoreRef(r){e.write("card-store-ref",r);},readOutputsStoreRef(){return t("outputs-store-ref")},writeOutputsStoreRef(r){e.write("outputs-store-ref",r);},readScratchStoreRef(){return t("scratch-store-ref")},writeScratchStoreRef(r){e.write("scratch-store-ref",r);},readArchiveStoreRef(){return t("archive-store-ref")},writeArchiveStoreRef(r){e.write("archive-store-ref",r);},readChatStoreRef(){return t("chat-store-ref")},writeChatStoreRef(r){e.write("chat-store-ref",r);},readArtifactsStoreRef(){return t("artifacts-store-ref")},writeArtifactsStoreRef(r){e.write("artifacts-store-ref",r);}}}function It(e){return {writeComputedValues(t,r){e.write(`cards/${t}/computed_values`,r);},readComputedValues(t){return e.read(`cards/${t}/computed_values`)},readAllComputedValues(){let t={};for(let r of e.listKeys("cards/")){let n=r.match(/^cards\/([^/]+)\/computed_values$/);n&&(t[n[1]]=e.read(r));}return t},writeDataObjects(t){for(let[r,n]of Object.entries(t))r&&e.write(`data-objects/${r}`,n);},readDataObject(t){return e.read(`data-objects/${t}`)},readAllDataObjects(){let t={};for(let r of e.listKeys("data-objects/"))t[r.slice(13)]=e.read(r);return t},writeStatusSnapshot(t){e.write("status",t);},readStatusSnapshot(){return e.read("status")}}}function bt(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function mr(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function vt(e,t){return e?.lastRequestedToken?mr(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<t?"dispatch":"idle":"dispatch"}function hr(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"success"}}function wt(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"failure"}}function $e(e,t){let r=t.state.tasks,n=t.config.tasks,s=Object.keys(r),o=xe(t),a={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},u=new Map;for(let k of o.pending)u.set(k.taskName,k.waitingOn);for(let k of o.unresolved)u.set(k.taskName,k.missingTokens);for(let k of o.blocked)u.set(k.taskName,k.failedTokens);let f=new Map;for(let[k,R]of Object.entries(n))for(let P of R.requires??[]){let K=f.get(P)??[];K.push(k),f.set(P,K);}let C=s.sort().map(k=>{let R=r[k],P=n[k]??{requires:[],provides:[]};R.status==="completed"?a.completed+=1:R.status==="failed"?a.failed+=1:R.status==="in-progress"&&(a.in_progress+=1);let K=P.requires??[],H=P.provides??[],m=Object.keys(R.data??{}).sort(),A=K.filter(b=>t.state.availableOutputs.includes(b)),p=K.filter(b=>!t.state.availableOutputs.includes(b)),d=u.get(k)??p,c=new Set;for(let b of H)for(let w of f.get(b)??[])w!==k&&c.add(w);let l=R.failedAt,h=R.error?{message:R.error,code:"TASK_FAILED",at:l,source:"task-runtime"}:void 0;return {name:k,status:R.status,error:h,requires:K,requires_satisfied:A,requires_missing:p,provides_declared:H,provides_runtime:m,blocked_by:d,unblocks:Array.from(c).sort(),runtime:{attempt_count:R.executionCount??0,restart_count:R.retryCount??0,in_progress_since:R.status==="in-progress"?R.startedAt??null:null,last_transition_at:R.lastUpdated??null,last_completed_at:R.completedAt??null,last_restarted_at:R.startedAt??null,status_age_ms:R.lastUpdated?0:null}}});a.pending=o.pending.length,a.blocked=o.blocked.length,a.unresolved=o.unresolved.length;let I=C.map(k=>({name:k.name,fanOut:k.unblocks.length})).sort((k,R)=>R.fanOut-k.fanOut||k.name.localeCompare(R.name)),F=I.length>0?I[0]:{name:null,fanOut:0},G=new Set;for(let k of Object.values(n))for(let R of k.requires??[])G.add(R);let $=0;for(let[k,R]of Object.entries(n)){let P=(R.requires??[]).length===0,H=(R.provides??[]).some(m=>(f.get(m)??[]).some(A=>A!==k));P&&!H&&($+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:s.length,completed:a.completed,eligible:o.eligible.length,pending:a.pending,blocked:a.blocked,unresolved:a.unresolved,failed:a.failed,in_progress:a.in_progress,orphan_cards:$,topology:{edge_count:Array.from(G).length,max_fan_out_card:F.name,max_fan_out:F.fanOut}},cards:C}}function kr(){return new Date().toISOString()}function Ot(e,t,r,n,s,o,a){return async u=>{let f=[],C=r.cardStore.readCard(u.nodeId);if(!C)return "task-initiate-failure";let I=C.id,F=C.card_data??{},G=C.source_defs??[],$=G.filter(E=>E.optionalForCompletionGating!==true),k=r.cardRuntimeStore.readRuntime(I),R=false,P=()=>{R&&(r.cardRuntimeStore.writeRuntime(I,k),R=false);},K=E=>bt(k._sources[E]),H=(E,_)=>{k._sources[E]=bt(_),R=true;},m=u.taskState?.executionCount??0;if(k._lastExecutionCount!==m&&(k._sources={},k._lastExecutionCount=m,R=true),u.update){let E=u.update,_=E.outputFile;if(_){let V=K(_);if(E.failure){let U=E.rqt??V.lastRequestedToken??V.queueRequestedToken;U&&H(_,wt(V,U));}else {let U=E.rqt;if(!V.lastCompletedToken||U>V.lastCompletedToken){let ee=typeof E.deliveryToken=="string"?E.deliveryToken:void 0,ae=false;ee&&(ae=r.fetchedSourcesStore.commitSourceData(I,_,ee)),ae?H(_,hr(V,U)):H(_,wt(V,U));}}P();}}let p={};for(let E of G)if(E.outputFile){let _=r.fetchedSourcesStore.readSourceData(I,E.outputFile);_!==null&&(p[E.bindTo]=_);}let d={};for(let[E,_]of Object.entries(u.state??{}))if(_!==null&&typeof _=="object"&&!Array.isArray(_)){let V=_[E];d[E]=V!==void 0?V:_;}else d[E]=_;let c={id:I,card_data:{...F},requires:d,source_defs:G,compute:C.compute};c._sourcesData=p,C.compute&&ge.runSync(c,{sourcesData:p}),(o??r.outputStore.writeComputedValues.bind(r.outputStore))(I,c.computed_values??{});let l={...C},h=ge.enrichSourcesSync(Array.isArray(C.source_defs)?C.source_defs:void 0,{card_data:C.card_data,requires:d}),b=e.value;l.source_defs=Array.isArray(h)?h.map(E=>({...E,boardDir:typeof E.boardDir=="string"&&E.boardDir?E.boardDir:b})):h;let w=kr(),O=u.update?void 0:w,j=$.filter(E=>{let _=E.outputFile;if(typeof _!="string"||!_)return true;let V=K(_);O&&(V={...V,queueRequestedToken:O},H(_,V));let U=V.queueRequestedToken??V.lastRequestedToken??w,ee=vt(V,U);return ee==="in-flight"?false:ee==="dispatch"});if(P(),j.length>0){let E=false,_=w;for(let V of j){let U=V.outputFile;if(typeof U!="string"||!U)continue;let ee=K(U),ae=ee.queueRequestedToken??w;H(U,{...ee,lastRequestedToken:ae}),_=ae,E=true;}return E&&P(),E&&(f.push({taskKind:"source-fetch",payload:{boardRef:re(e),enrichedCard:l,callbackToken:u.callbackToken,rqt:_}}),r.executionRequestStore.appendEntries(t,f)),"task-initiated"}if($.some(E=>{let _=E.outputFile;if(typeof _!="string"||!_)return false;let V=K(_),U=V.queueRequestedToken??V.lastRequestedToken??w;return vt(V,U)==="in-flight"}))return "task-initiated";let z=C.provides??[],Q={};for(let{bindTo:E,ref:_}of z)Q[E]=ge.resolve(c,_);return (a??r.outputStore.writeDataObjects.bind(r.outputStore))(Q),G.filter(E=>{if(E.optionalForCompletionGating!==true)return false;let _=K(E.outputFile);return !_.lastRequestedToken||!_.lastCompletedToken?true:_.lastCompletedToken<=_.lastRequestedToken}).length>0&&f.push({taskKind:"source-fetch",payload:{boardRef:re(e),enrichedCard:l,callbackToken:u.callbackToken,rqt:w}}),n(u.nodeId,Q),f.length>0&&r.executionRequestStore.appendEntries(t,f),"task-initiated"}}var Ye={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function jt(e){return {[ye]:e.graph,[Tt]:e.lastDrainedJournalId}}function qt(e){let t=e[ye],r=e[Tt];if(!t||typeof t!="object")throw new Error(`State snapshot is missing required key: ${ye}`);return {graph:t,lastDrainedJournalId:typeof r=="string"?r:""}}function Nt(e){let t=e.requires,r=e.provides?.map(n=>n.bindTo)??[];return {requires:t&&t.length>0?t:void 0,provides:r,taskHandlers:["card-handler"],description:e.meta?.title??e.id}}function Dt(e){function t(o){return {status:"success",data:o}}function r(o){return {status:"fail",error:o}}function n(o){return {status:"error",error:o instanceof Error?o.message:String(o)}}function s(o){if(Array.isArray(o))return o;if(o&&typeof o=="object"){let a=o;return Array.isArray(a.files)?a.files:[o]}return null}return {get(o){try{let a=o.params?.id;if(a){let u=e.readCard(a);return u?t({cards:[u]}):r(`card "${a}" not found`)}return t({cards:e.readAllCards()})}catch(a){return n(a)}},set(o){try{let a=o.body;if(a==null)return r("set requires a body (card object or array of cards)");let u=Array.isArray(a)?a:[a];for(let f of u){if(typeof f.id!="string")return r("each card must have a string `id` field");e.writeCard(f.id,f);}return t({count:u.length})}catch(a){return n(a)}},del(o){try{let a=o.body?.ids??[],u=o.params?.id,f=u?[...a,u]:a;if(f.length===0)return r("del requires body.ids (string[]) or params.id");for(let C of f)e.removeCard(C);return t({count:f.length})}catch(a){return n(a)}},patch(o){try{let a=o.params?.id,u=o.params?.path;if(!a)return r("patch requires params.id");if(!u)return r("patch requires params.path");let f=o.body,C=f&&Object.prototype.hasOwnProperty.call(f,"value")?f.value:o.body;return e.patchCard(a,u,C),t({count:1})}catch(a){return n(a)}},appendFiles(o){try{let a=o.params?.id;if(!a)return r("appendFiles requires params.id");let u=e.readCard(a);if(!u)return r(`card "${a}" not found`);let f=s(o.body);if(!f||f.length===0)return r("appendFiles requires a file metadata object, array, or body.files array");let C=u.card_data&&typeof u.card_data=="object"&&!Array.isArray(u.card_data)?u.card_data:{},I=Array.isArray(C.files)?C.files:[],F=[...I,...f],G=f.map((k,R)=>({idx:I.length+R,entry:k})),$=this.patch({params:{id:a,path:"card_data.files"},body:{value:F}});return $.status!=="success"?$:t({files_added:G})}catch(a){return n(a)}}}}function q(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function x(e){return {status:"fail",error:e}}function D(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function yr(e){let t=new TextEncoder().encode(e),r=Array.from(t,n=>String.fromCharCode(n)).join("");return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Pt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),s=Uint8Array.from(n,o=>o.charCodeAt(0));return new TextDecoder().decode(s)}function Ge(e){try{let t=JSON.parse(Pt(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function Sr(e){return yr(JSON.stringify(e))}function Ft(e){try{let t=JSON.parse(Pt(e));return typeof t?.cbk=="string"&&typeof t?.cid=="string"&&typeof t?.b=="string"&&typeof t?.d=="string"?t:null}catch{return null}}function Y(){return new Date().toISOString()}function fn(e,t){let r=t.onWarn??(()=>{}),n=re(e);function s(g){if(g.length!==0)try{let i=t.publishBoardChangeNotifications?.(g);i&&typeof i.catch=="function"&&i.catch(y=>r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${y instanceof Error?y.message:String(y)}`));}catch(i){r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${i instanceof Error?i.message:String(i)}`);}}function o(){let g=u().readCardStoreRef();if(!g)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let i=t.kvStorageForRef(g);return {readIndex(){return i.read("_index")},writeIndex(y){i.write("_index",y);},readCard(y){return i.read(y)},writeCard(y,v){return i.write(y,v),t.hashFn(v)},removeCard(y){i.delete(y);},cardExists(y){return i.read(y)!==null},defaultCardKey(y){return y}}}let a={readValues(g){let i=t.kvStorage("state-snapshot"),y=i.listKeys().sort();if(y.length===0)return {version:null,values:{}};let v={};for(let N of y)v[N]=i.read(N);return {version:t.hashFn(v),values:v}},writeValues(g,i,y){let v=t.kvStorage("state-snapshot");for(let N of y)v.delete(N);for(let[N,L]of Object.entries(i))v.write(N,L);return t.hashFn(i)}},u=()=>ze(t.kvStorage("config")),f=()=>_t(a),C=()=>xt(t.journalAdapter()),I=()=>Je(o(),r),F=()=>{let g=u().readOutputsStoreRef();if(!g)throw new Error(`Board at ${e.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return It(t.kvStorageForRef(g))},G=()=>{let g=u().readArchiveStoreRef();return g?t.archiveFactoryForRef(g):t.archiveFactory()};function $(){return !!f().readSnapshot(e.value).values[ye]}function k(){let g=f().readSnapshot(e.value);if(!g.values[ye])throw new Error(`Board not initialized at ${e.value}`);return qt(g.values)}function R(g,i){let y=f().commitSnapshot(e.value,{schemaVersion:Pe,expectedVersion:i,commitId:t.genId(),committedAt:Y(),deleteKeys:[],shallowMerge:jt(g)});if(!y.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${i??"null"} current=${y.currentVersion??"null"}`)}function P(g){C().appendEvent(g);}async function K(){let g=(S,T)=>{let B=S.payload,ue=(B?.enrichedCard??{}).id??B?.cardId??"unknown";P({type:"task-failed",taskName:ue,error:T,timestamp:Y()});},i=Et(t.kvStorage("execution-requests"),g),y=At(t.kvStorage("card-runtime")),v=Fe(t.blobStorage("sources"),S=>t.resolveBlob(S)),N=new Map,L={readRuntime(S){return N.get(S)??y.readRuntime(S)},writeRuntime(S,T){N.set(S,T);}},Z=[],M=new Map,te={readSourceData(S,T){let B=`${S}/${T}`;return M.has(B)?M.get(B):v.readSourceData(S,T)},ingestSourceDataStaged(S,T,B,le){v.ingestSourceDataStaged(S,T,B,le);},commitSourceData(S,T,B){let le=`${S}/.staged/${B}/${T}`,_e=t.blobStorage("sources").read(le);if(_e==null)return false;let be=`${S}/${T}`,Ze=_e.trim();try{M.set(be,JSON.parse(Ze));}catch{M.set(be,Ze);}return Z.push({cardId:S,outputFile:T,deliveryToken:B}),true},hasSource(S,T){let B=`${S}/${T}`;return M.has(B)?true:v.hasSource(S,T)},listSources(S){let T=v.listSources(S),B=new Set;for(let ue of M.keys())ue.startsWith(`${S}/`)&&B.add(ue.slice(`${S}/`.length));let le=new Set([...T,...B]);return Array.from(le)}},W={cardStore:I(),cardRuntimeStore:L,fetchedSourcesStore:te,outputStore:F(),executionRequestStore:i},me=k(),he=Ne(me.graph),{events:Se,newCursor:Ce}=C().readEntriesAfterCursor(me.lastDrainedJournalId),ke=[],Ve=[],Be=[],Ke=new Map,Xe=new Set,$t=(S,T)=>{ke.push({type:"task-completed",taskName:S,data:T,timestamp:Y()});try{G().stream("exec-history").append({taskName:S,status:"completed",completedAt:Y()});}catch{}},We=(S,T)=>{P({type:"task-failed",taskName:S,error:T,timestamp:Y()});try{G().stream("exec-history").append({taskName:S,status:"failed",error:T,completedAt:Y()});}catch{}},Te=gt(he,{handlers:{"card-handler":Ot(e,Ce,W,$t,We,(S,T)=>{Ve.push({cardId:S,values:T});},S=>{Be.push(S);})},onNodeRemoved:S=>{Ke.delete(S),N.delete(S),Xe.add(S);}});for(ke=Se;ke.length>0;){let S=ke;ke=[];for(let T of S)if(T.type==="task-restart"){let B=W.cardStore.readCard(T.taskName);B&&Ke.set(T.taskName,B);}Te.pushAll(S),await Te.waitForHandlers();}let Qe=Te.getState();await Te.dispose({wait:true});let Gt=f().readSnapshot(e.value).version;R({lastDrainedJournalId:Ce,graph:we(Qe)},Gt);for(let{cardId:S,values:T}of Ve)W.outputStore.writeComputedValues(S,T);for(let S of Be)W.outputStore.writeDataObjects(S);for(let[S,T]of N)y.writeRuntime(S,T);for(let{cardId:S,outputFile:T,deliveryToken:B}of Z)v.commitSourceData(S,T,B);let Ae;try{Ae=$e(n,Qe),W.outputStore.writeStatusSnapshot(Ae);}catch(S){r(`[board-live-cards-public] status publish failed: ${S instanceof Error?S.message:String(S)}`);}let Re=[];for(let{cardId:S,values:T}of Ve)Re.push({kind:"computed_values",cardId:S,values:T});for(let S of Be)for(let[T,B]of Object.entries(S))T&&Re.push({kind:"data_object",key:T,payload:B});for(let[S,T]of Ke)Re.push({kind:"card_refreshed",cardId:S,card:T});for(let S of Xe)Re.push({kind:"card_removed",cardId:S});Ae!==void 0&&Re.push({kind:"status",status:Ae}),s(Re);let Lt=u().readTaskExecutorRef()??{howToRun:"built-in",whatToRun:re({kind:"built-in",value:"source-cli-task-executor"})};i.dispatchEntriesForJournalId(Ce,S=>{if(S.taskKind!=="source-fetch"){r(`[process-accumulated-events] unknown taskKind "${S.taskKind}" \u2014 skipping`);return}let T=S.payload,B=T.enrichedCard?.id??"unknown",le=T.enrichedCard?.source_defs??[];for(let ue of le){if(!ue.outputFile){r(`[dispatch] source "${ue.bindTo}" has no outputFile \u2014 skipping`);continue}let _e=Sr({cbk:T.callbackToken,rg:e.value,br:re(e),cid:B,b:ue.bindTo,d:ue.outputFile,cs:void 0,rqt:T.rqt});t.dispatchExecution(Lt,{source_def:ue,base_ref:re(e),callback:{token:_e,via:t.selfRef}}).catch(be=>We(B,be instanceof Error?be.message:String(be)));}});}async function H(){try{let g=()=>{let y=k(),{events:v}=C().readEntriesAfterCursor(y.lastDrainedJournalId);v.length<=0||(H(),t.requestProcessAccumulated?.());},i=await et(t.lock,K,g);return q({ran:i!==!1})}catch(g){return D(g)}}function m(){H(),t.requestProcessAccumulated?.();}function A(g){try{let i=g.params?.cardStoreRef;if(!i)return x("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(!$()){let W=qe(Ye);R({lastDrainedJournalId:"",graph:we(W)},null);}let y=g.params?.outputsStoreRef;if(!y)return x("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let v=g.params?.scratchStoreRef,N=g.params?.archiveStoreRef,L=g.params?.chatStoreRef,Z=g.params?.artifactsStoreRef,M=u();M.writeCardStoreRef(i),M.writeOutputsStoreRef(y),v&&M.writeScratchStoreRef(v),N&&M.writeArchiveStoreRef(N),L&&M.writeChatStoreRef(L),Z&&M.writeArtifactsStoreRef(Z);let te=g.body??{};te["task-executor-ref"]&&M.writeTaskExecutorRef(te["task-executor-ref"]),Object.prototype.hasOwnProperty.call(te,"chat-handler-flow")&&M.writeChatHandlerFlow(te["chat-handler-flow"]);try{F().writeStatusSnapshot($e(n,Ne(k().graph)));}catch{}return q()}catch(i){return D(i)}}function p(g){try{let i=F().readStatusSnapshot();if(!i){i=$e(n,Ne(k().graph));try{F().writeStatusSnapshot(i);}catch{}}return q(i)}catch(i){return D(i)}}function d(g){try{let i=g.params?.id;if(!i)return x("removeCard requires params.id");try{t.kvStorage("card-upsert").delete(i);}catch{}return P({type:"task-removal",taskName:i,timestamp:Y()}),m(),q()}catch(i){return D(i)}}function c(g){try{let i=g.params?.cardId;if(!i)return x("addCardFiles requires params.cardId");let y=Dt(I()).appendFiles({params:{id:i},body:g.body});if(y.status!=="success")return y;let v=l({params:{cardId:i}});return v.status!=="success"?v:q({cardId:i,files_added:y.data.files_added,notified:!0})}catch(i){return D(i)}}function l(g){try{let i=g.params?.cardId;if(!i)return x("cardRefreshedNotify requires params.cardId");let y=I().readCard(i);return y?(s([{kind:"card_refreshed",cardId:i,card:y}]),q({cardId:i,notified:!0})):x(`Card "${i}" not found in board at ${e.value}`)}catch(i){return D(i)}}function h(g){try{let i=g.params?.id;return i?(P({type:"task-restart",taskName:i,timestamp:Y()}),m(),q()):x("retrigger requires params.id")}catch(i){return D(i)}}async function b(g){return H()}function w(g){try{let i=g.params?.cardId,y=g.params?.all,v=!!g.params?.restart;if(!i&&!y)return x("upsertCard requires --card-id <id> or --all");let N=y?I().readAllCards().map(L=>L.id):[i];for(let L of N)if(!I().readCard(L))return x(`Card "${L}" not found in board at ${e.value}`);for(let L of N){let Z=I().readCard(L),M=Nt(Z),te=t.hashFn(M),W=t.kvStorage("card-upsert"),me=W.read(L),he=me?.taskConfigHash!==te;if(!(!he&&!v)){if(he){let Se=me?.blobRef??I().readCardKey(L)??L;P({type:"task-upsert",taskName:L,taskConfig:M,timestamp:Y()}),W.write(L,{blobRef:Se,taskConfigHash:te,updatedAt:Y()});}v&&P({type:"task-restart",taskName:L,timestamp:Y()});}}return m(),q()}catch(i){return D(i)}}function O(g){try{let i=g.params?.token;if(!i)return x("taskFailed requires params.token");let y=g.params?.error??"unknown error",v=Ge(i);if(!v)return x("Invalid callback token");P({type:"task-failed",taskName:v.taskName,error:y,timestamp:Y()});try{G().stream("exec-history").append({taskName:v.taskName,status:"failed",error:y,completedAt:Y()});}catch{}return m(),q()}catch(i){return D(i)}}function j(g){try{let i=g.params?.token;if(!i)return x("taskProgress requires params.token");let v=(g.body??{}).update??{},N=Ge(i);return N?(P({type:"task-progress",taskName:N.taskName,update:v,timestamp:Y()}),m(),q()):x("Invalid callback token")}catch(i){return D(i)}}function J(g){try{let i=g.params?.token,y=g.params?.ref;if(!i)return x("sourceDataFetched requires params.token");if(!y)return x("sourceDataFetched requires params.ref");let v=Ft(i);if(!v)return x("Invalid source token");let{cbk:N,cid:L,b:Z,d:M,cs:te,rqt:W}=v,me=Fe(t.blobStorage("sources"),ke=>t.resolveBlob(ke)),he=t.genId();me.ingestSourceDataStaged(L,M,Oe(y),he);let Se=Ge(N);if(!Se)return x("Invalid callback token embedded in source token");let Ce=Y();return P({type:"task-progress",taskName:Se.taskName,update:{bindTo:Z,outputFile:M,fetchedAt:Ce,deliveryToken:he,sourceChecksum:te,rqt:W},timestamp:Ce}),m(),q()}catch(i){return D(i)}}function z(g){try{let i=g.params?.token,y=g.params?.reason??"unknown";if(!i)return x("sourceDataFetchFailure requires params.token");let v=Ft(i);if(!v)return x("Invalid source token");let{cbk:N,b:L,d:Z,cs:M,rqt:te}=v,W=Ge(N);return W?(P({type:"task-progress",taskName:W.taskName,update:{bindTo:L,outputFile:Z,failure:!0,reason:y,sourceChecksum:M,rqt:te},timestamp:Y()}),m(),q()):x("Invalid callback token embedded in source token")}catch(i){return D(i)}}function Q(g){try{let i=u().readCardStoreRef();return i?q({storeRef:i}):x(`Board at ${e.value} has no card store configured`)}catch(i){return D(i)}}function oe(g){try{let i=u().readOutputsStoreRef();return i?q({storeRef:i}):x(`Board at ${e.value} has no outputs store configured`)}catch(i){return D(i)}}function E(g){try{let i=u().readScratchStoreRef();return q({storeRef:i})}catch(i){return D(i)}}function _(g){try{let i=u().readArchiveStoreRef();return q({storeRef:i})}catch(i){return D(i)}}function V(g){try{let i=u().readChatStoreRef();return q({storeRef:i})}catch(i){return D(i)}}function U(g){try{let i=u().readArtifactsStoreRef();return q({storeRef:i})}catch(i){return D(i)}}function ee(g){try{let i=g.params?.key;if(!i)return x("getConfig requires params.key");let y=u(),v;switch(i){case "task-executor":v=y.readTaskExecutorRef()??null;break;case "chat-handler-flow":v=y.readChatHandlerFlow()??null;break;case "card-store-ref":v=y.readCardStoreRef();break;case "outputs-store-ref":v=y.readOutputsStoreRef();break;case "scratch-store-ref":v=y.readScratchStoreRef();break;case "archive-store-ref":v=y.readArchiveStoreRef();break;case "chat-store-ref":v=y.readChatStoreRef();break;case "artifacts-store-ref":v=y.readArtifactsStoreRef();break;default:return x(`getConfig: unknown key "${i}"`)}return q({value:v})}catch(i){return D(i)}}function ae(g){try{let i=g.params?.key;if(!i)return x("getOutputsDataObject requires params.key");let y=F().readDataObject(i);return q(y)}catch(i){return D(i)}}function Le(g){try{return q(F().readAllDataObjects())}catch(i){return D(i)}}function X(g){try{let i=g.params?.key;if(!i)return x("getOutputsComputedValues requires params.key");let y=F().readComputedValues(i);return q(y)}catch(i){return D(i)}}function se(g){try{return q(F().readAllComputedValues())}catch(i){return D(i)}}function ie(){return Fe(t.blobStorage("sources"),g=>t.resolveBlob(g))}function de(g){let i=t.blobStorage("sources").keyRef?.(g);return i?re(i):g}function ve(g){try{let i=g.params?.key;if(!i)return x("getOutputsFetchedSources requires params.key");let y=ie().listSources(i),v={};for(let N of y)v[N]=de(`${i}/${N}`);return q(v)}catch(i){return D(i)}}function ce(g){try{let i=ie(),y=new Set;for(let N of t.blobStorage("sources").listKeys()){let L=N.indexOf("/");L>0&&!N.includes("/.staged/")&&y.add(N.slice(0,L));}let v={};for(let N of y){let L=i.listSources(N);if(L.length>0){v[N]={};for(let Z of L)v[N][Z]=de(`${N}/${Z}`);}}return q(v)}catch(i){return D(i)}}return {init:A,status:p,getCardStoreRef:Q,getOutputsStoreRef:oe,getScratchStoreRef:E,getArchiveStoreRef:_,getChatStoreRef:V,getArtifactsStoreRef:U,getConfig:ee,getOutputsDataObject:ae,getAllOutputsDataObjects:Le,getOutputsComputedValues:X,getAllOutputsComputedValues:se,getOutputsFetchedSources:ve,getAllOutputsFetchedSources:ce,removeCard:d,addCardFiles:c,cardRefreshedNotify:l,retrigger:h,processAccumulatedEvents:b,upsertCard:w,taskFailed:O,taskProgress:j,sourceDataFetched:J,sourceDataFetchFailure:z}}function pn(e,t){let r=()=>ze(t.kvStorage("config"));function n(){let p=r().readCardStoreRef();if(!p)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let d=t.kvStorageForRef(p);return {readIndex(){return d.read("_index")},writeIndex(c){d.write("_index",c);},readCard(c){return d.read(c)},writeCard(c,l){return d.write(c,l),t.hashFn(l)},removeCard(c){d.delete(c);},cardExists(c){return d.read(c)!==null},defaultCardKey(c){return c}}}let s=()=>Je(n(),t.onWarn??(()=>{})),o=()=>{let p=r().readScratchStoreRef();return p?t.scratchStorageForRef(p):t.scratchStorage()};function a(p,d){let c=t.validateSchema(d),l=[],h=r().readTaskExecutorRef();if(h&&Array.isArray(d.source_defs))for(let w of d.source_defs){let O=typeof w.bindTo=="string"?w.bindTo:"(unknown)";try{let j;try{j=t.invokeExecutorSync(h,"validate-source-def",[],{timeout:t.executorTimeouts?.validationMs??1e4,input:JSON.stringify(w)});}catch(z){let Q=z;if(j=typeof Q?.stdout=="string"?Q.stdout:"",!j.trim()){l.push(`source "${O}": executor validate-source-def failed \u2014 ${z instanceof Error?z.message:String(z)}`);continue}}let J=JSON.parse(j.trim());if(!J.ok&&Array.isArray(J.errors))for(let z of J.errors)l.push(`source "${O}": ${z}`);}catch(j){l.push(`source "${O}": executor validate-source-def failed \u2014 ${j instanceof Error?j.message:String(j)}`);}}let b=[...c.errors,...l];return q({cardId:p,isValid:b.length===0,issues:b})}function u(p,d){let c=r().readTaskExecutorRef();if(!c)throw new Error("No task-executor registered for this board");let l=typeof p.bindTo=="string"?p.bindTo:"source",h=o(),b={...p,boardDir:e.value,_projections:d},w=h.create(JSON.stringify(b,null,2),`probe-in-${l}`,".json"),O=h.getUniqueKey(`probe-out-${l}`,".json"),j=h.getUniqueKey(`probe-err-${l}`,".txt"),J=re(h.keyRef(w)),z=re(h.keyRef(O)),Q=re(h.keyRef(j)),oe=null;try{if(t.invokeExecutorSync(c,"run-source-fetch",["--in-ref",J,"--out-ref",z,"--err-ref",Q],{timeout:p.timeout??t.executorTimeouts?.probeMs??6e4}),oe=h.read(O),oe===null)throw new Error("Executor produced no output file")}catch(E){let _=h.read(j)?.trim()??(E instanceof Error?E.message:String(E));throw new Error(`Probe failed: ${_}`)}finally{try{h.remove(w);}catch{}try{h.remove(j);}catch{}}return {bindTo:l,result:oe}}function f(p,d,c){let l;try{l=u(p,d);}catch(h){return x(h instanceof Error?h.message:String(h))}if(c){let h=Oe(c);t.absoluteBlob.write(h.value,l.result);}return q({bindTo:l.bindTo,resultSizeBytes:l.result.length})}function C(p,d){let c=p.params?.sourceIdx,l=p.params?.outRef;if(c===void 0)return x(`${d} requires params.sourceIdx`);if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return x(`${d} requires card JSON object in body`);let h=p.body,b=h["card-content"]??h,w=h["mock-projections"]??{},O=b.source_defs??[];if(c<0||c>=O.length)return x(`sourceIdx ${c} out of range (card has ${O.length} source(s))`);let j=O[c],J=typeof j.bindTo=="string"?j.bindTo:"source";return {src:j,bindTo:J,outRef:l,mockProjections:w}}function I(p){try{let d=p.params?.cardId,c=p.params?.all;if(!d&&!c)return x("validateCard requires --card-id <id> or --all");let l=c?s().readAllCards().map(b=>b.id):[d],h=[];for(let b of l){let w=s().readCard(b);if(!w){h.push({cardId:b,isValid:!1,issues:[`Card "${b}" not found`]});continue}let O=a(b,w);if(O.status!=="success")return O;h.push(O.data);}return q(h)}catch(d){return D(d)}}function F(p){try{if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return x("validateCardPreflight requires card JSON object in body");let d=p.body,c=d["card-content"]??d,l=typeof c.id=="string"?c.id:"(unknown)";return a(l,c)}catch(d){return D(d)}}function G(p){try{let d=p.params?.cardId,c=p.params?.sourceIdx,l=p.params?.outRef;if(!d)return x("probeSource requires params.cardId");if(c===void 0)return x("probeSource requires params.sourceIdx");let b=(p.body??{})["mock-projections"]??{},w=s().readCard(d);if(!w)return x(`Card "${d}" not found`);let O=w.source_defs??[];return c<0||c>=O.length?x(`sourceIdx ${c} out of range (card has ${O.length} source(s))`):f(O[c],b,l)}catch(d){return D(d)}}function $(p){try{let d=p.params?.outRef,c=p.body;if(!c)return x('probeTmpSource requires body with "source-def" and "mock-projections"');let l=c["source-def"],h=c["mock-projections"]??{};return l?f(l,h,d):x('probeTmpSource body requires "source-def"')}catch(d){return D(d)}}function k(p){try{let d=C(p,"probeSourcePreflight");if("status"in d)return d;let c=r().readTaskExecutorRef();if(!c)return x("No task-executor registered for this board");try{let l={...d.src,_projections:d.mockProjections},h=t.invokeExecutorSync(c,"probe-source-preflight",[],{timeout:d.src.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(l)}),b=JSON.parse(h.trim());return b.ok?q({bindTo:d.bindTo,reachable:b.reachable,latencyMs:b.latencyMs,note:b.note}):x(b.error??"Preflight probe failed")}catch{return x("Executor does not support probe-source-preflight")}}catch(d){return D(d)}}function R(p){try{let d=C(p,"runSourcePreflight");if("status"in d)return d;try{let c=u(d.src,d.mockProjections);if(d.outRef){let h=Oe(d.outRef);t.absoluteBlob.write(h.value,c.result);}let l=c.result;try{l=JSON.parse(c.result);}catch{}return q({bindTo:c.bindTo,ok:!0,result:l,issues:[]})}catch(c){let l=c instanceof Error?c.message:String(c);return l==="No task-executor registered for this board"?x(l):q({bindTo:d.bindTo,ok:!1,result:null,issues:[l]})}}catch(d){return D(d)}}function P(p){try{let d=r().readTaskExecutorRef();if(!d)return x("No task-executor registered for this board");let c=t.invokeExecutorSync(d,"describe-capabilities",[],{timeout:t.executorTimeouts?.describeMs??1e4});return q(JSON.parse(c.trim()))}catch(d){return D(d)}}function K(p){try{let d=p.body;if(!d||!Array.isArray(d.ops))return x("updatesInCardStore requires body.ops array");let c=d.ops,l=s();for(let h of c){let b=h.op,w=h.id;if(!w)return x('op is missing "id"');if(b==="update"){let O=h["card-content"];if(!O)return x(`update op for "${w}" is missing "card-content"`);l.writeCard(w,O);}else return x(`Unknown op type: "${b??"(none)"}"`)}return q()}catch(d){return D(d)}}function H(p){try{let d=p.body;if(!d||!Array.isArray(d.ids))return x("readFromCardStore requires body.ids array");let c=d.ids,l=s(),h=c.map(b=>({id:b,"card-content":l.readCard(b)}));return q({cards:h})}catch(d){return D(d)}}function m(p){try{if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return x("evalCardCompute requires a JSON object in body");let d=p.body,c=d["card-content"]??d,l=typeof c.id=="string"?c.id:"(unknown)",h=d["mock-fetched-sources"]??{},b=d["mock-requires"]??{},w=c.compute;if(!w||!Array.isArray(w)||w.length===0)return q({cardId:l,ok:!0,computed_values:{},errors:[]});let O={id:l,card_data:c.card_data??{},requires:b,source_defs:c.source_defs,compute:w},j=ge.runSync(O,{sourcesData:h}),J=j.node.computed_values??{},z=j.errors??[];return q({cardId:l,ok:z.length===0,computed_values:J,errors:z})}catch(d){return D(d)}}function A(p){try{if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return x("simulateCardCycle requires a JSON object in body");let d=p.body,c=d["card-content"]??d,l=typeof c.id=="string"?c.id:"(unknown)",h=d["mock-fetched-sources"]??{},b=d["mock-requires"]??{},w=a(l,c),O=w.status==="success"?{isValid:w.data.isValid,issues:w.data.issues}:{isValid:!1,issues:[w.status==="fail"?w.error:"internal error"]},j=c.source_defs??[],J=c.card_data??{},z=[],Q=[];if(j.length>0){z=ge.enrichSourcesSync(j,{card_data:J,requires:b});for(let X of z){let se=X.projections,ie=X._projections;if(se&&ie){for(let de of Object.keys(se))if(ie[de]===void 0){let ve=typeof X.bindTo=="string"?X.bindTo:"(unknown)";Q.push({bindTo:ve,key:de,error:`Projection "${de}" resolved to undefined`});}}}}let oe=[],E={...h},_=d["task-executor-ref"],V=(_?.howToRun&&_?.whatToRun?_:void 0)??r().readTaskExecutorRef();for(let X=0;X<z.length;X++){let se=z[X],ie=typeof se.bindTo=="string"?se.bindTo:`source_${X}`;if(!V){oe.push({bindTo:ie,skipped:!0,error:"No task executor configured"});continue}try{let de={...se},ve=t.invokeExecutorSync(V,"run-source-preflight",[],{timeout:se.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(de)}),ce=JSON.parse(ve.trim());ce.ok&&!Object.prototype.hasOwnProperty.call(h,ie)&&Object.prototype.hasOwnProperty.call(ce,"resultValue")&&(E[ie]=ce.resultValue),oe.push({bindTo:ie,reachable:ce.reachable,latencyMs:ce.latencyMs,error:ce.ok?void 0:ce.error});}catch{oe.push({bindTo:ie,skipped:!0,error:"Executor does not support run-source-preflight"});}}let U=c.compute,ee={},ae=[];if(U&&Array.isArray(U)&&U.length>0){let X={id:l,card_data:J,requires:b,source_defs:c.source_defs,compute:U},se=ge.runSync(X,{sourcesData:E});ee=se.node.computed_values??{},ae=se.errors??[];}let Le=O.isValid&&Q.length===0&&ae.length===0&&oe.every(X=>X.reachable!==!1);return q({cardId:l,ok:Le,validation:O,source_probes:oe,projection_errors:Q,fetched_sources:E,computed_values:ee,compute_errors:ae})}catch(d){return D(d)}}return {validateCard:I,validateCardPreflight:F,probeSource:G,probeTmpSource:$,probeSourcePreflight:k,runSourcePreflight:R,evalCardCompute:m,simulateCardCycle:A,describeTaskExecutorCapabilities:P,updatesInCardStore:K,readFromCardStore:H}}
|
|
2
|
-
exports.BOARD_GRAPH_KEY=ye;exports.EMPTY_CONFIG=Ye;exports.SNAPSHOT_SCHEMA_VERSION_V1=Pe;exports.createBoardLiveCardsNonCorePublic=pn;exports.createBoardLiveCardsPublic=fn;//# sourceMappingURL=board-live-cards-public.cjs.map
|
|
1
|
+
'use strict';var chunkOEFTOO47_cjs=require('./chunk-OEFTOO47.cjs');require('./chunk-U2N6MCD5.cjs'),require('./chunk-SFVO2LB2.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-IXZG74EW.cjs'),require('./chunk-NMZ6XNLB.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-YMEIPKLW.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"BOARD_GRAPH_KEY",{enumerable:true,get:function(){return chunkOEFTOO47_cjs.n}});Object.defineProperty(exports,"EMPTY_CONFIG",{enumerable:true,get:function(){return chunkOEFTOO47_cjs.u}});Object.defineProperty(exports,"SNAPSHOT_SCHEMA_VERSION_V1",{enumerable:true,get:function(){return chunkOEFTOO47_cjs.m}});Object.defineProperty(exports,"createBoardLiveCardsNonCorePublic",{enumerable:true,get:function(){return chunkOEFTOO47_cjs.z}});Object.defineProperty(exports,"createBoardLiveCardsPublic",{enumerable:true,get:function(){return chunkOEFTOO47_cjs.y}});//# sourceMappingURL=board-live-cards-public.cjs.map
|
|
3
2
|
//# sourceMappingURL=board-live-cards-public.cjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import './storage-interface-
|
|
1
|
+
import './storage-interface-BFiD3kyB.cjs';
|
|
2
|
+
export { m as BOARD_GRAPH_KEY, c as BoardChangeNotification, n as BoardLiveCardsNonCorePublic, d as BoardLiveCardsPublic, e as BoardNonCorePlatformAdapter, f as BoardPlatformAdapter, a as CommandInput, C as CommandResult, E as EMPTY_CONFIG, r as SNAPSHOT_SCHEMA_VERSION_V1, s as createBoardLiveCardsNonCorePublic, t as createBoardLiveCardsPublic } from './board-live-cards-public-wkNmBIRC.cjs';
|
|
2
3
|
import './execution-refs.cjs';
|
|
3
|
-
export { f as BOARD_GRAPH_KEY, B as BoardChangeNotification, g as BoardLiveCardsNonCorePublic, c as BoardLiveCardsPublic, d as BoardNonCorePlatformAdapter, e as BoardPlatformAdapter, a as CommandInput, C as CommandResult, E as EMPTY_CONFIG, S as SNAPSHOT_SCHEMA_VERSION_V1, h as createBoardLiveCardsNonCorePublic, i as createBoardLiveCardsPublic } from './board-live-cards-public-B13InXhC.cjs';
|
|
4
4
|
import './types-BBhqYGhE.cjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import './storage-interface-
|
|
1
|
+
import './storage-interface-BFiD3kyB.js';
|
|
2
|
+
export { m as BOARD_GRAPH_KEY, c as BoardChangeNotification, n as BoardLiveCardsNonCorePublic, d as BoardLiveCardsPublic, e as BoardNonCorePlatformAdapter, f as BoardPlatformAdapter, a as CommandInput, C as CommandResult, E as EMPTY_CONFIG, r as SNAPSHOT_SCHEMA_VERSION_V1, s as createBoardLiveCardsNonCorePublic, t as createBoardLiveCardsPublic } from './board-live-cards-public-BMUIPOrc.js';
|
|
2
3
|
import './execution-refs.js';
|
|
3
|
-
export { f as BOARD_GRAPH_KEY, B as BoardChangeNotification, g as BoardLiveCardsNonCorePublic, c as BoardLiveCardsPublic, d as BoardNonCorePlatformAdapter, e as BoardPlatformAdapter, a as CommandInput, C as CommandResult, E as EMPTY_CONFIG, S as SNAPSHOT_SCHEMA_VERSION_V1, h as createBoardLiveCardsNonCorePublic, i as createBoardLiveCardsPublic } from './board-live-cards-public-BGS22cMb.js';
|
|
4
4
|
import './types-BBhqYGhE.js';
|