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