yaml-flow 8.4.7 → 8.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/browser/asset-integrity.json +3 -3
  2. package/browser/board-livecards-localstorage.js +6 -6
  3. package/browser/live-cards.js +7 -7
  4. package/cli/browser-api/board-live-cards-browser-adapter.d.ts +1 -1
  5. package/cli/node/board-live-cards-cli.js +13 -13
  6. package/cli/node/chat-store-cli.js +3 -3
  7. package/cli/node/fs-board-adapter.d.ts +3 -3
  8. package/cli/node/fs-board-adapter.js +13 -13
  9. package/cli/{types-BkJvnXVD.d.ts → types-BbQ75HLf.d.ts} +3 -1
  10. package/examples/board/demo-shell-with-server.html +2 -2
  11. package/examples/board/doc.html +2 -2
  12. package/examples/board/server/board-worker/source_def_flows.json +2 -1
  13. package/examples/board/server/board-worker/task-executor.js +88 -2
  14. package/examples/board-local/demo-shell-localstorage.html +3 -3
  15. package/lib/{artifacts-store-lib-454TAuov.d.ts → artifacts-store-lib-CXgRA5J7.d.ts} +1 -1
  16. package/lib/{artifacts-store-lib-zsGFbBV8.d.cts → artifacts-store-lib-WdoKNAF0.d.cts} +1 -1
  17. package/lib/artifacts-store-public.d.cts +2 -2
  18. package/lib/artifacts-store-public.d.ts +2 -2
  19. package/lib/board-live-cards-node.cjs +13 -13
  20. package/lib/board-live-cards-node.d.cts +6 -6
  21. package/lib/board-live-cards-node.d.ts +6 -6
  22. package/lib/board-live-cards-node.js +13 -13
  23. package/lib/{board-live-cards-public-Crjm8KWn.d.ts → board-live-cards-public-C81ZEkF-.d.ts} +3 -1
  24. package/lib/{board-live-cards-public-CU8VVw3v.d.cts → board-live-cards-public-wbWRD1nO.d.cts} +3 -1
  25. package/lib/board-live-cards-public.cjs +2 -2
  26. package/lib/board-live-cards-public.d.cts +1 -1
  27. package/lib/board-live-cards-public.d.ts +1 -1
  28. package/lib/board-live-cards-public.js +2 -2
  29. package/lib/board-live-cards-server-runtime.cjs +3 -3
  30. package/lib/board-live-cards-server-runtime.d.cts +3 -3
  31. package/lib/board-live-cards-server-runtime.d.ts +3 -3
  32. package/lib/board-live-cards-server-runtime.js +3 -3
  33. package/lib/card-store-public.d.cts +1 -1
  34. package/lib/card-store-public.d.ts +1 -1
  35. package/lib/chat-store-public.d.cts +1 -1
  36. package/lib/chat-store-public.d.ts +1 -1
  37. package/lib/server-runtime/index.cjs +3 -3
  38. package/lib/server-runtime/index.d.cts +4 -4
  39. package/lib/server-runtime/index.d.ts +4 -4
  40. package/lib/server-runtime/index.js +3 -3
  41. package/lib/{types-DX8wXuZ0.d.cts → types-D5E1YmeB.d.cts} +2 -2
  42. package/lib/{types-BC8ZnA6i.d.ts → types-D_WD7RYH.d.ts} +2 -2
  43. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
- import {createRequire}from'module';import'ajv-formats';var ve="b64:";function Ot(e){let t=new TextEncoder().encode(e),r=globalThis.Buffer,n;if(r)n=r.from(t).toString("base64");else if(typeof btoa=="function"){let o="";for(let s of t)o+=String.fromCharCode(s);n=btoa(o);}else throw new Error("No base64 encoder available in this runtime");return n.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function jt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-e.length%4)%4),r=globalThis.Buffer;if(r)return r.from(t,"base64").toString("utf8");if(typeof atob=="function"){let n=atob(t),o=new Uint8Array(n.length);for(let s=0;s<n.length;s+=1)o[s]=n.charCodeAt(s);return new TextDecoder().decode(o)}throw new Error("No base64 decoder available in this runtime")}function te(e){return `${ve}${Ot(JSON.stringify(e))}`}function qe(e){if(!e.startsWith(ve))throw new Error(`Invalid ref format (expected ${ve}<base64url(json)>): ${e}`);let t;try{t=JSON.parse(jt(e.slice(ve.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${e}`)}if(!t||typeof t!="object")throw new Error(`Invalid ref format (expected object payload): ${e}`);let r=t;if(typeof r.kind!="string"||typeof r.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${e}`);return {kind:r.kind,value:r.value}}async function Ue(e,t,r){let n=e.tryAcquire();if(!n)return false;try{await t();}finally{n();}return r?.(),true}var se={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function Z(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function ae(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function He(e){return e.tasks??{}}function Ne(e){return e?e.status===se.FAILED||e.status===se.INACTIVATED:false}function Je(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ze(e){return e.maxExecutions}function Ye(e,t){let r=new Set;for(let[n,o]of Object.entries(t))if(o.status===se.COMPLETED){let s=e.tasks[n];s&&Z(s).forEach(d=>r.add(d));}return Array.from(r)}function Xe(e,t){let r={};return e.forEach(n=>{let o=t[n];if(!o)return;Z(o).forEach(a=>{r[a]||(r[a]=[]),r[a].push(n);});}),r}function We(e,t,r){let n=e.tasks[t]??we(),o={};if(r){let a=r.tasks[t],d=ae(a);for(let k of d)for(let[v,O]of Object.entries(r.tasks))if(Z(O).includes(k)){let N=e.tasks[v];N?.lastDataHash&&(o[k]=N.lastDataHash);break}}let s={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:o};return {...e,tasks:{...e.tasks,[t]:s},lastUpdated:new Date().toISOString()}}function Qe(e,t,r,n,o,s){let a=e.tasks[r]??we(),d=t.tasks[r];if(!d)throw new Error(`Task "${r}" not found in graph`);let k;n&&d.on&&d.on[n]?k=d.on[n]:k=Z(d);let v=a.startConsumedHashes?{...a.startConsumedHashes}:{...a.lastConsumedHashes};if(!a.startConsumedHashes){let $=d.requires??[];for(let I of $)for(let[R,S]of Object.entries(t.tasks))if(Z(S).includes(I)){let q=e.tasks[R];q?.lastDataHash&&(v[I]=q.lastDataHash);break}}let O={...a,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:a.executionCount+1,lastEpoch:a.executionCount+1,lastDataHash:o,data:s,lastConsumedHashes:v,error:void 0},N=[...new Set([...e.availableOutputs,...k])];return {...e,tasks:{...e.tasks,[r]:O},availableOutputs:N,lastUpdated:new Date().toISOString()}}function Ze(e,t,r,n){let o=e.tasks[r]??we(),s=t.tasks[r];if(s?.retry){let k=o.retryCount+1;if(k<=s.retry.max_attempts){let v={...o,status:"not-started",retryCount:k,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:v},lastUpdated:new Date().toISOString()}}}let a={...o,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:o.executionCount+1},d=e.availableOutputs;if(s?.on_failure&&s.on_failure.length>0&&(d=[...new Set([...e.availableOutputs,...s.on_failure])]),s?.circuit_breaker&&a.executionCount>=s.circuit_breaker.max_executions){let k=s.circuit_breaker.on_break;d=[...new Set([...d,...k])];}return {...e,tasks:{...e.tasks,[r]:a},availableOutputs:d,lastUpdated:new Date().toISOString()}}function et(e,t,r,n){let o=e.tasks[t]??we(),s={...o,progress:typeof n=="number"?n:o.progress,messages:[...o.messages??[],...r?[{message:r,timestamp:new Date().toISOString(),status:o.status}]:[]],lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:s},lastUpdated:new Date().toISOString()}}function tt(e,t){let r=e.tasks[t];if(!r)return e;let n={...r,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:n},lastUpdated:new Date().toISOString()}}function we(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function xe(e,t){let r=`live-${Date.now()}`,n={};for(let s of Object.keys(e.tasks))n[s]=nt();let o={status:"running",tasks:n,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:r,executionConfig:{executionMode:e.settings.execution_mode??"eligibility-mode",conflictStrategy:e.settings.conflict_strategy??"alphabetical",completionStrategy:e.settings.completion}};return {config:e,state:o}}function qt(e,t){let{config:r,state:n}=e;if("executionId"in t&&t.executionId&&t.executionId!==n.executionId)return e;switch(t.type){case "task-started":return {config:r,state:We(n,t.taskName,r)};case "task-completed":return {config:r,state:Qe(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:Ze(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:et(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:tt(n,t.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...t.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Lt(n,t.action)};case "task-upsert":return Nt(e,t.taskName,t.taskConfig);case "task-removal":return Dt(e,t.taskName);case "node-requires-add":return Ft(e,t.nodeName,t.tokens);case "node-requires-remove":return Gt(e,t.nodeName,t.tokens);case "node-provides-add":return Pt(e,t.nodeName,t.tokens);case "node-provides-remove":return $t(e,t.nodeName,t.tokens);default:return e}}function rt(e,t){return t.reduce((r,n)=>qt(r,n),e)}function Nt(e,t,r){let n=!!e.config.tasks[t];return {config:{...e.config,tasks:{...e.config.tasks,[t]:r}},state:{...e.state,tasks:{...e.state.tasks,[t]:n?e.state.tasks[t]:nt()},lastUpdated:new Date().toISOString()}}}function Dt(e,t){if(!e.config.tasks[t])return e;let{[t]:r,...n}=e.config.tasks,{[t]:o,...s}=e.state.tasks;return {config:{...e.config,tasks:n},state:{...e.state,tasks:s,lastUpdated:new Date().toISOString()}}}function Ft(e,t,r){let n=e.config.tasks[t];if(!n)return e;let o=ae(n),s=r.filter(a=>!o.includes(a));return s.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:[...o,...s]}}},state:e.state}}function Gt(e,t,r){let n=e.config.tasks[t];if(!n)return e;let o=ae(n),s=o.filter(a=>!r.includes(a));return s.length===o.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:s}}},state:e.state}}function Pt(e,t,r){let n=e.config.tasks[t];if(!n)return e;let o=Z(n),s=r.filter(a=>!o.includes(a));return s.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:[...o,...s]}}},state:e.state}}function $t(e,t,r){let n=e.config.tasks[t];if(!n)return e;let o=Z(n),s=o.filter(a=>!r.includes(a));return s.length===o.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:s}}},state:e.state}}function he(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function Ee(e){if(!e||typeof e!="object")throw new Error("Invalid snapshot: expected an object");let t=e;if(!t.config||typeof t.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!t.state||typeof t.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=t.config,n=t.state;if(!r.settings||typeof r.settings!="object")throw new Error("Invalid snapshot: config.settings missing");if(!r.tasks||typeof r.tasks!="object")throw new Error("Invalid snapshot: config.tasks missing");if(!n.tasks||typeof n.tasks!="object")throw new Error("Invalid snapshot: state.tasks missing");if(!Array.isArray(n.availableOutputs))throw new Error("Invalid snapshot: state.availableOutputs must be an array");return {config:r,state:n}}function nt(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Lt(e,t){let r=new Date().toISOString();switch(t){case "stop":return {...e,status:"stopped",lastUpdated:r};case "pause":return {...e,status:"paused",lastUpdated:r};case "resume":return {...e,status:"running",lastUpdated:r};default:return e}}function ye(e){let{config:t,state:r}=e,n=He(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let s=Vt(n),a=Ye(t,r.tasks),d=new Set([...a,...r.availableOutputs]),k=[],v=[],O=[],N=[];for(let[I,R]of Object.entries(n)){let S=r.tasks[I],q=Je(R,t.settings),M=q!=="once";if(S?.status===se.RUNNING||Ne(S))continue;let u=ze(R);if(u!==void 0&&S&&S.executionCount>=u||R.circuit_breaker&&S&&S.executionCount>=R.circuit_breaker.max_executions||!M&&S?.status===se.COMPLETED)continue;if(M&&S?.status===se.COMPLETED){let f=ae(R),g=false;switch(q){case "data-changed":{f.length>0&&f.some(w=>{for(let[j,F]of Object.entries(n))if(Z(F).includes(w)){let B=r.tasks[j];if(!B)continue;let J=S.lastConsumedHashes?.[w];return B.lastDataHash==null?B.executionCount>S.lastEpoch:B.lastDataHash!==J}return false})||(g=true);break}case "epoch-changed":{f.length>0&&f.some(w=>{for(let[j,F]of Object.entries(n))if(Z(F).includes(w)){let B=r.tasks[j];if(B&&B.executionCount>S.lastEpoch)return true}return false})||(g=true);break}case "time-based":{let b=R.refreshInterval??0;if(b<=0){g=true;break}let w=S.completedAt;if(!w){g=true;break}(Date.now()-Date.parse(w))/1e3<b&&(g=true);break}case "manual":g=true;break}if(g)continue}let i=ae(R);if(i.length===0){k.push(I);continue}let l=[],m=[],h=[];for(let f of i){if(d.has(f))continue;let g=s[f]||[];g.length===0?l.push(f):g.every(w=>Ne(r.tasks[w]))?h.push({token:f,failedProducer:g[0]}):m.push(f);}l.length>0?O.push({taskName:I,missingTokens:l}):h.length>0?N.push({taskName:I,failedTokens:h.map(f=>f.token),failedProducers:[...new Set(h.map(f=>f.failedProducer))]}):m.length>0?v.push({taskName:I,waitingOn:m}):k.push(I);}let $={};if(k.length>1){let I=Xe(k,n);for(let[R,S]of Object.entries(I))S.length>1&&($[R]=S);}return {eligible:k,pending:v,unresolved:O,blocked:N,conflicts:$}}function Vt(e){let t={};for(let[r,n]of Object.entries(e)){for(let o of Z(n))t[o]||(t[o]=[]),t[o].push(r);if(n.on)for(let o of Object.values(n.on))for(let s of o)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);if(n.on_failure)for(let o of n.on_failure)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);}return t}var Se=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function De(e){let t=Fe(e);return Bt(t)}function Fe(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(Fe).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+Fe(t[n])).join(",")+"}"}function Bt(e){let t=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let o=0;o<e.length;o++)t^=BigInt(e.charCodeAt(o)),t=t*r&n;return t.toString(16).padStart(16,"0")}function Kt(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),r="";for(let n of t)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function Mt(e){if(typeof Buffer<"u")return Buffer.from(e,"base64url").toString("utf8");if(typeof atob=="function"){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),o=new Uint8Array(n.length);for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);return new TextDecoder().decode(o)}throw new Error("No base64 decoder available in this runtime")}function ot(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Kt(t)}function Ut(e){try{let t=JSON.parse(Mt(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function st(e,t,r){let{handlers:n,onDrain:o}=t,s=new Se,a="state"in e&&"config"in e?e:xe(e),d=false,k=new Set,v=new Map(Object.entries(n)),O=new Se,N=false,$=false;function I(){if(!d){if(N){$=true;return}N=true;try{do $=!1,R();while($)}finally{N=false;}}}function R(){let u=O.drain(),i=s.drain(),l=[...u,...i];l.length>0&&(a=rt(a,l));let m=ye(a);l.length>0&&o?.(l,a,m);for(let h of m.eligible)M(h);for(let h of l)if(h.type==="task-progress"){let{taskName:f,update:g}=h;if(!a.config.tasks[f])continue;let w=a.state.tasks[f];if(!w||w.status!=="running")continue;let j=ot(f),F=q(f,j,g).catch(B=>{d||(O.append({type:"task-failed",taskName:f,error:B.message??String(B),timestamp:new Date().toISOString()}),I());}).finally(()=>{k.delete(F);});k.add(F);}}function S(u){let l=a.config.tasks[u].requires??[],m=new Map;for(let[f,g]of Object.entries(a.config.tasks))for(let b of g.provides??[])m.set(b,f);let h={};for(let f of l){let g=m.get(f);g?h[f]=a.state.tasks[g]?.data:h[f]=void 0;}return h}async function q(u,i,l){let m=a.config.tasks[u],h=m.taskHandlers??[],f=S(u);for(let g of h){let b=v.get(g);if(!b)throw new Error(`Handler '${g}' not found in registry (task '${u}')`);let w={nodeId:u,state:f,taskState:a.state.tasks[u],config:m,callbackToken:i,update:l};if(await b(w)==="task-initiate-failure")throw new Error(`Handler '${g}' returned task-initiate-failure (task '${u}')`)}}function M(u){let l=a.config.tasks[u]?.taskHandlers;if(!l||l.length===0)return;O.append({type:"task-started",taskName:u,timestamp:new Date().toISOString()}),I();let m=ot(u),h=q(u,m).catch(f=>{d||(O.append({type:"task-failed",taskName:u,error:f.message??String(f),timestamp:new Date().toISOString()}),I());}).finally(()=>{k.delete(h);});k.add(h);}return {push(u){d||(u.type==="task-completed"&&u.data&&!u.dataHash&&(u={...u,dataHash:De(u.data)}),s.append(u),I());},pushAll(u){if(!d){for(let i of u)i.type==="task-completed"&&i.data&&!i.dataHash?s.append({...i,dataHash:De(i.data)}):s.append(i);I();}},resolveCallback(u,i,l){if(d)return;let m=Ut(u);if(!m)return;let{taskName:h}=m;if(a.config.tasks[h]){if(l&&l.length>0)s.append({type:"task-failed",taskName:h,error:l.join("; "),timestamp:new Date().toISOString()});else {let f=i&&Object.keys(i).length>0?De(i):void 0;s.append({type:"task-completed",taskName:h,data:i,dataHash:f,timestamp:new Date().toISOString()});}I();}},addNode(u,i){d||(s.append({type:"task-upsert",taskName:u,taskConfig:i,timestamp:new Date().toISOString()}),I());},removeNode(u){d||(s.append({type:"task-removal",taskName:u,timestamp:new Date().toISOString()}),I());},addRequires(u,i){d||(s.append({type:"node-requires-add",nodeName:u,tokens:i,timestamp:new Date().toISOString()}),I());},removeRequires(u,i){d||(s.append({type:"node-requires-remove",nodeName:u,tokens:i,timestamp:new Date().toISOString()}),I());},addProvides(u,i){d||(s.append({type:"node-provides-add",nodeName:u,tokens:i,timestamp:new Date().toISOString()}),I());},removeProvides(u,i){d||(s.append({type:"node-provides-remove",nodeName:u,tokens:i,timestamp:new Date().toISOString()}),I());},registerHandler(u,i){v.set(u,i);},unregisterHandler(u){v.delete(u);},retrigger(u){d||a.config.tasks[u]&&(s.append({type:"task-restart",taskName:u,timestamp:new Date().toISOString()}),I());},retriggerAll(u){if(!d){for(let i of u)a.config.tasks[i]&&s.append({type:"task-restart",taskName:i,timestamp:new Date().toISOString()});I();}},snapshot(){return he(a)},getState(){return a},getSchedule(){return ye(a)},async waitForHandlers(){k.size>0&&await Promise.allSettled([...k]);},async dispose(u){u?.wait&&k.size>0&&await Promise.allSettled([...k]),d=true;}}}var Jt=createRequire(import.meta.url);Jt("./jsonata-sync.cjs");var Yt=createRequire(import.meta.url),Te=Yt("./jsonata-sync.cjs"),ut=Te;function at(e,t){if(!t||!e)return;let r=t.split("."),n=e;for(let o=0;o<r.length;o++){if(n==null)return;n=n[r[o]];}return n}function ct(e,t,r){let n=t.split("."),o=e;for(let s=0;s<n.length-1;s++)(o[n[s]]==null||typeof o[n[s]]!="object")&&(o[n[s]]={}),o=o[n[s]];o[n[n.length-1]]=r;}async function Xt(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let o of e.compute)try{let s=await Te(o.expr).evaluate(n);ct(e.computed_values,o.bindTo,s),n.computed_values=e.computed_values;}catch{}return e}function Wt(e,t){if(!e?.compute?.length)return {ok:true,node:e};e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values},o=[];for(let s of e.compute)try{let a=ut(s.expr).evaluate(n);ct(e.computed_values,s.bindTo,a),n.computed_values=e.computed_values;}catch(a){let d=a instanceof Error?a.message:String(a);o.push({bindTo:s.bindTo,error:d});}return o.length>0?{ok:true,node:e,errors:o}:{ok:true,node:e}}async function Qt(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return Te(e).evaluate(n)}function Zt(e,t){return t.startsWith("fetched_sources.")?at(e._sourcesData??{},t.slice(16)):at(e,t)}var it=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),er=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function tr(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:false,errors:["Node must be a non-null object"]};let r=e;(typeof r.id!="string"||!r.id)&&t.push("id: required, must be a non-empty string");for(let n of Object.keys(r))er.has(n)||t.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&t.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))t.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&t.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&t.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&t.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,o)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`provides[${o}]: must be an object with bindTo and ref`);else {let s=n;(typeof s.bindTo!="string"||!s.bindTo)&&t.push(`provides[${o}]: missing required "bindTo" string`),(typeof s.ref!="string"||!s.ref)&&t.push(`provides[${o}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,o)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`compute[${o}]: must be a compute step object`);else {let s=n;(typeof s.bindTo!="string"||!s.bindTo)&&t.push(`compute[${o}]: missing required "bindTo" property`),(typeof s.expr!="string"||!s.expr)&&t.push(`compute[${o}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))t.push("source_defs: must be an array");else {let n=new Set,o=new Set;r.source_defs.forEach((s,a)=>{if(!s||typeof s!="object"||Array.isArray(s))t.push(`source_defs[${a}]: must be an object`);else {let d=s;typeof d.bindTo!="string"||!d.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(n.has(d.bindTo)&&t.push(`source_defs[${a}]: bindTo "${d.bindTo}" is not unique across source_defs`),n.add(d.bindTo)),typeof d.outputFile!="string"||!d.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(o.has(d.outputFile)&&t.push(`source_defs[${a}]: outputFile "${d.outputFile}" is not unique across source_defs`),o.add(d.outputFile)),d.optionalForCompletionGating!=null&&typeof d.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${a}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))t.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?t.push("view.elements: required, must be a non-empty array"):n.elements.forEach((o,s)=>{if(!o||typeof o!="object"){t.push(`view.elements[${s}]: must be an object`);return}!o.kind||typeof o.kind!="string"?t.push(`view.elements[${s}].kind: required, must be a string`):it.has(o.kind)||t.push(`view.elements[${s}].kind: unknown kind "${o.kind}". Valid: ${[...it].join(", ")}`),o.data!=null&&(typeof o.data!="object"||Array.isArray(o.data))&&t.push(`view.elements[${s}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&t.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function rr(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(e.map(async n=>{let o={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[s,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{o[s]=await Te(a).evaluate(r);}catch{o[s]=void 0;}}return {...n,_projections:o}}))}function nr(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return e.map(n=>{let o={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[s,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{o[s]=ut(a).evaluate(r);}catch{o[s]=void 0;}}return {...n,_projections:o}})}var ie={run:Xt,runSync:Wt,eval:Qt,resolve:Zt,validate:tr,enrichSources:rr,enrichSourcesSync:nr};function dt(e){return JSON.stringify(e)}function lt(e){let t;try{t=JSON.parse(e);}catch{throw new Error(`parseExecutionRef: invalid JSON \u2014 ${e}`)}if(typeof t!="object"||t===null||typeof t.howToRun!="string"||typeof t.whatToRun!="string")throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun \u2014 ${e}`);return t}function Ge(e,t){function r(){return e.readIndex()??{}}function n(o,s,a){let d=String(s||"").split(".").filter(Boolean);if(d.length===0)return a&&typeof a=="object"&&!Array.isArray(a)?a:{value:a};let k={...o},v=k;for(let O=0;O<d.length-1;O++){let N=d[O],$=v[N],I=$&&typeof $=="object"&&!Array.isArray($)?{...$}:{};v[N]=I,v=I;}return v[d[d.length-1]]=a,k}return {readCard(o){let s=r()[o];return !s||!e.cardExists(s.key)?null:e.readCard(s.key)},readCardKey(o){return r()[o]?.key??null},readAllCards(){let o=[];for(let[s,a]of Object.entries(r())){if(!e.cardExists(a.key))continue;let d=e.readCard(a.key);d?o.push(d):t?.(`[card-store] could not read card "${s}" at key "${a.key}"`);}return o},readChecksumIndex(){let o={};for(let[s,a]of Object.entries(r()))o[s]=a.checksum;return o},changedSince(o){let s=r(),a=[];for(let[d,k]of Object.entries(s))o[d]!==k.checksum&&a.push(d);for(let d of Object.keys(o))s[d]||a.push(d);return a},validateUpsert(o,s){let a=r(),d=a[o],k=Object.entries(a).find(([,v])=>v.key===s);return d&&d.key!==s?{ok:false,error:`Card id "${o}" is already mapped to key "${d.key}", cannot remap to "${s}"`}:k&&k[0]!==o?{ok:false,error:`Key "${s}" is already mapped to card id "${k[0]}", cannot remap to "${o}"`}:{ok:true}},writeCard(o,s,a){let d=r(),k=a??d[o]?.key??e.defaultCardKey(o),v=e.writeCard(k,s);d[o]={key:k,checksum:v,updatedAt:new Date().toISOString()},e.writeIndex(d);},patchCard(o,s,a){let d=r(),k=d[o];if(!k||!e.cardExists(k.key))throw new Error(`card "${o}" not found`);let v=e.readCard(k.key);if(!v||typeof v!="object"||Array.isArray(v))throw new Error(`card "${o}" is not patchable`);let O=n(v,s,a),N=e.writeCard(k.key,O);d[o]={key:k.key,checksum:N,updatedAt:new Date().toISOString()},e.writeIndex(d);},removeCard(o){let s=r(),a=s[o];a&&(e.removeCard(a.key),delete s[o],e.writeIndex(s));},readIndex(){return r()}}}function Pe(e,t){return {readSourceData(r,n){let o=e.read(`${r}/${n}`);if(o==null)return null;let s=o.trim();if(!s)return null;try{return JSON.parse(s)}catch{return s}},ingestSourceDataStaged(r,n,o,s){let a=t(o);e.write(`${r}/.staged/${s}/${n}`,a);},commitSourceData(r,n,o){let s=`${r}/.staged/${o}/${n}`,a=e.read(s);return a==null?false:(e.write(`${r}/${n}`,a),e.remove(s),true)},hasSource(r,n){return e.exists(`${r}/${n}`)}}}function kt(e){function t(r){let n=e.readAllEntries();if(!r)return n;let o=n.findIndex(s=>s.id===r);return o===-1?n:n.slice(o+1)}return {readEntriesAfterCursor(r){let n=t(r);return n.length===0?{events:[],newCursor:r}:{events:n.map(o=>o.event),newCursor:n[n.length-1].id}},pendingCount(r){return t(r).length},appendEvent(r){e.appendEntry({id:e.generateId(),event:r});}}}function ht(e,t){return {appendEntries(r,n){if(!r||n.length===0)return;let o=e.read(r)??[];e.write(r,[...o,...n]);},dispatchEntriesForJournalId(r,n){if(!r)return;let o=e.read(r);if(!(!o||o.length===0)){for(let s of o)try{n(s);}catch(a){let d=a instanceof Error?a.message:String(a);try{t(s,d);}catch{}}e.delete(r);}}}}var Ae="v1",le="board/graph",yt="board/lastJournalProcessedId";function ft(e){return `cards/${e}/runtime`}function St(e){return {readRuntime(t){return e.read(ft(t))??{_sources:{}}},writeRuntime(t,r){e.write(ft(t),r);}}}function or(e,t){let r={...e};for(let n of t.deleteKeys)delete r[n];return {...r,...t.shallowMerge}}function Ct(e){return {readSnapshot(t){return e.readValues(t)},commitSnapshot(t,r){if(r.schemaVersion!==Ae)throw new Error(`Unsupported snapshot schema version: ${r.schemaVersion}`);let n=e.readValues(t);if(n.version!==r.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:n.version};let o=or(n.values,r);return {ok:true,newVersion:e.writeValues(t,o,r.deleteKeys)}}}}function $e(e){function t(r){let n=e.read(r);return n==null?null:typeof n=="string"?n:JSON.stringify(n)}return {readTaskExecutorRef(){let r=t("task-executor");if(r?.trim())return lt(r.trim())},writeTaskExecutorRef(r){e.write("task-executor",dt(r));},readChatHandlerFlow(){return e.read("chat-handler-flow")},writeChatHandlerFlow(r){e.write("chat-handler-flow",r);},readCardStoreRef(){return t("card-store-ref")},writeCardStoreRef(r){e.write("card-store-ref",r);},readOutputsStoreRef(){return t("outputs-store-ref")},writeOutputsStoreRef(r){e.write("outputs-store-ref",r);},readScratchStoreRef(){return t("scratch-store-ref")},writeScratchStoreRef(r){e.write("scratch-store-ref",r);},readArchiveStoreRef(){return t("archive-store-ref")},writeArchiveStoreRef(r){e.write("archive-store-ref",r);}}}function Rt(e){return {writeComputedValues(t,r){e.write(`cards/${t}/computed_values`,r);},readComputedValues(t){return e.read(`cards/${t}/computed_values`)},readAllComputedValues(){let t={};for(let r of e.listKeys("cards/")){let n=r.match(/^cards\/([^/]+)\/computed_values$/);n&&(t[n[1]]=e.read(r));}return t},writeDataObjects(t){for(let[r,n]of Object.entries(t))r&&e.write(`data-objects/${r}`,n);},readDataObject(t){return e.read(`data-objects/${t}`)},readAllDataObjects(){let t={};for(let r of e.listKeys("data-objects/"))t[r.slice(13)]=e.read(r);return t},writeStatusSnapshot(t){e.write("status",t);},readStatusSnapshot(){return e.read("status")}}}function pt(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function sr(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function gt(e,t){return e?.lastRequestedToken?sr(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<t?"dispatch":"idle":"dispatch"}function ar(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"success"}}function mt(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"failure"}}function _e(e,t){let r=t.state.tasks,n=t.config.tasks,o=Object.keys(r),s=ye(t),a={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},d=new Map;for(let R of s.pending)d.set(R.taskName,R.waitingOn);for(let R of s.unresolved)d.set(R.taskName,R.missingTokens);for(let R of s.blocked)d.set(R.taskName,R.failedTokens);let k=new Map;for(let[R,S]of Object.entries(n))for(let q of S.requires??[]){let M=k.get(q)??[];M.push(R),k.set(q,M);}let v=o.sort().map(R=>{let S=r[R],q=n[R]??{requires:[],provides:[]};S.status==="completed"?a.completed+=1:S.status==="failed"?a.failed+=1:S.status==="in-progress"&&(a.in_progress+=1);let M=q.requires??[],u=q.provides??[],i=Object.keys(S.data??{}).sort(),l=M.filter(w=>t.state.availableOutputs.includes(w)),m=M.filter(w=>!t.state.availableOutputs.includes(w)),h=d.get(R)??m,f=new Set;for(let w of u)for(let j of k.get(w)??[])j!==R&&f.add(j);let g=S.failedAt,b=S.error?{message:S.error,code:"TASK_FAILED",at:g,source:"task-runtime"}:void 0;return {name:R,status:S.status,error:b,requires:M,requires_satisfied:l,requires_missing:m,provides_declared:u,provides_runtime:i,blocked_by:h,unblocks:Array.from(f).sort(),runtime:{attempt_count:S.executionCount??0,restart_count:S.retryCount??0,in_progress_since:S.status==="in-progress"?S.startedAt??null:null,last_transition_at:S.lastUpdated??null,last_completed_at:S.completedAt??null,last_restarted_at:S.startedAt??null,status_age_ms:S.lastUpdated?0:null}}});a.pending=s.pending.length,a.blocked=s.blocked.length,a.unresolved=s.unresolved.length;let O=v.map(R=>({name:R.name,fanOut:R.unblocks.length})).sort((R,S)=>S.fanOut-R.fanOut||R.name.localeCompare(S.name)),N=O.length>0?O[0]:{name:null,fanOut:0},$=new Set;for(let R of Object.values(n))for(let S of R.requires??[])$.add(S);let I=0;for(let[R,S]of Object.entries(n)){let q=(S.requires??[]).length===0,u=(S.provides??[]).some(i=>(k.get(i)??[]).some(l=>l!==R));q&&!u&&(I+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:o.length,completed:a.completed,eligible:s.eligible.length,pending:a.pending,blocked:a.blocked,unresolved:a.unresolved,failed:a.failed,in_progress:a.in_progress,orphan_cards:I,topology:{edge_count:Array.from($).length,max_fan_out_card:N.name,max_fan_out:N.fanOut}},cards:v}}function ir(){return new Date().toISOString()}function bt(e,t,r,n,o,s,a){return async d=>{let k=[],v=r.cardStore.readCard(d.nodeId);if(!v)return "task-initiate-failure";let O=v.id,N=v.card_data??{},$=v.source_defs??[],I=$.filter(A=>A.optionalForCompletionGating!==true),R=r.cardRuntimeStore.readRuntime(O),S=false,q=()=>{S&&(r.cardRuntimeStore.writeRuntime(O,R),S=false);},M=A=>pt(R._sources[A]),u=(A,_)=>{R._sources[A]=pt(_),S=true;},i=d.taskState?.executionCount??0;if(R._lastExecutionCount!==i&&(R._sources={},R._lastExecutionCount=i,S=true),d.update){let A=d.update,_=A.outputFile;if(_){let L=M(_);if(A.failure){let D=A.rqt??L.lastRequestedToken??L.queueRequestedToken;D&&u(_,mt(L,D));}else {let D=A.rqt;if(!L.lastCompletedToken||D>L.lastCompletedToken){let H=typeof A.deliveryToken=="string"?A.deliveryToken:void 0,p=false;H&&(p=r.fetchedSourcesStore.commitSourceData(O,_,H)),p?u(_,ar(L,D)):u(_,mt(L,D));}}q();}}let m={};for(let A of $)if(A.outputFile){let _=r.fetchedSourcesStore.readSourceData(O,A.outputFile);_!==null&&(m[A.bindTo]=_);}let h={};for(let[A,_]of Object.entries(d.state??{}))if(_!==null&&typeof _=="object"&&!Array.isArray(_)){let L=_[A];h[A]=L!==void 0?L:_;}else h[A]=_;let f={id:O,card_data:{...N},requires:h,source_defs:$,compute:v.compute};f._sourcesData=m,v.compute&&ie.runSync(f,{sourcesData:m}),(s??r.outputStore.writeComputedValues.bind(r.outputStore))(O,f.computed_values??{});let g={...v},b=ie.enrichSourcesSync(Array.isArray(v.source_defs)?v.source_defs:void 0,{card_data:v.card_data,requires:h}),w=e.value;g.source_defs=Array.isArray(b)?b.map(A=>({...A,boardDir:typeof A.boardDir=="string"&&A.boardDir?A.boardDir:w})):b;let j=ir(),F=d.update?void 0:j,B=I.filter(A=>{let _=A.outputFile;if(typeof _!="string"||!_)return true;let L=M(_);F&&(L={...L,queueRequestedToken:F},u(_,L));let D=L.queueRequestedToken??L.lastRequestedToken??j,H=gt(L,D);return H==="in-flight"?false:H==="dispatch"});if(q(),B.length>0){let A=false,_=j;for(let L of B){let D=L.outputFile;if(typeof D!="string"||!D)continue;let H=M(D),p=H.queueRequestedToken??j;u(D,{...H,lastRequestedToken:p}),_=p,A=true;}return A&&q(),A&&(k.push({taskKind:"source-fetch",payload:{boardRef:te(e),enrichedCard:g,callbackToken:d.callbackToken,rqt:_}}),r.executionRequestStore.appendEntries(t,k)),"task-initiated"}if(I.some(A=>{let _=A.outputFile;if(typeof _!="string"||!_)return false;let L=M(_),D=L.queueRequestedToken??L.lastRequestedToken??j;return gt(L,D)==="in-flight"}))return "task-initiated";let ee=v.provides??[],X={};for(let{bindTo:A,ref:_}of ee)X[A]=ie.resolve(f,_);return (a??r.outputStore.writeDataObjects.bind(r.outputStore))(X),$.filter(A=>{if(A.optionalForCompletionGating!==true)return false;let _=M(A.outputFile);return !_.lastRequestedToken||!_.lastCompletedToken?true:_.lastCompletedToken<=_.lastRequestedToken}).length>0&&k.push({taskKind:"source-fetch",payload:{boardRef:te(e),enrichedCard:g,callbackToken:d.callbackToken,rqt:j}}),n(d.nodeId,X),k.length>0&&r.executionRequestStore.appendEntries(t,k),"task-initiated"}}var Le={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function vt(e){return {[le]:e.graph,[yt]:e.lastDrainedJournalId}}function wt(e){let t=e[le],r=e[yt];if(!t||typeof t!="object")throw new Error(`State snapshot is missing required key: ${le}`);return {graph:t,lastDrainedJournalId:typeof r=="string"?r:""}}function xt(e){let t=e.requires,r=e.provides?.map(n=>n.bindTo)??[];return {requires:t&&t.length>0?t:void 0,provides:r,taskHandlers:["card-handler"],description:e.meta?.title??e.id}}function G(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function E(e){return {status:"fail",error:e}}function P(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function ur(e){let t=new TextEncoder().encode(e),r=Array.from(t,n=>String.fromCharCode(n)).join("");return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Tt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),o=Uint8Array.from(n,s=>s.charCodeAt(0));return new TextDecoder().decode(o)}function Ie(e){try{let t=JSON.parse(Tt(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function cr(e){return ur(JSON.stringify(e))}function Et(e){try{let t=JSON.parse(Tt(e));return typeof t?.cbk=="string"&&typeof t?.cid=="string"&&typeof t?.b=="string"&&typeof t?.d=="string"?t:null}catch{return null}}function z(){return new Date().toISOString()}function Zr(e,t){let r=t.onWarn??(()=>{}),n=te(e);function o(p){if(p.length!==0)try{let c=t.publishBoardChangeNotifications?.(p);c&&typeof c.catch=="function"&&c.catch(y=>r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${y instanceof Error?y.message:String(y)}`));}catch(c){r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${c instanceof Error?c.message:String(c)}`);}}function s(){let p=d().readCardStoreRef();if(!p)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let c=t.kvStorageForRef(p);return {readIndex(){return c.read("_index")},writeIndex(y){c.write("_index",y);},readCard(y){return c.read(y)},writeCard(y,x){return c.write(y,x),t.hashFn(x)},removeCard(y){c.delete(y);},cardExists(y){return c.read(y)!==null},defaultCardKey(y){return y}}}let a={readValues(p){let c=t.kvStorage("state-snapshot"),y=c.listKeys().sort();if(y.length===0)return {version:null,values:{}};let x={};for(let K of y)x[K]=c.read(K);return {version:t.hashFn(x),values:x}},writeValues(p,c,y){let x=t.kvStorage("state-snapshot");for(let K of y)x.delete(K);for(let[K,V]of Object.entries(c))x.write(K,V);return t.hashFn(c)}},d=()=>$e(t.kvStorage("config")),k=()=>Ct(a),v=()=>kt(t.journalAdapter()),O=()=>Ge(s(),r),N=()=>{let p=d().readOutputsStoreRef();if(!p)throw new Error(`Board at ${e.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return Rt(t.kvStorageForRef(p))},$=()=>{let p=d().readArchiveStoreRef();return p?t.archiveFactoryForRef(p):t.archiveFactory()};function I(){return !!k().readSnapshot(e.value).values[le]}function R(){let p=k().readSnapshot(e.value);if(!p.values[le])throw new Error(`Board not initialized at ${e.value}`);return wt(p.values)}function S(p,c){let y=k().commitSnapshot(e.value,{schemaVersion:Ae,expectedVersion:c,commitId:t.genId(),committedAt:z(),deleteKeys:[],shallowMerge:vt(p)});if(!y.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${c??"null"} current=${y.currentVersion??"null"}`)}function q(p){v().appendEvent(p);}async function M(){let p=(C,T)=>{let U=C.payload,oe=(U?.enrichedCard??{}).id??U?.cardId??"unknown";q({type:"task-failed",taskName:oe,error:T,timestamp:z()});},c=ht(t.kvStorage("execution-requests"),p),y=St(t.kvStorage("card-runtime")),x=Pe(t.blobStorage("sources"),C=>t.resolveBlob(C)),K=new Map,V={readRuntime(C){return K.get(C)??y.readRuntime(C)},writeRuntime(C,T){K.set(C,T);}},W=[],Y=new Map,ne={readSourceData(C,T){let U=`${C}/${T}`;return Y.has(U)?Y.get(U):x.readSourceData(C,T)},ingestSourceDataStaged(C,T,U,ge){x.ingestSourceDataStaged(C,T,U,ge);},commitSourceData(C,T,U){let ge=`${C}/.staged/${U}/${T}`,be=t.blobStorage("sources").read(ge);if(be==null)return false;let me=`${C}/${T}`,Me=be.trim();try{Y.set(me,JSON.parse(Me));}catch{Y.set(me,Me);}return W.push({cardId:C,outputFile:T,deliveryToken:U}),true},hasSource(C,T){let U=`${C}/${T}`;return Y.has(U)?true:x.hasSource(C,T)}},Q={cardStore:O(),cardRuntimeStore:V,fetchedSourcesStore:ne,outputStore:N(),executionRequestStore:c},ue=R(),ce=Ee(ue.graph),{events:fe,newCursor:pe}=v().readEntriesAfterCursor(ue.lastDrainedJournalId),de=[],Oe=[],je=[],Ve=new Map,At=(C,T)=>{de.push({type:"task-completed",taskName:C,data:T,timestamp:z()});try{$().stream("exec-history").append({taskName:C,status:"completed",completedAt:z()});}catch{}},Be=(C,T)=>{q({type:"task-failed",taskName:C,error:T,timestamp:z()});try{$().stream("exec-history").append({taskName:C,status:"failed",error:T,completedAt:z()});}catch{}},Ce=st(ce,{handlers:{"card-handler":bt(e,pe,Q,At,Be,(C,T)=>{Oe.push({cardId:C,values:T});},C=>{je.push(C);})}});for(de=fe;de.length>0;){let C=de;de=[];for(let T of C)if(T.type==="task-restart"){let U=Q.cardStore.readCard(T.taskName);U&&Ve.set(T.taskName,U);}Ce.pushAll(C),await Ce.waitForHandlers();}let Ke=Ce.getState();await Ce.dispose({wait:true});let _t=k().readSnapshot(e.value).version;S({lastDrainedJournalId:pe,graph:he(Ke)},_t);for(let{cardId:C,values:T}of Oe)Q.outputStore.writeComputedValues(C,T);for(let C of je)Q.outputStore.writeDataObjects(C);for(let[C,T]of K)y.writeRuntime(C,T);for(let{cardId:C,outputFile:T,deliveryToken:U}of W)x.commitSourceData(C,T,U);let Re;try{Re=_e(n,Ke),Q.outputStore.writeStatusSnapshot(Re);}catch(C){r(`[board-live-cards-public] status publish failed: ${C instanceof Error?C.message:String(C)}`);}let ke=[];for(let{cardId:C,values:T}of Oe)ke.push({kind:"computed_values",cardId:C,values:T});for(let C of je)for(let[T,U]of Object.entries(C))T&&ke.push({kind:"data_object",key:T,payload:U});for(let[C,T]of Ve)ke.push({kind:"card_refreshed",cardId:C,card:T});Re!==void 0&&ke.push({kind:"status",status:Re}),o(ke);let It=d().readTaskExecutorRef()??{howToRun:"built-in",whatToRun:te({kind:"built-in",value:"source-cli-task-executor"})};c.dispatchEntriesForJournalId(pe,C=>{if(C.taskKind!=="source-fetch"){r(`[process-accumulated-events] unknown taskKind "${C.taskKind}" \u2014 skipping`);return}let T=C.payload,U=T.enrichedCard?.id??"unknown",ge=T.enrichedCard?.source_defs??[];for(let oe of ge){if(!oe.outputFile){r(`[dispatch] source "${oe.bindTo}" has no outputFile \u2014 skipping`);continue}let be=cr({cbk:T.callbackToken,rg:e.value,br:te(e),cid:U,b:oe.bindTo,d:oe.outputFile,cs:void 0,rqt:T.rqt});t.dispatchExecution(It,{source_def:oe,base_ref:te(e),callback:{token:be,via:t.selfRef}}).catch(me=>Be(U,me instanceof Error?me.message:String(me)));}});}async function u(){try{let p=()=>{let y=R(),{events:x}=v().readEntriesAfterCursor(y.lastDrainedJournalId);x.length<=0||(u(),t.requestProcessAccumulated?.());},c=await Ue(t.lock,M,p);return G({ran:c!==!1})}catch(p){return P(p)}}function i(){u(),t.requestProcessAccumulated?.();}function l(p){try{let c=p.params?.cardStoreRef;if(!c)return E("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(!I()){let Y=xe(Le);S({lastDrainedJournalId:"",graph:he(Y)},null);}let y=p.params?.outputsStoreRef;if(!y)return E("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let x=p.params?.scratchStoreRef,K=p.params?.archiveStoreRef,V=d();V.writeCardStoreRef(c),V.writeOutputsStoreRef(y),x&&V.writeScratchStoreRef(x),K&&V.writeArchiveStoreRef(K);let W=p.body??{};W["task-executor-ref"]&&V.writeTaskExecutorRef(W["task-executor-ref"]),Object.prototype.hasOwnProperty.call(W,"chat-handler-flow")&&V.writeChatHandlerFlow(W["chat-handler-flow"]);try{N().writeStatusSnapshot(_e(n,Ee(R().graph)));}catch{}return G()}catch(c){return P(c)}}function m(p){try{let c=N().readStatusSnapshot();if(!c){c=_e(n,Ee(R().graph));try{N().writeStatusSnapshot(c);}catch{}}return G(c)}catch(c){return P(c)}}function h(p){try{let c=p.params?.id;return c?(q({type:"task-removal",taskName:c,timestamp:z()}),i(),G()):E("removeCard requires params.id")}catch(c){return P(c)}}function f(p){try{let c=p.params?.id;return c?(q({type:"task-restart",taskName:c,timestamp:z()}),i(),G()):E("retrigger requires params.id")}catch(c){return P(c)}}async function g(p){return u()}function b(p){try{let c=p.params?.cardId,y=p.params?.all,x=!!p.params?.restart;if(!c&&!y)return E("upsertCard requires --card-id <id> or --all");let K=y?O().readAllCards().map(V=>V.id):[c];for(let V of K)if(!O().readCard(V))return E(`Card "${V}" not found in board at ${e.value}`);for(let V of K){let W=O().readCard(V),Y=xt(W),ne=t.hashFn(Y),Q=t.kvStorage("card-upsert"),ue=Q.read(V),ce=ue?.taskConfigHash!==ne;if(!(!ce&&!x)){if(ce){let fe=ue?.blobRef??O().readCardKey(V)??V;q({type:"task-upsert",taskName:V,taskConfig:Y,timestamp:z()}),Q.write(V,{blobRef:fe,taskConfigHash:ne,updatedAt:z()});}x&&q({type:"task-restart",taskName:V,timestamp:z()});}}return i(),G()}catch(c){return P(c)}}function w(p){try{let c=p.params?.token;if(!c)return E("taskFailed requires params.token");let y=p.params?.error??"unknown error",x=Ie(c);if(!x)return E("Invalid callback token");q({type:"task-failed",taskName:x.taskName,error:y,timestamp:z()});try{$().stream("exec-history").append({taskName:x.taskName,status:"failed",error:y,completedAt:z()});}catch{}return i(),G()}catch(c){return P(c)}}function j(p){try{let c=p.params?.token;if(!c)return E("taskProgress requires params.token");let x=(p.body??{}).update??{},K=Ie(c);return K?(q({type:"task-progress",taskName:K.taskName,update:x,timestamp:z()}),i(),G()):E("Invalid callback token")}catch(c){return P(c)}}function F(p){try{let c=p.params?.token,y=p.params?.ref;if(!c)return E("sourceDataFetched requires params.token");if(!y)return E("sourceDataFetched requires params.ref");let x=Et(c);if(!x)return E("Invalid source token");let{cbk:K,cid:V,b:W,d:Y,cs:ne,rqt:Q}=x,ue=Pe(t.blobStorage("sources"),de=>t.resolveBlob(de)),ce=t.genId();ue.ingestSourceDataStaged(V,Y,qe(y),ce);let fe=Ie(K);if(!fe)return E("Invalid callback token embedded in source token");let pe=z();return q({type:"task-progress",taskName:fe.taskName,update:{bindTo:W,outputFile:Y,fetchedAt:pe,deliveryToken:ce,sourceChecksum:ne,rqt:Q},timestamp:pe}),i(),G()}catch(c){return P(c)}}function B(p){try{let c=p.params?.token,y=p.params?.reason??"unknown";if(!c)return E("sourceDataFetchFailure requires params.token");let x=Et(c);if(!x)return E("Invalid source token");let{cbk:K,b:V,d:W,cs:Y,rqt:ne}=x,Q=Ie(K);return Q?(q({type:"task-progress",taskName:Q.taskName,update:{bindTo:V,outputFile:W,failure:!0,reason:y,sourceChecksum:Y,rqt:ne},timestamp:z()}),i(),G()):E("Invalid callback token embedded in source token")}catch(c){return P(c)}}function J(p){try{let c=d().readCardStoreRef();return c?G({storeRef:c}):E(`Board at ${e.value} has no card store configured`)}catch(c){return P(c)}}function ee(p){try{let c=d().readOutputsStoreRef();return c?G({storeRef:c}):E(`Board at ${e.value} has no outputs store configured`)}catch(c){return P(c)}}function X(p){try{let c=d().readScratchStoreRef();return G({storeRef:c})}catch(c){return P(c)}}function re(p){try{let c=d().readArchiveStoreRef();return G({storeRef:c})}catch(c){return P(c)}}function A(p){try{let c=p.params?.key;if(!c)return E("getConfig requires params.key");let y=d(),x;switch(c){case "task-executor":x=y.readTaskExecutorRef()??null;break;case "chat-handler-flow":x=y.readChatHandlerFlow()??null;break;case "card-store-ref":x=y.readCardStoreRef();break;case "outputs-store-ref":x=y.readOutputsStoreRef();break;case "scratch-store-ref":x=y.readScratchStoreRef();break;case "archive-store-ref":x=y.readArchiveStoreRef();break;default:return E(`getConfig: unknown key "${c}"`)}return G({value:x})}catch(c){return P(c)}}function _(p){try{let c=p.params?.key;if(!c)return E("getOutputsDataObject requires params.key");let y=N().readDataObject(c);return G(y)}catch(c){return P(c)}}function L(p){try{return G(N().readAllDataObjects())}catch(c){return P(c)}}function D(p){try{let c=p.params?.key;if(!c)return E("getOutputsComputedValues requires params.key");let y=N().readComputedValues(c);return G(y)}catch(c){return P(c)}}function H(p){try{return G(N().readAllComputedValues())}catch(c){return P(c)}}return {init:l,status:m,getCardStoreRef:J,getOutputsStoreRef:ee,getScratchStoreRef:X,getArchiveStoreRef:re,getConfig:A,getOutputsDataObject:_,getAllOutputsDataObjects:L,getOutputsComputedValues:D,getAllOutputsComputedValues:H,removeCard:h,retrigger:f,processAccumulatedEvents:g,upsertCard:b,taskFailed:w,taskProgress:j,sourceDataFetched:F,sourceDataFetchFailure:B}}function en(e,t){let r=()=>$e(t.kvStorage("config"));function n(){let u=r().readCardStoreRef();if(!u)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let i=t.kvStorageForRef(u);return {readIndex(){return i.read("_index")},writeIndex(l){i.write("_index",l);},readCard(l){return i.read(l)},writeCard(l,m){return i.write(l,m),t.hashFn(m)},removeCard(l){i.delete(l);},cardExists(l){return i.read(l)!==null},defaultCardKey(l){return l}}}let o=()=>Ge(n(),t.onWarn??(()=>{})),s=()=>{let u=r().readScratchStoreRef();return u?t.scratchStorageForRef(u):t.scratchStorage()};function a(u,i){let l=t.validateSchema(i),m=[],h=r().readTaskExecutorRef();if(h&&Array.isArray(i.source_defs))for(let g of i.source_defs){let b=typeof g.bindTo=="string"?g.bindTo:"(unknown)";try{let w;try{w=t.invokeExecutorSync(h,"validate-source-def",[],{timeout:t.executorTimeouts?.validationMs??1e4,input:JSON.stringify(g)});}catch(F){let B=F;if(w=typeof B?.stdout=="string"?B.stdout:"",!w.trim()){m.push(`source "${b}": executor validate-source-def failed \u2014 ${F instanceof Error?F.message:String(F)}`);continue}}let j=JSON.parse(w.trim());if(!j.ok&&Array.isArray(j.errors))for(let F of j.errors)m.push(`source "${b}": ${F}`);}catch(w){m.push(`source "${b}": executor validate-source-def failed \u2014 ${w instanceof Error?w.message:String(w)}`);}}let f=[...l.errors,...m];return G({cardId:u,isValid:f.length===0,issues:f})}function d(u,i,l){let m=r().readTaskExecutorRef();if(!m)return E("No task-executor registered for this board");let h=typeof u.bindTo=="string"?u.bindTo:"source",f=s(),g={...u,boardDir:e.value,_projections:i},b=f.create(JSON.stringify(g,null,2),`probe-in-${h}`,".json"),w=f.getUniqueKey(`probe-out-${h}`,".json"),j=f.getUniqueKey(`probe-err-${h}`,".txt"),F=te(f.keyRef(b)),B=te(f.keyRef(w)),J=te(f.keyRef(j)),ee=null;try{if(t.invokeExecutorSync(m,"run-source-fetch",["--in-ref",F,"--out-ref",B,"--err-ref",J],{timeout:u.timeout??t.executorTimeouts?.probeMs??6e4}),ee=f.read(w),ee===null)return E("Executor produced no output file")}catch(X){let re=f.read(j)?.trim()??(X instanceof Error?X.message:String(X));return E(`Probe failed: ${re}`)}finally{try{f.remove(b);}catch{}try{f.remove(j);}catch{}}if(l){let X=qe(l);t.absoluteBlob.write(X.value,ee);}try{f.remove(w);}catch{}return G({bindTo:h,resultSizeBytes:ee.length})}function k(u){try{let i=u.params?.cardId,l=u.params?.all;if(!i&&!l)return E("validateCard requires --card-id <id> or --all");let m=l?o().readAllCards().map(f=>f.id):[i],h=[];for(let f of m){let g=o().readCard(f);if(!g){h.push({cardId:f,isValid:!1,issues:[`Card "${f}" not found`]});continue}let b=a(f,g);if(b.status!=="success")return b;h.push(b.data);}return G(h)}catch(i){return P(i)}}function v(u){try{if(!u.body||typeof u.body!="object"||Array.isArray(u.body))return E("validateCardPreflight requires card JSON object in body");let i=u.body,l=i["card-content"]??i,m=typeof l.id=="string"?l.id:"(unknown)",h=a(m,l),f=r().readTaskExecutorRef();if(f)try{let g=t.invokeExecutorSync(f,"validate-card-preflight",[],{timeout:t.executorTimeouts?.validationMs??1e4,input:JSON.stringify(l)}),b=JSON.parse(g.trim());if(!b.ok&&Array.isArray(b.errors)&&b.errors.length>0){let w=[...h.status==="success"?h.data.issues:[],...b.errors];return G({cardId:m,isValid:!1,issues:w})}}catch{}return h}catch(i){return P(i)}}function O(u){try{let i=u.params?.cardId,l=u.params?.sourceIdx,m=u.params?.outRef;if(!i)return E("probeSource requires params.cardId");if(l===void 0)return E("probeSource requires params.sourceIdx");let f=(u.body??{})["mock-projections"]??{},g=o().readCard(i);if(!g)return E(`Card "${i}" not found`);let b=g.source_defs??[];return l<0||l>=b.length?E(`sourceIdx ${l} out of range (card has ${b.length} source(s))`):d(b[l],f,m)}catch(i){return P(i)}}function N(u){try{let i=u.params?.outRef,l=u.body;if(!l)return E('probeTmpSource requires body with "source-def" and "mock-projections"');let m=l["source-def"],h=l["mock-projections"]??{};return m?d(m,h,i):E('probeTmpSource body requires "source-def"')}catch(i){return P(i)}}function $(u){try{let i=u.params?.sourceIdx,l=u.params?.outRef;if(i===void 0)return E("probeSourcePreflight requires params.sourceIdx");if(!u.body||typeof u.body!="object"||Array.isArray(u.body))return E("probeSourcePreflight requires card JSON object in body");let m=u.body,h=m["card-content"]??m,f=m["mock-projections"]??{},g=h.source_defs??[];if(i<0||i>=g.length)return E(`sourceIdx ${i} out of range (card has ${g.length} source(s))`);let b=g[i],w=r().readTaskExecutorRef();if(w){let j=typeof b.bindTo=="string"?b.bindTo:"source";try{let F={...b,_projections:f},B=t.invokeExecutorSync(w,"probe-source-preflight",[],{timeout:b.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(F)}),J=JSON.parse(B.trim());return J.ok?G({bindTo:j,reachable:J.reachable,latencyMs:J.latencyMs,note:J.note}):E(J.error??"Preflight probe failed")}catch{}}return d(b,f,l)}catch(i){return P(i)}}function I(u){try{let i=r().readTaskExecutorRef();if(!i)return E("No task-executor registered for this board");let l=t.invokeExecutorSync(i,"describe-capabilities",[],{timeout:t.executorTimeouts?.describeMs??1e4});return G(JSON.parse(l.trim()))}catch(i){return P(i)}}function R(u){try{let i=u.body;if(!i||!Array.isArray(i.ops))return E("updatesInCardStore requires body.ops array");let l=i.ops,m=o();for(let h of l){let f=h.op,g=h.id;if(!g)return E('op is missing "id"');if(f==="update"){let b=h["card-content"];if(!b)return E(`update op for "${g}" is missing "card-content"`);m.writeCard(g,b);}else return E(`Unknown op type: "${f??"(none)"}"`)}return G()}catch(i){return P(i)}}function S(u){try{let i=u.body;if(!i||!Array.isArray(i.ids))return E("readFromCardStore requires body.ids array");let l=i.ids,m=o(),h=l.map(f=>({id:f,"card-content":m.readCard(f)}));return G({cards:h})}catch(i){return P(i)}}function q(u){try{if(!u.body||typeof u.body!="object"||Array.isArray(u.body))return E("evalCardCompute requires a JSON object in body");let i=u.body,l=i["card-content"]??i,m=typeof l.id=="string"?l.id:"(unknown)",h=i["mock-fetched-sources"]??{},f=i["mock-requires"]??{},g=l.compute;if(!g||!Array.isArray(g)||g.length===0)return G({cardId:m,ok:!0,computed_values:{},errors:[]});let b={id:m,card_data:l.card_data??{},requires:f,source_defs:l.source_defs,compute:g},w=ie.runSync(b,{sourcesData:h}),j=w.node.computed_values??{},F=w.errors??[];return G({cardId:m,ok:F.length===0,computed_values:j,errors:F})}catch(i){return P(i)}}function M(u){try{if(!u.body||typeof u.body!="object"||Array.isArray(u.body))return E("simulateCardCycle requires a JSON object in body");let i=u.body,l=i["card-content"]??i,m=typeof l.id=="string"?l.id:"(unknown)",h=i["mock-fetched-sources"]??{},f=i["mock-requires"]??{},g=a(m,l),b=g.status==="success"?{isValid:g.data.isValid,issues:g.data.issues}:{isValid:!1,issues:[g.status==="fail"?g.error:"internal error"]},w=l.source_defs??[],j=l.card_data??{},F=[],B=[];if(w.length>0){F=ie.enrichSourcesSync(w,{card_data:j,requires:f});for(let D of F){let H=D.projections,p=D._projections;if(H&&p){for(let c of Object.keys(H))if(p[c]===void 0){let y=typeof D.bindTo=="string"?D.bindTo:"(unknown)";B.push({bindTo:y,key:c,error:`Projection "${c}" resolved to undefined`});}}}}let J=[],ee=i["task-executor-ref"],X=(ee?.howToRun&&ee?.whatToRun?ee:void 0)??r().readTaskExecutorRef();for(let D=0;D<F.length;D++){let H=F[D],p=typeof H.bindTo=="string"?H.bindTo:`source_${D}`;if(!X){J.push({bindTo:p,skipped:!0,error:"No task executor configured"});continue}try{let c={...H},y=t.invokeExecutorSync(X,"probe-source-preflight",[],{timeout:H.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(c)}),x=JSON.parse(y.trim());J.push({bindTo:p,reachable:x.reachable,latencyMs:x.latencyMs,error:x.ok?void 0:x.error});}catch{J.push({bindTo:p,skipped:!0,error:"Executor does not support probe-source-preflight"});}}let re=l.compute,A={},_=[];if(re&&Array.isArray(re)&&re.length>0){let D={id:m,card_data:j,requires:f,source_defs:l.source_defs,compute:re},H=ie.runSync(D,{sourcesData:h});A=H.node.computed_values??{},_=H.errors??[];}let L=b.isValid&&B.length===0&&_.length===0&&J.every(D=>D.reachable!==!1);return G({cardId:m,ok:L,validation:b,source_probes:J,projection_errors:B,computed_values:A,compute_errors:_})}catch(i){return P(i)}}return {validateCard:k,validateCardPreflight:v,probeSource:O,probeTmpSource:N,probeSourcePreflight:$,evalCardCompute:q,simulateCardCycle:M,describeTaskExecutorCapabilities:I,updatesInCardStore:R,readFromCardStore:S}}
2
- export{le as BOARD_GRAPH_KEY,Le as EMPTY_CONFIG,Ae as SNAPSHOT_SCHEMA_VERSION_V1,en as createBoardLiveCardsNonCorePublic,Zr as createBoardLiveCardsPublic};//# sourceMappingURL=board-live-cards-public.js.map
1
+ import {createRequire}from'module';import'ajv-formats';var ve="b64:";function Ot(e){let t=new TextEncoder().encode(e),r=globalThis.Buffer,n;if(r)n=r.from(t).toString("base64");else if(typeof btoa=="function"){let o="";for(let s of t)o+=String.fromCharCode(s);n=btoa(o);}else throw new Error("No base64 encoder available in this runtime");return n.replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function jt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-e.length%4)%4),r=globalThis.Buffer;if(r)return r.from(t,"base64").toString("utf8");if(typeof atob=="function"){let n=atob(t),o=new Uint8Array(n.length);for(let s=0;s<n.length;s+=1)o[s]=n.charCodeAt(s);return new TextDecoder().decode(o)}throw new Error("No base64 decoder available in this runtime")}function re(e){return `${ve}${Ot(JSON.stringify(e))}`}function we(e){if(!e.startsWith(ve))throw new Error(`Invalid ref format (expected ${ve}<base64url(json)>): ${e}`);let t;try{t=JSON.parse(jt(e.slice(ve.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${e}`)}if(!t||typeof t!="object")throw new Error(`Invalid ref format (expected object payload): ${e}`);let r=t;if(typeof r.kind!="string"||typeof r.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${e}`);return {kind:r.kind,value:r.value}}async function Ue(e,t,r){let n=e.tryAcquire();if(!n)return false;try{await t();}finally{n();}return r?.(),true}var se={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function ee(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function ae(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function He(e){return e.tasks??{}}function qe(e){return e?e.status===se.FAILED||e.status===se.INACTIVATED:false}function Je(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ze(e){return e.maxExecutions}function Ye(e,t){let r=new Set;for(let[n,o]of Object.entries(t))if(o.status===se.COMPLETED){let s=e.tasks[n];s&&ee(s).forEach(d=>r.add(d));}return Array.from(r)}function Xe(e,t){let r={};return e.forEach(n=>{let o=t[n];if(!o)return;ee(o).forEach(i=>{r[i]||(r[i]=[]),r[i].push(n);});}),r}function We(e,t,r){let n=e.tasks[t]??xe(),o={};if(r){let i=r.tasks[t],d=ae(i);for(let h of d)for(let[w,N]of Object.entries(r.tasks))if(ee(N).includes(h)){let D=e.tasks[w];D?.lastDataHash&&(o[h]=D.lastDataHash);break}}let s={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:o};return {...e,tasks:{...e.tasks,[t]:s},lastUpdated:new Date().toISOString()}}function Qe(e,t,r,n,o,s){let i=e.tasks[r]??xe(),d=t.tasks[r];if(!d)throw new Error(`Task "${r}" not found in graph`);let h;n&&d.on&&d.on[n]?h=d.on[n]:h=ee(d);let w=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let B=d.requires??[];for(let j of B)for(let[b,S]of Object.entries(t.tasks))if(ee(S).includes(j)){let q=e.tasks[b];q?.lastDataHash&&(w[j]=q.lastDataHash);break}}let N={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:o,data:s,lastConsumedHashes:w,error:void 0},D=[...new Set([...e.availableOutputs,...h])];return {...e,tasks:{...e.tasks,[r]:N},availableOutputs:D,lastUpdated:new Date().toISOString()}}function Ze(e,t,r,n){let o=e.tasks[r]??xe(),s=t.tasks[r];if(s?.retry){let h=o.retryCount+1;if(h<=s.retry.max_attempts){let w={...o,status:"not-started",retryCount:h,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:w},lastUpdated:new Date().toISOString()}}}let i={...o,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:o.executionCount+1},d=e.availableOutputs;if(s?.on_failure&&s.on_failure.length>0&&(d=[...new Set([...e.availableOutputs,...s.on_failure])]),s?.circuit_breaker&&i.executionCount>=s.circuit_breaker.max_executions){let h=s.circuit_breaker.on_break;d=[...new Set([...d,...h])];}return {...e,tasks:{...e.tasks,[r]:i},availableOutputs:d,lastUpdated:new Date().toISOString()}}function et(e,t,r,n){let o=e.tasks[t]??xe(),s={...o,progress:typeof n=="number"?n:o.progress,messages:[...o.messages??[],...r?[{message:r,timestamp:new Date().toISOString(),status:o.status}]:[]],lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:s},lastUpdated:new Date().toISOString()}}function tt(e,t){let r=e.tasks[t];if(!r)return e;let n={...r,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:n},lastUpdated:new Date().toISOString()}}function xe(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Ee(e,t){let r=`live-${Date.now()}`,n={};for(let s of Object.keys(e.tasks))n[s]=nt();let o={status:"running",tasks:n,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:r,executionConfig:{executionMode:e.settings.execution_mode??"eligibility-mode",conflictStrategy:e.settings.conflict_strategy??"alphabetical",completionStrategy:e.settings.completion}};return {config:e,state:o}}function Nt(e,t){let{config:r,state:n}=e;if("executionId"in t&&t.executionId&&t.executionId!==n.executionId)return e;switch(t.type){case "task-started":return {config:r,state:We(n,t.taskName,r)};case "task-completed":return {config:r,state:Qe(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:Ze(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:et(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:tt(n,t.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...t.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Lt(n,t.action)};case "task-upsert":return qt(e,t.taskName,t.taskConfig);case "task-removal":return Dt(e,t.taskName);case "node-requires-add":return Ft(e,t.nodeName,t.tokens);case "node-requires-remove":return Pt(e,t.nodeName,t.tokens);case "node-provides-add":return Gt(e,t.nodeName,t.tokens);case "node-provides-remove":return $t(e,t.nodeName,t.tokens);default:return e}}function rt(e,t){return t.reduce((r,n)=>Nt(r,n),e)}function qt(e,t,r){let n=!!e.config.tasks[t];return {config:{...e.config,tasks:{...e.config.tasks,[t]:r}},state:{...e.state,tasks:{...e.state.tasks,[t]:n?e.state.tasks[t]:nt()},lastUpdated:new Date().toISOString()}}}function Dt(e,t){if(!e.config.tasks[t])return e;let{[t]:r,...n}=e.config.tasks,{[t]:o,...s}=e.state.tasks;return {config:{...e.config,tasks:n},state:{...e.state,tasks:s,lastUpdated:new Date().toISOString()}}}function Ft(e,t,r){let n=e.config.tasks[t];if(!n)return e;let o=ae(n),s=r.filter(i=>!o.includes(i));return s.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:[...o,...s]}}},state:e.state}}function Pt(e,t,r){let n=e.config.tasks[t];if(!n)return e;let o=ae(n),s=o.filter(i=>!r.includes(i));return s.length===o.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:s}}},state:e.state}}function Gt(e,t,r){let n=e.config.tasks[t];if(!n)return e;let o=ee(n),s=r.filter(i=>!o.includes(i));return s.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:[...o,...s]}}},state:e.state}}function $t(e,t,r){let n=e.config.tasks[t];if(!n)return e;let o=ee(n),s=o.filter(i=>!r.includes(i));return s.length===o.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:s}}},state:e.state}}function he(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function Te(e){if(!e||typeof e!="object")throw new Error("Invalid snapshot: expected an object");let t=e;if(!t.config||typeof t.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!t.state||typeof t.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=t.config,n=t.state;if(!r.settings||typeof r.settings!="object")throw new Error("Invalid snapshot: config.settings missing");if(!r.tasks||typeof r.tasks!="object")throw new Error("Invalid snapshot: config.tasks missing");if(!n.tasks||typeof n.tasks!="object")throw new Error("Invalid snapshot: state.tasks missing");if(!Array.isArray(n.availableOutputs))throw new Error("Invalid snapshot: state.availableOutputs must be an array");return {config:r,state:n}}function nt(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Lt(e,t){let r=new Date().toISOString();switch(t){case "stop":return {...e,status:"stopped",lastUpdated:r};case "pause":return {...e,status:"paused",lastUpdated:r};case "resume":return {...e,status:"running",lastUpdated:r};default:return e}}function ye(e){let{config:t,state:r}=e,n=He(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let s=Vt(n),i=Ye(t,r.tasks),d=new Set([...i,...r.availableOutputs]),h=[],w=[],N=[],D=[];for(let[j,b]of Object.entries(n)){let S=r.tasks[j],q=Je(b,t.settings),K=q!=="once";if(S?.status===se.RUNNING||qe(S))continue;let g=ze(b);if(g!==void 0&&S&&S.executionCount>=g||b.circuit_breaker&&S&&S.executionCount>=b.circuit_breaker.max_executions||!K&&S?.status===se.COMPLETED)continue;if(K&&S?.status===se.COMPLETED){let c=ae(b),f=false;switch(q){case "data-changed":{c.length>0&&c.some(y=>{for(let[C,_]of Object.entries(n))if(ee(_).includes(y)){let x=r.tasks[C];if(!x)continue;let z=S.lastConsumedHashes?.[y];return x.lastDataHash==null?x.executionCount>S.lastEpoch:x.lastDataHash!==z}return false})||(f=true);break}case "epoch-changed":{c.length>0&&c.some(y=>{for(let[C,_]of Object.entries(n))if(ee(_).includes(y)){let x=r.tasks[C];if(x&&x.executionCount>S.lastEpoch)return true}return false})||(f=true);break}case "time-based":{let m=b.refreshInterval??0;if(m<=0){f=true;break}let y=S.completedAt;if(!y){f=true;break}(Date.now()-Date.parse(y))/1e3<m&&(f=true);break}case "manual":f=true;break}if(f)continue}let v=ae(b);if(v.length===0){h.push(j);continue}let L=[],l=[],u=[];for(let c of v){if(d.has(c))continue;let f=s[c]||[];f.length===0?L.push(c):f.every(y=>qe(r.tasks[y]))?u.push({token:c,failedProducer:f[0]}):l.push(c);}L.length>0?N.push({taskName:j,missingTokens:L}):u.length>0?D.push({taskName:j,failedTokens:u.map(c=>c.token),failedProducers:[...new Set(u.map(c=>c.failedProducer))]}):l.length>0?w.push({taskName:j,waitingOn:l}):h.push(j);}let B={};if(h.length>1){let j=Xe(h,n);for(let[b,S]of Object.entries(j))S.length>1&&(B[b]=S);}return {eligible:h,pending:w,unresolved:N,blocked:D,conflicts:B}}function Vt(e){let t={};for(let[r,n]of Object.entries(e)){for(let o of ee(n))t[o]||(t[o]=[]),t[o].push(r);if(n.on)for(let o of Object.values(n.on))for(let s of o)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);if(n.on_failure)for(let o of n.on_failure)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);}return t}var Se=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function De(e){let t=Fe(e);return Bt(t)}function Fe(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(Fe).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+Fe(t[n])).join(",")+"}"}function Bt(e){let t=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let o=0;o<e.length;o++)t^=BigInt(e.charCodeAt(o)),t=t*r&n;return t.toString(16).padStart(16,"0")}function Kt(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),r="";for(let n of t)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function Mt(e){if(typeof Buffer<"u")return Buffer.from(e,"base64url").toString("utf8");if(typeof atob=="function"){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),o=new Uint8Array(n.length);for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s);return new TextDecoder().decode(o)}throw new Error("No base64 decoder available in this runtime")}function ot(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Kt(t)}function Ut(e){try{let t=JSON.parse(Mt(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function st(e,t,r){let{handlers:n,onDrain:o}=t,s=new Se,i="state"in e&&"config"in e?e:Ee(e),d=false,h=new Set,w=new Map(Object.entries(n)),N=new Se,D=false,B=false;function j(){if(!d){if(D){B=true;return}D=true;try{do B=!1,b();while(B)}finally{D=false;}}}function b(){let g=N.drain(),v=s.drain(),L=[...g,...v];L.length>0&&(i=rt(i,L));let l=ye(i);L.length>0&&o?.(L,i,l);for(let u of l.eligible)K(u);for(let u of L)if(u.type==="task-progress"){let{taskName:c,update:f}=u;if(!i.config.tasks[c])continue;let y=i.state.tasks[c];if(!y||y.status!=="running")continue;let C=ot(c),_=q(c,C,f).catch(x=>{d||(N.append({type:"task-failed",taskName:c,error:x.message??String(x),timestamp:new Date().toISOString()}),j());}).finally(()=>{h.delete(_);});h.add(_);}}function S(g){let L=i.config.tasks[g].requires??[],l=new Map;for(let[c,f]of Object.entries(i.config.tasks))for(let m of f.provides??[])l.set(m,c);let u={};for(let c of L){let f=l.get(c);f?u[c]=i.state.tasks[f]?.data:u[c]=void 0;}return u}async function q(g,v,L){let l=i.config.tasks[g],u=l.taskHandlers??[],c=S(g);for(let f of u){let m=w.get(f);if(!m)throw new Error(`Handler '${f}' not found in registry (task '${g}')`);let y={nodeId:g,state:c,taskState:i.state.tasks[g],config:l,callbackToken:v,update:L};if(await m(y)==="task-initiate-failure")throw new Error(`Handler '${f}' returned task-initiate-failure (task '${g}')`)}}function K(g){let L=i.config.tasks[g]?.taskHandlers;if(!L||L.length===0)return;N.append({type:"task-started",taskName:g,timestamp:new Date().toISOString()}),j();let l=ot(g),u=q(g,l).catch(c=>{d||(N.append({type:"task-failed",taskName:g,error:c.message??String(c),timestamp:new Date().toISOString()}),j());}).finally(()=>{h.delete(u);});h.add(u);}return {push(g){d||(g.type==="task-completed"&&g.data&&!g.dataHash&&(g={...g,dataHash:De(g.data)}),s.append(g),j());},pushAll(g){if(!d){for(let v of g)v.type==="task-completed"&&v.data&&!v.dataHash?s.append({...v,dataHash:De(v.data)}):s.append(v);j();}},resolveCallback(g,v,L){if(d)return;let l=Ut(g);if(!l)return;let{taskName:u}=l;if(i.config.tasks[u]){if(L&&L.length>0)s.append({type:"task-failed",taskName:u,error:L.join("; "),timestamp:new Date().toISOString()});else {let c=v&&Object.keys(v).length>0?De(v):void 0;s.append({type:"task-completed",taskName:u,data:v,dataHash:c,timestamp:new Date().toISOString()});}j();}},addNode(g,v){d||(s.append({type:"task-upsert",taskName:g,taskConfig:v,timestamp:new Date().toISOString()}),j());},removeNode(g){d||(s.append({type:"task-removal",taskName:g,timestamp:new Date().toISOString()}),j());},addRequires(g,v){d||(s.append({type:"node-requires-add",nodeName:g,tokens:v,timestamp:new Date().toISOString()}),j());},removeRequires(g,v){d||(s.append({type:"node-requires-remove",nodeName:g,tokens:v,timestamp:new Date().toISOString()}),j());},addProvides(g,v){d||(s.append({type:"node-provides-add",nodeName:g,tokens:v,timestamp:new Date().toISOString()}),j());},removeProvides(g,v){d||(s.append({type:"node-provides-remove",nodeName:g,tokens:v,timestamp:new Date().toISOString()}),j());},registerHandler(g,v){w.set(g,v);},unregisterHandler(g){w.delete(g);},retrigger(g){d||i.config.tasks[g]&&(s.append({type:"task-restart",taskName:g,timestamp:new Date().toISOString()}),j());},retriggerAll(g){if(!d){for(let v of g)i.config.tasks[v]&&s.append({type:"task-restart",taskName:v,timestamp:new Date().toISOString()});j();}},snapshot(){return he(i)},getState(){return i},getSchedule(){return ye(i)},async waitForHandlers(){h.size>0&&await Promise.allSettled([...h]);},async dispose(g){g?.wait&&h.size>0&&await Promise.allSettled([...h]),d=true;}}}var Jt=createRequire(import.meta.url);Jt("./jsonata-sync.cjs");var Yt=createRequire(import.meta.url),Ae=Yt("./jsonata-sync.cjs"),ut=Ae;function at(e,t){if(!t||!e)return;let r=t.split("."),n=e;for(let o=0;o<r.length;o++){if(n==null)return;n=n[r[o]];}return n}function ct(e,t,r){let n=t.split("."),o=e;for(let s=0;s<n.length-1;s++)(o[n[s]]==null||typeof o[n[s]]!="object")&&(o[n[s]]={}),o=o[n[s]];o[n[n.length-1]]=r;}async function Xt(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let o of e.compute)try{let s=await Ae(o.expr).evaluate(n);ct(e.computed_values,o.bindTo,s),n.computed_values=e.computed_values;}catch{}return e}function Wt(e,t){if(!e?.compute?.length)return {ok:true,node:e};e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values},o=[];for(let s of e.compute)try{let i=ut(s.expr).evaluate(n);ct(e.computed_values,s.bindTo,i),n.computed_values=e.computed_values;}catch(i){let d=i instanceof Error?i.message:String(i);o.push({bindTo:s.bindTo,error:d});}return o.length>0?{ok:true,node:e,errors:o}:{ok:true,node:e}}async function Qt(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return Ae(e).evaluate(n)}function Zt(e,t){return t.startsWith("fetched_sources.")?at(e._sourcesData??{},t.slice(16)):at(e,t)}var it=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),er=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function tr(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:false,errors:["Node must be a non-null object"]};let r=e;(typeof r.id!="string"||!r.id)&&t.push("id: required, must be a non-empty string");for(let n of Object.keys(r))er.has(n)||t.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&t.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))t.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&t.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&t.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&t.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,o)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`provides[${o}]: must be an object with bindTo and ref`);else {let s=n;(typeof s.bindTo!="string"||!s.bindTo)&&t.push(`provides[${o}]: missing required "bindTo" string`),(typeof s.ref!="string"||!s.ref)&&t.push(`provides[${o}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,o)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`compute[${o}]: must be a compute step object`);else {let s=n;(typeof s.bindTo!="string"||!s.bindTo)&&t.push(`compute[${o}]: missing required "bindTo" property`),(typeof s.expr!="string"||!s.expr)&&t.push(`compute[${o}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))t.push("source_defs: must be an array");else {let n=new Set,o=new Set;r.source_defs.forEach((s,i)=>{if(!s||typeof s!="object"||Array.isArray(s))t.push(`source_defs[${i}]: must be an object`);else {let d=s;typeof d.bindTo!="string"||!d.bindTo?t.push(`source_defs[${i}]: missing required "bindTo" property`):(n.has(d.bindTo)&&t.push(`source_defs[${i}]: bindTo "${d.bindTo}" is not unique across source_defs`),n.add(d.bindTo)),typeof d.outputFile!="string"||!d.outputFile?t.push(`source_defs[${i}]: missing required "outputFile" property`):(o.has(d.outputFile)&&t.push(`source_defs[${i}]: outputFile "${d.outputFile}" is not unique across source_defs`),o.add(d.outputFile)),d.optionalForCompletionGating!=null&&typeof d.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${i}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))t.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?t.push("view.elements: required, must be a non-empty array"):n.elements.forEach((o,s)=>{if(!o||typeof o!="object"){t.push(`view.elements[${s}]: must be an object`);return}!o.kind||typeof o.kind!="string"?t.push(`view.elements[${s}].kind: required, must be a string`):it.has(o.kind)||t.push(`view.elements[${s}].kind: unknown kind "${o.kind}". Valid: ${[...it].join(", ")}`),o.data!=null&&(typeof o.data!="object"||Array.isArray(o.data))&&t.push(`view.elements[${s}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&t.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function rr(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(e.map(async n=>{let o={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[s,i]of Object.entries(n.projections))if(typeof i=="string"&&i.trim().length>0)try{o[s]=await Ae(i).evaluate(r);}catch{o[s]=void 0;}}return {...n,_projections:o}}))}function nr(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return e.map(n=>{let o={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[s,i]of Object.entries(n.projections))if(typeof i=="string"&&i.trim().length>0)try{o[s]=ut(i).evaluate(r);}catch{o[s]=void 0;}}return {...n,_projections:o}})}var ie={run:Xt,runSync:Wt,eval:Qt,resolve:Zt,validate:tr,enrichSources:rr,enrichSourcesSync:nr};function dt(e){return JSON.stringify(e)}function lt(e){let t;try{t=JSON.parse(e);}catch{throw new Error(`parseExecutionRef: invalid JSON \u2014 ${e}`)}if(typeof t!="object"||t===null||typeof t.howToRun!="string"||typeof t.whatToRun!="string")throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun \u2014 ${e}`);return t}function Pe(e,t){function r(){return e.readIndex()??{}}function n(o,s,i){let d=String(s||"").split(".").filter(Boolean);if(d.length===0)return i&&typeof i=="object"&&!Array.isArray(i)?i:{value:i};let h={...o},w=h;for(let N=0;N<d.length-1;N++){let D=d[N],B=w[D],j=B&&typeof B=="object"&&!Array.isArray(B)?{...B}:{};w[D]=j,w=j;}return w[d[d.length-1]]=i,h}return {readCard(o){let s=r()[o];return !s||!e.cardExists(s.key)?null:e.readCard(s.key)},readCardKey(o){return r()[o]?.key??null},readAllCards(){let o=[];for(let[s,i]of Object.entries(r())){if(!e.cardExists(i.key))continue;let d=e.readCard(i.key);d?o.push(d):t?.(`[card-store] could not read card "${s}" at key "${i.key}"`);}return o},readChecksumIndex(){let o={};for(let[s,i]of Object.entries(r()))o[s]=i.checksum;return o},changedSince(o){let s=r(),i=[];for(let[d,h]of Object.entries(s))o[d]!==h.checksum&&i.push(d);for(let d of Object.keys(o))s[d]||i.push(d);return i},validateUpsert(o,s){let i=r(),d=i[o],h=Object.entries(i).find(([,w])=>w.key===s);return d&&d.key!==s?{ok:false,error:`Card id "${o}" is already mapped to key "${d.key}", cannot remap to "${s}"`}:h&&h[0]!==o?{ok:false,error:`Key "${s}" is already mapped to card id "${h[0]}", cannot remap to "${o}"`}:{ok:true}},writeCard(o,s,i){let d=r(),h=i??d[o]?.key??e.defaultCardKey(o),w=e.writeCard(h,s);d[o]={key:h,checksum:w,updatedAt:new Date().toISOString()},e.writeIndex(d);},patchCard(o,s,i){let d=r(),h=d[o];if(!h||!e.cardExists(h.key))throw new Error(`card "${o}" not found`);let w=e.readCard(h.key);if(!w||typeof w!="object"||Array.isArray(w))throw new Error(`card "${o}" is not patchable`);let N=n(w,s,i),D=e.writeCard(h.key,N);d[o]={key:h.key,checksum:D,updatedAt:new Date().toISOString()},e.writeIndex(d);},removeCard(o){let s=r(),i=s[o];i&&(e.removeCard(i.key),delete s[o],e.writeIndex(s));},readIndex(){return r()}}}function Ge(e,t){return {readSourceData(r,n){let o=e.read(`${r}/${n}`);if(o==null)return null;let s=o.trim();if(!s)return null;try{return JSON.parse(s)}catch{return s}},ingestSourceDataStaged(r,n,o,s){let i=t(o);e.write(`${r}/.staged/${s}/${n}`,i);},commitSourceData(r,n,o){let s=`${r}/.staged/${o}/${n}`,i=e.read(s);return i==null?false:(e.write(`${r}/${n}`,i),e.remove(s),true)},hasSource(r,n){return e.exists(`${r}/${n}`)}}}function kt(e){function t(r){let n=e.readAllEntries();if(!r)return n;let o=n.findIndex(s=>s.id===r);return o===-1?n:n.slice(o+1)}return {readEntriesAfterCursor(r){let n=t(r);return n.length===0?{events:[],newCursor:r}:{events:n.map(o=>o.event),newCursor:n[n.length-1].id}},pendingCount(r){return t(r).length},appendEvent(r){e.appendEntry({id:e.generateId(),event:r});}}}function ht(e,t){return {appendEntries(r,n){if(!r||n.length===0)return;let o=e.read(r)??[];e.write(r,[...o,...n]);},dispatchEntriesForJournalId(r,n){if(!r)return;let o=e.read(r);if(!(!o||o.length===0)){for(let s of o)try{n(s);}catch(i){let d=i instanceof Error?i.message:String(i);try{t(s,d);}catch{}}e.delete(r);}}}}var _e="v1",le="board/graph",yt="board/lastJournalProcessedId";function ft(e){return `cards/${e}/runtime`}function St(e){return {readRuntime(t){return e.read(ft(t))??{_sources:{}}},writeRuntime(t,r){e.write(ft(t),r);}}}function or(e,t){let r={...e};for(let n of t.deleteKeys)delete r[n];return {...r,...t.shallowMerge}}function Ct(e){return {readSnapshot(t){return e.readValues(t)},commitSnapshot(t,r){if(r.schemaVersion!==_e)throw new Error(`Unsupported snapshot schema version: ${r.schemaVersion}`);let n=e.readValues(t);if(n.version!==r.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:n.version};let o=or(n.values,r);return {ok:true,newVersion:e.writeValues(t,o,r.deleteKeys)}}}}function $e(e){function t(r){let n=e.read(r);return n==null?null:typeof n=="string"?n:JSON.stringify(n)}return {readTaskExecutorRef(){let r=t("task-executor");if(r?.trim())return lt(r.trim())},writeTaskExecutorRef(r){e.write("task-executor",dt(r));},readChatHandlerFlow(){return e.read("chat-handler-flow")},writeChatHandlerFlow(r){e.write("chat-handler-flow",r);},readCardStoreRef(){return t("card-store-ref")},writeCardStoreRef(r){e.write("card-store-ref",r);},readOutputsStoreRef(){return t("outputs-store-ref")},writeOutputsStoreRef(r){e.write("outputs-store-ref",r);},readScratchStoreRef(){return t("scratch-store-ref")},writeScratchStoreRef(r){e.write("scratch-store-ref",r);},readArchiveStoreRef(){return t("archive-store-ref")},writeArchiveStoreRef(r){e.write("archive-store-ref",r);}}}function Rt(e){return {writeComputedValues(t,r){e.write(`cards/${t}/computed_values`,r);},readComputedValues(t){return e.read(`cards/${t}/computed_values`)},readAllComputedValues(){let t={};for(let r of e.listKeys("cards/")){let n=r.match(/^cards\/([^/]+)\/computed_values$/);n&&(t[n[1]]=e.read(r));}return t},writeDataObjects(t){for(let[r,n]of Object.entries(t))r&&e.write(`data-objects/${r}`,n);},readDataObject(t){return e.read(`data-objects/${t}`)},readAllDataObjects(){let t={};for(let r of e.listKeys("data-objects/"))t[r.slice(13)]=e.read(r);return t},writeStatusSnapshot(t){e.write("status",t);},readStatusSnapshot(){return e.read("status")}}}function pt(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function sr(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function gt(e,t){return e?.lastRequestedToken?sr(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<t?"dispatch":"idle":"dispatch"}function ar(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"success"}}function mt(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"failure"}}function Ie(e,t){let r=t.state.tasks,n=t.config.tasks,o=Object.keys(r),s=ye(t),i={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},d=new Map;for(let b of s.pending)d.set(b.taskName,b.waitingOn);for(let b of s.unresolved)d.set(b.taskName,b.missingTokens);for(let b of s.blocked)d.set(b.taskName,b.failedTokens);let h=new Map;for(let[b,S]of Object.entries(n))for(let q of S.requires??[]){let K=h.get(q)??[];K.push(b),h.set(q,K);}let w=o.sort().map(b=>{let S=r[b],q=n[b]??{requires:[],provides:[]};S.status==="completed"?i.completed+=1:S.status==="failed"?i.failed+=1:S.status==="in-progress"&&(i.in_progress+=1);let K=q.requires??[],g=q.provides??[],v=Object.keys(S.data??{}).sort(),L=K.filter(y=>t.state.availableOutputs.includes(y)),l=K.filter(y=>!t.state.availableOutputs.includes(y)),u=d.get(b)??l,c=new Set;for(let y of g)for(let C of h.get(y)??[])C!==b&&c.add(C);let f=S.failedAt,m=S.error?{message:S.error,code:"TASK_FAILED",at:f,source:"task-runtime"}:void 0;return {name:b,status:S.status,error:m,requires:K,requires_satisfied:L,requires_missing:l,provides_declared:g,provides_runtime:v,blocked_by:u,unblocks:Array.from(c).sort(),runtime:{attempt_count:S.executionCount??0,restart_count:S.retryCount??0,in_progress_since:S.status==="in-progress"?S.startedAt??null:null,last_transition_at:S.lastUpdated??null,last_completed_at:S.completedAt??null,last_restarted_at:S.startedAt??null,status_age_ms:S.lastUpdated?0:null}}});i.pending=s.pending.length,i.blocked=s.blocked.length,i.unresolved=s.unresolved.length;let N=w.map(b=>({name:b.name,fanOut:b.unblocks.length})).sort((b,S)=>S.fanOut-b.fanOut||b.name.localeCompare(S.name)),D=N.length>0?N[0]:{name:null,fanOut:0},B=new Set;for(let b of Object.values(n))for(let S of b.requires??[])B.add(S);let j=0;for(let[b,S]of Object.entries(n)){let q=(S.requires??[]).length===0,g=(S.provides??[]).some(v=>(h.get(v)??[]).some(L=>L!==b));q&&!g&&(j+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:o.length,completed:i.completed,eligible:s.eligible.length,pending:i.pending,blocked:i.blocked,unresolved:i.unresolved,failed:i.failed,in_progress:i.in_progress,orphan_cards:j,topology:{edge_count:Array.from(B).length,max_fan_out_card:D.name,max_fan_out:D.fanOut}},cards:w}}function ir(){return new Date().toISOString()}function bt(e,t,r,n,o,s,i){return async d=>{let h=[],w=r.cardStore.readCard(d.nodeId);if(!w)return "task-initiate-failure";let N=w.id,D=w.card_data??{},B=w.source_defs??[],j=B.filter(T=>T.optionalForCompletionGating!==true),b=r.cardRuntimeStore.readRuntime(N),S=false,q=()=>{S&&(r.cardRuntimeStore.writeRuntime(N,b),S=false);},K=T=>pt(b._sources[T]),g=(T,I)=>{b._sources[T]=pt(I),S=true;},v=d.taskState?.executionCount??0;if(b._lastExecutionCount!==v&&(b._sources={},b._lastExecutionCount=v,S=true),d.update){let T=d.update,I=T.outputFile;if(I){let G=K(I);if(T.failure){let H=T.rqt??G.lastRequestedToken??G.queueRequestedToken;H&&g(I,mt(G,H));}else {let H=T.rqt;if(!G.lastCompletedToken||H>G.lastCompletedToken){let Q=typeof T.deliveryToken=="string"?T.deliveryToken:void 0,p=false;Q&&(p=r.fetchedSourcesStore.commitSourceData(N,I,Q)),p?g(I,ar(G,H)):g(I,mt(G,H));}}q();}}let l={};for(let T of B)if(T.outputFile){let I=r.fetchedSourcesStore.readSourceData(N,T.outputFile);I!==null&&(l[T.bindTo]=I);}let u={};for(let[T,I]of Object.entries(d.state??{}))if(I!==null&&typeof I=="object"&&!Array.isArray(I)){let G=I[T];u[T]=G!==void 0?G:I;}else u[T]=I;let c={id:N,card_data:{...D},requires:u,source_defs:B,compute:w.compute};c._sourcesData=l,w.compute&&ie.runSync(c,{sourcesData:l}),(s??r.outputStore.writeComputedValues.bind(r.outputStore))(N,c.computed_values??{});let f={...w},m=ie.enrichSourcesSync(Array.isArray(w.source_defs)?w.source_defs:void 0,{card_data:w.card_data,requires:u}),y=e.value;f.source_defs=Array.isArray(m)?m.map(T=>({...T,boardDir:typeof T.boardDir=="string"&&T.boardDir?T.boardDir:y})):m;let C=ir(),_=d.update?void 0:C,x=j.filter(T=>{let I=T.outputFile;if(typeof I!="string"||!I)return true;let G=K(I);_&&(G={...G,queueRequestedToken:_},g(I,G));let H=G.queueRequestedToken??G.lastRequestedToken??C,Q=gt(G,H);return Q==="in-flight"?false:Q==="dispatch"});if(q(),x.length>0){let T=false,I=C;for(let G of x){let H=G.outputFile;if(typeof H!="string"||!H)continue;let Q=K(H),p=Q.queueRequestedToken??C;g(H,{...Q,lastRequestedToken:p}),I=p,T=true;}return T&&q(),T&&(h.push({taskKind:"source-fetch",payload:{boardRef:re(e),enrichedCard:f,callbackToken:d.callbackToken,rqt:I}}),r.executionRequestStore.appendEntries(t,h)),"task-initiated"}if(j.some(T=>{let I=T.outputFile;if(typeof I!="string"||!I)return false;let G=K(I),H=G.queueRequestedToken??G.lastRequestedToken??C;return gt(G,H)==="in-flight"}))return "task-initiated";let U=w.provides??[],W={};for(let{bindTo:T,ref:I}of U)W[T]=ie.resolve(c,I);return (i??r.outputStore.writeDataObjects.bind(r.outputStore))(W),B.filter(T=>{if(T.optionalForCompletionGating!==true)return false;let I=K(T.outputFile);return !I.lastRequestedToken||!I.lastCompletedToken?true:I.lastCompletedToken<=I.lastRequestedToken}).length>0&&h.push({taskKind:"source-fetch",payload:{boardRef:re(e),enrichedCard:f,callbackToken:d.callbackToken,rqt:C}}),n(d.nodeId,W),h.length>0&&r.executionRequestStore.appendEntries(t,h),"task-initiated"}}var Le={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function vt(e){return {[le]:e.graph,[yt]:e.lastDrainedJournalId}}function wt(e){let t=e[le],r=e[yt];if(!t||typeof t!="object")throw new Error(`State snapshot is missing required key: ${le}`);return {graph:t,lastDrainedJournalId:typeof r=="string"?r:""}}function xt(e){let t=e.requires,r=e.provides?.map(n=>n.bindTo)??[];return {requires:t&&t.length>0?t:void 0,provides:r,taskHandlers:["card-handler"],description:e.meta?.title??e.id}}function F(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function A(e){return {status:"fail",error:e}}function $(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function ur(e){let t=new TextEncoder().encode(e),r=Array.from(t,n=>String.fromCharCode(n)).join("");return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Tt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),o=Uint8Array.from(n,s=>s.charCodeAt(0));return new TextDecoder().decode(o)}function Oe(e){try{let t=JSON.parse(Tt(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function cr(e){return ur(JSON.stringify(e))}function Et(e){try{let t=JSON.parse(Tt(e));return typeof t?.cbk=="string"&&typeof t?.cid=="string"&&typeof t?.b=="string"&&typeof t?.d=="string"?t:null}catch{return null}}function Y(){return new Date().toISOString()}function Zr(e,t){let r=t.onWarn??(()=>{}),n=re(e);function o(p){if(p.length!==0)try{let a=t.publishBoardChangeNotifications?.(p);a&&typeof a.catch=="function"&&a.catch(k=>r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${k instanceof Error?k.message:String(k)}`));}catch(a){r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${a instanceof Error?a.message:String(a)}`);}}function s(){let p=d().readCardStoreRef();if(!p)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let a=t.kvStorageForRef(p);return {readIndex(){return a.read("_index")},writeIndex(k){a.write("_index",k);},readCard(k){return a.read(k)},writeCard(k,E){return a.write(k,E),t.hashFn(E)},removeCard(k){a.delete(k);},cardExists(k){return a.read(k)!==null},defaultCardKey(k){return k}}}let i={readValues(p){let a=t.kvStorage("state-snapshot"),k=a.listKeys().sort();if(k.length===0)return {version:null,values:{}};let E={};for(let V of k)E[V]=a.read(V);return {version:t.hashFn(E),values:E}},writeValues(p,a,k){let E=t.kvStorage("state-snapshot");for(let V of k)E.delete(V);for(let[V,P]of Object.entries(a))E.write(V,P);return t.hashFn(a)}},d=()=>$e(t.kvStorage("config")),h=()=>Ct(i),w=()=>kt(t.journalAdapter()),N=()=>Pe(s(),r),D=()=>{let p=d().readOutputsStoreRef();if(!p)throw new Error(`Board at ${e.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return Rt(t.kvStorageForRef(p))},B=()=>{let p=d().readArchiveStoreRef();return p?t.archiveFactoryForRef(p):t.archiveFactory()};function j(){return !!h().readSnapshot(e.value).values[le]}function b(){let p=h().readSnapshot(e.value);if(!p.values[le])throw new Error(`Board not initialized at ${e.value}`);return wt(p.values)}function S(p,a){let k=h().commitSnapshot(e.value,{schemaVersion:_e,expectedVersion:a,commitId:t.genId(),committedAt:Y(),deleteKeys:[],shallowMerge:vt(p)});if(!k.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${a??"null"} current=${k.currentVersion??"null"}`)}function q(p){w().appendEvent(p);}async function K(){let p=(R,O)=>{let M=R.payload,oe=(M?.enrichedCard??{}).id??M?.cardId??"unknown";q({type:"task-failed",taskName:oe,error:O,timestamp:Y()});},a=ht(t.kvStorage("execution-requests"),p),k=St(t.kvStorage("card-runtime")),E=Ge(t.blobStorage("sources"),R=>t.resolveBlob(R)),V=new Map,P={readRuntime(R){return V.get(R)??k.readRuntime(R)},writeRuntime(R,O){V.set(R,O);}},J=[],X=new Map,ne={readSourceData(R,O){let M=`${R}/${O}`;return X.has(M)?X.get(M):E.readSourceData(R,O)},ingestSourceDataStaged(R,O,M,ge){E.ingestSourceDataStaged(R,O,M,ge);},commitSourceData(R,O,M){let ge=`${R}/.staged/${M}/${O}`,be=t.blobStorage("sources").read(ge);if(be==null)return false;let me=`${R}/${O}`,Me=be.trim();try{X.set(me,JSON.parse(Me));}catch{X.set(me,Me);}return J.push({cardId:R,outputFile:O,deliveryToken:M}),true},hasSource(R,O){let M=`${R}/${O}`;return X.has(M)?true:E.hasSource(R,O)}},Z={cardStore:N(),cardRuntimeStore:P,fetchedSourcesStore:ne,outputStore:D(),executionRequestStore:a},ue=b(),ce=Te(ue.graph),{events:fe,newCursor:pe}=w().readEntriesAfterCursor(ue.lastDrainedJournalId),de=[],je=[],Ne=[],Ve=new Map,At=(R,O)=>{de.push({type:"task-completed",taskName:R,data:O,timestamp:Y()});try{B().stream("exec-history").append({taskName:R,status:"completed",completedAt:Y()});}catch{}},Be=(R,O)=>{q({type:"task-failed",taskName:R,error:O,timestamp:Y()});try{B().stream("exec-history").append({taskName:R,status:"failed",error:O,completedAt:Y()});}catch{}},Ce=st(ce,{handlers:{"card-handler":bt(e,pe,Z,At,Be,(R,O)=>{je.push({cardId:R,values:O});},R=>{Ne.push(R);})}});for(de=fe;de.length>0;){let R=de;de=[];for(let O of R)if(O.type==="task-restart"){let M=Z.cardStore.readCard(O.taskName);M&&Ve.set(O.taskName,M);}Ce.pushAll(R),await Ce.waitForHandlers();}let Ke=Ce.getState();await Ce.dispose({wait:true});let _t=h().readSnapshot(e.value).version;S({lastDrainedJournalId:pe,graph:he(Ke)},_t);for(let{cardId:R,values:O}of je)Z.outputStore.writeComputedValues(R,O);for(let R of Ne)Z.outputStore.writeDataObjects(R);for(let[R,O]of V)k.writeRuntime(R,O);for(let{cardId:R,outputFile:O,deliveryToken:M}of J)E.commitSourceData(R,O,M);let Re;try{Re=Ie(n,Ke),Z.outputStore.writeStatusSnapshot(Re);}catch(R){r(`[board-live-cards-public] status publish failed: ${R instanceof Error?R.message:String(R)}`);}let ke=[];for(let{cardId:R,values:O}of je)ke.push({kind:"computed_values",cardId:R,values:O});for(let R of Ne)for(let[O,M]of Object.entries(R))O&&ke.push({kind:"data_object",key:O,payload:M});for(let[R,O]of Ve)ke.push({kind:"card_refreshed",cardId:R,card:O});Re!==void 0&&ke.push({kind:"status",status:Re}),o(ke);let It=d().readTaskExecutorRef()??{howToRun:"built-in",whatToRun:re({kind:"built-in",value:"source-cli-task-executor"})};a.dispatchEntriesForJournalId(pe,R=>{if(R.taskKind!=="source-fetch"){r(`[process-accumulated-events] unknown taskKind "${R.taskKind}" \u2014 skipping`);return}let O=R.payload,M=O.enrichedCard?.id??"unknown",ge=O.enrichedCard?.source_defs??[];for(let oe of ge){if(!oe.outputFile){r(`[dispatch] source "${oe.bindTo}" has no outputFile \u2014 skipping`);continue}let be=cr({cbk:O.callbackToken,rg:e.value,br:re(e),cid:M,b:oe.bindTo,d:oe.outputFile,cs:void 0,rqt:O.rqt});t.dispatchExecution(It,{source_def:oe,base_ref:re(e),callback:{token:be,via:t.selfRef}}).catch(me=>Be(M,me instanceof Error?me.message:String(me)));}});}async function g(){try{let p=()=>{let k=b(),{events:E}=w().readEntriesAfterCursor(k.lastDrainedJournalId);E.length<=0||(g(),t.requestProcessAccumulated?.());},a=await Ue(t.lock,K,p);return F({ran:a!==!1})}catch(p){return $(p)}}function v(){g(),t.requestProcessAccumulated?.();}function L(p){try{let a=p.params?.cardStoreRef;if(!a)return A("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(!j()){let X=Ee(Le);S({lastDrainedJournalId:"",graph:he(X)},null);}let k=p.params?.outputsStoreRef;if(!k)return A("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let E=p.params?.scratchStoreRef,V=p.params?.archiveStoreRef,P=d();P.writeCardStoreRef(a),P.writeOutputsStoreRef(k),E&&P.writeScratchStoreRef(E),V&&P.writeArchiveStoreRef(V);let J=p.body??{};J["task-executor-ref"]&&P.writeTaskExecutorRef(J["task-executor-ref"]),Object.prototype.hasOwnProperty.call(J,"chat-handler-flow")&&P.writeChatHandlerFlow(J["chat-handler-flow"]);try{D().writeStatusSnapshot(Ie(n,Te(b().graph)));}catch{}return F()}catch(a){return $(a)}}function l(p){try{let a=D().readStatusSnapshot();if(!a){a=Ie(n,Te(b().graph));try{D().writeStatusSnapshot(a);}catch{}}return F(a)}catch(a){return $(a)}}function u(p){try{let a=p.params?.id;return a?(q({type:"task-removal",taskName:a,timestamp:Y()}),v(),F()):A("removeCard requires params.id")}catch(a){return $(a)}}function c(p){try{let a=p.params?.id;return a?(q({type:"task-restart",taskName:a,timestamp:Y()}),v(),F()):A("retrigger requires params.id")}catch(a){return $(a)}}async function f(p){return g()}function m(p){try{let a=p.params?.cardId,k=p.params?.all,E=!!p.params?.restart;if(!a&&!k)return A("upsertCard requires --card-id <id> or --all");let V=k?N().readAllCards().map(P=>P.id):[a];for(let P of V)if(!N().readCard(P))return A(`Card "${P}" not found in board at ${e.value}`);for(let P of V){let J=N().readCard(P),X=xt(J),ne=t.hashFn(X),Z=t.kvStorage("card-upsert"),ue=Z.read(P),ce=ue?.taskConfigHash!==ne;if(!(!ce&&!E)){if(ce){let fe=ue?.blobRef??N().readCardKey(P)??P;q({type:"task-upsert",taskName:P,taskConfig:X,timestamp:Y()}),Z.write(P,{blobRef:fe,taskConfigHash:ne,updatedAt:Y()});}E&&q({type:"task-restart",taskName:P,timestamp:Y()});}}return v(),F()}catch(a){return $(a)}}function y(p){try{let a=p.params?.token;if(!a)return A("taskFailed requires params.token");let k=p.params?.error??"unknown error",E=Oe(a);if(!E)return A("Invalid callback token");q({type:"task-failed",taskName:E.taskName,error:k,timestamp:Y()});try{B().stream("exec-history").append({taskName:E.taskName,status:"failed",error:k,completedAt:Y()});}catch{}return v(),F()}catch(a){return $(a)}}function C(p){try{let a=p.params?.token;if(!a)return A("taskProgress requires params.token");let E=(p.body??{}).update??{},V=Oe(a);return V?(q({type:"task-progress",taskName:V.taskName,update:E,timestamp:Y()}),v(),F()):A("Invalid callback token")}catch(a){return $(a)}}function _(p){try{let a=p.params?.token,k=p.params?.ref;if(!a)return A("sourceDataFetched requires params.token");if(!k)return A("sourceDataFetched requires params.ref");let E=Et(a);if(!E)return A("Invalid source token");let{cbk:V,cid:P,b:J,d:X,cs:ne,rqt:Z}=E,ue=Ge(t.blobStorage("sources"),de=>t.resolveBlob(de)),ce=t.genId();ue.ingestSourceDataStaged(P,X,we(k),ce);let fe=Oe(V);if(!fe)return A("Invalid callback token embedded in source token");let pe=Y();return q({type:"task-progress",taskName:fe.taskName,update:{bindTo:J,outputFile:X,fetchedAt:pe,deliveryToken:ce,sourceChecksum:ne,rqt:Z},timestamp:pe}),v(),F()}catch(a){return $(a)}}function x(p){try{let a=p.params?.token,k=p.params?.reason??"unknown";if(!a)return A("sourceDataFetchFailure requires params.token");let E=Et(a);if(!E)return A("Invalid source token");let{cbk:V,b:P,d:J,cs:X,rqt:ne}=E,Z=Oe(V);return Z?(q({type:"task-progress",taskName:Z.taskName,update:{bindTo:P,outputFile:J,failure:!0,reason:k,sourceChecksum:X,rqt:ne},timestamp:Y()}),v(),F()):A("Invalid callback token embedded in source token")}catch(a){return $(a)}}function z(p){try{let a=d().readCardStoreRef();return a?F({storeRef:a}):A(`Board at ${e.value} has no card store configured`)}catch(a){return $(a)}}function U(p){try{let a=d().readOutputsStoreRef();return a?F({storeRef:a}):A(`Board at ${e.value} has no outputs store configured`)}catch(a){return $(a)}}function W(p){try{let a=d().readScratchStoreRef();return F({storeRef:a})}catch(a){return $(a)}}function te(p){try{let a=d().readArchiveStoreRef();return F({storeRef:a})}catch(a){return $(a)}}function T(p){try{let a=p.params?.key;if(!a)return A("getConfig requires params.key");let k=d(),E;switch(a){case "task-executor":E=k.readTaskExecutorRef()??null;break;case "chat-handler-flow":E=k.readChatHandlerFlow()??null;break;case "card-store-ref":E=k.readCardStoreRef();break;case "outputs-store-ref":E=k.readOutputsStoreRef();break;case "scratch-store-ref":E=k.readScratchStoreRef();break;case "archive-store-ref":E=k.readArchiveStoreRef();break;default:return A(`getConfig: unknown key "${a}"`)}return F({value:E})}catch(a){return $(a)}}function I(p){try{let a=p.params?.key;if(!a)return A("getOutputsDataObject requires params.key");let k=D().readDataObject(a);return F(k)}catch(a){return $(a)}}function G(p){try{return F(D().readAllDataObjects())}catch(a){return $(a)}}function H(p){try{let a=p.params?.key;if(!a)return A("getOutputsComputedValues requires params.key");let k=D().readComputedValues(a);return F(k)}catch(a){return $(a)}}function Q(p){try{return F(D().readAllComputedValues())}catch(a){return $(a)}}return {init:L,status:l,getCardStoreRef:z,getOutputsStoreRef:U,getScratchStoreRef:W,getArchiveStoreRef:te,getConfig:T,getOutputsDataObject:I,getAllOutputsDataObjects:G,getOutputsComputedValues:H,getAllOutputsComputedValues:Q,removeCard:u,retrigger:c,processAccumulatedEvents:f,upsertCard:m,taskFailed:y,taskProgress:C,sourceDataFetched:_,sourceDataFetchFailure:x}}function en(e,t){let r=()=>$e(t.kvStorage("config"));function n(){let l=r().readCardStoreRef();if(!l)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let u=t.kvStorageForRef(l);return {readIndex(){return u.read("_index")},writeIndex(c){u.write("_index",c);},readCard(c){return u.read(c)},writeCard(c,f){return u.write(c,f),t.hashFn(f)},removeCard(c){u.delete(c);},cardExists(c){return u.read(c)!==null},defaultCardKey(c){return c}}}let o=()=>Pe(n(),t.onWarn??(()=>{})),s=()=>{let l=r().readScratchStoreRef();return l?t.scratchStorageForRef(l):t.scratchStorage()};function i(l,u){let c=t.validateSchema(u),f=[],m=r().readTaskExecutorRef();if(m&&Array.isArray(u.source_defs))for(let C of u.source_defs){let _=typeof C.bindTo=="string"?C.bindTo:"(unknown)";try{let x;try{x=t.invokeExecutorSync(m,"validate-source-def",[],{timeout:t.executorTimeouts?.validationMs??1e4,input:JSON.stringify(C)});}catch(U){let W=U;if(x=typeof W?.stdout=="string"?W.stdout:"",!x.trim()){f.push(`source "${_}": executor validate-source-def failed \u2014 ${U instanceof Error?U.message:String(U)}`);continue}}let z=JSON.parse(x.trim());if(!z.ok&&Array.isArray(z.errors))for(let U of z.errors)f.push(`source "${_}": ${U}`);}catch(x){f.push(`source "${_}": executor validate-source-def failed \u2014 ${x instanceof Error?x.message:String(x)}`);}}let y=[...c.errors,...f];return F({cardId:l,isValid:y.length===0,issues:y})}function d(l,u){let c=r().readTaskExecutorRef();if(!c)throw new Error("No task-executor registered for this board");let f=typeof l.bindTo=="string"?l.bindTo:"source",m=s(),y={...l,boardDir:e.value,_projections:u},C=m.create(JSON.stringify(y,null,2),`probe-in-${f}`,".json"),_=m.getUniqueKey(`probe-out-${f}`,".json"),x=m.getUniqueKey(`probe-err-${f}`,".txt"),z=re(m.keyRef(C)),U=re(m.keyRef(_)),W=re(m.keyRef(x)),te=null;try{if(t.invokeExecutorSync(c,"run-source-fetch",["--in-ref",z,"--out-ref",U,"--err-ref",W],{timeout:l.timeout??t.executorTimeouts?.probeMs??6e4}),te=m.read(_),te===null)throw new Error("Executor produced no output file")}catch(T){let I=m.read(x)?.trim()??(T instanceof Error?T.message:String(T));throw new Error(`Probe failed: ${I}`)}finally{try{m.remove(C);}catch{}try{m.remove(x);}catch{}}return {bindTo:f,result:te}}function h(l,u,c){let f;try{f=d(l,u);}catch(m){return A(m instanceof Error?m.message:String(m))}if(c){let m=we(c);t.absoluteBlob.write(m.value,f.result);}return F({bindTo:f.bindTo,resultSizeBytes:f.result.length})}function w(l,u){let c=l.params?.sourceIdx,f=l.params?.outRef;if(c===void 0)return A(`${u} requires params.sourceIdx`);if(!l.body||typeof l.body!="object"||Array.isArray(l.body))return A(`${u} requires card JSON object in body`);let m=l.body,y=m["card-content"]??m,C=m["mock-projections"]??{},_=y.source_defs??[];if(c<0||c>=_.length)return A(`sourceIdx ${c} out of range (card has ${_.length} source(s))`);let x=_[c],z=typeof x.bindTo=="string"?x.bindTo:"source";return {src:x,bindTo:z,outRef:f,mockProjections:C}}function N(l){try{let u=l.params?.cardId,c=l.params?.all;if(!u&&!c)return A("validateCard requires --card-id <id> or --all");let f=c?o().readAllCards().map(y=>y.id):[u],m=[];for(let y of f){let C=o().readCard(y);if(!C){m.push({cardId:y,isValid:!1,issues:[`Card "${y}" not found`]});continue}let _=i(y,C);if(_.status!=="success")return _;m.push(_.data);}return F(m)}catch(u){return $(u)}}function D(l){try{if(!l.body||typeof l.body!="object"||Array.isArray(l.body))return A("validateCardPreflight requires card JSON object in body");let u=l.body,c=u["card-content"]??u,f=typeof c.id=="string"?c.id:"(unknown)",m=i(f,c),y=r().readTaskExecutorRef();if(y)try{let C=t.invokeExecutorSync(y,"validate-card-preflight",[],{timeout:t.executorTimeouts?.validationMs??1e4,input:JSON.stringify(c)}),_=JSON.parse(C.trim());if(!_.ok&&Array.isArray(_.errors)&&_.errors.length>0){let x=[...m.status==="success"?m.data.issues:[],..._.errors];return F({cardId:f,isValid:!1,issues:x})}}catch{}return m}catch(u){return $(u)}}function B(l){try{let u=l.params?.cardId,c=l.params?.sourceIdx,f=l.params?.outRef;if(!u)return A("probeSource requires params.cardId");if(c===void 0)return A("probeSource requires params.sourceIdx");let y=(l.body??{})["mock-projections"]??{},C=o().readCard(u);if(!C)return A(`Card "${u}" not found`);let _=C.source_defs??[];return c<0||c>=_.length?A(`sourceIdx ${c} out of range (card has ${_.length} source(s))`):h(_[c],y,f)}catch(u){return $(u)}}function j(l){try{let u=l.params?.outRef,c=l.body;if(!c)return A('probeTmpSource requires body with "source-def" and "mock-projections"');let f=c["source-def"],m=c["mock-projections"]??{};return f?h(f,m,u):A('probeTmpSource body requires "source-def"')}catch(u){return $(u)}}function b(l){try{let u=w(l,"probeSourcePreflight");if("status"in u)return u;let c=r().readTaskExecutorRef();if(!c)return A("No task-executor registered for this board");try{let f={...u.src,_projections:u.mockProjections},m=t.invokeExecutorSync(c,"probe-source-preflight",[],{timeout:u.src.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(f)}),y=JSON.parse(m.trim());return y.ok?F({bindTo:u.bindTo,reachable:y.reachable,latencyMs:y.latencyMs,note:y.note}):A(y.error??"Preflight probe failed")}catch{return A("Executor does not support probe-source-preflight")}}catch(u){return $(u)}}function S(l){try{let u=w(l,"runSourcePreflight");if("status"in u)return u;let c=r().readTaskExecutorRef();if(c)try{let C={...u.src,_projections:u.mockProjections},_=t.invokeExecutorSync(c,"run-source-preflight",[],{timeout:u.src.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(C)}),x=JSON.parse(_.trim());return x.ok?F({bindTo:x.bindTo??u.bindTo,reachable:x.reachable,latencyMs:x.latencyMs,kind:x.kind,resultValue:x.resultValue,note:x.note}):A(x.error??"Source preflight failed")}catch{}let f=Date.now(),m=d(u.src,u.mockProjections);if(u.outRef){let C=we(u.outRef);t.absoluteBlob.write(C.value,m.result);}let y=m.result;try{y=JSON.parse(m.result);}catch{}return F({bindTo:m.bindTo,reachable:!0,latencyMs:Date.now()-f,resultValue:y,note:"Actual fetch preflight passed"})}catch(u){return $(u)}}function q(l){try{let u=r().readTaskExecutorRef();if(!u)return A("No task-executor registered for this board");let c=t.invokeExecutorSync(u,"describe-capabilities",[],{timeout:t.executorTimeouts?.describeMs??1e4});return F(JSON.parse(c.trim()))}catch(u){return $(u)}}function K(l){try{let u=l.body;if(!u||!Array.isArray(u.ops))return A("updatesInCardStore requires body.ops array");let c=u.ops,f=o();for(let m of c){let y=m.op,C=m.id;if(!C)return A('op is missing "id"');if(y==="update"){let _=m["card-content"];if(!_)return A(`update op for "${C}" is missing "card-content"`);f.writeCard(C,_);}else return A(`Unknown op type: "${y??"(none)"}"`)}return F()}catch(u){return $(u)}}function g(l){try{let u=l.body;if(!u||!Array.isArray(u.ids))return A("readFromCardStore requires body.ids array");let c=u.ids,f=o(),m=c.map(y=>({id:y,"card-content":f.readCard(y)}));return F({cards:m})}catch(u){return $(u)}}function v(l){try{if(!l.body||typeof l.body!="object"||Array.isArray(l.body))return A("evalCardCompute requires a JSON object in body");let u=l.body,c=u["card-content"]??u,f=typeof c.id=="string"?c.id:"(unknown)",m=u["mock-fetched-sources"]??{},y=u["mock-requires"]??{},C=c.compute;if(!C||!Array.isArray(C)||C.length===0)return F({cardId:f,ok:!0,computed_values:{},errors:[]});let _={id:f,card_data:c.card_data??{},requires:y,source_defs:c.source_defs,compute:C},x=ie.runSync(_,{sourcesData:m}),z=x.node.computed_values??{},U=x.errors??[];return F({cardId:f,ok:U.length===0,computed_values:z,errors:U})}catch(u){return $(u)}}function L(l){try{if(!l.body||typeof l.body!="object"||Array.isArray(l.body))return A("simulateCardCycle requires a JSON object in body");let u=l.body,c=u["card-content"]??u,f=typeof c.id=="string"?c.id:"(unknown)",m=u["mock-fetched-sources"]??{},y=u["mock-requires"]??{},C=i(f,c),_=C.status==="success"?{isValid:C.data.isValid,issues:C.data.issues}:{isValid:!1,issues:[C.status==="fail"?C.error:"internal error"]},x=c.source_defs??[],z=c.card_data??{},U=[],W=[];if(x.length>0){U=ie.enrichSourcesSync(x,{card_data:z,requires:y});for(let a of U){let k=a.projections,E=a._projections;if(k&&E){for(let V of Object.keys(k))if(E[V]===void 0){let P=typeof a.bindTo=="string"?a.bindTo:"(unknown)";W.push({bindTo:P,key:V,error:`Projection "${V}" resolved to undefined`});}}}}let te=[],T=u["task-executor-ref"],I=(T?.howToRun&&T?.whatToRun?T:void 0)??r().readTaskExecutorRef();for(let a=0;a<U.length;a++){let k=U[a],E=typeof k.bindTo=="string"?k.bindTo:`source_${a}`;if(!I){te.push({bindTo:E,skipped:!0,error:"No task executor configured"});continue}try{let V={...k},P=t.invokeExecutorSync(I,"run-source-preflight",[],{timeout:k.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(V)}),J=JSON.parse(P.trim());te.push({bindTo:E,reachable:J.reachable,latencyMs:J.latencyMs,error:J.ok?void 0:J.error});}catch{te.push({bindTo:E,skipped:!0,error:"Executor does not support run-source-preflight"});}}let G=c.compute,H={},Q=[];if(G&&Array.isArray(G)&&G.length>0){let a={id:f,card_data:z,requires:y,source_defs:c.source_defs,compute:G},k=ie.runSync(a,{sourcesData:m});H=k.node.computed_values??{},Q=k.errors??[];}let p=_.isValid&&W.length===0&&Q.length===0&&te.every(a=>a.reachable!==!1);return F({cardId:f,ok:p,validation:_,source_probes:te,projection_errors:W,computed_values:H,compute_errors:Q})}catch(u){return $(u)}}return {validateCard:N,validateCardPreflight:D,probeSource:B,probeTmpSource:j,probeSourcePreflight:b,runSourcePreflight:S,evalCardCompute:v,simulateCardCycle:L,describeTaskExecutorCapabilities:q,updatesInCardStore:K,readFromCardStore:g}}
2
+ export{le as BOARD_GRAPH_KEY,Le as EMPTY_CONFIG,_e as SNAPSHOT_SCHEMA_VERSION_V1,en as createBoardLiveCardsNonCorePublic,Zr as createBoardLiveCardsPublic};//# sourceMappingURL=board-live-cards-public.js.map
3
3
  //# sourceMappingURL=board-live-cards-public.js.map