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