yaml-flow 8.0.4 → 8.1.0
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/browser/board-livecards-client.js +1 -1
- package/browser/board-livecards-localstorage.js +6 -6
- package/browser/live-cards.js +19 -17
- package/cli/node/board-live-cards-cli.js +1 -1
- package/cli/node/fs-board-adapter.js +1 -1
- package/examples/board/demo-shell-with-server.html +2 -2
- package/examples/board/test/demo-http-test.js +1 -1
- package/examples/board-local/demo-shell-localstorage.html +72 -3
- package/lib/board-live-cards-node.cjs +1 -1
- package/lib/board-live-cards-node.js +1 -1
- package/lib/board-live-cards-public.cjs +1 -1
- package/lib/board-live-cards-public.js +1 -1
- package/lib/board-live-cards-server-runtime.cjs +5 -5
- package/lib/board-live-cards-server-runtime.js +5 -5
- package/lib/board-livegraph-runtime/index.cjs +2 -2
- package/lib/board-livegraph-runtime/index.d.cts +21 -1
- package/lib/board-livegraph-runtime/index.d.ts +21 -1
- package/lib/board-livegraph-runtime/index.js +2 -2
- package/lib/index.cjs +7 -7
- package/lib/index.js +7 -7
- package/lib/server-runtime/index.cjs +5 -5
- package/lib/server-runtime/index.js +5 -5
- package/package.json +1 -1
|
@@ -27,6 +27,16 @@ interface BoardLiveGraphRuntimeOptions {
|
|
|
27
27
|
graphSettings?: Partial<GraphConfig['settings']>;
|
|
28
28
|
executionId?: string;
|
|
29
29
|
}
|
|
30
|
+
interface CardChatMessage {
|
|
31
|
+
role: string;
|
|
32
|
+
text: string;
|
|
33
|
+
files?: unknown[];
|
|
34
|
+
}
|
|
35
|
+
interface CardChatState {
|
|
36
|
+
messages: CardChatMessage[];
|
|
37
|
+
receiving: boolean;
|
|
38
|
+
processing?: boolean;
|
|
39
|
+
}
|
|
30
40
|
interface LiveCardRuntimeModel {
|
|
31
41
|
id: string;
|
|
32
42
|
card: LiveCard;
|
|
@@ -34,6 +44,7 @@ interface LiveCardRuntimeModel {
|
|
|
34
44
|
requires: Record<string, unknown>;
|
|
35
45
|
computed_values: Record<string, unknown>;
|
|
36
46
|
runtime_state: Record<string, unknown>;
|
|
47
|
+
card_chats?: CardChatState | null;
|
|
37
48
|
}
|
|
38
49
|
interface BoardRuntimeView {
|
|
39
50
|
id?: string;
|
|
@@ -104,6 +115,15 @@ interface BoardRuntimeArtifactsPayload {
|
|
|
104
115
|
cardDefinitions: LiveCard[];
|
|
105
116
|
cardRuntimeById?: Record<string, CardRuntimeArtifact>;
|
|
106
117
|
dataObjectsByToken?: Record<string, unknown>;
|
|
118
|
+
cardChatsByCardId?: Record<string, {
|
|
119
|
+
messages: Array<{
|
|
120
|
+
role: string;
|
|
121
|
+
text: string;
|
|
122
|
+
files?: unknown[];
|
|
123
|
+
}>;
|
|
124
|
+
receiving?: boolean;
|
|
125
|
+
processing?: boolean;
|
|
126
|
+
}>;
|
|
107
127
|
statusSnapshot?: {
|
|
108
128
|
cards?: Array<{
|
|
109
129
|
name: string;
|
|
@@ -142,4 +162,4 @@ interface BuildBrowserArtifactsOptions {
|
|
|
142
162
|
*/
|
|
143
163
|
declare function buildBrowserArtifactsFromRuntime({ boardPath, cardDefinitions, runtimeModels, graphState, }: BuildBrowserArtifactsOptions): BoardRuntimeArtifactsPayload;
|
|
144
164
|
|
|
145
|
-
export { type BoardLiveGraphRuntime, type BoardLiveGraphRuntimeOptions, type BoardLiveGraphRuntimeUpdate, type BoardRuntimeArtifactsPayload, type BoardRuntimeView, type BoardTaskExecutor, type BoardTaskExecutorContext, type BrowserSourceAdapter, type BrowserSourceAdapterContext, type BuildBrowserArtifactsOptions, type CardRuntimeArtifact, type LiveCardRuntimeModel, LocalStorageService, buildBrowserArtifactsFromRuntime, createBoardLiveGraphRuntime, selectAllLiveCardModels, selectLiveCardModel };
|
|
165
|
+
export { type BoardLiveGraphRuntime, type BoardLiveGraphRuntimeOptions, type BoardLiveGraphRuntimeUpdate, type BoardRuntimeArtifactsPayload, type BoardRuntimeView, type BoardTaskExecutor, type BoardTaskExecutorContext, type BrowserSourceAdapter, type BrowserSourceAdapterContext, type BuildBrowserArtifactsOptions, type CardChatMessage, type CardChatState, type CardRuntimeArtifact, type LiveCardRuntimeModel, LocalStorageService, buildBrowserArtifactsFromRuntime, createBoardLiveGraphRuntime, selectAllLiveCardModels, selectLiveCardModel };
|
|
@@ -27,6 +27,16 @@ interface BoardLiveGraphRuntimeOptions {
|
|
|
27
27
|
graphSettings?: Partial<GraphConfig['settings']>;
|
|
28
28
|
executionId?: string;
|
|
29
29
|
}
|
|
30
|
+
interface CardChatMessage {
|
|
31
|
+
role: string;
|
|
32
|
+
text: string;
|
|
33
|
+
files?: unknown[];
|
|
34
|
+
}
|
|
35
|
+
interface CardChatState {
|
|
36
|
+
messages: CardChatMessage[];
|
|
37
|
+
receiving: boolean;
|
|
38
|
+
processing?: boolean;
|
|
39
|
+
}
|
|
30
40
|
interface LiveCardRuntimeModel {
|
|
31
41
|
id: string;
|
|
32
42
|
card: LiveCard;
|
|
@@ -34,6 +44,7 @@ interface LiveCardRuntimeModel {
|
|
|
34
44
|
requires: Record<string, unknown>;
|
|
35
45
|
computed_values: Record<string, unknown>;
|
|
36
46
|
runtime_state: Record<string, unknown>;
|
|
47
|
+
card_chats?: CardChatState | null;
|
|
37
48
|
}
|
|
38
49
|
interface BoardRuntimeView {
|
|
39
50
|
id?: string;
|
|
@@ -104,6 +115,15 @@ interface BoardRuntimeArtifactsPayload {
|
|
|
104
115
|
cardDefinitions: LiveCard[];
|
|
105
116
|
cardRuntimeById?: Record<string, CardRuntimeArtifact>;
|
|
106
117
|
dataObjectsByToken?: Record<string, unknown>;
|
|
118
|
+
cardChatsByCardId?: Record<string, {
|
|
119
|
+
messages: Array<{
|
|
120
|
+
role: string;
|
|
121
|
+
text: string;
|
|
122
|
+
files?: unknown[];
|
|
123
|
+
}>;
|
|
124
|
+
receiving?: boolean;
|
|
125
|
+
processing?: boolean;
|
|
126
|
+
}>;
|
|
107
127
|
statusSnapshot?: {
|
|
108
128
|
cards?: Array<{
|
|
109
129
|
name: string;
|
|
@@ -142,4 +162,4 @@ interface BuildBrowserArtifactsOptions {
|
|
|
142
162
|
*/
|
|
143
163
|
declare function buildBrowserArtifactsFromRuntime({ boardPath, cardDefinitions, runtimeModels, graphState, }: BuildBrowserArtifactsOptions): BoardRuntimeArtifactsPayload;
|
|
144
164
|
|
|
145
|
-
export { type BoardLiveGraphRuntime, type BoardLiveGraphRuntimeOptions, type BoardLiveGraphRuntimeUpdate, type BoardRuntimeArtifactsPayload, type BoardRuntimeView, type BoardTaskExecutor, type BoardTaskExecutorContext, type BrowserSourceAdapter, type BrowserSourceAdapterContext, type BuildBrowserArtifactsOptions, type CardRuntimeArtifact, type LiveCardRuntimeModel, LocalStorageService, buildBrowserArtifactsFromRuntime, createBoardLiveGraphRuntime, selectAllLiveCardModels, selectLiveCardModel };
|
|
165
|
+
export { type BoardLiveGraphRuntime, type BoardLiveGraphRuntimeOptions, type BoardLiveGraphRuntimeUpdate, type BoardRuntimeArtifactsPayload, type BoardRuntimeView, type BoardTaskExecutor, type BoardTaskExecutorContext, type BrowserSourceAdapter, type BrowserSourceAdapterContext, type BuildBrowserArtifactsOptions, type CardChatMessage, type CardChatState, type CardRuntimeArtifact, type LiveCardRuntimeModel, LocalStorageService, buildBrowserArtifactsFromRuntime, createBoardLiveGraphRuntime, selectAllLiveCardModels, selectLiveCardModel };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {createRequire}from'module';import'ajv-formats';import'child_process';var be=createRequire(import.meta.url);be("./jsonata-sync.cjs");var Te=createRequire(import.meta.url),j=Te("./jsonata-sync.cjs"),re=j;function te(e,t){if(!t||!e)return;let n=t.split("."),r=e;for(let s=0;s<n.length;s++){if(r==null)return;r=r[n[s]];}return r}function se(e,t,n){let r=t.split("."),s=e;for(let o=0;o<r.length-1;o++)(s[r[o]]==null||typeof s[r[o]]!="object")&&(s[r[o]]={}),s=s[r[o]];s[r[r.length-1]]=n;}async function Se(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let n=e.requires??{},r={card_data:e.card_data,requires:n,expects_data:n,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let s of e.compute)try{let o=await j(s.expr).evaluate(r);se(e.computed_values,s.bindTo,o),r.computed_values=e.computed_values;}catch{}return e}function we(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 n=e.requires??{},r={card_data:e.card_data,requires:n,expects_data:n,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values},s=[];for(let o of e.compute)try{let i=re(o.expr).evaluate(r);se(e.computed_values,o.bindTo,i),r.computed_values=e.computed_values;}catch(i){let d=i instanceof Error?i.message:String(i);s.push({bindTo:o.bindTo,error:d});}return s.length>0?{ok:true,node:e,errors:s}:{ok:true,node:e}}async function Ce(e,t,n){let r={...n??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return j(e).evaluate(r)}function _e(e,t){return t.startsWith("fetched_sources.")?te(e._sourcesData??{},t.slice(16)):te(e,t)}var ne=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),xe=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function Ae(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:false,errors:["Node must be a non-null object"]};let n=e;(typeof n.id!="string"||!n.id)&&t.push("id: required, must be a non-empty string");for(let r of Object.keys(n))xe.has(r)||t.push(`Unknown top-level key: "${r}"`);if((n.card_data==null||typeof n.card_data!="object"||Array.isArray(n.card_data))&&t.push("card_data: required, must be an object"),n.meta!=null)if(typeof n.meta!="object"||Array.isArray(n.meta))t.push("meta: must be an object");else {let r=n.meta;r.title!=null&&typeof r.title!="string"&&t.push("meta.title: must be a string"),r.tags!=null&&!Array.isArray(r.tags)&&t.push("meta.tags: must be an array");}if(n.requires!=null&&!Array.isArray(n.requires)&&t.push("requires: must be an array of strings"),n.provides!=null&&(Array.isArray(n.provides)?n.provides.forEach((r,s)=>{if(!r||typeof r!="object"||Array.isArray(r))t.push(`provides[${s}]: must be an object with bindTo and ref`);else {let o=r;(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")),n.compute!=null&&(Array.isArray(n.compute)?n.compute.forEach((r,s)=>{if(!r||typeof r!="object"||Array.isArray(r))t.push(`compute[${s}]: must be a compute step object`);else {let o=r;(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")),n.source_defs!=null)if(!Array.isArray(n.source_defs))t.push("source_defs: must be an array");else {let r=new Set,s=new Set;n.source_defs.forEach((o,i)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${i}]: must be an object`);else {let d=o;typeof d.bindTo!="string"||!d.bindTo?t.push(`source_defs[${i}]: missing required "bindTo" property`):(r.has(d.bindTo)&&t.push(`source_defs[${i}]: bindTo "${d.bindTo}" is not unique across source_defs`),r.add(d.bindTo)),typeof d.outputFile!="string"||!d.outputFile?t.push(`source_defs[${i}]: missing required "outputFile" property`):(s.has(d.outputFile)&&t.push(`source_defs[${i}]: outputFile "${d.outputFile}" is not unique across source_defs`),s.add(d.outputFile)),d.optionalForCompletionGating!=null&&typeof d.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${i}]: optionalForCompletionGating must be a boolean`);}});}if(n.view!=null)if(typeof n.view!="object"||Array.isArray(n.view))t.push("view: must be an object");else {let r=n.view;!Array.isArray(r.elements)||r.elements.length===0?t.push("view.elements: required, must be a non-empty array"):r.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`):ne.has(s.kind)||t.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...ne].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&t.push(`view.elements[${o}].data: must be an object`);}),r.layout!=null&&(typeof r.layout!="object"||Array.isArray(r.layout))&&t.push("view.layout: must be an object"),r.features!=null&&(typeof r.features!="object"||Array.isArray(r.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function Ee(e,t){if(!e||e.length===0)return [];let n={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(e.map(async r=>{let s={};if(r.projections&&typeof r.projections=="object"&&!Array.isArray(r.projections)){for(let[o,i]of Object.entries(r.projections))if(typeof i=="string"&&i.trim().length>0)try{s[o]=await j(i).evaluate(n);}catch{s[o]=void 0;}}return {...r,_projections:s}}))}function Oe(e,t){if(!e||e.length===0)return [];let n={card_data:t.card_data??{},requires:t.requires??{}};return e.map(r=>{let s={};if(r.projections&&typeof r.projections=="object"&&!Array.isArray(r.projections)){for(let[o,i]of Object.entries(r.projections))if(typeof i=="string"&&i.trim().length>0)try{s[o]=re(i).evaluate(n);}catch{s[o]=void 0;}}return {...r,_projections:s}})}var D={run:Se,runSync:we,eval:Ce,resolve:_e,validate:Ae,enrichSources:Ee,enrichSourcesSync:Oe};var G={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function E(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function N(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function H(e){return e.tasks??{}}function P(e){return e?e.status===G.FAILED||e.status===G.INACTIVATED:false}function oe(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ae(e){return e.maxExecutions}function ie(e,t){let n=new Set;for(let[r,s]of Object.entries(t))if(s.status===G.COMPLETED){let o=e.tasks[r];o&&E(o).forEach(d=>n.add(d));}return Array.from(n)}function ce(e,t){let n={};return e.forEach(r=>{let s=t[r];if(!s)return;E(s).forEach(i=>{n[i]||(n[i]=[]),n[i].push(r);});}),n}function de(e,t,n){let r=e.tasks[t]??q(),s={};if(n){let i=n.tasks[t],d=N(i);for(let p of d)for(let[R,w]of Object.entries(n.tasks))if(E(w).includes(p)){let T=e.tasks[R];T?.lastDataHash&&(s[p]=T.lastDataHash);break}}let o={...r,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 ue(e,t,n,r,s,o){let i=e.tasks[n]??q(),d=t.tasks[n];if(!d)throw new Error(`Task "${n}" not found in graph`);let p;r&&d.on&&d.on[r]?p=d.on[r]:p=E(d);let R=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let f=d.requires??[];for(let m of f)for(let[v,b]of Object.entries(t.tasks))if(E(b).includes(m)){let k=e.tasks[v];k?.lastDataHash&&(R[m]=k.lastDataHash);break}}let w={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:R,error:void 0},T=[...new Set([...e.availableOutputs,...p])];return {...e,tasks:{...e.tasks,[n]:w},availableOutputs:T,lastUpdated:new Date().toISOString()}}function pe(e,t,n,r){let s=e.tasks[n]??q(),o=t.tasks[n];if(o?.retry){let p=s.retryCount+1;if(p<=o.retry.max_attempts){let R={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:r};return {...e,tasks:{...e.tasks,[n]:R},lastUpdated:new Date().toISOString()}}}let i={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:r,executionCount:s.executionCount+1},d=e.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(d=[...new Set([...e.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&i.executionCount>=o.circuit_breaker.max_executions){let p=o.circuit_breaker.on_break;d=[...new Set([...d,...p])];}return {...e,tasks:{...e.tasks,[n]:i},availableOutputs:d,lastUpdated:new Date().toISOString()}}function fe(e,t,n,r){let s=e.tasks[t]??q(),o={...s,progress:typeof r=="number"?r:s.progress,messages:[...s.messages??[],...n?[{message:n,timestamp:new Date().toISOString(),status:s.status}]:[]],lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function le(e,t){let n=e.tasks[t];if(!n)return e;let r={...n,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]:r},lastUpdated:new Date().toISOString()}}function q(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function B(e,t){let n=t??`live-${Date.now()}`,r={};for(let o of Object.keys(e.tasks))r[o]=me();let s={status:"running",tasks:r,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:n,executionConfig:{executionMode:e.settings.execution_mode??"eligibility-mode",conflictStrategy:e.settings.conflict_strategy??"alphabetical",completionStrategy:e.settings.completion}};return {config:e,state:s}}function ge(e,t){let{config:n,state:r}=e;if("executionId"in t&&t.executionId&&t.executionId!==r.executionId)return e;switch(t.type){case "task-started":return {config:n,state:de(r,t.taskName,n)};case "task-completed":return {config:n,state:ue(r,n,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:n,state:pe(r,n,t.taskName,t.error)};case "task-progress":return {config:n,state:fe(r,t.taskName,t.message,t.progress)};case "task-restart":return {config:n,state:le(r,t.taskName)};case "inject-tokens":return {config:n,state:{...r,availableOutputs:[...new Set([...r.availableOutputs,...t.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:n,state:Ge(r,t.action)};case "task-upsert":return K(e,t.taskName,t.taskConfig);case "task-removal":return V(e,t.taskName);case "node-requires-add":return W(e,t.nodeName,t.tokens);case "node-requires-remove":return J(e,t.nodeName,t.tokens);case "node-provides-add":return X(e,t.nodeName,t.tokens);case "node-provides-remove":return Y(e,t.nodeName,t.tokens);default:return e}}function M(e,t){return t.reduce((n,r)=>ge(n,r),e)}function K(e,t,n){let r=!!e.config.tasks[t];return {config:{...e.config,tasks:{...e.config.tasks,[t]:n}},state:{...e.state,tasks:{...e.state.tasks,[t]:r?e.state.tasks[t]:me()},lastUpdated:new Date().toISOString()}}}function V(e,t){if(!e.config.tasks[t])return e;let{[t]:n,...r}=e.config.tasks,{[t]:s,...o}=e.state.tasks;return {config:{...e.config,tasks:r},state:{...e.state,tasks:o,lastUpdated:new Date().toISOString()}}}function W(e,t,n){let r=e.config.tasks[t];if(!r)return e;let s=N(r),o=n.filter(i=>!s.includes(i));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...r,requires:[...s,...o]}}},state:e.state}}function J(e,t,n){let r=e.config.tasks[t];if(!r)return e;let s=N(r),o=s.filter(i=>!n.includes(i));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...r,requires:o}}},state:e.state}}function X(e,t,n){let r=e.config.tasks[t];if(!r)return e;let s=E(r),o=n.filter(i=>!s.includes(i));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...r,provides:[...s,...o]}}},state:e.state}}function Y(e,t,n){let r=e.config.tasks[t];if(!r)return e;let s=E(r),o=s.filter(i=>!n.includes(i));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...r,provides:o}}},state:e.state}}function z(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function me(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Ge(e,t){let n=new Date().toISOString();switch(t){case "stop":return {...e,status:"stopped",lastUpdated:n};case "pause":return {...e,status:"paused",lastUpdated:n};case "resume":return {...e,status:"running",lastUpdated:n};default:return e}}function F(e){let{config:t,state:n}=e,r=H(t);if(Object.keys(r).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=Ne(r),i=ie(t,n.tasks),d=new Set([...i,...n.availableOutputs]),p=[],R=[],w=[],T=[];for(let[m,v]of Object.entries(r)){let b=n.tasks[m],k=oe(v,t.settings),O=k!=="once";if(b?.status===G.RUNNING||P(b))continue;let c=ae(v);if(c!==void 0&&b&&b.executionCount>=c||v.circuit_breaker&&b&&b.executionCount>=v.circuit_breaker.max_executions||!O&&b?.status===G.COMPLETED)continue;if(O&&b?.status===G.COMPLETED){let u=N(v),g=false;switch(k){case "data-changed":{u.length>0&&u.some(C=>{for(let[_,x]of Object.entries(r))if(E(x).includes(C)){let S=n.tasks[_];if(!S)continue;let ve=b.lastConsumedHashes?.[C];return S.lastDataHash==null?S.executionCount>b.lastEpoch:S.lastDataHash!==ve}return false})||(g=true);break}case "epoch-changed":{u.length>0&&u.some(C=>{for(let[_,x]of Object.entries(r))if(E(x).includes(C)){let S=n.tasks[_];if(S&&S.executionCount>b.lastEpoch)return true}return false})||(g=true);break}case "time-based":{let A=v.refreshInterval??0;if(A<=0){g=true;break}let C=b.completedAt;if(!C){g=true;break}(Date.now()-Date.parse(C))/1e3<A&&(g=true);break}case "manual":g=true;break}if(g)continue}let a=N(v);if(a.length===0){p.push(m);continue}let h=[],l=[],y=[];for(let u of a){if(d.has(u))continue;let g=o[u]||[];g.length===0?h.push(u):g.every(C=>P(n.tasks[C]))?y.push({token:u,failedProducer:g[0]}):l.push(u);}h.length>0?w.push({taskName:m,missingTokens:h}):y.length>0?T.push({taskName:m,failedTokens:y.map(u=>u.token),failedProducers:[...new Set(y.map(u=>u.failedProducer))]}):l.length>0?R.push({taskName:m,waitingOn:l}):p.push(m);}let f={};if(p.length>1){let m=ce(p,r);for(let[v,b]of Object.entries(m))b.length>1&&(f[v]=b);}return {eligible:p,pending:R,unresolved:w,blocked:T,conflicts:f}}function Ne(e){let t={};for(let[n,r]of Object.entries(e)){for(let s of E(r))t[s]||(t[s]=[]),t[s].push(n);if(r.on)for(let s of Object.values(r.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(n)||t[o].push(n);if(r.on_failure)for(let s of r.on_failure)t[s]||(t[s]=[]),t[s].includes(n)||t[s].push(n);}return t}var I=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function U(e){let t=Q(e);return Le(t)}function Q(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(Q).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(r=>JSON.stringify(r)+":"+Q(t[r])).join(",")+"}"}function Le(e){let t=0xcbf29ce484222325n,n=0x100000001b3n,r=0xffffffffffffffffn;for(let s=0;s<e.length;s++)t^=BigInt(e.charCodeAt(s)),t=t*n&r;return t.toString(16).padStart(16,"0")}function Ie(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),n="";for(let r of t)n+=String.fromCharCode(r);return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function je(e){if(typeof Buffer<"u")return Buffer.from(e,"base64url").toString("utf8");if(typeof atob=="function"){let t=e.replace(/-/g,"+").replace(/_/g,"/"),n=t+"=".repeat((4-t.length%4)%4),r=atob(n),s=new Uint8Array(r.length);for(let o=0;o<r.length;o++)s[o]=r.charCodeAt(o);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function ke(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Ie(t)}function De(e){try{let t=JSON.parse(je(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function $(e,t,n){let{handlers:r,onDrain:s}=t,o=new I,i="state"in e&&"config"in e?e:B(e,n),d=false,p=new Set,R=new Map(Object.entries(r)),w=new I,T=false,f=false;function m(){if(!d){if(T){f=true;return}T=true;try{do f=!1,v();while(f)}finally{T=false;}}}function v(){let c=w.drain(),a=o.drain(),h=[...c,...a];h.length>0&&(i=M(i,h));let l=F(i);h.length>0&&s?.(h,i,l);for(let y of l.eligible)O(y);for(let y of h)if(y.type==="task-progress"){let{taskName:u,update:g}=y;if(!i.config.tasks[u])continue;let C=i.state.tasks[u];if(!C||C.status!=="running")continue;let _=ke(u),x=k(u,_,g).catch(S=>{d||(w.append({type:"task-failed",taskName:u,error:S.message??String(S),timestamp:new Date().toISOString()}),m());}).finally(()=>{p.delete(x);});p.add(x);}}function b(c){let h=i.config.tasks[c].requires??[],l=new Map;for(let[u,g]of Object.entries(i.config.tasks))for(let A of g.provides??[])l.set(A,u);let y={};for(let u of h){let g=l.get(u);g?y[u]=i.state.tasks[g]?.data:y[u]=void 0;}return y}async function k(c,a,h){let l=i.config.tasks[c],y=l.taskHandlers??[],u=b(c);for(let g of y){let A=R.get(g);if(!A)throw new Error(`Handler '${g}' not found in registry (task '${c}')`);let C={nodeId:c,state:u,taskState:i.state.tasks[c],config:l,callbackToken:a,update:h};if(await A(C)==="task-initiate-failure")throw new Error(`Handler '${g}' returned task-initiate-failure (task '${c}')`)}}function O(c){let h=i.config.tasks[c]?.taskHandlers;if(!h||h.length===0)return;w.append({type:"task-started",taskName:c,timestamp:new Date().toISOString()}),m();let l=ke(c),y=k(c,l).catch(u=>{d||(w.append({type:"task-failed",taskName:c,error:u.message??String(u),timestamp:new Date().toISOString()}),m());}).finally(()=>{p.delete(y);});p.add(y);}return {push(c){d||(c.type==="task-completed"&&c.data&&!c.dataHash&&(c={...c,dataHash:U(c.data)}),o.append(c),m());},pushAll(c){if(!d){for(let a of c)a.type==="task-completed"&&a.data&&!a.dataHash?o.append({...a,dataHash:U(a.data)}):o.append(a);m();}},resolveCallback(c,a,h){if(d)return;let l=De(c);if(!l)return;let{taskName:y}=l;if(i.config.tasks[y]){if(h&&h.length>0)o.append({type:"task-failed",taskName:y,error:h.join("; "),timestamp:new Date().toISOString()});else {let u=a&&Object.keys(a).length>0?U(a):void 0;o.append({type:"task-completed",taskName:y,data:a,dataHash:u,timestamp:new Date().toISOString()});}m();}},addNode(c,a){d||(o.append({type:"task-upsert",taskName:c,taskConfig:a,timestamp:new Date().toISOString()}),m());},removeNode(c){d||(o.append({type:"task-removal",taskName:c,timestamp:new Date().toISOString()}),m());},addRequires(c,a){d||(o.append({type:"node-requires-add",nodeName:c,tokens:a,timestamp:new Date().toISOString()}),m());},removeRequires(c,a){d||(o.append({type:"node-requires-remove",nodeName:c,tokens:a,timestamp:new Date().toISOString()}),m());},addProvides(c,a){d||(o.append({type:"node-provides-add",nodeName:c,tokens:a,timestamp:new Date().toISOString()}),m());},removeProvides(c,a){d||(o.append({type:"node-provides-remove",nodeName:c,tokens:a,timestamp:new Date().toISOString()}),m());},registerHandler(c,a){R.set(c,a);},unregisterHandler(c){R.delete(c);},retrigger(c){d||i.config.tasks[c]&&(o.append({type:"task-restart",taskName:c,timestamp:new Date().toISOString()}),m());},retriggerAll(c){if(!d){for(let a of c)i.config.tasks[a]&&o.append({type:"task-restart",taskName:a,timestamp:new Date().toISOString()});m();}},snapshot(){return z(i)},getState(){return i},getSchedule(){return F(i)},async waitForHandlers(){p.size>0&&await Promise.allSettled([...p]);},async dispose(c){c?.wait&&p.size>0&&await Promise.allSettled([...p]),d=true;}}}function L(e){return JSON.parse(JSON.stringify(e))}function Z(e){let t=e.provides&&e.provides.length>0?e.provides.map(n=>n.bindTo):[e.id];return {requires:e.requires&&e.requires.length>0?[...e.requires]:void 0,provides:t,taskHandlers:[e.id],description:e.meta?.title??e.id}}function Ue(e){let t=new Map;for(let[n,r]of e.entries()){let s=r.provides&&r.provides.length>0?r.provides:[{bindTo:n,ref:"card_data"}];for(let o of s)t.set(o.bindTo,n);}return t}function ee(e,t){let n=Ue(e),r=e.get(t);if(r){for(let s of r.requires??[])if(!n.has(s))throw new Error(`Card "${t}" requires token "${s}" but no card provides it`)}}var ln={CARD_PREFIX:"yf:cards:",RUNTIME_OUT_PREFIX:"yf:runtime-out:cards:",STATUS_KEY:"yf:runtime-out:status",writeCard(e,t){try{localStorage.setItem(this.CARD_PREFIX+e,JSON.stringify(t));}catch(n){console.warn(`Failed to write card ${e} to localStorage:`,n);}},readCard(e){try{let t=localStorage.getItem(this.CARD_PREFIX+e);return t?JSON.parse(t):null}catch(t){return console.warn(`Failed to read card ${e} from localStorage:`,t),null}},readAllCards(e){let t={};for(let n of e){let r=this.readCard(n);r&&(t[n]=r);}return t},writeComputedArtifact(e){if(!(!e||!e.card_id))try{localStorage.setItem(this.RUNTIME_OUT_PREFIX+String(e.card_id),JSON.stringify(e));}catch(t){console.warn(`Failed to write computed artifact ${e.card_id}:`,t);}},readComputedArtifact(e){try{let t=localStorage.getItem(this.RUNTIME_OUT_PREFIX+e);return t?JSON.parse(t):null}catch(t){return console.warn(`Failed to read computed artifact ${e}:`,t),null}},readAllComputedArtifacts(e){let t={};for(let n of e){let r=this.readComputedArtifact(n);r&&(t[n]=r);}return t},writeStatusSnapshot(e){try{localStorage.setItem(this.STATUS_KEY,JSON.stringify(e));}catch(t){console.warn("Failed to write status snapshot to localStorage:",t);}},readStatusSnapshot(){try{let e=localStorage.getItem(this.STATUS_KEY);return e?JSON.parse(e):null}catch(e){return console.warn("Failed to read status snapshot from localStorage:",e),null}},clear(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&(n.startsWith(this.CARD_PREFIX)||n.startsWith(this.RUNTIME_OUT_PREFIX)||n===this.STATUS_KEY)&&e.push(n);}for(let t of e)localStorage.removeItem(t);}};function gn(e,t={}){let n=Array.isArray(e)?{}:{id:e.id,title:e.title,mode:e.mode,positions:e.positions,settings:e.settings},r=Array.isArray(e)?e:e.nodes,s=new Map;for(let a of r){if(s.has(a.id))throw new Error(`Duplicate card ID: "${a.id}"`);s.set(a.id,L(a));}let o=new Set,i=t.taskExecutor,d=t.sourceAdapters??{},p=t.defaultSourceAdapter,R=null,w=(a,h)=>{let l={events:a,graph:h,nodes:O()};for(let y of o)y(l);},T=a=>async h=>{let l=s.get(a);if(!l)return "task-initiate-failure";let y={};for(let _ of l.requires??[]){let x=h.state[_];if(!x||typeof x!="object")continue;let S=x.provides_data;!S||typeof S!="object"||Object.prototype.hasOwnProperty.call(S,_)&&(y[_]=S[_]);}let u={};if(l.source_defs&&l.source_defs.length>0){let _=d[a]??p,x=i?await i({card:l,input:h}):_?await _({card:l,input:h}):void 0;if(x&&typeof x=="object")for(let S of l.source_defs)Object.prototype.hasOwnProperty.call(x,S.bindTo)?u[S.bindTo]=x[S.bindTo]:l.source_defs.length===1&&(u[S.bindTo]=x);}let g={id:l.id,card_data:L(l.card_data??{}),requires:y,source_defs:l.source_defs,compute:l.compute};g._sourcesData=u,g.compute&&g.compute.length>0&&await D.run(g,{sourcesData:u});let A={};if(l.provides&&l.provides.length>0)for(let{bindTo:_,ref:x}of l.provides)A[_]=D.resolve(g,x);else A[l.id]={...g.card_data??{},...g.computed_values??{},...g._sourcesData??{}};let C={provides_data:A,card_data:g.card_data??{},computed_values:g.computed_values??{},fetched_sources:u,requires:y};return R?.resolveCallback(h.callbackToken,C),"task-initiated"},f={},m={};for(let[a,h]of s.entries())ee(s,a),f[a]=Z(h),m[a]=T(a);let v={id:n.id??`browser-board-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n.settings??{},...t.graphSettings??{}},tasks:f},b=t.reactiveOptions?.onDrain,k=$(v,{...t.reactiveOptions??{},handlers:m,onDrain:(a,h,l)=>{b?.(a,h,l),w(a,h);}},t.executionId);R=k;function O(){let a=k.getState(),h=[];for(let[l,y]of s.entries()){let u=a.state.tasks[l]?.data,g=a.state.tasks[l],A={...y.card_data??{},...u&&typeof u.card_data=="object"?u.card_data:{}},C=g?.status==="running"?"loading":g?.status,_={...A,...C?{status:C}:{},...g?.lastUpdated?{lastRun:g.lastUpdated}:{},...g?.status==="failed"&&g.error?{error:g.error}:{}};h.push({id:l,card:L(y),card_data:_,requires:u&&typeof u.requires=="object"?L(u.requires):{},computed_values:u&&typeof u.computed_values=="object"?L(u.computed_values):{},runtime_state:g?L(g):{}});}return h}return {getGraph:()=>k,getState:()=>k.getState(),getSchedule:()=>k.getSchedule(),getNodes:()=>O(),getBoard:()=>({...n,nodes:O()}),subscribe(a){return o.add(a),a({events:[],graph:k.getState(),nodes:O()}),()=>o.delete(a)},addCard(a){if(s.has(a.id))throw new Error(`Card "${a.id}" already exists`);s.set(a.id,L(a)),ee(s,a.id),k.registerHandler(a.id,T(a.id)),k.addNode(a.id,Z(a));},upsertCard(a){s.set(a.id,L(a)),ee(s,a.id),k.registerHandler(a.id,T(a.id)),k.addNode(a.id,Z(a));},removeCard(a){s.delete(a),k.unregisterHandler(a),k.removeNode(a);},patchCardState(a,h){let l=s.get(a);if(!l)throw new Error(`Card "${a}" not found`);l.card_data={...l.card_data??{},...h},k.retrigger(a);},retrigger(a){k.retrigger(a);},retriggerAll(){k.retriggerAll(Array.from(s.keys()));},push(a){k.push(a);},pushAll(a){k.pushAll(a);},dispose(){o.clear(),k.dispose();}}}function he(e){return e==="running"||e==="in-progress"?"loading":e==="failed"?"error":"fresh"}function $e(e){return e==="loading"?"in-progress":e==="error"?"failed":e==="stale"?"pending":e==="fresh"?"completed":"pending"}function Be(e,t){let n=t&&typeof t=="object"&&!Array.isArray(t)?t:{};return {schema_version:n.schema_version||"v1",card_id:typeof n.card_id=="string"?n.card_id:e,card_data:n.card_data&&typeof n.card_data=="object"&&!Array.isArray(n.card_data)?structuredClone(n.card_data):{},computed_values:n.computed_values&&typeof n.computed_values=="object"&&!Array.isArray(n.computed_values)?structuredClone(n.computed_values):{}}}function Ke(e,t){if(!e||typeof e!="object")throw new Error("payload must be an object");if(!t)throw new Error("cardId is required");let r=(Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).find(k=>k.id===t);if(!r)throw new Error(`cardDefinitions has no entry with id ${t}`);let s=e.statusSnapshot&&typeof e.statusSnapshot=="object"?e.statusSnapshot:{},o=e.cardRuntimeById&&typeof e.cardRuntimeById=="object"?e.cardRuntimeById:{},i=e.dataObjectsByToken&&typeof e.dataObjectsByToken=="object"?e.dataObjectsByToken:{},p=(Array.isArray(s.cards)?s.cards:[]).find(k=>k.name===t),R=structuredClone(r),w=Be(t,o[t]),f={...R.card_data&&typeof R.card_data=="object"&&!Array.isArray(R.card_data)?R.card_data:{},...w.card_data||{},status:he(p?.status),lastRun:p?.runtime?.last_transition_at??null};p?.error?.message&&(f.error=p.error.message);let m=p?{task_status:p.status??null,card_status:he(p.status),runtime:structuredClone(p.runtime??{}),error:p.error?structuredClone(p.error):null,blocked_by:Array.isArray(p.blocked_by)?structuredClone(p.blocked_by):[],requires_missing:Array.isArray(p.requires_missing)?structuredClone(p.requires_missing):[]}:{task_status:null,card_status:f.status??"fresh",runtime:{last_transition_at:f.lastRun??null},error:f.error?{message:f.error}:null,blocked_by:[],requires_missing:[]},v=Array.isArray(R.requires)?R.requires:[],b={};for(let[k,O]of Object.entries(i))b[k]=structuredClone(O);for(let k of v)Object.prototype.hasOwnProperty.call(b,k)||(b[k]=null);return {id:t,card:R,card_data:f,requires:b,computed_values:w.computed_values,runtime_state:m}}function mn(e){if(!e||typeof e!="object")throw new Error("payload must be an object");return (Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).map(n=>Ke(e,n.id))}function kn({boardPath:e,cardDefinitions:t,runtimeModels:n,graphState:r}){let s=Array.isArray(t)?t:[],o=Array.isArray(n)?n:[],i=new Map(o.map(f=>[f.id,f])),p=r.state?.tasks??{},R={};for(let f of o)f?.id&&(R[f.id]={schema_version:"v1",card_id:f.id,card_data:structuredClone(f.card_data??{}),computed_values:structuredClone(f.computed_values??{})});let w={};for(let f of Object.keys(p)){let m=p[f]?.data?.provides_data;if(m&&typeof m=="object")for(let v of Object.keys(m))w[v]=structuredClone(m[v]);}let T=s.map(f=>{let m=i.get(f.id)??{},v=p[f.id],b=typeof v?.status=="string"?v.status:$e(m.card_data?.status),k=typeof v?.error=="string"?v.error:typeof m.card_data?.error=="string"?m.card_data.error:null;return {name:f.id,status:b,...k?{error:{message:k,code:"TASK_FAILED",at:v?.failedAt??null,source:"browser-runtime"}}:{},requires:Array.isArray(f.requires)?f.requires:[],requires_satisfied:[],requires_missing:[],provides_declared:Array.isArray(f.provides)?f.provides.map(O=>O.bindTo):[f.id],provides_runtime:Object.keys(v?.data?.provides_data??{}).sort(),blocked_by:[],unblocks:[],runtime:{attempt_count:v?.executionCount??0,restart_count:v?.retryCount??0,in_progress_since:b==="in-progress"?v?.startedAt??null:null,last_transition_at:v?.lastUpdated??m.card_data?.lastRun??null,last_completed_at:v?.completedAt??null,last_restarted_at:v?.startedAt??null,status_age_ms:null}}});return {cardDefinitions:structuredClone(s),cardRuntimeById:R,dataObjectsByToken:w,statusSnapshot:{schema_version:"v1",meta:{board:{path:e??"browser-runtime"}},summary:{card_count:T.length,completed:T.filter(f=>f.status==="completed").length,eligible:0,pending:T.filter(f=>f.status==="pending").length,blocked:0,unresolved:0,failed:T.filter(f=>f.status==="failed").length,in_progress:T.filter(f=>f.status==="in-progress").length,orphan_cards:0,topology:{edge_count:0,max_fan_out_card:null,max_fan_out:0}},cards:T}}}
|
|
2
|
-
export{
|
|
1
|
+
import {createRequire}from'module';import'ajv-formats';import'child_process';var be=createRequire(import.meta.url);be("./jsonata-sync.cjs");var Se=createRequire(import.meta.url),j=Se("./jsonata-sync.cjs"),ne=j;function te(e,t){if(!t||!e)return;let r=t.split("."),n=e;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function se(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 Te(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let s of e.compute)try{let o=await j(s.expr).evaluate(n);se(e.computed_values,s.bindTo,o),n.computed_values=e.computed_values;}catch{}return e}function we(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 i=ne(o.expr).evaluate(n);se(e.computed_values,o.bindTo,i),n.computed_values=e.computed_values;}catch(i){let d=i instanceof Error?i.message:String(i);s.push({bindTo:o.bindTo,error:d});}return s.length>0?{ok:true,node:e,errors:s}:{ok:true,node:e}}async function Ce(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return j(e).evaluate(n)}function _e(e,t){return t.startsWith("fetched_sources.")?te(e._sourcesData??{},t.slice(16)):te(e,t)}var re=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),xe=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function Ae(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))xe.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,i)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${i}]: must be an object`);else {let d=o;typeof d.bindTo!="string"||!d.bindTo?t.push(`source_defs[${i}]: missing required "bindTo" property`):(n.has(d.bindTo)&&t.push(`source_defs[${i}]: bindTo "${d.bindTo}" is not unique across source_defs`),n.add(d.bindTo)),typeof d.outputFile!="string"||!d.outputFile?t.push(`source_defs[${i}]: missing required "outputFile" property`):(s.has(d.outputFile)&&t.push(`source_defs[${i}]: outputFile "${d.outputFile}" is not unique across source_defs`),s.add(d.outputFile)),d.optionalForCompletionGating!=null&&typeof d.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${i}]: 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`):re.has(s.kind)||t.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...re].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 Ee(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,i]of Object.entries(n.projections))if(typeof i=="string"&&i.trim().length>0)try{s[o]=await j(i).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function Oe(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,i]of Object.entries(n.projections))if(typeof i=="string"&&i.trim().length>0)try{s[o]=ne(i).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var D={run:Te,runSync:we,eval:Ce,resolve:_e,validate:Ae,enrichSources:Ee,enrichSourcesSync:Oe};var G={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function O(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function N(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function H(e){return e.tasks??{}}function P(e){return e?e.status===G.FAILED||e.status===G.INACTIVATED:false}function oe(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ae(e){return e.maxExecutions}function ie(e,t){let r=new Set;for(let[n,s]of Object.entries(t))if(s.status===G.COMPLETED){let o=e.tasks[n];o&&O(o).forEach(d=>r.add(d));}return Array.from(r)}function ce(e,t){let r={};return e.forEach(n=>{let s=t[n];if(!s)return;O(s).forEach(i=>{r[i]||(r[i]=[]),r[i].push(n);});}),r}function de(e,t,r){let n=e.tasks[t]??q(),s={};if(r){let i=r.tasks[t],d=N(i);for(let p of d)for(let[R,w]of Object.entries(r.tasks))if(O(w).includes(p)){let S=e.tasks[R];S?.lastDataHash&&(s[p]=S.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 ue(e,t,r,n,s,o){let i=e.tasks[r]??q(),d=t.tasks[r];if(!d)throw new Error(`Task "${r}" not found in graph`);let p;n&&d.on&&d.on[n]?p=d.on[n]:p=O(d);let R=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let l=d.requires??[];for(let m of l)for(let[h,b]of Object.entries(t.tasks))if(O(b).includes(m)){let v=e.tasks[h];v?.lastDataHash&&(R[m]=v.lastDataHash);break}}let w={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:R,error:void 0},S=[...new Set([...e.availableOutputs,...p])];return {...e,tasks:{...e.tasks,[r]:w},availableOutputs:S,lastUpdated:new Date().toISOString()}}function pe(e,t,r,n){let s=e.tasks[r]??q(),o=t.tasks[r];if(o?.retry){let p=s.retryCount+1;if(p<=o.retry.max_attempts){let R={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:R},lastUpdated:new Date().toISOString()}}}let i={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},d=e.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(d=[...new Set([...e.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&i.executionCount>=o.circuit_breaker.max_executions){let p=o.circuit_breaker.on_break;d=[...new Set([...d,...p])];}return {...e,tasks:{...e.tasks,[r]:i},availableOutputs:d,lastUpdated:new Date().toISOString()}}function le(e,t,r,n){let s=e.tasks[t]??q(),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 fe(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 q(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function B(e,t){let r=t??`live-${Date.now()}`,n={};for(let o of Object.keys(e.tasks))n[o]=me();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 ge(e,t){let{config:r,state:n}=e;if("executionId"in t&&t.executionId&&t.executionId!==n.executionId)return e;switch(t.type){case "task-started":return {config:r,state:de(n,t.taskName,r)};case "task-completed":return {config:r,state:ue(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:pe(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:le(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:fe(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:Ge(n,t.action)};case "task-upsert":return K(e,t.taskName,t.taskConfig);case "task-removal":return V(e,t.taskName);case "node-requires-add":return W(e,t.nodeName,t.tokens);case "node-requires-remove":return J(e,t.nodeName,t.tokens);case "node-provides-add":return X(e,t.nodeName,t.tokens);case "node-provides-remove":return Y(e,t.nodeName,t.tokens);default:return e}}function M(e,t){return t.reduce((r,n)=>ge(r,n),e)}function K(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]:me()},lastUpdated:new Date().toISOString()}}}function V(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 W(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=N(n),o=r.filter(i=>!s.includes(i));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:[...s,...o]}}},state:e.state}}function J(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=N(n),o=s.filter(i=>!r.includes(i));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:o}}},state:e.state}}function X(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=r.filter(i=>!s.includes(i));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:[...s,...o]}}},state:e.state}}function Y(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=s.filter(i=>!r.includes(i));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:o}}},state:e.state}}function z(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function me(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Ge(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 F(e){let{config:t,state:r}=e,n=H(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=Ne(n),i=ie(t,r.tasks),d=new Set([...i,...r.availableOutputs]),p=[],R=[],w=[],S=[];for(let[m,h]of Object.entries(n)){let b=r.tasks[m],v=oe(h,t.settings),A=v!=="once";if(b?.status===G.RUNNING||P(b))continue;let c=ae(h);if(c!==void 0&&b&&b.executionCount>=c||h.circuit_breaker&&b&&b.executionCount>=h.circuit_breaker.max_executions||!A&&b?.status===G.COMPLETED)continue;if(A&&b?.status===G.COMPLETED){let u=N(h),g=false;switch(v){case "data-changed":{u.length>0&&u.some(C=>{for(let[_,x]of Object.entries(n))if(O(x).includes(C)){let T=r.tasks[_];if(!T)continue;let ve=b.lastConsumedHashes?.[C];return T.lastDataHash==null?T.executionCount>b.lastEpoch:T.lastDataHash!==ve}return false})||(g=true);break}case "epoch-changed":{u.length>0&&u.some(C=>{for(let[_,x]of Object.entries(n))if(O(x).includes(C)){let T=r.tasks[_];if(T&&T.executionCount>b.lastEpoch)return true}return false})||(g=true);break}case "time-based":{let E=h.refreshInterval??0;if(E<=0){g=true;break}let C=b.completedAt;if(!C){g=true;break}(Date.now()-Date.parse(C))/1e3<E&&(g=true);break}case "manual":g=true;break}if(g)continue}let a=N(h);if(a.length===0){p.push(m);continue}let k=[],f=[],y=[];for(let u of a){if(d.has(u))continue;let g=o[u]||[];g.length===0?k.push(u):g.every(C=>P(r.tasks[C]))?y.push({token:u,failedProducer:g[0]}):f.push(u);}k.length>0?w.push({taskName:m,missingTokens:k}):y.length>0?S.push({taskName:m,failedTokens:y.map(u=>u.token),failedProducers:[...new Set(y.map(u=>u.failedProducer))]}):f.length>0?R.push({taskName:m,waitingOn:f}):p.push(m);}let l={};if(p.length>1){let m=ce(p,n);for(let[h,b]of Object.entries(m))b.length>1&&(l[h]=b);}return {eligible:p,pending:R,unresolved:w,blocked:S,conflicts:l}}function Ne(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of O(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 L=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function U(e){let t=Q(e);return Ie(t)}function Q(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(Q).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+Q(t[n])).join(",")+"}"}function Ie(e){let t=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<e.length;s++)t^=BigInt(e.charCodeAt(s)),t=t*r&n;return t.toString(16).padStart(16,"0")}function Le(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),r="";for(let n of t)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function je(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 ke(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Le(t)}function De(e){try{let t=JSON.parse(je(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function $(e,t,r){let{handlers:n,onDrain:s}=t,o=new L,i="state"in e&&"config"in e?e:B(e,r),d=false,p=new Set,R=new Map(Object.entries(n)),w=new L,S=false,l=false;function m(){if(!d){if(S){l=true;return}S=true;try{do l=!1,h();while(l)}finally{S=false;}}}function h(){let c=w.drain(),a=o.drain(),k=[...c,...a];k.length>0&&(i=M(i,k));let f=F(i);k.length>0&&s?.(k,i,f);for(let y of f.eligible)A(y);for(let y of k)if(y.type==="task-progress"){let{taskName:u,update:g}=y;if(!i.config.tasks[u])continue;let C=i.state.tasks[u];if(!C||C.status!=="running")continue;let _=ke(u),x=v(u,_,g).catch(T=>{d||(w.append({type:"task-failed",taskName:u,error:T.message??String(T),timestamp:new Date().toISOString()}),m());}).finally(()=>{p.delete(x);});p.add(x);}}function b(c){let k=i.config.tasks[c].requires??[],f=new Map;for(let[u,g]of Object.entries(i.config.tasks))for(let E of g.provides??[])f.set(E,u);let y={};for(let u of k){let g=f.get(u);g?y[u]=i.state.tasks[g]?.data:y[u]=void 0;}return y}async function v(c,a,k){let f=i.config.tasks[c],y=f.taskHandlers??[],u=b(c);for(let g of y){let E=R.get(g);if(!E)throw new Error(`Handler '${g}' not found in registry (task '${c}')`);let C={nodeId:c,state:u,taskState:i.state.tasks[c],config:f,callbackToken:a,update:k};if(await E(C)==="task-initiate-failure")throw new Error(`Handler '${g}' returned task-initiate-failure (task '${c}')`)}}function A(c){let k=i.config.tasks[c]?.taskHandlers;if(!k||k.length===0)return;w.append({type:"task-started",taskName:c,timestamp:new Date().toISOString()}),m();let f=ke(c),y=v(c,f).catch(u=>{d||(w.append({type:"task-failed",taskName:c,error:u.message??String(u),timestamp:new Date().toISOString()}),m());}).finally(()=>{p.delete(y);});p.add(y);}return {push(c){d||(c.type==="task-completed"&&c.data&&!c.dataHash&&(c={...c,dataHash:U(c.data)}),o.append(c),m());},pushAll(c){if(!d){for(let a of c)a.type==="task-completed"&&a.data&&!a.dataHash?o.append({...a,dataHash:U(a.data)}):o.append(a);m();}},resolveCallback(c,a,k){if(d)return;let f=De(c);if(!f)return;let{taskName:y}=f;if(i.config.tasks[y]){if(k&&k.length>0)o.append({type:"task-failed",taskName:y,error:k.join("; "),timestamp:new Date().toISOString()});else {let u=a&&Object.keys(a).length>0?U(a):void 0;o.append({type:"task-completed",taskName:y,data:a,dataHash:u,timestamp:new Date().toISOString()});}m();}},addNode(c,a){d||(o.append({type:"task-upsert",taskName:c,taskConfig:a,timestamp:new Date().toISOString()}),m());},removeNode(c){d||(o.append({type:"task-removal",taskName:c,timestamp:new Date().toISOString()}),m());},addRequires(c,a){d||(o.append({type:"node-requires-add",nodeName:c,tokens:a,timestamp:new Date().toISOString()}),m());},removeRequires(c,a){d||(o.append({type:"node-requires-remove",nodeName:c,tokens:a,timestamp:new Date().toISOString()}),m());},addProvides(c,a){d||(o.append({type:"node-provides-add",nodeName:c,tokens:a,timestamp:new Date().toISOString()}),m());},removeProvides(c,a){d||(o.append({type:"node-provides-remove",nodeName:c,tokens:a,timestamp:new Date().toISOString()}),m());},registerHandler(c,a){R.set(c,a);},unregisterHandler(c){R.delete(c);},retrigger(c){d||i.config.tasks[c]&&(o.append({type:"task-restart",taskName:c,timestamp:new Date().toISOString()}),m());},retriggerAll(c){if(!d){for(let a of c)i.config.tasks[a]&&o.append({type:"task-restart",taskName:a,timestamp:new Date().toISOString()});m();}},snapshot(){return z(i)},getState(){return i},getSchedule(){return F(i)},async waitForHandlers(){p.size>0&&await Promise.allSettled([...p]);},async dispose(c){c?.wait&&p.size>0&&await Promise.allSettled([...p]),d=true;}}}function I(e){return JSON.parse(JSON.stringify(e))}function Z(e){let t=e.provides&&e.provides.length>0?e.provides.map(r=>r.bindTo):[e.id];return {requires:e.requires&&e.requires.length>0?[...e.requires]:void 0,provides:t,taskHandlers:[e.id],description:e.meta?.title??e.id}}function Ue(e){let t=new Map;for(let[r,n]of e.entries()){let s=n.provides&&n.provides.length>0?n.provides:[{bindTo:r,ref:"card_data"}];for(let o of s)t.set(o.bindTo,r);}return t}function ee(e,t){let r=Ue(e),n=e.get(t);if(n){for(let s of n.requires??[])if(!r.has(s))throw new Error(`Card "${t}" requires token "${s}" but no card provides it`)}}var lr={CARD_PREFIX:"yf:cards:",RUNTIME_OUT_PREFIX:"yf:runtime-out:cards:",STATUS_KEY:"yf:runtime-out:status",writeCard(e,t){try{localStorage.setItem(this.CARD_PREFIX+e,JSON.stringify(t));}catch(r){console.warn(`Failed to write card ${e} to localStorage:`,r);}},readCard(e){try{let t=localStorage.getItem(this.CARD_PREFIX+e);return t?JSON.parse(t):null}catch(t){return console.warn(`Failed to read card ${e} from localStorage:`,t),null}},readAllCards(e){let t={};for(let r of e){let n=this.readCard(r);n&&(t[r]=n);}return t},writeComputedArtifact(e){if(!(!e||!e.card_id))try{localStorage.setItem(this.RUNTIME_OUT_PREFIX+String(e.card_id),JSON.stringify(e));}catch(t){console.warn(`Failed to write computed artifact ${e.card_id}:`,t);}},readComputedArtifact(e){try{let t=localStorage.getItem(this.RUNTIME_OUT_PREFIX+e);return t?JSON.parse(t):null}catch(t){return console.warn(`Failed to read computed artifact ${e}:`,t),null}},readAllComputedArtifacts(e){let t={};for(let r of e){let n=this.readComputedArtifact(r);n&&(t[r]=n);}return t},writeStatusSnapshot(e){try{localStorage.setItem(this.STATUS_KEY,JSON.stringify(e));}catch(t){console.warn("Failed to write status snapshot to localStorage:",t);}},readStatusSnapshot(){try{let e=localStorage.getItem(this.STATUS_KEY);return e?JSON.parse(e):null}catch(e){return console.warn("Failed to read status snapshot from localStorage:",e),null}},clear(){let e=[];for(let t=0;t<localStorage.length;t++){let r=localStorage.key(t);r&&(r.startsWith(this.CARD_PREFIX)||r.startsWith(this.RUNTIME_OUT_PREFIX)||r===this.STATUS_KEY)&&e.push(r);}for(let t of e)localStorage.removeItem(t);}};function fr(e,t={}){let r=Array.isArray(e)?{}:{id:e.id,title:e.title,mode:e.mode,positions:e.positions,settings:e.settings},n=Array.isArray(e)?e:e.nodes,s=new Map;for(let a of n){if(s.has(a.id))throw new Error(`Duplicate card ID: "${a.id}"`);s.set(a.id,I(a));}let o=new Set,i=t.taskExecutor,d=t.sourceAdapters??{},p=t.defaultSourceAdapter,R=null,w=(a,k)=>{let f={events:a,graph:k,nodes:A()};for(let y of o)y(f);},S=a=>async k=>{let f=s.get(a);if(!f)return "task-initiate-failure";let y={};for(let _ of f.requires??[]){let x=k.state[_];if(!x||typeof x!="object")continue;let T=x.provides_data;!T||typeof T!="object"||Object.prototype.hasOwnProperty.call(T,_)&&(y[_]=T[_]);}let u={};if(f.source_defs&&f.source_defs.length>0){let _=d[a]??p,x=i?await i({card:f,input:k}):_?await _({card:f,input:k}):void 0;if(x&&typeof x=="object")for(let T of f.source_defs)Object.prototype.hasOwnProperty.call(x,T.bindTo)?u[T.bindTo]=x[T.bindTo]:f.source_defs.length===1&&(u[T.bindTo]=x);}let g={id:f.id,card_data:I(f.card_data??{}),requires:y,source_defs:f.source_defs,compute:f.compute};g._sourcesData=u,g.compute&&g.compute.length>0&&await D.run(g,{sourcesData:u});let E={};if(f.provides&&f.provides.length>0)for(let{bindTo:_,ref:x}of f.provides)E[_]=D.resolve(g,x);else E[f.id]={...g.card_data??{},...g.computed_values??{},...g._sourcesData??{}};let C={provides_data:E,card_data:g.card_data??{},computed_values:g.computed_values??{},fetched_sources:u,requires:y};return R?.resolveCallback(k.callbackToken,C),"task-initiated"},l={},m={};for(let[a,k]of s.entries())ee(s,a),l[a]=Z(k),m[a]=S(a);let h={id:r.id??`browser-board-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...r.settings??{},...t.graphSettings??{}},tasks:l},b=t.reactiveOptions?.onDrain,v=$(h,{...t.reactiveOptions??{},handlers:m,onDrain:(a,k,f)=>{b?.(a,k,f),w(a,k);}},t.executionId);R=v;function A(){let a=v.getState(),k=[];for(let[f,y]of s.entries()){let u=a.state.tasks[f]?.data,g=a.state.tasks[f],E={...y.card_data??{},...u&&typeof u.card_data=="object"?u.card_data:{}},C=g?.status==="running"?"loading":g?.status,_={...E,...C?{status:C}:{},...g?.lastUpdated?{lastRun:g.lastUpdated}:{},...g?.status==="failed"&&g.error?{error:g.error}:{}};k.push({id:f,card:I(y),card_data:_,requires:u&&typeof u.requires=="object"?I(u.requires):{},computed_values:u&&typeof u.computed_values=="object"?I(u.computed_values):{},runtime_state:g?I(g):{}});}return k}return {getGraph:()=>v,getState:()=>v.getState(),getSchedule:()=>v.getSchedule(),getNodes:()=>A(),getBoard:()=>({...r,nodes:A()}),subscribe(a){return o.add(a),a({events:[],graph:v.getState(),nodes:A()}),()=>o.delete(a)},addCard(a){if(s.has(a.id))throw new Error(`Card "${a.id}" already exists`);s.set(a.id,I(a)),ee(s,a.id),v.registerHandler(a.id,S(a.id)),v.addNode(a.id,Z(a));},upsertCard(a){s.set(a.id,I(a)),ee(s,a.id),v.registerHandler(a.id,S(a.id)),v.addNode(a.id,Z(a));},removeCard(a){s.delete(a),v.unregisterHandler(a),v.removeNode(a);},patchCardState(a,k){let f=s.get(a);if(!f)throw new Error(`Card "${a}" not found`);f.card_data={...f.card_data??{},...k},v.retrigger(a);},retrigger(a){v.retrigger(a);},retriggerAll(){v.retriggerAll(Array.from(s.keys()));},push(a){v.push(a);},pushAll(a){v.pushAll(a);},dispose(){o.clear(),v.dispose();}}}function he(e){return e==="running"||e==="in-progress"?"loading":e==="failed"?"error":"fresh"}function $e(e){return e==="loading"?"in-progress":e==="error"?"failed":e==="stale"?"pending":e==="fresh"?"completed":"pending"}function Be(e,t){let r=t&&typeof t=="object"&&!Array.isArray(t)?t:{};return {schema_version:r.schema_version||"v1",card_id:typeof r.card_id=="string"?r.card_id:e,card_data:r.card_data&&typeof r.card_data=="object"&&!Array.isArray(r.card_data)?structuredClone(r.card_data):{},computed_values:r.computed_values&&typeof r.computed_values=="object"&&!Array.isArray(r.computed_values)?structuredClone(r.computed_values):{}}}function Ke(e,t){if(!e||typeof e!="object")throw new Error("payload must be an object");if(!t)throw new Error("cardId is required");let n=(Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).find(a=>a.id===t);if(!n)throw new Error(`cardDefinitions has no entry with id ${t}`);let s=e.statusSnapshot&&typeof e.statusSnapshot=="object"?e.statusSnapshot:{},o=e.cardRuntimeById&&typeof e.cardRuntimeById=="object"?e.cardRuntimeById:{},i=e.dataObjectsByToken&&typeof e.dataObjectsByToken=="object"?e.dataObjectsByToken:{},p=(Array.isArray(s.cards)?s.cards:[]).find(a=>a.name===t),R=structuredClone(n),w=Be(t,o[t]),l={...R.card_data&&typeof R.card_data=="object"&&!Array.isArray(R.card_data)?R.card_data:{},...w.card_data||{},status:he(p?.status),lastRun:p?.runtime?.last_transition_at??null};p?.error?.message&&(l.error=p.error.message);let m=p?{task_status:p.status??null,card_status:he(p.status),runtime:structuredClone(p.runtime??{}),error:p.error?structuredClone(p.error):null,blocked_by:Array.isArray(p.blocked_by)?structuredClone(p.blocked_by):[],requires_missing:Array.isArray(p.requires_missing)?structuredClone(p.requires_missing):[]}:{task_status:null,card_status:l.status??"fresh",runtime:{last_transition_at:l.lastRun??null},error:l.error?{message:l.error}:null,blocked_by:[],requires_missing:[]},h=Array.isArray(R.requires)?R.requires:[],b={};for(let[a,k]of Object.entries(i))b[a]=structuredClone(k);for(let a of h)Object.prototype.hasOwnProperty.call(b,a)||(b[a]=null);let A=(e.cardChatsByCardId&&typeof e.cardChatsByCardId=="object"?e.cardChatsByCardId:{})[t],c=A?{messages:Array.isArray(A.messages)?A.messages:[],receiving:!!A.receiving,processing:!!A.processing}:null;return {id:t,card:R,card_data:l,requires:b,computed_values:w.computed_values,runtime_state:m,card_chats:c}}function gr(e){if(!e||typeof e!="object")throw new Error("payload must be an object");return (Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).map(r=>Ke(e,r.id))}function mr({boardPath:e,cardDefinitions:t,runtimeModels:r,graphState:n}){let s=Array.isArray(t)?t:[],o=Array.isArray(r)?r:[],i=new Map(o.map(l=>[l.id,l])),p=n.state?.tasks??{},R={};for(let l of o)l?.id&&(R[l.id]={schema_version:"v1",card_id:l.id,card_data:structuredClone(l.card_data??{}),computed_values:structuredClone(l.computed_values??{})});let w={};for(let l of Object.keys(p)){let m=p[l]?.data?.provides_data;if(m&&typeof m=="object")for(let h of Object.keys(m))w[h]=structuredClone(m[h]);}let S=s.map(l=>{let m=i.get(l.id)??{},h=p[l.id],b=typeof h?.status=="string"?h.status:$e(m.card_data?.status),v=typeof h?.error=="string"?h.error:typeof m.card_data?.error=="string"?m.card_data.error:null;return {name:l.id,status:b,...v?{error:{message:v,code:"TASK_FAILED",at:h?.failedAt??null,source:"browser-runtime"}}:{},requires:Array.isArray(l.requires)?l.requires:[],requires_satisfied:[],requires_missing:[],provides_declared:Array.isArray(l.provides)?l.provides.map(A=>A.bindTo):[l.id],provides_runtime:Object.keys(h?.data?.provides_data??{}).sort(),blocked_by:[],unblocks:[],runtime:{attempt_count:h?.executionCount??0,restart_count:h?.retryCount??0,in_progress_since:b==="in-progress"?h?.startedAt??null:null,last_transition_at:h?.lastUpdated??m.card_data?.lastRun??null,last_completed_at:h?.completedAt??null,last_restarted_at:h?.startedAt??null,status_age_ms:null}}});return {cardDefinitions:structuredClone(s),cardRuntimeById:R,dataObjectsByToken:w,statusSnapshot:{schema_version:"v1",meta:{board:{path:e??"browser-runtime"}},summary:{card_count:S.length,completed:S.filter(l=>l.status==="completed").length,eligible:0,pending:S.filter(l=>l.status==="pending").length,blocked:0,unresolved:0,failed:S.filter(l=>l.status==="failed").length,in_progress:S.filter(l=>l.status==="in-progress").length,orphan_cards:0,topology:{edge_count:0,max_fan_out_card:null,max_fan_out:0}},cards:S}}}
|
|
2
|
+
export{lr as LocalStorageService,mr as buildBrowserArtifactsFromRuntime,fr as createBoardLiveGraphRuntime,gr as selectAllLiveCardModels,Ke as selectLiveCardModel};//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|