yaml-flow 8.4.23 → 8.4.25
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 +5 -5
- package/cli/bundled/board-live-cards-cli.mjs +1 -1
- package/examples/board/demo-shell-with-server.html +2 -2
- package/examples/board/doc.html +2 -2
- package/examples/board/server/board-server.js +4 -0
- package/examples/board/server/chat-flow/flow-steps.json +62 -3
- package/examples/board/test/server-http-test.js +25 -8
- package/examples/board-local/demo-shell-localstorage.html +3 -3
- package/lib/board-live-cards-node.d.cts +2 -2
- package/lib/board-live-cards-node.d.ts +2 -2
- package/lib/board-live-cards-server-runtime.cjs +3 -3
- package/lib/board-live-cards-server-runtime.d.cts +1 -1
- package/lib/board-live-cards-server-runtime.d.ts +1 -1
- package/lib/board-live-cards-server-runtime.js +3 -3
- package/lib/server-runtime/index.cjs +3 -3
- package/lib/server-runtime/index.d.cts +2 -2
- package/lib/server-runtime/index.d.ts +2 -2
- package/lib/server-runtime/index.js +3 -3
- package/lib/{types-D501gMQt.d.cts → types-BpfMamGs.d.cts} +2 -0
- package/lib/{types-1L1D33mr.d.ts → types-DwPRb-PY.d.ts} +2 -0
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-05-
|
|
2
|
+
"generatedAt": "2026-05-26T13:38:53.635Z",
|
|
3
3
|
"algorithm": "sha256",
|
|
4
4
|
"files": {
|
|
5
5
|
"browser/board-livecards-localstorage.js": {
|
|
6
|
-
"sha256": "sha256-
|
|
7
|
-
"bytes":
|
|
6
|
+
"sha256": "sha256-zQx5C1Q/oUCZ6/JvWt8s28M8Gz/XGxiPPQw3sq5k6PQ=",
|
|
7
|
+
"bytes": 106017
|
|
8
8
|
},
|
|
9
9
|
"browser/live-cards.schema.json": {
|
|
10
10
|
"sha256": "sha256-F5nfqDzZ5L3p0lLTMxGt4YtMa2sVzdNPh8sbQ8OiXHE=",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
var BoardLiveCardsLocalStorage=(function(exports){'use strict';var tn=Object.defineProperty;var en=(t,e,r)=>e in t?tn(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var Ue=(t,e,r)=>en(t,e+"",r);var ue="b64:";function rn(t){let e=new TextEncoder().encode(t),r=globalThis.Buffer,n;if(r)n=r.from(e).toString("base64");else if(typeof btoa=="function"){let o="";for(let s of e)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 nn(t){let e=t.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-t.length%4)%4),r=globalThis.Buffer;if(r)return r.from(e,"base64").toString("utf8");if(typeof atob=="function"){let n=atob(e),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 ot(t){return `${ue}${rn(JSON.stringify(t))}`}function St(t){if(!t.startsWith(ue))throw new Error(`Invalid ref format (expected ${ue}<base64url(json)>): ${t}`);let e;try{e=JSON.parse(nn(t.slice(ue.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${t}`)}if(!e||typeof e!="object")throw new Error(`Invalid ref format (expected object payload): ${t}`);let r=e;if(typeof r.kind!="string"||typeof r.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${t}`);return {kind:r.kind,value:r.value}}async function Ge(t,e,r){let n=t.tryAcquire();if(!n)return false;try{await e();}finally{n();}return r?.(),true}var $t={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function pt(t){return t?Array.isArray(t.provides)?t.provides:[]:[]}function Nt(t){return t?Array.isArray(t.requires)?t.requires:[]:[]}function Je(t){return t.tasks??{}}function je(t){return t?t.status===$t.FAILED||t.status===$t.INACTIVATED:false}function Ve(t,e){return t.refreshStrategy??e?.refreshStrategy??"data-changed"}function He(t){return t.maxExecutions}function Ke(t,e){let r=new Set;for(let[n,o]of Object.entries(e))if(o.status===$t.COMPLETED){let s=t.tasks[n];s&&pt(s).forEach(c=>r.add(c));}return Array.from(r)}function ze(t,e){let r={};return t.forEach(n=>{let o=e[n];if(!o)return;pt(o).forEach(i=>{r[i]||(r[i]=[]),r[i].push(n);});}),r}function We(t,e,r){let n=t.tasks[e]??de(),o={};if(r){let i=r.tasks[e],c=Nt(i);for(let u of c)for(let[l,f]of Object.entries(r.tasks))if(pt(f).includes(u)){let g=t.tasks[l];g?.lastDataHash&&(o[u]=g.lastDataHash);break}}let s={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:o};return {...t,tasks:{...t.tasks,[e]:s},lastUpdated:new Date().toISOString()}}function Xe(t,e,r,n,o,s){let i=t.tasks[r]??de(),c=e.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let u;n&&c.on&&c.on[n]?u=c.on[n]:u=pt(c);let l=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let p=c.requires??[];for(let S of p)for(let[y,C]of Object.entries(e.tasks))if(pt(C).includes(S)){let A=t.tasks[y];A?.lastDataHash&&(l[S]=A.lastDataHash);break}}let f={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:o,data:s,lastConsumedHashes:l,error:void 0},g=[...new Set([...t.availableOutputs,...u])];return {...t,tasks:{...t.tasks,[r]:f},availableOutputs:g,lastUpdated:new Date().toISOString()}}function Ye(t,e,r,n){let o=t.tasks[r]??de(),s=e.tasks[r];if(s?.retry){let u=o.retryCount+1;if(u<=s.retry.max_attempts){let l={...o,status:"not-started",retryCount:u,lastUpdated:new Date().toISOString(),error:n};return {...t,tasks:{...t.tasks,[r]:l},lastUpdated:new Date().toISOString()}}}let i={...o,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:o.executionCount+1},c=t.availableOutputs;if(s?.on_failure&&s.on_failure.length>0&&(c=[...new Set([...t.availableOutputs,...s.on_failure])]),s?.circuit_breaker&&i.executionCount>=s.circuit_breaker.max_executions){let u=s.circuit_breaker.on_break;c=[...new Set([...c,...u])];}return {...t,tasks:{...t.tasks,[r]:i},availableOutputs:c,lastUpdated:new Date().toISOString()}}function Ze(t,e,r,n){let o=t.tasks[e]??de(),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 {...t,tasks:{...t.tasks,[e]:s},lastUpdated:new Date().toISOString()}}function Qe(t,e){let r=t.tasks[e];if(!r)return t;let n={...r,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...t,tasks:{...t.tasks,[e]:n},lastUpdated:new Date().toISOString()}}function de(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function le(t,e){let r=`live-${Date.now()}`,n={};for(let s of Object.keys(t.tasks))n[s]=er();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:t.settings.execution_mode??"eligibility-mode",conflictStrategy:t.settings.conflict_strategy??"alphabetical",completionStrategy:t.settings.completion}};return {config:t,state:o}}function on(t,e){let{config:r,state:n}=t;if("executionId"in e&&e.executionId&&e.executionId!==n.executionId)return t;switch(e.type){case "task-started":return {config:r,state:We(n,e.taskName,r)};case "task-completed":return {config:r,state:Xe(n,r,e.taskName,e.result,e.dataHash,e.data)};case "task-failed":return {config:r,state:Ye(n,r,e.taskName,e.error)};case "task-progress":return {config:r,state:Ze(n,e.taskName,e.message,e.progress)};case "task-restart":return {config:r,state:Qe(n,e.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...e.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:fn(n,e.action)};case "task-upsert":return sn(t,e.taskName,e.taskConfig);case "task-removal":return an(t,e.taskName);case "node-requires-add":return cn(t,e.nodeName,e.tokens);case "node-requires-remove":return un(t,e.nodeName,e.tokens);case "node-provides-add":return dn(t,e.nodeName,e.tokens);case "node-provides-remove":return ln(t,e.nodeName,e.tokens);default:return t}}function tr(t,e){return e.reduce((r,n)=>on(r,n),t)}function sn(t,e,r){let n=!!t.config.tasks[e];return {config:{...t.config,tasks:{...t.config.tasks,[e]:r}},state:{...t.state,tasks:{...t.state.tasks,[e]:n?t.state.tasks[e]:er()},lastUpdated:new Date().toISOString()}}}function an(t,e){if(!t.config.tasks[e])return t;let{[e]:r,...n}=t.config.tasks,{[e]:o,...s}=t.state.tasks;return {config:{...t.config,tasks:n},state:{...t.state,tasks:s,lastUpdated:new Date().toISOString()}}}function cn(t,e,r){let n=t.config.tasks[e];if(!n)return t;let o=Nt(n),s=r.filter(i=>!o.includes(i));return s.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:[...o,...s]}}},state:t.state}}function un(t,e,r){let n=t.config.tasks[e];if(!n)return t;let o=Nt(n),s=o.filter(i=>!r.includes(i));return s.length===o.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:s}}},state:t.state}}function dn(t,e,r){let n=t.config.tasks[e];if(!n)return t;let o=pt(n),s=r.filter(i=>!o.includes(i));return s.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:[...o,...s]}}},state:t.state}}function ln(t,e,r){let n=t.config.tasks[e];if(!n)return t;let o=pt(n),s=o.filter(i=>!r.includes(i));return s.length===o.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:s}}},state:t.state}}function Yt(t){return {version:1,config:t.config,state:t.state,snapshotAt:new Date().toISOString()}}function fe(t){if(!t||typeof t!="object")throw new Error("Invalid snapshot: expected an object");let e=t;if(!e.config||typeof e.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!e.state||typeof e.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=e.config,n=e.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 er(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function fn(t,e){let r=new Date().toISOString();switch(e){case "stop":return {...t,status:"stopped",lastUpdated:r};case "pause":return {...t,status:"paused",lastUpdated:r};case "resume":return {...t,status:"running",lastUpdated:r};default:return t}}function Zt(t){let{config:e,state:r}=t,n=Je(e);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let s=gn(n),i=Ke(e,r.tasks),c=new Set([...i,...r.availableOutputs]),u=[],l=[],f=[],g=[];for(let[S,y]of Object.entries(n)){let C=r.tasks[S],A=Ve(y,e.settings),B=A!=="once";if(C?.status===$t.RUNNING||je(C))continue;let F=He(y);if(F!==void 0&&C&&C.executionCount>=F||y.circuit_breaker&&C&&C.executionCount>=y.circuit_breaker.max_executions||!B&&C?.status===$t.COMPLETED)continue;if(B&&C?.status===$t.COMPLETED){let _=Nt(y),I=false;switch(A){case "data-changed":{_.length>0&&_.some(U=>{for(let[K,it]of Object.entries(n))if(pt(it).includes(U)){let at=r.tasks[K];if(!at)continue;let Rt=C.lastConsumedHashes?.[U];return at.lastDataHash==null?at.executionCount>C.lastEpoch:at.lastDataHash!==Rt}return false})||(I=true);break}case "epoch-changed":{_.length>0&&_.some(U=>{for(let[K,it]of Object.entries(n))if(pt(it).includes(U)){let at=r.tasks[K];if(at&&at.executionCount>C.lastEpoch)return true}return false})||(I=true);break}case "time-based":{let P=y.refreshInterval??0;if(P<=0){I=true;break}let U=C.completedAt;if(!U){I=true;break}(Date.now()-Date.parse(U))/1e3<P&&(I=true);break}case "manual":I=true;break}if(I)continue}let R=Nt(y);if(R.length===0){u.push(S);continue}let O=[],j=[],E=[];for(let _ of R){if(c.has(_))continue;let I=s[_]||[];I.length===0?O.push(_):I.every(U=>je(r.tasks[U]))?E.push({token:_,failedProducer:I[0]}):j.push(_);}O.length>0?f.push({taskName:S,missingTokens:O}):E.length>0?g.push({taskName:S,failedTokens:E.map(_=>_.token),failedProducers:[...new Set(E.map(_=>_.failedProducer))]}):j.length>0?l.push({taskName:S,waitingOn:j}):u.push(S);}let p={};if(u.length>1){let S=ze(u,n);for(let[y,C]of Object.entries(S))C.length>1&&(p[y]=C);}return {eligible:u,pending:l,unresolved:f,blocked:g,conflicts:p}}function gn(t){let e={};for(let[r,n]of Object.entries(t)){for(let o of pt(n))e[o]||(e[o]=[]),e[o].push(r);if(n.on)for(let o of Object.values(n.on))for(let s of o)e[s]||(e[s]=[]),e[s].includes(r)||e[s].push(r);if(n.on_failure)for(let o of n.on_failure)e[o]||(e[o]=[]),e[o].includes(r)||e[o].push(r);}return e}var Qt=class{constructor(){Ue(this,"buffer",[]);}append(e){this.buffer.push(e);}drain(){let e=this.buffer;return this.buffer=[],e}get size(){return this.buffer.length}};function $e(t){let e=Ne(t);return pn(e)}function Ne(t){if(t==null||typeof t!="object")return JSON.stringify(t);if(Array.isArray(t))return "["+t.map(Ne).join(",")+"]";let e=t;return "{"+Object.keys(e).sort().map(n=>JSON.stringify(n)+":"+Ne(e[n])).join(",")+"}"}function pn(t){let e=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let o=0;o<t.length;o++)e^=BigInt(t.charCodeAt(o)),e=e*r&n;return e.toString(16).padStart(16,"0")}function mn(t){if(typeof Buffer<"u")return Buffer.from(t,"utf8").toString("base64url");if(typeof btoa=="function"){let e=new TextEncoder().encode(t),r="";for(let n of e)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function hn(t){if(typeof Buffer<"u")return Buffer.from(t,"base64url").toString("utf8");if(typeof atob=="function"){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),n=atob(r),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 rr(t){let e=JSON.stringify({t,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return mn(e)}function yn(t){try{let e=JSON.parse(hn(t));return typeof e?.t=="string"?{taskName:e.t}:null}catch{return null}}function Fe(t,e,r){let{handlers:n,onNodeRemoved:o,onDrain:s}=e,i=new Qt,c="state"in t&&"config"in t?t:le(t),u=false,l=new Set,f=new Map(Object.entries(n)),g=new Qt,p=false,S=false;function y(){if(!u){if(p){S=true;return}p=true;try{do S=!1,C();while(S)}finally{p=false;}}}function C(){let R=g.drain(),O=i.drain(),j=[...R,...O];if(j.length>0&&(c=tr(c,j),o)){for(let _ of j)if(_.type==="task-removal")try{o(_.taskName);}catch(I){console.warn("[reactive] onNodeRemoved failed:",I instanceof Error?I.message:String(I));}}let E=Zt(c);j.length>0&&s?.(j,c,E);for(let _ of E.eligible)F(_);for(let _ of j)if(_.type==="task-progress"){let{taskName:I,update:P}=_;if(!c.config.tasks[I])continue;let K=c.state.tasks[I];if(!K||K.status!=="running")continue;let it=rr(I),at=B(I,it,P).catch(Rt=>{u||(g.append({type:"task-failed",taskName:I,error:Rt.message??String(Rt),timestamp:new Date().toISOString()}),y());}).finally(()=>{l.delete(at);});l.add(at);}}function A(R){let j=c.config.tasks[R].requires??[],E=new Map;for(let[I,P]of Object.entries(c.config.tasks))for(let U of P.provides??[])E.set(U,I);let _={};for(let I of j){let P=E.get(I);P?_[I]=c.state.tasks[P]?.data:_[I]=void 0;}return _}async function B(R,O,j){let E=c.config.tasks[R],_=E.taskHandlers??[],I=A(R);for(let P of _){let U=f.get(P);if(!U)throw new Error(`Handler '${P}' not found in registry (task '${R}')`);let K={nodeId:R,state:I,taskState:c.state.tasks[R],config:E,callbackToken:O,update:j};if(await U(K)==="task-initiate-failure")throw new Error(`Handler '${P}' returned task-initiate-failure (task '${R}')`)}}function F(R){let j=c.config.tasks[R]?.taskHandlers;if(!j||j.length===0)return;g.append({type:"task-started",taskName:R,timestamp:new Date().toISOString()}),y();let E=rr(R),_=B(R,E).catch(I=>{u||(g.append({type:"task-failed",taskName:R,error:I.message??String(I),timestamp:new Date().toISOString()}),y());}).finally(()=>{l.delete(_);});l.add(_);}return {push(R){u||(R.type==="task-completed"&&R.data&&!R.dataHash&&(R={...R,dataHash:$e(R.data)}),i.append(R),y());},pushAll(R){if(!u){for(let O of R)O.type==="task-completed"&&O.data&&!O.dataHash?i.append({...O,dataHash:$e(O.data)}):i.append(O);y();}},resolveCallback(R,O,j){if(u)return;let E=yn(R);if(!E)return;let{taskName:_}=E;if(c.config.tasks[_]){if(j&&j.length>0)i.append({type:"task-failed",taskName:_,error:j.join("; "),timestamp:new Date().toISOString()});else {let I=O&&Object.keys(O).length>0?$e(O):void 0;i.append({type:"task-completed",taskName:_,data:O,dataHash:I,timestamp:new Date().toISOString()});}y();}},addNode(R,O){u||(i.append({type:"task-upsert",taskName:R,taskConfig:O,timestamp:new Date().toISOString()}),y());},removeNode(R){u||(i.append({type:"task-removal",taskName:R,timestamp:new Date().toISOString()}),y());},addRequires(R,O){u||(i.append({type:"node-requires-add",nodeName:R,tokens:O,timestamp:new Date().toISOString()}),y());},removeRequires(R,O){u||(i.append({type:"node-requires-remove",nodeName:R,tokens:O,timestamp:new Date().toISOString()}),y());},addProvides(R,O){u||(i.append({type:"node-provides-add",nodeName:R,tokens:O,timestamp:new Date().toISOString()}),y());},removeProvides(R,O){u||(i.append({type:"node-provides-remove",nodeName:R,tokens:O,timestamp:new Date().toISOString()}),y());},registerHandler(R,O){f.set(R,O);},unregisterHandler(R){f.delete(R);},retrigger(R){u||c.config.tasks[R]&&(i.append({type:"task-restart",taskName:R,timestamp:new Date().toISOString()}),y());},retriggerAll(R){if(!u){for(let O of R)c.config.tasks[O]&&i.append({type:"task-restart",taskName:O,timestamp:new Date().toISOString()});y();}},snapshot(){return Yt(c)},getState(){return c},getSchedule(){return Zt(c)},async waitForHandlers(){l.size>0&&await Promise.allSettled([...l]);},async dispose(R){R?.wait&&l.size>0&&await Promise.allSettled([...l]),u=true;}}}function ge(){return function(t){if(t==="./jsonata-sync.cjs")return typeof globalThis<"u"&&globalThis.__jsonataSync||typeof globalThis<"u"&&globalThis.jsonataSync;throw new Error("Unsupported require in browser bundle: "+t)}}var kn=ge();kn("./jsonata-sync.cjs");var Sn=ge(),pe=Sn("./jsonata-sync.cjs"),sr=pe;function nr(t,e){if(!e||!t)return;let r=e.split("."),n=t;for(let o=0;o<r.length;o++){if(n==null)return;n=n[r[o]];}return n}function ar(t,e,r){let n=e.split("."),o=t;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 Cn(t,e){if(!t?.compute?.length)return t;t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values};for(let o of t.compute)try{let s=await pe(o.expr).evaluate(n);ar(t.computed_values,o.bindTo,s),n.computed_values=t.computed_values;}catch{}return t}function Rn(t,e){if(!t?.compute?.length)return {ok:true,node:t};t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values},o=[];for(let s of t.compute)try{let i=sr(s.expr).evaluate(n);ar(t.computed_values,s.bindTo,i),n.computed_values=t.computed_values;}catch(i){let c=i instanceof Error?i.message:String(i);o.push({bindTo:s.bindTo,error:c});}return o.length>0?{ok:true,node:t,errors:o}:{ok:true,node:t}}async function bn(t,e,r){let n={...r??{},card_data:e.card_data??{},requires:e.requires??{},fetched_sources:e._sourcesData??{},computed_values:e.computed_values??{}};return pe(t).evaluate(n)}function wn(t,e){return e.startsWith("fetched_sources.")?nr(t._sourcesData??{},e.slice(16)):nr(t,e)}var or=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),vn=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function An(t){let e=[];if(!t||typeof t!="object"||Array.isArray(t))return {ok:false,errors:["Node must be a non-null object"]};let r=t;(typeof r.id!="string"||!r.id)&&e.push("id: required, must be a non-empty string");for(let n of Object.keys(r))vn.has(n)||e.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&e.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))e.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&e.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&e.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&e.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,o)=>{if(!n||typeof n!="object"||Array.isArray(n))e.push(`provides[${o}]: must be an object with bindTo and ref`);else {let s=n;(typeof s.bindTo!="string"||!s.bindTo)&&e.push(`provides[${o}]: missing required "bindTo" string`),(typeof s.ref!="string"||!s.ref)&&e.push(`provides[${o}]: missing required "ref" string`);}}):e.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,o)=>{if(!n||typeof n!="object"||Array.isArray(n))e.push(`compute[${o}]: must be a compute step object`);else {let s=n;(typeof s.bindTo!="string"||!s.bindTo)&&e.push(`compute[${o}]: missing required "bindTo" property`),(typeof s.expr!="string"||!s.expr)&&e.push(`compute[${o}]: missing required "expr" string (JSONata expression)`);}}):e.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))e.push("source_defs: must be an array");else {let n=new Set,o=new Set;r.source_defs.forEach((s,i)=>{if(!s||typeof s!="object"||Array.isArray(s))e.push(`source_defs[${i}]: must be an object`);else {let c=s;typeof c.bindTo!="string"||!c.bindTo?e.push(`source_defs[${i}]: missing required "bindTo" property`):(n.has(c.bindTo)&&e.push(`source_defs[${i}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?e.push(`source_defs[${i}]: missing required "outputFile" property`):(o.has(c.outputFile)&&e.push(`source_defs[${i}]: outputFile "${c.outputFile}" is not unique across source_defs`),o.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&e.push(`source_defs[${i}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))e.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?e.push("view.elements: required, must be a non-empty array"):n.elements.forEach((o,s)=>{if(!o||typeof o!="object"){e.push(`view.elements[${s}]: must be an object`);return}!o.kind||typeof o.kind!="string"?e.push(`view.elements[${s}].kind: required, must be a string`):or.has(o.kind)||e.push(`view.elements[${s}].kind: unknown kind "${o.kind}". Valid: ${[...or].join(", ")}`),o.data!=null&&(typeof o.data!="object"||Array.isArray(o.data))&&e.push(`view.elements[${s}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&e.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&e.push("view.features: must be an object");}return {ok:e.length===0,errors:e}}async function _n(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return Promise.all(t.map(async n=>{let 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 pe(i).evaluate(r);}catch{o[s]=void 0;}}return {...n,_projections:o}}))}function xn(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return t.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]=sr(i).evaluate(r);}catch{o[s]=void 0;}}return {...n,_projections:o}})}var Vt={run:Cn,runSync:Rn,eval:bn,resolve:wn,validate:An,enrichSources:_n,enrichSourcesSync:xn};function ir(t){return JSON.stringify(t)}function cr(t){let e;try{e=JSON.parse(t);}catch{throw new Error(`parseExecutionRef: invalid JSON \u2014 ${t}`)}if(typeof e!="object"||e===null||typeof e.howToRun!="string"||typeof e.whatToRun!="string")throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun \u2014 ${t}`);return e}function me(t,e){function r(){return t.readIndex()??{}}function n(o,s,i){let c=String(s||"").split(".").filter(Boolean);if(c.length===0)return i&&typeof i=="object"&&!Array.isArray(i)?i:{value:i};let u={...o},l=u;for(let f=0;f<c.length-1;f++){let g=c[f],p=l[g],S=p&&typeof p=="object"&&!Array.isArray(p)?{...p}:{};l[g]=S,l=S;}return l[c[c.length-1]]=i,u}return {readCard(o){let s=r()[o];return !s||!t.cardExists(s.key)?null:t.readCard(s.key)},readCardKey(o){return r()[o]?.key??null},readAllCards(){let o=[];for(let[s,i]of Object.entries(r())){if(!t.cardExists(i.key))continue;let c=t.readCard(i.key);c?o.push(c):e?.(`[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[c,u]of Object.entries(s))o[c]!==u.checksum&&i.push(c);for(let c of Object.keys(o))s[c]||i.push(c);return i},validateUpsert(o,s){let i=r(),c=i[o],u=Object.entries(i).find(([,l])=>l.key===s);return c&&c.key!==s?{ok:false,error:`Card id "${o}" is already mapped to key "${c.key}", cannot remap to "${s}"`}:u&&u[0]!==o?{ok:false,error:`Key "${s}" is already mapped to card id "${u[0]}", cannot remap to "${o}"`}:{ok:true}},writeCard(o,s,i){let c=r(),u=i??c[o]?.key??t.defaultCardKey(o),l=t.writeCard(u,s);c[o]={key:u,checksum:l,updatedAt:new Date().toISOString()},t.writeIndex(c);},patchCard(o,s,i){let c=r(),u=c[o];if(!u||!t.cardExists(u.key))throw new Error(`card "${o}" not found`);let l=t.readCard(u.key);if(!l||typeof l!="object"||Array.isArray(l))throw new Error(`card "${o}" is not patchable`);let f=n(l,s,i),g=t.writeCard(u.key,f);c[o]={key:u.key,checksum:g,updatedAt:new Date().toISOString()},t.writeIndex(c);},removeCard(o){let s=r(),i=s[o];i&&(t.removeCard(i.key),delete s[o],t.writeIndex(s));},readIndex(){return r()}}}function he(t,e){return {readSourceData(r,n){let o=t.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=e(o);t.write(`${r}/.staged/${s}/${n}`,i);},commitSourceData(r,n,o){let s=`${r}/.staged/${o}/${n}`,i=t.read(s);return i==null?false:(t.write(`${r}/${n}`,i),t.remove(s),true)},hasSource(r,n){return t.exists(`${r}/${n}`)},listSources(r){return t.listKeys(`${r}/`).filter(n=>!n.includes("/.staged/")).map(n=>n.slice(`${r}/`.length))}}}function gr(t){function e(r){let n=t.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=e(r);return n.length===0?{events:[],newCursor:r}:{events:n.map(o=>o.event),newCursor:n[n.length-1].id}},pendingCount(r){return e(r).length},appendEvent(r){t.appendEntry({id:t.generateId(),event:r});}}}function pr(t,e){return {appendEntries(r,n){if(!r||n.length===0)return;let o=t.read(r)??[];t.write(r,[...o,...n]);},dispatchEntriesForJournalId(r,n){if(!r)return;let o=t.read(r);if(!(!o||o.length===0)){for(let s of o)try{n(s);}catch(i){let c=i instanceof Error?i.message:String(i);try{e(s,c);}catch{}}t.delete(r);}}}}var ye="v1",Pt="board/graph",mr="board/lastJournalProcessedId";function ur(t){return `cards/${t}/runtime`}function hr(t){return {readRuntime(e){return t.read(ur(e))??{_sources:{}}},writeRuntime(e,r){t.write(ur(e),r);}}}function Tn(t,e){let r={...t};for(let n of e.deleteKeys)delete r[n];return {...r,...e.shallowMerge}}function yr(t){return {readSnapshot(e){return t.readValues(e)},commitSnapshot(e,r){if(r.schemaVersion!==ye)throw new Error(`Unsupported snapshot schema version: ${r.schemaVersion}`);let n=t.readValues(e);if(n.version!==r.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:n.version};let o=Tn(n.values,r);return {ok:true,newVersion:t.writeValues(e,o,r.deleteKeys)}}}}function kr(t){function e(r){let n=t.read(r);return n==null?null:typeof n=="string"?n:JSON.stringify(n)}return {readTaskExecutorRef(){let r=e("task-executor");if(r?.trim())return cr(r.trim())},writeTaskExecutorRef(r){t.write("task-executor",ir(r));},readChatHandlerFlow(){return t.read("chat-handler-flow")},writeChatHandlerFlow(r){t.write("chat-handler-flow",r);},readCardStoreRef(){return e("card-store-ref")},writeCardStoreRef(r){t.write("card-store-ref",r);},readOutputsStoreRef(){return e("outputs-store-ref")},writeOutputsStoreRef(r){t.write("outputs-store-ref",r);},readScratchStoreRef(){return e("scratch-store-ref")},writeScratchStoreRef(r){t.write("scratch-store-ref",r);},readArchiveStoreRef(){return e("archive-store-ref")},writeArchiveStoreRef(r){t.write("archive-store-ref",r);},readChatStoreRef(){return e("chat-store-ref")},writeChatStoreRef(r){t.write("chat-store-ref",r);},readArtifactsStoreRef(){return e("artifacts-store-ref")},writeArtifactsStoreRef(r){t.write("artifacts-store-ref",r);}}}function Sr(t){return {writeComputedValues(e,r){t.write(`cards/${e}/computed_values`,r);},readComputedValues(e){return t.read(`cards/${e}/computed_values`)},readAllComputedValues(){let e={};for(let r of t.listKeys("cards/")){let n=r.match(/^cards\/([^/]+)\/computed_values$/);n&&(e[n[1]]=t.read(r));}return e},writeDataObjects(e){for(let[r,n]of Object.entries(e))r&&t.write(`data-objects/${r}`,n);},readDataObject(e){return t.read(`data-objects/${e}`)},readAllDataObjects(){let e={};for(let r of t.listKeys("data-objects/"))e[r.slice(13)]=t.read(r);return e},writeStatusSnapshot(e){t.write("status",e);},readStatusSnapshot(){return t.read("status")}}}function dr(t){return t?{lastRequestedToken:t.lastRequestedToken,lastCompletedToken:t.lastCompletedToken,lastCompletionStatus:t.lastCompletionStatus??(t.lastCompletedToken?"success":"not-started"),queueRequestedToken:t.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function In(t){return t?.lastRequestedToken?t.lastCompletedToken!==t.lastRequestedToken:false}function lr(t,e){return t?.lastRequestedToken?In(t)?"in-flight":!t.lastCompletedToken||t.lastCompletedToken<e?"dispatch":"idle":"dispatch"}function En(t,e){return {...t,lastCompletedToken:e,lastCompletionStatus:"success"}}function fr(t,e){return {...t,lastCompletedToken:e,lastCompletionStatus:"failure"}}function ke(t,e){let r=e.state.tasks,n=e.config.tasks,o=Object.keys(r),s=Zt(e),i={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},c=new Map;for(let y of s.pending)c.set(y.taskName,y.waitingOn);for(let y of s.unresolved)c.set(y.taskName,y.missingTokens);for(let y of s.blocked)c.set(y.taskName,y.failedTokens);let u=new Map;for(let[y,C]of Object.entries(n))for(let A of C.requires??[]){let B=u.get(A)??[];B.push(y),u.set(A,B);}let l=o.sort().map(y=>{let C=r[y],A=n[y]??{requires:[],provides:[]};C.status==="completed"?i.completed+=1:C.status==="failed"?i.failed+=1:C.status==="in-progress"&&(i.in_progress+=1);let B=A.requires??[],F=A.provides??[],R=Object.keys(C.data??{}).sort(),O=B.filter(U=>e.state.availableOutputs.includes(U)),j=B.filter(U=>!e.state.availableOutputs.includes(U)),E=c.get(y)??j,_=new Set;for(let U of F)for(let K of u.get(U)??[])K!==y&&_.add(K);let I=C.failedAt,P=C.error?{message:C.error,code:"TASK_FAILED",at:I,source:"task-runtime"}:void 0;return {name:y,status:C.status,error:P,requires:B,requires_satisfied:O,requires_missing:j,provides_declared:F,provides_runtime:R,blocked_by:E,unblocks:Array.from(_).sort(),runtime:{attempt_count:C.executionCount??0,restart_count:C.retryCount??0,in_progress_since:C.status==="in-progress"?C.startedAt??null:null,last_transition_at:C.lastUpdated??null,last_completed_at:C.completedAt??null,last_restarted_at:C.startedAt??null,status_age_ms:C.lastUpdated?0:null}}});i.pending=s.pending.length,i.blocked=s.blocked.length,i.unresolved=s.unresolved.length;let f=l.map(y=>({name:y.name,fanOut:y.unblocks.length})).sort((y,C)=>C.fanOut-y.fanOut||y.name.localeCompare(C.name)),g=f.length>0?f[0]:{name:null,fanOut:0},p=new Set;for(let y of Object.values(n))for(let C of y.requires??[])p.add(C);let S=0;for(let[y,C]of Object.entries(n)){let A=(C.requires??[]).length===0,F=(C.provides??[]).some(R=>(u.get(R)??[]).some(O=>O!==y));A&&!F&&(S+=1);}return {schema_version:"v1",meta:{board:{path:t}},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:S,topology:{edge_count:Array.from(p).length,max_fan_out_card:g.name,max_fan_out:g.fanOut}},cards:l}}function On(){return new Date().toISOString()}function Cr(t,e,r,n,o,s,i){return async c=>{let u=[],l=r.cardStore.readCard(c.nodeId);if(!l)return "task-initiate-failure";let f=l.id,g=l.card_data??{},p=l.source_defs??[],S=p.filter(L=>L.optionalForCompletionGating!==true),y=r.cardRuntimeStore.readRuntime(f),C=false,A=()=>{C&&(r.cardRuntimeStore.writeRuntime(f,y),C=false);},B=L=>dr(y._sources[L]),F=(L,q)=>{y._sources[L]=dr(q),C=true;},R=c.taskState?.executionCount??0;if(y._lastExecutionCount!==R&&(y._sources={},y._lastExecutionCount=R,C=true),c.update){let L=c.update,q=L.outputFile;if(q){let X=B(q);if(L.failure){let st=L.rqt??X.lastRequestedToken??X.queueRequestedToken;st&&F(q,fr(X,st));}else {let st=L.rqt;if(!X.lastCompletedToken||st>X.lastCompletedToken){let mt=typeof L.deliveryToken=="string"?L.deliveryToken:void 0,_t=false;mt&&(_t=r.fetchedSourcesStore.commitSourceData(f,q,mt)),_t?F(q,En(X,st)):F(q,fr(X,st));}}A();}}let j={};for(let L of p)if(L.outputFile){let q=r.fetchedSourcesStore.readSourceData(f,L.outputFile);q!==null&&(j[L.bindTo]=q);}let E={};for(let[L,q]of Object.entries(c.state??{}))if(q!==null&&typeof q=="object"&&!Array.isArray(q)){let X=q[L];E[L]=X!==void 0?X:q;}else E[L]=q;let _={id:f,card_data:{...g},requires:E,source_defs:p,compute:l.compute};_._sourcesData=j,l.compute&&Vt.runSync(_,{sourcesData:j}),(s??r.outputStore.writeComputedValues.bind(r.outputStore))(f,_.computed_values??{});let I={...l},P=Vt.enrichSourcesSync(Array.isArray(l.source_defs)?l.source_defs:void 0,{card_data:l.card_data,requires:E}),U=t.value;I.source_defs=Array.isArray(P)?P.map(L=>({...L,boardDir:typeof L.boardDir=="string"&&L.boardDir?L.boardDir:U})):P;let K=On(),it=c.update?void 0:K,at=S.filter(L=>{let q=L.outputFile;if(typeof q!="string"||!q)return true;let X=B(q);it&&(X={...X,queueRequestedToken:it},F(q,X));let st=X.queueRequestedToken??X.lastRequestedToken??K,mt=lr(X,st);return mt==="in-flight"?false:mt==="dispatch"});if(A(),at.length>0){let L=false,q=K;for(let X of at){let st=X.outputFile;if(typeof st!="string"||!st)continue;let mt=B(st),_t=mt.queueRequestedToken??K;F(st,{...mt,lastRequestedToken:_t}),q=_t,L=true;}return L&&A(),L&&(u.push({taskKind:"source-fetch",payload:{boardRef:ot(t),enrichedCard:I,callbackToken:c.callbackToken,rqt:q}}),r.executionRequestStore.appendEntries(e,u)),"task-initiated"}if(S.some(L=>{let q=L.outputFile;if(typeof q!="string"||!q)return false;let X=B(q),st=X.queueRequestedToken??X.lastRequestedToken??K;return lr(X,st)==="in-flight"}))return "task-initiated";let Dt=l.provides??[],At={};for(let{bindTo:L,ref:q}of Dt)At[L]=Vt.resolve(_,q);return (i??r.outputStore.writeDataObjects.bind(r.outputStore))(At),p.filter(L=>{if(L.optionalForCompletionGating!==true)return false;let q=B(L.outputFile);return !q.lastRequestedToken||!q.lastCompletedToken?true:q.lastCompletedToken<=q.lastRequestedToken}).length>0&&u.push({taskKind:"source-fetch",payload:{boardRef:ot(t),enrichedCard:I,callbackToken:c.callbackToken,rqt:K}}),n(c.nodeId,At),u.length>0&&r.executionRequestStore.appendEntries(e,u),"task-initiated"}}var Pe={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function Rr(t){return {[Pt]:t.graph,[mr]:t.lastDrainedJournalId}}function br(t){let e=t[Pt],r=t[mr];if(!e||typeof e!="object")throw new Error(`State snapshot is missing required key: ${Pt}`);return {graph:e,lastDrainedJournalId:typeof r=="string"?r:""}}function wr(t){let e=t.requires,r=t.provides?.map(n=>n.bindTo)??[];return {requires:e&&e.length>0?e:void 0,provides:r,taskHandlers:["card-handler"],description:t.meta?.title??t.id}}function Se(t){function e(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 c=t.readCard(i);return c?e({cards:[c]}):r(`card "${i}" not found`)}return e({cards:t.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 c=Array.isArray(i)?i:[i];for(let u of c){if(typeof u.id!="string")return r("each card must have a string `id` field");t.writeCard(u.id,u);}return e({count:c.length})}catch(i){return n(i)}},del(s){try{let i=s.body?.ids??[],c=s.params?.id,u=c?[...i,c]:i;if(u.length===0)return r("del requires body.ids (string[]) or params.id");for(let l of u)t.removeCard(l);return e({count:u.length})}catch(i){return n(i)}},patch(s){try{let i=s.params?.id,c=s.params?.path;if(!i)return r("patch requires params.id");if(!c)return r("patch requires params.path");let u=s.body,l=u&&Object.prototype.hasOwnProperty.call(u,"value")?u.value:s.body;return t.patchCard(i,c,l),e({count:1})}catch(i){return n(i)}},appendFiles(s){try{let i=s.params?.id;if(!i)return r("appendFiles requires params.id");let c=t.readCard(i);if(!c)return r(`card "${i}" not found`);let u=o(s.body);if(!u||u.length===0)return r("appendFiles requires a file metadata object, array, or body.files array");let l=c.card_data&&typeof c.card_data=="object"&&!Array.isArray(c.card_data)?c.card_data:{},f=Array.isArray(l.files)?l.files:[],g=[...f,...u],p=u.map((y,C)=>({idx:f.length+C,entry:y})),S=this.patch({params:{id:i,path:"card_data.files"},body:{value:g}});return S.status!=="success"?S:e({files_added:p})}catch(i){return n(i)}}}}function et(t){return t!==void 0?{status:"success",data:t}:{status:"success"}}function Y(t){return {status:"fail",error:t}}function rt(t){return {status:"error",error:t instanceof Error?t.message:String(t)}}function Bn(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCharCode(n)).join("");return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Ar(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),n=atob(r),o=Uint8Array.from(n,s=>s.charCodeAt(0));return new TextDecoder().decode(o)}function Ce(t){try{let e=JSON.parse(Ar(t));return typeof e?.t=="string"?{taskName:e.t}:null}catch{return null}}function jn(t){return Bn(JSON.stringify(t))}function vr(t){try{let e=JSON.parse(Ar(t));return typeof e?.cbk=="string"&&typeof e?.cid=="string"&&typeof e?.b=="string"&&typeof e?.d=="string"?e:null}catch{return null}}function ut(){return new Date().toISOString()}function _r(t,e){let r=e.onWarn??(()=>{}),n=ot(t);function o(v){if(v.length!==0)try{let h=e.publishBoardChangeNotifications?.(v);h&&typeof h.catch=="function"&&h.catch(x=>r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${x instanceof Error?x.message:String(x)}`));}catch(h){r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${h instanceof Error?h.message:String(h)}`);}}function s(){let v=c().readCardStoreRef();if(!v)throw new Error(`Board at ${t.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let h=e.kvStorageForRef(v);return {readIndex(){return h.read("_index")},writeIndex(x){h.write("_index",x);},readCard(x){return h.read(x)},writeCard(x,$){return h.write(x,$),e.hashFn($)},removeCard(x){h.delete(x);},cardExists(x){return h.read(x)!==null},defaultCardKey(x){return x}}}let i={readValues(v){let h=e.kvStorage("state-snapshot"),x=h.listKeys().sort();if(x.length===0)return {version:null,values:{}};let $={};for(let J of x)$[J]=h.read(J);return {version:e.hashFn($),values:$}},writeValues(v,h,x){let $=e.kvStorage("state-snapshot");for(let J of x)$.delete(J);for(let[J,z]of Object.entries(h))$.write(J,z);return e.hashFn(h)}},c=()=>kr(e.kvStorage("config")),u=()=>yr(i),l=()=>gr(e.journalAdapter()),f=()=>me(s(),r),g=()=>{let v=c().readOutputsStoreRef();if(!v)throw new Error(`Board at ${t.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return Sr(e.kvStorageForRef(v))},p=()=>{let v=c().readArchiveStoreRef();return v?e.archiveFactoryForRef(v):e.archiveFactory()};function S(){return !!u().readSnapshot(t.value).values[Pt]}function y(){let v=u().readSnapshot(t.value);if(!v.values[Pt])throw new Error(`Board not initialized at ${t.value}`);return br(v.values)}function C(v,h){let x=u().commitSnapshot(t.value,{schemaVersion:ye,expectedVersion:h,commitId:e.genId(),committedAt:ut(),deleteKeys:[],shallowMerge:Rr(v)});if(!x.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${h??"null"} current=${x.currentVersion??"null"}`)}function A(v){l().appendEvent(v);}async function B(){let v=(T,a)=>{let d=T.payload,k=(d?.enrichedCard??{}).id??d?.cardId??"unknown";A({type:"task-failed",taskName:k,error:a,timestamp:ut()});},h=pr(e.kvStorage("execution-requests"),v),x=hr(e.kvStorage("card-runtime")),$=he(e.blobStorage("sources"),T=>e.resolveBlob(T)),J=new Map,z={readRuntime(T){return J.get(T)??x.readRuntime(T)},writeRuntime(T,a){J.set(T,a);}},ct=[],Q=new Map,G={readSourceData(T,a){let d=`${T}/${a}`;return Q.has(d)?Q.get(d):$.readSourceData(T,a)},ingestSourceDataStaged(T,a,d,m){$.ingestSourceDataStaged(T,a,d,m);},commitSourceData(T,a,d){let m=`${T}/.staged/${d}/${a}`,b=e.blobStorage("sources").read(m);if(b==null)return false;let w=`${T}/${a}`,N=b.trim();try{Q.set(w,JSON.parse(N));}catch{Q.set(w,N);}return ct.push({cardId:T,outputFile:a,deliveryToken:d}),true},hasSource(T,a){let d=`${T}/${a}`;return Q.has(d)?true:$.hasSource(T,a)},listSources(T){let a=$.listSources(T),d=new Set;for(let k of Q.keys())k.startsWith(`${T}/`)&&d.add(k.slice(`${T}/`.length));let m=new Set([...a,...d]);return Array.from(m)}},nt={cardStore:f(),cardRuntimeStore:z,fetchedSourcesStore:G,outputStore:g(),executionRequestStore:h},xt=y(),bt=fe(xt.graph),{events:Tt,newCursor:It}=l().readEntriesAfterCursor(xt.lastDrainedJournalId),wt=[],Ft=[],Bt=[],qt=new Map,Mt=new Set,Ee=(T,a)=>{wt.push({type:"task-completed",taskName:T,data:a,timestamp:ut()});try{p().stream("exec-history").append({taskName:T,status:"completed",completedAt:ut()});}catch{}},Wt=(T,a)=>{A({type:"task-failed",taskName:T,error:a,timestamp:ut()});try{p().stream("exec-history").append({taskName:T,status:"failed",error:a,completedAt:ut()});}catch{}},Ut=Fe(bt,{handlers:{"card-handler":Cr(t,It,nt,Ee,Wt,(T,a)=>{Ft.push({cardId:T,values:a});},T=>{Bt.push(T);})},onNodeRemoved:T=>{qt.delete(T),J.delete(T),Mt.add(T);}});for(wt=Tt;wt.length>0;){let T=wt;wt=[];for(let a of T)if(a.type==="task-restart"){let d=nt.cardStore.readCard(a.taskName);d&&qt.set(a.taskName,d);}Ut.pushAll(T),await Ut.waitForHandlers();}let oe=Ut.getState();await Ut.dispose({wait:true});let Oe=u().readSnapshot(t.value).version;C({lastDrainedJournalId:It,graph:Yt(oe)},Oe);for(let{cardId:T,values:a}of Ft)nt.outputStore.writeComputedValues(T,a);for(let T of Bt)nt.outputStore.writeDataObjects(T);for(let[T,a]of J)x.writeRuntime(T,a);for(let{cardId:T,outputFile:a,deliveryToken:d}of ct)$.commitSourceData(T,a,d);let Gt;try{Gt=ke(n,oe),nt.outputStore.writeStatusSnapshot(Gt);}catch(T){r(`[board-live-cards-public] status publish failed: ${T instanceof Error?T.message:String(T)}`);}let Et=[];for(let{cardId:T,values:a}of Ft)Et.push({kind:"computed_values",cardId:T,values:a});for(let T of Bt)for(let[a,d]of Object.entries(T))a&&Et.push({kind:"data_object",key:a,payload:d});for(let[T,a]of qt)Et.push({kind:"card_refreshed",cardId:T,card:a});for(let T of Mt)Et.push({kind:"card_removed",cardId:T});Gt!==void 0&&Et.push({kind:"status",status:Gt}),o(Et);let Be=c().readTaskExecutorRef()??{howToRun:"built-in",whatToRun:ot({kind:"built-in",value:"source-cli-task-executor"})};h.dispatchEntriesForJournalId(It,T=>{if(T.taskKind!=="source-fetch"){r(`[process-accumulated-events] unknown taskKind "${T.taskKind}" \u2014 skipping`);return}let a=T.payload,d=a.enrichedCard?.id??"unknown",m=a.enrichedCard?.source_defs??[];for(let k of m){if(!k.outputFile){r(`[dispatch] source "${k.bindTo}" has no outputFile \u2014 skipping`);continue}let b=jn({cbk:a.callbackToken,rg:t.value,br:ot(t),cid:d,b:k.bindTo,d:k.outputFile,cs:void 0,rqt:a.rqt});e.dispatchExecution(Be,{source_def:k,base_ref:ot(t),callback:{token:b,via:e.selfRef}}).catch(w=>Wt(d,w instanceof Error?w.message:String(w)));}});}async function F(){try{let v=()=>{let x=y(),{events:$}=l().readEntriesAfterCursor(x.lastDrainedJournalId);$.length<=0||(F(),e.requestProcessAccumulated?.());},h=await Ge(e.lock,B,v);return et({ran:h!==!1})}catch(v){return rt(v)}}function R(){F(),e.requestProcessAccumulated?.();}function O(v){try{let h=v.params?.cardStoreRef;if(!h)return Y("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(!S()){let nt=le(Pe);C({lastDrainedJournalId:"",graph:Yt(nt)},null);}let x=v.params?.outputsStoreRef;if(!x)return Y("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let $=v.params?.scratchStoreRef,J=v.params?.archiveStoreRef,z=v.params?.chatStoreRef,ct=v.params?.artifactsStoreRef,Q=c();Q.writeCardStoreRef(h),Q.writeOutputsStoreRef(x),$&&Q.writeScratchStoreRef($),J&&Q.writeArchiveStoreRef(J),z&&Q.writeChatStoreRef(z),ct&&Q.writeArtifactsStoreRef(ct);let G=v.body??{};G["task-executor-ref"]&&Q.writeTaskExecutorRef(G["task-executor-ref"]),Object.prototype.hasOwnProperty.call(G,"chat-handler-flow")&&Q.writeChatHandlerFlow(G["chat-handler-flow"]);try{g().writeStatusSnapshot(ke(n,fe(y().graph)));}catch{}return et()}catch(h){return rt(h)}}function j(v){try{let h=g().readStatusSnapshot();if(!h){h=ke(n,fe(y().graph));try{g().writeStatusSnapshot(h);}catch{}}return et(h)}catch(h){return rt(h)}}function E(v){try{let h=v.params?.id;return h?(A({type:"task-removal",taskName:h,timestamp:ut()}),R(),et()):Y("removeCard requires params.id")}catch(h){return rt(h)}}function _(v){try{let h=v.params?.cardId;if(!h)return Y("addCardFiles requires params.cardId");let x=Se(f()).appendFiles({params:{id:h},body:v.body});if(x.status!=="success")return x;let $=I({params:{cardId:h}});return $.status!=="success"?$:et({cardId:h,files_added:x.data.files_added,notified:!0})}catch(h){return rt(h)}}function I(v){try{let h=v.params?.cardId;if(!h)return Y("cardRefreshedNotify requires params.cardId");let x=f().readCard(h);return x?(o([{kind:"card_refreshed",cardId:h,card:x}]),et({cardId:h,notified:!0})):Y(`Card "${h}" not found in board at ${t.value}`)}catch(h){return rt(h)}}function P(v){try{let h=v.params?.id;return h?(A({type:"task-restart",taskName:h,timestamp:ut()}),R(),et()):Y("retrigger requires params.id")}catch(h){return rt(h)}}async function U(v){return F()}function K(v){try{let h=v.params?.cardId,x=v.params?.all,$=!!v.params?.restart;if(!h&&!x)return Y("upsertCard requires --card-id <id> or --all");let J=x?f().readAllCards().map(z=>z.id):[h];for(let z of J)if(!f().readCard(z))return Y(`Card "${z}" not found in board at ${t.value}`);for(let z of J){let ct=f().readCard(z),Q=wr(ct),G=e.hashFn(Q),nt=e.kvStorage("card-upsert"),xt=nt.read(z),bt=xt?.taskConfigHash!==G;if(!(!bt&&!$)){if(bt){let Tt=xt?.blobRef??f().readCardKey(z)??z;A({type:"task-upsert",taskName:z,taskConfig:Q,timestamp:ut()}),nt.write(z,{blobRef:Tt,taskConfigHash:G,updatedAt:ut()});}$&&A({type:"task-restart",taskName:z,timestamp:ut()});}}return R(),et()}catch(h){return rt(h)}}function it(v){try{let h=v.params?.token;if(!h)return Y("taskFailed requires params.token");let x=v.params?.error??"unknown error",$=Ce(h);if(!$)return Y("Invalid callback token");A({type:"task-failed",taskName:$.taskName,error:x,timestamp:ut()});try{p().stream("exec-history").append({taskName:$.taskName,status:"failed",error:x,completedAt:ut()});}catch{}return R(),et()}catch(h){return rt(h)}}function at(v){try{let h=v.params?.token;if(!h)return Y("taskProgress requires params.token");let $=(v.body??{}).update??{},J=Ce(h);return J?(A({type:"task-progress",taskName:J.taskName,update:$,timestamp:ut()}),R(),et()):Y("Invalid callback token")}catch(h){return rt(h)}}function Rt(v){try{let h=v.params?.token,x=v.params?.ref;if(!h)return Y("sourceDataFetched requires params.token");if(!x)return Y("sourceDataFetched requires params.ref");let $=vr(h);if(!$)return Y("Invalid source token");let{cbk:J,cid:z,b:ct,d:Q,cs:G,rqt:nt}=$,xt=he(e.blobStorage("sources"),wt=>e.resolveBlob(wt)),bt=e.genId();xt.ingestSourceDataStaged(z,Q,St(x),bt);let Tt=Ce(J);if(!Tt)return Y("Invalid callback token embedded in source token");let It=ut();return A({type:"task-progress",taskName:Tt.taskName,update:{bindTo:ct,outputFile:Q,fetchedAt:It,deliveryToken:bt,sourceChecksum:G,rqt:nt},timestamp:It}),R(),et()}catch(h){return rt(h)}}function Dt(v){try{let h=v.params?.token,x=v.params?.reason??"unknown";if(!h)return Y("sourceDataFetchFailure requires params.token");let $=vr(h);if(!$)return Y("Invalid source token");let{cbk:J,b:z,d:ct,cs:Q,rqt:G}=$,nt=Ce(J);return nt?(A({type:"task-progress",taskName:nt.taskName,update:{bindTo:z,outputFile:ct,failure:!0,reason:x,sourceChecksum:Q,rqt:G},timestamp:ut()}),R(),et()):Y("Invalid callback token embedded in source token")}catch(h){return rt(h)}}function At(v){try{let h=c().readCardStoreRef();return h?et({storeRef:h}):Y(`Board at ${t.value} has no card store configured`)}catch(h){return rt(h)}}function ft(v){try{let h=c().readOutputsStoreRef();return h?et({storeRef:h}):Y(`Board at ${t.value} has no outputs store configured`)}catch(h){return rt(h)}}function L(v){try{let h=c().readScratchStoreRef();return et({storeRef:h})}catch(h){return rt(h)}}function q(v){try{let h=c().readArchiveStoreRef();return et({storeRef:h})}catch(h){return rt(h)}}function X(v){try{let h=c().readChatStoreRef();return et({storeRef:h})}catch(h){return rt(h)}}function st(v){try{let h=c().readArtifactsStoreRef();return et({storeRef:h})}catch(h){return rt(h)}}function mt(v){try{let h=v.params?.key;if(!h)return Y("getConfig requires params.key");let x=c(),$;switch(h){case "task-executor":$=x.readTaskExecutorRef()??null;break;case "chat-handler-flow":$=x.readChatHandlerFlow()??null;break;case "card-store-ref":$=x.readCardStoreRef();break;case "outputs-store-ref":$=x.readOutputsStoreRef();break;case "scratch-store-ref":$=x.readScratchStoreRef();break;case "archive-store-ref":$=x.readArchiveStoreRef();break;case "chat-store-ref":$=x.readChatStoreRef();break;case "artifacts-store-ref":$=x.readArtifactsStoreRef();break;default:return Y(`getConfig: unknown key "${h}"`)}return et({value:$})}catch(h){return rt(h)}}function _t(v){try{let h=v.params?.key;if(!h)return Y("getOutputsDataObject requires params.key");let x=g().readDataObject(h);return et(x)}catch(h){return rt(h)}}function Lt(v){try{return et(g().readAllDataObjects())}catch(h){return rt(h)}}function Kt(v){try{let h=v.params?.key;if(!h)return Y("getOutputsComputedValues requires params.key");let x=g().readComputedValues(h);return et(x)}catch(h){return rt(h)}}function xe(v){try{return et(g().readAllComputedValues())}catch(h){return rt(h)}}function zt(){return he(e.blobStorage("sources"),v=>e.resolveBlob(v))}function ee(v){let h=e.blobStorage("sources").keyRef?.(v);return h?ot(h):v}function Te(v){try{let h=v.params?.key;if(!h)return Y("getOutputsFetchedSources requires params.key");let x=zt().listSources(h),$={};for(let J of x)$[J]=ee(`${h}/${J}`);return et($)}catch(h){return rt(h)}}function Ie(v){try{let h=zt(),x=new Set;for(let J of e.blobStorage("sources").listKeys()){let z=J.indexOf("/");z>0&&!J.includes("/.staged/")&&x.add(J.slice(0,z));}let $={};for(let J of x){let z=h.listSources(J);if(z.length>0){$[J]={};for(let ct of z)$[J][ct]=ee(`${J}/${ct}`);}}return et($)}catch(h){return rt(h)}}return {init:O,status:j,getCardStoreRef:At,getOutputsStoreRef:ft,getScratchStoreRef:L,getArchiveStoreRef:q,getChatStoreRef:X,getArtifactsStoreRef:st,getConfig:mt,getOutputsDataObject:_t,getAllOutputsDataObjects:Lt,getOutputsComputedValues:Kt,getAllOutputsComputedValues:xe,getOutputsFetchedSources:Te,getAllOutputsFetchedSources:Ie,removeCard:E,addCardFiles:_,cardRefreshedNotify:I,retrigger:P,processAccumulatedEvents:U,upsertCard:K,taskFailed:it,taskProgress:at,sourceDataFetched:Rt,sourceDataFetchFailure:Dt}}function xr(){return new Date().toISOString()}function Tr(t){return new TextEncoder().encode(t).byteLength}function $n(t){return t?{key:t.key,size:t.size,updatedAt:t.updatedAt,contentType:t.contentType}:null}function Nn(t){let e=String(t||"").match(/^(\d+)[-_]/);return e?parseInt(e[1],10):0}function Fn(t){let e=String(t||"").trim();if(!e)return "upload.bin";let r=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return (r>=0?e.slice(r+1):e)||"upload.bin"}function Pn(t){return String(t||"").toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"")||"file"}function Dn(t){if(!t||t===".")return "";let e=String(t).replace(/^\./,"").toLowerCase().replace(/[^a-z0-9]/g,"");return e?`.${e}`:""}function Ln(t){let e=Fn(t),r=e.lastIndexOf(".");return r<=0||r===e.length-1?{stem:e,ext:""}:{stem:e.slice(0,r),ext:e.slice(r)}}function qn(t){let e=t.lastIndexOf("/");return e>=0?t.slice(e+1):t}function Ir(t){function e(r){let n=t.stat?$n(t.stat(r)):null;if(n)return n;if(!t.exists(r))return null;let o=t.read(r);return o===null?{key:r}:{key:r,size:Tr(o)}}return {exists(r){return t.exists(r)},putText(r,n,o="text/plain; charset=utf-8"){t.write(r,n);let s=e(r)??{key:r};return s.contentType=o,s.updatedAt=s.updatedAt??xr(),s.size=s.size??Tr(n),s},putBytes(r,n,o="application/octet-stream"){if(t.writeBytes)t.writeBytes(r,n);else {let i=JSON.stringify({__kind:"bytes-array",data:[...n]});t.write(r,i);}let s=e(r)??{key:r};return s.contentType=o,s.updatedAt=s.updatedAt??xr(),s.size=s.size??n.byteLength,s},getText(r){let n=t.read(r);if(n===null){if(!t.readBytes)return null;let o=t.readBytes(r);return o===null?null:Buffer.from(o).toString("utf-8")}try{let o=JSON.parse(n);if(o&&o.__kind==="bytes-array"&&Array.isArray(o.data))return new TextDecoder("utf-8").decode(new Uint8Array(o.data))}catch{}return n},getBytes(r){if(t.readBytes){let o=t.readBytes(r);if(o!==null)return o}let n=t.read(r);if(n===null)return null;try{let o=JSON.parse(n);if(o&&o.__kind==="bytes-array"&&Array.isArray(o.data))return new Uint8Array(o.data)}catch{}return new TextEncoder().encode(n)},head:e,list(r=""){return t.listKeys(r).map(n=>e(n)??{key:n}).sort((n,o)=>n.key.localeCompare(o.key))},remove(r){t.remove(r);}}}function Er(t){function e(o,s){let i=0,c=[];Array.isArray(s)&&c.push(...s);for(let u of t.list(`${o}/`))c.push(qn(u.key));for(let u of c){let l=Nn(u);Number.isFinite(l)&&l>i&&(i=l);}return i+1}function r(o,s,i){let c=Number(i?.maxLen||32),{stem:u,ext:l}=Ln(o),f=Dn(l),g=Pn(u),p=`${String(s).padStart(3,"0")}-`,S=f,y=c-p.length-S.length;y<1&&(S="",y=c-p.length);let C=g.slice(0,Math.max(1,y)),A=`${p}${C}${S}`;return A.length>c&&(A=A.slice(0,c).replace(/\.$/,"")),A}function n(o,s,i){let c=e(o,i?.seedNames),u=r(s,c,{maxLen:i?.maxLen});for(;t.exists(`${o}/${u}`);)c+=1,u=r(s,c,{maxLen:i?.maxLen});return u}return {nextSerial:e,buildStoredName:r,allocateStoredName:n}}function Or(){function t(o,s){if(!Array.isArray(o))return [];let i=[];for(let c of o){if(!c||typeof c!="object")continue;let u=c;typeof u.stored_name=="string"&&i.push({name:typeof u.name=="string"?u.name:u.stored_name,stored_name:u.stored_name,size:typeof u.size=="number"&&Number.isFinite(u.size)?u.size:null,mime_type:typeof u.mime_type=="string"?u.mime_type:null,uploaded_at:typeof u.uploaded_at=="string"?u.uploaded_at:s||null,chat:u.chat===true});}return i}function e(o){return !o||typeof o!="object"?[]:t(o.files,void 0)}function r(o,s){let i=e(o);if(s.length===0)return o.files=i,i;let c=new Set(i.map(u=>u.stored_name));for(let u of s)c.has(u.stored_name)||(i.push(u),c.add(u.stored_name));return o.files=i,i}function n(o,s,i){let c=e(o);if(!Number.isInteger(s)||s<0||s>=c.length)return {ok:false,reason:"index_out_of_range"};let u=c[s];return !u||!u.stored_name?{ok:false,reason:"missing_stored_name"}:i&&i!==u.stored_name?{ok:false,reason:"stale_reference"}:{ok:true,file:u}}return {read:e,normalizeIncoming:t,merge:r,resolve:n}}function Br(t){return String(t).replace(/[^a-zA-Z0-9_-]/g,"_")}function jr(t){let e=t.payload??{};return {id:t.id,role:typeof e.role=="string"?e.role:"system",text:typeof e.text=="string"?e.text:"",files:Array.isArray(e.files)?e.files:[],updated_at:typeof e.updated_at=="string"?e.updated_at:""}}function $r(t,e){let r=o=>`chats/${Br(o)}/processing`,n=o=>`chats/${Br(o)}/config`;return {append(o,s,i,c=[]){return t(o).append({role:s,text:i,files:c,updated_at:new Date().toISOString()}).id},readAll(o){return t(o).readAll().map(jr)},readAfter(o,s){let i=t(o).readAfter(s);return {records:i.entries.map(jr),cursor:i.newCursor}},clear(o){t(o).clear?.();},setProcessing(o,s){s?e.write(r(o),true):e.delete(r(o));},isProcessing(o){return e.read(r(o))===true},getConfig(o){return e.read(n(o))??{}},setConfig(o,s){let i=e.read(n(o))??{};e.write(n(o),{...i,...s});}}}function Mn(){let t=globalThis.crypto;return typeof t?.randomUUID=="function"?String(t.randomUUID()):`id-${Date.now()}-${Math.random().toString(36).slice(2)}`}function Nr(){let t=new Map,e=new Map;function r(n){return t.has(n)||t.set(n,[]),t.get(n)}return {append(n,o,s,i=[]){let c={id:Mn(),role:o,text:s,files:i,updated_at:new Date().toISOString()};return r(n).push(c),c.id},readAll(n){return r(n).slice()},readAfter(n,o){let s=r(n);if(!o)return {records:s.slice(),cursor:s.length>0?s[s.length-1].id:null};let i=s.findIndex(u=>u.id===o),c=i===-1?s.slice():s.slice(i+1);return {records:c,cursor:c.length>0?c[c.length-1].id:o}},clear(n){t.set(n,[]);},setProcessing(n,o){o?e.set(`p:${n}`,true):e.delete(`p:${n}`);},isProcessing(n){return e.get(`p:${n}`)===true},getConfig(n){return e.get(`c:${n}`)??{}},setConfig(n,o){let s=e.get(`c:${n}`)??{};e.set(`c:${n}`,{...s,...o});}}}function Fr(t){function e(l){let f=typeof l=="number"?l:Number(l);return Number.isInteger(f)&&f>0?f:null}function r(l,f){let g=f;for(let p=l.length-1;p>=0;p-=1)if(l[p]?.role==="user"&&(g-=1,g===0))return l.slice(p);return l}function n(l){return {status:"success",data:l}}function o(l){return {status:"fail",error:l}}function s(l){return {status:"error",error:l instanceof Error?l.message:String(l)}}function i(l,f="command envelope"){let g=typeof l.cardId=="string"?l.cardId:void 0;if(!l.command)return o(`chat-store: ${f} missing "command"`);if(!g)return o(`chat-store: ${f} missing "cardId"`);if(l.command==="append")return u.append({params:{cardId:g},body:{role:l.role,text:l.text,files:l.files}});if(l.command==="read-all")return u.readAll({params:{cardId:g},body:{lastUserTurns:l.lastUserTurns}});if(l.command==="read-after")return u.readAfter({params:{cardId:g},body:{cursor:l.cursor??null}});if(l.command==="clear")return u.clear({params:{cardId:g}});if(l.command==="set-processing")return u.setProcessing({params:{cardId:g},body:{active:l.active}});if(l.command==="is-processing")return u.isProcessing({params:{cardId:g}});if(l.command==="get-config")return u.getConfig({params:{cardId:g}});if(l.command==="set-config"){let{command:p,cardId:S,...y}=l;return u.setConfig({params:{cardId:g},body:y})}return o(`chat-store: unknown command "${String(l.command)}"`)}function c(l){if(!Array.isArray(l.commands)||l.commands.length===0)return o('chat-store: command envelope must include a non-empty "commands" array');let f=[];for(let g=0;g<l.commands.length;g+=1){let p=l.commands[g];if(!p||typeof p!="object"||Array.isArray(p))return o(`chat-store: command envelope entry ${g} must be an object`);let S={cardId:l.cardId,...p},y=i(S,`command envelope entry ${g}`);if(y.status!=="success")return y;f.push({index:g,command:String(S.command),data:y.data});}return n({results:f})}let u={append(l){try{let f=l.params?.cardId;if(!f)return o("append requires params.cardId");let g=l.body??{},p=typeof g.role=="string"?g.role:"",S=typeof g.text=="string"?g.text:"",y=Array.isArray(g.files)?g.files:[];if(!p)return o("append requires body.role");let C=t.append(f,p,S,y);return n({id:C})}catch(f){return s(f)}},readAll(l){try{let f=l.params?.cardId;if(!f)return o("readAll requires params.cardId");let g=l.body??{},p=t.readAll(f);if(g.lastUserTurns===void 0)return n({records:p});let S=e(g.lastUserTurns);return S===null?o("readAll requires body.lastUserTurns (positive integer)"):n({records:r(p,S)})}catch(f){return s(f)}},readAfter(l){try{let f=l.params?.cardId;if(!f)return o("readAfter requires params.cardId");let p=(l.body??{}).cursor??null;return n(t.readAfter(f,p))}catch(f){return s(f)}},clear(l){try{let f=l.params?.cardId;return f?(t.clear(f),n({ok:!0})):o("clear requires params.cardId")}catch(f){return s(f)}},setProcessing(l){try{let f=l.params?.cardId;if(!f)return o("setProcessing requires params.cardId");let g=l.body??{};return typeof g.active!="boolean"?o("setProcessing requires body.active (boolean)"):(t.setProcessing(f,g.active),n({ok:!0}))}catch(f){return s(f)}},isProcessing(l){try{let f=l.params?.cardId;return f?n({active:t.isProcessing(f)}):o("isProcessing requires params.cardId")}catch(f){return s(f)}},getConfig(l){try{let f=l.params?.cardId;return f?n({config:t.getConfig(f)}):o("getConfig requires params.cardId")}catch(f){return s(f)}},setConfig(l){try{let f=l.params?.cardId;if(!f)return o("setConfig requires params.cardId");let g=l.body??{};return t.setConfig(f,g),n({ok:!0})}catch(f){return s(f)}},run:i,runBatch:c};return u}var Un={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},Gn=32;function Jn(){return {status:null,computedValues:{},dataObjects:{},cards:{}}}function Pr(t){if(!t||typeof t!="object")return false;let e=t.summary;return !e||typeof e!="object"?false:Number(e.card_count||0)>0}function Dr(t,e){if(!e||typeof e!="object")return;let r=e;if(r.kind==="notification-batch"&&Array.isArray(r.notifications)){for(let n of r.notifications)Dr(t,n);return}r.kind==="status"&&Pr(r.status)&&(t.status=r.status),r.kind==="computed_values"&&r.cardId&&(t.computedValues[r.cardId]=r.values),r.kind==="data_object"&&r.key&&(t.dataObjects[r.key]=r.payload),r.kind==="card_refreshed"&&r.cardId&&(t.cards[r.cardId]=r.card),r.kind==="card_removed"&&r.cardId&&(delete t.cards[r.cardId],delete t.computedValues[r.cardId]);}function Lr(t){let e=String(t.apiBasePath||"/api/board").replace(/\/$/,""),r={...Un,...t.corsHeaders||{}},n=t.boardId||"",o=t.logger||{info:console.log,warn:console.warn,error:console.error},s=t.invocationAdapter,i=t.chatFlowRunner||null,c=t.chatStorage??Nr(),u=Fr(c),l=t.notificationTransport||null,f=t.serverUrl||null,g=t.executionExtra||{},p=t.onSseClientConnected,S=t.onSseClientDisconnected,y=t.onChannelSubscribed,C=t.onChannelUnsubscribed,A=new Map,B=new Map,F=new Map,R=null;function O(a){let d=_r(a.baseRef,a.boardAdapter),m=a.boardAdapter.kvStorageForRef(a.cardStoreRef),b=Se(me({readIndex:()=>m.read("_index"),writeIndex:D=>m.write("_index",D),readCard:D=>m.read(D),writeCard:(D,W)=>(m.write(D,W),D),cardExists:D=>m.read(D)!==null,defaultCardKey:D=>D},o.warn)),w=a.artifactsAdapter||a.boardAdapter,N=a.filesArtifactsStore??null,M=null;return {label:a.label,board:d,cardStore:b,get filesArtifacts(){return M??(M=N??Ir(w.blobStorage("files")))},boardAdapter:a.boardAdapter,cardStoreRef:a.cardStoreRef,outputsStoreRef:a.outputsStoreRef,scratchStoreRef:a.scratchStoreRef,archiveStoreRef:a.archiveStoreRef,notifyRef:a.notifyRef,taskExecutorRef:a.taskExecutorRef,chatHandlerRef:a.chatHandlerRef,chatHandlerFlow:a.chatHandlerFlow,inferenceAdapterRef:a.inferenceAdapterRef,notification:Jn(),notificationTeardown:null,initialized:false,cardsBootstrapped:false}}let j=t.boards.map(O),E=new Map;function _(a){return E.get(a)??0}function I(a){let d=j[_(a)];return {files:d?d.filesArtifacts:null}}function P(a){let d=I(a);return d.files?Er(d.files):null}function U(){return Or()}function K(a){return String(a||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}async function it(a){if(!a||a.notificationTeardown||!l||!a.notifyRef)return;let d=await l.subscribe(a.notifyRef,m=>{Dr(a.notification,m);let k=m.kind==="notification-batch"?m.notifications:[m];Et(k);});a.notificationTeardown=d;}async function at(a){if(!a||a.initialized)return;let d={cardStoreRef:a.cardStoreRef,outputsStoreRef:a.outputsStoreRef};a.scratchStoreRef&&(d.scratchStoreRef=a.scratchStoreRef),a.archiveStoreRef&&(d.archiveStoreRef=a.archiveStoreRef);let m={};a.taskExecutorRef&&(m["task-executor-ref"]=a.taskExecutorRef),a.chatHandlerFlow!==void 0&&(m["chat-handler-flow"]=a.chatHandlerFlow),a.inferenceAdapterRef&&(m["inference-adapter-ref"]=a.inferenceAdapterRef);let k=a.board.init({params:d,body:m});if(k.status!=="success")throw Object.assign(new Error(k.error||`init failed for ${a.label}`),{statusCode:500});if(await it(a),!a.chatHandlerFlow&&a.chatHandlerRef&&s.describe)try{let b=await s.describe(a.chatHandlerRef);b&&b.kind!=="chat-handler"?o.warn(`[init] chat-handler describe returned kind="${b.kind}", expected "chat-handler" for ${a.label}`):b&&o.info(`[init] chat-handler validated: ${b.name} (protocol ${b.protocolVersion}) for ${a.label}`);}catch(b){o.warn(`[init] chat-handler describe failed for ${a.label}: ${b?.message||String(b)}`);}a.initialized=true;}function Rt(a){if(!a.boardAdapter.publishBoardChangeNotifications)return;let d=[],m=a.board.status({});m.status==="success"&&m.data!=null&&Pr(m.data)&&d.push({kind:"status",status:m.data});let k=a.board.getAllOutputsDataObjects({});if(k.status==="success"&&k.data!=null)for(let[w,N]of Object.entries(k.data))w&&d.push({kind:"data_object",key:w,payload:N});let b=a.board.getAllOutputsComputedValues({});if(b.status==="success"&&b.data!=null)for(let[w,N]of Object.entries(b.data))w&&d.push({kind:"computed_values",cardId:w,values:N});d.length>0&&a.boardAdapter.publishBoardChangeNotifications(d);}function Dt(a,d){if(!a||a.cardsBootstrapped)return;let m=a.cardStore.get({}),k=m.status==="success"&&Array.isArray(m.data?.cards)?m.data.cards:[];for(let b of k)typeof b.id=="string"&&(E.set(b.id,d),a.board.upsertCard({params:{cardId:b.id}}));a.cardsBootstrapped=true;}async function At(){for(let a of j)await at(a);}async function ft(){await At();for(let a=0;a<j.length;a++)Rt(j[a]),Dt(j[a],a);}function L(a){return j[_(a)]??null}function q(a){let d=L(a);if(!d)return null;let m=d.cardStore.get({params:{id:a}});if(m.status!=="success")return null;let k=Array.isArray(m.data?.cards)?m.data.cards:[];return k.length>0?k[0]:null}function X(){let a=m=>{if(!m||!m.cardStore)return [];let k=m.cardStore.get({});return k.status!=="success"||!Array.isArray(k.data?.cards)?[]:k.data.cards},d=[];for(let m of j)d.push(...a(m));return d}function st(){let a=j.map(w=>{try{let M=w.boardAdapter.kvStorageForRef(w.outputsStoreRef).read("status");if(M!=null)return M}catch{}return w.notification.status}).filter(Boolean);if(a.length===0)return null;if(a.length===1)return a[0];let d=[],m=["completed","eligible","pending","blocked","unresolved","failed","in_progress","orphan_cards"],k={};for(let w of m)k[w]=0;for(let w of a){let N=w,M=Array.isArray(N.cards)?N.cards:[];d.push(...M);for(let D of m)k[D]+=Number(N?.summary?.[D]||0);}let b=a[0];return {...b,cards:d,summary:{...b.summary||{},card_count:d.length,...k}}}function mt(){let a={},d=m=>{for(let[k,b]of Object.entries(m.notification.computedValues)){let w=m.notification.cards[k];a[k]={schema_version:"v1",card_id:k,card_data:w?.card_data??{},computed_values:b??{}};}};for(let m of j)d(m);return a}function _t(){let a={};for(let d of j)Object.assign(a,d.notification.dataObjects||{});return a}function Lt(){let a=X(),d=mt(),m=_t(),k={};for(let w of a){if(!w?.id)continue;let N=w.id,M=d[N]||{},D={...M.card_data&&typeof M.card_data=="object"?M.card_data:w.card_data&&typeof w.card_data=="object"?w.card_data:{}};k[N]={schema_version:M.schema_version||"v1",card_id:M.card_id||N,card_data:D,computed_values:M.computed_values&&typeof M.computed_values=="object"?M.computed_values:{}};}let b={};for(let w of a){if(!w?.id)continue;let N=w.id;try{let M=x(N),D=c.isProcessing(N);(M.length>0||D)&&(b[N]={messages:M.map(W=>({role:String(W.role||"system"),text:String(W.text||""),files:Array.isArray(W.files)?W.files:[]})),receiving:!1,processing:D});}catch{}}return {boardId:n,cardDefinitions:a,statusSnapshot:st(),dataObjectsByToken:m,cardRuntimeById:k,cardChatsByCardId:b}}function Kt(a,d,m){let k=m?.syncBoard!==false,b=m?.restartOnlyIfChanged===true,w=L(a);if(!w)throw Object.assign(new Error(`Card not found: ${a}`),{statusCode:404});let N=q(a);if(!N)throw Object.assign(new Error(`Card not found: ${a}`),{statusCode:404});let M=b?JSON.stringify(N):null,D=d(N)||N;if(b&&JSON.stringify(D)===M)return;let W=w.cardStore.set({body:D});if(W.status!=="success")throw Object.assign(new Error(W.error||`Failed to persist card: ${a}`),{statusCode:500});if(k){let Z=w.board.upsertCard({params:{cardId:a,restart:true}});if(Z.status!=="success")throw Object.assign(new Error(Z.error||`Failed to upsert card: ${a}`),{statusCode:500})}}function xe(a,d){Kt(a,d,{syncBoard:true});}function zt(a,d){Kt(a,d,{syncBoard:false});}function ee(a){let d=L(a);if(!d)throw Object.assign(new Error(`Card not found: ${a}`),{statusCode:404});if(!q(a))throw Object.assign(new Error(`Card not found: ${a}`),{statusCode:404});let k=d.board.upsertCard({params:{cardId:a,restart:true}});if(k.status!=="success")throw Object.assign(new Error(k.error||`Failed to retrigger card: ${a}`),{statusCode:500})}function Te(a,d){Kt(a,m=>{if(!d||typeof d!="object"||Object.keys(d).length===0)return m;function k(b,w,N){let M=String(w||"").split(".").filter(Boolean);if(!M.length)return;let D=b;for(let W=0;W<M.length-1;W++){let Z=M[W];(!D[Z]||typeof D[Z]!="object")&&(D[Z]={}),D=D[Z];}D[M[M.length-1]]=N;}if(d.fieldValues!==void 0&&d.fieldValues!==null){let b=null,w=m.view;if(w&&Array.isArray(w.elements)){for(let N of w.elements)if(N?.data&&N.data.writeTo){b=N.data.writeTo;break}}b?k(m,b,d.fieldValues):typeof d.fieldValues=="object"&&!Array.isArray(d.fieldValues)&&(m.card_data={...m.card_data||{},...d.fieldValues});}else {if(Array.isArray(d._stagedFiles)&&d._stagedFiles.length>0)return m;for(let[b,w]of Object.entries(d))b!=="_stagedFiles"&&(w!==null&&typeof w=="object"&&!Array.isArray(w)&&m[b]!==null&&typeof m[b]=="object"&&!Array.isArray(m[b])?m[b]={...m[b],...w}:m[b]=w);}return m},{syncBoard:true,restartOnlyIfChanged:true});}function Ie(a){let d=String(a||"").trim();if(!d)return "upload.bin";let m=Math.max(d.lastIndexOf("/"),d.lastIndexOf("\\"));return (m>=0?d.slice(m+1):d)||"upload.bin"}function v(a){c.clear(a),c.setProcessing(a,false);}function h(a,d,m,k){let b=typeof m=="string"?m.trim():"";return c.append(a,d,b,k)}function x(a){return c.readAll(a)}function $(a){let d=[];try{let m=q(a);if(!m)return d;let k=U().read(m.card_data&&typeof m.card_data=="object"?m.card_data:null);for(let b of k)d.push(b.stored_name);}catch{}return d}function J(a,d,m,k){let b=K(a),w=I(a),N=Ie(d),M=P(a),D=M?M.allocateStoredName(b,N,{seedNames:$(a),maxLen:Gn}):`${String(Date.now())}-${N}`;return w.files&&w.files.putBytes(`${b}/${D}`,new Uint8Array(k),m||"application/octet-stream"),{name:N,stored_name:D,size:k.length,mime_type:m||"application/octet-stream",uploaded_at:new Date().toISOString()}}function z(a){let d=L(a);if(!d)return null;let m=d.board.getConfig({params:{key:"chat-handler-flow"}}),k=m.status==="success"?m.data?.value:null,b=d.chatHandlerRef;return k==null&&(!b||typeof b!="object")?null:{ctx:d,handlerFlow:k,handlerRef:b}}function ct(a,d,m=false){let k=z(a);if(!k)return;let{ctx:b,handlerFlow:w,handlerRef:N}=k;if(!m)try{c.setProcessing(a,!0);}catch{}let M={boardId:n,cardId:String(a),lastChatEntryId:d,...g,...f?{serverUrl:f}:{}};if(!i&&w!=null){try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler-flow] configured for card "${a}" but no chatFlowRunner was provided`);return}if(w!=null){let W=i;if(!W)return;W.run(w,M,{boardId:n,cardId:String(a),label:b.label,logger:o,serverUrl:f,executionExtra:g}).then(Z=>{if(Z.dispatched)o.info(`[chat-handler-flow] invoked for card "${a}" (boardId: "${n}")`);else {try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler-flow] dispatch failed for card "${a}": ${Z.error||"unknown"}`);}},Z=>{try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler-flow] invoke failed for card "${a}": ${Z?.message||String(Z)}`);});return}let D=N;D&&s.invoke(D,M).then(W=>{if(W.dispatched)o.info(`[chat-handler] invoked for card "${a}" (boardId: "${n}")`);else {try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler] dispatch failed for card "${a}": ${W.error||"unknown"}`);}},W=>{try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler] invoke failed for card "${a}": ${W?.message||String(W)}`);});}function Q(a,d,m){let k=d==="chat-send"?zt:xe,b;k(a,w=>{let N=new Date().toISOString(),M=w.card_data&&typeof w.card_data=="object"?w.card_data:{};if(w.card_data=M,d==="chat-send"){let D=m&&typeof m.text=="string"?m.text.trim():"",W=[];if(Array.isArray(m?.files)){for(let Z of m.files)if(Z){if(typeof Z=="string"){W.push({name:Z});continue}if(typeof Z=="object"){let gt=Z;typeof gt.name=="string"&&W.push({name:gt.name,size:gt.size,mime_type:gt.mime_type,uploaded_at:gt.uploaded_at,stored_name:gt.stored_name,chat:gt.chat===true});}}}if(D||W.length>0){let Z=u.runBatch({cardId:a,commands:[{command:"append",role:"user",text:D,files:W},{command:"set-processing",active:true}]});if(Z.status!=="success")throw new Error(Z.error);let gt=Z.data.results[0]?.data?.id;if(typeof gt!="string"||!gt)throw new Error(`chat-send did not return an append id for card ${a}`);b={cardId:a,lastEntryId:gt,processingAlreadySet:true};try{let ae=x(a);Et([{kind:"card_chats",cardId:a,messages:ae.map(jt=>({role:String(jt.role||"system"),text:String(jt.text||""),files:Array.isArray(jt.files)?jt.files:[]})),receiving:!0,processing:c.isProcessing(a)}]);}catch{}}return w}if(d==="file-upload"){let D=U().normalizeIncoming(m?.files,N);return D.length>0&&U().merge(M,D),w}if(d==="action"){let D=m&&typeof m.buttonId=="string"?m.buttonId:"";if(!D)return w;M.lastAction={buttonId:D,at:N},M.lastActionText=`${D} @ ${N}`;}return w}),b&&ct(b.cardId,b.lastEntryId,b.processingAlreadySet);}function G(a,d,m){let k=JSON.stringify(m),b=typeof Buffer<"u"?Buffer.byteLength(k):new TextEncoder().encode(k).length;a.writeHead(d,{...r,"Content-Type":"application/json; charset=utf-8","Content-Length":b}),a.end(k);}async function nt(a){let d=[];for await(let k of a)d.push(k);let m=typeof Buffer<"u"?Buffer.concat(d).toString("utf-8").trim():new TextDecoder().decode(bt(d)).trim();return m?JSON.parse(m):{}}async function xt(a){let d=[];for await(let m of a)d.push(m);return typeof Buffer<"u"?Buffer.concat(d):bt(d)}function bt(a){let d=a.reduce((b,w)=>b+w.length,0),m=new Uint8Array(d),k=0;for(let b of a)m.set(b,k),k+=b.length;return m}let Tt=0;function It(a){let d=JSON.stringify(a);return Tt++,`id: ${Tt}
|
|
1
|
+
var BoardLiveCardsLocalStorage=(function(exports){'use strict';var tn=Object.defineProperty;var en=(t,e,r)=>e in t?tn(t,e,{enumerable:true,configurable:true,writable:true,value:r}):t[e]=r;var Ue=(t,e,r)=>en(t,e+"",r);var ue="b64:";function rn(t){let e=new TextEncoder().encode(t),r=globalThis.Buffer,n;if(r)n=r.from(e).toString("base64");else if(typeof btoa=="function"){let o="";for(let s of e)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 nn(t){let e=t.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-t.length%4)%4),r=globalThis.Buffer;if(r)return r.from(e,"base64").toString("utf8");if(typeof atob=="function"){let n=atob(e),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 ot(t){return `${ue}${rn(JSON.stringify(t))}`}function St(t){if(!t.startsWith(ue))throw new Error(`Invalid ref format (expected ${ue}<base64url(json)>): ${t}`);let e;try{e=JSON.parse(nn(t.slice(ue.length)));}catch{throw new Error(`Invalid ref format (malformed base64url/json): ${t}`)}if(!e||typeof e!="object")throw new Error(`Invalid ref format (expected object payload): ${t}`);let r=e;if(typeof r.kind!="string"||typeof r.value!="string")throw new Error(`Invalid ref format (payload must contain string kind/value): ${t}`);return {kind:r.kind,value:r.value}}async function Ge(t,e,r){let n=t.tryAcquire();if(!n)return false;try{await e();}finally{n();}return r?.(),true}var $t={RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function pt(t){return t?Array.isArray(t.provides)?t.provides:[]:[]}function Nt(t){return t?Array.isArray(t.requires)?t.requires:[]:[]}function Je(t){return t.tasks??{}}function je(t){return t?t.status===$t.FAILED||t.status===$t.INACTIVATED:false}function Ve(t,e){return t.refreshStrategy??e?.refreshStrategy??"data-changed"}function He(t){return t.maxExecutions}function Ke(t,e){let r=new Set;for(let[n,o]of Object.entries(e))if(o.status===$t.COMPLETED){let s=t.tasks[n];s&&pt(s).forEach(c=>r.add(c));}return Array.from(r)}function ze(t,e){let r={};return t.forEach(n=>{let o=e[n];if(!o)return;pt(o).forEach(i=>{r[i]||(r[i]=[]),r[i].push(n);});}),r}function We(t,e,r){let n=t.tasks[e]??de(),o={};if(r){let i=r.tasks[e],c=Nt(i);for(let u of c)for(let[l,f]of Object.entries(r.tasks))if(pt(f).includes(u)){let g=t.tasks[l];g?.lastDataHash&&(o[u]=g.lastDataHash);break}}let s={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:o};return {...t,tasks:{...t.tasks,[e]:s},lastUpdated:new Date().toISOString()}}function Xe(t,e,r,n,o,s){let i=t.tasks[r]??de(),c=e.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let u;n&&c.on&&c.on[n]?u=c.on[n]:u=pt(c);let l=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let p=c.requires??[];for(let S of p)for(let[y,R]of Object.entries(e.tasks))if(pt(R).includes(S)){let A=t.tasks[y];A?.lastDataHash&&(l[S]=A.lastDataHash);break}}let f={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:o,data:s,lastConsumedHashes:l,error:void 0},g=[...new Set([...t.availableOutputs,...u])];return {...t,tasks:{...t.tasks,[r]:f},availableOutputs:g,lastUpdated:new Date().toISOString()}}function Ye(t,e,r,n){let o=t.tasks[r]??de(),s=e.tasks[r];if(s?.retry){let u=o.retryCount+1;if(u<=s.retry.max_attempts){let l={...o,status:"not-started",retryCount:u,lastUpdated:new Date().toISOString(),error:n};return {...t,tasks:{...t.tasks,[r]:l},lastUpdated:new Date().toISOString()}}}let i={...o,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:o.executionCount+1},c=t.availableOutputs;if(s?.on_failure&&s.on_failure.length>0&&(c=[...new Set([...t.availableOutputs,...s.on_failure])]),s?.circuit_breaker&&i.executionCount>=s.circuit_breaker.max_executions){let u=s.circuit_breaker.on_break;c=[...new Set([...c,...u])];}return {...t,tasks:{...t.tasks,[r]:i},availableOutputs:c,lastUpdated:new Date().toISOString()}}function Ze(t,e,r,n){let o=t.tasks[e]??de(),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 {...t,tasks:{...t.tasks,[e]:s},lastUpdated:new Date().toISOString()}}function Qe(t,e){let r=t.tasks[e];if(!r)return t;let n={...r,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...t,tasks:{...t.tasks,[e]:n},lastUpdated:new Date().toISOString()}}function de(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function le(t,e){let r=`live-${Date.now()}`,n={};for(let s of Object.keys(t.tasks))n[s]=er();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:t.settings.execution_mode??"eligibility-mode",conflictStrategy:t.settings.conflict_strategy??"alphabetical",completionStrategy:t.settings.completion}};return {config:t,state:o}}function on(t,e){let{config:r,state:n}=t;if("executionId"in e&&e.executionId&&e.executionId!==n.executionId)return t;switch(e.type){case "task-started":return {config:r,state:We(n,e.taskName,r)};case "task-completed":return {config:r,state:Xe(n,r,e.taskName,e.result,e.dataHash,e.data)};case "task-failed":return {config:r,state:Ye(n,r,e.taskName,e.error)};case "task-progress":return {config:r,state:Ze(n,e.taskName,e.message,e.progress)};case "task-restart":return {config:r,state:Qe(n,e.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...e.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:fn(n,e.action)};case "task-upsert":return sn(t,e.taskName,e.taskConfig);case "task-removal":return an(t,e.taskName);case "node-requires-add":return cn(t,e.nodeName,e.tokens);case "node-requires-remove":return un(t,e.nodeName,e.tokens);case "node-provides-add":return dn(t,e.nodeName,e.tokens);case "node-provides-remove":return ln(t,e.nodeName,e.tokens);default:return t}}function tr(t,e){return e.reduce((r,n)=>on(r,n),t)}function sn(t,e,r){let n=!!t.config.tasks[e];return {config:{...t.config,tasks:{...t.config.tasks,[e]:r}},state:{...t.state,tasks:{...t.state.tasks,[e]:n?t.state.tasks[e]:er()},lastUpdated:new Date().toISOString()}}}function an(t,e){if(!t.config.tasks[e])return t;let{[e]:r,...n}=t.config.tasks,{[e]:o,...s}=t.state.tasks;return {config:{...t.config,tasks:n},state:{...t.state,tasks:s,lastUpdated:new Date().toISOString()}}}function cn(t,e,r){let n=t.config.tasks[e];if(!n)return t;let o=Nt(n),s=r.filter(i=>!o.includes(i));return s.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:[...o,...s]}}},state:t.state}}function un(t,e,r){let n=t.config.tasks[e];if(!n)return t;let o=Nt(n),s=o.filter(i=>!r.includes(i));return s.length===o.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,requires:s}}},state:t.state}}function dn(t,e,r){let n=t.config.tasks[e];if(!n)return t;let o=pt(n),s=r.filter(i=>!o.includes(i));return s.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:[...o,...s]}}},state:t.state}}function ln(t,e,r){let n=t.config.tasks[e];if(!n)return t;let o=pt(n),s=o.filter(i=>!r.includes(i));return s.length===o.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...n,provides:s}}},state:t.state}}function Yt(t){return {version:1,config:t.config,state:t.state,snapshotAt:new Date().toISOString()}}function fe(t){if(!t||typeof t!="object")throw new Error("Invalid snapshot: expected an object");let e=t;if(!e.config||typeof e.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!e.state||typeof e.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=e.config,n=e.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 er(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function fn(t,e){let r=new Date().toISOString();switch(e){case "stop":return {...t,status:"stopped",lastUpdated:r};case "pause":return {...t,status:"paused",lastUpdated:r};case "resume":return {...t,status:"running",lastUpdated:r};default:return t}}function Zt(t){let{config:e,state:r}=t,n=Je(e);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let s=gn(n),i=Ke(e,r.tasks),c=new Set([...i,...r.availableOutputs]),u=[],l=[],f=[],g=[];for(let[S,y]of Object.entries(n)){let R=r.tasks[S],A=Ve(y,e.settings),B=A!=="once";if(R?.status===$t.RUNNING||je(R))continue;let F=He(y);if(F!==void 0&&R&&R.executionCount>=F||y.circuit_breaker&&R&&R.executionCount>=y.circuit_breaker.max_executions||!B&&R?.status===$t.COMPLETED)continue;if(B&&R?.status===$t.COMPLETED){let _=Nt(y),I=false;switch(A){case "data-changed":{_.length>0&&_.some(M=>{for(let[z,it]of Object.entries(n))if(pt(it).includes(M)){let at=r.tasks[z];if(!at)continue;let Ct=R.lastConsumedHashes?.[M];return at.lastDataHash==null?at.executionCount>R.lastEpoch:at.lastDataHash!==Ct}return false})||(I=true);break}case "epoch-changed":{_.length>0&&_.some(M=>{for(let[z,it]of Object.entries(n))if(pt(it).includes(M)){let at=r.tasks[z];if(at&&at.executionCount>R.lastEpoch)return true}return false})||(I=true);break}case "time-based":{let P=y.refreshInterval??0;if(P<=0){I=true;break}let M=R.completedAt;if(!M){I=true;break}(Date.now()-Date.parse(M))/1e3<P&&(I=true);break}case "manual":I=true;break}if(I)continue}let C=Nt(y);if(C.length===0){u.push(S);continue}let O=[],j=[],E=[];for(let _ of C){if(c.has(_))continue;let I=s[_]||[];I.length===0?O.push(_):I.every(M=>je(r.tasks[M]))?E.push({token:_,failedProducer:I[0]}):j.push(_);}O.length>0?f.push({taskName:S,missingTokens:O}):E.length>0?g.push({taskName:S,failedTokens:E.map(_=>_.token),failedProducers:[...new Set(E.map(_=>_.failedProducer))]}):j.length>0?l.push({taskName:S,waitingOn:j}):u.push(S);}let p={};if(u.length>1){let S=ze(u,n);for(let[y,R]of Object.entries(S))R.length>1&&(p[y]=R);}return {eligible:u,pending:l,unresolved:f,blocked:g,conflicts:p}}function gn(t){let e={};for(let[r,n]of Object.entries(t)){for(let o of pt(n))e[o]||(e[o]=[]),e[o].push(r);if(n.on)for(let o of Object.values(n.on))for(let s of o)e[s]||(e[s]=[]),e[s].includes(r)||e[s].push(r);if(n.on_failure)for(let o of n.on_failure)e[o]||(e[o]=[]),e[o].includes(r)||e[o].push(r);}return e}var Qt=class{constructor(){Ue(this,"buffer",[]);}append(e){this.buffer.push(e);}drain(){let e=this.buffer;return this.buffer=[],e}get size(){return this.buffer.length}};function $e(t){let e=Ne(t);return pn(e)}function Ne(t){if(t==null||typeof t!="object")return JSON.stringify(t);if(Array.isArray(t))return "["+t.map(Ne).join(",")+"]";let e=t;return "{"+Object.keys(e).sort().map(n=>JSON.stringify(n)+":"+Ne(e[n])).join(",")+"}"}function pn(t){let e=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let o=0;o<t.length;o++)e^=BigInt(t.charCodeAt(o)),e=e*r&n;return e.toString(16).padStart(16,"0")}function mn(t){if(typeof Buffer<"u")return Buffer.from(t,"utf8").toString("base64url");if(typeof btoa=="function"){let e=new TextEncoder().encode(t),r="";for(let n of e)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function hn(t){if(typeof Buffer<"u")return Buffer.from(t,"base64url").toString("utf8");if(typeof atob=="function"){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),n=atob(r),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 rr(t){let e=JSON.stringify({t,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return mn(e)}function yn(t){try{let e=JSON.parse(hn(t));return typeof e?.t=="string"?{taskName:e.t}:null}catch{return null}}function Fe(t,e,r){let{handlers:n,onNodeRemoved:o,onDrain:s}=e,i=new Qt,c="state"in t&&"config"in t?t:le(t),u=false,l=new Set,f=new Map(Object.entries(n)),g=new Qt,p=false,S=false;function y(){if(!u){if(p){S=true;return}p=true;try{do S=!1,R();while(S)}finally{p=false;}}}function R(){let C=g.drain(),O=i.drain(),j=[...C,...O];if(j.length>0&&(c=tr(c,j),o)){for(let _ of j)if(_.type==="task-removal")try{o(_.taskName);}catch(I){console.warn("[reactive] onNodeRemoved failed:",I instanceof Error?I.message:String(I));}}let E=Zt(c);j.length>0&&s?.(j,c,E);for(let _ of E.eligible)F(_);for(let _ of j)if(_.type==="task-progress"){let{taskName:I,update:P}=_;if(!c.config.tasks[I])continue;let z=c.state.tasks[I];if(!z||z.status!=="running")continue;let it=rr(I),at=B(I,it,P).catch(Ct=>{u||(g.append({type:"task-failed",taskName:I,error:Ct.message??String(Ct),timestamp:new Date().toISOString()}),y());}).finally(()=>{l.delete(at);});l.add(at);}}function A(C){let j=c.config.tasks[C].requires??[],E=new Map;for(let[I,P]of Object.entries(c.config.tasks))for(let M of P.provides??[])E.set(M,I);let _={};for(let I of j){let P=E.get(I);P?_[I]=c.state.tasks[P]?.data:_[I]=void 0;}return _}async function B(C,O,j){let E=c.config.tasks[C],_=E.taskHandlers??[],I=A(C);for(let P of _){let M=f.get(P);if(!M)throw new Error(`Handler '${P}' not found in registry (task '${C}')`);let z={nodeId:C,state:I,taskState:c.state.tasks[C],config:E,callbackToken:O,update:j};if(await M(z)==="task-initiate-failure")throw new Error(`Handler '${P}' returned task-initiate-failure (task '${C}')`)}}function F(C){let j=c.config.tasks[C]?.taskHandlers;if(!j||j.length===0)return;g.append({type:"task-started",taskName:C,timestamp:new Date().toISOString()}),y();let E=rr(C),_=B(C,E).catch(I=>{u||(g.append({type:"task-failed",taskName:C,error:I.message??String(I),timestamp:new Date().toISOString()}),y());}).finally(()=>{l.delete(_);});l.add(_);}return {push(C){u||(C.type==="task-completed"&&C.data&&!C.dataHash&&(C={...C,dataHash:$e(C.data)}),i.append(C),y());},pushAll(C){if(!u){for(let O of C)O.type==="task-completed"&&O.data&&!O.dataHash?i.append({...O,dataHash:$e(O.data)}):i.append(O);y();}},resolveCallback(C,O,j){if(u)return;let E=yn(C);if(!E)return;let{taskName:_}=E;if(c.config.tasks[_]){if(j&&j.length>0)i.append({type:"task-failed",taskName:_,error:j.join("; "),timestamp:new Date().toISOString()});else {let I=O&&Object.keys(O).length>0?$e(O):void 0;i.append({type:"task-completed",taskName:_,data:O,dataHash:I,timestamp:new Date().toISOString()});}y();}},addNode(C,O){u||(i.append({type:"task-upsert",taskName:C,taskConfig:O,timestamp:new Date().toISOString()}),y());},removeNode(C){u||(i.append({type:"task-removal",taskName:C,timestamp:new Date().toISOString()}),y());},addRequires(C,O){u||(i.append({type:"node-requires-add",nodeName:C,tokens:O,timestamp:new Date().toISOString()}),y());},removeRequires(C,O){u||(i.append({type:"node-requires-remove",nodeName:C,tokens:O,timestamp:new Date().toISOString()}),y());},addProvides(C,O){u||(i.append({type:"node-provides-add",nodeName:C,tokens:O,timestamp:new Date().toISOString()}),y());},removeProvides(C,O){u||(i.append({type:"node-provides-remove",nodeName:C,tokens:O,timestamp:new Date().toISOString()}),y());},registerHandler(C,O){f.set(C,O);},unregisterHandler(C){f.delete(C);},retrigger(C){u||c.config.tasks[C]&&(i.append({type:"task-restart",taskName:C,timestamp:new Date().toISOString()}),y());},retriggerAll(C){if(!u){for(let O of C)c.config.tasks[O]&&i.append({type:"task-restart",taskName:O,timestamp:new Date().toISOString()});y();}},snapshot(){return Yt(c)},getState(){return c},getSchedule(){return Zt(c)},async waitForHandlers(){l.size>0&&await Promise.allSettled([...l]);},async dispose(C){C?.wait&&l.size>0&&await Promise.allSettled([...l]),u=true;}}}function ge(){return function(t){if(t==="./jsonata-sync.cjs")return typeof globalThis<"u"&&globalThis.__jsonataSync||typeof globalThis<"u"&&globalThis.jsonataSync;throw new Error("Unsupported require in browser bundle: "+t)}}var kn=ge();kn("./jsonata-sync.cjs");var Sn=ge(),pe=Sn("./jsonata-sync.cjs"),sr=pe;function nr(t,e){if(!e||!t)return;let r=e.split("."),n=t;for(let o=0;o<r.length;o++){if(n==null)return;n=n[r[o]];}return n}function ar(t,e,r){let n=e.split("."),o=t;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 Rn(t,e){if(!t?.compute?.length)return t;t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values};for(let o of t.compute)try{let s=await pe(o.expr).evaluate(n);ar(t.computed_values,o.bindTo,s),n.computed_values=t.computed_values;}catch{}return t}function Cn(t,e){if(!t?.compute?.length)return {ok:true,node:t};t.card_data||(t.card_data={}),t.computed_values={},t._sourcesData=e?.sourcesData??{};let r=t.requires??{},n={card_data:t.card_data,requires:r,expects_data:r,fetched_sources:t._sourcesData,data:t.computed_values,computed_values:t.computed_values},o=[];for(let s of t.compute)try{let i=sr(s.expr).evaluate(n);ar(t.computed_values,s.bindTo,i),n.computed_values=t.computed_values;}catch(i){let c=i instanceof Error?i.message:String(i);o.push({bindTo:s.bindTo,error:c});}return o.length>0?{ok:true,node:t,errors:o}:{ok:true,node:t}}async function bn(t,e,r){let n={...r??{},card_data:e.card_data??{},requires:e.requires??{},fetched_sources:e._sourcesData??{},computed_values:e.computed_values??{}};return pe(t).evaluate(n)}function wn(t,e){return e.startsWith("fetched_sources.")?nr(t._sourcesData??{},e.slice(16)):nr(t,e)}var or=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),vn=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function An(t){let e=[];if(!t||typeof t!="object"||Array.isArray(t))return {ok:false,errors:["Node must be a non-null object"]};let r=t;(typeof r.id!="string"||!r.id)&&e.push("id: required, must be a non-empty string");for(let n of Object.keys(r))vn.has(n)||e.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&e.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))e.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&e.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&e.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&e.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,o)=>{if(!n||typeof n!="object"||Array.isArray(n))e.push(`provides[${o}]: must be an object with bindTo and ref`);else {let s=n;(typeof s.bindTo!="string"||!s.bindTo)&&e.push(`provides[${o}]: missing required "bindTo" string`),(typeof s.ref!="string"||!s.ref)&&e.push(`provides[${o}]: missing required "ref" string`);}}):e.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,o)=>{if(!n||typeof n!="object"||Array.isArray(n))e.push(`compute[${o}]: must be a compute step object`);else {let s=n;(typeof s.bindTo!="string"||!s.bindTo)&&e.push(`compute[${o}]: missing required "bindTo" property`),(typeof s.expr!="string"||!s.expr)&&e.push(`compute[${o}]: missing required "expr" string (JSONata expression)`);}}):e.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))e.push("source_defs: must be an array");else {let n=new Set,o=new Set;r.source_defs.forEach((s,i)=>{if(!s||typeof s!="object"||Array.isArray(s))e.push(`source_defs[${i}]: must be an object`);else {let c=s;typeof c.bindTo!="string"||!c.bindTo?e.push(`source_defs[${i}]: missing required "bindTo" property`):(n.has(c.bindTo)&&e.push(`source_defs[${i}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?e.push(`source_defs[${i}]: missing required "outputFile" property`):(o.has(c.outputFile)&&e.push(`source_defs[${i}]: outputFile "${c.outputFile}" is not unique across source_defs`),o.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&e.push(`source_defs[${i}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))e.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?e.push("view.elements: required, must be a non-empty array"):n.elements.forEach((o,s)=>{if(!o||typeof o!="object"){e.push(`view.elements[${s}]: must be an object`);return}!o.kind||typeof o.kind!="string"?e.push(`view.elements[${s}].kind: required, must be a string`):or.has(o.kind)||e.push(`view.elements[${s}].kind: unknown kind "${o.kind}". Valid: ${[...or].join(", ")}`),o.data!=null&&(typeof o.data!="object"||Array.isArray(o.data))&&e.push(`view.elements[${s}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&e.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&e.push("view.features: must be an object");}return {ok:e.length===0,errors:e}}async function _n(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return Promise.all(t.map(async n=>{let 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 pe(i).evaluate(r);}catch{o[s]=void 0;}}return {...n,_projections:o}}))}function xn(t,e){if(!t||t.length===0)return [];let r={card_data:e.card_data??{},requires:e.requires??{}};return t.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]=sr(i).evaluate(r);}catch{o[s]=void 0;}}return {...n,_projections:o}})}var Vt={run:Rn,runSync:Cn,eval:bn,resolve:wn,validate:An,enrichSources:_n,enrichSourcesSync:xn};function ir(t){return JSON.stringify(t)}function cr(t){let e;try{e=JSON.parse(t);}catch{throw new Error(`parseExecutionRef: invalid JSON \u2014 ${t}`)}if(typeof e!="object"||e===null||typeof e.howToRun!="string"||typeof e.whatToRun!="string")throw new Error(`parseExecutionRef: missing required fields howToRun/whatToRun \u2014 ${t}`);return e}function me(t,e){function r(){return t.readIndex()??{}}function n(o,s,i){let c=String(s||"").split(".").filter(Boolean);if(c.length===0)return i&&typeof i=="object"&&!Array.isArray(i)?i:{value:i};let u={...o},l=u;for(let f=0;f<c.length-1;f++){let g=c[f],p=l[g],S=p&&typeof p=="object"&&!Array.isArray(p)?{...p}:{};l[g]=S,l=S;}return l[c[c.length-1]]=i,u}return {readCard(o){let s=r()[o];return !s||!t.cardExists(s.key)?null:t.readCard(s.key)},readCardKey(o){return r()[o]?.key??null},readAllCards(){let o=[];for(let[s,i]of Object.entries(r())){if(!t.cardExists(i.key))continue;let c=t.readCard(i.key);c?o.push(c):e?.(`[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[c,u]of Object.entries(s))o[c]!==u.checksum&&i.push(c);for(let c of Object.keys(o))s[c]||i.push(c);return i},validateUpsert(o,s){let i=r(),c=i[o],u=Object.entries(i).find(([,l])=>l.key===s);return c&&c.key!==s?{ok:false,error:`Card id "${o}" is already mapped to key "${c.key}", cannot remap to "${s}"`}:u&&u[0]!==o?{ok:false,error:`Key "${s}" is already mapped to card id "${u[0]}", cannot remap to "${o}"`}:{ok:true}},writeCard(o,s,i){let c=r(),u=i??c[o]?.key??t.defaultCardKey(o),l=t.writeCard(u,s);c[o]={key:u,checksum:l,updatedAt:new Date().toISOString()},t.writeIndex(c);},patchCard(o,s,i){let c=r(),u=c[o];if(!u||!t.cardExists(u.key))throw new Error(`card "${o}" not found`);let l=t.readCard(u.key);if(!l||typeof l!="object"||Array.isArray(l))throw new Error(`card "${o}" is not patchable`);let f=n(l,s,i),g=t.writeCard(u.key,f);c[o]={key:u.key,checksum:g,updatedAt:new Date().toISOString()},t.writeIndex(c);},removeCard(o){let s=r(),i=s[o];i&&(t.removeCard(i.key),delete s[o],t.writeIndex(s));},readIndex(){return r()}}}function he(t,e){return {readSourceData(r,n){let o=t.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=e(o);t.write(`${r}/.staged/${s}/${n}`,i);},commitSourceData(r,n,o){let s=`${r}/.staged/${o}/${n}`,i=t.read(s);return i==null?false:(t.write(`${r}/${n}`,i),t.remove(s),true)},hasSource(r,n){return t.exists(`${r}/${n}`)},listSources(r){return t.listKeys(`${r}/`).filter(n=>!n.includes("/.staged/")).map(n=>n.slice(`${r}/`.length))}}}function gr(t){function e(r){let n=t.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=e(r);return n.length===0?{events:[],newCursor:r}:{events:n.map(o=>o.event),newCursor:n[n.length-1].id}},pendingCount(r){return e(r).length},appendEvent(r){t.appendEntry({id:t.generateId(),event:r});}}}function pr(t,e){return {appendEntries(r,n){if(!r||n.length===0)return;let o=t.read(r)??[];t.write(r,[...o,...n]);},dispatchEntriesForJournalId(r,n){if(!r)return;let o=t.read(r);if(!(!o||o.length===0)){for(let s of o)try{n(s);}catch(i){let c=i instanceof Error?i.message:String(i);try{e(s,c);}catch{}}t.delete(r);}}}}var ye="v1",Pt="board/graph",mr="board/lastJournalProcessedId";function ur(t){return `cards/${t}/runtime`}function hr(t){return {readRuntime(e){return t.read(ur(e))??{_sources:{}}},writeRuntime(e,r){t.write(ur(e),r);}}}function Tn(t,e){let r={...t};for(let n of e.deleteKeys)delete r[n];return {...r,...e.shallowMerge}}function yr(t){return {readSnapshot(e){return t.readValues(e)},commitSnapshot(e,r){if(r.schemaVersion!==ye)throw new Error(`Unsupported snapshot schema version: ${r.schemaVersion}`);let n=t.readValues(e);if(n.version!==r.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:n.version};let o=Tn(n.values,r);return {ok:true,newVersion:t.writeValues(e,o,r.deleteKeys)}}}}function kr(t){function e(r){let n=t.read(r);return n==null?null:typeof n=="string"?n:JSON.stringify(n)}return {readTaskExecutorRef(){let r=e("task-executor");if(r?.trim())return cr(r.trim())},writeTaskExecutorRef(r){t.write("task-executor",ir(r));},readChatHandlerFlow(){return t.read("chat-handler-flow")},writeChatHandlerFlow(r){t.write("chat-handler-flow",r);},readCardStoreRef(){return e("card-store-ref")},writeCardStoreRef(r){t.write("card-store-ref",r);},readOutputsStoreRef(){return e("outputs-store-ref")},writeOutputsStoreRef(r){t.write("outputs-store-ref",r);},readScratchStoreRef(){return e("scratch-store-ref")},writeScratchStoreRef(r){t.write("scratch-store-ref",r);},readArchiveStoreRef(){return e("archive-store-ref")},writeArchiveStoreRef(r){t.write("archive-store-ref",r);},readChatStoreRef(){return e("chat-store-ref")},writeChatStoreRef(r){t.write("chat-store-ref",r);},readArtifactsStoreRef(){return e("artifacts-store-ref")},writeArtifactsStoreRef(r){t.write("artifacts-store-ref",r);}}}function Sr(t){return {writeComputedValues(e,r){t.write(`cards/${e}/computed_values`,r);},readComputedValues(e){return t.read(`cards/${e}/computed_values`)},readAllComputedValues(){let e={};for(let r of t.listKeys("cards/")){let n=r.match(/^cards\/([^/]+)\/computed_values$/);n&&(e[n[1]]=t.read(r));}return e},writeDataObjects(e){for(let[r,n]of Object.entries(e))r&&t.write(`data-objects/${r}`,n);},readDataObject(e){return t.read(`data-objects/${e}`)},readAllDataObjects(){let e={};for(let r of t.listKeys("data-objects/"))e[r.slice(13)]=t.read(r);return e},writeStatusSnapshot(e){t.write("status",e);},readStatusSnapshot(){return t.read("status")}}}function dr(t){return t?{lastRequestedToken:t.lastRequestedToken,lastCompletedToken:t.lastCompletedToken,lastCompletionStatus:t.lastCompletionStatus??(t.lastCompletedToken?"success":"not-started"),queueRequestedToken:t.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function In(t){return t?.lastRequestedToken?t.lastCompletedToken!==t.lastRequestedToken:false}function lr(t,e){return t?.lastRequestedToken?In(t)?"in-flight":!t.lastCompletedToken||t.lastCompletedToken<e?"dispatch":"idle":"dispatch"}function En(t,e){return {...t,lastCompletedToken:e,lastCompletionStatus:"success"}}function fr(t,e){return {...t,lastCompletedToken:e,lastCompletionStatus:"failure"}}function ke(t,e){let r=e.state.tasks,n=e.config.tasks,o=Object.keys(r),s=Zt(e),i={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},c=new Map;for(let y of s.pending)c.set(y.taskName,y.waitingOn);for(let y of s.unresolved)c.set(y.taskName,y.missingTokens);for(let y of s.blocked)c.set(y.taskName,y.failedTokens);let u=new Map;for(let[y,R]of Object.entries(n))for(let A of R.requires??[]){let B=u.get(A)??[];B.push(y),u.set(A,B);}let l=o.sort().map(y=>{let R=r[y],A=n[y]??{requires:[],provides:[]};R.status==="completed"?i.completed+=1:R.status==="failed"?i.failed+=1:R.status==="in-progress"&&(i.in_progress+=1);let B=A.requires??[],F=A.provides??[],C=Object.keys(R.data??{}).sort(),O=B.filter(M=>e.state.availableOutputs.includes(M)),j=B.filter(M=>!e.state.availableOutputs.includes(M)),E=c.get(y)??j,_=new Set;for(let M of F)for(let z of u.get(M)??[])z!==y&&_.add(z);let I=R.failedAt,P=R.error?{message:R.error,code:"TASK_FAILED",at:I,source:"task-runtime"}:void 0;return {name:y,status:R.status,error:P,requires:B,requires_satisfied:O,requires_missing:j,provides_declared:F,provides_runtime:C,blocked_by:E,unblocks:Array.from(_).sort(),runtime:{attempt_count:R.executionCount??0,restart_count:R.retryCount??0,in_progress_since:R.status==="in-progress"?R.startedAt??null:null,last_transition_at:R.lastUpdated??null,last_completed_at:R.completedAt??null,last_restarted_at:R.startedAt??null,status_age_ms:R.lastUpdated?0:null}}});i.pending=s.pending.length,i.blocked=s.blocked.length,i.unresolved=s.unresolved.length;let f=l.map(y=>({name:y.name,fanOut:y.unblocks.length})).sort((y,R)=>R.fanOut-y.fanOut||y.name.localeCompare(R.name)),g=f.length>0?f[0]:{name:null,fanOut:0},p=new Set;for(let y of Object.values(n))for(let R of y.requires??[])p.add(R);let S=0;for(let[y,R]of Object.entries(n)){let A=(R.requires??[]).length===0,F=(R.provides??[]).some(C=>(u.get(C)??[]).some(O=>O!==y));A&&!F&&(S+=1);}return {schema_version:"v1",meta:{board:{path:t}},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:S,topology:{edge_count:Array.from(p).length,max_fan_out_card:g.name,max_fan_out:g.fanOut}},cards:l}}function On(){return new Date().toISOString()}function Rr(t,e,r,n,o,s,i){return async c=>{let u=[],l=r.cardStore.readCard(c.nodeId);if(!l)return "task-initiate-failure";let f=l.id,g=l.card_data??{},p=l.source_defs??[],S=p.filter(D=>D.optionalForCompletionGating!==true),y=r.cardRuntimeStore.readRuntime(f),R=false,A=()=>{R&&(r.cardRuntimeStore.writeRuntime(f,y),R=false);},B=D=>dr(y._sources[D]),F=(D,L)=>{y._sources[D]=dr(L),R=true;},C=c.taskState?.executionCount??0;if(y._lastExecutionCount!==C&&(y._sources={},y._lastExecutionCount=C,R=true),c.update){let D=c.update,L=D.outputFile;if(L){let Y=B(L);if(D.failure){let st=D.rqt??Y.lastRequestedToken??Y.queueRequestedToken;st&&F(L,fr(Y,st));}else {let st=D.rqt;if(!Y.lastCompletedToken||st>Y.lastCompletedToken){let mt=typeof D.deliveryToken=="string"?D.deliveryToken:void 0,_t=false;mt&&(_t=r.fetchedSourcesStore.commitSourceData(f,L,mt)),_t?F(L,En(Y,st)):F(L,fr(Y,st));}}A();}}let j={};for(let D of p)if(D.outputFile){let L=r.fetchedSourcesStore.readSourceData(f,D.outputFile);L!==null&&(j[D.bindTo]=L);}let E={};for(let[D,L]of Object.entries(c.state??{}))if(L!==null&&typeof L=="object"&&!Array.isArray(L)){let Y=L[D];E[D]=Y!==void 0?Y:L;}else E[D]=L;let _={id:f,card_data:{...g},requires:E,source_defs:p,compute:l.compute};_._sourcesData=j,l.compute&&Vt.runSync(_,{sourcesData:j}),(s??r.outputStore.writeComputedValues.bind(r.outputStore))(f,_.computed_values??{});let I={...l},P=Vt.enrichSourcesSync(Array.isArray(l.source_defs)?l.source_defs:void 0,{card_data:l.card_data,requires:E}),M=t.value;I.source_defs=Array.isArray(P)?P.map(D=>({...D,boardDir:typeof D.boardDir=="string"&&D.boardDir?D.boardDir:M})):P;let z=On(),it=c.update?void 0:z,at=S.filter(D=>{let L=D.outputFile;if(typeof L!="string"||!L)return true;let Y=B(L);it&&(Y={...Y,queueRequestedToken:it},F(L,Y));let st=Y.queueRequestedToken??Y.lastRequestedToken??z,mt=lr(Y,st);return mt==="in-flight"?false:mt==="dispatch"});if(A(),at.length>0){let D=false,L=z;for(let Y of at){let st=Y.outputFile;if(typeof st!="string"||!st)continue;let mt=B(st),_t=mt.queueRequestedToken??z;F(st,{...mt,lastRequestedToken:_t}),L=_t,D=true;}return D&&A(),D&&(u.push({taskKind:"source-fetch",payload:{boardRef:ot(t),enrichedCard:I,callbackToken:c.callbackToken,rqt:L}}),r.executionRequestStore.appendEntries(e,u)),"task-initiated"}if(S.some(D=>{let L=D.outputFile;if(typeof L!="string"||!L)return false;let Y=B(L),st=Y.queueRequestedToken??Y.lastRequestedToken??z;return lr(Y,st)==="in-flight"}))return "task-initiated";let Dt=l.provides??[],At={};for(let{bindTo:D,ref:L}of Dt)At[D]=Vt.resolve(_,L);return (i??r.outputStore.writeDataObjects.bind(r.outputStore))(At),p.filter(D=>{if(D.optionalForCompletionGating!==true)return false;let L=B(D.outputFile);return !L.lastRequestedToken||!L.lastCompletedToken?true:L.lastCompletedToken<=L.lastRequestedToken}).length>0&&u.push({taskKind:"source-fetch",payload:{boardRef:ot(t),enrichedCard:I,callbackToken:c.callbackToken,rqt:z}}),n(c.nodeId,At),u.length>0&&r.executionRequestStore.appendEntries(e,u),"task-initiated"}}var Pe={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function Cr(t){return {[Pt]:t.graph,[mr]:t.lastDrainedJournalId}}function br(t){let e=t[Pt],r=t[mr];if(!e||typeof e!="object")throw new Error(`State snapshot is missing required key: ${Pt}`);return {graph:e,lastDrainedJournalId:typeof r=="string"?r:""}}function wr(t){let e=t.requires,r=t.provides?.map(n=>n.bindTo)??[];return {requires:e&&e.length>0?e:void 0,provides:r,taskHandlers:["card-handler"],description:t.meta?.title??t.id}}function Se(t){function e(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 c=t.readCard(i);return c?e({cards:[c]}):r(`card "${i}" not found`)}return e({cards:t.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 c=Array.isArray(i)?i:[i];for(let u of c){if(typeof u.id!="string")return r("each card must have a string `id` field");t.writeCard(u.id,u);}return e({count:c.length})}catch(i){return n(i)}},del(s){try{let i=s.body?.ids??[],c=s.params?.id,u=c?[...i,c]:i;if(u.length===0)return r("del requires body.ids (string[]) or params.id");for(let l of u)t.removeCard(l);return e({count:u.length})}catch(i){return n(i)}},patch(s){try{let i=s.params?.id,c=s.params?.path;if(!i)return r("patch requires params.id");if(!c)return r("patch requires params.path");let u=s.body,l=u&&Object.prototype.hasOwnProperty.call(u,"value")?u.value:s.body;return t.patchCard(i,c,l),e({count:1})}catch(i){return n(i)}},appendFiles(s){try{let i=s.params?.id;if(!i)return r("appendFiles requires params.id");let c=t.readCard(i);if(!c)return r(`card "${i}" not found`);let u=o(s.body);if(!u||u.length===0)return r("appendFiles requires a file metadata object, array, or body.files array");let l=c.card_data&&typeof c.card_data=="object"&&!Array.isArray(c.card_data)?c.card_data:{},f=Array.isArray(l.files)?l.files:[],g=[...f,...u],p=u.map((y,R)=>({idx:f.length+R,entry:y})),S=this.patch({params:{id:i,path:"card_data.files"},body:{value:g}});return S.status!=="success"?S:e({files_added:p})}catch(i){return n(i)}}}}function et(t){return t!==void 0?{status:"success",data:t}:{status:"success"}}function Z(t){return {status:"fail",error:t}}function rt(t){return {status:"error",error:t instanceof Error?t.message:String(t)}}function Bn(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCharCode(n)).join("");return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Ar(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),n=atob(r),o=Uint8Array.from(n,s=>s.charCodeAt(0));return new TextDecoder().decode(o)}function Re(t){try{let e=JSON.parse(Ar(t));return typeof e?.t=="string"?{taskName:e.t}:null}catch{return null}}function jn(t){return Bn(JSON.stringify(t))}function vr(t){try{let e=JSON.parse(Ar(t));return typeof e?.cbk=="string"&&typeof e?.cid=="string"&&typeof e?.b=="string"&&typeof e?.d=="string"?e:null}catch{return null}}function ut(){return new Date().toISOString()}function _r(t,e){let r=e.onWarn??(()=>{}),n=ot(t);function o(v){if(v.length!==0)try{let h=e.publishBoardChangeNotifications?.(v);h&&typeof h.catch=="function"&&h.catch(x=>r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${x instanceof Error?x.message:String(x)}`));}catch(h){r(`[board-live-cards-public] publishBoardChangeNotifications failed: ${h instanceof Error?h.message:String(h)}`);}}function s(){let v=c().readCardStoreRef();if(!v)throw new Error(`Board at ${t.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let h=e.kvStorageForRef(v);return {readIndex(){return h.read("_index")},writeIndex(x){h.write("_index",x);},readCard(x){return h.read(x)},writeCard(x,$){return h.write(x,$),e.hashFn($)},removeCard(x){h.delete(x);},cardExists(x){return h.read(x)!==null},defaultCardKey(x){return x}}}let i={readValues(v){let h=e.kvStorage("state-snapshot"),x=h.listKeys().sort();if(x.length===0)return {version:null,values:{}};let $={};for(let V of x)$[V]=h.read(V);return {version:e.hashFn($),values:$}},writeValues(v,h,x){let $=e.kvStorage("state-snapshot");for(let V of x)$.delete(V);for(let[V,W]of Object.entries(h))$.write(V,W);return e.hashFn(h)}},c=()=>kr(e.kvStorage("config")),u=()=>yr(i),l=()=>gr(e.journalAdapter()),f=()=>me(s(),r),g=()=>{let v=c().readOutputsStoreRef();if(!v)throw new Error(`Board at ${t.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return Sr(e.kvStorageForRef(v))},p=()=>{let v=c().readArchiveStoreRef();return v?e.archiveFactoryForRef(v):e.archiveFactory()};function S(){return !!u().readSnapshot(t.value).values[Pt]}function y(){let v=u().readSnapshot(t.value);if(!v.values[Pt])throw new Error(`Board not initialized at ${t.value}`);return br(v.values)}function R(v,h){let x=u().commitSnapshot(t.value,{schemaVersion:ye,expectedVersion:h,commitId:e.genId(),committedAt:ut(),deleteKeys:[],shallowMerge:Cr(v)});if(!x.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${h??"null"} current=${x.currentVersion??"null"}`)}function A(v){l().appendEvent(v);}async function B(){let v=(T,a)=>{let d=T.payload,k=(d?.enrichedCard??{}).id??d?.cardId??"unknown";A({type:"task-failed",taskName:k,error:a,timestamp:ut()});},h=pr(e.kvStorage("execution-requests"),v),x=hr(e.kvStorage("card-runtime")),$=he(e.blobStorage("sources"),T=>e.resolveBlob(T)),V=new Map,W={readRuntime(T){return V.get(T)??x.readRuntime(T)},writeRuntime(T,a){V.set(T,a);}},ct=[],Q=new Map,U={readSourceData(T,a){let d=`${T}/${a}`;return Q.has(d)?Q.get(d):$.readSourceData(T,a)},ingestSourceDataStaged(T,a,d,m){$.ingestSourceDataStaged(T,a,d,m);},commitSourceData(T,a,d){let m=`${T}/.staged/${d}/${a}`,b=e.blobStorage("sources").read(m);if(b==null)return false;let w=`${T}/${a}`,N=b.trim();try{Q.set(w,JSON.parse(N));}catch{Q.set(w,N);}return ct.push({cardId:T,outputFile:a,deliveryToken:d}),true},hasSource(T,a){let d=`${T}/${a}`;return Q.has(d)?true:$.hasSource(T,a)},listSources(T){let a=$.listSources(T),d=new Set;for(let k of Q.keys())k.startsWith(`${T}/`)&&d.add(k.slice(`${T}/`.length));let m=new Set([...a,...d]);return Array.from(m)}},nt={cardStore:f(),cardRuntimeStore:W,fetchedSourcesStore:U,outputStore:g(),executionRequestStore:h},xt=y(),bt=fe(xt.graph),{events:Tt,newCursor:It}=l().readEntriesAfterCursor(xt.lastDrainedJournalId),wt=[],Ft=[],Bt=[],qt=new Map,Mt=new Set,Ee=(T,a)=>{wt.push({type:"task-completed",taskName:T,data:a,timestamp:ut()});try{p().stream("exec-history").append({taskName:T,status:"completed",completedAt:ut()});}catch{}},Wt=(T,a)=>{A({type:"task-failed",taskName:T,error:a,timestamp:ut()});try{p().stream("exec-history").append({taskName:T,status:"failed",error:a,completedAt:ut()});}catch{}},Ut=Fe(bt,{handlers:{"card-handler":Rr(t,It,nt,Ee,Wt,(T,a)=>{Ft.push({cardId:T,values:a});},T=>{Bt.push(T);})},onNodeRemoved:T=>{qt.delete(T),V.delete(T),Mt.add(T);}});for(wt=Tt;wt.length>0;){let T=wt;wt=[];for(let a of T)if(a.type==="task-restart"){let d=nt.cardStore.readCard(a.taskName);d&&qt.set(a.taskName,d);}Ut.pushAll(T),await Ut.waitForHandlers();}let oe=Ut.getState();await Ut.dispose({wait:true});let Oe=u().readSnapshot(t.value).version;R({lastDrainedJournalId:It,graph:Yt(oe)},Oe);for(let{cardId:T,values:a}of Ft)nt.outputStore.writeComputedValues(T,a);for(let T of Bt)nt.outputStore.writeDataObjects(T);for(let[T,a]of V)x.writeRuntime(T,a);for(let{cardId:T,outputFile:a,deliveryToken:d}of ct)$.commitSourceData(T,a,d);let Gt;try{Gt=ke(n,oe),nt.outputStore.writeStatusSnapshot(Gt);}catch(T){r(`[board-live-cards-public] status publish failed: ${T instanceof Error?T.message:String(T)}`);}let Et=[];for(let{cardId:T,values:a}of Ft)Et.push({kind:"computed_values",cardId:T,values:a});for(let T of Bt)for(let[a,d]of Object.entries(T))a&&Et.push({kind:"data_object",key:a,payload:d});for(let[T,a]of qt)Et.push({kind:"card_refreshed",cardId:T,card:a});for(let T of Mt)Et.push({kind:"card_removed",cardId:T});Gt!==void 0&&Et.push({kind:"status",status:Gt}),o(Et);let Be=c().readTaskExecutorRef()??{howToRun:"built-in",whatToRun:ot({kind:"built-in",value:"source-cli-task-executor"})};h.dispatchEntriesForJournalId(It,T=>{if(T.taskKind!=="source-fetch"){r(`[process-accumulated-events] unknown taskKind "${T.taskKind}" \u2014 skipping`);return}let a=T.payload,d=a.enrichedCard?.id??"unknown",m=a.enrichedCard?.source_defs??[];for(let k of m){if(!k.outputFile){r(`[dispatch] source "${k.bindTo}" has no outputFile \u2014 skipping`);continue}let b=jn({cbk:a.callbackToken,rg:t.value,br:ot(t),cid:d,b:k.bindTo,d:k.outputFile,cs:void 0,rqt:a.rqt});e.dispatchExecution(Be,{source_def:k,base_ref:ot(t),callback:{token:b,via:e.selfRef}}).catch(w=>Wt(d,w instanceof Error?w.message:String(w)));}});}async function F(){try{let v=()=>{let x=y(),{events:$}=l().readEntriesAfterCursor(x.lastDrainedJournalId);$.length<=0||(F(),e.requestProcessAccumulated?.());},h=await Ge(e.lock,B,v);return et({ran:h!==!1})}catch(v){return rt(v)}}function C(){F(),e.requestProcessAccumulated?.();}function O(v){try{let h=v.params?.cardStoreRef;if(!h)return Z("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(!S()){let nt=le(Pe);R({lastDrainedJournalId:"",graph:Yt(nt)},null);}let x=v.params?.outputsStoreRef;if(!x)return Z("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let $=v.params?.scratchStoreRef,V=v.params?.archiveStoreRef,W=v.params?.chatStoreRef,ct=v.params?.artifactsStoreRef,Q=c();Q.writeCardStoreRef(h),Q.writeOutputsStoreRef(x),$&&Q.writeScratchStoreRef($),V&&Q.writeArchiveStoreRef(V),W&&Q.writeChatStoreRef(W),ct&&Q.writeArtifactsStoreRef(ct);let U=v.body??{};U["task-executor-ref"]&&Q.writeTaskExecutorRef(U["task-executor-ref"]),Object.prototype.hasOwnProperty.call(U,"chat-handler-flow")&&Q.writeChatHandlerFlow(U["chat-handler-flow"]);try{g().writeStatusSnapshot(ke(n,fe(y().graph)));}catch{}return et()}catch(h){return rt(h)}}function j(v){try{let h=g().readStatusSnapshot();if(!h){h=ke(n,fe(y().graph));try{g().writeStatusSnapshot(h);}catch{}}return et(h)}catch(h){return rt(h)}}function E(v){try{let h=v.params?.id;return h?(A({type:"task-removal",taskName:h,timestamp:ut()}),C(),et()):Z("removeCard requires params.id")}catch(h){return rt(h)}}function _(v){try{let h=v.params?.cardId;if(!h)return Z("addCardFiles requires params.cardId");let x=Se(f()).appendFiles({params:{id:h},body:v.body});if(x.status!=="success")return x;let $=I({params:{cardId:h}});return $.status!=="success"?$:et({cardId:h,files_added:x.data.files_added,notified:!0})}catch(h){return rt(h)}}function I(v){try{let h=v.params?.cardId;if(!h)return Z("cardRefreshedNotify requires params.cardId");let x=f().readCard(h);return x?(o([{kind:"card_refreshed",cardId:h,card:x}]),et({cardId:h,notified:!0})):Z(`Card "${h}" not found in board at ${t.value}`)}catch(h){return rt(h)}}function P(v){try{let h=v.params?.id;return h?(A({type:"task-restart",taskName:h,timestamp:ut()}),C(),et()):Z("retrigger requires params.id")}catch(h){return rt(h)}}async function M(v){return F()}function z(v){try{let h=v.params?.cardId,x=v.params?.all,$=!!v.params?.restart;if(!h&&!x)return Z("upsertCard requires --card-id <id> or --all");let V=x?f().readAllCards().map(W=>W.id):[h];for(let W of V)if(!f().readCard(W))return Z(`Card "${W}" not found in board at ${t.value}`);for(let W of V){let ct=f().readCard(W),Q=wr(ct),U=e.hashFn(Q),nt=e.kvStorage("card-upsert"),xt=nt.read(W),bt=xt?.taskConfigHash!==U;if(!(!bt&&!$)){if(bt){let Tt=xt?.blobRef??f().readCardKey(W)??W;A({type:"task-upsert",taskName:W,taskConfig:Q,timestamp:ut()}),nt.write(W,{blobRef:Tt,taskConfigHash:U,updatedAt:ut()});}$&&A({type:"task-restart",taskName:W,timestamp:ut()});}}return C(),et()}catch(h){return rt(h)}}function it(v){try{let h=v.params?.token;if(!h)return Z("taskFailed requires params.token");let x=v.params?.error??"unknown error",$=Re(h);if(!$)return Z("Invalid callback token");A({type:"task-failed",taskName:$.taskName,error:x,timestamp:ut()});try{p().stream("exec-history").append({taskName:$.taskName,status:"failed",error:x,completedAt:ut()});}catch{}return C(),et()}catch(h){return rt(h)}}function at(v){try{let h=v.params?.token;if(!h)return Z("taskProgress requires params.token");let $=(v.body??{}).update??{},V=Re(h);return V?(A({type:"task-progress",taskName:V.taskName,update:$,timestamp:ut()}),C(),et()):Z("Invalid callback token")}catch(h){return rt(h)}}function Ct(v){try{let h=v.params?.token,x=v.params?.ref;if(!h)return Z("sourceDataFetched requires params.token");if(!x)return Z("sourceDataFetched requires params.ref");let $=vr(h);if(!$)return Z("Invalid source token");let{cbk:V,cid:W,b:ct,d:Q,cs:U,rqt:nt}=$,xt=he(e.blobStorage("sources"),wt=>e.resolveBlob(wt)),bt=e.genId();xt.ingestSourceDataStaged(W,Q,St(x),bt);let Tt=Re(V);if(!Tt)return Z("Invalid callback token embedded in source token");let It=ut();return A({type:"task-progress",taskName:Tt.taskName,update:{bindTo:ct,outputFile:Q,fetchedAt:It,deliveryToken:bt,sourceChecksum:U,rqt:nt},timestamp:It}),C(),et()}catch(h){return rt(h)}}function Dt(v){try{let h=v.params?.token,x=v.params?.reason??"unknown";if(!h)return Z("sourceDataFetchFailure requires params.token");let $=vr(h);if(!$)return Z("Invalid source token");let{cbk:V,b:W,d:ct,cs:Q,rqt:U}=$,nt=Re(V);return nt?(A({type:"task-progress",taskName:nt.taskName,update:{bindTo:W,outputFile:ct,failure:!0,reason:x,sourceChecksum:Q,rqt:U},timestamp:ut()}),C(),et()):Z("Invalid callback token embedded in source token")}catch(h){return rt(h)}}function At(v){try{let h=c().readCardStoreRef();return h?et({storeRef:h}):Z(`Board at ${t.value} has no card store configured`)}catch(h){return rt(h)}}function ft(v){try{let h=c().readOutputsStoreRef();return h?et({storeRef:h}):Z(`Board at ${t.value} has no outputs store configured`)}catch(h){return rt(h)}}function D(v){try{let h=c().readScratchStoreRef();return et({storeRef:h})}catch(h){return rt(h)}}function L(v){try{let h=c().readArchiveStoreRef();return et({storeRef:h})}catch(h){return rt(h)}}function Y(v){try{let h=c().readChatStoreRef();return et({storeRef:h})}catch(h){return rt(h)}}function st(v){try{let h=c().readArtifactsStoreRef();return et({storeRef:h})}catch(h){return rt(h)}}function mt(v){try{let h=v.params?.key;if(!h)return Z("getConfig requires params.key");let x=c(),$;switch(h){case "task-executor":$=x.readTaskExecutorRef()??null;break;case "chat-handler-flow":$=x.readChatHandlerFlow()??null;break;case "card-store-ref":$=x.readCardStoreRef();break;case "outputs-store-ref":$=x.readOutputsStoreRef();break;case "scratch-store-ref":$=x.readScratchStoreRef();break;case "archive-store-ref":$=x.readArchiveStoreRef();break;case "chat-store-ref":$=x.readChatStoreRef();break;case "artifacts-store-ref":$=x.readArtifactsStoreRef();break;default:return Z(`getConfig: unknown key "${h}"`)}return et({value:$})}catch(h){return rt(h)}}function _t(v){try{let h=v.params?.key;if(!h)return Z("getOutputsDataObject requires params.key");let x=g().readDataObject(h);return et(x)}catch(h){return rt(h)}}function Lt(v){try{return et(g().readAllDataObjects())}catch(h){return rt(h)}}function Kt(v){try{let h=v.params?.key;if(!h)return Z("getOutputsComputedValues requires params.key");let x=g().readComputedValues(h);return et(x)}catch(h){return rt(h)}}function xe(v){try{return et(g().readAllComputedValues())}catch(h){return rt(h)}}function zt(){return he(e.blobStorage("sources"),v=>e.resolveBlob(v))}function ee(v){let h=e.blobStorage("sources").keyRef?.(v);return h?ot(h):v}function Te(v){try{let h=v.params?.key;if(!h)return Z("getOutputsFetchedSources requires params.key");let x=zt().listSources(h),$={};for(let V of x)$[V]=ee(`${h}/${V}`);return et($)}catch(h){return rt(h)}}function Ie(v){try{let h=zt(),x=new Set;for(let V of e.blobStorage("sources").listKeys()){let W=V.indexOf("/");W>0&&!V.includes("/.staged/")&&x.add(V.slice(0,W));}let $={};for(let V of x){let W=h.listSources(V);if(W.length>0){$[V]={};for(let ct of W)$[V][ct]=ee(`${V}/${ct}`);}}return et($)}catch(h){return rt(h)}}return {init:O,status:j,getCardStoreRef:At,getOutputsStoreRef:ft,getScratchStoreRef:D,getArchiveStoreRef:L,getChatStoreRef:Y,getArtifactsStoreRef:st,getConfig:mt,getOutputsDataObject:_t,getAllOutputsDataObjects:Lt,getOutputsComputedValues:Kt,getAllOutputsComputedValues:xe,getOutputsFetchedSources:Te,getAllOutputsFetchedSources:Ie,removeCard:E,addCardFiles:_,cardRefreshedNotify:I,retrigger:P,processAccumulatedEvents:M,upsertCard:z,taskFailed:it,taskProgress:at,sourceDataFetched:Ct,sourceDataFetchFailure:Dt}}function xr(){return new Date().toISOString()}function Tr(t){return new TextEncoder().encode(t).byteLength}function $n(t){return t?{key:t.key,size:t.size,updatedAt:t.updatedAt,contentType:t.contentType}:null}function Nn(t){let e=String(t||"").match(/^(\d+)[-_]/);return e?parseInt(e[1],10):0}function Fn(t){let e=String(t||"").trim();if(!e)return "upload.bin";let r=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return (r>=0?e.slice(r+1):e)||"upload.bin"}function Pn(t){return String(t||"").toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"")||"file"}function Dn(t){if(!t||t===".")return "";let e=String(t).replace(/^\./,"").toLowerCase().replace(/[^a-z0-9]/g,"");return e?`.${e}`:""}function Ln(t){let e=Fn(t),r=e.lastIndexOf(".");return r<=0||r===e.length-1?{stem:e,ext:""}:{stem:e.slice(0,r),ext:e.slice(r)}}function qn(t){let e=t.lastIndexOf("/");return e>=0?t.slice(e+1):t}function Ir(t){function e(r){let n=t.stat?$n(t.stat(r)):null;if(n)return n;if(!t.exists(r))return null;let o=t.read(r);return o===null?{key:r}:{key:r,size:Tr(o)}}return {exists(r){return t.exists(r)},putText(r,n,o="text/plain; charset=utf-8"){t.write(r,n);let s=e(r)??{key:r};return s.contentType=o,s.updatedAt=s.updatedAt??xr(),s.size=s.size??Tr(n),s},putBytes(r,n,o="application/octet-stream"){if(t.writeBytes)t.writeBytes(r,n);else {let i=JSON.stringify({__kind:"bytes-array",data:[...n]});t.write(r,i);}let s=e(r)??{key:r};return s.contentType=o,s.updatedAt=s.updatedAt??xr(),s.size=s.size??n.byteLength,s},getText(r){let n=t.read(r);if(n===null){if(!t.readBytes)return null;let o=t.readBytes(r);return o===null?null:Buffer.from(o).toString("utf-8")}try{let o=JSON.parse(n);if(o&&o.__kind==="bytes-array"&&Array.isArray(o.data))return new TextDecoder("utf-8").decode(new Uint8Array(o.data))}catch{}return n},getBytes(r){if(t.readBytes){let o=t.readBytes(r);if(o!==null)return o}let n=t.read(r);if(n===null)return null;try{let o=JSON.parse(n);if(o&&o.__kind==="bytes-array"&&Array.isArray(o.data))return new Uint8Array(o.data)}catch{}return new TextEncoder().encode(n)},head:e,list(r=""){return t.listKeys(r).map(n=>e(n)??{key:n}).sort((n,o)=>n.key.localeCompare(o.key))},remove(r){t.remove(r);}}}function Er(t){function e(o,s){let i=0,c=[];Array.isArray(s)&&c.push(...s);for(let u of t.list(`${o}/`))c.push(qn(u.key));for(let u of c){let l=Nn(u);Number.isFinite(l)&&l>i&&(i=l);}return i+1}function r(o,s,i){let c=Number(i?.maxLen||32),{stem:u,ext:l}=Ln(o),f=Dn(l),g=Pn(u),p=`${String(s).padStart(3,"0")}-`,S=f,y=c-p.length-S.length;y<1&&(S="",y=c-p.length);let R=g.slice(0,Math.max(1,y)),A=`${p}${R}${S}`;return A.length>c&&(A=A.slice(0,c).replace(/\.$/,"")),A}function n(o,s,i){let c=e(o,i?.seedNames),u=r(s,c,{maxLen:i?.maxLen});for(;t.exists(`${o}/${u}`);)c+=1,u=r(s,c,{maxLen:i?.maxLen});return u}return {nextSerial:e,buildStoredName:r,allocateStoredName:n}}function Or(){function t(o,s){if(!Array.isArray(o))return [];let i=[];for(let c of o){if(!c||typeof c!="object")continue;let u=c;typeof u.stored_name=="string"&&i.push({name:typeof u.name=="string"?u.name:u.stored_name,stored_name:u.stored_name,size:typeof u.size=="number"&&Number.isFinite(u.size)?u.size:null,mime_type:typeof u.mime_type=="string"?u.mime_type:null,uploaded_at:typeof u.uploaded_at=="string"?u.uploaded_at:s||null,chat:u.chat===true});}return i}function e(o){return !o||typeof o!="object"?[]:t(o.files,void 0)}function r(o,s){let i=e(o);if(s.length===0)return o.files=i,i;let c=new Set(i.map(u=>u.stored_name));for(let u of s)c.has(u.stored_name)||(i.push(u),c.add(u.stored_name));return o.files=i,i}function n(o,s,i){let c=e(o);if(!Number.isInteger(s)||s<0||s>=c.length)return {ok:false,reason:"index_out_of_range"};let u=c[s];return !u||!u.stored_name?{ok:false,reason:"missing_stored_name"}:i&&i!==u.stored_name?{ok:false,reason:"stale_reference"}:{ok:true,file:u}}return {read:e,normalizeIncoming:t,merge:r,resolve:n}}function Br(t){return String(t).replace(/[^a-zA-Z0-9_-]/g,"_")}function jr(t){let e=t.payload??{};return {id:t.id,role:typeof e.role=="string"?e.role:"system",text:typeof e.text=="string"?e.text:"",files:Array.isArray(e.files)?e.files:[],updated_at:typeof e.updated_at=="string"?e.updated_at:""}}function $r(t,e){let r=o=>`chats/${Br(o)}/processing`,n=o=>`chats/${Br(o)}/config`;return {append(o,s,i,c=[]){return t(o).append({role:s,text:i,files:c,updated_at:new Date().toISOString()}).id},readAll(o){return t(o).readAll().map(jr)},readAfter(o,s){let i=t(o).readAfter(s);return {records:i.entries.map(jr),cursor:i.newCursor}},clear(o){t(o).clear?.();},setProcessing(o,s){s?e.write(r(o),true):e.delete(r(o));},isProcessing(o){return e.read(r(o))===true},getConfig(o){return e.read(n(o))??{}},setConfig(o,s){let i=e.read(n(o))??{};e.write(n(o),{...i,...s});}}}function Mn(){let t=globalThis.crypto;return typeof t?.randomUUID=="function"?String(t.randomUUID()):`id-${Date.now()}-${Math.random().toString(36).slice(2)}`}function Nr(){let t=new Map,e=new Map;function r(n){return t.has(n)||t.set(n,[]),t.get(n)}return {append(n,o,s,i=[]){let c={id:Mn(),role:o,text:s,files:i,updated_at:new Date().toISOString()};return r(n).push(c),c.id},readAll(n){return r(n).slice()},readAfter(n,o){let s=r(n);if(!o)return {records:s.slice(),cursor:s.length>0?s[s.length-1].id:null};let i=s.findIndex(u=>u.id===o),c=i===-1?s.slice():s.slice(i+1);return {records:c,cursor:c.length>0?c[c.length-1].id:o}},clear(n){t.set(n,[]);},setProcessing(n,o){o?e.set(`p:${n}`,true):e.delete(`p:${n}`);},isProcessing(n){return e.get(`p:${n}`)===true},getConfig(n){return e.get(`c:${n}`)??{}},setConfig(n,o){let s=e.get(`c:${n}`)??{};e.set(`c:${n}`,{...s,...o});}}}function Fr(t){function e(l){let f=typeof l=="number"?l:Number(l);return Number.isInteger(f)&&f>0?f:null}function r(l,f){let g=f;for(let p=l.length-1;p>=0;p-=1)if(l[p]?.role==="user"&&(g-=1,g===0))return l.slice(p);return l}function n(l){return {status:"success",data:l}}function o(l){return {status:"fail",error:l}}function s(l){return {status:"error",error:l instanceof Error?l.message:String(l)}}function i(l,f="command envelope"){let g=typeof l.cardId=="string"?l.cardId:void 0;if(!l.command)return o(`chat-store: ${f} missing "command"`);if(!g)return o(`chat-store: ${f} missing "cardId"`);if(l.command==="append")return u.append({params:{cardId:g},body:{role:l.role,text:l.text,files:l.files}});if(l.command==="read-all")return u.readAll({params:{cardId:g},body:{lastUserTurns:l.lastUserTurns}});if(l.command==="read-after")return u.readAfter({params:{cardId:g},body:{cursor:l.cursor??null}});if(l.command==="clear")return u.clear({params:{cardId:g}});if(l.command==="set-processing")return u.setProcessing({params:{cardId:g},body:{active:l.active}});if(l.command==="is-processing")return u.isProcessing({params:{cardId:g}});if(l.command==="get-config")return u.getConfig({params:{cardId:g}});if(l.command==="set-config"){let{command:p,cardId:S,...y}=l;return u.setConfig({params:{cardId:g},body:y})}return o(`chat-store: unknown command "${String(l.command)}"`)}function c(l){if(!Array.isArray(l.commands)||l.commands.length===0)return o('chat-store: command envelope must include a non-empty "commands" array');let f=[];for(let g=0;g<l.commands.length;g+=1){let p=l.commands[g];if(!p||typeof p!="object"||Array.isArray(p))return o(`chat-store: command envelope entry ${g} must be an object`);let S={cardId:l.cardId,...p},y=i(S,`command envelope entry ${g}`);if(y.status!=="success")return y;f.push({index:g,command:String(S.command),data:y.data});}return n({results:f})}let u={append(l){try{let f=l.params?.cardId;if(!f)return o("append requires params.cardId");let g=l.body??{},p=typeof g.role=="string"?g.role:"",S=typeof g.text=="string"?g.text:"",y=Array.isArray(g.files)?g.files:[];if(!p)return o("append requires body.role");let R=t.append(f,p,S,y);return n({id:R})}catch(f){return s(f)}},readAll(l){try{let f=l.params?.cardId;if(!f)return o("readAll requires params.cardId");let g=l.body??{},p=t.readAll(f);if(g.lastUserTurns===void 0)return n({records:p});let S=e(g.lastUserTurns);return S===null?o("readAll requires body.lastUserTurns (positive integer)"):n({records:r(p,S)})}catch(f){return s(f)}},readAfter(l){try{let f=l.params?.cardId;if(!f)return o("readAfter requires params.cardId");let p=(l.body??{}).cursor??null;return n(t.readAfter(f,p))}catch(f){return s(f)}},clear(l){try{let f=l.params?.cardId;return f?(t.clear(f),n({ok:!0})):o("clear requires params.cardId")}catch(f){return s(f)}},setProcessing(l){try{let f=l.params?.cardId;if(!f)return o("setProcessing requires params.cardId");let g=l.body??{};return typeof g.active!="boolean"?o("setProcessing requires body.active (boolean)"):(t.setProcessing(f,g.active),n({ok:!0}))}catch(f){return s(f)}},isProcessing(l){try{let f=l.params?.cardId;return f?n({active:t.isProcessing(f)}):o("isProcessing requires params.cardId")}catch(f){return s(f)}},getConfig(l){try{let f=l.params?.cardId;return f?n({config:t.getConfig(f)}):o("getConfig requires params.cardId")}catch(f){return s(f)}},setConfig(l){try{let f=l.params?.cardId;if(!f)return o("setConfig requires params.cardId");let g=l.body??{};return t.setConfig(f,g),n({ok:!0})}catch(f){return s(f)}},run:i,runBatch:c};return u}var Un={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},Gn=32;function Jn(){return {status:null,computedValues:{},dataObjects:{},cards:{}}}function Pr(t){if(!t||typeof t!="object")return false;let e=t.summary;return !e||typeof e!="object"?false:Number(e.card_count||0)>0}function Dr(t,e){if(!e||typeof e!="object")return;let r=e;if(r.kind==="notification-batch"&&Array.isArray(r.notifications)){for(let n of r.notifications)Dr(t,n);return}r.kind==="status"&&Pr(r.status)&&(t.status=r.status),r.kind==="computed_values"&&r.cardId&&(t.computedValues[r.cardId]=r.values),r.kind==="data_object"&&r.key&&(t.dataObjects[r.key]=r.payload),r.kind==="card_refreshed"&&r.cardId&&(t.cards[r.cardId]=r.card),r.kind==="card_removed"&&r.cardId&&(delete t.cards[r.cardId],delete t.computedValues[r.cardId]);}function Lr(t){let e=String(t.apiBasePath||"/api/board").replace(/\/$/,""),r={...Un,...t.corsHeaders||{}},n=t.boardId||"",o=t.logger||{info:console.log,warn:console.warn,error:console.error},s=t.invocationAdapter,i=t.chatFlowRunner||null,c=t.chatStorage??Nr(),u=Fr(c),l=t.notificationTransport||null,f=t.serverUrl||null,g=t.executionExtra||{},p=t.onSseClientConnected,S=t.onSseClientDisconnected,y=t.onChannelSubscribed,R=t.onChannelUnsubscribed,A=new Map,B=new Map,F=new Map,C=null;function O(a){let d=_r(a.baseRef,a.boardAdapter),m=a.boardAdapter.kvStorageForRef(a.cardStoreRef),b=Se(me({readIndex:()=>m.read("_index"),writeIndex:G=>m.write("_index",G),readCard:G=>m.read(G),writeCard:(G,X)=>(m.write(G,X),G),cardExists:G=>m.read(G)!==null,defaultCardKey:G=>G},o.warn)),w=a.artifactsAdapter||a.boardAdapter,N=a.filesArtifactsStore??null,q=a.artifactsAdapter?w.blobStorage(""):w.blobStorage("files"),J=null;return {label:a.label,board:d,cardStore:b,get filesArtifacts(){return J??(J=N??Ir(q))},boardAdapter:a.boardAdapter,cardStoreRef:a.cardStoreRef,outputsStoreRef:a.outputsStoreRef,artifactsStoreRef:a.artifactsStoreRef,scratchStoreRef:a.scratchStoreRef,archiveStoreRef:a.archiveStoreRef,notifyRef:a.notifyRef,taskExecutorRef:a.taskExecutorRef,chatHandlerRef:a.chatHandlerRef,chatHandlerFlow:a.chatHandlerFlow,inferenceAdapterRef:a.inferenceAdapterRef,notification:Jn(),notificationTeardown:null,initialized:false,cardsBootstrapped:false}}let j=t.boards.map(O),E=new Map;function _(a){return E.get(a)??0}function I(a){let d=j[_(a)];return {files:d?d.filesArtifacts:null}}function P(a){let d=I(a);return d.files?Er(d.files):null}function M(){return Or()}function z(a){return String(a||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}async function it(a){if(!a||a.notificationTeardown||!l||!a.notifyRef)return;let d=await l.subscribe(a.notifyRef,m=>{Dr(a.notification,m);let k=m.kind==="notification-batch"?m.notifications:[m];Et(k);});a.notificationTeardown=d;}async function at(a){if(!a||a.initialized)return;let d={cardStoreRef:a.cardStoreRef,outputsStoreRef:a.outputsStoreRef};a.artifactsStoreRef&&(d.artifactsStoreRef=a.artifactsStoreRef),a.scratchStoreRef&&(d.scratchStoreRef=a.scratchStoreRef),a.archiveStoreRef&&(d.archiveStoreRef=a.archiveStoreRef);let m={};a.taskExecutorRef&&(m["task-executor-ref"]=a.taskExecutorRef),a.chatHandlerFlow!==void 0&&(m["chat-handler-flow"]=a.chatHandlerFlow),a.inferenceAdapterRef&&(m["inference-adapter-ref"]=a.inferenceAdapterRef);let k=a.board.init({params:d,body:m});if(k.status!=="success")throw Object.assign(new Error(k.error||`init failed for ${a.label}`),{statusCode:500});if(await it(a),!a.chatHandlerFlow&&a.chatHandlerRef&&s.describe)try{let b=await s.describe(a.chatHandlerRef);b&&b.kind!=="chat-handler"?o.warn(`[init] chat-handler describe returned kind="${b.kind}", expected "chat-handler" for ${a.label}`):b&&o.info(`[init] chat-handler validated: ${b.name} (protocol ${b.protocolVersion}) for ${a.label}`);}catch(b){o.warn(`[init] chat-handler describe failed for ${a.label}: ${b?.message||String(b)}`);}a.initialized=true;}function Ct(a){if(!a.boardAdapter.publishBoardChangeNotifications)return;let d=[],m=a.board.status({});m.status==="success"&&m.data!=null&&Pr(m.data)&&d.push({kind:"status",status:m.data});let k=a.board.getAllOutputsDataObjects({});if(k.status==="success"&&k.data!=null)for(let[w,N]of Object.entries(k.data))w&&d.push({kind:"data_object",key:w,payload:N});let b=a.board.getAllOutputsComputedValues({});if(b.status==="success"&&b.data!=null)for(let[w,N]of Object.entries(b.data))w&&d.push({kind:"computed_values",cardId:w,values:N});d.length>0&&a.boardAdapter.publishBoardChangeNotifications(d);}function Dt(a,d){if(!a||a.cardsBootstrapped)return;let m=a.cardStore.get({}),k=m.status==="success"&&Array.isArray(m.data?.cards)?m.data.cards:[];for(let b of k)typeof b.id=="string"&&(E.set(b.id,d),a.board.upsertCard({params:{cardId:b.id}}));a.cardsBootstrapped=true;}async function At(){for(let a of j)await at(a);}async function ft(){await At();for(let a=0;a<j.length;a++)Ct(j[a]),Dt(j[a],a);}function D(a){return j[_(a)]??null}function L(a){let d=D(a);if(!d)return null;let m=d.cardStore.get({params:{id:a}});if(m.status!=="success")return null;let k=Array.isArray(m.data?.cards)?m.data.cards:[];return k.length>0?k[0]:null}function Y(){let a=m=>{if(!m||!m.cardStore)return [];let k=m.cardStore.get({});return k.status!=="success"||!Array.isArray(k.data?.cards)?[]:k.data.cards},d=[];for(let m of j)d.push(...a(m));return d}function st(){let a=j.map(w=>{try{let q=w.boardAdapter.kvStorageForRef(w.outputsStoreRef).read("status");if(q!=null)return q}catch{}return w.notification.status}).filter(Boolean);if(a.length===0)return null;if(a.length===1)return a[0];let d=[],m=["completed","eligible","pending","blocked","unresolved","failed","in_progress","orphan_cards"],k={};for(let w of m)k[w]=0;for(let w of a){let N=w,q=Array.isArray(N.cards)?N.cards:[];d.push(...q);for(let J of m)k[J]+=Number(N?.summary?.[J]||0);}let b=a[0];return {...b,cards:d,summary:{...b.summary||{},card_count:d.length,...k}}}function mt(){let a={},d=m=>{for(let[k,b]of Object.entries(m.notification.computedValues)){let w=m.notification.cards[k];a[k]={schema_version:"v1",card_id:k,card_data:w?.card_data??{},computed_values:b??{}};}};for(let m of j)d(m);return a}function _t(){let a={};for(let d of j)Object.assign(a,d.notification.dataObjects||{});return a}function Lt(){let a=Y(),d=mt(),m=_t(),k={};for(let w of a){if(!w?.id)continue;let N=w.id,q=d[N]||{},J={...q.card_data&&typeof q.card_data=="object"?q.card_data:w.card_data&&typeof w.card_data=="object"?w.card_data:{}};k[N]={schema_version:q.schema_version||"v1",card_id:q.card_id||N,card_data:J,computed_values:q.computed_values&&typeof q.computed_values=="object"?q.computed_values:{}};}let b={};for(let w of a){if(!w?.id)continue;let N=w.id;try{let q=x(N),J=c.isProcessing(N);(q.length>0||J)&&(b[N]={messages:q.map(G=>({role:String(G.role||"system"),text:String(G.text||""),files:Array.isArray(G.files)?G.files:[]})),receiving:!1,processing:J});}catch{}}return {boardId:n,cardDefinitions:a,statusSnapshot:st(),dataObjectsByToken:m,cardRuntimeById:k,cardChatsByCardId:b}}function Kt(a,d,m){let k=m?.syncBoard!==false,b=m?.restartOnlyIfChanged===true,w=D(a);if(!w)throw Object.assign(new Error(`Card not found: ${a}`),{statusCode:404});let N=L(a);if(!N)throw Object.assign(new Error(`Card not found: ${a}`),{statusCode:404});let q=b?JSON.stringify(N):null,J=d(N)||N;if(b&&JSON.stringify(J)===q)return;let G=w.cardStore.set({body:J});if(G.status!=="success")throw Object.assign(new Error(G.error||`Failed to persist card: ${a}`),{statusCode:500});if(k){let X=w.board.upsertCard({params:{cardId:a,restart:true}});if(X.status!=="success")throw Object.assign(new Error(X.error||`Failed to upsert card: ${a}`),{statusCode:500})}}function xe(a,d){Kt(a,d,{syncBoard:true});}function zt(a,d){Kt(a,d,{syncBoard:false});}function ee(a){let d=D(a);if(!d)throw Object.assign(new Error(`Card not found: ${a}`),{statusCode:404});if(!L(a))throw Object.assign(new Error(`Card not found: ${a}`),{statusCode:404});let k=d.board.upsertCard({params:{cardId:a,restart:true}});if(k.status!=="success")throw Object.assign(new Error(k.error||`Failed to retrigger card: ${a}`),{statusCode:500})}function Te(a,d){Kt(a,m=>{if(!d||typeof d!="object"||Object.keys(d).length===0)return m;function k(b,w,N){let q=String(w||"").split(".").filter(Boolean);if(!q.length)return;let J=b;for(let G=0;G<q.length-1;G++){let X=q[G];(!J[X]||typeof J[X]!="object")&&(J[X]={}),J=J[X];}J[q[q.length-1]]=N;}if(d.fieldValues!==void 0&&d.fieldValues!==null){let b=null,w=m.view;if(w&&Array.isArray(w.elements)){for(let N of w.elements)if(N?.data&&N.data.writeTo){b=N.data.writeTo;break}}b?k(m,b,d.fieldValues):typeof d.fieldValues=="object"&&!Array.isArray(d.fieldValues)&&(m.card_data={...m.card_data||{},...d.fieldValues});}else {if(Array.isArray(d._stagedFiles)&&d._stagedFiles.length>0)return m;for(let[b,w]of Object.entries(d))b!=="_stagedFiles"&&(w!==null&&typeof w=="object"&&!Array.isArray(w)&&m[b]!==null&&typeof m[b]=="object"&&!Array.isArray(m[b])?m[b]={...m[b],...w}:m[b]=w);}return m},{syncBoard:true,restartOnlyIfChanged:true});}function Ie(a){let d=String(a||"").trim();if(!d)return "upload.bin";let m=Math.max(d.lastIndexOf("/"),d.lastIndexOf("\\"));return (m>=0?d.slice(m+1):d)||"upload.bin"}function v(a){c.clear(a),c.setProcessing(a,false);}function h(a,d,m,k){let b=typeof m=="string"?m.trim():"";return c.append(a,d,b,k)}function x(a){return c.readAll(a)}function $(a){let d=[];try{let m=L(a);if(!m)return d;let k=M().read(m.card_data&&typeof m.card_data=="object"?m.card_data:null);for(let b of k)d.push(b.stored_name);}catch{}return d}function V(a,d,m,k){let b=z(a),w=I(a),N=Ie(d),q=P(a),J=q?q.allocateStoredName(b,N,{seedNames:$(a),maxLen:Gn}):`${String(Date.now())}-${N}`;return w.files&&w.files.putBytes(`${b}/${J}`,new Uint8Array(k),m||"application/octet-stream"),{name:N,stored_name:J,size:k.length,mime_type:m||"application/octet-stream",uploaded_at:new Date().toISOString()}}function W(a){let d=D(a);if(!d)return null;let m=d.board.getConfig({params:{key:"chat-handler-flow"}}),k=m.status==="success"?m.data?.value:null,b=d.chatHandlerRef;return k==null&&(!b||typeof b!="object")?null:{ctx:d,handlerFlow:k,handlerRef:b}}function ct(a,d,m=false){let k=W(a);if(!k)return;let{ctx:b,handlerFlow:w,handlerRef:N}=k;if(!m)try{c.setProcessing(a,!0);}catch{}let q={boardId:n,cardId:String(a),lastChatEntryId:d,...g,...f?{serverUrl:f}:{}};if(!i&&w!=null){try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler-flow] configured for card "${a}" but no chatFlowRunner was provided`);return}if(w!=null){let G=i;if(!G)return;G.run(w,q,{boardId:n,cardId:String(a),label:b.label,logger:o,serverUrl:f,executionExtra:g}).then(X=>{if(X.dispatched)o.info(`[chat-handler-flow] invoked for card "${a}" (boardId: "${n}")`);else {try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler-flow] dispatch failed for card "${a}": ${X.error||"unknown"}`);}},X=>{try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler-flow] invoke failed for card "${a}": ${X?.message||String(X)}`);});return}let J=N;J&&s.invoke(J,q).then(G=>{if(G.dispatched)o.info(`[chat-handler] invoked for card "${a}" (boardId: "${n}")`);else {try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler] dispatch failed for card "${a}": ${G.error||"unknown"}`);}},G=>{try{c.setProcessing(a,!1);}catch{}o.warn(`[chat-handler] invoke failed for card "${a}": ${G?.message||String(G)}`);});}function Q(a,d,m){let k=d==="chat-send"?zt:xe,b;k(a,w=>{let N=new Date().toISOString(),q=w.card_data&&typeof w.card_data=="object"?w.card_data:{};if(w.card_data=q,d==="chat-send"){let J=m&&typeof m.text=="string"?m.text.trim():"",G=[];if(Array.isArray(m?.files)){for(let X of m.files)if(X){if(typeof X=="string"){G.push({name:X});continue}if(typeof X=="object"){let gt=X;typeof gt.name=="string"&&G.push({name:gt.name,size:gt.size,mime_type:gt.mime_type,uploaded_at:gt.uploaded_at,stored_name:gt.stored_name,chat:gt.chat===true});}}}if(J||G.length>0){let X=u.runBatch({cardId:a,commands:[{command:"append",role:"user",text:J,files:G},{command:"set-processing",active:true}]});if(X.status!=="success")throw new Error(X.error);let gt=X.data.results[0]?.data?.id;if(typeof gt!="string"||!gt)throw new Error(`chat-send did not return an append id for card ${a}`);b={cardId:a,lastEntryId:gt,processingAlreadySet:true};try{let ae=x(a);Et([{kind:"card_chats",cardId:a,messages:ae.map(jt=>({role:String(jt.role||"system"),text:String(jt.text||""),files:Array.isArray(jt.files)?jt.files:[]})),receiving:!0,processing:c.isProcessing(a)}]);}catch{}}return w}if(d==="file-upload"){let J=M().normalizeIncoming(m?.files,N);return J.length>0&&M().merge(q,J),w}if(d==="action"){let J=m&&typeof m.buttonId=="string"?m.buttonId:"";if(!J)return w;q.lastAction={buttonId:J,at:N},q.lastActionText=`${J} @ ${N}`;}return w}),b&&ct(b.cardId,b.lastEntryId,b.processingAlreadySet);}function U(a,d,m){let k=JSON.stringify(m),b=typeof Buffer<"u"?Buffer.byteLength(k):new TextEncoder().encode(k).length;a.writeHead(d,{...r,"Content-Type":"application/json; charset=utf-8","Content-Length":b}),a.end(k);}async function nt(a){let d=[];for await(let k of a)d.push(k);let m=typeof Buffer<"u"?Buffer.concat(d).toString("utf-8").trim():new TextDecoder().decode(bt(d)).trim();return m?JSON.parse(m):{}}async function xt(a){let d=[];for await(let m of a)d.push(m);return typeof Buffer<"u"?Buffer.concat(d):bt(d)}function bt(a){let d=a.reduce((b,w)=>b+w.length,0),m=new Uint8Array(d),k=0;for(let b of a)m.set(b,k),k+=b.length;return m}let Tt=0;function It(a){let d=JSON.stringify(a);return Tt++,`id: ${Tt}
|
|
2
2
|
data: ${d}
|
|
3
3
|
|
|
4
|
-
`}function wt(a){let d=a;try{d.flushHeaders?.();}catch{}try{d.flush?.();}catch{}try{d.socket?.setNoDelay?.(!0);}catch{}try{d.socket?.uncork?.();}catch{}}function Ft(a,d){let m=A.get(a);if(m&&!(d&&m.res!==d)){A.delete(a),ne();try{S?.(a);}catch{}try{m.res.end();}catch{}}}function Bt(a,d){let m=A.get(a);if(!m)return;let k=It(d);try{m.res.write(k),wt(m.res);}catch{Ft(a,m.res);}}function qt(a,d,m,k,b){if(!A.has(d)){
|
|
4
|
+
`}function wt(a){let d=a;try{d.flushHeaders?.();}catch{}try{d.flush?.();}catch{}try{d.socket?.setNoDelay?.(!0);}catch{}try{d.socket?.uncork?.();}catch{}}function Ft(a,d){let m=A.get(a);if(m&&!(d&&m.res!==d)){A.delete(a),ne();try{S?.(a);}catch{}try{m.res.end();}catch{}}}function Bt(a,d){let m=A.get(a);if(!m)return;let k=It(d);try{m.res.write(k),wt(m.res);}catch{Ft(a,m.res);}}function qt(a,d,m,k,b){if(!A.has(d)){U(a,404,{error:`SSE client not connected: ${d}`});return}b?y?.(d,m,k):R?.(d,m,k),U(a,200,{ok:true,clientId:d,channelName:m,...k.cardId?{cardId:k.cardId}:{},subscribed:b});}function Mt(){let a=new Set;for(let d of A.values())for(let m of d.subscribedChatCardIds)a.add(m);return Array.from(a)}function Ee(a){let d=B.has(a)?B.get(a):null,{cursor:m}=c.readAfter(a,d),k=c.isProcessing(a),b=k!==(F.get(a)??false),w=m!==d;return w&&B.set(a,m),F.set(a,k),w||b}function Wt(a,d=true){let m=x(a),k=Date.now();return {kind:"card_chats",cardId:a,sentAt:new Date(k).toISOString(),sentAtMs:k,messages:m.map(b=>({role:String(b.role||"system"),text:String(b.text||""),files:Array.isArray(b.files)?b.files:[]})),receiving:d,processing:c.isProcessing(a)}}function re(a,d=true){let m={kind:"notification-batch",notifications:[Wt(a,d)]};for(let[k,b]of A.entries())b.subscribedChatCardIds.has(a)&&Bt(k,m);}function ne(){Mt().length>0||(C&&(clearInterval(C),C=null),B.clear(),F.clear());}function Ut(){if(C)return;let a=()=>{let d=Mt();if(d.length===0){ne();return}let m=new Set(d);for(let k of Array.from(B.keys()))m.has(k)||B.delete(k);for(let k of Array.from(F.keys()))m.has(k)||F.delete(k);for(let k of d)Ee(k)&&re(k,true);};a(),C=setInterval(a,1e3);}function oe(a,d){let m=A.get(a);if(!m)return false;m.subscribedChatCardIds.add(d);let{cursor:k}=c.readAfter(d,null);return B.set(d,k),F.set(d,c.isProcessing(d)),Ut(),Bt(a,{kind:"notification-batch",notifications:[Wt(d,true)]}),true}function Oe(a,d){let m=A.get(a);return m?(m.subscribedChatCardIds.delete(d),Mt().includes(d)||(B.delete(d),F.delete(d)),ne(),true):false}function Gt(a){if(!a||typeof a!="object")return false;let d=a.kind;return d==="card_chats"||d==="chat_messages"}function Et(a){if(!a||a.length===0)return;let d=[],m=new Set;for(let k of a)Gt(k)&&typeof k.cardId=="string"?m.add(String(k.cardId)):d.push(k);if(d.length>0){let k={kind:"notification-batch",notifications:d};for(let b of A.keys())Bt(b,k);}for(let k of m)re(k,true);}function Be(a,d,m){let k=A.get(m),b=k?new Set(k.subscribedChatCardIds):new Set;k&&Ft(m,k.res),d.writeHead(200,{...r,"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),wt(d),A.set(m,{res:d,subscribedChatCardIds:b});let w=Lt(),N=It(w);d.write(N);try{p?.(m,J=>{Bt(m,J);});}catch{}let q=setInterval(()=>{try{d.write(`: keepalive
|
|
5
5
|
|
|
6
|
-
`);}catch{}},15e3);a.on("close",()=>{clearInterval(
|
|
7
|
-
${new Date().toISOString()}`);}catch{}function i(){let g=globalThis.localStorage.getItem(r);if(g===null)return {};try{let p=JSON.parse(g);return p&&typeof p=="object"&&!Array.isArray(p)?p:{}}catch{return {}}}function c(g){try{globalThis.localStorage.setItem(r,JSON.stringify(g));}catch{}}if(s){let g=i();typeof g["retention.lastSweepAt"]!="number"&&(g["retention.lastSweepAt"]=Date.now(),c(g));}function u(){if(globalThis.localStorage.getItem(e)===null)return;let g=i(),p=typeof g["retention.maxAgeMs"]=="number"?g["retention.maxAgeMs"]:Kn,S=typeof g["retention.sweepIntervalMs"]=="number"?g["retention.sweepIntervalMs"]:zn;if(p<=0||S<=0)return;let y=typeof g["retention.lastSweepAt"]=="number"?g["retention.lastSweepAt"]:0,
|
|
8
|
-
${new Date().toISOString()}`);}catch{}function o(){let c=globalThis.localStorage.getItem(r);if(c===null)return {};try{let u=JSON.parse(c);return u&&typeof u=="object"&&!Array.isArray(u)?u:{}}catch{return {}}}function s(c){try{globalThis.localStorage.setItem(r,JSON.stringify(c));}catch{}}function i(){if(globalThis.localStorage.getItem(e)===null)return;let c=o(),u=typeof c["retention.maxAgeMs"]=="number"?c["retention.maxAgeMs"]:0,l=typeof c["retention.sweepIntervalMs"]=="number"?c["retention.sweepIntervalMs"]:0;if(u<=0||l<=0)return;let f=typeof c["retention.lastSweepAt"]=="number"?c["retention.lastSweepAt"]:0,g=Date.now();if(g-f<l)return;c["retention.lastSweepAt"]=g,s(c);let p=`${t}${De}`;for(let S=0;S<globalThis.localStorage.length;S++){let y=globalThis.localStorage.key(S);if(!y||!y.startsWith(p))continue;let C=globalThis.localStorage.getItem(y);if(C)try{let A=JSON.parse(C),B=A.filter(F=>typeof F.__ts!="number"||g-F.__ts<=u);B.length!==A.length&&globalThis.localStorage.setItem(y,JSON.stringify(B));}catch{}}}return {stream(c){let u=Ur(c),l=n(u);function f(){let p=globalThis.localStorage.getItem(l);if(!p)return [];try{return JSON.parse(p)}catch{return []}}function g(p){try{globalThis.localStorage.setItem(l,JSON.stringify(p));}catch{}}return {append(p){let S={id:globalThis.crypto.randomUUID(),payload:p,__ts:Date.now()},y=f();y.push(S),g(y);try{i();}catch{}return {id:S.id,payload:S.payload}},readAll(){return f().map(p=>({id:p.id,payload:p.payload}))},readAfter(p){let S=f();if(!p){let B=S.map(F=>({id:F.id,payload:F.payload}));return {entries:B,newCursor:B.length>0?B[B.length-1].id:null}}let y=S.findIndex(B=>B.id===p),A=(y===-1?S:S.slice(y+1)).map(B=>({id:B.id,payload:B.payload}));return {entries:A,newCursor:A.length>0?A[A.length-1].id:p}},clear(){try{globalThis.localStorage.removeItem(l);}catch{}}}},blob(c){let u=Ur(c),l=we(`${t}${Mr}${u}`);return {read:f=>l.read(f),write:(f,g)=>{l.write(f,g);try{i();}catch{}},exists:f=>l.exists(f),remove:f=>l.remove(f),readBytes:l.readBytes?f=>l.readBytes(f):void 0,writeBytes:l.writeBytes?(f,g)=>{l.writeBytes(f,g);try{i();}catch{}}:void 0,listKeys:f=>l.listKeys(f),stat:l.stat?f=>l.stat(f):void 0}},listStreams(c){let u=`${t}${De}`,l=[];for(let f=0;f<globalThis.localStorage.length;f++){let g=globalThis.localStorage.key(f);if(!g||!g.startsWith(u))continue;let p=g.slice(u.length);(!c||p.startsWith(c))&&l.push(p);}return l.sort()},listBlobs(c){let u=`${t}${Mr}`,l=new Set;for(let f=0;f<globalThis.localStorage.length;f++){let g=globalThis.localStorage.key(f);if(!g||!g.startsWith(u))continue;let p=g.slice(u.length),S=p.indexOf(":"),y=S===-1?p:p.slice(0,S);(!c||y.startsWith(c))&&l.add(y);}return Array.from(l).sort()},config:{get(c){return o()[c]??null},set(c,u){let l=o();u==null?delete l[c]:l[c]=u,s(l);}}}}function ve(t){function e(r){return `${t}:kv:${r}`}return {read(r){let n=globalThis.localStorage.getItem(e(r));if(n===null)return null;try{return JSON.parse(n)}catch{return null}},write(r,n){globalThis.localStorage.setItem(e(r),JSON.stringify(n));},delete(r){globalThis.localStorage.removeItem(e(r));},listKeys(r){let n=e(r??""),o=[];for(let s=0;s<globalThis.localStorage.length;s++){let i=globalThis.localStorage.key(s);i!==null&&i.startsWith(n)&&o.push(i.slice(e("").length));}return o}}}function Jr(t){function e(){let n=globalThis.localStorage.getItem(t);if(!n)return [];try{return JSON.parse(n)}catch{return []}}function r(n){globalThis.localStorage.setItem(t,JSON.stringify(n));}return {readAllEntries(){return e()},appendEntry(n){let o=e();o.push(n),r(o);},generateId(){return globalThis.crypto.randomUUID()}}}function Zn(){let t=false;return {tryAcquire(){return t?null:(t=true,()=>{t=false;})}}}function Qn(t){return String(t).replace(/[^a-zA-Z0-9_-]/g,"_")}function to(t){function e(){let n=globalThis.localStorage.getItem(t);if(!n)return [];try{return JSON.parse(n)}catch{return []}}function r(n){globalThis.localStorage.setItem(t,JSON.stringify(n));}return {append(n){let o={id:globalThis.crypto.randomUUID(),payload:n},s=e();return s.push(o),r(s),o},readAll(){return e()},readAfter(n){let o=e();if(!n)return {entries:o,newCursor:o.length>0?o[o.length-1].id:null};let s=o.findIndex(c=>c.id===n),i=s===-1?o:o.slice(s+1);return {entries:i,newCursor:i.length>0?i[i.length-1].id:n}},clear(){globalThis.localStorage.removeItem(t);}}}function Hr(t){return $r(e=>to(`${t}:chat:journal:${Qn(e)}`),ve(`${t}:chat`))}var Vr=new Map;function Ae(t){let e=Vr.get(t);if(!e){let r=new Set;e={publish(n){for(let o of r)o(n);},subscribe(n){return r.add(n),()=>{r.delete(n);}}},Vr.set(t,e);}return e}function Kr(){return {async subscribe(t,e){return t.kind!=="in-memory-bus"?(console.warn(`[in-memory-transport] unsupported kind: ${t.kind}`),()=>{}):Ae(t.value).subscribe(n=>{let o=n;if(o&&o.kind==="notification-batch"&&Array.isArray(o.notifications)){for(let s of o.notifications)e(s);return}e(n);})}}}function zr(t,e){let r=e?.callbackBaseUrl?{meta:"board-live-cards",howToRun:"http:post",whatToRun:e.callbackBaseUrl}:{meta:"board-live-cards",howToRun:"in-browser",whatToRun:ot({kind:"in-browser",value:t})},n=new Map,o=new Map,s=Zn();return {kvStorage:i=>ve(`${t}:${i}`),blobStorage:i=>we(i?`${t}:${i}`:t),scratchStorage:()=>qe(`${t}:scratch`),scratchStorageForRef:i=>qe(St(i).value),archiveFactory:()=>Me(`${t}:archive`),archiveFactoryForRef:i=>Me(St(i).value),journalAdapter:()=>Jr(`${t}:journal`),lock:s,selfRef:r,async dispatchExecution(i,c){if(i.howToRun==="http:post")try{let u=i.whatToRun,l=typeof u=="object"?u.value:St(u).value,f=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});return f.ok?{dispatched:!0}:{dispatched:!1,error:`HTTP ${f.status}: ${f.statusText}`}}catch(u){return {dispatched:false,error:u instanceof Error?u.message:String(u)}}if(i.howToRun==="http:get")try{let u=i.whatToRun,l=typeof u=="object"?u.value:St(u).value,f=new URLSearchParams(Object.entries(c).filter(([,S])=>S!=null).map(([S,y])=>[S,String(y)])),g=`${l}?${f.toString()}`,p=await fetch(g);return p.ok?{dispatched:!0}:{dispatched:!1,error:`HTTP ${p.status}: ${p.statusText}`}}catch(u){return {dispatched:false,error:u instanceof Error?u.message:String(u)}}if(i.howToRun==="in-browser"){let u=i.whatToRun,l=typeof u=="object"?u.value:St(u).value,f=n.get(l);return f?f(i,c):{dispatched:false,error:`No in-browser handler registered for: ${l}`}}return {dispatched:false,error:`Browser adapter: unsupported dispatch kind (got: ${i.howToRun})`}},resolveBlob(i){if(i.kind==="in-memory"){let l=o.get(i.value);if(l==null)throw new Error(`resolveBlob: in-memory blob not found: ${ot(i)}`);return l}let u=we(t).read(i.value);if(u===null)throw new Error(`resolveBlob: blob not found: ${ot(i)}`);return u},hashFn:Gr,genId:()=>globalThis.crypto.randomUUID().replace(/-/g,""),kvStorageForRef:i=>ve(St(i).value),publishBoardChangeNotifications(i){if(!e?.notifyChannel||i.length===0)return;Ae(e.notifyChannel).publish({kind:"notification-batch",notifications:i});},onWarn:e?.onWarn,registerHandler(i,c){n.set(i,c);},writeMemoryBlob(i,c){return o.set(i,c),ot({kind:"in-memory",value:i})}}}function Wr(t){return t==="running"||t==="in-progress"?"loading":t==="failed"?"error":"fresh"}function eo(t,e){let r=e&&typeof e=="object"&&!Array.isArray(e)?e:{};return {schema_version:r.schema_version||"v1",card_id:typeof r.card_id=="string"?r.card_id:t,card_data:r.card_data&&typeof r.card_data=="object"&&!Array.isArray(r.card_data)?structuredClone(r.card_data):{},computed_values:r.computed_values&&typeof r.computed_values=="object"&&!Array.isArray(r.computed_values)?structuredClone(r.computed_values):{}}}function te(t,e){if(!t||typeof t!="object")throw new Error("payload must be an object");if(!e)throw new Error("cardId is required");let n=(Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).find(R=>R.id===e);if(!n)throw new Error(`cardDefinitions has no entry with id ${e}`);let o=t.statusSnapshot&&typeof t.statusSnapshot=="object"?t.statusSnapshot:{},s=t.cardRuntimeById&&typeof t.cardRuntimeById=="object"?t.cardRuntimeById:{},i=t.dataObjectsByToken&&typeof t.dataObjectsByToken=="object"?t.dataObjectsByToken:{},u=(Array.isArray(o.cards)?o.cards:[]).find(R=>R.name===e),l=structuredClone(n),f=eo(e,s[e]),p={...l.card_data&&typeof l.card_data=="object"&&!Array.isArray(l.card_data)?l.card_data:{},...f.card_data||{},status:Wr(u?.status),lastRun:u?.runtime?.last_transition_at??null};u?.error?.message&&(p.error=u.error.message);let S=u?{task_status:u.status??null,card_status:Wr(u.status),runtime:structuredClone(u.runtime??{}),error:u.error?structuredClone(u.error):null,blocked_by:Array.isArray(u.blocked_by)?structuredClone(u.blocked_by):[],requires_missing:Array.isArray(u.requires_missing)?structuredClone(u.requires_missing):[]}:{task_status:null,card_status:p.status??"fresh",runtime:{last_transition_at:p.lastRun??null},error:p.error?{message:p.error}:null,blocked_by:[],requires_missing:[]},y=Array.isArray(l.requires)?l.requires:[],C={};for(let[R,O]of Object.entries(i))C[R]=structuredClone(O);for(let R of y)Object.prototype.hasOwnProperty.call(C,R)||(C[R]=null);let B=(t.cardChatsByCardId&&typeof t.cardChatsByCardId=="object"?t.cardChatsByCardId:{})[e],F=B?{messages:Array.isArray(B.messages)?B.messages:[],receiving:!!B.receiving,processing:!!B.processing}:null;return {id:e,card:l,card_data:p,requires:C,computed_values:f.computed_values,runtime_state:S,card_chats:F}}function ro(t){if(!t||typeof t!="object")throw new Error("payload must be an object");return (Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).map(r=>te(t,r.id))}function _e(t){return JSON.parse(JSON.stringify(t))}function Ht(t,e){if(t===e)return t;try{if(JSON.stringify(t)===JSON.stringify(e))return t}catch{}return e}function Ct(t,e){if(t===e)return true;try{return JSON.stringify(t)===JSON.stringify(e)}catch{return false}}function no(t){return t==="running"||t==="in-progress"?"loading":t==="failed"?"error":"fresh"}function Xr(t,e,r){let n=t,s=(n&&Array.isArray(n.cardDefinitions)?n.cardDefinitions:[]).map(u=>u.id),i=e&&e.modelsById||{},c={};for(let u of s){let l=r(t,u),f=i[u];if(!f){c[u]=l;continue}let g=l.card_chats!=null?Ht(f.card_chats,l.card_chats??null):f.card_chats??null,p={id:l.id,card:Ht(f.card,l.card),card_data:Ht(f.card_data,l.card_data),requires:Ht(f.requires,l.requires),computed_values:Ht(f.computed_values,l.computed_values),runtime_state:Ht(f.runtime_state,l.runtime_state),card_chats:g};c[u]=p.card===f.card&&p.card_data===f.card_data&&p.requires===f.requires&&p.computed_values===f.computed_values&&p.runtime_state===f.runtime_state&&p.card_chats===f.card_chats?f:p;}return {payload:t,cardIds:s,modelsById:c}}function Yr(t,e,r,n){if(!t||!Array.isArray(e)||e.length===0)return t;let o=t.modelsById,s=t.cardIds,i=false,c=false,u={};for(let f of s){let g=o[f],p=g&&g.requires;if(p&&typeof p=="object")for(let S of Object.keys(p))(u[S]=u[S]||[]).push(f);}function l(){i||(o={...o},i=true);}for(let f of e)if(!(!f||!f.kind)){if(f.kind==="computed_values"){let g=f.cardId,p=o[g];if(!p)continue;let S=f.values||{};if(Ct(p.computed_values,S))continue;l(),o[g]={...p,computed_values:S},c=true;}else if(f.kind==="data_object"){let g=f.key,p=f.payload,S=u[g]||[];for(let y of S){let C=o[y];if(!C)continue;let A=C.requires||{};Ct(A[g],p)||(l(),o[y]={...C,requires:{...A,[g]:p}},c=true);}}else if(f.kind==="card_refreshed"){let g=f.cardId,p=null,S=o[g],y=f.card;if(S&&y&&typeof y=="object"&&!Array.isArray(y)){let C=y,A=C.card_data&&typeof C.card_data=="object"&&!Array.isArray(C.card_data)?C.card_data:S.card_data,B=C.requires&&typeof C.requires=="object"&&!Array.isArray(C.requires)?C.requires:S.requires,F=C.computed_values&&typeof C.computed_values=="object"&&!Array.isArray(C.computed_values)?C.computed_values:S.computed_values,R=C.runtime_state&&typeof C.runtime_state=="object"&&!Array.isArray(C.runtime_state)?C.runtime_state:S.runtime_state;p={...S,card:y,card_data:A,requires:B,computed_values:F,runtime_state:R};}if(!p)try{let C=n();C&&(p=r(C,g));}catch{}if(!p||S&&Ct(S.card,p.card)&&Ct(S.card_data,p.card_data)&&Ct(S.requires,p.requires)&&Ct(S.computed_values,p.computed_values)&&Ct(S.runtime_state,p.runtime_state))continue;l(),o[g]=p,s.includes(g)||(s=[...s,g]),c=true;}else if(f.kind==="card_removed"){let g=f.cardId;if(!o[g])continue;l(),delete o[g],s=s.filter(p=>p!==g),c=true;}else if(f.kind==="card_chats"){let g=f.cardId,p=o[g];if(!p)continue;let S=Array.isArray(f.messages)?f.messages:p.card_chats?.messages??[],y=typeof f.receiving=="boolean"?f.receiving:p.card_chats?.receiving??false,C=typeof f.processing=="boolean"?f.processing:p.card_chats?.processing??false,A={messages:S,receiving:y,processing:C};if(Ct(p.card_chats,A))continue;l(),o[g]={...p,card_chats:A},c=true;}else if(f.kind==="chat_messages"){let g=f.cardId,p=o[g];if(!p)continue;let S=Array.isArray(f.messages)?f.messages:[],y=p.card_chats||{receiving:false,processing:false},C={messages:S,receiving:y.receiving,processing:!!y.processing};if(Ct(p.card_chats,C))continue;l(),o[g]={...p,card_chats:C},c=true;}else if(f.kind==="status"){let g=f.status?.cards??[];for(let p of g){let S=p?.name;if(!S||!o[S])continue;let y=o[S],C=no(p.status),A={...y.card_data||{},status:C,lastRun:p.runtime?.last_transition_at??null,...p.error?.message?{error:p.error.message}:{}};p.error?.message||delete A.error;let B={task_status:p.status??null,card_status:C,runtime:p.runtime?_e(p.runtime):{},error:p.error?_e(p.error):null,blocked_by:Array.isArray(p.blocked_by)?_e(p.blocked_by):[],requires_missing:Array.isArray(p.requires_missing)?_e(p.requires_missing):[]};Ct(y.card_data,A)&&Ct(y.runtime_state,B)||(l(),o[S]={...y,card_data:A,runtime_state:B},c=true);}}}return c?{payload:t.payload,cardIds:s,modelsById:o}:t}function xs(t,e){let r=e?.cards??[],n=e?.onWarn??(()=>{}),o=`${t}:notify`,s=zr(t,{callbackBaseUrl:e?.callbackBaseUrl,notifyChannel:o,onWarn:n}),i=St(ot({kind:"localstorage",value:t})),c=ot({kind:"localstorage",value:`${t}:card-store`}),u=ot({kind:"localstorage",value:`${t}:outputs`}),l=e?.taskExecutor??null,f=e?.chatHandler??null,g=ot({kind:"in-browser",value:`${t}:task-executor`}),p=ot({kind:"in-browser",value:`${t}:chat-handler`});l&&s.registerHandler(g,l),f&&s.registerHandler(p,f);let S={async invoke(E,_){return E.howToRun==="in-browser",s.dispatchExecution(E,_)}},y=e?.taskExecutorRef??(l?{meta:"task-executor",howToRun:"in-browser",whatToRun:g}:void 0),C=e?.chatHandlerRef??(f?{meta:"chat-handler",howToRun:"in-browser",whatToRun:p}:void 0),A=Kr(),B=Hr(t),F=Lr({boardId:t,chatStorage:B,boards:[{label:t,boardAdapter:s,baseRef:i,cardStoreRef:c,outputsStoreRef:u,notifyRef:{kind:"in-memory-bus",value:o},taskExecutorRef:y,chatHandlerRef:C}],invocationAdapter:S,notificationTransport:A,logger:{info:(...E)=>console.log("[board]",...E),warn:(...E)=>{n(String(E[0])),console.warn("[board]",...E);},error:(...E)=>console.error("[board]",...E)}});r.length&&F.cardStore.set({body:r}),e?.onBoardChange&&Ae(o).subscribe(_=>{let I=_;!I||I.kind!=="notification-batch"||!Array.isArray(I.notifications)||I.notifications.length===0||e.onBoardChange?.({notifications:I.notifications});});function R(E,_,I){let P=I?JSON.stringify(I):"",U=new TextEncoder().encode(P),K=false;return {method:E,url:_,headers:{"content-type":"application/json"},on(it,at){},[Symbol.asyncIterator](){let it={async next(){return K?{done:true,value:void 0}:(K=true,{done:false,value:U})},[Symbol.asyncIterator](){return it}};return it}}}function O(){let E=200,_=[];return {res:{writeHead(P){E=P;},write(P){return _.push(typeof P=="string"?P:new TextDecoder().decode(P)),true},end(P){P&&_.push(typeof P=="string"?P:new TextDecoder().decode(P));}},getResult:()=>{let P=_.join(""),U;try{U=JSON.parse(P);}catch{U=P;}return {status:E,body:U}}}}let j=F.apiBasePath;return {async bootstrap(){let E=R("GET",`${j}/bootstrap`),{res:_}=O();await F.handleRuntimeApi(E,_,new URL(`http://localhost${j}/bootstrap`));},getState(){return F.buildPublishedRuntimePayload()},async patchCard(E,_){let I=`${j}/cards/${encodeURIComponent(E)}`,P=R("PATCH",I,_),{res:U}=O();await F.handleRuntimeApi(P,U,new URL(`http://localhost${I}`));},async applyCardAction(E,_,I){let P=`${j}/cards/${encodeURIComponent(E)}/actions`,U=R("POST",P,{actionType:_,payload:I}),{res:K}=O();await F.handleRuntimeApi(U,K,new URL(`http://localhost${P}`));},readChatRecords(E){let _=`${j}/cards/${encodeURIComponent(E)}/chats`,I=R("GET",_),P=O();F.handleRuntimeApi(I,P.res,new URL(`http://localhost${_}`));let K=P.getResult().body;return Array.isArray(K?.messages)?K.messages:[]},clearChatRecords(E){F.clearChatRecords(E);},writeMemoryBlob(E,_){return s.writeMemoryBlob(E,_)},reportSourceFetched(E,_){F.reportSourceFetched(E,_);},reportSourceFetchFailure(E,_){F.reportSourceFetchFailure(E,_);},get runtime(){return F}}}function Es(t,e){return Xr(t,e,te)}function Os(t,e,r){return Yr(t,e,te,r)}
|
|
6
|
+
`);}catch{}},15e3);a.on("close",()=>{clearInterval(q),Ft(m,d);});}async function T(a,d,m){let k=a.method||"GET",b=m,w=b.pathname;try{if(k==="GET"&&w===`${e}/init-board`)return await At(),U(d,200,Lt()),!0;if(k==="GET"&&w===`${e}/sse`){await At();let H=String(b.searchParams.get("clientId")||"").trim();if(!H)return U(d,400,{error:"clientId query param is required for SSE"}),!0;Be(a,d,H);for(let K=0;K<j.length;K++)Ct(j[K]),Dt(j[K],K);return !0}if(k==="GET"&&w===`${e}/board-status`)return U(d,200,Lt()),!0;let N=w.match(new RegExp(`^${vt(e)}/cards/([^/]+)$`));if(k==="GET"&&N){await ft();let H=decodeURIComponent(N[1]),K=L(H);return K?(U(d,200,K),!0):(U(d,404,{error:`card not found: ${H}`}),!0)}if(k==="PATCH"&&N){await ft();let H=decodeURIComponent(N[1]),K=await nt(a);return Te(H,K),U(d,200,{ok:!0}),!0}let q=w.match(new RegExp(`^${vt(e)}/cards/([^/]+)/retrigger$`));if(k==="POST"&&q){await ft();let H=decodeURIComponent(q[1]);return ee(H),U(d,200,{ok:!0}),!0}let J=w.match(new RegExp(`^${vt(e)}/cards/([^/]+)/actions$`));if(k==="POST"&&J){await ft();let H=decodeURIComponent(J[1]),K=Date.now(),tt=new Date(K).toISOString(),dt=await nt(a),lt=dt?.actionType;if(lt==="chat-send"&&!W(H)){let Ot=Date.now();return U(d,409,{error:`chat handler is not configured for card: ${H}`,requestReceivedAt:tt,requestReceivedAtMs:K,responseSentAt:new Date(Ot).toISOString(),responseSentAtMs:Ot,responseStatus:409}),!0}Q(H,lt,dt?.payload);let ht=Date.now();return U(d,200,{ok:!0,requestReceivedAt:tt,requestReceivedAtMs:K,responseSentAt:new Date(ht).toISOString(),responseSentAtMs:ht,responseStatus:200}),!0}let G=w.match(new RegExp(`^${vt(e)}/cards/([^/]+)/chats$`));if(k==="GET"&&G){await ft();let H=decodeURIComponent(G[1]);return U(d,200,{ok:!0,messages:x(H)}),!0}if(k==="POST"&&G){await ft();let H=decodeURIComponent(G[1]),K=await nt(a),tt=typeof K?.role=="string"?K.role:"assistant",dt=typeof K?.text=="string"?K.text:"",lt=Array.isArray(K?.files)?K.files:[],ht=K?.done===!0,Ot=c.append(H,tt,dt,lt);return ht&&c.setProcessing(H,!1),re(H,!ht),U(d,200,{ok:!0,id:Ot}),!0}let X=w.match(new RegExp(`^${vt(e)}/cards/([^/]+)/chats/subscribe-sse$`));if(k==="POST"&&X){await ft();let H=decodeURIComponent(X[1]),K=await nt(a),tt=typeof K?.clientId=="string"?K.clientId.trim():"";return tt?oe(tt,H)?(U(d,200,{ok:!0,clientId:tt,cardId:H,subscribed:!0}),!0):(U(d,404,{error:`SSE client not connected: ${tt}`}),!0):(U(d,400,{error:"clientId is required"}),!0)}let gt=w.match(new RegExp(`^${vt(e)}/cards/([^/]+)/chats/unsubscribe-sse$`));if(k==="POST"&>){await ft();let H=decodeURIComponent(gt[1]),K=await nt(a),tt=typeof K?.clientId=="string"?K.clientId.trim():"";return tt?Oe(tt,H)?(U(d,200,{ok:!0,clientId:tt,cardId:H,subscribed:!1}),!0):(U(d,404,{error:`SSE client not connected: ${tt}`}),!0):(U(d,400,{error:"clientId is required"}),!0)}let se=w.match(new RegExp(`^${vt(e)}/watch-channel/([^/]+)/(subscribe|unsubscribe)-sse$`));if(k==="POST"&&se){await ft();let H=decodeURIComponent(se[1]),K=se[2]==="subscribe",tt=await nt(a),dt=typeof tt?.clientId=="string"?tt.clientId.trim():"";return dt?(qt(d,dt,H,{},K),!0):(U(d,400,{error:"clientId is required"}),!0)}let Xt=w.match(new RegExp(`^${vt(e)}/cards/([^/]+)/watch-channel/([^/]+)/(subscribe|unsubscribe)-sse$`));if(k==="POST"&&Xt){await ft();let H=decodeURIComponent(Xt[1]),K=decodeURIComponent(Xt[2]),tt=Xt[3]==="subscribe",dt=await nt(a),lt=typeof dt?.clientId=="string"?dt.clientId.trim():"";return lt?(qt(d,lt,K,{cardId:H},tt),!0):(U(d,400,{error:"clientId is required"}),!0)}let ae=w.match(new RegExp(`^${vt(e)}/cards/([^/]+)/files$`));if(k==="POST"&&ae){await ft();let H=decodeURIComponent(ae[1]),K=String(b.searchParams.get("inChat")||"").toLowerCase()==="true",tt=a.headers["x-file-name"],dt=String(a.headers["content-type"]||"application/octet-stream"),lt=Array.isArray(tt)?tt[0]:tt,ht=lt?decodeURIComponent(String(lt)):"upload.bin",Ot=await xt(a);if(!Ot.length)return U(d,400,{error:"Empty upload body"}),!0;let yt=V(H,ht,dt,Ot),Jt=null;if(zt(H,kt=>{let ie=new Date().toISOString(),ce=kt.card_data&&typeof kt.card_data=="object"?kt.card_data:{};kt.card_data=ce;let Zr=M().normalizeIncoming([{name:yt.name,stored_name:yt.stored_name,size:yt.size,mime_type:yt.mime_type,uploaded_at:yt.uploaded_at||ie,chat:K}],ie);return Jt=M().merge(ce,Zr).findIndex(Qr=>Qr.stored_name===yt.stored_name),kt}),K){let kt=typeof Jt=="number"&&Jt>=0?` #${Jt}`:"";h(H,"system",`file uploaded: ${yt.name} as ${yt.stored_name}${kt}`,[]);}return U(d,200,{ok:!0,file:yt}),!0}let jt=w.match(new RegExp(`^${vt(e)}/cards/([^/]+)/files/(\\d+)$`));if(k==="GET"&&jt){let H=decodeURIComponent(jt[1]),K=parseInt(jt[2],10),tt=b.searchParams.get("sn"),dt=L(H);if(!dt)return U(d,404,{error:"Card not found"}),!0;let lt=M().resolve(dt.card_data,K,tt);if(!lt.ok&<.reason==="stale_reference")return U(d,409,{error:"File reference is stale. Refresh and try again."}),!0;if(!lt.ok)return U(d,404,{error:"File not found"}),!0;let ht=lt.file,Ot=z(H),yt=I(H),Jt=`${Ot}/${ht.stored_name}`,kt=yt.files?yt.files.getBytes(Jt):null;if(!kt)return U(d,404,{error:"File not found"}),!0;let ie=ht.name||ht.stored_name,ce=ht.mime_type||"application/octet-stream";return d.writeHead(200,{"Content-Type":ce,"Content-Disposition":`attachment; filename="${ie}"`,"Content-Length":kt.length}),d.end(kt),!0}return !1}catch(N){let q=N?.statusCode||500;return U(d,q,{error:String(N?.message||N)}),true}}return {get apiBasePath(){return e},get corsHeaders(){return r},handleRuntimeApi:T,buildPublishedRuntimePayload:Lt,clearChatRecords:v,reportSourceFetched(a,d){let m=j[0];return m?m.board.sourceDataFetched({params:{token:a,ref:d}}):{status:"fail",error:"no board context"}},reportSourceFetchFailure(a,d){let m=j[0];return m?m.board.sourceDataFetchFailure({params:{token:a,reason:d}}):{status:"fail",error:"no board context"}},get cardStore(){return j[0]?.cardStore??{set(){return {status:"fail",error:"no board context"}}}}}}function vt(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Le(t){if(t==null||typeof t!="object")return JSON.stringify(t);if(Array.isArray(t))return `[${t.map(Le).join(",")}]`;let e=t;return `{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${Le(e[n])}`).join(",")}}`}function Ce(t,e){let r=e>>>0;for(let n=0;n<t.length;n++)r^=t.charCodeAt(n),r=Math.imul(r,16777619)>>>0;return r}function Gr(t){let e=Le(t),r=Ce(e,2166136261),n=Ce(e,3735928559),o=Ce(e,19088743),s=Ce(e,4277009102);return [r,n,o,s].map(i=>i.toString(16).padStart(8,"0")).join("")}function we(t){function e(s){return `${t}:blob:${s}`}let r=new TextEncoder;function n(s){if(typeof btoa=="function"){let i="";for(let c=0;c<s.length;c++)i+=String.fromCharCode(s[c]);return btoa(i)}return ""}function o(s){if(typeof atob=="function"){let i=atob(s),c=new Uint8Array(i.length);for(let u=0;u<i.length;u++)c[u]=i.charCodeAt(u);return c}return new Uint8Array}return {read(s){return globalThis.localStorage.getItem(e(s))},write(s,i){globalThis.localStorage.setItem(e(s),i);},exists(s){return globalThis.localStorage.getItem(e(s))!==null},remove(s){globalThis.localStorage.removeItem(e(s));},readBytes(s){let i=globalThis.localStorage.getItem(e(s));if(i===null)return null;try{let c=JSON.parse(i);if(c&&c.__kind==="bytes-b64"&&typeof c.data=="string")return o(c.data)}catch{}return r.encode(i)},writeBytes(s,i){let c=JSON.stringify({__kind:"bytes-b64",data:n(i)});globalThis.localStorage.setItem(e(s),c);},listKeys(s){let i=e(s??""),c=[];for(let u=0;u<globalThis.localStorage.length;u++){let l=globalThis.localStorage.key(u);l&&l.startsWith(i)&&c.push(l.slice(e("").length));}return c.sort()},stat(s){let i=globalThis.localStorage.getItem(e(s));if(i===null)return null;let c=r.encode(i).byteLength;try{let u=JSON.parse(i);u&&u.__kind==="bytes-b64"&&typeof u.data=="string"&&(c=o(u.data).byteLength);}catch{}return {key:s,size:c}}}}var Vn=":scratch-marker",Hn=":scratch-config",be=":scratch:",Kn=1440*60*1e3,zn=720*60*1e3,Wn=200;function qr(t,e){if(!t)return e;let r=t.replace(/[^A-Za-z0-9._-]/g,"_");return r.length>0?r:e}function qe(t){let e=`${t}${Vn}`,r=`${t}${Hn}`,n=g=>`${t}${be}${g}`,o=g=>`${t}${be}${g}:__ts`,s=globalThis.localStorage.getItem(e)===null;if(s)try{globalThis.localStorage.setItem(e,`scratch-store
|
|
7
|
+
${new Date().toISOString()}`);}catch{}function i(){let g=globalThis.localStorage.getItem(r);if(g===null)return {};try{let p=JSON.parse(g);return p&&typeof p=="object"&&!Array.isArray(p)?p:{}}catch{return {}}}function c(g){try{globalThis.localStorage.setItem(r,JSON.stringify(g));}catch{}}if(s){let g=i();typeof g["retention.lastSweepAt"]!="number"&&(g["retention.lastSweepAt"]=Date.now(),c(g));}function u(){if(globalThis.localStorage.getItem(e)===null)return;let g=i(),p=typeof g["retention.maxAgeMs"]=="number"?g["retention.maxAgeMs"]:Kn,S=typeof g["retention.sweepIntervalMs"]=="number"?g["retention.sweepIntervalMs"]:zn;if(p<=0||S<=0)return;let y=typeof g["retention.lastSweepAt"]=="number"?g["retention.lastSweepAt"]:0,R=Date.now();if(R-y<S)return;g["retention.lastSweepAt"]=R,c(g);let A=R,B=`${t}${be}`,F=[];for(let C=0;C<globalThis.localStorage.length;C++){let O=globalThis.localStorage.key(C);O&&O.startsWith(B)&&!O.endsWith(":__ts")&&F.push(O);}for(let C of F){if(Date.now()-A>Wn)break;let O=globalThis.localStorage.getItem(`${C}:__ts`),j=O===null?0:Number(O);if(Number.isFinite(j)&&j>0&&R-j>p){try{globalThis.localStorage.removeItem(C);}catch{}try{globalThis.localStorage.removeItem(`${C}:__ts`);}catch{}}}}function l(g,p){let S=qr(g,"scratch"),y=qr(p,".json"),R=y.startsWith(".")?y:`.${y}`,A=Math.random().toString(36).slice(2,10);return `${S}-${Date.now()}-${A}${R}`}function f(g,p){globalThis.localStorage.setItem(n(g),p),globalThis.localStorage.setItem(o(g),String(Date.now()));}return {read(g){return globalThis.localStorage.getItem(n(g))},write(g,p){f(g,p);try{u();}catch{}},exists(g){return globalThis.localStorage.getItem(n(g))!==null},remove(g){try{globalThis.localStorage.removeItem(n(g));}catch{}try{globalThis.localStorage.removeItem(o(g));}catch{}},readBytes(g){let p=globalThis.localStorage.getItem(n(g));return p===null?null:new TextEncoder().encode(p)},writeBytes(g,p){let S="";for(let y=0;y<p.length;y++)S+=String.fromCharCode(p[y]);f(g,S);try{u();}catch{}},stat(g){let p=globalThis.localStorage.getItem(n(g));if(p===null)return null;let S=globalThis.localStorage.getItem(o(g)),y=S===null?null:Number(S);return {key:g,size:new TextEncoder().encode(p).byteLength,updatedAt:y!==null&&Number.isFinite(y)?new Date(y).toISOString():void 0}},listKeys(g){let p=`${t}${be}`,S=[];for(let y=0;y<globalThis.localStorage.length;y++){let R=globalThis.localStorage.key(y);if(R&&R.startsWith(p)&&!R.endsWith(":__ts")){let A=R.slice(p.length);(!g||A.startsWith(g))&&S.push(A);}}return S.sort()},getUniqueKey(g,p){return l(g,p)},create(g,p,S){let y=l(p,S);f(y,g);try{u();}catch{}return y},keyRef(g){return {kind:"local-storage-scratch",value:g,extra:{prefix:t}}},config:{get(g){return i()[g]??null},set(g,p){let S=i();p==null?delete S[g]:S[g]=p,c(S);}}}}var Xn=":archive-marker",Yn=":archive-config",De=":archive:stream:",Mr=":archive:blob:";function Ur(t){let e=t.replace(/[^A-Za-z0-9._-]/g,"_");if(!e)throw new Error("Archive segment name cannot be empty after sanitization");return e}function Me(t){let e=`${t}${Xn}`,r=`${t}${Yn}`,n=c=>`${t}${De}${c}`;if(globalThis.localStorage.getItem(e)===null)try{globalThis.localStorage.setItem(e,`archive-store
|
|
8
|
+
${new Date().toISOString()}`);}catch{}function o(){let c=globalThis.localStorage.getItem(r);if(c===null)return {};try{let u=JSON.parse(c);return u&&typeof u=="object"&&!Array.isArray(u)?u:{}}catch{return {}}}function s(c){try{globalThis.localStorage.setItem(r,JSON.stringify(c));}catch{}}function i(){if(globalThis.localStorage.getItem(e)===null)return;let c=o(),u=typeof c["retention.maxAgeMs"]=="number"?c["retention.maxAgeMs"]:0,l=typeof c["retention.sweepIntervalMs"]=="number"?c["retention.sweepIntervalMs"]:0;if(u<=0||l<=0)return;let f=typeof c["retention.lastSweepAt"]=="number"?c["retention.lastSweepAt"]:0,g=Date.now();if(g-f<l)return;c["retention.lastSweepAt"]=g,s(c);let p=`${t}${De}`;for(let S=0;S<globalThis.localStorage.length;S++){let y=globalThis.localStorage.key(S);if(!y||!y.startsWith(p))continue;let R=globalThis.localStorage.getItem(y);if(R)try{let A=JSON.parse(R),B=A.filter(F=>typeof F.__ts!="number"||g-F.__ts<=u);B.length!==A.length&&globalThis.localStorage.setItem(y,JSON.stringify(B));}catch{}}}return {stream(c){let u=Ur(c),l=n(u);function f(){let p=globalThis.localStorage.getItem(l);if(!p)return [];try{return JSON.parse(p)}catch{return []}}function g(p){try{globalThis.localStorage.setItem(l,JSON.stringify(p));}catch{}}return {append(p){let S={id:globalThis.crypto.randomUUID(),payload:p,__ts:Date.now()},y=f();y.push(S),g(y);try{i();}catch{}return {id:S.id,payload:S.payload}},readAll(){return f().map(p=>({id:p.id,payload:p.payload}))},readAfter(p){let S=f();if(!p){let B=S.map(F=>({id:F.id,payload:F.payload}));return {entries:B,newCursor:B.length>0?B[B.length-1].id:null}}let y=S.findIndex(B=>B.id===p),A=(y===-1?S:S.slice(y+1)).map(B=>({id:B.id,payload:B.payload}));return {entries:A,newCursor:A.length>0?A[A.length-1].id:p}},clear(){try{globalThis.localStorage.removeItem(l);}catch{}}}},blob(c){let u=Ur(c),l=we(`${t}${Mr}${u}`);return {read:f=>l.read(f),write:(f,g)=>{l.write(f,g);try{i();}catch{}},exists:f=>l.exists(f),remove:f=>l.remove(f),readBytes:l.readBytes?f=>l.readBytes(f):void 0,writeBytes:l.writeBytes?(f,g)=>{l.writeBytes(f,g);try{i();}catch{}}:void 0,listKeys:f=>l.listKeys(f),stat:l.stat?f=>l.stat(f):void 0}},listStreams(c){let u=`${t}${De}`,l=[];for(let f=0;f<globalThis.localStorage.length;f++){let g=globalThis.localStorage.key(f);if(!g||!g.startsWith(u))continue;let p=g.slice(u.length);(!c||p.startsWith(c))&&l.push(p);}return l.sort()},listBlobs(c){let u=`${t}${Mr}`,l=new Set;for(let f=0;f<globalThis.localStorage.length;f++){let g=globalThis.localStorage.key(f);if(!g||!g.startsWith(u))continue;let p=g.slice(u.length),S=p.indexOf(":"),y=S===-1?p:p.slice(0,S);(!c||y.startsWith(c))&&l.add(y);}return Array.from(l).sort()},config:{get(c){return o()[c]??null},set(c,u){let l=o();u==null?delete l[c]:l[c]=u,s(l);}}}}function ve(t){function e(r){return `${t}:kv:${r}`}return {read(r){let n=globalThis.localStorage.getItem(e(r));if(n===null)return null;try{return JSON.parse(n)}catch{return null}},write(r,n){globalThis.localStorage.setItem(e(r),JSON.stringify(n));},delete(r){globalThis.localStorage.removeItem(e(r));},listKeys(r){let n=e(r??""),o=[];for(let s=0;s<globalThis.localStorage.length;s++){let i=globalThis.localStorage.key(s);i!==null&&i.startsWith(n)&&o.push(i.slice(e("").length));}return o}}}function Jr(t){function e(){let n=globalThis.localStorage.getItem(t);if(!n)return [];try{return JSON.parse(n)}catch{return []}}function r(n){globalThis.localStorage.setItem(t,JSON.stringify(n));}return {readAllEntries(){return e()},appendEntry(n){let o=e();o.push(n),r(o);},generateId(){return globalThis.crypto.randomUUID()}}}function Zn(){let t=false;return {tryAcquire(){return t?null:(t=true,()=>{t=false;})}}}function Qn(t){return String(t).replace(/[^a-zA-Z0-9_-]/g,"_")}function to(t){function e(){let n=globalThis.localStorage.getItem(t);if(!n)return [];try{return JSON.parse(n)}catch{return []}}function r(n){globalThis.localStorage.setItem(t,JSON.stringify(n));}return {append(n){let o={id:globalThis.crypto.randomUUID(),payload:n},s=e();return s.push(o),r(s),o},readAll(){return e()},readAfter(n){let o=e();if(!n)return {entries:o,newCursor:o.length>0?o[o.length-1].id:null};let s=o.findIndex(c=>c.id===n),i=s===-1?o:o.slice(s+1);return {entries:i,newCursor:i.length>0?i[i.length-1].id:n}},clear(){globalThis.localStorage.removeItem(t);}}}function Hr(t){return $r(e=>to(`${t}:chat:journal:${Qn(e)}`),ve(`${t}:chat`))}var Vr=new Map;function Ae(t){let e=Vr.get(t);if(!e){let r=new Set;e={publish(n){for(let o of r)o(n);},subscribe(n){return r.add(n),()=>{r.delete(n);}}},Vr.set(t,e);}return e}function Kr(){return {async subscribe(t,e){return t.kind!=="in-memory-bus"?(console.warn(`[in-memory-transport] unsupported kind: ${t.kind}`),()=>{}):Ae(t.value).subscribe(n=>{let o=n;if(o&&o.kind==="notification-batch"&&Array.isArray(o.notifications)){for(let s of o.notifications)e(s);return}e(n);})}}}function zr(t,e){let r=e?.callbackBaseUrl?{meta:"board-live-cards",howToRun:"http:post",whatToRun:e.callbackBaseUrl}:{meta:"board-live-cards",howToRun:"in-browser",whatToRun:ot({kind:"in-browser",value:t})},n=new Map,o=new Map,s=Zn();return {kvStorage:i=>ve(`${t}:${i}`),blobStorage:i=>we(i?`${t}:${i}`:t),scratchStorage:()=>qe(`${t}:scratch`),scratchStorageForRef:i=>qe(St(i).value),archiveFactory:()=>Me(`${t}:archive`),archiveFactoryForRef:i=>Me(St(i).value),journalAdapter:()=>Jr(`${t}:journal`),lock:s,selfRef:r,async dispatchExecution(i,c){if(i.howToRun==="http:post")try{let u=i.whatToRun,l=typeof u=="object"?u.value:St(u).value,f=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});return f.ok?{dispatched:!0}:{dispatched:!1,error:`HTTP ${f.status}: ${f.statusText}`}}catch(u){return {dispatched:false,error:u instanceof Error?u.message:String(u)}}if(i.howToRun==="http:get")try{let u=i.whatToRun,l=typeof u=="object"?u.value:St(u).value,f=new URLSearchParams(Object.entries(c).filter(([,S])=>S!=null).map(([S,y])=>[S,String(y)])),g=`${l}?${f.toString()}`,p=await fetch(g);return p.ok?{dispatched:!0}:{dispatched:!1,error:`HTTP ${p.status}: ${p.statusText}`}}catch(u){return {dispatched:false,error:u instanceof Error?u.message:String(u)}}if(i.howToRun==="in-browser"){let u=i.whatToRun,l=typeof u=="object"?u.value:St(u).value,f=n.get(l);return f?f(i,c):{dispatched:false,error:`No in-browser handler registered for: ${l}`}}return {dispatched:false,error:`Browser adapter: unsupported dispatch kind (got: ${i.howToRun})`}},resolveBlob(i){if(i.kind==="in-memory"){let l=o.get(i.value);if(l==null)throw new Error(`resolveBlob: in-memory blob not found: ${ot(i)}`);return l}let u=we(t).read(i.value);if(u===null)throw new Error(`resolveBlob: blob not found: ${ot(i)}`);return u},hashFn:Gr,genId:()=>globalThis.crypto.randomUUID().replace(/-/g,""),kvStorageForRef:i=>ve(St(i).value),publishBoardChangeNotifications(i){if(!e?.notifyChannel||i.length===0)return;Ae(e.notifyChannel).publish({kind:"notification-batch",notifications:i});},onWarn:e?.onWarn,registerHandler(i,c){n.set(i,c);},writeMemoryBlob(i,c){return o.set(i,c),ot({kind:"in-memory",value:i})}}}function Wr(t){return t==="running"||t==="in-progress"?"loading":t==="failed"?"error":"fresh"}function eo(t,e){let r=e&&typeof e=="object"&&!Array.isArray(e)?e:{};return {schema_version:r.schema_version||"v1",card_id:typeof r.card_id=="string"?r.card_id:t,card_data:r.card_data&&typeof r.card_data=="object"&&!Array.isArray(r.card_data)?structuredClone(r.card_data):{},computed_values:r.computed_values&&typeof r.computed_values=="object"&&!Array.isArray(r.computed_values)?structuredClone(r.computed_values):{}}}function te(t,e){if(!t||typeof t!="object")throw new Error("payload must be an object");if(!e)throw new Error("cardId is required");let n=(Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).find(C=>C.id===e);if(!n)throw new Error(`cardDefinitions has no entry with id ${e}`);let o=t.statusSnapshot&&typeof t.statusSnapshot=="object"?t.statusSnapshot:{},s=t.cardRuntimeById&&typeof t.cardRuntimeById=="object"?t.cardRuntimeById:{},i=t.dataObjectsByToken&&typeof t.dataObjectsByToken=="object"?t.dataObjectsByToken:{},u=(Array.isArray(o.cards)?o.cards:[]).find(C=>C.name===e),l=structuredClone(n),f=eo(e,s[e]),p={...l.card_data&&typeof l.card_data=="object"&&!Array.isArray(l.card_data)?l.card_data:{},...f.card_data||{},status:Wr(u?.status),lastRun:u?.runtime?.last_transition_at??null};u?.error?.message&&(p.error=u.error.message);let S=u?{task_status:u.status??null,card_status:Wr(u.status),runtime:structuredClone(u.runtime??{}),error:u.error?structuredClone(u.error):null,blocked_by:Array.isArray(u.blocked_by)?structuredClone(u.blocked_by):[],requires_missing:Array.isArray(u.requires_missing)?structuredClone(u.requires_missing):[]}:{task_status:null,card_status:p.status??"fresh",runtime:{last_transition_at:p.lastRun??null},error:p.error?{message:p.error}:null,blocked_by:[],requires_missing:[]},y=Array.isArray(l.requires)?l.requires:[],R={};for(let[C,O]of Object.entries(i))R[C]=structuredClone(O);for(let C of y)Object.prototype.hasOwnProperty.call(R,C)||(R[C]=null);let B=(t.cardChatsByCardId&&typeof t.cardChatsByCardId=="object"?t.cardChatsByCardId:{})[e],F=B?{messages:Array.isArray(B.messages)?B.messages:[],receiving:!!B.receiving,processing:!!B.processing}:null;return {id:e,card:l,card_data:p,requires:R,computed_values:f.computed_values,runtime_state:S,card_chats:F}}function ro(t){if(!t||typeof t!="object")throw new Error("payload must be an object");return (Array.isArray(t.cardDefinitions)?t.cardDefinitions:[]).map(r=>te(t,r.id))}function _e(t){return JSON.parse(JSON.stringify(t))}function Ht(t,e){if(t===e)return t;try{if(JSON.stringify(t)===JSON.stringify(e))return t}catch{}return e}function Rt(t,e){if(t===e)return true;try{return JSON.stringify(t)===JSON.stringify(e)}catch{return false}}function no(t){return t==="running"||t==="in-progress"?"loading":t==="failed"?"error":"fresh"}function Xr(t,e,r){let n=t,s=(n&&Array.isArray(n.cardDefinitions)?n.cardDefinitions:[]).map(u=>u.id),i=e&&e.modelsById||{},c={};for(let u of s){let l=r(t,u),f=i[u];if(!f){c[u]=l;continue}let g=l.card_chats!=null?Ht(f.card_chats,l.card_chats??null):f.card_chats??null,p={id:l.id,card:Ht(f.card,l.card),card_data:Ht(f.card_data,l.card_data),requires:Ht(f.requires,l.requires),computed_values:Ht(f.computed_values,l.computed_values),runtime_state:Ht(f.runtime_state,l.runtime_state),card_chats:g};c[u]=p.card===f.card&&p.card_data===f.card_data&&p.requires===f.requires&&p.computed_values===f.computed_values&&p.runtime_state===f.runtime_state&&p.card_chats===f.card_chats?f:p;}return {payload:t,cardIds:s,modelsById:c}}function Yr(t,e,r,n){if(!t||!Array.isArray(e)||e.length===0)return t;let o=t.modelsById,s=t.cardIds,i=false,c=false,u={};for(let f of s){let g=o[f],p=g&&g.requires;if(p&&typeof p=="object")for(let S of Object.keys(p))(u[S]=u[S]||[]).push(f);}function l(){i||(o={...o},i=true);}for(let f of e)if(!(!f||!f.kind)){if(f.kind==="computed_values"){let g=f.cardId,p=o[g];if(!p)continue;let S=f.values||{};if(Rt(p.computed_values,S))continue;l(),o[g]={...p,computed_values:S},c=true;}else if(f.kind==="data_object"){let g=f.key,p=f.payload,S=u[g]||[];for(let y of S){let R=o[y];if(!R)continue;let A=R.requires||{};Rt(A[g],p)||(l(),o[y]={...R,requires:{...A,[g]:p}},c=true);}}else if(f.kind==="card_refreshed"){let g=f.cardId,p=null,S=o[g],y=f.card;if(S&&y&&typeof y=="object"&&!Array.isArray(y)){let R=y,A=R.card_data&&typeof R.card_data=="object"&&!Array.isArray(R.card_data)?R.card_data:S.card_data,B=R.requires&&typeof R.requires=="object"&&!Array.isArray(R.requires)?R.requires:S.requires,F=R.computed_values&&typeof R.computed_values=="object"&&!Array.isArray(R.computed_values)?R.computed_values:S.computed_values,C=R.runtime_state&&typeof R.runtime_state=="object"&&!Array.isArray(R.runtime_state)?R.runtime_state:S.runtime_state;p={...S,card:y,card_data:A,requires:B,computed_values:F,runtime_state:C};}if(!p)try{let R=n();R&&(p=r(R,g));}catch{}if(!p||S&&Rt(S.card,p.card)&&Rt(S.card_data,p.card_data)&&Rt(S.requires,p.requires)&&Rt(S.computed_values,p.computed_values)&&Rt(S.runtime_state,p.runtime_state))continue;l(),o[g]=p,s.includes(g)||(s=[...s,g]),c=true;}else if(f.kind==="card_removed"){let g=f.cardId;if(!o[g])continue;l(),delete o[g],s=s.filter(p=>p!==g),c=true;}else if(f.kind==="card_chats"){let g=f.cardId,p=o[g];if(!p)continue;let S=Array.isArray(f.messages)?f.messages:p.card_chats?.messages??[],y=typeof f.receiving=="boolean"?f.receiving:p.card_chats?.receiving??false,R=typeof f.processing=="boolean"?f.processing:p.card_chats?.processing??false,A={messages:S,receiving:y,processing:R};if(Rt(p.card_chats,A))continue;l(),o[g]={...p,card_chats:A},c=true;}else if(f.kind==="chat_messages"){let g=f.cardId,p=o[g];if(!p)continue;let S=Array.isArray(f.messages)?f.messages:[],y=p.card_chats||{receiving:false,processing:false},R={messages:S,receiving:y.receiving,processing:!!y.processing};if(Rt(p.card_chats,R))continue;l(),o[g]={...p,card_chats:R},c=true;}else if(f.kind==="status"){let g=f.status?.cards??[];for(let p of g){let S=p?.name;if(!S||!o[S])continue;let y=o[S],R=no(p.status),A={...y.card_data||{},status:R,lastRun:p.runtime?.last_transition_at??null,...p.error?.message?{error:p.error.message}:{}};p.error?.message||delete A.error;let B={task_status:p.status??null,card_status:R,runtime:p.runtime?_e(p.runtime):{},error:p.error?_e(p.error):null,blocked_by:Array.isArray(p.blocked_by)?_e(p.blocked_by):[],requires_missing:Array.isArray(p.requires_missing)?_e(p.requires_missing):[]};Rt(y.card_data,A)&&Rt(y.runtime_state,B)||(l(),o[S]={...y,card_data:A,runtime_state:B},c=true);}}}return c?{payload:t.payload,cardIds:s,modelsById:o}:t}function xs(t,e){let r=e?.cards??[],n=e?.onWarn??(()=>{}),o=`${t}:notify`,s=zr(t,{callbackBaseUrl:e?.callbackBaseUrl,notifyChannel:o,onWarn:n}),i=St(ot({kind:"localstorage",value:t})),c=ot({kind:"localstorage",value:`${t}:card-store`}),u=ot({kind:"localstorage",value:`${t}:outputs`}),l=e?.taskExecutor??null,f=e?.chatHandler??null,g=ot({kind:"in-browser",value:`${t}:task-executor`}),p=ot({kind:"in-browser",value:`${t}:chat-handler`});l&&s.registerHandler(g,l),f&&s.registerHandler(p,f);let S={async invoke(E,_){return E.howToRun==="in-browser",s.dispatchExecution(E,_)}},y=e?.taskExecutorRef??(l?{meta:"task-executor",howToRun:"in-browser",whatToRun:g}:void 0),R=e?.chatHandlerRef??(f?{meta:"chat-handler",howToRun:"in-browser",whatToRun:p}:void 0),A=Kr(),B=Hr(t),F=Lr({boardId:t,chatStorage:B,boards:[{label:t,boardAdapter:s,baseRef:i,cardStoreRef:c,outputsStoreRef:u,notifyRef:{kind:"in-memory-bus",value:o},taskExecutorRef:y,chatHandlerRef:R}],invocationAdapter:S,notificationTransport:A,logger:{info:(...E)=>console.log("[board]",...E),warn:(...E)=>{n(String(E[0])),console.warn("[board]",...E);},error:(...E)=>console.error("[board]",...E)}});r.length&&F.cardStore.set({body:r}),e?.onBoardChange&&Ae(o).subscribe(_=>{let I=_;!I||I.kind!=="notification-batch"||!Array.isArray(I.notifications)||I.notifications.length===0||e.onBoardChange?.({notifications:I.notifications});});function C(E,_,I){let P=I?JSON.stringify(I):"",M=new TextEncoder().encode(P),z=false;return {method:E,url:_,headers:{"content-type":"application/json"},on(it,at){},[Symbol.asyncIterator](){let it={async next(){return z?{done:true,value:void 0}:(z=true,{done:false,value:M})},[Symbol.asyncIterator](){return it}};return it}}}function O(){let E=200,_=[];return {res:{writeHead(P){E=P;},write(P){return _.push(typeof P=="string"?P:new TextDecoder().decode(P)),true},end(P){P&&_.push(typeof P=="string"?P:new TextDecoder().decode(P));}},getResult:()=>{let P=_.join(""),M;try{M=JSON.parse(P);}catch{M=P;}return {status:E,body:M}}}}let j=F.apiBasePath;return {async bootstrap(){let E=C("GET",`${j}/bootstrap`),{res:_}=O();await F.handleRuntimeApi(E,_,new URL(`http://localhost${j}/bootstrap`));},getState(){return F.buildPublishedRuntimePayload()},async patchCard(E,_){let I=`${j}/cards/${encodeURIComponent(E)}`,P=C("PATCH",I,_),{res:M}=O();await F.handleRuntimeApi(P,M,new URL(`http://localhost${I}`));},async applyCardAction(E,_,I){let P=`${j}/cards/${encodeURIComponent(E)}/actions`,M=C("POST",P,{actionType:_,payload:I}),{res:z}=O();await F.handleRuntimeApi(M,z,new URL(`http://localhost${P}`));},readChatRecords(E){let _=`${j}/cards/${encodeURIComponent(E)}/chats`,I=C("GET",_),P=O();F.handleRuntimeApi(I,P.res,new URL(`http://localhost${_}`));let z=P.getResult().body;return Array.isArray(z?.messages)?z.messages:[]},clearChatRecords(E){F.clearChatRecords(E);},writeMemoryBlob(E,_){return s.writeMemoryBlob(E,_)},reportSourceFetched(E,_){F.reportSourceFetched(E,_);},reportSourceFetchFailure(E,_){F.reportSourceFetchFailure(E,_);},get runtime(){return F}}}function Es(t,e){return Xr(t,e,te)}function Os(t,e,r){return Yr(t,e,te,r)}
|
|
9
9
|
exports.applyNotification=Os;exports.buildBoardState=Es;exports.create=xs;exports.selectAllLiveCardModels=ro;exports.selectLiveCardModel=te;return exports;})({});//# sourceMappingURL=board-livecards-localstorage.js.map
|
|
10
10
|
//# sourceMappingURL=board-livecards-localstorage.js.map
|