yaml-flow 8.4.16 → 8.4.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/asset-integrity.json +3 -3
- package/browser/board-livecards-client.js +1 -1
- package/browser/board-livecards-localstorage.js +6 -6
- package/cli/browser-api/board-live-cards-browser-adapter.d.ts +1 -1
- package/cli/bundled/board-live-cards-cli.mjs +18 -18
- package/cli/bundled/card-store-cli.mjs +78 -78
- package/cli/bundled/chat-store-cli.mjs +10 -10
- package/cli/{types-YNCagczT.d.ts → types-juH2nFpz.d.ts} +12 -0
- package/examples/board/demo-shell-with-server.html +2 -2
- package/examples/board/doc.html +2 -2
- package/examples/board-local/demo-shell-localstorage.html +3 -3
- package/lib/artifacts-store-public.d.cts +1 -1
- package/lib/artifacts-store-public.d.ts +1 -1
- package/lib/board-live-cards-node.cjs +12 -12
- package/lib/board-live-cards-node.d.cts +4 -4
- package/lib/board-live-cards-node.d.ts +4 -4
- package/lib/board-live-cards-node.js +12 -12
- package/lib/{board-live-cards-public-CQ82CDdS.d.cts → board-live-cards-public-B4RcYPC_.d.cts} +12 -0
- package/lib/{board-live-cards-public-CtlVp0L3.d.ts → board-live-cards-public-ydXuA4zh.d.ts} +12 -0
- package/lib/board-live-cards-public.cjs +2 -2
- package/lib/board-live-cards-public.d.cts +1 -1
- package/lib/board-live-cards-public.d.ts +1 -1
- package/lib/board-live-cards-public.js +2 -2
- package/lib/board-live-cards-server-runtime.cjs +4 -4
- package/lib/board-live-cards-server-runtime.d.cts +2 -2
- package/lib/board-live-cards-server-runtime.d.ts +2 -2
- package/lib/board-live-cards-server-runtime.js +4 -4
- package/lib/board-livegraph-runtime/index.cjs +1 -1
- package/lib/board-livegraph-runtime/index.d.cts +1 -1
- package/lib/board-livegraph-runtime/index.d.ts +1 -1
- package/lib/board-livegraph-runtime/index.js +1 -1
- package/lib/card-store-public.cjs +1 -1
- package/lib/card-store-public.d.cts +12 -1
- package/lib/card-store-public.d.ts +12 -1
- package/lib/card-store-public.js +1 -1
- package/lib/chat-store-public.cjs +1 -1
- package/lib/chat-store-public.d.cts +5 -2
- package/lib/chat-store-public.d.ts +5 -2
- package/lib/chat-store-public.js +1 -1
- package/lib/continuous-event-graph/index.cjs +2 -2
- package/lib/continuous-event-graph/index.d.cts +2 -2
- package/lib/continuous-event-graph/index.d.ts +2 -2
- package/lib/continuous-event-graph/index.js +2 -2
- package/lib/index.cjs +12 -12
- package/lib/index.d.cts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +12 -12
- package/lib/{live-cards-bridge-b25aAVvE.d.cts → live-cards-bridge-Bwi-lbBT.d.cts} +2 -0
- package/lib/{live-cards-bridge-DC_ZU0eS.d.ts → live-cards-bridge-YL6AWawT.d.ts} +2 -0
- package/lib/server-runtime/index.cjs +4 -4
- package/lib/server-runtime/index.d.cts +3 -3
- package/lib/server-runtime/index.d.ts +3 -3
- package/lib/server-runtime/index.js +4 -4
- package/lib/{types-vTfV-Zkn.d.ts → types-1L1D33mr.d.ts} +1 -1
- package/lib/{types-D1R0JHIs.d.cts → types-D501gMQt.d.cts} +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var module$1=require('module');require('ajv-formats');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var lt=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));lt("./jsonata-sync.cjs");var mt=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))),L=mt("./jsonata-sync.cjs"),V=L;function H(t,e){if(!e||!t)return;let r=e.split("."),n=t;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function J(t,e,r){let n=e.split("."),s=t;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 ht(t,e){if(!t?.compute?.length)return t;t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values};for(let s of t.compute)try{let o=await L(s.expr).evaluate(n);J(t.computed_values,s.bindTo,o),n.computed_values=t.computed_values;}catch{}return t}function kt(t,e){if(!t?.compute?.length)return {ok:true,node:t};t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values},s=[];for(let o of t.compute)try{let i=V(o.expr).evaluate(n);J(t.computed_values,o.bindTo,i),n.computed_values=t.computed_values;}catch(i){let c=i instanceof Error?i.message:String(i);s.push({bindTo:o.bindTo,error:c});}return s.length>0?{ok:true,node:t,errors:s}:{ok:true,node:t}}async function yt(t,e,r){let n={...r??{},card_data:e.card_data??{},requires:e.requires??{},fetched_sources:e._sourcesData??{},computed_values:e.computed_values??{}};return L(t).evaluate(n)}function vt(t,e){return e.startsWith("fetched_sources.")?H(t._sourcesData??{},e.slice(16)):H(t,e)}var K=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),St=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function bt(t){let e=[];if(!t||typeof t!="object"||Array.isArray(t))return {ok:false,errors:["Node must be a non-null object"]};let r=t;(typeof r.id!="string"||!r.id)&&e.push("id: required, must be a non-empty string");for(let n of Object.keys(r))St.has(n)||e.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&e.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))e.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&e.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&e.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&e.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))e.push(`provides[${s}]: must be an object with bindTo and ref`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&e.push(`provides[${s}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&e.push(`provides[${s}]: missing required "ref" string`);}}):e.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))e.push(`compute[${s}]: must be a compute step object`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&e.push(`compute[${s}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&e.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):e.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))e.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))e.push(`source_defs[${i}]: must be an object`);else {let c=o;typeof c.bindTo!="string"||!c.bindTo?e.push(`source_defs[${i}]: missing required "bindTo" property`):(n.has(c.bindTo)&&e.push(`source_defs[${i}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?e.push(`source_defs[${i}]: missing required "outputFile" property`):(s.has(c.outputFile)&&e.push(`source_defs[${i}]: outputFile "${c.outputFile}" is not unique across source_defs`),s.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&e.push(`source_defs[${i}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))e.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?e.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,o)=>{if(!s||typeof s!="object"){e.push(`view.elements[${o}]: must be an object`);return}!s.kind||typeof s.kind!="string"?e.push(`view.elements[${o}].kind: required, must be a string`):K.has(s.kind)||e.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...K].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&e.push(`view.elements[${o}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&e.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&e.push("view.features: must be an object");}return {ok:e.length===0,errors:e}}async function wt(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return Promise.all(t.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 L(i).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function _t(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return t.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]=V(i).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var q={run:ht,runSync:kt,eval:yt,resolve:vt,validate:bt,enrichSources:wt,enrichSourcesSync:_t};var G={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function O(t){return t?Array.isArray(t.provides)?t.provides:[]:[]}function j(t){return t?Array.isArray(t.requires)?t.requires:[]:[]}function X(t){return t.tasks??{}}function P(t){return t?t.status===G.FAILED||t.status===G.INACTIVATED:false}function Y(t,e){return t.refreshStrategy??e?.refreshStrategy??"data-changed"}function W(t){return t.maxExecutions}function z(t,e){let r=new Set;for(let[n,s]of Object.entries(e))if(s.status===G.COMPLETED){let o=t.tasks[n];o&&O(o).forEach(c=>r.add(c));}return Array.from(r)}function Q(t,e){let r={};return t.forEach(n=>{let s=e[n];if(!s)return;O(s).forEach(i=>{r[i]||(r[i]=[]),r[i].push(n);});}),r}function Z(t,e,r){let n=t.tasks[e]??N(),s={};if(r){let i=r.tasks[e],c=j(i);for(let p of c)for(let[b,C]of Object.entries(r.tasks))if(O(C).includes(p)){let w=t.tasks[b];w?.lastDataHash&&(s[p]=w.lastDataHash);break}}let o={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...t,tasks:{...t.tasks,[e]:o},lastUpdated:new Date().toISOString()}}function tt(t,e,r,n,s,o){let i=t.tasks[r]??N(),c=e.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let p;n&&c.on&&c.on[n]?p=c.on[n]:p=O(c);let b=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let f=c.requires??[];for(let m of f)for(let[k,S]of Object.entries(e.tasks))if(O(S).includes(m)){let y=t.tasks[k];y?.lastDataHash&&(b[m]=y.lastDataHash);break}}let C={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:b,error:void 0},w=[...new Set([...t.availableOutputs,...p])];return {...t,tasks:{...t.tasks,[r]:C},availableOutputs:w,lastUpdated:new Date().toISOString()}}function et(t,e,r,n){let s=t.tasks[r]??N(),o=e.tasks[r];if(o?.retry){let p=s.retryCount+1;if(p<=o.retry.max_attempts){let b={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:n};return {...t,tasks:{...t.tasks,[r]:b},lastUpdated:new Date().toISOString()}}}let i={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},c=t.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(c=[...new Set([...t.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&i.executionCount>=o.circuit_breaker.max_executions){let p=o.circuit_breaker.on_break;c=[...new Set([...c,...p])];}return {...t,tasks:{...t.tasks,[r]:i},availableOutputs:c,lastUpdated:new Date().toISOString()}}function rt(t,e,r,n){let s=t.tasks[e]??N(),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 {...t,tasks:{...t.tasks,[e]:o},lastUpdated:new Date().toISOString()}}function nt(t,e){let r=t.tasks[e];if(!r)return t;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 {...t,tasks:{...t.tasks,[e]:n},lastUpdated:new Date().toISOString()}}function N(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function st(t,e){let r=e??`live-${Date.now()}`,n={};for(let o of Object.keys(t.tasks))n[o]=it();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:t.settings.execution_mode??"eligibility-mode",conflictStrategy:t.settings.conflict_strategy??"alphabetical",completionStrategy:t.settings.completion}};return {config:t,state:s}}function Ct(t,e){let{config:r,state:n}=t;if("executionId"in e&&e.executionId&&e.executionId!==n.executionId)return t;switch(e.type){case "task-started":return {config:r,state:Z(n,e.taskName,r)};case "task-completed":return {config:r,state:tt(n,r,e.taskName,e.result,e.dataHash,e.data)};case "task-failed":return {config:r,state:et(n,r,e.taskName,e.error)};case "task-progress":return {config:r,state:rt(n,e.taskName,e.message,e.progress)};case "task-restart":return {config:r,state:nt(n,e.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...e.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Gt(n,e.action)};case "task-upsert":return Rt(t,e.taskName,e.taskConfig);case "task-removal":return Tt(t,e.taskName);case "node-requires-add":return At(t,e.nodeName,e.tokens);case "node-requires-remove":return Et(t,e.nodeName,e.tokens);case "node-provides-add":return xt(t,e.nodeName,e.tokens);case "node-provides-remove":return Ot(t,e.nodeName,e.tokens);default:return t}}function ot(t,e){return e.reduce((r,n)=>Ct(r,n),t)}function Rt(t,e,r){let n=!!t.config.tasks[e];return {config:{...t.config,tasks:{...t.config.tasks,[e]:r}},state:{...t.state,tasks:{...t.state.tasks,[e]:n?t.state.tasks[e]:it()},lastUpdated:new Date().toISOString()}}}function Tt(t,e){if(!t.config.tasks[e])return t;let{[e]:r,...n}=t.config.tasks,{[e]:s,...o}=t.state.tasks;return {config:{...t.config,tasks:n},state:{...t.state,tasks:o,lastUpdated:new Date().toISOString()}}}function At(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=j(n),o=r.filter(i=>!s.includes(i));return o.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:[...s,...o]}}},state:t.state}}function Et(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=j(n),o=s.filter(i=>!r.includes(i));return o.length===s.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:o}}},state:t.state}}function xt(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=O(n),o=r.filter(i=>!s.includes(i));return o.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:[...s,...o]}}},state:t.state}}function Ot(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=O(n),o=s.filter(i=>!r.includes(i));return o.length===s.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:o}}},state:t.state}}function at(t){return {version:1,config:t.config,state:t.state,snapshotAt:new Date().toISOString()}}function it(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Gt(t,e){let r=new Date().toISOString();switch(e){case "stop":return {...t,status:"stopped",lastUpdated:r};case "pause":return {...t,status:"paused",lastUpdated:r};case "resume":return {...t,status:"running",lastUpdated:r};default:return t}}function U(t){let{config:e,state:r}=t,n=X(e);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=jt(n),i=z(e,r.tasks),c=new Set([...i,...r.availableOutputs]),p=[],b=[],C=[],w=[];for(let[m,k]of Object.entries(n)){let S=r.tasks[m],y=Y(k,e.settings),E=y!=="once";if(S?.status===G.RUNNING||P(S))continue;let u=W(k);if(u!==void 0&&S&&S.executionCount>=u||k.circuit_breaker&&S&&S.executionCount>=k.circuit_breaker.max_executions||!E&&S?.status===G.COMPLETED)continue;if(E&&S?.status===G.COMPLETED){let d=j(k),g=false;switch(y){case "data-changed":{d.length>0&&d.some(R=>{for(let[T,A]of Object.entries(n))if(O(A).includes(R)){let _=r.tasks[T];if(!_)continue;let pt=S.lastConsumedHashes?.[R];return _.lastDataHash==null?_.executionCount>S.lastEpoch:_.lastDataHash!==pt}return false})||(g=true);break}case "epoch-changed":{d.length>0&&d.some(R=>{for(let[T,A]of Object.entries(n))if(O(A).includes(R)){let _=r.tasks[T];if(_&&_.executionCount>S.lastEpoch)return true}return false})||(g=true);break}case "time-based":{let x=k.refreshInterval??0;if(x<=0){g=true;break}let R=S.completedAt;if(!R){g=true;break}(Date.now()-Date.parse(R))/1e3<x&&(g=true);break}case "manual":g=true;break}if(g)continue}let a=j(k);if(a.length===0){p.push(m);continue}let h=[],l=[],v=[];for(let d of a){if(c.has(d))continue;let g=o[d]||[];g.length===0?h.push(d):g.every(R=>P(r.tasks[R]))?v.push({token:d,failedProducer:g[0]}):l.push(d);}h.length>0?C.push({taskName:m,missingTokens:h}):v.length>0?w.push({taskName:m,failedTokens:v.map(d=>d.token),failedProducers:[...new Set(v.map(d=>d.failedProducer))]}):l.length>0?b.push({taskName:m,waitingOn:l}):p.push(m);}let f={};if(p.length>1){let m=Q(p,n);for(let[k,S]of Object.entries(m))S.length>1&&(f[k]=S);}return {eligible:p,pending:b,unresolved:C,blocked:w,conflicts:f}}function jt(t){let e={};for(let[r,n]of Object.entries(t)){for(let s of O(n))e[s]||(e[s]=[]),e[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)e[o]||(e[o]=[]),e[o].includes(r)||e[o].push(r);if(n.on_failure)for(let s of n.on_failure)e[s]||(e[s]=[]),e[s].includes(r)||e[s].push(r);}return e}var I=class{buffer=[];append(e){this.buffer.push(e);}drain(){let e=this.buffer;return this.buffer=[],e}get size(){return this.buffer.length}};function B(t){let e=F(t);return Dt(e)}function F(t){if(t==null||typeof t!="object")return JSON.stringify(t);if(Array.isArray(t))return "["+t.map(F).join(",")+"]";let e=t;return "{"+Object.keys(e).sort().map(n=>JSON.stringify(n)+":"+F(e[n])).join(",")+"}"}function Dt(t){let e=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<t.length;s++)e^=BigInt(t.charCodeAt(s)),e=e*r&n;return e.toString(16).padStart(16,"0")}function It(t){if(typeof Buffer<"u")return Buffer.from(t,"utf8").toString("base64url");if(typeof btoa=="function"){let e=new TextEncoder().encode(t),r="";for(let n of e)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function Lt(t){if(typeof Buffer<"u")return Buffer.from(t,"base64url").toString("utf8");if(typeof atob=="function"){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.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 ut(t){let e=JSON.stringify({t,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return It(e)}function Nt(t){try{let e=JSON.parse(Lt(t));return typeof e?.t=="string"?{taskName:e.t}:null}catch{return null}}function ct(t,e,r){let{handlers:n,onDrain:s}=e,o=new I,i="state"in t&&"config"in t?t:st(t,r),c=false,p=new Set,b=new Map(Object.entries(n)),C=new I,w=false,f=false;function m(){if(!c){if(w){f=true;return}w=true;try{do f=!1,k();while(f)}finally{w=false;}}}function k(){let u=C.drain(),a=o.drain(),h=[...u,...a];h.length>0&&(i=ot(i,h));let l=U(i);h.length>0&&s?.(h,i,l);for(let v of l.eligible)E(v);for(let v of h)if(v.type==="task-progress"){let{taskName:d,update:g}=v;if(!i.config.tasks[d])continue;let R=i.state.tasks[d];if(!R||R.status!=="running")continue;let T=ut(d),A=y(d,T,g).catch(_=>{c||(C.append({type:"task-failed",taskName:d,error:_.message??String(_),timestamp:new Date().toISOString()}),m());}).finally(()=>{p.delete(A);});p.add(A);}}function S(u){let h=i.config.tasks[u].requires??[],l=new Map;for(let[d,g]of Object.entries(i.config.tasks))for(let x of g.provides??[])l.set(x,d);let v={};for(let d of h){let g=l.get(d);g?v[d]=i.state.tasks[g]?.data:v[d]=void 0;}return v}async function y(u,a,h){let l=i.config.tasks[u],v=l.taskHandlers??[],d=S(u);for(let g of v){let x=b.get(g);if(!x)throw new Error(`Handler '${g}' not found in registry (task '${u}')`);let R={nodeId:u,state:d,taskState:i.state.tasks[u],config:l,callbackToken:a,update:h};if(await x(R)==="task-initiate-failure")throw new Error(`Handler '${g}' returned task-initiate-failure (task '${u}')`)}}function E(u){let h=i.config.tasks[u]?.taskHandlers;if(!h||h.length===0)return;C.append({type:"task-started",taskName:u,timestamp:new Date().toISOString()}),m();let l=ut(u),v=y(u,l).catch(d=>{c||(C.append({type:"task-failed",taskName:u,error:d.message??String(d),timestamp:new Date().toISOString()}),m());}).finally(()=>{p.delete(v);});p.add(v);}return {push(u){c||(u.type==="task-completed"&&u.data&&!u.dataHash&&(u={...u,dataHash:B(u.data)}),o.append(u),m());},pushAll(u){if(!c){for(let a of u)a.type==="task-completed"&&a.data&&!a.dataHash?o.append({...a,dataHash:B(a.data)}):o.append(a);m();}},resolveCallback(u,a,h){if(c)return;let l=Nt(u);if(!l)return;let{taskName:v}=l;if(i.config.tasks[v]){if(h&&h.length>0)o.append({type:"task-failed",taskName:v,error:h.join("; "),timestamp:new Date().toISOString()});else {let d=a&&Object.keys(a).length>0?B(a):void 0;o.append({type:"task-completed",taskName:v,data:a,dataHash:d,timestamp:new Date().toISOString()});}m();}},addNode(u,a){c||(o.append({type:"task-upsert",taskName:u,taskConfig:a,timestamp:new Date().toISOString()}),m());},removeNode(u){c||(o.append({type:"task-removal",taskName:u,timestamp:new Date().toISOString()}),m());},addRequires(u,a){c||(o.append({type:"node-requires-add",nodeName:u,tokens:a,timestamp:new Date().toISOString()}),m());},removeRequires(u,a){c||(o.append({type:"node-requires-remove",nodeName:u,tokens:a,timestamp:new Date().toISOString()}),m());},addProvides(u,a){c||(o.append({type:"node-provides-add",nodeName:u,tokens:a,timestamp:new Date().toISOString()}),m());},removeProvides(u,a){c||(o.append({type:"node-provides-remove",nodeName:u,tokens:a,timestamp:new Date().toISOString()}),m());},registerHandler(u,a){b.set(u,a);},unregisterHandler(u){b.delete(u);},retrigger(u){c||i.config.tasks[u]&&(o.append({type:"task-restart",taskName:u,timestamp:new Date().toISOString()}),m());},retriggerAll(u){if(!c){for(let a of u)i.config.tasks[a]&&o.append({type:"task-restart",taskName:a,timestamp:new Date().toISOString()});m();}},snapshot(){return at(i)},getState(){return i},getSchedule(){return U(i)},async waitForHandlers(){p.size>0&&await Promise.allSettled([...p]);},async dispose(u){u?.wait&&p.size>0&&await Promise.allSettled([...p]),c=true;}}}function D(t){return JSON.parse(JSON.stringify(t))}function $(t){let e=t.provides&&t.provides.length>0?t.provides.map(r=>r.bindTo):[t.id];return {requires:t.requires&&t.requires.length>0?[...t.requires]:void 0,provides:e,taskHandlers:[t.id],description:t.meta?.title??t.id}}function qt(t){let e=new Map;for(let[r,n]of t.entries()){let s=n.provides&&n.provides.length>0?n.provides:[{bindTo:r,ref:"card_data"}];for(let o of s)e.set(o.bindTo,r);}return e}function M(t,e){let r=qt(t),n=t.get(e);if(n){for(let s of n.requires??[])if(!r.has(s))throw new Error(`Card "${e}" requires token "${s}" but no card provides it`)}}var ke={CARD_PREFIX:"yf:cards:",RUNTIME_OUT_PREFIX:"yf:runtime-out:cards:",STATUS_KEY:"yf:runtime-out:status",writeCard(t,e){try{localStorage.setItem(this.CARD_PREFIX+t,JSON.stringify(e));}catch(r){console.warn(`Failed to write card ${t} to localStorage:`,r);}},readCard(t){try{let e=localStorage.getItem(this.CARD_PREFIX+t);return e?JSON.parse(e):null}catch(e){return console.warn(`Failed to read card ${t} from localStorage:`,e),null}},readAllCards(t){let e={};for(let r of t){let n=this.readCard(r);n&&(e[r]=n);}return e},writeComputedArtifact(t){if(!(!t||!t.card_id))try{localStorage.setItem(this.RUNTIME_OUT_PREFIX+String(t.card_id),JSON.stringify(t));}catch(e){console.warn(`Failed to write computed artifact ${t.card_id}:`,e);}},readComputedArtifact(t){try{let e=localStorage.getItem(this.RUNTIME_OUT_PREFIX+t);return e?JSON.parse(e):null}catch(e){return console.warn(`Failed to read computed artifact ${t}:`,e),null}},readAllComputedArtifacts(t){let e={};for(let r of t){let n=this.readComputedArtifact(r);n&&(e[r]=n);}return e},writeStatusSnapshot(t){try{localStorage.setItem(this.STATUS_KEY,JSON.stringify(t));}catch(e){console.warn("Failed to write status snapshot to localStorage:",e);}},readStatusSnapshot(){try{let t=localStorage.getItem(this.STATUS_KEY);return t?JSON.parse(t):null}catch(t){return console.warn("Failed to read status snapshot from localStorage:",t),null}},clear(){let t=[];for(let e=0;e<localStorage.length;e++){let r=localStorage.key(e);r&&(r.startsWith(this.CARD_PREFIX)||r.startsWith(this.RUNTIME_OUT_PREFIX)||r===this.STATUS_KEY)&&t.push(r);}for(let e of t)localStorage.removeItem(e);}};function ye(t,e={}){let r=Array.isArray(t)?{}:{id:t.id,title:t.title,mode:t.mode,positions:t.positions,settings:t.settings},n=Array.isArray(t)?t:t.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,D(a));}let o=new Set,i=e.taskExecutor,c=e.sourceAdapters??{},p=e.defaultSourceAdapter,b=null,C=(a,h)=>{let l={events:a,graph:h,nodes:E()};for(let v of o)v(l);},w=a=>async h=>{let l=s.get(a);if(!l)return "task-initiate-failure";let v={};for(let T of l.requires??[]){let A=h.state[T];if(!A||typeof A!="object")continue;let _=A.provides_data;!_||typeof _!="object"||Object.prototype.hasOwnProperty.call(_,T)&&(v[T]=_[T]);}let d={};if(l.source_defs&&l.source_defs.length>0){let T=c[a]??p,A=i?await i({card:l,input:h}):T?await T({card:l,input:h}):void 0;if(A&&typeof A=="object")for(let _ of l.source_defs)Object.prototype.hasOwnProperty.call(A,_.bindTo)?d[_.bindTo]=A[_.bindTo]:l.source_defs.length===1&&(d[_.bindTo]=A);}let g={id:l.id,card_data:D(l.card_data??{}),requires:v,source_defs:l.source_defs,compute:l.compute};g._sourcesData=d,g.compute&&g.compute.length>0&&await q.run(g,{sourcesData:d});let x={};if(l.provides&&l.provides.length>0)for(let{bindTo:T,ref:A}of l.provides)x[T]=q.resolve(g,A);else x[l.id]={...g.card_data??{},...g.computed_values??{},...g._sourcesData??{}};let R={provides_data:x,card_data:g.card_data??{},computed_values:g.computed_values??{},fetched_sources:d,requires:v};return b?.resolveCallback(h.callbackToken,R),"task-initiated"},f={},m={};for(let[a,h]of s.entries())M(s,a),f[a]=$(h),m[a]=w(a);let k={id:r.id??`browser-board-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...r.settings??{},...e.graphSettings??{}},tasks:f},S=e.reactiveOptions?.onDrain,y=ct(k,{...e.reactiveOptions??{},handlers:m,onDrain:(a,h,l)=>{S?.(a,h,l),C(a,h);}},e.executionId);b=y;function E(){let a=y.getState(),h=[];for(let[l,v]of s.entries()){let d=a.state.tasks[l]?.data,g=a.state.tasks[l],x={...v.card_data??{},...d&&typeof d.card_data=="object"?d.card_data:{}},R=g?.status==="running"?"loading":g?.status,T={...x,...R?{status:R}:{},...g?.lastUpdated?{lastRun:g.lastUpdated}:{},...g?.status==="failed"&&g.error?{error:g.error}:{}};h.push({id:l,card:D(v),card_data:T,requires:d&&typeof d.requires=="object"?D(d.requires):{},computed_values:d&&typeof d.computed_values=="object"?D(d.computed_values):{},runtime_state:g?D(g):{}});}return h}return {getGraph:()=>y,getState:()=>y.getState(),getSchedule:()=>y.getSchedule(),getNodes:()=>E(),getBoard:()=>({...r,nodes:E()}),subscribe(a){return o.add(a),a({events:[],graph:y.getState(),nodes:E()}),()=>o.delete(a)},addCard(a){if(s.has(a.id))throw new Error(`Card "${a.id}" already exists`);s.set(a.id,D(a)),M(s,a.id),y.registerHandler(a.id,w(a.id)),y.addNode(a.id,$(a));},upsertCard(a){s.set(a.id,D(a)),M(s,a.id),y.registerHandler(a.id,w(a.id)),y.addNode(a.id,$(a));},removeCard(a){s.delete(a),y.unregisterHandler(a),y.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},y.retrigger(a);},retrigger(a){y.retrigger(a);},retriggerAll(){y.retriggerAll(Array.from(s.keys()));},push(a){y.push(a);},pushAll(a){y.pushAll(a);},dispose(){o.clear(),y.dispose();}}}function dt(t){return t==="running"||t==="in-progress"?"loading":t==="failed"?"error":"fresh"}function Pt(t){return t==="loading"?"in-progress":t==="error"?"failed":t==="stale"?"pending":t==="fresh"?"completed":"pending"}function Ut(t,e){let r=e&&typeof e=="object"&&!Array.isArray(e)?e:{};return {schema_version:r.schema_version||"v1",card_id:typeof r.card_id=="string"?r.card_id:t,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 Bt(t,e){if(!t||typeof t!="object")throw new Error("payload must be an object");if(!e)throw new Error("cardId is required");let n=(Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).find(a=>a.id===e);if(!n)throw new Error(`cardDefinitions has no entry with id ${e}`);let s=t.statusSnapshot&&typeof t.statusSnapshot=="object"?t.statusSnapshot:{},o=t.cardRuntimeById&&typeof t.cardRuntimeById=="object"?t.cardRuntimeById:{},i=t.dataObjectsByToken&&typeof t.dataObjectsByToken=="object"?t.dataObjectsByToken:{},p=(Array.isArray(s.cards)?s.cards:[]).find(a=>a.name===e),b=structuredClone(n),C=Ut(e,o[e]),f={...b.card_data&&typeof b.card_data=="object"&&!Array.isArray(b.card_data)?b.card_data:{},...C.card_data||{},status:dt(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:dt(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:[]},k=Array.isArray(b.requires)?b.requires:[],S={};for(let[a,h]of Object.entries(i))S[a]=structuredClone(h);for(let a of k)Object.prototype.hasOwnProperty.call(S,a)||(S[a]=null);let E=(t.cardChatsByCardId&&typeof t.cardChatsByCardId=="object"?t.cardChatsByCardId:{})[e],u=E?{messages:Array.isArray(E.messages)?E.messages:[],receiving:!!E.receiving,processing:!!E.processing}:null;return {id:e,card:b,card_data:f,requires:S,computed_values:C.computed_values,runtime_state:m,card_chats:u}}function ve(t){if(!t||typeof t!="object")throw new Error("payload must be an object");return (Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).map(r=>Bt(t,r.id))}function Se({boardPath:t,cardDefinitions:e,runtimeModels:r,graphState:n}){let s=Array.isArray(e)?e:[],o=Array.isArray(r)?r:[],i=new Map(o.map(f=>[f.id,f])),p=n.state?.tasks??{},b={};for(let f of o)f?.id&&(b[f.id]={schema_version:"v1",card_id:f.id,card_data:structuredClone(f.card_data??{}),computed_values:structuredClone(f.computed_values??{})});let C={};for(let f of Object.keys(p)){let m=p[f]?.data?.provides_data;if(m&&typeof m=="object")for(let k of Object.keys(m))C[k]=structuredClone(m[k]);}let w=s.map(f=>{let m=i.get(f.id)??{},k=p[f.id],S=typeof k?.status=="string"?k.status:Pt(m.card_data?.status),y=typeof k?.error=="string"?k.error:typeof m.card_data?.error=="string"?m.card_data.error:null;return {name:f.id,status:S,...y?{error:{message:y,code:"TASK_FAILED",at:k?.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(E=>E.bindTo):[f.id],provides_runtime:Object.keys(k?.data?.provides_data??{}).sort(),blocked_by:[],unblocks:[],runtime:{attempt_count:k?.executionCount??0,restart_count:k?.retryCount??0,in_progress_since:S==="in-progress"?k?.startedAt??null:null,last_transition_at:k?.lastUpdated??m.card_data?.lastRun??null,last_completed_at:k?.completedAt??null,last_restarted_at:k?.startedAt??null,status_age_ms:null}}});return {cardDefinitions:structuredClone(s),cardRuntimeById:b,dataObjectsByToken:C,statusSnapshot:{schema_version:"v1",meta:{board:{path:t??"browser-runtime"}},summary:{card_count:w.length,completed:w.filter(f=>f.status==="completed").length,eligible:0,pending:w.filter(f=>f.status==="pending").length,blocked:0,unresolved:0,failed:w.filter(f=>f.status==="failed").length,in_progress:w.filter(f=>f.status==="in-progress").length,orphan_cards:0,topology:{edge_count:0,max_fan_out_card:null,max_fan_out:0}},cards:w}}}
|
|
1
|
+
'use strict';var module$1=require('module');require('ajv-formats');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var lt=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));lt("./jsonata-sync.cjs");var mt=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))),N=mt("./jsonata-sync.cjs"),J=N;function K(t,e){if(!e||!t)return;let r=e.split("."),n=t;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function X(t,e,r){let n=e.split("."),s=t;for(let a=0;a<n.length-1;a++)(s[n[a]]==null||typeof s[n[a]]!="object")&&(s[n[a]]={}),s=s[n[a]];s[n[n.length-1]]=r;}async function ht(t,e){if(!t?.compute?.length)return t;t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values};for(let s of t.compute)try{let a=await N(s.expr).evaluate(n);X(t.computed_values,s.bindTo,a),n.computed_values=t.computed_values;}catch{}return t}function kt(t,e){if(!t?.compute?.length)return {ok:true,node:t};t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values},s=[];for(let a of t.compute)try{let i=J(a.expr).evaluate(n);X(t.computed_values,a.bindTo,i),n.computed_values=t.computed_values;}catch(i){let c=i instanceof Error?i.message:String(i);s.push({bindTo:a.bindTo,error:c});}return s.length>0?{ok:true,node:t,errors:s}:{ok:true,node:t}}async function yt(t,e,r){let n={...r??{},card_data:e.card_data??{},requires:e.requires??{},fetched_sources:e._sourcesData??{},computed_values:e.computed_values??{}};return N(t).evaluate(n)}function vt(t,e){return e.startsWith("fetched_sources.")?K(t._sourcesData??{},e.slice(16)):K(t,e)}var V=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),St=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function bt(t){let e=[];if(!t||typeof t!="object"||Array.isArray(t))return {ok:false,errors:["Node must be a non-null object"]};let r=t;(typeof r.id!="string"||!r.id)&&e.push("id: required, must be a non-empty string");for(let n of Object.keys(r))St.has(n)||e.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&e.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))e.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&e.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&e.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&e.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))e.push(`provides[${s}]: must be an object with bindTo and ref`);else {let a=n;(typeof a.bindTo!="string"||!a.bindTo)&&e.push(`provides[${s}]: missing required "bindTo" string`),(typeof a.ref!="string"||!a.ref)&&e.push(`provides[${s}]: missing required "ref" string`);}}):e.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))e.push(`compute[${s}]: must be a compute step object`);else {let a=n;(typeof a.bindTo!="string"||!a.bindTo)&&e.push(`compute[${s}]: missing required "bindTo" property`),(typeof a.expr!="string"||!a.expr)&&e.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):e.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))e.push("source_defs: must be an array");else {let n=new Set,s=new Set;r.source_defs.forEach((a,i)=>{if(!a||typeof a!="object"||Array.isArray(a))e.push(`source_defs[${i}]: must be an object`);else {let c=a;typeof c.bindTo!="string"||!c.bindTo?e.push(`source_defs[${i}]: missing required "bindTo" property`):(n.has(c.bindTo)&&e.push(`source_defs[${i}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?e.push(`source_defs[${i}]: missing required "outputFile" property`):(s.has(c.outputFile)&&e.push(`source_defs[${i}]: outputFile "${c.outputFile}" is not unique across source_defs`),s.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&e.push(`source_defs[${i}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))e.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?e.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,a)=>{if(!s||typeof s!="object"){e.push(`view.elements[${a}]: must be an object`);return}!s.kind||typeof s.kind!="string"?e.push(`view.elements[${a}].kind: required, must be a string`):V.has(s.kind)||e.push(`view.elements[${a}].kind: unknown kind "${s.kind}". Valid: ${[...V].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&e.push(`view.elements[${a}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&e.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&e.push("view.features: must be an object");}return {ok:e.length===0,errors:e}}async function wt(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return Promise.all(t.map(async n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[a,i]of Object.entries(n.projections))if(typeof i=="string"&&i.trim().length>0)try{s[a]=await N(i).evaluate(r);}catch{s[a]=void 0;}}return {...n,_projections:s}}))}function _t(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return t.map(n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[a,i]of Object.entries(n.projections))if(typeof i=="string"&&i.trim().length>0)try{s[a]=J(i).evaluate(r);}catch{s[a]=void 0;}}return {...n,_projections:s}})}var P={run:ht,runSync:kt,eval:yt,resolve:vt,validate:bt,enrichSources:wt,enrichSourcesSync:_t};var O={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function x(t){return t?Array.isArray(t.provides)?t.provides:[]:[]}function G(t){return t?Array.isArray(t.requires)?t.requires:[]:[]}function Y(t){return t.tasks??{}}function U(t){return t?t.status===O.FAILED||t.status===O.INACTIVATED:false}function W(t,e){return t.refreshStrategy??e?.refreshStrategy??"data-changed"}function z(t){return t.maxExecutions}function Q(t,e){let r=new Set;for(let[n,s]of Object.entries(e))if(s.status===O.COMPLETED){let a=t.tasks[n];a&&x(a).forEach(c=>r.add(c));}return Array.from(r)}function Z(t,e){let r={};return t.forEach(n=>{let s=e[n];if(!s)return;x(s).forEach(i=>{r[i]||(r[i]=[]),r[i].push(n);});}),r}function tt(t,e,r){let n=t.tasks[e]??q(),s={};if(r){let i=r.tasks[e],c=G(i);for(let p of c)for(let[h,T]of Object.entries(r.tasks))if(x(T).includes(p)){let b=t.tasks[h];b?.lastDataHash&&(s[p]=b.lastDataHash);break}}let a={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...t,tasks:{...t.tasks,[e]:a},lastUpdated:new Date().toISOString()}}function et(t,e,r,n,s,a){let i=t.tasks[r]??q(),c=e.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let p;n&&c.on&&c.on[n]?p=c.on[n]:p=x(c);let h=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let g=c.requires??[];for(let k of g)for(let[m,v]of Object.entries(e.tasks))if(x(v).includes(k)){let y=t.tasks[m];y?.lastDataHash&&(h[k]=y.lastDataHash);break}}let T={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:s,data:a,lastConsumedHashes:h,error:void 0},b=[...new Set([...t.availableOutputs,...p])];return {...t,tasks:{...t.tasks,[r]:T},availableOutputs:b,lastUpdated:new Date().toISOString()}}function rt(t,e,r,n){let s=t.tasks[r]??q(),a=e.tasks[r];if(a?.retry){let p=s.retryCount+1;if(p<=a.retry.max_attempts){let h={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:n};return {...t,tasks:{...t.tasks,[r]:h},lastUpdated:new Date().toISOString()}}}let i={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},c=t.availableOutputs;if(a?.on_failure&&a.on_failure.length>0&&(c=[...new Set([...t.availableOutputs,...a.on_failure])]),a?.circuit_breaker&&i.executionCount>=a.circuit_breaker.max_executions){let p=a.circuit_breaker.on_break;c=[...new Set([...c,...p])];}return {...t,tasks:{...t.tasks,[r]:i},availableOutputs:c,lastUpdated:new Date().toISOString()}}function nt(t,e,r,n){let s=t.tasks[e]??q(),a={...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 {...t,tasks:{...t.tasks,[e]:a},lastUpdated:new Date().toISOString()}}function st(t,e){let r=t.tasks[e];if(!r)return t;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 {...t,tasks:{...t.tasks,[e]:n},lastUpdated:new Date().toISOString()}}function q(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function ot(t,e){let r=e??`live-${Date.now()}`,n={};for(let a of Object.keys(t.tasks))n[a]=ut();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:t.settings.execution_mode??"eligibility-mode",conflictStrategy:t.settings.conflict_strategy??"alphabetical",completionStrategy:t.settings.completion}};return {config:t,state:s}}function Ct(t,e){let{config:r,state:n}=t;if("executionId"in e&&e.executionId&&e.executionId!==n.executionId)return t;switch(e.type){case "task-started":return {config:r,state:tt(n,e.taskName,r)};case "task-completed":return {config:r,state:et(n,r,e.taskName,e.result,e.dataHash,e.data)};case "task-failed":return {config:r,state:rt(n,r,e.taskName,e.error)};case "task-progress":return {config:r,state:nt(n,e.taskName,e.message,e.progress)};case "task-restart":return {config:r,state:st(n,e.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...e.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Gt(n,e.action)};case "task-upsert":return Rt(t,e.taskName,e.taskConfig);case "task-removal":return Tt(t,e.taskName);case "node-requires-add":return At(t,e.nodeName,e.tokens);case "node-requires-remove":return Et(t,e.nodeName,e.tokens);case "node-provides-add":return xt(t,e.nodeName,e.tokens);case "node-provides-remove":return Ot(t,e.nodeName,e.tokens);default:return t}}function at(t,e){return e.reduce((r,n)=>Ct(r,n),t)}function Rt(t,e,r){let n=!!t.config.tasks[e];return {config:{...t.config,tasks:{...t.config.tasks,[e]:r}},state:{...t.state,tasks:{...t.state.tasks,[e]:n?t.state.tasks[e]:ut()},lastUpdated:new Date().toISOString()}}}function Tt(t,e){if(!t.config.tasks[e])return t;let{[e]:r,...n}=t.config.tasks,{[e]:s,...a}=t.state.tasks;return {config:{...t.config,tasks:n},state:{...t.state,tasks:a,lastUpdated:new Date().toISOString()}}}function At(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=G(n),a=r.filter(i=>!s.includes(i));return a.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:[...s,...a]}}},state:t.state}}function Et(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=G(n),a=s.filter(i=>!r.includes(i));return a.length===s.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:a}}},state:t.state}}function xt(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=x(n),a=r.filter(i=>!s.includes(i));return a.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:[...s,...a]}}},state:t.state}}function Ot(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=x(n),a=s.filter(i=>!r.includes(i));return a.length===s.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:a}}},state:t.state}}function it(t){return {version:1,config:t.config,state:t.state,snapshotAt:new Date().toISOString()}}function ut(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Gt(t,e){let r=new Date().toISOString();switch(e){case "stop":return {...t,status:"stopped",lastUpdated:r};case "pause":return {...t,status:"paused",lastUpdated:r};case "resume":return {...t,status:"running",lastUpdated:r};default:return t}}function B(t){let{config:e,state:r}=t,n=Y(e);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let a=jt(n),i=Q(e,r.tasks),c=new Set([...i,...r.availableOutputs]),p=[],h=[],T=[],b=[];for(let[k,m]of Object.entries(n)){let v=r.tasks[k],y=W(m,e.settings),A=y!=="once";if(v?.status===O.RUNNING||U(v))continue;let D=z(m);if(D!==void 0&&v&&v.executionCount>=D||m.circuit_breaker&&v&&v.executionCount>=m.circuit_breaker.max_executions||!A&&v?.status===O.COMPLETED)continue;if(A&&v?.status===O.COMPLETED){let f=G(m),u=false;switch(y){case "data-changed":{f.length>0&&f.some(C=>{for(let[_,E]of Object.entries(n))if(x(E).includes(C)){let R=r.tasks[_];if(!R)continue;let L=v.lastConsumedHashes?.[C];return R.lastDataHash==null?R.executionCount>v.lastEpoch:R.lastDataHash!==L}return false})||(u=true);break}case "epoch-changed":{f.length>0&&f.some(C=>{for(let[_,E]of Object.entries(n))if(x(E).includes(C)){let R=r.tasks[_];if(R&&R.executionCount>v.lastEpoch)return true}return false})||(u=true);break}case "time-based":{let w=m.refreshInterval??0;if(w<=0){u=true;break}let C=v.completedAt;if(!C){u=true;break}(Date.now()-Date.parse(C))/1e3<w&&(u=true);break}case "manual":u=true;break}if(u)continue}let o=G(m);if(o.length===0){p.push(k);continue}let d=[],l=[],S=[];for(let f of o){if(c.has(f))continue;let u=a[f]||[];u.length===0?d.push(f):u.every(C=>U(r.tasks[C]))?S.push({token:f,failedProducer:u[0]}):l.push(f);}d.length>0?T.push({taskName:k,missingTokens:d}):S.length>0?b.push({taskName:k,failedTokens:S.map(f=>f.token),failedProducers:[...new Set(S.map(f=>f.failedProducer))]}):l.length>0?h.push({taskName:k,waitingOn:l}):p.push(k);}let g={};if(p.length>1){let k=Z(p,n);for(let[m,v]of Object.entries(k))v.length>1&&(g[m]=v);}return {eligible:p,pending:h,unresolved:T,blocked:b,conflicts:g}}function jt(t){let e={};for(let[r,n]of Object.entries(t)){for(let s of x(n))e[s]||(e[s]=[]),e[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let a of s)e[a]||(e[a]=[]),e[a].includes(r)||e[a].push(r);if(n.on_failure)for(let s of n.on_failure)e[s]||(e[s]=[]),e[s].includes(r)||e[s].push(r);}return e}var I=class{buffer=[];append(e){this.buffer.push(e);}drain(){let e=this.buffer;return this.buffer=[],e}get size(){return this.buffer.length}};function F(t){let e=$(t);return Dt(e)}function $(t){if(t==null||typeof t!="object")return JSON.stringify(t);if(Array.isArray(t))return "["+t.map($).join(",")+"]";let e=t;return "{"+Object.keys(e).sort().map(n=>JSON.stringify(n)+":"+$(e[n])).join(",")+"}"}function Dt(t){let e=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<t.length;s++)e^=BigInt(t.charCodeAt(s)),e=e*r&n;return e.toString(16).padStart(16,"0")}function It(t){if(typeof Buffer<"u")return Buffer.from(t,"utf8").toString("base64url");if(typeof btoa=="function"){let e=new TextEncoder().encode(t),r="";for(let n of e)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function Lt(t){if(typeof Buffer<"u")return Buffer.from(t,"base64url").toString("utf8");if(typeof atob=="function"){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),n=atob(r),s=new Uint8Array(n.length);for(let a=0;a<n.length;a++)s[a]=n.charCodeAt(a);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function ct(t){let e=JSON.stringify({t,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return It(e)}function Nt(t){try{let e=JSON.parse(Lt(t));return typeof e?.t=="string"?{taskName:e.t}:null}catch{return null}}function dt(t,e,r){let{handlers:n,onNodeRemoved:s,onDrain:a}=e,i=new I,c="state"in t&&"config"in t?t:ot(t,r),p=false,h=new Set,T=new Map(Object.entries(n)),b=new I,g=false,k=false;function m(){if(!p){if(g){k=true;return}g=true;try{do k=!1,v();while(k)}finally{g=false;}}}function v(){let o=b.drain(),d=i.drain(),l=[...o,...d];if(l.length>0&&(c=at(c,l),s)){for(let f of l)if(f.type==="task-removal")try{s(f.taskName);}catch(u){console.warn("[reactive] onNodeRemoved failed:",u instanceof Error?u.message:String(u));}}let S=B(c);l.length>0&&a?.(l,c,S);for(let f of S.eligible)D(f);for(let f of l)if(f.type==="task-progress"){let{taskName:u,update:w}=f;if(!c.config.tasks[u])continue;let _=c.state.tasks[u];if(!_||_.status!=="running")continue;let E=ct(u),R=A(u,E,w).catch(L=>{p||(b.append({type:"task-failed",taskName:u,error:L.message??String(L),timestamp:new Date().toISOString()}),m());}).finally(()=>{h.delete(R);});h.add(R);}}function y(o){let l=c.config.tasks[o].requires??[],S=new Map;for(let[u,w]of Object.entries(c.config.tasks))for(let C of w.provides??[])S.set(C,u);let f={};for(let u of l){let w=S.get(u);w?f[u]=c.state.tasks[w]?.data:f[u]=void 0;}return f}async function A(o,d,l){let S=c.config.tasks[o],f=S.taskHandlers??[],u=y(o);for(let w of f){let C=T.get(w);if(!C)throw new Error(`Handler '${w}' not found in registry (task '${o}')`);let _={nodeId:o,state:u,taskState:c.state.tasks[o],config:S,callbackToken:d,update:l};if(await C(_)==="task-initiate-failure")throw new Error(`Handler '${w}' returned task-initiate-failure (task '${o}')`)}}function D(o){let l=c.config.tasks[o]?.taskHandlers;if(!l||l.length===0)return;b.append({type:"task-started",taskName:o,timestamp:new Date().toISOString()}),m();let S=ct(o),f=A(o,S).catch(u=>{p||(b.append({type:"task-failed",taskName:o,error:u.message??String(u),timestamp:new Date().toISOString()}),m());}).finally(()=>{h.delete(f);});h.add(f);}return {push(o){p||(o.type==="task-completed"&&o.data&&!o.dataHash&&(o={...o,dataHash:F(o.data)}),i.append(o),m());},pushAll(o){if(!p){for(let d of o)d.type==="task-completed"&&d.data&&!d.dataHash?i.append({...d,dataHash:F(d.data)}):i.append(d);m();}},resolveCallback(o,d,l){if(p)return;let S=Nt(o);if(!S)return;let{taskName:f}=S;if(c.config.tasks[f]){if(l&&l.length>0)i.append({type:"task-failed",taskName:f,error:l.join("; "),timestamp:new Date().toISOString()});else {let u=d&&Object.keys(d).length>0?F(d):void 0;i.append({type:"task-completed",taskName:f,data:d,dataHash:u,timestamp:new Date().toISOString()});}m();}},addNode(o,d){p||(i.append({type:"task-upsert",taskName:o,taskConfig:d,timestamp:new Date().toISOString()}),m());},removeNode(o){p||(i.append({type:"task-removal",taskName:o,timestamp:new Date().toISOString()}),m());},addRequires(o,d){p||(i.append({type:"node-requires-add",nodeName:o,tokens:d,timestamp:new Date().toISOString()}),m());},removeRequires(o,d){p||(i.append({type:"node-requires-remove",nodeName:o,tokens:d,timestamp:new Date().toISOString()}),m());},addProvides(o,d){p||(i.append({type:"node-provides-add",nodeName:o,tokens:d,timestamp:new Date().toISOString()}),m());},removeProvides(o,d){p||(i.append({type:"node-provides-remove",nodeName:o,tokens:d,timestamp:new Date().toISOString()}),m());},registerHandler(o,d){T.set(o,d);},unregisterHandler(o){T.delete(o);},retrigger(o){p||c.config.tasks[o]&&(i.append({type:"task-restart",taskName:o,timestamp:new Date().toISOString()}),m());},retriggerAll(o){if(!p){for(let d of o)c.config.tasks[d]&&i.append({type:"task-restart",taskName:d,timestamp:new Date().toISOString()});m();}},snapshot(){return it(c)},getState(){return c},getSchedule(){return B(c)},async waitForHandlers(){h.size>0&&await Promise.allSettled([...h]);},async dispose(o){o?.wait&&h.size>0&&await Promise.allSettled([...h]),p=true;}}}function j(t){return JSON.parse(JSON.stringify(t))}function M(t){let e=t.provides&&t.provides.length>0?t.provides.map(r=>r.bindTo):[t.id];return {requires:t.requires&&t.requires.length>0?[...t.requires]:void 0,provides:e,taskHandlers:[t.id],description:t.meta?.title??t.id}}function qt(t){let e=new Map;for(let[r,n]of t.entries()){let s=n.provides&&n.provides.length>0?n.provides:[{bindTo:r,ref:"card_data"}];for(let a of s)e.set(a.bindTo,r);}return e}function H(t,e){let r=qt(t),n=t.get(e);if(n){for(let s of n.requires??[])if(!r.has(s))throw new Error(`Card "${e}" requires token "${s}" but no card provides it`)}}var ke={CARD_PREFIX:"yf:cards:",RUNTIME_OUT_PREFIX:"yf:runtime-out:cards:",STATUS_KEY:"yf:runtime-out:status",writeCard(t,e){try{localStorage.setItem(this.CARD_PREFIX+t,JSON.stringify(e));}catch(r){console.warn(`Failed to write card ${t} to localStorage:`,r);}},readCard(t){try{let e=localStorage.getItem(this.CARD_PREFIX+t);return e?JSON.parse(e):null}catch(e){return console.warn(`Failed to read card ${t} from localStorage:`,e),null}},readAllCards(t){let e={};for(let r of t){let n=this.readCard(r);n&&(e[r]=n);}return e},writeComputedArtifact(t){if(!(!t||!t.card_id))try{localStorage.setItem(this.RUNTIME_OUT_PREFIX+String(t.card_id),JSON.stringify(t));}catch(e){console.warn(`Failed to write computed artifact ${t.card_id}:`,e);}},readComputedArtifact(t){try{let e=localStorage.getItem(this.RUNTIME_OUT_PREFIX+t);return e?JSON.parse(e):null}catch(e){return console.warn(`Failed to read computed artifact ${t}:`,e),null}},readAllComputedArtifacts(t){let e={};for(let r of t){let n=this.readComputedArtifact(r);n&&(e[r]=n);}return e},writeStatusSnapshot(t){try{localStorage.setItem(this.STATUS_KEY,JSON.stringify(t));}catch(e){console.warn("Failed to write status snapshot to localStorage:",e);}},readStatusSnapshot(){try{let t=localStorage.getItem(this.STATUS_KEY);return t?JSON.parse(t):null}catch(t){return console.warn("Failed to read status snapshot from localStorage:",t),null}},clear(){let t=[];for(let e=0;e<localStorage.length;e++){let r=localStorage.key(e);r&&(r.startsWith(this.CARD_PREFIX)||r.startsWith(this.RUNTIME_OUT_PREFIX)||r===this.STATUS_KEY)&&t.push(r);}for(let e of t)localStorage.removeItem(e);}};function ye(t,e={}){let r=Array.isArray(t)?{}:{id:t.id,title:t.title,mode:t.mode,positions:t.positions,settings:t.settings},n=Array.isArray(t)?t:t.nodes,s=new Map;for(let o of n){if(s.has(o.id))throw new Error(`Duplicate card ID: "${o.id}"`);s.set(o.id,j(o));}let a=new Set,i=e.taskExecutor,c=e.sourceAdapters??{},p=e.defaultSourceAdapter,h=null,T=(o,d)=>{let l={events:o,graph:d,nodes:A()};for(let S of a)S(l);},b=o=>async d=>{let l=s.get(o);if(!l)return "task-initiate-failure";let S={};for(let _ of l.requires??[]){let E=d.state[_];if(!E||typeof E!="object")continue;let R=E.provides_data;!R||typeof R!="object"||Object.prototype.hasOwnProperty.call(R,_)&&(S[_]=R[_]);}let f={};if(l.source_defs&&l.source_defs.length>0){let _=c[o]??p,E=i?await i({card:l,input:d}):_?await _({card:l,input:d}):void 0;if(E&&typeof E=="object")for(let R of l.source_defs)Object.prototype.hasOwnProperty.call(E,R.bindTo)?f[R.bindTo]=E[R.bindTo]:l.source_defs.length===1&&(f[R.bindTo]=E);}let u={id:l.id,card_data:j(l.card_data??{}),requires:S,source_defs:l.source_defs,compute:l.compute};u._sourcesData=f,u.compute&&u.compute.length>0&&await P.run(u,{sourcesData:f});let w={};if(l.provides&&l.provides.length>0)for(let{bindTo:_,ref:E}of l.provides)w[_]=P.resolve(u,E);else w[l.id]={...u.card_data??{},...u.computed_values??{},...u._sourcesData??{}};let C={provides_data:w,card_data:u.card_data??{},computed_values:u.computed_values??{},fetched_sources:f,requires:S};return h?.resolveCallback(d.callbackToken,C),"task-initiated"},g={},k={};for(let[o,d]of s.entries())H(s,o),g[o]=M(d),k[o]=b(o);let m={id:r.id??`browser-board-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...r.settings??{},...e.graphSettings??{}},tasks:g},v=e.reactiveOptions?.onDrain,y=dt(m,{...e.reactiveOptions??{},handlers:k,onDrain:(o,d,l)=>{v?.(o,d,l),T(o,d);}},e.executionId);h=y;function A(){let o=y.getState(),d=[];for(let[l,S]of s.entries()){let f=o.state.tasks[l]?.data,u=o.state.tasks[l],w={...S.card_data??{},...f&&typeof f.card_data=="object"?f.card_data:{}},C=u?.status==="running"?"loading":u?.status,_={...w,...C?{status:C}:{},...u?.lastUpdated?{lastRun:u.lastUpdated}:{},...u?.status==="failed"&&u.error?{error:u.error}:{}};d.push({id:l,card:j(S),card_data:_,requires:f&&typeof f.requires=="object"?j(f.requires):{},computed_values:f&&typeof f.computed_values=="object"?j(f.computed_values):{},runtime_state:u?j(u):{}});}return d}return {getGraph:()=>y,getState:()=>y.getState(),getSchedule:()=>y.getSchedule(),getNodes:()=>A(),getBoard:()=>({...r,nodes:A()}),subscribe(o){return a.add(o),o({events:[],graph:y.getState(),nodes:A()}),()=>a.delete(o)},addCard(o){if(s.has(o.id))throw new Error(`Card "${o.id}" already exists`);s.set(o.id,j(o)),H(s,o.id),y.registerHandler(o.id,b(o.id)),y.addNode(o.id,M(o));},upsertCard(o){s.set(o.id,j(o)),H(s,o.id),y.registerHandler(o.id,b(o.id)),y.addNode(o.id,M(o));},removeCard(o){s.delete(o),y.unregisterHandler(o),y.removeNode(o);},patchCardState(o,d){let l=s.get(o);if(!l)throw new Error(`Card "${o}" not found`);l.card_data={...l.card_data??{},...d},y.retrigger(o);},retrigger(o){y.retrigger(o);},retriggerAll(){y.retriggerAll(Array.from(s.keys()));},push(o){y.push(o);},pushAll(o){y.pushAll(o);},dispose(){a.clear(),y.dispose();}}}function pt(t){return t==="running"||t==="in-progress"?"loading":t==="failed"?"error":"fresh"}function Pt(t){return t==="loading"?"in-progress":t==="error"?"failed":t==="stale"?"pending":t==="fresh"?"completed":"pending"}function Ut(t,e){let r=e&&typeof e=="object"&&!Array.isArray(e)?e:{};return {schema_version:r.schema_version||"v1",card_id:typeof r.card_id=="string"?r.card_id:t,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 Bt(t,e){if(!t||typeof t!="object")throw new Error("payload must be an object");if(!e)throw new Error("cardId is required");let n=(Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).find(o=>o.id===e);if(!n)throw new Error(`cardDefinitions has no entry with id ${e}`);let s=t.statusSnapshot&&typeof t.statusSnapshot=="object"?t.statusSnapshot:{},a=t.cardRuntimeById&&typeof t.cardRuntimeById=="object"?t.cardRuntimeById:{},i=t.dataObjectsByToken&&typeof t.dataObjectsByToken=="object"?t.dataObjectsByToken:{},p=(Array.isArray(s.cards)?s.cards:[]).find(o=>o.name===e),h=structuredClone(n),T=Ut(e,a[e]),g={...h.card_data&&typeof h.card_data=="object"&&!Array.isArray(h.card_data)?h.card_data:{},...T.card_data||{},status:pt(p?.status),lastRun:p?.runtime?.last_transition_at??null};p?.error?.message&&(g.error=p.error.message);let k=p?{task_status:p.status??null,card_status:pt(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:g.status??"fresh",runtime:{last_transition_at:g.lastRun??null},error:g.error?{message:g.error}:null,blocked_by:[],requires_missing:[]},m=Array.isArray(h.requires)?h.requires:[],v={};for(let[o,d]of Object.entries(i))v[o]=structuredClone(d);for(let o of m)Object.prototype.hasOwnProperty.call(v,o)||(v[o]=null);let A=(t.cardChatsByCardId&&typeof t.cardChatsByCardId=="object"?t.cardChatsByCardId:{})[e],D=A?{messages:Array.isArray(A.messages)?A.messages:[],receiving:!!A.receiving,processing:!!A.processing}:null;return {id:e,card:h,card_data:g,requires:v,computed_values:T.computed_values,runtime_state:k,card_chats:D}}function ve(t){if(!t||typeof t!="object")throw new Error("payload must be an object");return (Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).map(r=>Bt(t,r.id))}function Se({boardPath:t,cardDefinitions:e,runtimeModels:r,graphState:n}){let s=Array.isArray(e)?e:[],a=Array.isArray(r)?r:[],i=new Map(a.map(g=>[g.id,g])),p=n.state?.tasks??{},h={};for(let g of a)g?.id&&(h[g.id]={schema_version:"v1",card_id:g.id,card_data:structuredClone(g.card_data??{}),computed_values:structuredClone(g.computed_values??{})});let T={};for(let g of Object.keys(p)){let k=p[g]?.data?.provides_data;if(k&&typeof k=="object")for(let m of Object.keys(k))T[m]=structuredClone(k[m]);}let b=s.map(g=>{let k=i.get(g.id)??{},m=p[g.id],v=typeof m?.status=="string"?m.status:Pt(k.card_data?.status),y=typeof m?.error=="string"?m.error:typeof k.card_data?.error=="string"?k.card_data.error:null;return {name:g.id,status:v,...y?{error:{message:y,code:"TASK_FAILED",at:m?.failedAt??null,source:"browser-runtime"}}:{},requires:Array.isArray(g.requires)?g.requires:[],requires_satisfied:[],requires_missing:[],provides_declared:Array.isArray(g.provides)?g.provides.map(A=>A.bindTo):[g.id],provides_runtime:Object.keys(m?.data?.provides_data??{}).sort(),blocked_by:[],unblocks:[],runtime:{attempt_count:m?.executionCount??0,restart_count:m?.retryCount??0,in_progress_since:v==="in-progress"?m?.startedAt??null:null,last_transition_at:m?.lastUpdated??k.card_data?.lastRun??null,last_completed_at:m?.completedAt??null,last_restarted_at:m?.startedAt??null,status_age_ms:null}}});return {cardDefinitions:structuredClone(s),cardRuntimeById:h,dataObjectsByToken:T,statusSnapshot:{schema_version:"v1",meta:{board:{path:t??"browser-runtime"}},summary:{card_count:b.length,completed:b.filter(g=>g.status==="completed").length,eligible:0,pending:b.filter(g=>g.status==="pending").length,blocked:0,unresolved:0,failed:b.filter(g=>g.status==="failed").length,in_progress:b.filter(g=>g.status==="in-progress").length,orphan_cards:0,topology:{edge_count:0,max_fan_out_card:null,max_fan_out:0}},cards:b}}}
|
|
2
2
|
exports.LocalStorageService=ke;exports.buildBrowserArtifactsFromRuntime=Se;exports.createBoardLiveGraphRuntime=ye;exports.selectAllLiveCardModels=ve;exports.selectLiveCardModel=Bt;//# sourceMappingURL=index.cjs.map
|
|
3
3
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { G as GraphConfig, f as GraphEvent } from '../types-BBhqYGhE.cjs';
|
|
2
|
-
import { R as ReactiveGraph, d as LiveGraph, a as LiveCard, s as schedule, h as TaskHandlerInput, g as ReactiveGraphOptions, L as LiveBoard } from '../live-cards-bridge-
|
|
2
|
+
import { R as ReactiveGraph, d as LiveGraph, a as LiveCard, s as schedule, h as TaskHandlerInput, g as ReactiveGraphOptions, L as LiveBoard } from '../live-cards-bridge-Bwi-lbBT.cjs';
|
|
3
3
|
|
|
4
4
|
interface BrowserSourceAdapterContext {
|
|
5
5
|
card: LiveCard;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { G as GraphConfig, f as GraphEvent } from '../types-BBhqYGhE.js';
|
|
2
|
-
import { R as ReactiveGraph, d as LiveGraph, a as LiveCard, s as schedule, h as TaskHandlerInput, g as ReactiveGraphOptions, L as LiveBoard } from '../live-cards-bridge-
|
|
2
|
+
import { R as ReactiveGraph, d as LiveGraph, a as LiveCard, s as schedule, h as TaskHandlerInput, g as ReactiveGraphOptions, L as LiveBoard } from '../live-cards-bridge-YL6AWawT.js';
|
|
3
3
|
|
|
4
4
|
interface BrowserSourceAdapterContext {
|
|
5
5
|
card: LiveCard;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {createRequire}from'module';import'ajv-formats';var lt=createRequire(import.meta.url);lt("./jsonata-sync.cjs");var mt=createRequire(import.meta.url),L=mt("./jsonata-sync.cjs"),V=L;function H(t,e){if(!e||!t)return;let r=e.split("."),n=t;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function J(t,e,r){let n=e.split("."),s=t;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 ht(t,e){if(!t?.compute?.length)return t;t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values};for(let s of t.compute)try{let o=await L(s.expr).evaluate(n);J(t.computed_values,s.bindTo,o),n.computed_values=t.computed_values;}catch{}return t}function kt(t,e){if(!t?.compute?.length)return {ok:true,node:t};t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values},s=[];for(let o of t.compute)try{let i=V(o.expr).evaluate(n);J(t.computed_values,o.bindTo,i),n.computed_values=t.computed_values;}catch(i){let c=i instanceof Error?i.message:String(i);s.push({bindTo:o.bindTo,error:c});}return s.length>0?{ok:true,node:t,errors:s}:{ok:true,node:t}}async function yt(t,e,r){let n={...r??{},card_data:e.card_data??{},requires:e.requires??{},fetched_sources:e._sourcesData??{},computed_values:e.computed_values??{}};return L(t).evaluate(n)}function vt(t,e){return e.startsWith("fetched_sources.")?H(t._sourcesData??{},e.slice(16)):H(t,e)}var K=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),St=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function bt(t){let e=[];if(!t||typeof t!="object"||Array.isArray(t))return {ok:false,errors:["Node must be a non-null object"]};let r=t;(typeof r.id!="string"||!r.id)&&e.push("id: required, must be a non-empty string");for(let n of Object.keys(r))St.has(n)||e.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&e.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))e.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&e.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&e.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&e.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))e.push(`provides[${s}]: must be an object with bindTo and ref`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&e.push(`provides[${s}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&e.push(`provides[${s}]: missing required "ref" string`);}}):e.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))e.push(`compute[${s}]: must be a compute step object`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&e.push(`compute[${s}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&e.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):e.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))e.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))e.push(`source_defs[${i}]: must be an object`);else {let c=o;typeof c.bindTo!="string"||!c.bindTo?e.push(`source_defs[${i}]: missing required "bindTo" property`):(n.has(c.bindTo)&&e.push(`source_defs[${i}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?e.push(`source_defs[${i}]: missing required "outputFile" property`):(s.has(c.outputFile)&&e.push(`source_defs[${i}]: outputFile "${c.outputFile}" is not unique across source_defs`),s.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&e.push(`source_defs[${i}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))e.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?e.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,o)=>{if(!s||typeof s!="object"){e.push(`view.elements[${o}]: must be an object`);return}!s.kind||typeof s.kind!="string"?e.push(`view.elements[${o}].kind: required, must be a string`):K.has(s.kind)||e.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...K].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&e.push(`view.elements[${o}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&e.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&e.push("view.features: must be an object");}return {ok:e.length===0,errors:e}}async function wt(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return Promise.all(t.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 L(i).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function _t(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return t.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]=V(i).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var q={run:ht,runSync:kt,eval:yt,resolve:vt,validate:bt,enrichSources:wt,enrichSourcesSync:_t};var G={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function O(t){return t?Array.isArray(t.provides)?t.provides:[]:[]}function j(t){return t?Array.isArray(t.requires)?t.requires:[]:[]}function X(t){return t.tasks??{}}function P(t){return t?t.status===G.FAILED||t.status===G.INACTIVATED:false}function Y(t,e){return t.refreshStrategy??e?.refreshStrategy??"data-changed"}function W(t){return t.maxExecutions}function z(t,e){let r=new Set;for(let[n,s]of Object.entries(e))if(s.status===G.COMPLETED){let o=t.tasks[n];o&&O(o).forEach(c=>r.add(c));}return Array.from(r)}function Q(t,e){let r={};return t.forEach(n=>{let s=e[n];if(!s)return;O(s).forEach(i=>{r[i]||(r[i]=[]),r[i].push(n);});}),r}function Z(t,e,r){let n=t.tasks[e]??N(),s={};if(r){let i=r.tasks[e],c=j(i);for(let p of c)for(let[b,C]of Object.entries(r.tasks))if(O(C).includes(p)){let w=t.tasks[b];w?.lastDataHash&&(s[p]=w.lastDataHash);break}}let o={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...t,tasks:{...t.tasks,[e]:o},lastUpdated:new Date().toISOString()}}function tt(t,e,r,n,s,o){let i=t.tasks[r]??N(),c=e.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let p;n&&c.on&&c.on[n]?p=c.on[n]:p=O(c);let b=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let f=c.requires??[];for(let m of f)for(let[k,S]of Object.entries(e.tasks))if(O(S).includes(m)){let y=t.tasks[k];y?.lastDataHash&&(b[m]=y.lastDataHash);break}}let C={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:b,error:void 0},w=[...new Set([...t.availableOutputs,...p])];return {...t,tasks:{...t.tasks,[r]:C},availableOutputs:w,lastUpdated:new Date().toISOString()}}function et(t,e,r,n){let s=t.tasks[r]??N(),o=e.tasks[r];if(o?.retry){let p=s.retryCount+1;if(p<=o.retry.max_attempts){let b={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:n};return {...t,tasks:{...t.tasks,[r]:b},lastUpdated:new Date().toISOString()}}}let i={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},c=t.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(c=[...new Set([...t.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&i.executionCount>=o.circuit_breaker.max_executions){let p=o.circuit_breaker.on_break;c=[...new Set([...c,...p])];}return {...t,tasks:{...t.tasks,[r]:i},availableOutputs:c,lastUpdated:new Date().toISOString()}}function rt(t,e,r,n){let s=t.tasks[e]??N(),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 {...t,tasks:{...t.tasks,[e]:o},lastUpdated:new Date().toISOString()}}function nt(t,e){let r=t.tasks[e];if(!r)return t;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 {...t,tasks:{...t.tasks,[e]:n},lastUpdated:new Date().toISOString()}}function N(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function st(t,e){let r=e??`live-${Date.now()}`,n={};for(let o of Object.keys(t.tasks))n[o]=it();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:t.settings.execution_mode??"eligibility-mode",conflictStrategy:t.settings.conflict_strategy??"alphabetical",completionStrategy:t.settings.completion}};return {config:t,state:s}}function Ct(t,e){let{config:r,state:n}=t;if("executionId"in e&&e.executionId&&e.executionId!==n.executionId)return t;switch(e.type){case "task-started":return {config:r,state:Z(n,e.taskName,r)};case "task-completed":return {config:r,state:tt(n,r,e.taskName,e.result,e.dataHash,e.data)};case "task-failed":return {config:r,state:et(n,r,e.taskName,e.error)};case "task-progress":return {config:r,state:rt(n,e.taskName,e.message,e.progress)};case "task-restart":return {config:r,state:nt(n,e.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...e.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Gt(n,e.action)};case "task-upsert":return Rt(t,e.taskName,e.taskConfig);case "task-removal":return Tt(t,e.taskName);case "node-requires-add":return At(t,e.nodeName,e.tokens);case "node-requires-remove":return Et(t,e.nodeName,e.tokens);case "node-provides-add":return xt(t,e.nodeName,e.tokens);case "node-provides-remove":return Ot(t,e.nodeName,e.tokens);default:return t}}function ot(t,e){return e.reduce((r,n)=>Ct(r,n),t)}function Rt(t,e,r){let n=!!t.config.tasks[e];return {config:{...t.config,tasks:{...t.config.tasks,[e]:r}},state:{...t.state,tasks:{...t.state.tasks,[e]:n?t.state.tasks[e]:it()},lastUpdated:new Date().toISOString()}}}function Tt(t,e){if(!t.config.tasks[e])return t;let{[e]:r,...n}=t.config.tasks,{[e]:s,...o}=t.state.tasks;return {config:{...t.config,tasks:n},state:{...t.state,tasks:o,lastUpdated:new Date().toISOString()}}}function At(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=j(n),o=r.filter(i=>!s.includes(i));return o.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:[...s,...o]}}},state:t.state}}function Et(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=j(n),o=s.filter(i=>!r.includes(i));return o.length===s.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:o}}},state:t.state}}function xt(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=O(n),o=r.filter(i=>!s.includes(i));return o.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:[...s,...o]}}},state:t.state}}function Ot(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=O(n),o=s.filter(i=>!r.includes(i));return o.length===s.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:o}}},state:t.state}}function at(t){return {version:1,config:t.config,state:t.state,snapshotAt:new Date().toISOString()}}function it(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Gt(t,e){let r=new Date().toISOString();switch(e){case "stop":return {...t,status:"stopped",lastUpdated:r};case "pause":return {...t,status:"paused",lastUpdated:r};case "resume":return {...t,status:"running",lastUpdated:r};default:return t}}function U(t){let{config:e,state:r}=t,n=X(e);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=jt(n),i=z(e,r.tasks),c=new Set([...i,...r.availableOutputs]),p=[],b=[],C=[],w=[];for(let[m,k]of Object.entries(n)){let S=r.tasks[m],y=Y(k,e.settings),E=y!=="once";if(S?.status===G.RUNNING||P(S))continue;let u=W(k);if(u!==void 0&&S&&S.executionCount>=u||k.circuit_breaker&&S&&S.executionCount>=k.circuit_breaker.max_executions||!E&&S?.status===G.COMPLETED)continue;if(E&&S?.status===G.COMPLETED){let d=j(k),g=false;switch(y){case "data-changed":{d.length>0&&d.some(R=>{for(let[T,A]of Object.entries(n))if(O(A).includes(R)){let _=r.tasks[T];if(!_)continue;let pt=S.lastConsumedHashes?.[R];return _.lastDataHash==null?_.executionCount>S.lastEpoch:_.lastDataHash!==pt}return false})||(g=true);break}case "epoch-changed":{d.length>0&&d.some(R=>{for(let[T,A]of Object.entries(n))if(O(A).includes(R)){let _=r.tasks[T];if(_&&_.executionCount>S.lastEpoch)return true}return false})||(g=true);break}case "time-based":{let x=k.refreshInterval??0;if(x<=0){g=true;break}let R=S.completedAt;if(!R){g=true;break}(Date.now()-Date.parse(R))/1e3<x&&(g=true);break}case "manual":g=true;break}if(g)continue}let a=j(k);if(a.length===0){p.push(m);continue}let h=[],l=[],v=[];for(let d of a){if(c.has(d))continue;let g=o[d]||[];g.length===0?h.push(d):g.every(R=>P(r.tasks[R]))?v.push({token:d,failedProducer:g[0]}):l.push(d);}h.length>0?C.push({taskName:m,missingTokens:h}):v.length>0?w.push({taskName:m,failedTokens:v.map(d=>d.token),failedProducers:[...new Set(v.map(d=>d.failedProducer))]}):l.length>0?b.push({taskName:m,waitingOn:l}):p.push(m);}let f={};if(p.length>1){let m=Q(p,n);for(let[k,S]of Object.entries(m))S.length>1&&(f[k]=S);}return {eligible:p,pending:b,unresolved:C,blocked:w,conflicts:f}}function jt(t){let e={};for(let[r,n]of Object.entries(t)){for(let s of O(n))e[s]||(e[s]=[]),e[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)e[o]||(e[o]=[]),e[o].includes(r)||e[o].push(r);if(n.on_failure)for(let s of n.on_failure)e[s]||(e[s]=[]),e[s].includes(r)||e[s].push(r);}return e}var I=class{buffer=[];append(e){this.buffer.push(e);}drain(){let e=this.buffer;return this.buffer=[],e}get size(){return this.buffer.length}};function B(t){let e=F(t);return Dt(e)}function F(t){if(t==null||typeof t!="object")return JSON.stringify(t);if(Array.isArray(t))return "["+t.map(F).join(",")+"]";let e=t;return "{"+Object.keys(e).sort().map(n=>JSON.stringify(n)+":"+F(e[n])).join(",")+"}"}function Dt(t){let e=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<t.length;s++)e^=BigInt(t.charCodeAt(s)),e=e*r&n;return e.toString(16).padStart(16,"0")}function It(t){if(typeof Buffer<"u")return Buffer.from(t,"utf8").toString("base64url");if(typeof btoa=="function"){let e=new TextEncoder().encode(t),r="";for(let n of e)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function Lt(t){if(typeof Buffer<"u")return Buffer.from(t,"base64url").toString("utf8");if(typeof atob=="function"){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.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 ut(t){let e=JSON.stringify({t,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return It(e)}function Nt(t){try{let e=JSON.parse(Lt(t));return typeof e?.t=="string"?{taskName:e.t}:null}catch{return null}}function ct(t,e,r){let{handlers:n,onDrain:s}=e,o=new I,i="state"in t&&"config"in t?t:st(t,r),c=false,p=new Set,b=new Map(Object.entries(n)),C=new I,w=false,f=false;function m(){if(!c){if(w){f=true;return}w=true;try{do f=!1,k();while(f)}finally{w=false;}}}function k(){let u=C.drain(),a=o.drain(),h=[...u,...a];h.length>0&&(i=ot(i,h));let l=U(i);h.length>0&&s?.(h,i,l);for(let v of l.eligible)E(v);for(let v of h)if(v.type==="task-progress"){let{taskName:d,update:g}=v;if(!i.config.tasks[d])continue;let R=i.state.tasks[d];if(!R||R.status!=="running")continue;let T=ut(d),A=y(d,T,g).catch(_=>{c||(C.append({type:"task-failed",taskName:d,error:_.message??String(_),timestamp:new Date().toISOString()}),m());}).finally(()=>{p.delete(A);});p.add(A);}}function S(u){let h=i.config.tasks[u].requires??[],l=new Map;for(let[d,g]of Object.entries(i.config.tasks))for(let x of g.provides??[])l.set(x,d);let v={};for(let d of h){let g=l.get(d);g?v[d]=i.state.tasks[g]?.data:v[d]=void 0;}return v}async function y(u,a,h){let l=i.config.tasks[u],v=l.taskHandlers??[],d=S(u);for(let g of v){let x=b.get(g);if(!x)throw new Error(`Handler '${g}' not found in registry (task '${u}')`);let R={nodeId:u,state:d,taskState:i.state.tasks[u],config:l,callbackToken:a,update:h};if(await x(R)==="task-initiate-failure")throw new Error(`Handler '${g}' returned task-initiate-failure (task '${u}')`)}}function E(u){let h=i.config.tasks[u]?.taskHandlers;if(!h||h.length===0)return;C.append({type:"task-started",taskName:u,timestamp:new Date().toISOString()}),m();let l=ut(u),v=y(u,l).catch(d=>{c||(C.append({type:"task-failed",taskName:u,error:d.message??String(d),timestamp:new Date().toISOString()}),m());}).finally(()=>{p.delete(v);});p.add(v);}return {push(u){c||(u.type==="task-completed"&&u.data&&!u.dataHash&&(u={...u,dataHash:B(u.data)}),o.append(u),m());},pushAll(u){if(!c){for(let a of u)a.type==="task-completed"&&a.data&&!a.dataHash?o.append({...a,dataHash:B(a.data)}):o.append(a);m();}},resolveCallback(u,a,h){if(c)return;let l=Nt(u);if(!l)return;let{taskName:v}=l;if(i.config.tasks[v]){if(h&&h.length>0)o.append({type:"task-failed",taskName:v,error:h.join("; "),timestamp:new Date().toISOString()});else {let d=a&&Object.keys(a).length>0?B(a):void 0;o.append({type:"task-completed",taskName:v,data:a,dataHash:d,timestamp:new Date().toISOString()});}m();}},addNode(u,a){c||(o.append({type:"task-upsert",taskName:u,taskConfig:a,timestamp:new Date().toISOString()}),m());},removeNode(u){c||(o.append({type:"task-removal",taskName:u,timestamp:new Date().toISOString()}),m());},addRequires(u,a){c||(o.append({type:"node-requires-add",nodeName:u,tokens:a,timestamp:new Date().toISOString()}),m());},removeRequires(u,a){c||(o.append({type:"node-requires-remove",nodeName:u,tokens:a,timestamp:new Date().toISOString()}),m());},addProvides(u,a){c||(o.append({type:"node-provides-add",nodeName:u,tokens:a,timestamp:new Date().toISOString()}),m());},removeProvides(u,a){c||(o.append({type:"node-provides-remove",nodeName:u,tokens:a,timestamp:new Date().toISOString()}),m());},registerHandler(u,a){b.set(u,a);},unregisterHandler(u){b.delete(u);},retrigger(u){c||i.config.tasks[u]&&(o.append({type:"task-restart",taskName:u,timestamp:new Date().toISOString()}),m());},retriggerAll(u){if(!c){for(let a of u)i.config.tasks[a]&&o.append({type:"task-restart",taskName:a,timestamp:new Date().toISOString()});m();}},snapshot(){return at(i)},getState(){return i},getSchedule(){return U(i)},async waitForHandlers(){p.size>0&&await Promise.allSettled([...p]);},async dispose(u){u?.wait&&p.size>0&&await Promise.allSettled([...p]),c=true;}}}function D(t){return JSON.parse(JSON.stringify(t))}function $(t){let e=t.provides&&t.provides.length>0?t.provides.map(r=>r.bindTo):[t.id];return {requires:t.requires&&t.requires.length>0?[...t.requires]:void 0,provides:e,taskHandlers:[t.id],description:t.meta?.title??t.id}}function qt(t){let e=new Map;for(let[r,n]of t.entries()){let s=n.provides&&n.provides.length>0?n.provides:[{bindTo:r,ref:"card_data"}];for(let o of s)e.set(o.bindTo,r);}return e}function M(t,e){let r=qt(t),n=t.get(e);if(n){for(let s of n.requires??[])if(!r.has(s))throw new Error(`Card "${e}" requires token "${s}" but no card provides it`)}}var ke={CARD_PREFIX:"yf:cards:",RUNTIME_OUT_PREFIX:"yf:runtime-out:cards:",STATUS_KEY:"yf:runtime-out:status",writeCard(t,e){try{localStorage.setItem(this.CARD_PREFIX+t,JSON.stringify(e));}catch(r){console.warn(`Failed to write card ${t} to localStorage:`,r);}},readCard(t){try{let e=localStorage.getItem(this.CARD_PREFIX+t);return e?JSON.parse(e):null}catch(e){return console.warn(`Failed to read card ${t} from localStorage:`,e),null}},readAllCards(t){let e={};for(let r of t){let n=this.readCard(r);n&&(e[r]=n);}return e},writeComputedArtifact(t){if(!(!t||!t.card_id))try{localStorage.setItem(this.RUNTIME_OUT_PREFIX+String(t.card_id),JSON.stringify(t));}catch(e){console.warn(`Failed to write computed artifact ${t.card_id}:`,e);}},readComputedArtifact(t){try{let e=localStorage.getItem(this.RUNTIME_OUT_PREFIX+t);return e?JSON.parse(e):null}catch(e){return console.warn(`Failed to read computed artifact ${t}:`,e),null}},readAllComputedArtifacts(t){let e={};for(let r of t){let n=this.readComputedArtifact(r);n&&(e[r]=n);}return e},writeStatusSnapshot(t){try{localStorage.setItem(this.STATUS_KEY,JSON.stringify(t));}catch(e){console.warn("Failed to write status snapshot to localStorage:",e);}},readStatusSnapshot(){try{let t=localStorage.getItem(this.STATUS_KEY);return t?JSON.parse(t):null}catch(t){return console.warn("Failed to read status snapshot from localStorage:",t),null}},clear(){let t=[];for(let e=0;e<localStorage.length;e++){let r=localStorage.key(e);r&&(r.startsWith(this.CARD_PREFIX)||r.startsWith(this.RUNTIME_OUT_PREFIX)||r===this.STATUS_KEY)&&t.push(r);}for(let e of t)localStorage.removeItem(e);}};function ye(t,e={}){let r=Array.isArray(t)?{}:{id:t.id,title:t.title,mode:t.mode,positions:t.positions,settings:t.settings},n=Array.isArray(t)?t:t.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,D(a));}let o=new Set,i=e.taskExecutor,c=e.sourceAdapters??{},p=e.defaultSourceAdapter,b=null,C=(a,h)=>{let l={events:a,graph:h,nodes:E()};for(let v of o)v(l);},w=a=>async h=>{let l=s.get(a);if(!l)return "task-initiate-failure";let v={};for(let T of l.requires??[]){let A=h.state[T];if(!A||typeof A!="object")continue;let _=A.provides_data;!_||typeof _!="object"||Object.prototype.hasOwnProperty.call(_,T)&&(v[T]=_[T]);}let d={};if(l.source_defs&&l.source_defs.length>0){let T=c[a]??p,A=i?await i({card:l,input:h}):T?await T({card:l,input:h}):void 0;if(A&&typeof A=="object")for(let _ of l.source_defs)Object.prototype.hasOwnProperty.call(A,_.bindTo)?d[_.bindTo]=A[_.bindTo]:l.source_defs.length===1&&(d[_.bindTo]=A);}let g={id:l.id,card_data:D(l.card_data??{}),requires:v,source_defs:l.source_defs,compute:l.compute};g._sourcesData=d,g.compute&&g.compute.length>0&&await q.run(g,{sourcesData:d});let x={};if(l.provides&&l.provides.length>0)for(let{bindTo:T,ref:A}of l.provides)x[T]=q.resolve(g,A);else x[l.id]={...g.card_data??{},...g.computed_values??{},...g._sourcesData??{}};let R={provides_data:x,card_data:g.card_data??{},computed_values:g.computed_values??{},fetched_sources:d,requires:v};return b?.resolveCallback(h.callbackToken,R),"task-initiated"},f={},m={};for(let[a,h]of s.entries())M(s,a),f[a]=$(h),m[a]=w(a);let k={id:r.id??`browser-board-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...r.settings??{},...e.graphSettings??{}},tasks:f},S=e.reactiveOptions?.onDrain,y=ct(k,{...e.reactiveOptions??{},handlers:m,onDrain:(a,h,l)=>{S?.(a,h,l),C(a,h);}},e.executionId);b=y;function E(){let a=y.getState(),h=[];for(let[l,v]of s.entries()){let d=a.state.tasks[l]?.data,g=a.state.tasks[l],x={...v.card_data??{},...d&&typeof d.card_data=="object"?d.card_data:{}},R=g?.status==="running"?"loading":g?.status,T={...x,...R?{status:R}:{},...g?.lastUpdated?{lastRun:g.lastUpdated}:{},...g?.status==="failed"&&g.error?{error:g.error}:{}};h.push({id:l,card:D(v),card_data:T,requires:d&&typeof d.requires=="object"?D(d.requires):{},computed_values:d&&typeof d.computed_values=="object"?D(d.computed_values):{},runtime_state:g?D(g):{}});}return h}return {getGraph:()=>y,getState:()=>y.getState(),getSchedule:()=>y.getSchedule(),getNodes:()=>E(),getBoard:()=>({...r,nodes:E()}),subscribe(a){return o.add(a),a({events:[],graph:y.getState(),nodes:E()}),()=>o.delete(a)},addCard(a){if(s.has(a.id))throw new Error(`Card "${a.id}" already exists`);s.set(a.id,D(a)),M(s,a.id),y.registerHandler(a.id,w(a.id)),y.addNode(a.id,$(a));},upsertCard(a){s.set(a.id,D(a)),M(s,a.id),y.registerHandler(a.id,w(a.id)),y.addNode(a.id,$(a));},removeCard(a){s.delete(a),y.unregisterHandler(a),y.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},y.retrigger(a);},retrigger(a){y.retrigger(a);},retriggerAll(){y.retriggerAll(Array.from(s.keys()));},push(a){y.push(a);},pushAll(a){y.pushAll(a);},dispose(){o.clear(),y.dispose();}}}function dt(t){return t==="running"||t==="in-progress"?"loading":t==="failed"?"error":"fresh"}function Pt(t){return t==="loading"?"in-progress":t==="error"?"failed":t==="stale"?"pending":t==="fresh"?"completed":"pending"}function Ut(t,e){let r=e&&typeof e=="object"&&!Array.isArray(e)?e:{};return {schema_version:r.schema_version||"v1",card_id:typeof r.card_id=="string"?r.card_id:t,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 Bt(t,e){if(!t||typeof t!="object")throw new Error("payload must be an object");if(!e)throw new Error("cardId is required");let n=(Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).find(a=>a.id===e);if(!n)throw new Error(`cardDefinitions has no entry with id ${e}`);let s=t.statusSnapshot&&typeof t.statusSnapshot=="object"?t.statusSnapshot:{},o=t.cardRuntimeById&&typeof t.cardRuntimeById=="object"?t.cardRuntimeById:{},i=t.dataObjectsByToken&&typeof t.dataObjectsByToken=="object"?t.dataObjectsByToken:{},p=(Array.isArray(s.cards)?s.cards:[]).find(a=>a.name===e),b=structuredClone(n),C=Ut(e,o[e]),f={...b.card_data&&typeof b.card_data=="object"&&!Array.isArray(b.card_data)?b.card_data:{},...C.card_data||{},status:dt(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:dt(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:[]},k=Array.isArray(b.requires)?b.requires:[],S={};for(let[a,h]of Object.entries(i))S[a]=structuredClone(h);for(let a of k)Object.prototype.hasOwnProperty.call(S,a)||(S[a]=null);let E=(t.cardChatsByCardId&&typeof t.cardChatsByCardId=="object"?t.cardChatsByCardId:{})[e],u=E?{messages:Array.isArray(E.messages)?E.messages:[],receiving:!!E.receiving,processing:!!E.processing}:null;return {id:e,card:b,card_data:f,requires:S,computed_values:C.computed_values,runtime_state:m,card_chats:u}}function ve(t){if(!t||typeof t!="object")throw new Error("payload must be an object");return (Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).map(r=>Bt(t,r.id))}function Se({boardPath:t,cardDefinitions:e,runtimeModels:r,graphState:n}){let s=Array.isArray(e)?e:[],o=Array.isArray(r)?r:[],i=new Map(o.map(f=>[f.id,f])),p=n.state?.tasks??{},b={};for(let f of o)f?.id&&(b[f.id]={schema_version:"v1",card_id:f.id,card_data:structuredClone(f.card_data??{}),computed_values:structuredClone(f.computed_values??{})});let C={};for(let f of Object.keys(p)){let m=p[f]?.data?.provides_data;if(m&&typeof m=="object")for(let k of Object.keys(m))C[k]=structuredClone(m[k]);}let w=s.map(f=>{let m=i.get(f.id)??{},k=p[f.id],S=typeof k?.status=="string"?k.status:Pt(m.card_data?.status),y=typeof k?.error=="string"?k.error:typeof m.card_data?.error=="string"?m.card_data.error:null;return {name:f.id,status:S,...y?{error:{message:y,code:"TASK_FAILED",at:k?.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(E=>E.bindTo):[f.id],provides_runtime:Object.keys(k?.data?.provides_data??{}).sort(),blocked_by:[],unblocks:[],runtime:{attempt_count:k?.executionCount??0,restart_count:k?.retryCount??0,in_progress_since:S==="in-progress"?k?.startedAt??null:null,last_transition_at:k?.lastUpdated??m.card_data?.lastRun??null,last_completed_at:k?.completedAt??null,last_restarted_at:k?.startedAt??null,status_age_ms:null}}});return {cardDefinitions:structuredClone(s),cardRuntimeById:b,dataObjectsByToken:C,statusSnapshot:{schema_version:"v1",meta:{board:{path:t??"browser-runtime"}},summary:{card_count:w.length,completed:w.filter(f=>f.status==="completed").length,eligible:0,pending:w.filter(f=>f.status==="pending").length,blocked:0,unresolved:0,failed:w.filter(f=>f.status==="failed").length,in_progress:w.filter(f=>f.status==="in-progress").length,orphan_cards:0,topology:{edge_count:0,max_fan_out_card:null,max_fan_out:0}},cards:w}}}
|
|
1
|
+
import {createRequire}from'module';import'ajv-formats';var lt=createRequire(import.meta.url);lt("./jsonata-sync.cjs");var mt=createRequire(import.meta.url),N=mt("./jsonata-sync.cjs"),J=N;function K(t,e){if(!e||!t)return;let r=e.split("."),n=t;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function X(t,e,r){let n=e.split("."),s=t;for(let a=0;a<n.length-1;a++)(s[n[a]]==null||typeof s[n[a]]!="object")&&(s[n[a]]={}),s=s[n[a]];s[n[n.length-1]]=r;}async function ht(t,e){if(!t?.compute?.length)return t;t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values};for(let s of t.compute)try{let a=await N(s.expr).evaluate(n);X(t.computed_values,s.bindTo,a),n.computed_values=t.computed_values;}catch{}return t}function kt(t,e){if(!t?.compute?.length)return {ok:true,node:t};t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values},s=[];for(let a of t.compute)try{let i=J(a.expr).evaluate(n);X(t.computed_values,a.bindTo,i),n.computed_values=t.computed_values;}catch(i){let c=i instanceof Error?i.message:String(i);s.push({bindTo:a.bindTo,error:c});}return s.length>0?{ok:true,node:t,errors:s}:{ok:true,node:t}}async function yt(t,e,r){let n={...r??{},card_data:e.card_data??{},requires:e.requires??{},fetched_sources:e._sourcesData??{},computed_values:e.computed_values??{}};return N(t).evaluate(n)}function vt(t,e){return e.startsWith("fetched_sources.")?K(t._sourcesData??{},e.slice(16)):K(t,e)}var V=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),St=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function bt(t){let e=[];if(!t||typeof t!="object"||Array.isArray(t))return {ok:false,errors:["Node must be a non-null object"]};let r=t;(typeof r.id!="string"||!r.id)&&e.push("id: required, must be a non-empty string");for(let n of Object.keys(r))St.has(n)||e.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&e.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))e.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&e.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&e.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&e.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))e.push(`provides[${s}]: must be an object with bindTo and ref`);else {let a=n;(typeof a.bindTo!="string"||!a.bindTo)&&e.push(`provides[${s}]: missing required "bindTo" string`),(typeof a.ref!="string"||!a.ref)&&e.push(`provides[${s}]: missing required "ref" string`);}}):e.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))e.push(`compute[${s}]: must be a compute step object`);else {let a=n;(typeof a.bindTo!="string"||!a.bindTo)&&e.push(`compute[${s}]: missing required "bindTo" property`),(typeof a.expr!="string"||!a.expr)&&e.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):e.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))e.push("source_defs: must be an array");else {let n=new Set,s=new Set;r.source_defs.forEach((a,i)=>{if(!a||typeof a!="object"||Array.isArray(a))e.push(`source_defs[${i}]: must be an object`);else {let c=a;typeof c.bindTo!="string"||!c.bindTo?e.push(`source_defs[${i}]: missing required "bindTo" property`):(n.has(c.bindTo)&&e.push(`source_defs[${i}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?e.push(`source_defs[${i}]: missing required "outputFile" property`):(s.has(c.outputFile)&&e.push(`source_defs[${i}]: outputFile "${c.outputFile}" is not unique across source_defs`),s.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&e.push(`source_defs[${i}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))e.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?e.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,a)=>{if(!s||typeof s!="object"){e.push(`view.elements[${a}]: must be an object`);return}!s.kind||typeof s.kind!="string"?e.push(`view.elements[${a}].kind: required, must be a string`):V.has(s.kind)||e.push(`view.elements[${a}].kind: unknown kind "${s.kind}". Valid: ${[...V].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&e.push(`view.elements[${a}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&e.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&e.push("view.features: must be an object");}return {ok:e.length===0,errors:e}}async function wt(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return Promise.all(t.map(async n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[a,i]of Object.entries(n.projections))if(typeof i=="string"&&i.trim().length>0)try{s[a]=await N(i).evaluate(r);}catch{s[a]=void 0;}}return {...n,_projections:s}}))}function _t(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return t.map(n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[a,i]of Object.entries(n.projections))if(typeof i=="string"&&i.trim().length>0)try{s[a]=J(i).evaluate(r);}catch{s[a]=void 0;}}return {...n,_projections:s}})}var P={run:ht,runSync:kt,eval:yt,resolve:vt,validate:bt,enrichSources:wt,enrichSourcesSync:_t};var O={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function x(t){return t?Array.isArray(t.provides)?t.provides:[]:[]}function G(t){return t?Array.isArray(t.requires)?t.requires:[]:[]}function Y(t){return t.tasks??{}}function U(t){return t?t.status===O.FAILED||t.status===O.INACTIVATED:false}function W(t,e){return t.refreshStrategy??e?.refreshStrategy??"data-changed"}function z(t){return t.maxExecutions}function Q(t,e){let r=new Set;for(let[n,s]of Object.entries(e))if(s.status===O.COMPLETED){let a=t.tasks[n];a&&x(a).forEach(c=>r.add(c));}return Array.from(r)}function Z(t,e){let r={};return t.forEach(n=>{let s=e[n];if(!s)return;x(s).forEach(i=>{r[i]||(r[i]=[]),r[i].push(n);});}),r}function tt(t,e,r){let n=t.tasks[e]??q(),s={};if(r){let i=r.tasks[e],c=G(i);for(let p of c)for(let[h,T]of Object.entries(r.tasks))if(x(T).includes(p)){let b=t.tasks[h];b?.lastDataHash&&(s[p]=b.lastDataHash);break}}let a={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...t,tasks:{...t.tasks,[e]:a},lastUpdated:new Date().toISOString()}}function et(t,e,r,n,s,a){let i=t.tasks[r]??q(),c=e.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let p;n&&c.on&&c.on[n]?p=c.on[n]:p=x(c);let h=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let g=c.requires??[];for(let k of g)for(let[m,v]of Object.entries(e.tasks))if(x(v).includes(k)){let y=t.tasks[m];y?.lastDataHash&&(h[k]=y.lastDataHash);break}}let T={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:s,data:a,lastConsumedHashes:h,error:void 0},b=[...new Set([...t.availableOutputs,...p])];return {...t,tasks:{...t.tasks,[r]:T},availableOutputs:b,lastUpdated:new Date().toISOString()}}function rt(t,e,r,n){let s=t.tasks[r]??q(),a=e.tasks[r];if(a?.retry){let p=s.retryCount+1;if(p<=a.retry.max_attempts){let h={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:n};return {...t,tasks:{...t.tasks,[r]:h},lastUpdated:new Date().toISOString()}}}let i={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},c=t.availableOutputs;if(a?.on_failure&&a.on_failure.length>0&&(c=[...new Set([...t.availableOutputs,...a.on_failure])]),a?.circuit_breaker&&i.executionCount>=a.circuit_breaker.max_executions){let p=a.circuit_breaker.on_break;c=[...new Set([...c,...p])];}return {...t,tasks:{...t.tasks,[r]:i},availableOutputs:c,lastUpdated:new Date().toISOString()}}function nt(t,e,r,n){let s=t.tasks[e]??q(),a={...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 {...t,tasks:{...t.tasks,[e]:a},lastUpdated:new Date().toISOString()}}function st(t,e){let r=t.tasks[e];if(!r)return t;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 {...t,tasks:{...t.tasks,[e]:n},lastUpdated:new Date().toISOString()}}function q(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function ot(t,e){let r=e??`live-${Date.now()}`,n={};for(let a of Object.keys(t.tasks))n[a]=ut();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:t.settings.execution_mode??"eligibility-mode",conflictStrategy:t.settings.conflict_strategy??"alphabetical",completionStrategy:t.settings.completion}};return {config:t,state:s}}function Ct(t,e){let{config:r,state:n}=t;if("executionId"in e&&e.executionId&&e.executionId!==n.executionId)return t;switch(e.type){case "task-started":return {config:r,state:tt(n,e.taskName,r)};case "task-completed":return {config:r,state:et(n,r,e.taskName,e.result,e.dataHash,e.data)};case "task-failed":return {config:r,state:rt(n,r,e.taskName,e.error)};case "task-progress":return {config:r,state:nt(n,e.taskName,e.message,e.progress)};case "task-restart":return {config:r,state:st(n,e.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...e.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Gt(n,e.action)};case "task-upsert":return Rt(t,e.taskName,e.taskConfig);case "task-removal":return Tt(t,e.taskName);case "node-requires-add":return At(t,e.nodeName,e.tokens);case "node-requires-remove":return Et(t,e.nodeName,e.tokens);case "node-provides-add":return xt(t,e.nodeName,e.tokens);case "node-provides-remove":return Ot(t,e.nodeName,e.tokens);default:return t}}function at(t,e){return e.reduce((r,n)=>Ct(r,n),t)}function Rt(t,e,r){let n=!!t.config.tasks[e];return {config:{...t.config,tasks:{...t.config.tasks,[e]:r}},state:{...t.state,tasks:{...t.state.tasks,[e]:n?t.state.tasks[e]:ut()},lastUpdated:new Date().toISOString()}}}function Tt(t,e){if(!t.config.tasks[e])return t;let{[e]:r,...n}=t.config.tasks,{[e]:s,...a}=t.state.tasks;return {config:{...t.config,tasks:n},state:{...t.state,tasks:a,lastUpdated:new Date().toISOString()}}}function At(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=G(n),a=r.filter(i=>!s.includes(i));return a.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:[...s,...a]}}},state:t.state}}function Et(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=G(n),a=s.filter(i=>!r.includes(i));return a.length===s.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:a}}},state:t.state}}function xt(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=x(n),a=r.filter(i=>!s.includes(i));return a.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:[...s,...a]}}},state:t.state}}function Ot(t,e,r){let n=t.config.tasks[e];if(!n)return t;let s=x(n),a=s.filter(i=>!r.includes(i));return a.length===s.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:a}}},state:t.state}}function it(t){return {version:1,config:t.config,state:t.state,snapshotAt:new Date().toISOString()}}function ut(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Gt(t,e){let r=new Date().toISOString();switch(e){case "stop":return {...t,status:"stopped",lastUpdated:r};case "pause":return {...t,status:"paused",lastUpdated:r};case "resume":return {...t,status:"running",lastUpdated:r};default:return t}}function B(t){let{config:e,state:r}=t,n=Y(e);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let a=jt(n),i=Q(e,r.tasks),c=new Set([...i,...r.availableOutputs]),p=[],h=[],T=[],b=[];for(let[k,m]of Object.entries(n)){let v=r.tasks[k],y=W(m,e.settings),A=y!=="once";if(v?.status===O.RUNNING||U(v))continue;let D=z(m);if(D!==void 0&&v&&v.executionCount>=D||m.circuit_breaker&&v&&v.executionCount>=m.circuit_breaker.max_executions||!A&&v?.status===O.COMPLETED)continue;if(A&&v?.status===O.COMPLETED){let f=G(m),u=false;switch(y){case "data-changed":{f.length>0&&f.some(C=>{for(let[_,E]of Object.entries(n))if(x(E).includes(C)){let R=r.tasks[_];if(!R)continue;let L=v.lastConsumedHashes?.[C];return R.lastDataHash==null?R.executionCount>v.lastEpoch:R.lastDataHash!==L}return false})||(u=true);break}case "epoch-changed":{f.length>0&&f.some(C=>{for(let[_,E]of Object.entries(n))if(x(E).includes(C)){let R=r.tasks[_];if(R&&R.executionCount>v.lastEpoch)return true}return false})||(u=true);break}case "time-based":{let w=m.refreshInterval??0;if(w<=0){u=true;break}let C=v.completedAt;if(!C){u=true;break}(Date.now()-Date.parse(C))/1e3<w&&(u=true);break}case "manual":u=true;break}if(u)continue}let o=G(m);if(o.length===0){p.push(k);continue}let d=[],l=[],S=[];for(let f of o){if(c.has(f))continue;let u=a[f]||[];u.length===0?d.push(f):u.every(C=>U(r.tasks[C]))?S.push({token:f,failedProducer:u[0]}):l.push(f);}d.length>0?T.push({taskName:k,missingTokens:d}):S.length>0?b.push({taskName:k,failedTokens:S.map(f=>f.token),failedProducers:[...new Set(S.map(f=>f.failedProducer))]}):l.length>0?h.push({taskName:k,waitingOn:l}):p.push(k);}let g={};if(p.length>1){let k=Z(p,n);for(let[m,v]of Object.entries(k))v.length>1&&(g[m]=v);}return {eligible:p,pending:h,unresolved:T,blocked:b,conflicts:g}}function jt(t){let e={};for(let[r,n]of Object.entries(t)){for(let s of x(n))e[s]||(e[s]=[]),e[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let a of s)e[a]||(e[a]=[]),e[a].includes(r)||e[a].push(r);if(n.on_failure)for(let s of n.on_failure)e[s]||(e[s]=[]),e[s].includes(r)||e[s].push(r);}return e}var I=class{buffer=[];append(e){this.buffer.push(e);}drain(){let e=this.buffer;return this.buffer=[],e}get size(){return this.buffer.length}};function F(t){let e=$(t);return Dt(e)}function $(t){if(t==null||typeof t!="object")return JSON.stringify(t);if(Array.isArray(t))return "["+t.map($).join(",")+"]";let e=t;return "{"+Object.keys(e).sort().map(n=>JSON.stringify(n)+":"+$(e[n])).join(",")+"}"}function Dt(t){let e=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<t.length;s++)e^=BigInt(t.charCodeAt(s)),e=e*r&n;return e.toString(16).padStart(16,"0")}function It(t){if(typeof Buffer<"u")return Buffer.from(t,"utf8").toString("base64url");if(typeof btoa=="function"){let e=new TextEncoder().encode(t),r="";for(let n of e)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function Lt(t){if(typeof Buffer<"u")return Buffer.from(t,"base64url").toString("utf8");if(typeof atob=="function"){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),n=atob(r),s=new Uint8Array(n.length);for(let a=0;a<n.length;a++)s[a]=n.charCodeAt(a);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function ct(t){let e=JSON.stringify({t,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return It(e)}function Nt(t){try{let e=JSON.parse(Lt(t));return typeof e?.t=="string"?{taskName:e.t}:null}catch{return null}}function dt(t,e,r){let{handlers:n,onNodeRemoved:s,onDrain:a}=e,i=new I,c="state"in t&&"config"in t?t:ot(t,r),p=false,h=new Set,T=new Map(Object.entries(n)),b=new I,g=false,k=false;function m(){if(!p){if(g){k=true;return}g=true;try{do k=!1,v();while(k)}finally{g=false;}}}function v(){let o=b.drain(),d=i.drain(),l=[...o,...d];if(l.length>0&&(c=at(c,l),s)){for(let f of l)if(f.type==="task-removal")try{s(f.taskName);}catch(u){console.warn("[reactive] onNodeRemoved failed:",u instanceof Error?u.message:String(u));}}let S=B(c);l.length>0&&a?.(l,c,S);for(let f of S.eligible)D(f);for(let f of l)if(f.type==="task-progress"){let{taskName:u,update:w}=f;if(!c.config.tasks[u])continue;let _=c.state.tasks[u];if(!_||_.status!=="running")continue;let E=ct(u),R=A(u,E,w).catch(L=>{p||(b.append({type:"task-failed",taskName:u,error:L.message??String(L),timestamp:new Date().toISOString()}),m());}).finally(()=>{h.delete(R);});h.add(R);}}function y(o){let l=c.config.tasks[o].requires??[],S=new Map;for(let[u,w]of Object.entries(c.config.tasks))for(let C of w.provides??[])S.set(C,u);let f={};for(let u of l){let w=S.get(u);w?f[u]=c.state.tasks[w]?.data:f[u]=void 0;}return f}async function A(o,d,l){let S=c.config.tasks[o],f=S.taskHandlers??[],u=y(o);for(let w of f){let C=T.get(w);if(!C)throw new Error(`Handler '${w}' not found in registry (task '${o}')`);let _={nodeId:o,state:u,taskState:c.state.tasks[o],config:S,callbackToken:d,update:l};if(await C(_)==="task-initiate-failure")throw new Error(`Handler '${w}' returned task-initiate-failure (task '${o}')`)}}function D(o){let l=c.config.tasks[o]?.taskHandlers;if(!l||l.length===0)return;b.append({type:"task-started",taskName:o,timestamp:new Date().toISOString()}),m();let S=ct(o),f=A(o,S).catch(u=>{p||(b.append({type:"task-failed",taskName:o,error:u.message??String(u),timestamp:new Date().toISOString()}),m());}).finally(()=>{h.delete(f);});h.add(f);}return {push(o){p||(o.type==="task-completed"&&o.data&&!o.dataHash&&(o={...o,dataHash:F(o.data)}),i.append(o),m());},pushAll(o){if(!p){for(let d of o)d.type==="task-completed"&&d.data&&!d.dataHash?i.append({...d,dataHash:F(d.data)}):i.append(d);m();}},resolveCallback(o,d,l){if(p)return;let S=Nt(o);if(!S)return;let{taskName:f}=S;if(c.config.tasks[f]){if(l&&l.length>0)i.append({type:"task-failed",taskName:f,error:l.join("; "),timestamp:new Date().toISOString()});else {let u=d&&Object.keys(d).length>0?F(d):void 0;i.append({type:"task-completed",taskName:f,data:d,dataHash:u,timestamp:new Date().toISOString()});}m();}},addNode(o,d){p||(i.append({type:"task-upsert",taskName:o,taskConfig:d,timestamp:new Date().toISOString()}),m());},removeNode(o){p||(i.append({type:"task-removal",taskName:o,timestamp:new Date().toISOString()}),m());},addRequires(o,d){p||(i.append({type:"node-requires-add",nodeName:o,tokens:d,timestamp:new Date().toISOString()}),m());},removeRequires(o,d){p||(i.append({type:"node-requires-remove",nodeName:o,tokens:d,timestamp:new Date().toISOString()}),m());},addProvides(o,d){p||(i.append({type:"node-provides-add",nodeName:o,tokens:d,timestamp:new Date().toISOString()}),m());},removeProvides(o,d){p||(i.append({type:"node-provides-remove",nodeName:o,tokens:d,timestamp:new Date().toISOString()}),m());},registerHandler(o,d){T.set(o,d);},unregisterHandler(o){T.delete(o);},retrigger(o){p||c.config.tasks[o]&&(i.append({type:"task-restart",taskName:o,timestamp:new Date().toISOString()}),m());},retriggerAll(o){if(!p){for(let d of o)c.config.tasks[d]&&i.append({type:"task-restart",taskName:d,timestamp:new Date().toISOString()});m();}},snapshot(){return it(c)},getState(){return c},getSchedule(){return B(c)},async waitForHandlers(){h.size>0&&await Promise.allSettled([...h]);},async dispose(o){o?.wait&&h.size>0&&await Promise.allSettled([...h]),p=true;}}}function j(t){return JSON.parse(JSON.stringify(t))}function M(t){let e=t.provides&&t.provides.length>0?t.provides.map(r=>r.bindTo):[t.id];return {requires:t.requires&&t.requires.length>0?[...t.requires]:void 0,provides:e,taskHandlers:[t.id],description:t.meta?.title??t.id}}function qt(t){let e=new Map;for(let[r,n]of t.entries()){let s=n.provides&&n.provides.length>0?n.provides:[{bindTo:r,ref:"card_data"}];for(let a of s)e.set(a.bindTo,r);}return e}function H(t,e){let r=qt(t),n=t.get(e);if(n){for(let s of n.requires??[])if(!r.has(s))throw new Error(`Card "${e}" requires token "${s}" but no card provides it`)}}var ke={CARD_PREFIX:"yf:cards:",RUNTIME_OUT_PREFIX:"yf:runtime-out:cards:",STATUS_KEY:"yf:runtime-out:status",writeCard(t,e){try{localStorage.setItem(this.CARD_PREFIX+t,JSON.stringify(e));}catch(r){console.warn(`Failed to write card ${t} to localStorage:`,r);}},readCard(t){try{let e=localStorage.getItem(this.CARD_PREFIX+t);return e?JSON.parse(e):null}catch(e){return console.warn(`Failed to read card ${t} from localStorage:`,e),null}},readAllCards(t){let e={};for(let r of t){let n=this.readCard(r);n&&(e[r]=n);}return e},writeComputedArtifact(t){if(!(!t||!t.card_id))try{localStorage.setItem(this.RUNTIME_OUT_PREFIX+String(t.card_id),JSON.stringify(t));}catch(e){console.warn(`Failed to write computed artifact ${t.card_id}:`,e);}},readComputedArtifact(t){try{let e=localStorage.getItem(this.RUNTIME_OUT_PREFIX+t);return e?JSON.parse(e):null}catch(e){return console.warn(`Failed to read computed artifact ${t}:`,e),null}},readAllComputedArtifacts(t){let e={};for(let r of t){let n=this.readComputedArtifact(r);n&&(e[r]=n);}return e},writeStatusSnapshot(t){try{localStorage.setItem(this.STATUS_KEY,JSON.stringify(t));}catch(e){console.warn("Failed to write status snapshot to localStorage:",e);}},readStatusSnapshot(){try{let t=localStorage.getItem(this.STATUS_KEY);return t?JSON.parse(t):null}catch(t){return console.warn("Failed to read status snapshot from localStorage:",t),null}},clear(){let t=[];for(let e=0;e<localStorage.length;e++){let r=localStorage.key(e);r&&(r.startsWith(this.CARD_PREFIX)||r.startsWith(this.RUNTIME_OUT_PREFIX)||r===this.STATUS_KEY)&&t.push(r);}for(let e of t)localStorage.removeItem(e);}};function ye(t,e={}){let r=Array.isArray(t)?{}:{id:t.id,title:t.title,mode:t.mode,positions:t.positions,settings:t.settings},n=Array.isArray(t)?t:t.nodes,s=new Map;for(let o of n){if(s.has(o.id))throw new Error(`Duplicate card ID: "${o.id}"`);s.set(o.id,j(o));}let a=new Set,i=e.taskExecutor,c=e.sourceAdapters??{},p=e.defaultSourceAdapter,h=null,T=(o,d)=>{let l={events:o,graph:d,nodes:A()};for(let S of a)S(l);},b=o=>async d=>{let l=s.get(o);if(!l)return "task-initiate-failure";let S={};for(let _ of l.requires??[]){let E=d.state[_];if(!E||typeof E!="object")continue;let R=E.provides_data;!R||typeof R!="object"||Object.prototype.hasOwnProperty.call(R,_)&&(S[_]=R[_]);}let f={};if(l.source_defs&&l.source_defs.length>0){let _=c[o]??p,E=i?await i({card:l,input:d}):_?await _({card:l,input:d}):void 0;if(E&&typeof E=="object")for(let R of l.source_defs)Object.prototype.hasOwnProperty.call(E,R.bindTo)?f[R.bindTo]=E[R.bindTo]:l.source_defs.length===1&&(f[R.bindTo]=E);}let u={id:l.id,card_data:j(l.card_data??{}),requires:S,source_defs:l.source_defs,compute:l.compute};u._sourcesData=f,u.compute&&u.compute.length>0&&await P.run(u,{sourcesData:f});let w={};if(l.provides&&l.provides.length>0)for(let{bindTo:_,ref:E}of l.provides)w[_]=P.resolve(u,E);else w[l.id]={...u.card_data??{},...u.computed_values??{},...u._sourcesData??{}};let C={provides_data:w,card_data:u.card_data??{},computed_values:u.computed_values??{},fetched_sources:f,requires:S};return h?.resolveCallback(d.callbackToken,C),"task-initiated"},g={},k={};for(let[o,d]of s.entries())H(s,o),g[o]=M(d),k[o]=b(o);let m={id:r.id??`browser-board-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...r.settings??{},...e.graphSettings??{}},tasks:g},v=e.reactiveOptions?.onDrain,y=dt(m,{...e.reactiveOptions??{},handlers:k,onDrain:(o,d,l)=>{v?.(o,d,l),T(o,d);}},e.executionId);h=y;function A(){let o=y.getState(),d=[];for(let[l,S]of s.entries()){let f=o.state.tasks[l]?.data,u=o.state.tasks[l],w={...S.card_data??{},...f&&typeof f.card_data=="object"?f.card_data:{}},C=u?.status==="running"?"loading":u?.status,_={...w,...C?{status:C}:{},...u?.lastUpdated?{lastRun:u.lastUpdated}:{},...u?.status==="failed"&&u.error?{error:u.error}:{}};d.push({id:l,card:j(S),card_data:_,requires:f&&typeof f.requires=="object"?j(f.requires):{},computed_values:f&&typeof f.computed_values=="object"?j(f.computed_values):{},runtime_state:u?j(u):{}});}return d}return {getGraph:()=>y,getState:()=>y.getState(),getSchedule:()=>y.getSchedule(),getNodes:()=>A(),getBoard:()=>({...r,nodes:A()}),subscribe(o){return a.add(o),o({events:[],graph:y.getState(),nodes:A()}),()=>a.delete(o)},addCard(o){if(s.has(o.id))throw new Error(`Card "${o.id}" already exists`);s.set(o.id,j(o)),H(s,o.id),y.registerHandler(o.id,b(o.id)),y.addNode(o.id,M(o));},upsertCard(o){s.set(o.id,j(o)),H(s,o.id),y.registerHandler(o.id,b(o.id)),y.addNode(o.id,M(o));},removeCard(o){s.delete(o),y.unregisterHandler(o),y.removeNode(o);},patchCardState(o,d){let l=s.get(o);if(!l)throw new Error(`Card "${o}" not found`);l.card_data={...l.card_data??{},...d},y.retrigger(o);},retrigger(o){y.retrigger(o);},retriggerAll(){y.retriggerAll(Array.from(s.keys()));},push(o){y.push(o);},pushAll(o){y.pushAll(o);},dispose(){a.clear(),y.dispose();}}}function pt(t){return t==="running"||t==="in-progress"?"loading":t==="failed"?"error":"fresh"}function Pt(t){return t==="loading"?"in-progress":t==="error"?"failed":t==="stale"?"pending":t==="fresh"?"completed":"pending"}function Ut(t,e){let r=e&&typeof e=="object"&&!Array.isArray(e)?e:{};return {schema_version:r.schema_version||"v1",card_id:typeof r.card_id=="string"?r.card_id:t,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 Bt(t,e){if(!t||typeof t!="object")throw new Error("payload must be an object");if(!e)throw new Error("cardId is required");let n=(Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).find(o=>o.id===e);if(!n)throw new Error(`cardDefinitions has no entry with id ${e}`);let s=t.statusSnapshot&&typeof t.statusSnapshot=="object"?t.statusSnapshot:{},a=t.cardRuntimeById&&typeof t.cardRuntimeById=="object"?t.cardRuntimeById:{},i=t.dataObjectsByToken&&typeof t.dataObjectsByToken=="object"?t.dataObjectsByToken:{},p=(Array.isArray(s.cards)?s.cards:[]).find(o=>o.name===e),h=structuredClone(n),T=Ut(e,a[e]),g={...h.card_data&&typeof h.card_data=="object"&&!Array.isArray(h.card_data)?h.card_data:{},...T.card_data||{},status:pt(p?.status),lastRun:p?.runtime?.last_transition_at??null};p?.error?.message&&(g.error=p.error.message);let k=p?{task_status:p.status??null,card_status:pt(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:g.status??"fresh",runtime:{last_transition_at:g.lastRun??null},error:g.error?{message:g.error}:null,blocked_by:[],requires_missing:[]},m=Array.isArray(h.requires)?h.requires:[],v={};for(let[o,d]of Object.entries(i))v[o]=structuredClone(d);for(let o of m)Object.prototype.hasOwnProperty.call(v,o)||(v[o]=null);let A=(t.cardChatsByCardId&&typeof t.cardChatsByCardId=="object"?t.cardChatsByCardId:{})[e],D=A?{messages:Array.isArray(A.messages)?A.messages:[],receiving:!!A.receiving,processing:!!A.processing}:null;return {id:e,card:h,card_data:g,requires:v,computed_values:T.computed_values,runtime_state:k,card_chats:D}}function ve(t){if(!t||typeof t!="object")throw new Error("payload must be an object");return (Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).map(r=>Bt(t,r.id))}function Se({boardPath:t,cardDefinitions:e,runtimeModels:r,graphState:n}){let s=Array.isArray(e)?e:[],a=Array.isArray(r)?r:[],i=new Map(a.map(g=>[g.id,g])),p=n.state?.tasks??{},h={};for(let g of a)g?.id&&(h[g.id]={schema_version:"v1",card_id:g.id,card_data:structuredClone(g.card_data??{}),computed_values:structuredClone(g.computed_values??{})});let T={};for(let g of Object.keys(p)){let k=p[g]?.data?.provides_data;if(k&&typeof k=="object")for(let m of Object.keys(k))T[m]=structuredClone(k[m]);}let b=s.map(g=>{let k=i.get(g.id)??{},m=p[g.id],v=typeof m?.status=="string"?m.status:Pt(k.card_data?.status),y=typeof m?.error=="string"?m.error:typeof k.card_data?.error=="string"?k.card_data.error:null;return {name:g.id,status:v,...y?{error:{message:y,code:"TASK_FAILED",at:m?.failedAt??null,source:"browser-runtime"}}:{},requires:Array.isArray(g.requires)?g.requires:[],requires_satisfied:[],requires_missing:[],provides_declared:Array.isArray(g.provides)?g.provides.map(A=>A.bindTo):[g.id],provides_runtime:Object.keys(m?.data?.provides_data??{}).sort(),blocked_by:[],unblocks:[],runtime:{attempt_count:m?.executionCount??0,restart_count:m?.retryCount??0,in_progress_since:v==="in-progress"?m?.startedAt??null:null,last_transition_at:m?.lastUpdated??k.card_data?.lastRun??null,last_completed_at:m?.completedAt??null,last_restarted_at:m?.startedAt??null,status_age_ms:null}}});return {cardDefinitions:structuredClone(s),cardRuntimeById:h,dataObjectsByToken:T,statusSnapshot:{schema_version:"v1",meta:{board:{path:t??"browser-runtime"}},summary:{card_count:b.length,completed:b.filter(g=>g.status==="completed").length,eligible:0,pending:b.filter(g=>g.status==="pending").length,blocked:0,unresolved:0,failed:b.filter(g=>g.status==="failed").length,in_progress:b.filter(g=>g.status==="in-progress").length,orphan_cards:0,topology:{edge_count:0,max_fan_out_card:null,max_fan_out:0}},cards:b}}}
|
|
2
2
|
export{ke as LocalStorageService,Se as buildBrowserArtifactsFromRuntime,ye as createBoardLiveGraphRuntime,ve as selectAllLiveCardModels,Bt as selectLiveCardModel};//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';function
|
|
1
|
+
'use strict';function y(d){function s(a){return {status:"success",data:a}}function t(a){return {status:"fail",error:a}}function o(a){return {status:"error",error:a instanceof Error?a.message:String(a)}}function m(a){if(Array.isArray(a))return a;if(a&&typeof a=="object"){let r=a;return Array.isArray(r.files)?r.files:[a]}return null}return {get(a){try{let r=a.params?.id;if(r){let n=d.readCard(r);return n?s({cards:[n]}):t(`card "${r}" not found`)}return s({cards:d.readAllCards()})}catch(r){return o(r)}},set(a){try{let r=a.body;if(r==null)return t("set requires a body (card object or array of cards)");let n=Array.isArray(r)?r:[r];for(let e of n){if(typeof e.id!="string")return t("each card must have a string `id` field");d.writeCard(e.id,e);}return s({count:n.length})}catch(r){return o(r)}},del(a){try{let r=a.body?.ids??[],n=a.params?.id,e=n?[...r,n]:r;if(e.length===0)return t("del requires body.ids (string[]) or params.id");for(let i of e)d.removeCard(i);return s({count:e.length})}catch(r){return o(r)}},patch(a){try{let r=a.params?.id,n=a.params?.path;if(!r)return t("patch requires params.id");if(!n)return t("patch requires params.path");let e=a.body,i=e&&Object.prototype.hasOwnProperty.call(e,"value")?e.value:a.body;return d.patchCard(r,n,i),s({count:1})}catch(r){return o(r)}},appendFiles(a){try{let r=a.params?.id;if(!r)return t("appendFiles requires params.id");let n=d.readCard(r);if(!n)return t(`card "${r}" not found`);let e=m(a.body);if(!e||e.length===0)return t("appendFiles requires a file metadata object, array, or body.files array");let i=n.card_data&&typeof n.card_data=="object"&&!Array.isArray(n.card_data)?n.card_data:{},u=Array.isArray(i.files)?i.files:[],l=[...u,...e],f=e.map((p,C)=>({idx:u.length+C,entry:p})),c=this.patch({params:{id:r,path:"card_data.files"},body:{value:l}});return c.status!=="success"?c:s({files_added:f})}catch(r){return o(r)}}}}exports.createCardStorePublic=y;//# sourceMappingURL=card-store-public.cjs.map
|
|
2
2
|
//# sourceMappingURL=card-store-public.cjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as CommandInput, a as CommandResult, L as LiveCard, b as CardAdminStore } from './board-live-cards-public-
|
|
1
|
+
import { C as CommandInput, a as CommandResult, L as LiveCard, b as CardAdminStore } from './board-live-cards-public-B4RcYPC_.cjs';
|
|
2
2
|
import './storage-interface-B2WD9D5n.cjs';
|
|
3
3
|
import './execution-refs.cjs';
|
|
4
4
|
import './types-BBhqYGhE.cjs';
|
|
@@ -55,6 +55,17 @@ interface CardStorePublic {
|
|
|
55
55
|
patch(input: CommandInput): CommandResult<{
|
|
56
56
|
count: number;
|
|
57
57
|
}>;
|
|
58
|
+
/**
|
|
59
|
+
* Append one or more file metadata objects to card_data.files.
|
|
60
|
+
* params.id: string
|
|
61
|
+
* body: file metadata object, array of file metadata objects, or { files: [...] }
|
|
62
|
+
*/
|
|
63
|
+
appendFiles(input: CommandInput): CommandResult<{
|
|
64
|
+
files_added: Array<{
|
|
65
|
+
idx: number;
|
|
66
|
+
entry: unknown;
|
|
67
|
+
}>;
|
|
68
|
+
}>;
|
|
58
69
|
}
|
|
59
70
|
declare function createCardStorePublic(store: CardAdminStore): CardStorePublic;
|
|
60
71
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as CommandInput, a as CommandResult, L as LiveCard, b as CardAdminStore } from './board-live-cards-public-
|
|
1
|
+
import { C as CommandInput, a as CommandResult, L as LiveCard, b as CardAdminStore } from './board-live-cards-public-ydXuA4zh.js';
|
|
2
2
|
import './storage-interface-B2WD9D5n.js';
|
|
3
3
|
import './execution-refs.js';
|
|
4
4
|
import './types-BBhqYGhE.js';
|
|
@@ -55,6 +55,17 @@ interface CardStorePublic {
|
|
|
55
55
|
patch(input: CommandInput): CommandResult<{
|
|
56
56
|
count: number;
|
|
57
57
|
}>;
|
|
58
|
+
/**
|
|
59
|
+
* Append one or more file metadata objects to card_data.files.
|
|
60
|
+
* params.id: string
|
|
61
|
+
* body: file metadata object, array of file metadata objects, or { files: [...] }
|
|
62
|
+
*/
|
|
63
|
+
appendFiles(input: CommandInput): CommandResult<{
|
|
64
|
+
files_added: Array<{
|
|
65
|
+
idx: number;
|
|
66
|
+
entry: unknown;
|
|
67
|
+
}>;
|
|
68
|
+
}>;
|
|
58
69
|
}
|
|
59
70
|
declare function createCardStorePublic(store: CardAdminStore): CardStorePublic;
|
|
60
71
|
|
package/lib/card-store-public.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
1
|
+
function y(d){function s(a){return {status:"success",data:a}}function t(a){return {status:"fail",error:a}}function o(a){return {status:"error",error:a instanceof Error?a.message:String(a)}}function m(a){if(Array.isArray(a))return a;if(a&&typeof a=="object"){let r=a;return Array.isArray(r.files)?r.files:[a]}return null}return {get(a){try{let r=a.params?.id;if(r){let n=d.readCard(r);return n?s({cards:[n]}):t(`card "${r}" not found`)}return s({cards:d.readAllCards()})}catch(r){return o(r)}},set(a){try{let r=a.body;if(r==null)return t("set requires a body (card object or array of cards)");let n=Array.isArray(r)?r:[r];for(let e of n){if(typeof e.id!="string")return t("each card must have a string `id` field");d.writeCard(e.id,e);}return s({count:n.length})}catch(r){return o(r)}},del(a){try{let r=a.body?.ids??[],n=a.params?.id,e=n?[...r,n]:r;if(e.length===0)return t("del requires body.ids (string[]) or params.id");for(let i of e)d.removeCard(i);return s({count:e.length})}catch(r){return o(r)}},patch(a){try{let r=a.params?.id,n=a.params?.path;if(!r)return t("patch requires params.id");if(!n)return t("patch requires params.path");let e=a.body,i=e&&Object.prototype.hasOwnProperty.call(e,"value")?e.value:a.body;return d.patchCard(r,n,i),s({count:1})}catch(r){return o(r)}},appendFiles(a){try{let r=a.params?.id;if(!r)return t("appendFiles requires params.id");let n=d.readCard(r);if(!n)return t(`card "${r}" not found`);let e=m(a.body);if(!e||e.length===0)return t("appendFiles requires a file metadata object, array, or body.files array");let i=n.card_data&&typeof n.card_data=="object"&&!Array.isArray(n.card_data)?n.card_data:{},u=Array.isArray(i.files)?i.files:[],l=[...u,...e],f=e.map((p,C)=>({idx:u.length+C,entry:p})),c=this.patch({params:{id:r,path:"card_data.files"},body:{value:l}});return c.status!=="success"?c:s({files_added:f})}catch(r){return o(r)}}}}export{y as createCardStorePublic};//# sourceMappingURL=card-store-public.js.map
|
|
2
2
|
//# sourceMappingURL=card-store-public.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';function
|
|
1
|
+
'use strict';function g(d){function l(r){let t=typeof r=="number"?r:Number(r);return Number.isInteger(t)&&t>0?t:null}function C(r,t){let n=t;for(let e=r.length-1;e>=0;e-=1)if(r[e]?.role==="user"&&(n-=1,n===0))return r.slice(e);return r}function s(r){return {status:"success",data:r}}function a(r){return {status:"fail",error:r}}function u(r){return {status:"error",error:r instanceof Error?r.message:String(r)}}function i(r,t="command envelope"){let n=typeof r.cardId=="string"?r.cardId:void 0;if(!r.command)return a(`chat-store: ${t} missing "command"`);if(!n)return a(`chat-store: ${t} missing "cardId"`);if(r.command==="append")return o.append({params:{cardId:n},body:{role:r.role,text:r.text,files:r.files}});if(r.command==="read-all")return o.readAll({params:{cardId:n},body:{lastUserTurns:r.lastUserTurns}});if(r.command==="read-after")return o.readAfter({params:{cardId:n},body:{cursor:r.cursor??null}});if(r.command==="clear")return o.clear({params:{cardId:n}});if(r.command==="set-processing")return o.setProcessing({params:{cardId:n},body:{active:r.active}});if(r.command==="is-processing")return o.isProcessing({params:{cardId:n}});if(r.command==="get-config")return o.getConfig({params:{cardId:n}});if(r.command==="set-config"){let{command:e,cardId:m,...c}=r;return o.setConfig({params:{cardId:n},body:c})}return a(`chat-store: unknown command "${String(r.command)}"`)}function f(r){if(!Array.isArray(r.commands)||r.commands.length===0)return a('chat-store: command envelope must include a non-empty "commands" array');let t=[];for(let n=0;n<r.commands.length;n+=1){let e=r.commands[n];if(!e||typeof e!="object"||Array.isArray(e))return a(`chat-store: command envelope entry ${n} must be an object`);let m={cardId:r.cardId,...e},c=i(m,`command envelope entry ${n}`);if(c.status!=="success")return c;t.push({index:n,command:String(m.command),data:c.data});}return s({results:t})}let o={append(r){try{let t=r.params?.cardId;if(!t)return a("append requires params.cardId");let n=r.body??{},e=typeof n.role=="string"?n.role:"",m=typeof n.text=="string"?n.text:"",c=Array.isArray(n.files)?n.files:[];if(!e)return a("append requires body.role");let p=d.append(t,e,m,c);return s({id:p})}catch(t){return u(t)}},readAll(r){try{let t=r.params?.cardId;if(!t)return a("readAll requires params.cardId");let n=r.body??{},e=d.readAll(t);if(n.lastUserTurns===void 0)return s({records:e});let m=l(n.lastUserTurns);return m===null?a("readAll requires body.lastUserTurns (positive integer)"):s({records:C(e,m)})}catch(t){return u(t)}},readAfter(r){try{let t=r.params?.cardId;if(!t)return a("readAfter requires params.cardId");let e=(r.body??{}).cursor??null;return s(d.readAfter(t,e))}catch(t){return u(t)}},clear(r){try{let t=r.params?.cardId;return t?(d.clear(t),s({ok:!0})):a("clear requires params.cardId")}catch(t){return u(t)}},setProcessing(r){try{let t=r.params?.cardId;if(!t)return a("setProcessing requires params.cardId");let n=r.body??{};return typeof n.active!="boolean"?a("setProcessing requires body.active (boolean)"):(d.setProcessing(t,n.active),s({ok:!0}))}catch(t){return u(t)}},isProcessing(r){try{let t=r.params?.cardId;return t?s({active:d.isProcessing(t)}):a("isProcessing requires params.cardId")}catch(t){return u(t)}},getConfig(r){try{let t=r.params?.cardId;return t?s({config:d.getConfig(t)}):a("getConfig requires params.cardId")}catch(t){return u(t)}},setConfig(r){try{let t=r.params?.cardId;if(!t)return a("setConfig requires params.cardId");let n=r.body??{};return d.setConfig(t,n),s({ok:!0})}catch(t){return u(t)}},run:i,runBatch:f};return o}exports.createChatStorePublic=g;//# sourceMappingURL=chat-store-public.cjs.map
|
|
2
2
|
//# sourceMappingURL=chat-store-public.cjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as CommandInput, a as CommandResult } from './board-live-cards-public-
|
|
1
|
+
import { C as CommandInput, a as CommandResult } from './board-live-cards-public-B4RcYPC_.cjs';
|
|
2
2
|
import { C as ChatRecord, a as ChatReadAfterResult, b as ChatConfig, c as ChatStorage } from './chat-storage-lib-B1wU27y3.cjs';
|
|
3
3
|
import './storage-interface-B2WD9D5n.cjs';
|
|
4
4
|
import './execution-refs.cjs';
|
|
@@ -20,6 +20,7 @@ import './types-BBhqYGhE.cjs';
|
|
|
20
20
|
* const store = createChatStorePublic(createFsBoardChatStorage(parseRef(storeRef).value));
|
|
21
21
|
* const result = store.append({ params: { cardId: 'c1' }, body: { role: 'user', text: 'hello' } });
|
|
22
22
|
* const result = store.readAll({ params: { cardId: 'c1' } });
|
|
23
|
+
* const result = store.readAll({ params: { cardId: 'c1' }, body: { lastUserTurns: 5 } });
|
|
23
24
|
* const result = store.readAfter({ params: { cardId: 'c1', cursor: '<id>' } });
|
|
24
25
|
* const result = store.clear({ params: { cardId: 'c1' } });
|
|
25
26
|
* const result = store.setProcessing({ params: { cardId: 'c1' }, body: { active: true } });
|
|
@@ -35,6 +36,7 @@ type ChatStoreCommandEnvelope = {
|
|
|
35
36
|
role?: unknown;
|
|
36
37
|
text?: unknown;
|
|
37
38
|
files?: unknown;
|
|
39
|
+
lastUserTurns?: unknown;
|
|
38
40
|
cursor?: unknown;
|
|
39
41
|
active?: unknown;
|
|
40
42
|
[key: string]: unknown;
|
|
@@ -62,8 +64,9 @@ interface ChatStorePublic {
|
|
|
62
64
|
id: string;
|
|
63
65
|
}>;
|
|
64
66
|
/**
|
|
65
|
-
|
|
67
|
+
* Read all messages for a card in insertion order.
|
|
66
68
|
* params.cardId: string
|
|
69
|
+
* body.lastUserTurns?: positive integer
|
|
67
70
|
*/
|
|
68
71
|
readAll(input: CommandInput): CommandResult<{
|
|
69
72
|
records: ChatRecord[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as CommandInput, a as CommandResult } from './board-live-cards-public-
|
|
1
|
+
import { C as CommandInput, a as CommandResult } from './board-live-cards-public-ydXuA4zh.js';
|
|
2
2
|
import { C as ChatRecord, a as ChatReadAfterResult, b as ChatConfig, c as ChatStorage } from './chat-storage-lib-DsF4kPon.js';
|
|
3
3
|
import './storage-interface-B2WD9D5n.js';
|
|
4
4
|
import './execution-refs.js';
|
|
@@ -20,6 +20,7 @@ import './types-BBhqYGhE.js';
|
|
|
20
20
|
* const store = createChatStorePublic(createFsBoardChatStorage(parseRef(storeRef).value));
|
|
21
21
|
* const result = store.append({ params: { cardId: 'c1' }, body: { role: 'user', text: 'hello' } });
|
|
22
22
|
* const result = store.readAll({ params: { cardId: 'c1' } });
|
|
23
|
+
* const result = store.readAll({ params: { cardId: 'c1' }, body: { lastUserTurns: 5 } });
|
|
23
24
|
* const result = store.readAfter({ params: { cardId: 'c1', cursor: '<id>' } });
|
|
24
25
|
* const result = store.clear({ params: { cardId: 'c1' } });
|
|
25
26
|
* const result = store.setProcessing({ params: { cardId: 'c1' }, body: { active: true } });
|
|
@@ -35,6 +36,7 @@ type ChatStoreCommandEnvelope = {
|
|
|
35
36
|
role?: unknown;
|
|
36
37
|
text?: unknown;
|
|
37
38
|
files?: unknown;
|
|
39
|
+
lastUserTurns?: unknown;
|
|
38
40
|
cursor?: unknown;
|
|
39
41
|
active?: unknown;
|
|
40
42
|
[key: string]: unknown;
|
|
@@ -62,8 +64,9 @@ interface ChatStorePublic {
|
|
|
62
64
|
id: string;
|
|
63
65
|
}>;
|
|
64
66
|
/**
|
|
65
|
-
|
|
67
|
+
* Read all messages for a card in insertion order.
|
|
66
68
|
* params.cardId: string
|
|
69
|
+
* body.lastUserTurns?: positive integer
|
|
67
70
|
*/
|
|
68
71
|
readAll(input: CommandInput): CommandResult<{
|
|
69
72
|
records: ChatRecord[];
|
package/lib/chat-store-public.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
1
|
+
function g(d){function l(r){let t=typeof r=="number"?r:Number(r);return Number.isInteger(t)&&t>0?t:null}function C(r,t){let n=t;for(let e=r.length-1;e>=0;e-=1)if(r[e]?.role==="user"&&(n-=1,n===0))return r.slice(e);return r}function s(r){return {status:"success",data:r}}function a(r){return {status:"fail",error:r}}function u(r){return {status:"error",error:r instanceof Error?r.message:String(r)}}function i(r,t="command envelope"){let n=typeof r.cardId=="string"?r.cardId:void 0;if(!r.command)return a(`chat-store: ${t} missing "command"`);if(!n)return a(`chat-store: ${t} missing "cardId"`);if(r.command==="append")return o.append({params:{cardId:n},body:{role:r.role,text:r.text,files:r.files}});if(r.command==="read-all")return o.readAll({params:{cardId:n},body:{lastUserTurns:r.lastUserTurns}});if(r.command==="read-after")return o.readAfter({params:{cardId:n},body:{cursor:r.cursor??null}});if(r.command==="clear")return o.clear({params:{cardId:n}});if(r.command==="set-processing")return o.setProcessing({params:{cardId:n},body:{active:r.active}});if(r.command==="is-processing")return o.isProcessing({params:{cardId:n}});if(r.command==="get-config")return o.getConfig({params:{cardId:n}});if(r.command==="set-config"){let{command:e,cardId:m,...c}=r;return o.setConfig({params:{cardId:n},body:c})}return a(`chat-store: unknown command "${String(r.command)}"`)}function f(r){if(!Array.isArray(r.commands)||r.commands.length===0)return a('chat-store: command envelope must include a non-empty "commands" array');let t=[];for(let n=0;n<r.commands.length;n+=1){let e=r.commands[n];if(!e||typeof e!="object"||Array.isArray(e))return a(`chat-store: command envelope entry ${n} must be an object`);let m={cardId:r.cardId,...e},c=i(m,`command envelope entry ${n}`);if(c.status!=="success")return c;t.push({index:n,command:String(m.command),data:c.data});}return s({results:t})}let o={append(r){try{let t=r.params?.cardId;if(!t)return a("append requires params.cardId");let n=r.body??{},e=typeof n.role=="string"?n.role:"",m=typeof n.text=="string"?n.text:"",c=Array.isArray(n.files)?n.files:[];if(!e)return a("append requires body.role");let p=d.append(t,e,m,c);return s({id:p})}catch(t){return u(t)}},readAll(r){try{let t=r.params?.cardId;if(!t)return a("readAll requires params.cardId");let n=r.body??{},e=d.readAll(t);if(n.lastUserTurns===void 0)return s({records:e});let m=l(n.lastUserTurns);return m===null?a("readAll requires body.lastUserTurns (positive integer)"):s({records:C(e,m)})}catch(t){return u(t)}},readAfter(r){try{let t=r.params?.cardId;if(!t)return a("readAfter requires params.cardId");let e=(r.body??{}).cursor??null;return s(d.readAfter(t,e))}catch(t){return u(t)}},clear(r){try{let t=r.params?.cardId;return t?(d.clear(t),s({ok:!0})):a("clear requires params.cardId")}catch(t){return u(t)}},setProcessing(r){try{let t=r.params?.cardId;if(!t)return a("setProcessing requires params.cardId");let n=r.body??{};return typeof n.active!="boolean"?a("setProcessing requires body.active (boolean)"):(d.setProcessing(t,n.active),s({ok:!0}))}catch(t){return u(t)}},isProcessing(r){try{let t=r.params?.cardId;return t?s({active:d.isProcessing(t)}):a("isProcessing requires params.cardId")}catch(t){return u(t)}},getConfig(r){try{let t=r.params?.cardId;return t?s({config:d.getConfig(t)}):a("getConfig requires params.cardId")}catch(t){return u(t)}},setConfig(r){try{let t=r.params?.cardId;if(!t)return a("setConfig requires params.cardId");let n=r.body??{};return d.setConfig(t,n),s({ok:!0})}catch(t){return u(t)}},run:i,runBatch:f};return o}export{g as createChatStorePublic};//# sourceMappingURL=chat-store-public.js.map
|
|
2
2
|
//# sourceMappingURL=chat-store-public.js.map
|