yaml-flow 8.8.0 → 8.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/browser/adapters/firestore-storage.js +2 -2
  2. package/browser/adapters/localstorage-storage.js +1 -1
  3. package/browser/asset-integrity.json +6 -6
  4. package/browser/live-cards.js +6 -6
  5. package/browser/server-runtime-controlface.js +4 -4
  6. package/examples/board/server/chat-flow/flow-steps.json +5 -5
  7. package/examples/board/test/server-http-test.js +621 -17
  8. package/lib/board-live-cards-node.cjs +7 -7
  9. package/lib/board-live-cards-node.d.cts +61 -7
  10. package/lib/board-live-cards-node.d.ts +61 -7
  11. package/lib/board-live-cards-node.js +7 -7
  12. package/lib/board-live-cards-public.cjs +1 -1
  13. package/lib/board-live-cards-public.js +1 -1
  14. package/lib/board-live-cards-server-runtime.cjs +1 -1
  15. package/lib/board-live-cards-server-runtime.d.cts +1 -1
  16. package/lib/board-live-cards-server-runtime.d.ts +1 -1
  17. package/lib/board-live-cards-server-runtime.js +1 -1
  18. package/lib/board-livegraph-runtime/index.cjs +1 -1
  19. package/lib/board-livegraph-runtime/index.d.cts +1 -0
  20. package/lib/board-livegraph-runtime/index.d.ts +1 -0
  21. package/lib/board-livegraph-runtime/index.js +1 -1
  22. package/lib/chunk-36QUKFL7.cjs +3 -0
  23. package/lib/{chunk-YGKDQLYP.js → chunk-4HIEOBJC.js} +2 -2
  24. package/lib/chunk-7QQFDYBM.js +3 -0
  25. package/lib/chunk-ABAVFLDP.js +7 -0
  26. package/lib/chunk-H22NK6KH.cjs +7 -0
  27. package/lib/chunk-O6II7S4M.js +3 -0
  28. package/lib/chunk-PN5D32NP.cjs +3 -0
  29. package/lib/{chunk-S6DRP2HX.cjs → chunk-XQAHHUZO.cjs} +2 -2
  30. package/lib/chunk-ZENTBLLA.cjs +3 -0
  31. package/lib/chunk-ZWVT24YW.js +3 -0
  32. package/lib/cloud-storage.cjs +1 -1
  33. package/lib/cloud-storage.js +1 -1
  34. package/lib/firestore-storage/index.cjs +2 -2
  35. package/lib/firestore-storage/index.d.cts +2 -13
  36. package/lib/firestore-storage/index.d.ts +2 -13
  37. package/lib/firestore-storage/index.js +2 -2
  38. package/lib/index.cjs +2 -2
  39. package/lib/index.js +1 -1
  40. package/lib/localstorage-storage/index.cjs +1 -1
  41. package/lib/localstorage-storage/index.js +1 -1
  42. package/lib/server-jobs-queue-runner/index.d.cts +1 -1
  43. package/lib/server-jobs-queue-runner/index.d.ts +1 -1
  44. package/lib/server-runtime/index.cjs +1 -1
  45. package/lib/server-runtime/index.d.cts +2 -2
  46. package/lib/server-runtime/index.d.ts +2 -2
  47. package/lib/server-runtime/index.js +1 -1
  48. package/lib/server-runtime-agentface/index.d.cts +1 -1
  49. package/lib/server-runtime-agentface/index.d.ts +1 -1
  50. package/lib/server-runtime-controlface/index.cjs +1 -1
  51. package/lib/server-runtime-controlface/index.d.cts +1 -1
  52. package/lib/server-runtime-controlface/index.d.ts +1 -1
  53. package/lib/server-runtime-controlface/index.js +1 -1
  54. package/lib/server-runtime-core/index.d.cts +3 -3
  55. package/lib/server-runtime-core/index.d.ts +3 -3
  56. package/lib/server-runtime-watchers/index.cjs +1 -1
  57. package/lib/server-runtime-watchers/index.d.cts +3 -3
  58. package/lib/server-runtime-watchers/index.d.ts +3 -3
  59. package/lib/server-runtime-watchers/index.js +1 -1
  60. package/lib/server-runtime-webhooks/index.d.cts +1 -1
  61. package/lib/server-runtime-webhooks/index.d.ts +1 -1
  62. package/lib/{sse-hub-CYXisfXJ.d.cts → sse-hub-BDjWI7JR.d.cts} +1 -1
  63. package/lib/{sse-hub-Dodwtc3_.d.ts → sse-hub-DM8bw-dO.d.ts} +1 -1
  64. package/lib/{types-BtH3scgE.d.ts → types-BsfXZyI3.d.ts} +1 -1
  65. package/lib/{types-Ch0u3FKP.d.cts → types-CPnYv7RC.d.cts} +1 -1
  66. package/package.json +1 -1
  67. package/examples/board/test/sse-worker.js +0 -49
  68. package/lib/chunk-2GSI6C45.js +0 -7
  69. package/lib/chunk-CMFD27ZC.cjs +0 -3
  70. package/lib/chunk-DOFNXJ4C.js +0 -3
  71. package/lib/chunk-GU3T75C4.js +0 -3
  72. package/lib/chunk-H3EHFCDZ.js +0 -3
  73. package/lib/chunk-HEEDJEKM.js +0 -2
  74. package/lib/chunk-IQIZA7TN.cjs +0 -7
  75. package/lib/chunk-NDAKMJQK.cjs +0 -3
  76. package/lib/chunk-O4RKTQBP.cjs +0 -3
  77. package/lib/chunk-PBCDDO4V.cjs +0 -2
@@ -0,0 +1,3 @@
1
+ import {n,h,i,j,a as a$7,b as b$2,k,l as l$1,c as c$3,m}from'./chunk-NU5NO5NM.js';import {a as a$2}from'./chunk-NTICU4OK.js';import {a as a$8,c as c$4}from'./chunk-O7NOHKVR.js';import {a,b}from'./chunk-ABAVFLDP.js';import {a as a$3}from'./chunk-XYN5D3GL.js';import {a as a$9,b as b$4}from'./chunk-ZJ5M5COT.js';import {a as a$4,d as d$1,b as b$3,c as c$2}from'./chunk-FOFGEABN.js';import {a as a$6,c as c$1}from'./chunk-O5UYCGIN.js';import {a as a$b}from'./chunk-RKKSVOP2.js';import {g,d,c,b as b$1}from'./chunk-7QQFDYBM.js';import {a as a$a}from'./chunk-NNSBBO5R.js';import {y,z,l}from'./chunk-ZWVT24YW.js';import {a as a$5}from'./chunk-KBELAKIY.js';import {a as a$1}from'./chunk-Q3OTUDIE.js';function ne(A){let{apiBasePath:F,json:b,readJsonBody:z,initBoardAndSetup:I,bootstrapBoard:x,buildPublishedRuntimePayload:V,createMcpControlplaneToolRegistry:U,retriggerCard:G,applyCardAction:N,resolveChatHandlerTarget:K,sendCardFileDownloadResponse:W}=A;async function rt(J,B,L){let u=J.method||"GET",i=L,C=i.pathname;try{if(u==="POST"&&C===`${F}/mcp-actions`){await x();let R=Date.now(),w=new Date(R).toISOString(),y=await z(J),d=typeof y.tool=="string"?y.tool.trim():"",M=y.args&&typeof y.args=="object"&&!Array.isArray(y.args)?y.args:{};if(!d)return b(B,400,{error:"tool is required"}),!0;let P=a$8(M,"card_id");if(!P)return b(B,400,{error:"MCP action requires card_id"}),!0;if(d==="retrigger-card"||d==="retrigger"){await G(P);let O=Date.now();return b(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:d,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:200}}),!0}let p=c$4(M,"payload");if(d==="chat-send"&&!await K(P)){let O=Date.now();return b(B,409,{error:`chat handler is not configured for card: ${P}`,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:409}),!0}if(d==="chat-send"){let O=typeof p["turn-id"]=="string"?p["turn-id"]:typeof p.turnId=="string"?p.turnId:typeof p.turn=="string"?p.turn:"";if(!O||!String(O).trim()){let Q=Date.now();return b(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${P}`,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(Q).toISOString(),responseSentAtMs:Q,responseStatus:400}),!0}}await N(P,d,p);let H=Date.now();return b(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:d,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(H).toISOString(),responseSentAtMs:H,responseStatus:200}}),!0}if(u==="POST"&&C===`${F}/mcp-controlplane`){await x();let R=await z(J),w=typeof R.tool=="string"?R.tool.trim():"",y=R.args&&typeof R.args=="object"&&!Array.isArray(R.args)?R.args:{};if(!w)return b(B,400,{error:"tool is required"}),!0;try{let d=await a$9(w,y,U());if(d&&typeof d=="object"&&!Array.isArray(d)){let M=d;if(M.status==="fail")return b(B,400,{error:b$4(d,"Request failed")}),!0;if(M.status==="error")return b(B,500,{error:b$4(d,"Internal error")}),!0}b(B,200,d);}catch(d){let M=typeof d?.statusCode=="number"?Number(d.statusCode):500,P=d instanceof Error?d.message:String(d);b(B,M,{error:P});}return !0}let k=C.match(new RegExp(`^${c$2(F)}/cards/([^/]+)/retrigger$`));if(u==="POST"&&k){await x();let R=decodeURIComponent(k[1]);return await G(R),b(B,200,{ok:!0}),!0}let v=C.match(new RegExp(`^${c$2(F)}/cards/([^/]+)/actions$`));if(u==="POST"&&v){await x();let R=decodeURIComponent(v[1]),w=Date.now(),y=new Date(w).toISOString(),d=await z(J),M=d?.actionType;if(M==="chat-send"&&!await K(R)){let p=Date.now();return b(B,409,{error:`chat handler is not configured for card: ${R}`,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(p).toISOString(),responseSentAtMs:p,responseStatus:409}),!0}if(M==="chat-send"){let p=d?.payload??{},H=typeof p["turn-id"]=="string"?p["turn-id"]:typeof p.turnId=="string"?p.turnId:typeof p.turn=="string"?p.turn:"";if(!H||!String(H).trim()){let O=Date.now();return b(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${R}`,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:400}),!0}}await N(R,M,d?.payload);let P=Date.now();return b(B,200,{ok:!0,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(P).toISOString(),responseSentAtMs:P,responseStatus:200}),!0}let E=C.match(new RegExp(`^${c$2(F)}/cards/([^/]+)/files/(\\d+)$`));if(u==="GET"&&E){let R=decodeURIComponent(E[1]),w=parseInt(E[2],10),y=i.searchParams.get("sn");return await W(B,R,w,y),!0}return !1}catch(k){let v=k?.statusCode||500;return b(B,v,{error:String(k?.message||k)}),true}}return {handleRuntimeApi:rt}}var oe={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},ae="chat-handler-flow-queue",st="__probe__echo__probe__";function gr(A){let F=String(A.apiBasePath||"/api/board").replace(/\/$/,""),b$5={...oe,...A.corsHeaders||{}},z$1=A.queueLaneTuning??{},I=A.boardId||"",x=A.logger||{info:console.log,warn:console.warn,error:console.error},V=A.invocationAdapter,U=A.chatFlowRunner||null,G=A.notificationTransport||null,N=A.serverUrl||null,K=A.executionExtra||{},W=A.onSseClientConnected,rt=A.onSseClientDisconnected,J=A.onChannelSubscribed,B=A.onChannelUnsubscribed,L=a({readChatRecords:t=>bt(t),getChatProcessing:t=>Rt(t),readChatAfter:async(t,e)=>{let r=await ie(t,e);return {records:r.records,cursor:r.cursor}},onSseClientDisconnected:rt});function u(t){function e(o){if(Array.isArray(o))return o;if(o&&typeof o=="object"){let c=o;return Array.isArray(c.files)?c.files:[o]}return null}function r(o){return {async get(c){return o.get(c)},async set(c){return o.set(c)},async del(c){return o.del(c)},async patch(c){return o.patch(c)},async appendFiles(c){return o.appendFiles(c)}}}function a(o){function c(h){return {status:"success",data:h}}function m(h){return {status:"fail",error:h}}function l(h){return {status:"error",error:h instanceof Error?h.message:String(h)}}return {async get(h){try{let g=h.params?.id;if(g){let T=await o.readCard(g);return T?c({cards:[T]}):m(`card "${g}" not found`)}return c({cards:await o.readAllCards()})}catch(g){return l(g)}},async set(h){try{let g=h.body;if(g==null)return m("set requires a body (card object or array of cards)");let T=Array.isArray(g)?g:[g];for(let j of T){if(typeof j.id!="string")return m("each card must have a string `id` field");await o.writeCard(j.id,j);}return c({count:T.length})}catch(g){return l(g)}},async del(h){try{let g=h.body?.ids??[],T=h.params?.id,j=T?[...g,T]:g;if(j.length===0)return m("del requires body.ids (string[]) or params.id");for(let Y of j)await o.removeCard(Y);return c({count:j.length})}catch(g){return l(g)}},async patch(h){try{let g=h.params?.id,T=h.params?.path;if(!g)return m("patch requires params.id");if(!T)return m("patch requires params.path");let j=h.body,Y=j&&Object.prototype.hasOwnProperty.call(j,"value")?j.value:h.body;return await o.patchCard(g,T,Y),c({count:1})}catch(g){return l(g)}},async appendFiles(h){try{let g=h.params?.id;if(!g)return m("appendFiles requires params.id");let T=await o.readCard(g);if(!T)return m(`card "${g}" not found`);let j=e(h.body);if(!j||j.length===0)return m("appendFiles requires a file metadata object, array, or body.files array");let Y=T.card_data&&typeof T.card_data=="object"&&!Array.isArray(T.card_data)?T.card_data:{},Pt=Array.isArray(Y.files)?Y.files:[],_e=[...Pt,...j];return await o.patchCard(g,"card_data.files",_e),c({files_added:j.map((De,$e)=>({idx:Pt.length+$e,entry:De}))})}catch(g){return l(g)}}}}let n=a$4(t.boardAdapter)?g(t.baseRef,t.boardAdapter,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow}):y(t.baseRef,t.boardAdapter,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow}),s=t.nonCoreAdapter??(!a$4(t.boardAdapter)&&R(t.boardAdapter)?t.boardAdapter:null),f=t.nonCore??(s?z(t.baseRef,s,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),S=t.boardAdapter.chatStorageForRef(t.chatStoreRef),q,_=a$4(t.boardAdapter)?(()=>{let o=d(c(b$1(t.boardAdapter.kvStorageForRef(t.cardStoreRef)),t.boardAdapter.hashFn),x.warn),c$1=a(o);return q={get(m){return c$1.get(m)},set(m){return c$1.set(m)}},c$1})():(()=>{let o=t.boardAdapter.kvStorageForRef(t.cardStoreRef),m=a$5(l({readIndex:()=>o.read("_index"),writeIndex:l=>o.write("_index",l),readCard:l=>o.read(l),writeCard:(l,h)=>(o.write(l,h),l),removeCard:l=>{o.delete(l);},cardExists:l=>o.read(l)!==null,defaultCardKey:l=>l},x.warn));return q=m,r(m)})(),D;if(a$4(t.boardAdapter)){let o=t.boardAdapter.blobStorageForRef(t.artifactsStoreRef);D={async putBytes(c,m){if(o.writeBytes){await o.writeBytes(c,m);return}let l=JSON.stringify({__kind:"bytes-array",data:[...m]});await o.write(c,l);},async getBytes(c){if(o.readBytes){let l=await o.readBytes(c);if(l!==null)return l}let m=await o.read(c);if(m===null)return null;try{let l=JSON.parse(m);if(l&&l.__kind==="bytes-array"&&Array.isArray(l.data))return new Uint8Array(l.data)}catch{}return new TextEncoder().encode(m)},async listKeys(c){return await o.listKeys(c)}};}else {let o=t.boardAdapter.blobStorageForRef(t.artifactsStoreRef),c=a$6(o);D={putBytes(m,l,h){c.putBytes(m,l,h);},getBytes(m){return c.getBytes(m)},listKeys(m){return c.list(m).map(l=>l.key)}};}let Me={async init(o){return n.init(o)},async status(o){return n.status(o)},async getConfig(o){return n.getConfig(o)},async getAllOutputsDataObjects(o){return n.getAllOutputsDataObjects(o)},async getAllOutputsComputedValues(o){return n.getAllOutputsComputedValues(o)},async getOutputsFetchedSources(o){return n.getOutputsFetchedSources(o)},async upsertCard(o){return n.upsertCard(o)},async removeCard(o){return n.removeCard(o)},async cardRefreshedNotify(o){return n.cardRefreshedNotify(o)},async sourceDataFetched(o){return n.sourceDataFetched(o)},async sourceDataFetchFailure(o){return n.sourceDataFetchFailure(o)}};return {label:t.label,board:n,nonCore:f,publicCardStore:q,boardOps:Me,cardStoreOps:_,get filesArtifacts(){return D},get chatStorage(){return S},boardAdapter:t.boardAdapter,boardRuntimeStoreRef:t.boardRuntimeStoreRef,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,artifactsStoreRef:t.artifactsStoreRef,fetchedSourcesStoreRef:t.fetchedSourcesStoreRef,queueStoreRef:t.queueStoreRef,chatStoreRef:t.chatStoreRef,scratchStoreRef:t.scratchStoreRef,notifyRef:t.notifyRef,taskExecutorRef:t.taskExecutorRef,chatHandlerRef:t.chatHandlerRef,chatHandlerFlow:t.chatHandlerFlow,inferenceAdapterRef:t.inferenceAdapterRef,notification:a$7(),notificationTeardown:null,initialized:false,cardsBootstrapped:false}}let i$1=A.boards.map(u),C=new Map;function k$1(t){return C.get(t)??0}function v(t){return t.queueStoreRef}function E(t,e){if(a$4(t.boardAdapter)){let a=t.boardAdapter.queueStorageForRef(v(t),e);return a$a(a)}let r=t.boardAdapter.queueStorageForRef(v(t),e);return a$b(r)}function R(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function w(t){let e=i$1[k$1(t)];return {files:e?e.filesArtifacts:null}}function y$1(){return c$1()}function d$2(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}async function M(t){if(!t||t.notificationTeardown||!G||!t.notifyRef)return;let e=await G.subscribe(t.notifyRef,r=>{c$3(t.notification,r);let a=r.kind==="notification-batch"?r.notifications:[r];L.broadcastNotificationBatch(a);});t.notificationTeardown=e;}async function P(t){if(!t||t.initialized)return;let e={boardRuntimeStoreRef:t.boardRuntimeStoreRef,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,fetchedSourcesStoreRef:t.fetchedSourcesStoreRef,artifactsStoreRef:t.artifactsStoreRef,queueStoreRef:t.queueStoreRef,chatStoreRef:t.chatStoreRef,scratchStoreRef:t.scratchStoreRef},r={};t.taskExecutorRef&&(r["task-executor-ref"]=t.taskExecutorRef),t.chatHandlerFlow!==void 0&&(r["chat-handler-flow"]=t.chatHandlerFlow);let a=await t.boardOps.init({params:e,body:r});if(a.status!=="success")throw Object.assign(new Error(a.error||`init failed for ${t.label}`),{statusCode:500});if(await M(t),!t.chatHandlerFlow&&t.chatHandlerRef&&V.describe)try{let n=await V.describe(t.chatHandlerRef);n&&n.kind!=="chat-handler"?x.warn(`[init] chat-handler describe returned kind="${n.kind}", expected "chat-handler" for ${t.label}`):n&&x.info(`[init] chat-handler validated: ${n.name} (protocol ${n.protocolVersion}) for ${t.label}`);}catch(n){x.warn(`[init] chat-handler describe failed for ${t.label}: ${n?.message||String(n)}`);}t.initialized=true;}async function p(t){if(!t.boardAdapter.publishBoardChangeNotifications)return;let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&b$2(r.data)&&e.push({kind:"status",status:r.data});let a=await t.boardOps.getAllOutputsDataObjects({});if(a.status==="success"&&a.data!=null)for(let[s,f]of Object.entries(a.data))s&&e.push({kind:"data_object",key:s,payload:f});let n=await t.boardOps.getAllOutputsComputedValues({});if(n.status==="success"&&n.data!=null)for(let[s,f]of Object.entries(n.data))s&&e.push({kind:"computed_values",cardId:s,values:f});e.length>0&&t.boardAdapter.publishBoardChangeNotifications(e);}async function H(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),a=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let n of a)typeof n.id=="string"&&(C.set(n.id,e),await t.boardOps.upsertCard({params:{cardId:n.id}}));t.cardsBootstrapped=true;}async function O(){for(let t of i$1)await P(t);}async function Q(){await O();for(let t=0;t<i$1.length;t++)await p(i$1[t]),await H(i$1[t],t),await p(i$1[t]);}async function pt(t=false){t||await O();for(let e of i$1){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function Z(t){return i$1[k$1(t)]??null}async function nt(t){let e=Z(t);if(!e)return null;let r=await e.cardStoreOps.get({params:{id:t}});if(r.status!=="success")return null;let a=Array.isArray(r.data?.cards)?r.data.cards:[];return a.length>0?a[0]:null}async function mt(){let t=async r=>{if(!r)return [];let a=await r.cardStoreOps.get({});return a.status!=="success"||!Array.isArray(a.data?.cards)?[]:a.data.cards},e=[];for(let r of i$1)e.push(...await t(r));return e}function gt(){return i$1[0]??null}function se(t){return Z(t)??gt()}function $(t){let e=se(t);if(!e)throw Object.assign(new Error(`Board context is unavailable for chat operations: ${t}`),{statusCode:404});return e.chatStorage}async function ie(t,e){return await $(t).readAfter(t,e)}async function Rt(t){return await $(t).isProcessing(t)}async function at(t,e){await $(t).setProcessing(t,e),await L.broadcastCardChats(t,true);}let ce=a$1({append(t,e,r,a,n){return Promise.resolve($(t).append(t,e,r,a,n)).then(async s=>(await L.broadcastCardChats(t,true),s))},readAll(t){return $(t).readAll(t)},readAfter(t,e){return $(t).readAfter(t,e)},clear(t){return $(t).clear(t)},setProcessing(t,e){return Promise.resolve($(t).setProcessing(t,e)).then(async()=>{await L.broadcastCardChats(t,true);})},isProcessing(t){return $(t).isProcessing(t)},getConfig(t){return $(t).getConfig(t)},setConfig(t,e){return $(t).setConfig(t,e)}}),yt=n({boardContexts:i$1,cardOwnerIndex:C,cardContextForCard:t=>Z(t),readStatusSnapshot:()=>pe(),readDataObjectsByToken:()=>ge(),readCardRuntimeArtifacts:()=>me(),readCardFromStore:t=>nt(t),readCardDefinitions:()=>mt(),processAccumulatedLaneInternal:t=>pt(t),reportSourceFetched:(t,e)=>Bt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>kt(t,{reason:e}),uploadCardFile:(t,e,r,a,n)=>Ct(t,e,r,a,n),chatStorePublic:ce,serverUrl:N,apiBasePath:F}),ue=yt.mcpCardStoreFacade,it=yt.createMcpFacade,de=h({boardId:I,bootstrapBoard:()=>Q(),sseHub:L,onChannelSubscribed:J,onChannelUnsubscribed:B,getMcpFacade:()=>it(),getMcpCardStoreFacade:()=>ue()});function le(t){return k(t)}function fe(){return l$1(it())}function wt(){return m({boardId:I,uploadCardFile:Ct,getMcpFacade:()=>it(),controlplane:de})}let ct=i({boardId:I,boardContexts:i$1,readCardDefinitions:()=>mt(),readChatRecords:t=>bt(t),getChatProcessing:t=>Rt(t)}),pe=ct.readStatusSnapshot,me=ct.readCardRuntimeArtifacts,ge=ct.readDataObjectsByToken,lt=ct.buildPublishedRuntimePayload;async function ht(t,e,r){let a=r?.syncBoard!==false,n=r?.restartOnlyIfChanged===true,s=Z(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let f=await nt(t);if(!f)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let S=n?JSON.stringify(f):null,q=e(f)||f;if(n&&JSON.stringify(q)===S)return;let _=await s.cardStoreOps.set({body:q});if(_.status!=="success")throw Object.assign(new Error(_.error||`Failed to persist card: ${t}`),{statusCode:500});if(a){let D=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(D.status!=="success")throw Object.assign(new Error(D.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Re(t,e){await ht(t,e,{syncBoard:true});}async function ye(t,e){await ht(t,e,{syncBoard:false});}async function we(t){let e=Z(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await nt(t))throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let a=await e.boardOps.upsertCard({params:{cardId:t,restart:true}});if(a.status!=="success")throw Object.assign(new Error(a.error||`Failed to retrigger card: ${t}`),{statusCode:500})}async function he(t){await $(t).clear(t);try{await at(t,!1);}catch{}}async function be(t,e,r,a,n=""){let s=typeof r=="string"?r.trim():"",f=await $(t).append(t,e||"system",s,a,n);return await L.broadcastCardChats(t,true),f}async function bt(t){return await $(t).readAll(t)}let Ct=j({safeCardId:t=>d$2(t),artifactsStores:t=>w(t),cardFileMetadataStore:()=>y$1(),readCardFromStore:t=>nt(t),updateCardLocalOnly:(t,e)=>ye(t,e),writeChatRecord:(t,e,r,a,n)=>be(t,e,r,a,n)}).uploadCardFile;async function St(t){let e=Z(t);if(!e)return null;let r=await e.boardOps.getConfig({params:{key:"chat-handler-flow"}}),n=(r.status==="success"?r.data?.value:null)??e.chatHandlerFlow??null,s=e.chatHandlerRef;return n==null&&(!s||typeof s!="object")?null:{ctx:e,handlerFlow:n,handlerRef:s}}function Ce(t){let e=typeof t=="string"?t.trim():"";if(e.length<st.length*2||!e.startsWith(st)||!e.endsWith(st))return null;let r=e.slice(st.length,e.length-st.length).trim(),a=/^([A-Za-z0-9_-]+)__(.*)$/s.exec(r);return a?{assistant:a[1].trim().toLowerCase(),text:a[2].trim()}:{assistant:"echo",text:r}}async function Se(t,e,r=false,a="",n=""){try{let s=await St(t);if(!s){try{await at(t,!1);}catch{}return}let{ctx:f,handlerFlow:S,handlerRef:q}=s;if(!r)try{await at(t,!0);}catch{}let _={boardId:I,cardId:String(t),lastChatEntryId:e,...a?{turnId:a}:{},...typeof n=="string"&&n.trim()?{probe:n.trim()}:{},...K,...N?{serverUrl:N}:{}},D=S!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:ae}}:q;a$4(f.boardAdapter)?await E(f,"chat-agent").enqueueRequest({boardId:I,ref:D,args:S!=null?{..._,__chatHandlerFlow:S}:_}):E(f,"chat-agent").enqueueRequest({boardId:I,ref:D,args:S!=null?{..._,__chatHandlerFlow:S}:_}),await Promise.resolve(f.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await at(t,!1);}catch{}x.warn(`[chat-handler] queue failed for card "${t}": ${s instanceof Error?s.message:String(s)}`);}}async function Ae(t,e,r){if(e.howToRun==="built-in"&&b$3(e)===ae){let a=U,n=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,a?a.run(n,s,{boardId:I,cardId:String(s.cardId||""),label:t.label,logger:x,serverUrl:N,executionExtra:K}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return V.invoke(e,r)}async function Be(t,e=false){e||await O();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",a=r?Z(r):gt();if(!a)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let n=await Ae(a,t.ref,t.args);if(!n.dispatched){if(r)try{await at(r,!1);}catch{}throw new Error(n.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function ke(t,e,r){if(e==="chat-send"){let n=r&&typeof r["turn-id"]=="string"?r["turn-id"]:r&&typeof r.turnId=="string"?r.turnId:r&&typeof r.turn=="string"?r.turn:"";if(r&&"files"in r&&r.files!==void 0&&r.files!==null)throw Object.assign(new Error('chat-send does not accept a "files" parameter; upload attachments via manage.add-chat-attachment first'),{statusCode:400});let s=wt(),f=Ce(r?.text),S=f?f.text:r?.text,q=await a$9("manage.add-chat-entry-and-any-attachments",{board_id:I,card_id:t,role:"user",text:S,turn_id:n,files:[]},s);if(q?.status!=="success")throw new Error(b$4(q,`chat-send append failed for card ${t}`));let _=q?.data?.id;if(typeof _!="string"||!_)throw new Error(`chat-send did not return an append id for card ${t}`);let D=await a$9("setstate.chat-processing-started",{board_id:I,card_id:t},s);if(D?.status!=="success")throw new Error(b$4(D,`chat-send processing update failed for card ${t}`));Se(t,_,true,n,f?.assistant||"");return}await Re(t,n=>{let s=new Date().toISOString(),f=n.card_data&&typeof n.card_data=="object"?n.card_data:{};if(n.card_data=f,e==="file-upload"){let S=y$1().normalizeIncoming(r?.files,s);return S.length>0&&y$1().merge(f,S),n}if(e==="action"){let S=r&&typeof r.buttonId=="string"?r.buttonId:"";if(!S)return n;f.lastAction={buttonId:S,at:s},f.lastActionText=`${S} @ ${s}`;}return n});}function ut(t,e,r){let a=JSON.stringify(r),n=typeof Buffer<"u"?Buffer.byteLength(a):new TextEncoder().encode(a).length;t.writeHead(e,{...b$5,"Content-Type":"application/json; charset=utf-8","Content-Length":n}),t.end(a);}async function At(t,e,r){let a=await nt(t);if(!a)throw Object.assign(new Error("Card not found"),{statusCode:404});let n=y$1().resolve(a.card_data,e,r);if(!n.ok&&n.reason==="stale_reference")throw Object.assign(new Error("File reference is stale. Refresh and try again."),{statusCode:409});if(!n.ok)throw Object.assign(new Error("File not found"),{statusCode:404});let s=n.file,f=d$2(t),S=w(t),q=String(s.stored_name||""),_=`${f}/${q}`,D=S.files?await S.files.getBytes(_):null;if(!D)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:D}}async function Pe(t,e,r,a){let{fileRecord:n,bytes:s}=await At(e,r,a),f=String(n.name||n.stored_name||"download.bin"),S=String(n.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":S,"Content-Disposition":`attachment; filename="${f}"`,"Content-Length":s.length}),t.end(s);}function Fe(t){let e=String(t||"").toLowerCase();return e.startsWith("text/")||e.includes("json")||e.includes("xml")||e.includes("javascript")||e.includes("typescript")||e.includes("yaml")||e.includes("csv")}function Oe(t,e,r){let a=t.split(/\r?\n/);return (e==="head"?a.slice(0,r):a.slice(-r)).join(`
2
+ `)}async function dt(t){let e=[];for await(let a of t)e.push(a);let r=typeof Buffer<"u"?Buffer.concat(e).toString("utf-8").trim():new TextDecoder().decode(d$1(e)).trim();return r?JSON.parse(r):{}}async function Bt(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let a=i$1[0];return a?a.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function kt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",a=i$1[0];return a?a.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let ve=b({sseHub:L,corsHeaders:b$5,json:ut,buildPublishedRuntimePayload:()=>lt(),onSseClientConnected:W,onChannelSubscribed:J,onChannelUnsubscribed:B,apiBasePath:F,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),bootstrapBoard:()=>Q(),boardContexts:i$1,publishPersistedStateSnapshot:t=>p(t),upsertCardsFromSource:(t,e)=>H(t,e)}).handleWatchersRoutes,Te=a$2({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),bootstrapBoard:()=>Q(),createMcpFacade:()=>it(),createMcpToolRegistry:t=>le(t),resolveCardFileDownloadPayload:(t,e,r)=>At(t,e,r),isLikelyTextMimeType:t=>Fe(t),sliceTextByLines:(t,e,r)=>Oe(t,e,r)}).handleAgentfaceApi,xe=a$3({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),createMcpWebhookToolRegistry:()=>fe()}).handleWebhooksApi,je=ne({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),bootstrapBoard:()=>Q(),buildPublishedRuntimePayload:()=>lt(),createMcpControlplaneToolRegistry:()=>wt(),retriggerCard:t=>we(t),applyCardAction:(t,e,r)=>ke(t,e,r),resolveChatHandlerTarget:t=>St(t),sendCardFileDownloadResponse:(t,e,r,a)=>Pe(t,e,r,a)}).handleRuntimeApi;async function Ee(t,e,r){return !!(await Te(t,e,r)||await xe(t,e,r)||await ve(t,e,r)||await je(t,e,r))}return {get apiBasePath(){return F},get corsHeaders(){return b$5},get queueLaneTuning(){return z$1},handleRuntimeApi:Ee,buildPublishedRuntimePayload:lt,__drainProcessAccumulatedLane:pt,handleChatAgentRequest:Be,clearChatRecords:he,reportSourceFetched(t,e){return Bt(t,{ref:e})},reportSourceFetchFailure(t,e){return kt(t,{reason:e})},get cardStore(){return i$1[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function Rr(A){let F=String(A.apiBasePath||"/api/boards").replace(/\/$/,""),b={...oe,...A.corsHeaders||{}},z=A.serverMetaStore,I=A.boardRuntimeFactory,x=new Map,V="boards-config.json";function U(){let u=z.getText(V);if(!u)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(u)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function G(u){z.putText(V,JSON.stringify(u,null,2));}function N(u){let i=String(u||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return i.length>0&&i.length<=64?i:null}function K(u){if(x.has(u))return x.get(u);let C=U().boards.find(v=>v.id===u)||{},k=I(u,C);return x.set(u,k),k}function W(u,i,C){let k=JSON.stringify(C),v=typeof Buffer<"u"?Buffer.byteLength(k):new TextEncoder().encode(k).length;u.writeHead(i,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":v}),u.end(k);}async function rt(u,i,C){let k=u.method||"GET",v=C.pathname;if(k==="GET"&&v===F)return W(i,200,{ok:true,boards:U().boards}),true;if(k==="POST"&&v===F){let E=[];for await(let p of u)E.push(p);let R=typeof Buffer<"u"?Buffer.concat(E).toString("utf-8").trim():new TextDecoder().decode(d$1(E)).trim(),w={};try{w=R?JSON.parse(R):{};}catch{w={};}let y=N(w.id);if(!y)return W(i,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let d=U();if(d.boards.some(p=>p.id===y))return W(i,409,{error:`Board "${y}" is already registered`}),true;let M=typeof w.label=="string"&&w.label.trim()?w.label.trim():y,P={id:y,label:M};for(let[p,H]of Object.entries(w))p==="id"||p==="label"||H!=null&&(P[p]=H);return d.boards.push(P),G(d),W(i,200,{ok:true,board:P}),true}return false}async function J(u,i,C){let v=C.pathname.match(new RegExp(`^${c$2(F)}/([^/]+)(/|$)`));if(!v)return false;let E=N(decodeURIComponent(v[1]));return E?U().boards.some(y=>y.id===E)?!!await K(E).handleRuntimeApi(u,i,C):(W(i,404,{error:`Board "${E}" not registered. POST ${F} with {id} to register it first.`}),true):(W(i,400,{error:"Invalid board id"}),true)}async function B(u,i,C){return !!(await rt(u,i,C)||await J(u,i,C))}function L(u){if(!U().boards.some(C=>C.id===u))throw Object.assign(new Error(`Board "${u}" not registered`),{statusCode:404});return {service:K(u)}}return {get apiBasePath(){return F},get corsHeaders(){return b},handleApi:B,requireBoardService:L}}export{gr as a,Rr as b};//# sourceMappingURL=chunk-O6II7S4M.js.map
3
+ //# sourceMappingURL=chunk-O6II7S4M.js.map
@@ -0,0 +1,3 @@
1
+ 'use strict';var chunkZK3E7L4Y_cjs=require('./chunk-ZK3E7L4Y.cjs'),chunk7FGPOGRV_cjs=require('./chunk-7FGPOGRV.cjs'),chunkLPXVVMQT_cjs=require('./chunk-LPXVVMQT.cjs'),chunkH22NK6KH_cjs=require('./chunk-H22NK6KH.cjs'),chunkNM6O35RY_cjs=require('./chunk-NM6O35RY.cjs'),chunk272IYUKT_cjs=require('./chunk-272IYUKT.cjs'),chunkBQUQTOPB_cjs=require('./chunk-BQUQTOPB.cjs'),chunkNBJTYAYN_cjs=require('./chunk-NBJTYAYN.cjs'),chunkGPCMBPLK_cjs=require('./chunk-GPCMBPLK.cjs'),chunk36QUKFL7_cjs=require('./chunk-36QUKFL7.cjs'),chunk37HDEW26_cjs=require('./chunk-37HDEW26.cjs'),chunkZENTBLLA_cjs=require('./chunk-ZENTBLLA.cjs'),chunkYMEIPKLW_cjs=require('./chunk-YMEIPKLW.cjs'),chunkUB54HZA4_cjs=require('./chunk-UB54HZA4.cjs');function ne(A){let{apiBasePath:F,json:b,readJsonBody:z,initBoardAndSetup:I,bootstrapBoard:x,buildPublishedRuntimePayload:V,createMcpControlplaneToolRegistry:U,retriggerCard:G,applyCardAction:N,resolveChatHandlerTarget:K,sendCardFileDownloadResponse:W}=A;async function rt(J,B,L){let u=J.method||"GET",i=L,C=i.pathname;try{if(u==="POST"&&C===`${F}/mcp-actions`){await x();let R=Date.now(),w=new Date(R).toISOString(),y=await z(J),d=typeof y.tool=="string"?y.tool.trim():"",M=y.args&&typeof y.args=="object"&&!Array.isArray(y.args)?y.args:{};if(!d)return b(B,400,{error:"tool is required"}),!0;let P=chunkLPXVVMQT_cjs.a(M,"card_id");if(!P)return b(B,400,{error:"MCP action requires card_id"}),!0;if(d==="retrigger-card"||d==="retrigger"){await G(P);let O=Date.now();return b(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:d,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:200}}),!0}let p=chunkLPXVVMQT_cjs.c(M,"payload");if(d==="chat-send"&&!await K(P)){let O=Date.now();return b(B,409,{error:`chat handler is not configured for card: ${P}`,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:409}),!0}if(d==="chat-send"){let O=typeof p["turn-id"]=="string"?p["turn-id"]:typeof p.turnId=="string"?p.turnId:typeof p.turn=="string"?p.turn:"";if(!O||!String(O).trim()){let Q=Date.now();return b(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${P}`,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(Q).toISOString(),responseSentAtMs:Q,responseStatus:400}),!0}}await N(P,d,p);let H=Date.now();return b(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:d,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(H).toISOString(),responseSentAtMs:H,responseStatus:200}}),!0}if(u==="POST"&&C===`${F}/mcp-controlplane`){await x();let R=await z(J),w=typeof R.tool=="string"?R.tool.trim():"",y=R.args&&typeof R.args=="object"&&!Array.isArray(R.args)?R.args:{};if(!w)return b(B,400,{error:"tool is required"}),!0;try{let d=await chunk272IYUKT_cjs.a(w,y,U());if(d&&typeof d=="object"&&!Array.isArray(d)){let M=d;if(M.status==="fail")return b(B,400,{error:chunk272IYUKT_cjs.b(d,"Request failed")}),!0;if(M.status==="error")return b(B,500,{error:chunk272IYUKT_cjs.b(d,"Internal error")}),!0}b(B,200,d);}catch(d){let M=typeof d?.statusCode=="number"?Number(d.statusCode):500,P=d instanceof Error?d.message:String(d);b(B,M,{error:P});}return !0}let k=C.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(F)}/cards/([^/]+)/retrigger$`));if(u==="POST"&&k){await x();let R=decodeURIComponent(k[1]);return await G(R),b(B,200,{ok:!0}),!0}let v=C.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(F)}/cards/([^/]+)/actions$`));if(u==="POST"&&v){await x();let R=decodeURIComponent(v[1]),w=Date.now(),y=new Date(w).toISOString(),d=await z(J),M=d?.actionType;if(M==="chat-send"&&!await K(R)){let p=Date.now();return b(B,409,{error:`chat handler is not configured for card: ${R}`,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(p).toISOString(),responseSentAtMs:p,responseStatus:409}),!0}if(M==="chat-send"){let p=d?.payload??{},H=typeof p["turn-id"]=="string"?p["turn-id"]:typeof p.turnId=="string"?p.turnId:typeof p.turn=="string"?p.turn:"";if(!H||!String(H).trim()){let O=Date.now();return b(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${R}`,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:400}),!0}}await N(R,M,d?.payload);let P=Date.now();return b(B,200,{ok:!0,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(P).toISOString(),responseSentAtMs:P,responseStatus:200}),!0}let E=C.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(F)}/cards/([^/]+)/files/(\\d+)$`));if(u==="GET"&&E){let R=decodeURIComponent(E[1]),w=parseInt(E[2],10),y=i.searchParams.get("sn");return await W(B,R,w,y),!0}return !1}catch(k){let v=k?.statusCode||500;return b(B,v,{error:String(k?.message||k)}),true}}return {handleRuntimeApi:rt}}var oe={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},ae="chat-handler-flow-queue",st="__probe__echo__probe__";function gr(A){let F=String(A.apiBasePath||"/api/board").replace(/\/$/,""),b={...oe,...A.corsHeaders||{}},z=A.queueLaneTuning??{},I=A.boardId||"",x=A.logger||{info:console.log,warn:console.warn,error:console.error},V=A.invocationAdapter,U=A.chatFlowRunner||null,G=A.notificationTransport||null,N=A.serverUrl||null,K=A.executionExtra||{},W=A.onSseClientConnected,rt=A.onSseClientDisconnected,J=A.onChannelSubscribed,B=A.onChannelUnsubscribed,L=chunkH22NK6KH_cjs.a({readChatRecords:t=>bt(t),getChatProcessing:t=>Rt(t),readChatAfter:async(t,e)=>{let r=await ie(t,e);return {records:r.records,cursor:r.cursor}},onSseClientDisconnected:rt});function u(t){function e(o){if(Array.isArray(o))return o;if(o&&typeof o=="object"){let c=o;return Array.isArray(c.files)?c.files:[o]}return null}function r(o){return {async get(c){return o.get(c)},async set(c){return o.set(c)},async del(c){return o.del(c)},async patch(c){return o.patch(c)},async appendFiles(c){return o.appendFiles(c)}}}function a(o){function c(h){return {status:"success",data:h}}function m(h){return {status:"fail",error:h}}function l(h){return {status:"error",error:h instanceof Error?h.message:String(h)}}return {async get(h){try{let g=h.params?.id;if(g){let T=await o.readCard(g);return T?c({cards:[T]}):m(`card "${g}" not found`)}return c({cards:await o.readAllCards()})}catch(g){return l(g)}},async set(h){try{let g=h.body;if(g==null)return m("set requires a body (card object or array of cards)");let T=Array.isArray(g)?g:[g];for(let j of T){if(typeof j.id!="string")return m("each card must have a string `id` field");await o.writeCard(j.id,j);}return c({count:T.length})}catch(g){return l(g)}},async del(h){try{let g=h.body?.ids??[],T=h.params?.id,j=T?[...g,T]:g;if(j.length===0)return m("del requires body.ids (string[]) or params.id");for(let Y of j)await o.removeCard(Y);return c({count:j.length})}catch(g){return l(g)}},async patch(h){try{let g=h.params?.id,T=h.params?.path;if(!g)return m("patch requires params.id");if(!T)return m("patch requires params.path");let j=h.body,Y=j&&Object.prototype.hasOwnProperty.call(j,"value")?j.value:h.body;return await o.patchCard(g,T,Y),c({count:1})}catch(g){return l(g)}},async appendFiles(h){try{let g=h.params?.id;if(!g)return m("appendFiles requires params.id");let T=await o.readCard(g);if(!T)return m(`card "${g}" not found`);let j=e(h.body);if(!j||j.length===0)return m("appendFiles requires a file metadata object, array, or body.files array");let Y=T.card_data&&typeof T.card_data=="object"&&!Array.isArray(T.card_data)?T.card_data:{},Pt=Array.isArray(Y.files)?Y.files:[],_e=[...Pt,...j];return await o.patchCard(g,"card_data.files",_e),c({files_added:j.map((De,$e)=>({idx:Pt.length+$e,entry:De}))})}catch(g){return l(g)}}}}let n=chunkBQUQTOPB_cjs.a(t.boardAdapter)?chunk36QUKFL7_cjs.g(t.baseRef,t.boardAdapter,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow}):chunkZENTBLLA_cjs.y(t.baseRef,t.boardAdapter,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow}),s=t.nonCoreAdapter??(!chunkBQUQTOPB_cjs.a(t.boardAdapter)&&R(t.boardAdapter)?t.boardAdapter:null),f=t.nonCore??(s?chunkZENTBLLA_cjs.z(t.baseRef,s,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),S=t.boardAdapter.chatStorageForRef(t.chatStoreRef),q,_=chunkBQUQTOPB_cjs.a(t.boardAdapter)?(()=>{let o=chunk36QUKFL7_cjs.d(chunk36QUKFL7_cjs.c(chunk36QUKFL7_cjs.b(t.boardAdapter.kvStorageForRef(t.cardStoreRef)),t.boardAdapter.hashFn),x.warn),c=a(o);return q={get(m){return c.get(m)},set(m){return c.set(m)}},c})():(()=>{let o=t.boardAdapter.kvStorageForRef(t.cardStoreRef),m=chunkYMEIPKLW_cjs.a(chunkZENTBLLA_cjs.l({readIndex:()=>o.read("_index"),writeIndex:l=>o.write("_index",l),readCard:l=>o.read(l),writeCard:(l,h)=>(o.write(l,h),l),removeCard:l=>{o.delete(l);},cardExists:l=>o.read(l)!==null,defaultCardKey:l=>l},x.warn));return q=m,r(m)})(),D;if(chunkBQUQTOPB_cjs.a(t.boardAdapter)){let o=t.boardAdapter.blobStorageForRef(t.artifactsStoreRef);D={async putBytes(c,m){if(o.writeBytes){await o.writeBytes(c,m);return}let l=JSON.stringify({__kind:"bytes-array",data:[...m]});await o.write(c,l);},async getBytes(c){if(o.readBytes){let l=await o.readBytes(c);if(l!==null)return l}let m=await o.read(c);if(m===null)return null;try{let l=JSON.parse(m);if(l&&l.__kind==="bytes-array"&&Array.isArray(l.data))return new Uint8Array(l.data)}catch{}return new TextEncoder().encode(m)},async listKeys(c){return await o.listKeys(c)}};}else {let o=t.boardAdapter.blobStorageForRef(t.artifactsStoreRef),c=chunkNBJTYAYN_cjs.a(o);D={putBytes(m,l,h){c.putBytes(m,l,h);},getBytes(m){return c.getBytes(m)},listKeys(m){return c.list(m).map(l=>l.key)}};}let Me={async init(o){return n.init(o)},async status(o){return n.status(o)},async getConfig(o){return n.getConfig(o)},async getAllOutputsDataObjects(o){return n.getAllOutputsDataObjects(o)},async getAllOutputsComputedValues(o){return n.getAllOutputsComputedValues(o)},async getOutputsFetchedSources(o){return n.getOutputsFetchedSources(o)},async upsertCard(o){return n.upsertCard(o)},async removeCard(o){return n.removeCard(o)},async cardRefreshedNotify(o){return n.cardRefreshedNotify(o)},async sourceDataFetched(o){return n.sourceDataFetched(o)},async sourceDataFetchFailure(o){return n.sourceDataFetchFailure(o)}};return {label:t.label,board:n,nonCore:f,publicCardStore:q,boardOps:Me,cardStoreOps:_,get filesArtifacts(){return D},get chatStorage(){return S},boardAdapter:t.boardAdapter,boardRuntimeStoreRef:t.boardRuntimeStoreRef,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,artifactsStoreRef:t.artifactsStoreRef,fetchedSourcesStoreRef:t.fetchedSourcesStoreRef,queueStoreRef:t.queueStoreRef,chatStoreRef:t.chatStoreRef,scratchStoreRef:t.scratchStoreRef,notifyRef:t.notifyRef,taskExecutorRef:t.taskExecutorRef,chatHandlerRef:t.chatHandlerRef,chatHandlerFlow:t.chatHandlerFlow,inferenceAdapterRef:t.inferenceAdapterRef,notification:chunkZK3E7L4Y_cjs.a(),notificationTeardown:null,initialized:false,cardsBootstrapped:false}}let i=A.boards.map(u),C=new Map;function k(t){return C.get(t)??0}function v(t){return t.queueStoreRef}function E(t,e){if(chunkBQUQTOPB_cjs.a(t.boardAdapter)){let a=t.boardAdapter.queueStorageForRef(v(t),e);return chunk37HDEW26_cjs.a(a)}let r=t.boardAdapter.queueStorageForRef(v(t),e);return chunkGPCMBPLK_cjs.a(r)}function R(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function w(t){let e=i[k(t)];return {files:e?e.filesArtifacts:null}}function y(){return chunkNBJTYAYN_cjs.c()}function d(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}async function M(t){if(!t||t.notificationTeardown||!G||!t.notifyRef)return;let e=await G.subscribe(t.notifyRef,r=>{chunkZK3E7L4Y_cjs.c(t.notification,r);let a=r.kind==="notification-batch"?r.notifications:[r];L.broadcastNotificationBatch(a);});t.notificationTeardown=e;}async function P(t){if(!t||t.initialized)return;let e={boardRuntimeStoreRef:t.boardRuntimeStoreRef,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,fetchedSourcesStoreRef:t.fetchedSourcesStoreRef,artifactsStoreRef:t.artifactsStoreRef,queueStoreRef:t.queueStoreRef,chatStoreRef:t.chatStoreRef,scratchStoreRef:t.scratchStoreRef},r={};t.taskExecutorRef&&(r["task-executor-ref"]=t.taskExecutorRef),t.chatHandlerFlow!==void 0&&(r["chat-handler-flow"]=t.chatHandlerFlow);let a=await t.boardOps.init({params:e,body:r});if(a.status!=="success")throw Object.assign(new Error(a.error||`init failed for ${t.label}`),{statusCode:500});if(await M(t),!t.chatHandlerFlow&&t.chatHandlerRef&&V.describe)try{let n=await V.describe(t.chatHandlerRef);n&&n.kind!=="chat-handler"?x.warn(`[init] chat-handler describe returned kind="${n.kind}", expected "chat-handler" for ${t.label}`):n&&x.info(`[init] chat-handler validated: ${n.name} (protocol ${n.protocolVersion}) for ${t.label}`);}catch(n){x.warn(`[init] chat-handler describe failed for ${t.label}: ${n?.message||String(n)}`);}t.initialized=true;}async function p(t){if(!t.boardAdapter.publishBoardChangeNotifications)return;let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&chunkZK3E7L4Y_cjs.b(r.data)&&e.push({kind:"status",status:r.data});let a=await t.boardOps.getAllOutputsDataObjects({});if(a.status==="success"&&a.data!=null)for(let[s,f]of Object.entries(a.data))s&&e.push({kind:"data_object",key:s,payload:f});let n=await t.boardOps.getAllOutputsComputedValues({});if(n.status==="success"&&n.data!=null)for(let[s,f]of Object.entries(n.data))s&&e.push({kind:"computed_values",cardId:s,values:f});e.length>0&&t.boardAdapter.publishBoardChangeNotifications(e);}async function H(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),a=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let n of a)typeof n.id=="string"&&(C.set(n.id,e),await t.boardOps.upsertCard({params:{cardId:n.id}}));t.cardsBootstrapped=true;}async function O(){for(let t of i)await P(t);}async function Q(){await O();for(let t=0;t<i.length;t++)await p(i[t]),await H(i[t],t),await p(i[t]);}async function pt(t=false){t||await O();for(let e of i){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function Z(t){return i[k(t)]??null}async function nt(t){let e=Z(t);if(!e)return null;let r=await e.cardStoreOps.get({params:{id:t}});if(r.status!=="success")return null;let a=Array.isArray(r.data?.cards)?r.data.cards:[];return a.length>0?a[0]:null}async function mt(){let t=async r=>{if(!r)return [];let a=await r.cardStoreOps.get({});return a.status!=="success"||!Array.isArray(a.data?.cards)?[]:a.data.cards},e=[];for(let r of i)e.push(...await t(r));return e}function gt(){return i[0]??null}function se(t){return Z(t)??gt()}function $(t){let e=se(t);if(!e)throw Object.assign(new Error(`Board context is unavailable for chat operations: ${t}`),{statusCode:404});return e.chatStorage}async function ie(t,e){return await $(t).readAfter(t,e)}async function Rt(t){return await $(t).isProcessing(t)}async function at(t,e){await $(t).setProcessing(t,e),await L.broadcastCardChats(t,true);}let ce=chunkUB54HZA4_cjs.a({append(t,e,r,a,n){return Promise.resolve($(t).append(t,e,r,a,n)).then(async s=>(await L.broadcastCardChats(t,true),s))},readAll(t){return $(t).readAll(t)},readAfter(t,e){return $(t).readAfter(t,e)},clear(t){return $(t).clear(t)},setProcessing(t,e){return Promise.resolve($(t).setProcessing(t,e)).then(async()=>{await L.broadcastCardChats(t,true);})},isProcessing(t){return $(t).isProcessing(t)},getConfig(t){return $(t).getConfig(t)},setConfig(t,e){return $(t).setConfig(t,e)}}),yt=chunkZK3E7L4Y_cjs.n({boardContexts:i,cardOwnerIndex:C,cardContextForCard:t=>Z(t),readStatusSnapshot:()=>pe(),readDataObjectsByToken:()=>ge(),readCardRuntimeArtifacts:()=>me(),readCardFromStore:t=>nt(t),readCardDefinitions:()=>mt(),processAccumulatedLaneInternal:t=>pt(t),reportSourceFetched:(t,e)=>Bt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>kt(t,{reason:e}),uploadCardFile:(t,e,r,a,n)=>Ct(t,e,r,a,n),chatStorePublic:ce,serverUrl:N,apiBasePath:F}),ue=yt.mcpCardStoreFacade,it=yt.createMcpFacade,de=chunkZK3E7L4Y_cjs.h({boardId:I,bootstrapBoard:()=>Q(),sseHub:L,onChannelSubscribed:J,onChannelUnsubscribed:B,getMcpFacade:()=>it(),getMcpCardStoreFacade:()=>ue()});function le(t){return chunkZK3E7L4Y_cjs.k(t)}function fe(){return chunkZK3E7L4Y_cjs.l(it())}function wt(){return chunkZK3E7L4Y_cjs.m({boardId:I,uploadCardFile:Ct,getMcpFacade:()=>it(),controlplane:de})}let ct=chunkZK3E7L4Y_cjs.i({boardId:I,boardContexts:i,readCardDefinitions:()=>mt(),readChatRecords:t=>bt(t),getChatProcessing:t=>Rt(t)}),pe=ct.readStatusSnapshot,me=ct.readCardRuntimeArtifacts,ge=ct.readDataObjectsByToken,lt=ct.buildPublishedRuntimePayload;async function ht(t,e,r){let a=r?.syncBoard!==false,n=r?.restartOnlyIfChanged===true,s=Z(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let f=await nt(t);if(!f)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let S=n?JSON.stringify(f):null,q=e(f)||f;if(n&&JSON.stringify(q)===S)return;let _=await s.cardStoreOps.set({body:q});if(_.status!=="success")throw Object.assign(new Error(_.error||`Failed to persist card: ${t}`),{statusCode:500});if(a){let D=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(D.status!=="success")throw Object.assign(new Error(D.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Re(t,e){await ht(t,e,{syncBoard:true});}async function ye(t,e){await ht(t,e,{syncBoard:false});}async function we(t){let e=Z(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await nt(t))throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let a=await e.boardOps.upsertCard({params:{cardId:t,restart:true}});if(a.status!=="success")throw Object.assign(new Error(a.error||`Failed to retrigger card: ${t}`),{statusCode:500})}async function he(t){await $(t).clear(t);try{await at(t,!1);}catch{}}async function be(t,e,r,a,n=""){let s=typeof r=="string"?r.trim():"",f=await $(t).append(t,e||"system",s,a,n);return await L.broadcastCardChats(t,true),f}async function bt(t){return await $(t).readAll(t)}let Ct=chunkZK3E7L4Y_cjs.j({safeCardId:t=>d(t),artifactsStores:t=>w(t),cardFileMetadataStore:()=>y(),readCardFromStore:t=>nt(t),updateCardLocalOnly:(t,e)=>ye(t,e),writeChatRecord:(t,e,r,a,n)=>be(t,e,r,a,n)}).uploadCardFile;async function St(t){let e=Z(t);if(!e)return null;let r=await e.boardOps.getConfig({params:{key:"chat-handler-flow"}}),n=(r.status==="success"?r.data?.value:null)??e.chatHandlerFlow??null,s=e.chatHandlerRef;return n==null&&(!s||typeof s!="object")?null:{ctx:e,handlerFlow:n,handlerRef:s}}function Ce(t){let e=typeof t=="string"?t.trim():"";if(e.length<st.length*2||!e.startsWith(st)||!e.endsWith(st))return null;let r=e.slice(st.length,e.length-st.length).trim(),a=/^([A-Za-z0-9_-]+)__(.*)$/s.exec(r);return a?{assistant:a[1].trim().toLowerCase(),text:a[2].trim()}:{assistant:"echo",text:r}}async function Se(t,e,r=false,a="",n=""){try{let s=await St(t);if(!s){try{await at(t,!1);}catch{}return}let{ctx:f,handlerFlow:S,handlerRef:q}=s;if(!r)try{await at(t,!0);}catch{}let _={boardId:I,cardId:String(t),lastChatEntryId:e,...a?{turnId:a}:{},...typeof n=="string"&&n.trim()?{probe:n.trim()}:{},...K,...N?{serverUrl:N}:{}},D=S!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:ae}}:q;chunkBQUQTOPB_cjs.a(f.boardAdapter)?await E(f,"chat-agent").enqueueRequest({boardId:I,ref:D,args:S!=null?{..._,__chatHandlerFlow:S}:_}):E(f,"chat-agent").enqueueRequest({boardId:I,ref:D,args:S!=null?{..._,__chatHandlerFlow:S}:_}),await Promise.resolve(f.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await at(t,!1);}catch{}x.warn(`[chat-handler] queue failed for card "${t}": ${s instanceof Error?s.message:String(s)}`);}}async function Ae(t,e,r){if(e.howToRun==="built-in"&&chunkBQUQTOPB_cjs.b(e)===ae){let a=U,n=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,a?a.run(n,s,{boardId:I,cardId:String(s.cardId||""),label:t.label,logger:x,serverUrl:N,executionExtra:K}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return V.invoke(e,r)}async function Be(t,e=false){e||await O();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",a=r?Z(r):gt();if(!a)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let n=await Ae(a,t.ref,t.args);if(!n.dispatched){if(r)try{await at(r,!1);}catch{}throw new Error(n.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function ke(t,e,r){if(e==="chat-send"){let n=r&&typeof r["turn-id"]=="string"?r["turn-id"]:r&&typeof r.turnId=="string"?r.turnId:r&&typeof r.turn=="string"?r.turn:"";if(r&&"files"in r&&r.files!==void 0&&r.files!==null)throw Object.assign(new Error('chat-send does not accept a "files" parameter; upload attachments via manage.add-chat-attachment first'),{statusCode:400});let s=wt(),f=Ce(r?.text),S=f?f.text:r?.text,q=await chunk272IYUKT_cjs.a("manage.add-chat-entry-and-any-attachments",{board_id:I,card_id:t,role:"user",text:S,turn_id:n,files:[]},s);if(q?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(q,`chat-send append failed for card ${t}`));let _=q?.data?.id;if(typeof _!="string"||!_)throw new Error(`chat-send did not return an append id for card ${t}`);let D=await chunk272IYUKT_cjs.a("setstate.chat-processing-started",{board_id:I,card_id:t},s);if(D?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(D,`chat-send processing update failed for card ${t}`));Se(t,_,true,n,f?.assistant||"");return}await Re(t,n=>{let s=new Date().toISOString(),f=n.card_data&&typeof n.card_data=="object"?n.card_data:{};if(n.card_data=f,e==="file-upload"){let S=y().normalizeIncoming(r?.files,s);return S.length>0&&y().merge(f,S),n}if(e==="action"){let S=r&&typeof r.buttonId=="string"?r.buttonId:"";if(!S)return n;f.lastAction={buttonId:S,at:s},f.lastActionText=`${S} @ ${s}`;}return n});}function ut(t,e,r){let a=JSON.stringify(r),n=typeof Buffer<"u"?Buffer.byteLength(a):new TextEncoder().encode(a).length;t.writeHead(e,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":n}),t.end(a);}async function At(t,e,r){let a=await nt(t);if(!a)throw Object.assign(new Error("Card not found"),{statusCode:404});let n=y().resolve(a.card_data,e,r);if(!n.ok&&n.reason==="stale_reference")throw Object.assign(new Error("File reference is stale. Refresh and try again."),{statusCode:409});if(!n.ok)throw Object.assign(new Error("File not found"),{statusCode:404});let s=n.file,f=d(t),S=w(t),q=String(s.stored_name||""),_=`${f}/${q}`,D=S.files?await S.files.getBytes(_):null;if(!D)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:D}}async function Pe(t,e,r,a){let{fileRecord:n,bytes:s}=await At(e,r,a),f=String(n.name||n.stored_name||"download.bin"),S=String(n.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":S,"Content-Disposition":`attachment; filename="${f}"`,"Content-Length":s.length}),t.end(s);}function Fe(t){let e=String(t||"").toLowerCase();return e.startsWith("text/")||e.includes("json")||e.includes("xml")||e.includes("javascript")||e.includes("typescript")||e.includes("yaml")||e.includes("csv")}function Oe(t,e,r){let a=t.split(/\r?\n/);return (e==="head"?a.slice(0,r):a.slice(-r)).join(`
2
+ `)}async function dt(t){let e=[];for await(let a of t)e.push(a);let r=typeof Buffer<"u"?Buffer.concat(e).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(e)).trim();return r?JSON.parse(r):{}}async function Bt(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let a=i[0];return a?a.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function kt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",a=i[0];return a?a.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let ve=chunkH22NK6KH_cjs.b({sseHub:L,corsHeaders:b,json:ut,buildPublishedRuntimePayload:()=>lt(),onSseClientConnected:W,onChannelSubscribed:J,onChannelUnsubscribed:B,apiBasePath:F,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),bootstrapBoard:()=>Q(),boardContexts:i,publishPersistedStateSnapshot:t=>p(t),upsertCardsFromSource:(t,e)=>H(t,e)}).handleWatchersRoutes,Te=chunk7FGPOGRV_cjs.a({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),bootstrapBoard:()=>Q(),createMcpFacade:()=>it(),createMcpToolRegistry:t=>le(t),resolveCardFileDownloadPayload:(t,e,r)=>At(t,e,r),isLikelyTextMimeType:t=>Fe(t),sliceTextByLines:(t,e,r)=>Oe(t,e,r)}).handleAgentfaceApi,xe=chunkNM6O35RY_cjs.a({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),createMcpWebhookToolRegistry:()=>fe()}).handleWebhooksApi,je=ne({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),bootstrapBoard:()=>Q(),buildPublishedRuntimePayload:()=>lt(),createMcpControlplaneToolRegistry:()=>wt(),retriggerCard:t=>we(t),applyCardAction:(t,e,r)=>ke(t,e,r),resolveChatHandlerTarget:t=>St(t),sendCardFileDownloadResponse:(t,e,r,a)=>Pe(t,e,r,a)}).handleRuntimeApi;async function Ee(t,e,r){return !!(await Te(t,e,r)||await xe(t,e,r)||await ve(t,e,r)||await je(t,e,r))}return {get apiBasePath(){return F},get corsHeaders(){return b},get queueLaneTuning(){return z},handleRuntimeApi:Ee,buildPublishedRuntimePayload:lt,__drainProcessAccumulatedLane:pt,handleChatAgentRequest:Be,clearChatRecords:he,reportSourceFetched(t,e){return Bt(t,{ref:e})},reportSourceFetchFailure(t,e){return kt(t,{reason:e})},get cardStore(){return i[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function Rr(A){let F=String(A.apiBasePath||"/api/boards").replace(/\/$/,""),b={...oe,...A.corsHeaders||{}},z=A.serverMetaStore,I=A.boardRuntimeFactory,x=new Map,V="boards-config.json";function U(){let u=z.getText(V);if(!u)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(u)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function G(u){z.putText(V,JSON.stringify(u,null,2));}function N(u){let i=String(u||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return i.length>0&&i.length<=64?i:null}function K(u){if(x.has(u))return x.get(u);let C=U().boards.find(v=>v.id===u)||{},k=I(u,C);return x.set(u,k),k}function W(u,i,C){let k=JSON.stringify(C),v=typeof Buffer<"u"?Buffer.byteLength(k):new TextEncoder().encode(k).length;u.writeHead(i,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":v}),u.end(k);}async function rt(u,i,C){let k=u.method||"GET",v=C.pathname;if(k==="GET"&&v===F)return W(i,200,{ok:true,boards:U().boards}),true;if(k==="POST"&&v===F){let E=[];for await(let p of u)E.push(p);let R=typeof Buffer<"u"?Buffer.concat(E).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(E)).trim(),w={};try{w=R?JSON.parse(R):{};}catch{w={};}let y=N(w.id);if(!y)return W(i,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let d=U();if(d.boards.some(p=>p.id===y))return W(i,409,{error:`Board "${y}" is already registered`}),true;let M=typeof w.label=="string"&&w.label.trim()?w.label.trim():y,P={id:y,label:M};for(let[p,H]of Object.entries(w))p==="id"||p==="label"||H!=null&&(P[p]=H);return d.boards.push(P),G(d),W(i,200,{ok:true,board:P}),true}return false}async function J(u,i,C){let v=C.pathname.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(F)}/([^/]+)(/|$)`));if(!v)return false;let E=N(decodeURIComponent(v[1]));return E?U().boards.some(y=>y.id===E)?!!await K(E).handleRuntimeApi(u,i,C):(W(i,404,{error:`Board "${E}" not registered. POST ${F} with {id} to register it first.`}),true):(W(i,400,{error:"Invalid board id"}),true)}async function B(u,i,C){return !!(await rt(u,i,C)||await J(u,i,C))}function L(u){if(!U().boards.some(C=>C.id===u))throw Object.assign(new Error(`Board "${u}" not registered`),{statusCode:404});return {service:K(u)}}return {get apiBasePath(){return F},get corsHeaders(){return b},handleApi:B,requireBoardService:L}}exports.a=gr;exports.b=Rr;//# sourceMappingURL=chunk-PN5D32NP.cjs.map
3
+ //# sourceMappingURL=chunk-PN5D32NP.cjs.map
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkG4XXRHL2_cjs=require('./chunk-G4XXRHL2.cjs'),chunkIXZG74EW_cjs=require('./chunk-IXZG74EW.cjs');function b(e){return JSON.parse(JSON.stringify(e))}function E(e){let r=e.provides&&e.provides.length>0?e.provides.map(n=>n.bindTo):[e.id];return {requires:e.requires&&e.requires.length>0?[...e.requires]:void 0,provides:r,taskHandlers:[e.id],description:e.meta?.title??e.id}}function I(e){let r=new Map;for(let[n,u]of e.entries()){let o=u.provides&&u.provides.length>0?u.provides:[{bindTo:n,ref:"card_data"}];for(let h of o)r.set(h.bindTo,n);}return r}function O(e,r){let n=I(e),u=e.get(r);if(u){for(let o of u.requires??[])if(!n.has(o))throw new Error(`Card "${r}" requires token "${o}" but no card provides it`)}}var F={CARD_PREFIX:"yf:cards:",RUNTIME_OUT_PREFIX:"yf:runtime-out:cards:",STATUS_KEY:"yf:runtime-out:status",writeCard(e,r){try{localStorage.setItem(this.CARD_PREFIX+e,JSON.stringify(r));}catch(n){console.warn(`Failed to write card ${e} to localStorage:`,n);}},readCard(e){try{let r=localStorage.getItem(this.CARD_PREFIX+e);return r?JSON.parse(r):null}catch(r){return console.warn(`Failed to read card ${e} from localStorage:`,r),null}},readAllCards(e){let r={};for(let n of e){let u=this.readCard(n);u&&(r[n]=u);}return r},writeComputedArtifact(e){if(!(!e||!e.card_id))try{localStorage.setItem(this.RUNTIME_OUT_PREFIX+String(e.card_id),JSON.stringify(e));}catch(r){console.warn(`Failed to write computed artifact ${e.card_id}:`,r);}},readComputedArtifact(e){try{let r=localStorage.getItem(this.RUNTIME_OUT_PREFIX+e);return r?JSON.parse(r):null}catch(r){return console.warn(`Failed to read computed artifact ${e}:`,r),null}},readAllComputedArtifacts(e){let r={};for(let n of e){let u=this.readComputedArtifact(n);u&&(r[n]=u);}return r},writeStatusSnapshot(e){try{localStorage.setItem(this.STATUS_KEY,JSON.stringify(e));}catch(r){console.warn("Failed to write status snapshot to localStorage:",r);}},readStatusSnapshot(){try{let e=localStorage.getItem(this.STATUS_KEY);return e?JSON.parse(e):null}catch(e){return console.warn("Failed to read status snapshot from localStorage:",e),null}},clear(){let e=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);n&&(n.startsWith(this.CARD_PREFIX)||n.startsWith(this.RUNTIME_OUT_PREFIX)||n===this.STATUS_KEY)&&e.push(n);}for(let r of e)localStorage.removeItem(r);}};function H(e,r={}){let n=Array.isArray(e)?{}:{id:e.id,title:e.title,mode:e.mode,positions:e.positions,settings:e.settings},u=Array.isArray(e)?e:e.nodes,o=new Map;for(let t of u){if(o.has(t.id))throw new Error(`Duplicate card ID: "${t.id}"`);o.set(t.id,b(t));}let h=new Set,S=r.taskExecutor,L=r.sourceAdapters??{},d=r.defaultSourceAdapter,m=null,A=(t,g)=>{let a={events:t,graph:g,nodes:v()};for(let w of h)w(a);},_=t=>async g=>{let a=o.get(t);if(!a)return "task-initiate-failure";let w={};for(let R of a.requires??[]){let y=g.state[R];if(!y||typeof y!="object")continue;let k=y.provides_data;!k||typeof k!="object"||Object.prototype.hasOwnProperty.call(k,R)&&(w[R]=k[R]);}let p={};if(a.source_defs&&a.source_defs.length>0){let R=L[t]??d,y=S?await S({card:a,input:g}):R?await R({card:a,input:g}):void 0;if(y&&typeof y=="object")for(let k of a.source_defs)Object.prototype.hasOwnProperty.call(y,k.bindTo)?p[k.bindTo]=y[k.bindTo]:a.source_defs.length===1&&(p[k.bindTo]=y);}let c={id:a.id,card_data:b(a.card_data??{}),requires:w,source_defs:a.source_defs,compute:a.compute};c._sourcesData=p,c.compute&&c.compute.length>0&&await chunkIXZG74EW_cjs.a.run(c,{sourcesData:p});let T={};if(a.provides&&a.provides.length>0)for(let{bindTo:R,ref:y}of a.provides)T[R]=chunkIXZG74EW_cjs.a.resolve(c,y);else T[a.id]={...c.card_data??{},...c.computed_values??{},...c._sourcesData??{}};let B={provides_data:T,card_data:c.card_data??{},computed_values:c.computed_values??{},fetched_sources:p,requires:w};return m?.resolveCallback(g.callbackToken,B),"task-initiated"},s={},f={};for(let[t,g]of o.entries())O(o,t),s[t]=E(g),f[t]=_(t);let l={id:n.id??`browser-board-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n.settings??{},...r.graphSettings??{}},tasks:s},C=r.reactiveOptions?.onDrain,i=chunkG4XXRHL2_cjs.u(l,{...r.reactiveOptions??{},handlers:f,onDrain:(t,g,a)=>{C?.(t,g,a),A(t,g);}},r.executionId);m=i;function v(){let t=i.getState(),g=[];for(let[a,w]of o.entries()){let p=t.state.tasks[a]?.data,c=t.state.tasks[a],T={...w.card_data??{},...p&&typeof p.card_data=="object"?p.card_data:{}},B=c?.status==="running"?"loading":c?.status,R={...T,...B?{status:B}:{},...c?.lastUpdated?{lastRun:c.lastUpdated}:{},...c?.status==="failed"&&c.error?{error:c.error}:{}};g.push({id:a,card:b(w),card_data:R,requires:p&&typeof p.requires=="object"?b(p.requires):{},computed_values:p&&typeof p.computed_values=="object"?b(p.computed_values):{},runtime_state:c?b(c):{}});}return g}return {getGraph:()=>i,getState:()=>i.getState(),getSchedule:()=>i.getSchedule(),getNodes:()=>v(),getBoard:()=>({...n,nodes:v()}),subscribe(t){return h.add(t),t({events:[],graph:i.getState(),nodes:v()}),()=>h.delete(t)},addCard(t){if(o.has(t.id))throw new Error(`Card "${t.id}" already exists`);o.set(t.id,b(t)),O(o,t.id),i.registerHandler(t.id,_(t.id)),i.addNode(t.id,E(t));},upsertCard(t){o.set(t.id,b(t)),O(o,t.id),i.registerHandler(t.id,_(t.id)),i.addNode(t.id,E(t));},removeCard(t){o.delete(t),i.unregisterHandler(t),i.removeNode(t);},patchCardState(t,g){let a=o.get(t);if(!a)throw new Error(`Card "${t}" not found`);a.card_data={...a.card_data??{},...g},i.retrigger(t);},retrigger(t){i.retrigger(t);},retriggerAll(){i.retriggerAll(Array.from(o.keys()));},push(t){i.push(t);},pushAll(t){i.pushAll(t);},dispose(){h.clear(),i.dispose();}}}function G(e){return e==="running"||e==="in-progress"?"loading":e==="failed"?"error":"fresh"}function D(e){return e==="loading"?"in-progress":e==="error"?"failed":e==="stale"?"pending":e==="fresh"?"completed":"pending"}function M(e,r){let n=r&&typeof r=="object"&&!Array.isArray(r)?r:{};return {schema_version:n.schema_version||"v1",card_id:typeof n.card_id=="string"?n.card_id:e,card_data:n.card_data&&typeof n.card_data=="object"&&!Array.isArray(n.card_data)?structuredClone(n.card_data):{},computed_values:n.computed_values&&typeof n.computed_values=="object"&&!Array.isArray(n.computed_values)?structuredClone(n.computed_values):{}}}function P(e,r){if(!e||typeof e!="object")throw new Error("payload must be an object");if(!r)throw new Error("cardId is required");let u=(Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).find(t=>t.id===r);if(!u)throw new Error(`cardDefinitions has no entry with id ${r}`);let o=e.statusSnapshot&&typeof e.statusSnapshot=="object"?e.statusSnapshot:{},h=e.cardRuntimeById&&typeof e.cardRuntimeById=="object"?e.cardRuntimeById:{},S=e.dataObjectsByToken&&typeof e.dataObjectsByToken=="object"?e.dataObjectsByToken:{},d=(Array.isArray(o.cards)?o.cards:[]).find(t=>t.name===r),m=structuredClone(u),A=M(r,h[r]),s={...m.card_data&&typeof m.card_data=="object"&&!Array.isArray(m.card_data)?m.card_data:{},...A.card_data||{},status:G(d?.status),lastRun:d?.runtime?.last_transition_at??null};d?.error?.message&&(s.error=d.error.message);let f=d?{task_status:d.status??null,card_status:G(d.status),runtime:structuredClone(d.runtime??{}),error:d.error?structuredClone(d.error):null,blocked_by:Array.isArray(d.blocked_by)?structuredClone(d.blocked_by):[],requires_missing:Array.isArray(d.requires_missing)?structuredClone(d.requires_missing):[]}:{task_status:null,card_status:s.status??"fresh",runtime:{last_transition_at:s.lastRun??null},error:s.error?{message:s.error}:null,blocked_by:[],requires_missing:[]},l=Array.isArray(m.requires)?m.requires:[],C={};for(let[t,g]of Object.entries(S))C[t]=structuredClone(g);for(let t of l)Object.prototype.hasOwnProperty.call(C,t)||(C[t]=null);let v=(e.cardChatsByCardId&&typeof e.cardChatsByCardId=="object"?e.cardChatsByCardId:{})[r],q=v?{messages:Array.isArray(v.messages)?v.messages:[],receiving:!!v.receiving,processing:!!v.processing}:null;return {id:r,card:m,card_data:s,requires:C,computed_values:A.computed_values,runtime_state:f,card_chats:q}}function $(e){if(!e||typeof e!="object")throw new Error("payload must be an object");return (Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).map(n=>P(e,n.id))}function J({boardPath:e,cardDefinitions:r,runtimeModels:n,graphState:u}){let o=Array.isArray(r)?r:[],h=Array.isArray(n)?n:[],S=new Map(h.map(s=>[s.id,s])),d=u.state?.tasks??{},m={};for(let s of h)s?.id&&(m[s.id]={schema_version:"v1",card_id:s.id,card_data:structuredClone(s.card_data??{}),computed_values:structuredClone(s.computed_values??{})});let A={};for(let s of Object.keys(d)){let f=d[s]?.data?.provides_data;if(f&&typeof f=="object")for(let l of Object.keys(f))A[l]=structuredClone(f[l]);}let _=o.map(s=>{let f=S.get(s.id)??{},l=d[s.id],C=typeof l?.status=="string"?l.status:D(f.card_data?.status),i=typeof l?.error=="string"?l.error:typeof f.card_data?.error=="string"?f.card_data.error:null;return {name:s.id,status:C,...i?{error:{message:i,code:"TASK_FAILED",at:l?.failedAt??null,source:"browser-runtime"}}:{},requires:Array.isArray(s.requires)?s.requires:[],requires_satisfied:[],requires_missing:[],provides_declared:Array.isArray(s.provides)?s.provides.map(v=>v.bindTo):[s.id],provides_runtime:Object.keys(l?.data?.provides_data??{}).sort(),blocked_by:[],unblocks:[],runtime:{attempt_count:l?.executionCount??0,restart_count:l?.retryCount??0,in_progress_since:C==="in-progress"?l?.startedAt??null:null,last_transition_at:l?.lastUpdated??f.card_data?.lastRun??null,last_completed_at:l?.completedAt??null,last_restarted_at:l?.startedAt??null,status_age_ms:null}}});return {cardDefinitions:structuredClone(o),cardRuntimeById:m,dataObjectsByToken:A,statusSnapshot:{schema_version:"v1",meta:{board:{path:e??"browser-runtime"}},summary:{card_count:_.length,completed:_.filter(s=>s.status==="completed").length,eligible:0,pending:_.filter(s=>s.status==="pending").length,blocked:0,unresolved:0,failed:_.filter(s=>s.status==="failed").length,in_progress:_.filter(s=>s.status==="in-progress").length,orphan_cards:0,topology:{edge_count:0,max_fan_out_card:null,max_fan_out:0}},cards:_}}}exports.a=F;exports.b=H;exports.c=P;exports.d=$;exports.e=J;//# sourceMappingURL=chunk-S6DRP2HX.cjs.map
2
- //# sourceMappingURL=chunk-S6DRP2HX.cjs.map
1
+ 'use strict';var chunkG4XXRHL2_cjs=require('./chunk-G4XXRHL2.cjs'),chunkIXZG74EW_cjs=require('./chunk-IXZG74EW.cjs');function b(e){return JSON.parse(JSON.stringify(e))}function E(e){let r=e.provides&&e.provides.length>0?e.provides.map(n=>n.bindTo):[e.id];return {requires:e.requires&&e.requires.length>0?[...e.requires]:void 0,provides:r,taskHandlers:[e.id],description:e.meta?.title??e.id}}function I(e){let r=new Map;for(let[n,u]of e.entries()){let o=u.provides&&u.provides.length>0?u.provides:[{bindTo:n,ref:"card_data"}];for(let h of o)r.set(h.bindTo,n);}return r}function O(e,r){let n=I(e),u=e.get(r);if(u){for(let o of u.requires??[])if(!n.has(o))throw new Error(`Card "${r}" requires token "${o}" but no card provides it`)}}var F={CARD_PREFIX:"yf:cards:",RUNTIME_OUT_PREFIX:"yf:runtime-out:cards:",STATUS_KEY:"yf:runtime-out:status",writeCard(e,r){try{localStorage.setItem(this.CARD_PREFIX+e,JSON.stringify(r));}catch(n){console.warn(`Failed to write card ${e} to localStorage:`,n);}},readCard(e){try{let r=localStorage.getItem(this.CARD_PREFIX+e);return r?JSON.parse(r):null}catch(r){return console.warn(`Failed to read card ${e} from localStorage:`,r),null}},readAllCards(e){let r={};for(let n of e){let u=this.readCard(n);u&&(r[n]=u);}return r},writeComputedArtifact(e){if(!(!e||!e.card_id))try{localStorage.setItem(this.RUNTIME_OUT_PREFIX+String(e.card_id),JSON.stringify(e));}catch(r){console.warn(`Failed to write computed artifact ${e.card_id}:`,r);}},readComputedArtifact(e){try{let r=localStorage.getItem(this.RUNTIME_OUT_PREFIX+e);return r?JSON.parse(r):null}catch(r){return console.warn(`Failed to read computed artifact ${e}:`,r),null}},readAllComputedArtifacts(e){let r={};for(let n of e){let u=this.readComputedArtifact(n);u&&(r[n]=u);}return r},writeStatusSnapshot(e){try{localStorage.setItem(this.STATUS_KEY,JSON.stringify(e));}catch(r){console.warn("Failed to write status snapshot to localStorage:",r);}},readStatusSnapshot(){try{let e=localStorage.getItem(this.STATUS_KEY);return e?JSON.parse(e):null}catch(e){return console.warn("Failed to read status snapshot from localStorage:",e),null}},clear(){let e=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);n&&(n.startsWith(this.CARD_PREFIX)||n.startsWith(this.RUNTIME_OUT_PREFIX)||n===this.STATUS_KEY)&&e.push(n);}for(let r of e)localStorage.removeItem(r);}};function H(e,r={}){let n=Array.isArray(e)?{}:{id:e.id,title:e.title,mode:e.mode,positions:e.positions,settings:e.settings},u=Array.isArray(e)?e:e.nodes,o=new Map;for(let t of u){if(o.has(t.id))throw new Error(`Duplicate card ID: "${t.id}"`);o.set(t.id,b(t));}let h=new Set,S=r.taskExecutor,L=r.sourceAdapters??{},d=r.defaultSourceAdapter,m=null,A=(t,g)=>{let a={events:t,graph:g,nodes:v()};for(let w of h)w(a);},_=t=>async g=>{let a=o.get(t);if(!a)return "task-initiate-failure";let w={};for(let R of a.requires??[]){let y=g.state[R];if(!y||typeof y!="object")continue;let k=y.provides_data;!k||typeof k!="object"||Object.prototype.hasOwnProperty.call(k,R)&&(w[R]=k[R]);}let p={};if(a.source_defs&&a.source_defs.length>0){let R=L[t]??d,y=S?await S({card:a,input:g}):R?await R({card:a,input:g}):void 0;if(y&&typeof y=="object")for(let k of a.source_defs)Object.prototype.hasOwnProperty.call(y,k.bindTo)?p[k.bindTo]=y[k.bindTo]:a.source_defs.length===1&&(p[k.bindTo]=y);}let c={id:a.id,card_data:b(a.card_data??{}),requires:w,source_defs:a.source_defs,compute:a.compute};c._sourcesData=p,c.compute&&c.compute.length>0&&await chunkIXZG74EW_cjs.a.run(c,{sourcesData:p});let T={};if(a.provides&&a.provides.length>0)for(let{bindTo:R,ref:y}of a.provides)T[R]=chunkIXZG74EW_cjs.a.resolve(c,y);else T[a.id]={...c.card_data??{},...c.computed_values??{},...c._sourcesData??{}};let B={provides_data:T,card_data:c.card_data??{},computed_values:c.computed_values??{},fetched_sources:p,requires:w};return m?.resolveCallback(g.callbackToken,B),"task-initiated"},s={},f={};for(let[t,g]of o.entries())O(o,t),s[t]=E(g),f[t]=_(t);let l={id:n.id??`browser-board-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n.settings??{},...r.graphSettings??{}},tasks:s},C=r.reactiveOptions?.onDrain,i=chunkG4XXRHL2_cjs.u(l,{...r.reactiveOptions??{},handlers:f,onDrain:(t,g,a)=>{C?.(t,g,a),A(t,g);}},r.executionId);m=i;function v(){let t=i.getState(),g=[];for(let[a,w]of o.entries()){let p=t.state.tasks[a]?.data,c=t.state.tasks[a],T={...w.card_data??{},...p&&typeof p.card_data=="object"?p.card_data:{}},B=c?.status==="running"?"loading":c?.status,R={...T,...B?{status:B}:{},...c?.lastUpdated?{lastRun:c.lastUpdated}:{},...c?.status==="failed"&&c.error?{error:c.error}:{}};g.push({id:a,card:b(w),card_data:R,requires:p&&typeof p.requires=="object"?b(p.requires):{},computed_values:p&&typeof p.computed_values=="object"?b(p.computed_values):{},runtime_state:c?b(c):{}});}return g}return {getGraph:()=>i,getState:()=>i.getState(),getSchedule:()=>i.getSchedule(),getNodes:()=>v(),getBoard:()=>({...n,nodes:v()}),subscribe(t){return h.add(t),t({events:[],graph:i.getState(),nodes:v()}),()=>h.delete(t)},addCard(t){if(o.has(t.id))throw new Error(`Card "${t.id}" already exists`);o.set(t.id,b(t)),O(o,t.id),i.registerHandler(t.id,_(t.id)),i.addNode(t.id,E(t));},upsertCard(t){o.set(t.id,b(t)),O(o,t.id),i.registerHandler(t.id,_(t.id)),i.addNode(t.id,E(t));},removeCard(t){o.delete(t),i.unregisterHandler(t),i.removeNode(t);},patchCardState(t,g){let a=o.get(t);if(!a)throw new Error(`Card "${t}" not found`);a.card_data={...a.card_data??{},...g},i.retrigger(t);},retrigger(t){i.retrigger(t);},retriggerAll(){i.retriggerAll(Array.from(o.keys()));},push(t){i.push(t);},pushAll(t){i.pushAll(t);},dispose(){h.clear(),i.dispose();}}}function G(e){return e==="running"||e==="in-progress"?"loading":e==="failed"?"error":"fresh"}function D(e){return e==="loading"?"in-progress":e==="error"?"failed":e==="stale"?"pending":e==="fresh"?"completed":"pending"}function M(e,r){let n=r&&typeof r=="object"&&!Array.isArray(r)?r:{};return {schema_version:n.schema_version||"v1",card_id:typeof n.card_id=="string"?n.card_id:e,card_data:n.card_data&&typeof n.card_data=="object"&&!Array.isArray(n.card_data)?structuredClone(n.card_data):{},computed_values:n.computed_values&&typeof n.computed_values=="object"&&!Array.isArray(n.computed_values)?structuredClone(n.computed_values):{}}}function P(e,r){if(!e||typeof e!="object")throw new Error("payload must be an object");if(!r)throw new Error("cardId is required");let u=(Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).find(t=>t.id===r);if(!u)throw new Error(`cardDefinitions has no entry with id ${r}`);let o=e.statusSnapshot&&typeof e.statusSnapshot=="object"?e.statusSnapshot:{},h=e.cardRuntimeById&&typeof e.cardRuntimeById=="object"?e.cardRuntimeById:{},S=e.dataObjectsByToken&&typeof e.dataObjectsByToken=="object"?e.dataObjectsByToken:{},d=(Array.isArray(o.cards)?o.cards:[]).find(t=>t.name===r),m=structuredClone(u),A=M(r,h[r]),s={...m.card_data&&typeof m.card_data=="object"&&!Array.isArray(m.card_data)?m.card_data:{},...A.card_data||{},status:G(d?.status),lastRun:d?.runtime?.last_transition_at??null};d?.error?.message&&(s.error=d.error.message);let f=d?{task_status:d.status??null,card_status:G(d.status),runtime:structuredClone(d.runtime??{}),error:d.error?structuredClone(d.error):null,blocked_by:Array.isArray(d.blocked_by)?structuredClone(d.blocked_by):[],requires_missing:Array.isArray(d.requires_missing)?structuredClone(d.requires_missing):[]}:{task_status:null,card_status:s.status??"fresh",runtime:{last_transition_at:s.lastRun??null},error:s.error?{message:s.error}:null,blocked_by:[],requires_missing:[]},l=Array.isArray(m.requires)?m.requires:[],C={};for(let[t,g]of Object.entries(S))C[t]=structuredClone(g);for(let t of l)Object.prototype.hasOwnProperty.call(C,t)||(C[t]=null);let v=(e.cardChatsByCardId&&typeof e.cardChatsByCardId=="object"?e.cardChatsByCardId:{})[r],q=v?{messages:Array.isArray(v.messages)?v.messages:[],receiving:!!v.receiving,processing:!!v.processing}:null;return {id:r,card:m,card_data:s,requires:C,computed_values:A.computed_values,runtime_state:f,card_chats:q}}function $(e){if(!e||typeof e!="object")throw new Error("payload must be an object");return (Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).map(n=>P(e,n.id))}function J({boardPath:e,cardDefinitions:r,runtimeModels:n,graphState:u}){let o=Array.isArray(r)?r:[],h=Array.isArray(n)?n:[],S=new Map(h.map(s=>[s.id,s])),d=u.state?.tasks??{},m={};for(let s of h)s?.id&&(m[s.id]={schema_version:"v1",card_id:s.id,card_data:structuredClone(s.card_data??{}),computed_values:structuredClone(s.computed_values??{})});let A={};for(let s of Object.keys(d)){let f=d[s]?.data?.provides_data;if(f&&typeof f=="object")for(let l of Object.keys(f))A[l]=structuredClone(f[l]);}let _=o.map(s=>{let f=S.get(s.id)??{},l=d[s.id],C=typeof l?.status=="string"?l.status:D(f.card_data?.status),i=typeof l?.error=="string"?l.error:typeof f.card_data?.error=="string"?f.card_data.error:null;return {name:s.id,status:C,...i?{error:{message:i,code:"TASK_FAILED",at:l?.failedAt??null,source:"browser-runtime"}}:{},requires:Array.isArray(s.requires)?s.requires:[],requires_satisfied:[],requires_missing:[],provides_declared:Array.isArray(s.provides)?s.provides.map(v=>v.bindTo):[s.id],provides_runtime:Object.keys(l?.data?.provides_data??{}).sort(),blocked_by:[],unblocks:[],runtime:{attempt_count:l?.executionCount??0,restart_count:l?.retryCount??0,in_progress_since:C==="in-progress"?l?.startedAt??null:null,last_transition_at:l?.lastUpdated??f.card_data?.lastRun??null,last_completed_at:l?.completedAt??null,last_restarted_at:l?.startedAt??null,status_age_ms:null}}});return {cardDefinitions:structuredClone(o),cardRuntimeById:m,dataObjectsByToken:A,statusSnapshot:{schema_version:"v1",meta:{board:{path:e??"browser-runtime"}},summary:{card_count:_.length,completed:_.filter(s=>s.status==="completed").length,eligible:0,pending:_.filter(s=>s.status==="pending").length,blocked:0,unresolved:0,failed:_.filter(s=>s.status==="failed").length,in_progress:_.filter(s=>s.status==="in-progress").length,orphan_cards:0,topology:{edge_count:0,max_fan_out_card:null,max_fan_out:0}},cards:_}}}exports.a=F;exports.b=H;exports.c=P;exports.d=$;exports.e=J;//# sourceMappingURL=chunk-XQAHHUZO.cjs.map
2
+ //# sourceMappingURL=chunk-XQAHHUZO.cjs.map
@@ -0,0 +1,3 @@
1
+ 'use strict';var chunk7JVHYHT2_cjs=require('./chunk-7JVHYHT2.cjs'),chunkVQCIOKJV_cjs=require('./chunk-VQCIOKJV.cjs'),chunkG4XXRHL2_cjs=require('./chunk-G4XXRHL2.cjs'),chunkIXZG74EW_cjs=require('./chunk-IXZG74EW.cjs'),chunkYMEIPKLW_cjs=require('./chunk-YMEIPKLW.cjs');function it(e){return typeof e=="string"&&e.trim().length>0}function ut(e,t){if(!e||typeof e!="object")throw new Error(`${t}: adapter.selfRef is required`);if(!it(e.howToRun))throw new Error(`${t}: adapter.selfRef.howToRun is required`);if(!it(e.whatToRun))throw new Error(`${t}: adapter.selfRef.whatToRun is required`)}function dt(e,t){if(!e||typeof e!="object")throw new Error(`${t}: adapter.callbackTransport is required`);if(typeof e.createCallback!="function")throw new Error(`${t}: adapter.callbackTransport.createCallback is required`)}function Qt(e,t="callbackTransport"){return {createCallback(n){let a=e();return ut(a,t),{token:n,via:a}}}}function Ne(e){return Qt(()=>e,"createStaticExecutionRefCallbackTransport")}function cr(e){return Ne({meta:"board-live-cards",howToRun:"http:post",whatToRun:chunkVQCIOKJV_cjs.a({kind:"http-url",value:String(e||"").trim()})})}function lr(e){return Ne({meta:"board-live-cards",howToRun:"in-process-loop",whatToRun:chunkVQCIOKJV_cjs.a({kind:"in-process-loop",value:String(e||"").trim()})})}function fr(e){let t=typeof e=="string"?{notifyChannel:e}:e??{},n={};return t.notifyChannel&&(n.notifyChannel=t.notifyChannel),t.boardRuntimeStoreRef&&(n.boardRuntimeStoreRef=t.boardRuntimeStoreRef),t.queueStoreRef&&(n.queueStoreRef=t.queueStoreRef),Ne({meta:"board-live-cards",howToRun:"built-in",whatToRun:chunkVQCIOKJV_cjs.a({kind:"built-in",value:"board-live-cards"}),...Object.keys(n).length>0?{extra:n}:{}})}function Ae(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function Je(e,t){return Ae(e)?e.then(t):t(e)}function lt(e,t){let n={...e};for(let a of t.deleteKeys)delete n[a];return {...n,...t.shallowMerge}}function pr(e,t){return {readValues(a){let o=e(a);return Je(o.listKeys(),d=>{let u=[...d].sort();if(u.length===0)return {version:null,values:{}};let c={},C=null;for(let w of u){let q=o.read(w);Ae(q)?C=(C??Promise.resolve()).then(async()=>{c[w]=await q;}):c[w]=q;}return C?C.then(()=>({version:t(c),values:c})):{version:t(c),values:c}})},writeValues(a,o,d){let u=e(a),c=null;for(let C of d){let w=u.delete(C);Ae(w)&&(c=(c??Promise.resolve()).then(()=>w).then(()=>{}));}for(let[C,w]of Object.entries(o)){let q=u.write(C,w);Ae(q)&&(c=(c??Promise.resolve()).then(()=>q).then(()=>{}));}return c?c.then(()=>t(o)):t(o)}}}function ft(e,t){return {readSnapshot(n){return e.readValues(n)},commitSnapshot(n,a){if(a.schemaVersion!==t)throw new Error(`Unsupported snapshot schema version: ${a.schemaVersion}`);return Je(e.readValues(n),o=>{if(o.version!==a.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:o.version};let d=lt(o.values,a);return Je(e.writeValues(n,d,a.deleteKeys),u=>({ok:true,newVersion:u}))})}}}function ct(e,t){if(!t)return e;let n=e.findIndex(a=>a.id===t);return n===-1?e:e.slice(n+1)}function mt(e){return {readEntriesAfterCursor(t){let n=ct(e.readAllEntries(),t);return n.length===0?{events:[],newCursor:t}:{events:n.map(a=>a.event),newCursor:n[n.length-1].id}},pendingCount(t){return ct(e.readAllEntries(),t).length},appendEvent(t){e.appendEntry({id:e.generateId(),event:t});}}}function gr(e){return {appendEvent(t){return e.append(t).then(()=>{})},async readEntriesAfterCursor(t){let n=await e.readAfter(t||null);return {events:n.entries.map(a=>a.payload),newCursor:n.newCursor??t}}}}function Fe(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function ae(e,t){return Fe(e)?e.then(t):t(e)}function Me(e,t){let n=null;for(let a of e){if(n){n=n.then(()=>t(a)).then(()=>{});continue}let o=t(a);Fe(o)&&(n=Promise.resolve(o).then(()=>{}));}return n??void 0}function zt(e){if(e==null)return null;let t=e.trim();if(!t)return null;try{return JSON.parse(t)}catch{return t}}function Yt(e,t){let n=e.match(t);return n?n[1]:null}function pt(e,t,n){let a={},o=Me(e,d=>{let u=n(d);if(u)return ae(t(d),c=>{a[u]=c;})});return Fe(o)?o.then(()=>a):a}function gt(e,t){return {readSourceData(n,a){return ae(e.read(`${n}/${a}`),zt)},ingestSourceDataStaged(n,a,o,d){return ae(t(o),u=>e.write(`${n}/.staged/${d}/${a}`,u))},commitSourceData(n,a,o){let d=`${n}/.staged/${o}/${a}`,u=`${n}/${a}`;return e.renameKey(d,u)},hasSource(n,a){return e.exists(`${n}/${a}`)},listSources(n){return ae(e.listKeys(`${n}/`),a=>a.filter(o=>!o.includes("/.staged/")).map(o=>o.slice(`${n}/`.length)))}}}function Xt(e,t){let n=(a,o)=>{try{let d=o(a);return Fe(d)?d.catch(u=>t(a,u instanceof Error?u.message:String(u))):void 0}catch(d){try{return t(a,d instanceof Error?d.message:String(d))}catch{return}}};return {appendEntries(a,o){if(!(!a||o.length===0))return ae(e.read(a),d=>e.write(a,[...d??[],...o]))},dispatchEntriesForJournalId(a,o){if(a)return ae(e.read(a),d=>{let u=d;if(!(!u||u.length===0))return ae(Me(u,c=>n(c,o)),()=>e.delete(a))})}}}function Wt(e,t,n){return {readRuntime(a){return ae(e.read(t(a)),o=>o??n())},writeRuntime(a,o){return e.write(t(a),o)}}}function St(e){return {writeComputedValues(t,n){return e.write(`cards/${t}/computed_values`,n)},readComputedValues(t){return e.read(`cards/${t}/computed_values`)},readAllComputedValues(){return ae(e.listKeys("cards/"),t=>pt(t,n=>e.read(n),n=>Yt(n,/^cards\/([^/]+)\/computed_values$/)))},writeDataObjects(t){return Me(Object.entries(t),([n,a])=>{if(n)return a===void 0?e.delete(`data-objects/${n}`):e.write(`data-objects/${n}`,a)})},readDataObject(t){return e.read(`data-objects/${t}`)},readAllDataObjects(){return ae(e.listKeys("data-objects/"),t=>pt(t,n=>e.read(n),n=>n.slice(13)))},writeStatusSnapshot(t){return e.write("status",t)},readStatusSnapshot(){return e.read("status")}}}function He(e,t){function n(){return e.readIndex()??{}}function a(o,d,u){let c=String(d||"").split(".").filter(Boolean);if(c.length===0)return u&&typeof u=="object"&&!Array.isArray(u)?u:{value:u};let C={...o},w=C;for(let q=0;q<c.length-1;q++){let X=c[q],Y=w[X],ee=Y&&typeof Y=="object"&&!Array.isArray(Y)?{...Y}:{};w[X]=ee,w=ee;}return w[c[c.length-1]]=u,C}return {readCard(o){let d=n()[o];return !d||!e.cardExists(d.key)?null:e.readCard(d.key)},readCardKey(o){return n()[o]?.key??null},readAllCards(){let o=[];for(let[d,u]of Object.entries(n())){if(!e.cardExists(u.key))continue;let c=e.readCard(u.key);c?o.push(c):t?.(`[card-store] could not read card "${d}" at key "${u.key}"`);}return o},readChecksumIndex(){let o={};for(let[d,u]of Object.entries(n()))o[d]=u.checksum;return o},changedSince(o){let d=n(),u=[];for(let[c,C]of Object.entries(d))o[c]!==C.checksum&&u.push(c);for(let c of Object.keys(o))d[c]||u.push(c);return u},validateUpsert(o,d){let u=n(),c=u[o],C=Object.entries(u).find(([,w])=>w.key===d);return c&&c.key!==d?{ok:false,error:`Card id "${o}" is already mapped to key "${c.key}", cannot remap to "${d}"`}:C&&C[0]!==o?{ok:false,error:`Key "${d}" is already mapped to card id "${C[0]}", cannot remap to "${o}"`}:{ok:true}},writeCard(o,d,u){let c=n(),C=u??c[o]?.key??e.defaultCardKey(o),w=e.writeCard(C,d);c[o]={key:C,checksum:w,updatedAt:new Date().toISOString()},e.writeIndex(c);},patchCard(o,d,u){let c=n(),C=c[o];if(!C||!e.cardExists(C.key))throw new Error(`card "${o}" not found`);let w=e.readCard(C.key);if(!w||typeof w!="object"||Array.isArray(w))throw new Error(`card "${o}" is not patchable`);let q=a(w,d,u),X=e.writeCard(C.key,q);c[o]={key:C.key,checksum:X,updatedAt:new Date().toISOString()},e.writeIndex(c);},removeCard(o){let d=n(),u=d[o];u&&(e.removeCard(u.key),delete d[o],e.writeIndex(d));},readIndex(){return n()}}}function _e(e,t){return gt(e,t)}function yt(e){return mt(e)}var Oe="v1",Re="board/graph",Ct="board/lastJournalProcessedId";function vr(e){return `cards/${e}/runtime`}function bt(e){return ft(e,Oe)}function qe(e){function t(n){let a=e.read(n);return a==null?null:typeof a=="string"?a:JSON.stringify(a)}return {readTaskExecutorRef(){let n=t("task-executor");if(n?.trim())return chunk7JVHYHT2_cjs.c(n.trim())},writeTaskExecutorRef(n){e.write("task-executor",chunk7JVHYHT2_cjs.b(n));},readChatHandlerFlow(){return e.read("chat-handler-flow")},writeChatHandlerFlow(n){e.write("chat-handler-flow",n);},readBoardRuntimeStoreRef(){return t("board-runtime-store-ref")},writeBoardRuntimeStoreRef(n){e.write("board-runtime-store-ref",n);},readCardStoreRef(){return t("card-store-ref")},writeCardStoreRef(n){e.write("card-store-ref",n);},readOutputsStoreRef(){return t("outputs-store-ref")},writeOutputsStoreRef(n){e.write("outputs-store-ref",n);},readQueueStoreRef(){return t("queue-store-ref")},writeQueueStoreRef(n){e.write("queue-store-ref",n);},readScratchStoreRef(){return t("scratch-store-ref")},writeScratchStoreRef(n){e.write("scratch-store-ref",n);},readChatStoreRef(){return t("chat-store-ref")},writeChatStoreRef(n){e.write("chat-store-ref",n);},readArtifactsStoreRef(){return t("artifacts-store-ref")},writeArtifactsStoreRef(n){e.write("artifacts-store-ref",n);},readFetchedSourcesStoreRef(){return t("fetched-sources-store-ref")},writeFetchedSourcesStoreRef(n){e.write("fetched-sources-store-ref",n);}}}function wt(e){return St(e)}function kt(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function Zt(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function Rt(e,t){return e?.lastRequestedToken?Zt(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<t?"dispatch":"idle":"dispatch"}function er(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"success"}}function ht(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"failure"}}function Pe(e,t){let n=t.state.tasks,a=t.config.tasks,o=Object.keys(n),d=chunkG4XXRHL2_cjs.r(t),u={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},c=new Map;for(let k of d.pending)c.set(k.taskName,k.waitingOn);for(let k of d.unresolved)c.set(k.taskName,k.missingTokens);for(let k of d.blocked)c.set(k.taskName,k.failedTokens);let C=new Map;for(let[k,x]of Object.entries(a))for(let G of x.requires??[]){let K=C.get(G)??[];K.push(k),C.set(G,K);}let w=o.sort().map(k=>{let x=n[k],G=a[k]??{requires:[],provides:[]};x.status==="completed"?u.completed+=1:x.status==="failed"?u.failed+=1:x.status==="in-progress"&&(u.in_progress+=1);let K=G.requires??[],p=G.provides??[],i=Object.keys(x.data??{}).sort(),m=K.filter(P=>t.state.availableOutputs.includes(P)),b=K.filter(P=>!t.state.availableOutputs.includes(P)),I=c.get(k)??b,R=new Set;for(let P of p)for(let $ of C.get(P)??[])$!==k&&R.add($);let O=x.failedAt,j=x.error?{message:x.error,code:"TASK_FAILED",at:O,source:"task-runtime"}:void 0;return {name:k,status:x.status,error:j,requires:K,requires_satisfied:m,requires_missing:b,provides_declared:p,provides_runtime:i,blocked_by:I,unblocks:Array.from(R).sort(),runtime:{attempt_count:x.executionCount??0,restart_count:x.retryCount??0,in_progress_since:x.status==="in-progress"?x.startedAt??null:null,last_transition_at:x.lastUpdated??null,last_completed_at:x.completedAt??null,last_restarted_at:x.startedAt??null,status_age_ms:x.lastUpdated?0:null}}});u.pending=d.pending.length,u.blocked=d.blocked.length,u.unresolved=d.unresolved.length;let q=w.map(k=>({name:k.name,fanOut:k.unblocks.length})).sort((k,x)=>x.fanOut-k.fanOut||k.name.localeCompare(x.name)),X=q.length>0?q[0]:{name:null,fanOut:0},Y=new Set;for(let k of Object.values(a))for(let x of k.requires??[])Y.add(x);let ee=0;for(let[k,x]of Object.entries(a)){let G=(x.requires??[]).length===0,p=(x.provides??[]).some(i=>(C.get(i)??[]).some(m=>m!==k));G&&!p&&(ee+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:o.length,completed:u.completed,eligible:d.eligible.length,pending:u.pending,blocked:u.blocked,unresolved:u.unresolved,failed:u.failed,in_progress:u.in_progress,orphan_cards:ee,topology:{edge_count:Array.from(Y).length,max_fan_out_card:X.name,max_fan_out:X.fanOut}},cards:w}}function tr(){return new Date().toISOString()}function vt(e,t,n,a,o,d,u){return async c=>{let C=[],w=n.cardStore.readCard(c.nodeId);if(!w)return "task-initiate-failure";let q=w.id,X=w.card_data??{},Y=w.source_defs??[],ee=Y.filter(h=>h.optionalForCompletionGating!==true),k=n.cardRuntimeStore.readRuntime(q),x=false,G=()=>{x&&(n.cardRuntimeStore.writeRuntime(q,k),x=false);},K=h=>kt(k._sources[h]),p=(h,v)=>{k._sources[h]=kt(v),x=true;},i=c.taskState?.executionCount??0;if(k._lastExecutionCount!==i&&(k._sources={},k._lastExecutionCount=i,x=true),c.update){let h=c.update,v=h.outputFile;if(v){let B=K(v);if(h.failure){let M=h.rqt??B.lastRequestedToken??B.queueRequestedToken;M&&p(v,ht(B,M));}else {let M=h.rqt;if(!B.lastCompletedToken||M>B.lastCompletedToken){let V=typeof h.deliveryToken=="string"?h.deliveryToken:void 0,H=false;V&&(H=n.fetchedSourcesStore.commitSourceData(q,v,V)),H?p(v,er(B,M)):p(v,ht(B,M));}}G();}}let b={};for(let h of Y)if(h.outputFile){let v=n.fetchedSourcesStore.readSourceData(q,h.outputFile);v!==null&&(b[h.bindTo]=v);}let I={};for(let[h,v]of Object.entries(c.state??{}))if(v!==null&&typeof v=="object"&&!Array.isArray(v)){let B=v[h];I[h]=B!==void 0?B:v;}else I[h]=v;let R={id:q,card_data:{...X},requires:I,source_defs:Y,compute:w.compute};R._sourcesData=b,w.compute&&chunkIXZG74EW_cjs.a.runSync(R,{sourcesData:b}),(d??n.outputStore.writeComputedValues.bind(n.outputStore))(q,R.computed_values??{});let O={...w},j=chunkIXZG74EW_cjs.a.enrichSourcesSync(Array.isArray(w.source_defs)?w.source_defs:void 0,{card_data:w.card_data,requires:I}),P=e.value;O.source_defs=Array.isArray(j)?j.map(h=>({...h,boardDir:typeof h.boardDir=="string"&&h.boardDir?h.boardDir:P})):j;let $=tr(),J=c.update?void 0:$,U=ee.filter(h=>{let v=h.outputFile;if(typeof v!="string"||!v)return true;let B=K(v);J&&(B={...B,queueRequestedToken:J},p(v,B));let M=B.queueRequestedToken??B.lastRequestedToken??$,V=Rt(B,M);return V==="in-flight"?false:V==="dispatch"});if(G(),U.length>0){let h=false,v=$;for(let B of U){let M=B.outputFile;if(typeof M!="string"||!M)continue;let V=K(M),H=V.queueRequestedToken??$;p(M,{...V,lastRequestedToken:H}),v=H,h=true;}return h&&G(),h&&(C.push({taskKind:"source-fetch",payload:{boardRef:chunkVQCIOKJV_cjs.a(e),enrichedCard:O,callbackToken:c.callbackToken,rqt:v}}),n.executionRequestStore.appendEntries(t,C)),"task-initiated"}if(ee.some(h=>{let v=h.outputFile;if(typeof v!="string"||!v)return false;let B=K(v),M=B.queueRequestedToken??B.lastRequestedToken??$;return Rt(B,M)==="in-flight"}))return "task-initiated";let me=w.provides??[],ie={};for(let{bindTo:h,ref:v}of me)ie[h]=chunkIXZG74EW_cjs.a.resolve(R,v);return (u??n.outputStore.writeDataObjects.bind(n.outputStore))(ie),Y.filter(h=>{if(h.optionalForCompletionGating!==true)return false;let v=K(h.outputFile);return !v.lastRequestedToken||!v.lastCompletedToken?true:v.lastCompletedToken<=v.lastRequestedToken}).length>0&&C.push({taskKind:"source-fetch",payload:{boardRef:chunkVQCIOKJV_cjs.a(e),enrichedCard:O,callbackToken:c.callbackToken,rqt:$}}),a(c.nodeId,ie),C.length>0&&n.executionRequestStore.appendEntries(t,C),"task-initiated"}}var Ge={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function xt(e){return {[Re]:e.graph,[Ct]:e.lastDrainedJournalId,board:{runtimeByCardId:e.runtimeByCardId}}}function Et(e){let t=e[Re],n=e[Ct],o=e.board?.runtimeByCardId;if(!t||typeof t!="object")throw new Error(`State snapshot is missing required key: ${Re}`);return {graph:t,lastDrainedJournalId:typeof n=="string"?n:"",runtimeByCardId:o&&typeof o=="object"?o:{}}}function Tt(e){let t=e.requires;return {provides:e.provides?.map(a=>a.bindTo)??[],taskHandlers:["card-handler"],description:e.meta?.title??e.id,...t&&t.length>0?{requires:t}:{}}}function E(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function S(e){return {status:"fail",error:e}}function T(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function rr(e){let t=new TextEncoder().encode(e),n=Array.from(t,a=>String.fromCharCode(a)).join("");return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Ft(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),n=t+"=".repeat((4-t.length%4)%4),a=atob(n),o=Uint8Array.from(a,d=>d.charCodeAt(0));return new TextDecoder().decode(o)}function Be(e){try{let t=JSON.parse(Ft(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function It(e){return rr(JSON.stringify(e))}function At(e){try{let t=JSON.parse(Ft(e));return typeof t?.cbk=="string"&&typeof t?.cid=="string"&&typeof t?.b=="string"&&typeof t?.d=="string"?t:null}catch{return null}}function Z(){return new Date().toISOString()}function nr(e){let t=new Map;return {appendEntries(n,a){if(!n||a.length===0)return;let o=t.get(n)??[];t.set(n,[...o,...a]);},dispatchEntriesForJournalId(n,a){if(!n)return;let o=t.get(n);if(!(!o||o.length===0)){for(let d of o)try{a(d);}catch(u){try{e(d,u instanceof Error?u.message:String(u));}catch{}}t.delete(n);}}}}function qr(e,t,n={}){dt(t.callbackTransport,"createBoardLiveCardsPublic");let a=t.callbackTransport,o=t.onWarn??(()=>{}),d=chunkVQCIOKJV_cjs.a(e),u=n.boardRuntimeStoreRef,c=n.scratchStoreRef,C=n.taskExecutorRef,w=n.chatHandlerFlow;function q(){if(!u)throw new Error(`Board at ${e.value} has no board runtime store configured. Pass boardRuntimeStoreRef at construction or init.`);return u}function X(s){if(s.length!==0)try{let r=t.publishBoardChangeNotifications?.(s);r&&typeof r.catch=="function"&&r.catch(l=>o(`[board-live-cards-public] publishBoardChangeNotifications failed: ${l instanceof Error?l.message:String(l)}`));}catch(r){o(`[board-live-cards-public] publishBoardChangeNotifications failed: ${r instanceof Error?r.message:String(r)}`);}}function Y(){let s=k().readCardStoreRef();if(!s)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let r=t.kvStorageForRef(s);return {readIndex(){return r.read("_index")},writeIndex(l){r.write("_index",l);},readCard(l){return r.read(l)},writeCard(l,g){return r.write(l,g),t.hashFn(g)},removeCard(l){r.delete(l);},cardExists(l){return r.read(l)!==null},defaultCardKey(l){return l}}}let ee={readValues(s){let r=t.kvStorageForRef(q()),l=r.listKeys().sort();if(l.length===0)return {version:null,values:{}};let g={};for(let A of l)g[A]=r.read(A);return {version:t.hashFn(g),values:g}},writeValues(s,r,l){let g=t.kvStorageForRef(q());for(let A of l)g.delete(A);for(let[A,F]of Object.entries(r))g.write(A,F);return t.hashFn(r)}},k=()=>qe(t.kvStorageForRef(q())),x=()=>bt(ee),G=()=>yt(t.journalAdapterForRef(q())),K=()=>He(Y(),o),p=()=>{let s=k().readOutputsStoreRef();if(!s)throw new Error(`Board at ${e.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return wt(t.kvStorageForRef(s))};function i(){return C??k().readTaskExecutorRef()}function m(){return !!x().readSnapshot(e.value).values[Re]}function b(){let s=x().readSnapshot(e.value);if(!s.values[Re])throw new Error(`Board not initialized at ${e.value}`);return Et(s.values)}function I(s,r){let l=x().commitSnapshot(e.value,{schemaVersion:Oe,expectedVersion:r,commitId:t.genId(),committedAt:Z(),deleteKeys:[],shallowMerge:xt(s)});if(!l.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${r??"null"} current=${l.currentVersion??"null"}`)}function R(s){G().appendEvent(s);}async function O(){let r=nr((f,y)=>{let _=f.payload,L=(_?.enrichedCard??{}).id??_?.cardId??"unknown";R({type:"task-failed",taskName:L,error:y,timestamp:Z()});}),l=b(),g=chunkG4XXRHL2_cjs.q(l.graph),{events:A,newCursor:F}=G().readEntriesAfterCursor(l.lastDrainedJournalId),Q=V(),D=_e(Q,f=>t.resolveBlob(f)),W={...l.runtimeByCardId},te=new Map,ge={readRuntime(f){return te.get(f)??W[f]??{_sources:{}}},writeRuntime(f,y){te.set(f,y),W[f]=y;}},Se=[],re=new Map,we={readSourceData(f,y){let _=`${f}/${y}`;return re.has(_)?re.get(_):D.readSourceData(f,y)},ingestSourceDataStaged(f,y,_,se){D.ingestSourceDataStaged(f,y,_,se);},commitSourceData(f,y,_){let se=`${f}/.staged/${_}/${y}`,L=Q.read(se);if(L==null){let z=Q.keyRef?.(se);z&&(L=t.resolveBlob(z));}if(L==null)return false;let ne=`${f}/${y}`,le=L.trim();try{re.set(ne,JSON.parse(le));}catch{re.set(ne,le);}return Se.push({cardId:f,outputFile:y,deliveryToken:_}),true},hasSource(f,y){let _=`${f}/${y}`;return re.has(_)?true:D.hasSource(f,y)},listSources(f){let y=D.listSources(f),_=new Set;for(let L of re.keys())L.startsWith(`${f}/`)&&_.add(L.slice(`${f}/`.length));let se=new Set([...y,..._]);return Array.from(se)}},ce={cardStore:K(),cardRuntimeStore:ge,fetchedSourcesStore:we,outputStore:p(),executionRequestStore:r},ke=[],Ve=[],je=[],Ke=new Map,ze=new Set,Ht=(f,y)=>{ke.push({type:"task-completed",taskName:f,data:y,timestamp:Z()});},Le=(f,y)=>{R({type:"task-failed",taskName:f,error:y,timestamp:Z()});},ve=chunkG4XXRHL2_cjs.u(g,{handlers:{"card-handler":vt(e,F,ce,Ht,Le,(f,y)=>{Ve.push({cardId:f,values:y});},f=>{je.push(f);})},onNodeRemoved:f=>{Ke.delete(f),te.delete(f),delete W[f],ze.add(f);}});for(ke=A;ke.length>0;){let f=ke;ke=[];for(let y of f)if(y.type==="task-restart"){let _=ce.cardStore.readCard(y.taskName);_&&Ke.set(y.taskName,_);}ve.pushAll(f),await ve.waitForHandlers();}let Ye=ve.getState();await ve.dispose({wait:true});let Gt=x().readSnapshot(e.value).version;I({lastDrainedJournalId:F,graph:chunkG4XXRHL2_cjs.p(Ye),runtimeByCardId:W},Gt);for(let{cardId:f,values:y}of Ve)ce.outputStore.writeComputedValues(f,y);for(let f of je)ce.outputStore.writeDataObjects(f);for(let{cardId:f,outputFile:y,deliveryToken:_}of Se)D.commitSourceData(f,y,_);let xe;try{xe=Pe(d,Ye),ce.outputStore.writeStatusSnapshot(xe);}catch(f){o(`[board-live-cards-public] status publish failed: ${f instanceof Error?f.message:String(f)}`);}let he=[];for(let{cardId:f,values:y}of Ve)he.push({kind:"computed_values",cardId:f,values:y});for(let f of je)for(let[y,_]of Object.entries(f))y&&he.push({kind:"data_object",key:y,payload:_});for(let[f,y]of Ke)he.push({kind:"card_refreshed",cardId:f,card:y});for(let f of ze)he.push({kind:"card_removed",cardId:f});xe!==void 0&&he.push({kind:"status",status:xe}),X(he);let ye=i()??{howToRun:"built-in",whatToRun:chunkVQCIOKJV_cjs.a({kind:"built-in",value:"source-cli-task-executor"})},Xe=t.supportsDirectSourceOutput?.(ye)===true;r.dispatchEntriesForJournalId(F,f=>{if(f.taskKind!=="source-fetch"){o(`[process-accumulated-events] unknown taskKind "${f.taskKind}" \u2014 skipping`);return}let y=f.payload,_=y.enrichedCard?.id??"unknown",se=y.enrichedCard?.source_defs??[];if(ye.howToRun==="queue-storage"&&Xe){try{let L=t.queueStorageForRef(j(),"task-executor"),ne=typeof ye.extra?.boardId=="string"?ye.extra.boardId:void 0,le=[];for(let z of se){if(!z.outputFile){o(`[dispatch] source "${z.bindTo}" has no outputFile \u2014 skipping`);continue}let Ee=t.genId(),Te=`${_}/.staged/${Ee}/${z.outputFile}`,We=Q.keyRef?.(Te);if(!We)continue;let Ze={ref:chunkVQCIOKJV_cjs.a(We),deliveryToken:Ee,outputFile:z.outputFile,cardId:_},Ut=It({cbk:y.callbackToken,rg:e.value,br:chunkVQCIOKJV_cjs.a(e),cid:_,b:z.bindTo,d:z.outputFile,cs:void 0,rqt:y.rqt,dt:Ze.deliveryToken});le.push({...ne?{boardId:ne}:{},ref:ye,args:{source_def:z,base_ref:chunkVQCIOKJV_cjs.a(e),callback:a.createCallback(Ut),output:Ze}});}le.length>0&&L.enqueueMany(le);}catch(L){Le(_,L instanceof Error?L.message:String(L));}return}for(let L of se){if(!L.outputFile){o(`[dispatch] source "${L.bindTo}" has no outputFile \u2014 skipping`);continue}let ne;if(Xe){let z=t.genId(),Ee=`${_}/.staged/${z}/${L.outputFile}`,Te=Q.keyRef?.(Ee);Te&&(ne={ref:chunkVQCIOKJV_cjs.a(Te),deliveryToken:z,outputFile:L.outputFile,cardId:_});}let le=It({cbk:y.callbackToken,rg:e.value,br:chunkVQCIOKJV_cjs.a(e),cid:_,b:L.bindTo,d:L.outputFile,cs:void 0,rqt:y.rqt,...ne?{dt:ne.deliveryToken}:{}});t.dispatchExecution(ye,{source_def:L,base_ref:chunkVQCIOKJV_cjs.a(e),callback:a.createCallback(le),...ne?{output:ne}:{}}).catch(z=>Le(_,z instanceof Error?z.message:String(z)));}});}function j(){let s=k().readQueueStoreRef();if(!s)throw new Error(`Board at ${e.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);return s}function P(){let s=t.queueStorageForRef(j(),"process-accumulated");s.enqueueIfAbsent?s.enqueueIfAbsent({boardRef:chunkVQCIOKJV_cjs.a(e)},`process-accumulated:${chunkVQCIOKJV_cjs.a(e)}`):s.enqueue({boardRef:chunkVQCIOKJV_cjs.a(e)}),t.requestProcessAccumulated?.();}function $(){let s=t.queueStorageForRef(j(),"process-accumulated");for(;;){let r=s.lease({max:64,visibilityMs:1e3});if(r.length<=0)return;for(let l of r)s.ack(l.id,l.leaseToken);if(r.length<64)return}}async function J(){try{let s=()=>{let l=b(),{events:g}=G().readEntriesAfterCursor(l.lastDrainedJournalId);g.length<=0||P();},r=await chunkVQCIOKJV_cjs.c(t.lock,O,s);return E({ran:r!==!1})}catch(s){return T(s)}}function U(){P();}function de(s){try{let r=s.params?.cardStoreRef;if(!r)return S("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(u=s.params?.boardRuntimeStoreRef,!u)return S("init requires params.boardRuntimeStoreRef \u2014 pass the board runtime store ref here");if(!m()){let W=chunkG4XXRHL2_cjs.a(Ge);I({lastDrainedJournalId:"",graph:chunkG4XXRHL2_cjs.p(W),runtimeByCardId:{}},null);}let l=s.params?.outputsStoreRef;if(!l)return S("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let g=s.params?.queueStoreRef;if(!g)return S("init requires params.queueStoreRef \u2014 pass the queue store ref here");let A=s.params?.fetchedSourcesStoreRef;if(!A)return S("init requires params.fetchedSourcesStoreRef \u2014 pass the fetched sources store ref here");if(c=s.params?.scratchStoreRef,!c)return S("init requires params.scratchStoreRef \u2014 pass the scratch store ref here");let F=s.params?.chatStoreRef;if(!F)return S("init requires params.chatStoreRef \u2014 pass the chat store ref here");let Q=s.params?.artifactsStoreRef;if(!Q)return S("init requires params.artifactsStoreRef \u2014 pass the artifacts store ref here");let D=k();D.writeBoardRuntimeStoreRef(u),D.writeCardStoreRef(r),D.writeOutputsStoreRef(l),D.writeQueueStoreRef(g),D.writeFetchedSourcesStoreRef(A),D.writeChatStoreRef(F),D.writeArtifactsStoreRef(Q);try{p().writeStatusSnapshot(Pe(d,chunkG4XXRHL2_cjs.q(b().graph)));}catch{}return E()}catch(r){return T(r)}}function me(s){try{let r=p().readStatusSnapshot();if(!r){r=Pe(d,chunkG4XXRHL2_cjs.q(b().graph));try{p().writeStatusSnapshot(r);}catch{}}return E(r)}catch(r){return T(r)}}function ie(s){try{let r=s.params?.id;if(!r)return S("removeCard requires params.id");try{t.kvStorage("card-upsert").delete(r);}catch{}return R({type:"task-removal",taskName:r,timestamp:Z()}),U(),E()}catch(r){return T(r)}}function Ce(s){try{let r=s.params?.cardId;if(!r)return S("addCardFiles requires params.cardId");let l=chunkYMEIPKLW_cjs.a(K()).appendFiles({params:{id:r},body:s.body});if(l.status!=="success")return l;let g=h({params:{cardId:r}});return g.status!=="success"?g:E({cardId:r,files_added:l.data.files_added,notified:!0})}catch(r){return T(r)}}function h(s){try{let r=s.params?.cardId;if(!r)return S("cardRefreshedNotify requires params.cardId");let l=K().readCard(r);return l?(X([{kind:"card_refreshed",cardId:r,card:l}]),E({cardId:r,notified:!0})):S(`Card "${r}" not found in board at ${e.value}`)}catch(r){return T(r)}}function v(s){try{let r=s.params?.id;return r?(R({type:"task-restart",taskName:r,timestamp:Z()}),U(),E()):S("retrigger requires params.id")}catch(r){return T(r)}}async function B(s){return $(),J()}function M(){let s=k().readFetchedSourcesStoreRef();if(!s)throw new Error(`Board at ${e.value} has no fetched sources store configured. Run: init --fetched-sources-store-ref <b64-ref>`);return s}function V(){return t.blobStorageForRef(M())}function H(s){try{let r=s.params?.cardId,l=s.params?.all,g=!!s.params?.restart;if(!r&&!l)return S("upsertCard requires --card-id <id> or --all");let A=l?K().readAllCards().map(F=>F.id):[r];for(let F of A)if(!K().readCard(F))return S(`Card "${F}" not found in board at ${e.value}`);for(let F of A){let Q=K().readCard(F),D=Tt(Q),W=t.hashFn(D),te=t.kvStorage("card-upsert"),ge=te.read(F),Se=ge?.taskConfigHash!==W;if(!(!Se&&!g)){if(Se){let re=ge?.blobRef??K().readCardKey(F)??F;R({type:"task-upsert",taskName:F,taskConfig:D,timestamp:Z()}),te.write(F,{blobRef:re,taskConfigHash:W,updatedAt:Z()});}g&&R({type:"task-restart",taskName:F,timestamp:Z()});}}return U(),E()}catch(r){return T(r)}}function oe(s){try{let r=s.params?.token;if(!r)return S("taskFailed requires params.token");let l=s.params?.error??"unknown error",g=Be(r);return g?(R({type:"task-failed",taskName:g.taskName,error:l,timestamp:Z()}),U(),E()):S("Invalid callback token")}catch(r){return T(r)}}function pe(s){try{let r=s.params?.token;if(!r)return S("taskProgress requires params.token");let g=(s.body??{}).update??{},A=Be(r);return A?(R({type:"task-progress",taskName:A.taskName,update:g,timestamp:Z()}),U(),E()):S("Invalid callback token")}catch(r){return T(r)}}function be(s){try{let r=s.params?.token,l=s.params?.ref;if(!r)return S("sourceDataFetched requires params.token");if(!l)return S("sourceDataFetched requires params.ref");let g=At(r);if(!g)return S("Invalid source token");let{cbk:A,cid:F,b:Q,d:D,cs:W,rqt:te,dt:ge}=g,Se=_e(V(),ke=>t.resolveBlob(ke)),re=ge||t.genId();ge||Se.ingestSourceDataStaged(F,D,chunkVQCIOKJV_cjs.b(l),re);let we=Be(A);if(!we)return S("Invalid callback token embedded in source token");let ce=Z();return R({type:"task-progress",taskName:we.taskName,update:{bindTo:Q,outputFile:D,fetchedAt:ce,deliveryToken:re,sourceChecksum:W,rqt:te},timestamp:ce}),U(),E()}catch(r){return T(r)}}function ue(s){try{let r=s.params?.token,l=s.params?.reason??"unknown";if(!r)return S("sourceDataFetchFailure requires params.token");let g=At(r);if(!g)return S("Invalid source token");let{cbk:A,b:F,d:Q,cs:D,rqt:W}=g,te=Be(A);return te?(R({type:"task-progress",taskName:te.taskName,update:{bindTo:F,outputFile:Q,failure:!0,reason:l,sourceChecksum:D,rqt:W},timestamp:Z()}),U(),E()):S("Invalid callback token embedded in source token")}catch(r){return T(r)}}function _t(s){try{let r=k().readCardStoreRef();return r?E({storeRef:r}):S(`Board at ${e.value} has no card store configured`)}catch(r){return T(r)}}function Ot(s){try{return E({storeRef:u??null})}catch(r){return T(r)}}function qt(s){try{let r=k().readOutputsStoreRef();return r?E({storeRef:r}):S(`Board at ${e.value} has no outputs store configured`)}catch(r){return T(r)}}function Pt(s){try{return E({storeRef:c??null})}catch(r){return T(r)}}function Bt(s){try{let r=k().readChatStoreRef();return E({storeRef:r})}catch(r){return T(r)}}function Vt(s){try{let r=k().readArtifactsStoreRef();return E({storeRef:r})}catch(r){return T(r)}}function jt(s){try{let r=k().readFetchedSourcesStoreRef();return E({storeRef:r})}catch(r){return T(r)}}function Kt(s){try{let r=s.params?.key;if(!r)return S("getConfig requires params.key");let l=k(),g;switch(r){case "task-executor":g=C??null;break;case "chat-handler-flow":g=w??null;break;case "board-runtime-store-ref":g=l.readBoardRuntimeStoreRef();break;case "card-store-ref":g=l.readCardStoreRef();break;case "outputs-store-ref":g=l.readOutputsStoreRef();break;case "scratch-store-ref":g=c??null;break;case "chat-store-ref":g=l.readChatStoreRef();break;case "artifacts-store-ref":g=l.readArtifactsStoreRef();break;case "fetched-sources-store-ref":g=l.readFetchedSourcesStoreRef();break;default:return S(`getConfig: unknown key "${r}"`)}return E({value:g})}catch(r){return T(r)}}function Lt(s){try{let r=s.params?.key;if(!r)return S("getOutputsDataObject requires params.key");let l=p().readDataObject(r);return E(l)}catch(r){return T(r)}}function $t(s){try{return E(p().readAllDataObjects())}catch(r){return T(r)}}function Dt(s){try{let r=s.params?.key;if(!r)return S("getOutputsComputedValues requires params.key");let l=p().readComputedValues(r);return E(l)}catch(r){return T(r)}}function Nt(s){try{return E(p().readAllComputedValues())}catch(r){return T(r)}}function Ue(){return _e(V(),s=>t.resolveBlob(s))}function Qe(s){let r=V().keyRef?.(s);if(!r)throw new Error("configured fetched-sources store does not support keyRef");return chunkVQCIOKJV_cjs.a(r)}function Jt(s){try{let r=s.params?.key;if(!r)return S("getOutputsFetchedSources requires params.key");let l=Ue().listSources(r),g={};for(let A of l)g[A]=Qe(`${r}/${A}`);return E(g)}catch(r){return T(r)}}function Mt(s){try{let r=Ue(),l=new Set;for(let A of V().listKeys()){let F=A.indexOf("/");F>0&&!A.includes("/.staged/")&&l.add(A.slice(0,F));}let g={};for(let A of l){let F=r.listSources(A);if(F.length>0){g[A]={};for(let Q of F)g[A][Q]=Qe(`${A}/${Q}`);}}return E(g)}catch(r){return T(r)}}return {init:de,status:me,getBoardRuntimeStoreRef:Ot,getCardStoreRef:_t,getOutputsStoreRef:qt,getScratchStoreRef:Pt,getChatStoreRef:Bt,getArtifactsStoreRef:Vt,getFetchedSourcesStoreRef:jt,getConfig:Kt,getOutputsDataObject:Lt,getAllOutputsDataObjects:$t,getOutputsComputedValues:Dt,getAllOutputsComputedValues:Nt,getOutputsFetchedSources:Jt,getAllOutputsFetchedSources:Mt,removeCard:ie,addCardFiles:Ce,cardRefreshedNotify:h,retrigger:v,processAccumulatedEvents:B,upsertCard:H,taskFailed:oe,taskProgress:pe,sourceDataFetched:be,sourceDataFetchFailure:ue}}function Pr(e,t,n){let a=n?.taskExecutorRef,o=()=>{if(n){if(!n.boardRuntimeStoreRef)throw new Error(`Board at ${e.value} requires boardRuntimeStoreRef for non-core runtime operations.`);return qe(t.kvStorageForRef(n.boardRuntimeStoreRef))}return qe(t.kvStorage("config"))};function d(){let p=o().readCardStoreRef();if(!p)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let i=t.kvStorageForRef(p);return {readIndex(){return i.read("_index")},writeIndex(m){i.write("_index",m);},readCard(m){return i.read(m)},writeCard(m,b){return i.write(m,b),t.hashFn(b)},removeCard(m){i.delete(m);},cardExists(m){return i.read(m)!==null},defaultCardKey(m){return m}}}let u=()=>He(d(),t.onWarn??(()=>{}));function c(){return a??o().readTaskExecutorRef()}async function C(p,i){let m=t.validateSchema(i),b=[],I=c();if(I&&Array.isArray(i.source_defs))for(let O of i.source_defs){let j=typeof O.bindTo=="string"?O.bindTo:"(unknown)";try{let P;try{P=await t.invokeExecutor(I,"validate-source-def",{timeout:t.executorTimeouts?.validationMs??1e4,input:JSON.stringify(O)});}catch(J){let U=J;if(P=typeof U?.stdout=="string"?U.stdout:"",!P.trim()){b.push(`source "${j}": executor validate-source-def failed \u2014 ${J instanceof Error?J.message:String(J)}`);continue}}let $=JSON.parse(P.trim());if(!$.ok&&Array.isArray($.errors))for(let J of $.errors)b.push(`source "${j}": ${J}`);}catch(P){b.push(`source "${j}": executor validate-source-def failed \u2014 ${P instanceof Error?P.message:String(P)}`);}}let R=[...m.errors,...b];return E({cardId:p,isValid:R.length===0,issues:R})}function w(p,i){let m=p.params?.sourceIdx,b=p.params?.outRef;if(m===void 0)return S(`${i} requires params.sourceIdx`);if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return S(`${i} requires card JSON object in body`);let I=p.body,R=I["card-content"]??I,O=I["mock-projections"]??{},j=R.source_defs??[];if(m<0||m>=j.length)return S(`sourceIdx ${m} out of range (card has ${j.length} source(s))`);let P=j[m],$=typeof P.bindTo=="string"?P.bindTo:"source";return {src:P,bindTo:$,outRef:b,mockProjections:O}}async function q(p){try{if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return S("validateCardPreflight requires card JSON object in body");let i=p.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)";return await C(b,m)}catch(i){return T(i)}}async function X(p){try{let i=w(p,"probeSourcePreflight");if("status"in i)return i;let m=c();if(!m)return S("No task-executor registered for this board");try{let b={...i.src,_projections:i.mockProjections},I=await t.invokeExecutor(m,"probe-source-preflight",{timeout:i.src.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(b)}),R=JSON.parse(I.trim());return R.ok?E({bindTo:i.bindTo,reachable:R.reachable,latencyMs:R.latencyMs,note:R.note}):S(R.error??"Preflight probe failed")}catch{return S("Executor does not support probe-source-preflight")}}catch(i){return T(i)}}async function Y(p){try{let i=w(p,"runSourcePreflight");if("status"in i)return i;let m=c();if(!m)return S("No task-executor registered for this board");try{let b={...i.src,_projections:i.mockProjections},I=await t.invokeExecutor(m,"run-source-preflight",{timeout:i.src.timeout??t.executorTimeouts?.probeMs??6e4,input:JSON.stringify(b)}),R=JSON.parse(I.trim());if(!R.ok)return E({bindTo:i.bindTo,ok:!1,result:null,issues:[R.error??"Preflight run failed"]});if(i.outRef){let O=chunkVQCIOKJV_cjs.b(i.outRef);t.absoluteBlob.write(O.value,JSON.stringify(R.resultValue,null,2));}return E({bindTo:typeof R.bindTo=="string"?R.bindTo:i.bindTo,ok:!0,result:R.resultValue??null,issues:[]})}catch(b){let I=b instanceof Error?b.message:String(b);return E({bindTo:i.bindTo,ok:!1,result:null,issues:[I]})}}catch(i){return T(i)}}async function ee(p){try{let i=c();if(!i)return S("No task-executor registered for this board");let m=await t.invokeExecutor(i,"describe-capabilities",{timeout:t.executorTimeouts?.describeMs??1e4});return E(JSON.parse(m.trim()))}catch(i){return T(i)}}function k(p){try{let i=p.body;if(!i||!Array.isArray(i.ops))return S("updatesInCardStore requires body.ops array");let m=i.ops,b=u();for(let I of m){let R=I.op,O=I.id;if(!O)return S('op is missing "id"');if(R==="update"){let j=I["card-content"];if(!j)return S(`update op for "${O}" is missing "card-content"`);b.writeCard(O,j);}else return S(`Unknown op type: "${R??"(none)"}"`)}return E()}catch(i){return T(i)}}function x(p){try{let i=p.body;if(!i||!Array.isArray(i.ids))return S("readFromCardStore requires body.ids array");let m=i.ids,b=u(),I=m.map(R=>({id:R,"card-content":b.readCard(R)}));return E({cards:I})}catch(i){return T(i)}}function G(p){try{if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return S("evalCardCompute requires a JSON object in body");let i=p.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)",I=i["mock-fetched-sources"]??{},R=i["mock-requires"]??{},O=m.compute;if(!O||!Array.isArray(O)||O.length===0)return E({cardId:b,ok:!0,computed_values:{},errors:[]});let j={id:b,card_data:m.card_data??{},requires:R,source_defs:m.source_defs,compute:O},P=chunkIXZG74EW_cjs.a.runSync(j,{sourcesData:I}),$=P.node.computed_values??{},J=P.errors??[];return E({cardId:b,ok:J.length===0,computed_values:$,errors:J})}catch(i){return T(i)}}async function K(p){try{if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return S("simulateCardCycle requires a JSON object in body");let i=p.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)",I=i["mock-fetched-sources"]??{},R=i["mock-requires"]??{},O=await C(b,m),j=O.status==="success"?{isValid:O.data.isValid,issues:O.data.issues}:{isValid:!1,issues:[O.status==="fail"?O.error:"internal error"]},P=m.source_defs??[],$=m.card_data??{},J=[],U=[];if(P.length>0){J=chunkIXZG74EW_cjs.a.enrichSourcesSync(P,{card_data:$,requires:R});for(let V of J){let H=V.projections,oe=V._projections;if(H&&oe){for(let pe of Object.keys(H))if(oe[pe]===void 0){let be=typeof V.bindTo=="string"?V.bindTo:"(unknown)";U.push({bindTo:be,key:pe,error:`Projection "${pe}" resolved to undefined`});}}}}let de=[],me={...I},ie=i["task-executor-ref"],Ce=(ie?.howToRun&&ie?.whatToRun?ie:void 0)??c();for(let V=0;V<J.length;V++){let H=J[V],oe=typeof H.bindTo=="string"?H.bindTo:`source_${V}`;if(!Ce){de.push({bindTo:oe,skipped:!0,error:"No task executor configured"});continue}try{let pe={...H},be=await t.invokeExecutor(Ce,"run-source-preflight",{timeout:H.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(pe)}),ue=JSON.parse(be.trim());ue.ok&&!Object.prototype.hasOwnProperty.call(I,oe)&&Object.prototype.hasOwnProperty.call(ue,"resultValue")&&(me[oe]=ue.resultValue),de.push({bindTo:oe,reachable:ue.reachable,latencyMs:ue.latencyMs,error:ue.ok?void 0:ue.error});}catch{de.push({bindTo:oe,skipped:!0,error:"Executor does not support run-source-preflight"});}}let h=m.compute,v={},B=[];if(h&&Array.isArray(h)&&h.length>0){let V={id:b,card_data:$,requires:R,source_defs:m.source_defs,compute:h},H=chunkIXZG74EW_cjs.a.runSync(V,{sourcesData:me});v=H.node.computed_values??{},B=H.errors??[];}let M=j.isValid&&U.length===0&&B.length===0&&de.every(V=>V.reachable!==!1);return E({cardId:b,ok:M,validation:j,source_probes:de,projection_errors:U,fetched_sources:me,computed_values:v,compute_errors:B})}catch(i){return T(i)}}return {validateCardPreflight:q,probeSourcePreflight:X,runSourcePreflight:Y,evalCardCompute:G,simulateCardCycle:K,describeTaskExecutorCapabilities:ee,updatesInCardStore:k,readFromCardStore:x}}
2
+ exports.a=pr;exports.b=ft;exports.c=gr;exports.d=dt;exports.e=cr;exports.f=lr;exports.g=fr;exports.h=gt;exports.i=Xt;exports.j=Wt;exports.k=St;exports.l=He;exports.m=Oe;exports.n=Re;exports.o=vr;exports.p=kt;exports.q=Rt;exports.r=er;exports.s=ht;exports.t=Pe;exports.u=Ge;exports.v=xt;exports.w=Et;exports.x=Tt;exports.y=qr;exports.z=Pr;//# sourceMappingURL=chunk-ZENTBLLA.cjs.map
3
+ //# sourceMappingURL=chunk-ZENTBLLA.cjs.map
@@ -0,0 +1,3 @@
1
+ import {b as b$1,c as c$1}from'./chunk-ANKA7HEJ.js';import {a,b,c}from'./chunk-44L64VQ2.js';import {r,a as a$1,p,q,u}from'./chunk-VGT3TRQG.js';import {a as a$3}from'./chunk-JMDHDY6M.js';import {a as a$2}from'./chunk-KBELAKIY.js';function it(e){return typeof e=="string"&&e.trim().length>0}function ut(e,t){if(!e||typeof e!="object")throw new Error(`${t}: adapter.selfRef is required`);if(!it(e.howToRun))throw new Error(`${t}: adapter.selfRef.howToRun is required`);if(!it(e.whatToRun))throw new Error(`${t}: adapter.selfRef.whatToRun is required`)}function dt(e,t){if(!e||typeof e!="object")throw new Error(`${t}: adapter.callbackTransport is required`);if(typeof e.createCallback!="function")throw new Error(`${t}: adapter.callbackTransport.createCallback is required`)}function Qt(e,t="callbackTransport"){return {createCallback(n){let a=e();return ut(a,t),{token:n,via:a}}}}function Ne(e){return Qt(()=>e,"createStaticExecutionRefCallbackTransport")}function cr(e){return Ne({meta:"board-live-cards",howToRun:"http:post",whatToRun:a({kind:"http-url",value:String(e||"").trim()})})}function lr(e){return Ne({meta:"board-live-cards",howToRun:"in-process-loop",whatToRun:a({kind:"in-process-loop",value:String(e||"").trim()})})}function fr(e){let t=typeof e=="string"?{notifyChannel:e}:e??{},n={};return t.notifyChannel&&(n.notifyChannel=t.notifyChannel),t.boardRuntimeStoreRef&&(n.boardRuntimeStoreRef=t.boardRuntimeStoreRef),t.queueStoreRef&&(n.queueStoreRef=t.queueStoreRef),Ne({meta:"board-live-cards",howToRun:"built-in",whatToRun:a({kind:"built-in",value:"board-live-cards"}),...Object.keys(n).length>0?{extra:n}:{}})}function Ae(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function Je(e,t){return Ae(e)?e.then(t):t(e)}function lt(e,t){let n={...e};for(let a of t.deleteKeys)delete n[a];return {...n,...t.shallowMerge}}function pr(e,t){return {readValues(a){let o=e(a);return Je(o.listKeys(),d=>{let u=[...d].sort();if(u.length===0)return {version:null,values:{}};let c={},C=null;for(let w of u){let q=o.read(w);Ae(q)?C=(C??Promise.resolve()).then(async()=>{c[w]=await q;}):c[w]=q;}return C?C.then(()=>({version:t(c),values:c})):{version:t(c),values:c}})},writeValues(a,o,d){let u=e(a),c=null;for(let C of d){let w=u.delete(C);Ae(w)&&(c=(c??Promise.resolve()).then(()=>w).then(()=>{}));}for(let[C,w]of Object.entries(o)){let q=u.write(C,w);Ae(q)&&(c=(c??Promise.resolve()).then(()=>q).then(()=>{}));}return c?c.then(()=>t(o)):t(o)}}}function ft(e,t){return {readSnapshot(n){return e.readValues(n)},commitSnapshot(n,a){if(a.schemaVersion!==t)throw new Error(`Unsupported snapshot schema version: ${a.schemaVersion}`);return Je(e.readValues(n),o=>{if(o.version!==a.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:o.version};let d=lt(o.values,a);return Je(e.writeValues(n,d,a.deleteKeys),u=>({ok:true,newVersion:u}))})}}}function ct(e,t){if(!t)return e;let n=e.findIndex(a=>a.id===t);return n===-1?e:e.slice(n+1)}function mt(e){return {readEntriesAfterCursor(t){let n=ct(e.readAllEntries(),t);return n.length===0?{events:[],newCursor:t}:{events:n.map(a=>a.event),newCursor:n[n.length-1].id}},pendingCount(t){return ct(e.readAllEntries(),t).length},appendEvent(t){e.appendEntry({id:e.generateId(),event:t});}}}function gr(e){return {appendEvent(t){return e.append(t).then(()=>{})},async readEntriesAfterCursor(t){let n=await e.readAfter(t||null);return {events:n.entries.map(a=>a.payload),newCursor:n.newCursor??t}}}}function Fe(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function ae(e,t){return Fe(e)?e.then(t):t(e)}function Me(e,t){let n=null;for(let a of e){if(n){n=n.then(()=>t(a)).then(()=>{});continue}let o=t(a);Fe(o)&&(n=Promise.resolve(o).then(()=>{}));}return n??void 0}function zt(e){if(e==null)return null;let t=e.trim();if(!t)return null;try{return JSON.parse(t)}catch{return t}}function Yt(e,t){let n=e.match(t);return n?n[1]:null}function pt(e,t,n){let a={},o=Me(e,d=>{let u=n(d);if(u)return ae(t(d),c=>{a[u]=c;})});return Fe(o)?o.then(()=>a):a}function gt(e,t){return {readSourceData(n,a){return ae(e.read(`${n}/${a}`),zt)},ingestSourceDataStaged(n,a,o,d){return ae(t(o),u=>e.write(`${n}/.staged/${d}/${a}`,u))},commitSourceData(n,a,o){let d=`${n}/.staged/${o}/${a}`,u=`${n}/${a}`;return e.renameKey(d,u)},hasSource(n,a){return e.exists(`${n}/${a}`)},listSources(n){return ae(e.listKeys(`${n}/`),a=>a.filter(o=>!o.includes("/.staged/")).map(o=>o.slice(`${n}/`.length)))}}}function Xt(e,t){let n=(a,o)=>{try{let d=o(a);return Fe(d)?d.catch(u=>t(a,u instanceof Error?u.message:String(u))):void 0}catch(d){try{return t(a,d instanceof Error?d.message:String(d))}catch{return}}};return {appendEntries(a,o){if(!(!a||o.length===0))return ae(e.read(a),d=>e.write(a,[...d??[],...o]))},dispatchEntriesForJournalId(a,o){if(a)return ae(e.read(a),d=>{let u=d;if(!(!u||u.length===0))return ae(Me(u,c=>n(c,o)),()=>e.delete(a))})}}}function Wt(e,t,n){return {readRuntime(a){return ae(e.read(t(a)),o=>o??n())},writeRuntime(a,o){return e.write(t(a),o)}}}function St(e){return {writeComputedValues(t,n){return e.write(`cards/${t}/computed_values`,n)},readComputedValues(t){return e.read(`cards/${t}/computed_values`)},readAllComputedValues(){return ae(e.listKeys("cards/"),t=>pt(t,n=>e.read(n),n=>Yt(n,/^cards\/([^/]+)\/computed_values$/)))},writeDataObjects(t){return Me(Object.entries(t),([n,a])=>{if(n)return a===void 0?e.delete(`data-objects/${n}`):e.write(`data-objects/${n}`,a)})},readDataObject(t){return e.read(`data-objects/${t}`)},readAllDataObjects(){return ae(e.listKeys("data-objects/"),t=>pt(t,n=>e.read(n),n=>n.slice(13)))},writeStatusSnapshot(t){return e.write("status",t)},readStatusSnapshot(){return e.read("status")}}}function He(e,t){function n(){return e.readIndex()??{}}function a(o,d,u){let c=String(d||"").split(".").filter(Boolean);if(c.length===0)return u&&typeof u=="object"&&!Array.isArray(u)?u:{value:u};let C={...o},w=C;for(let q=0;q<c.length-1;q++){let X=c[q],Y=w[X],ee=Y&&typeof Y=="object"&&!Array.isArray(Y)?{...Y}:{};w[X]=ee,w=ee;}return w[c[c.length-1]]=u,C}return {readCard(o){let d=n()[o];return !d||!e.cardExists(d.key)?null:e.readCard(d.key)},readCardKey(o){return n()[o]?.key??null},readAllCards(){let o=[];for(let[d,u]of Object.entries(n())){if(!e.cardExists(u.key))continue;let c=e.readCard(u.key);c?o.push(c):t?.(`[card-store] could not read card "${d}" at key "${u.key}"`);}return o},readChecksumIndex(){let o={};for(let[d,u]of Object.entries(n()))o[d]=u.checksum;return o},changedSince(o){let d=n(),u=[];for(let[c,C]of Object.entries(d))o[c]!==C.checksum&&u.push(c);for(let c of Object.keys(o))d[c]||u.push(c);return u},validateUpsert(o,d){let u=n(),c=u[o],C=Object.entries(u).find(([,w])=>w.key===d);return c&&c.key!==d?{ok:false,error:`Card id "${o}" is already mapped to key "${c.key}", cannot remap to "${d}"`}:C&&C[0]!==o?{ok:false,error:`Key "${d}" is already mapped to card id "${C[0]}", cannot remap to "${o}"`}:{ok:true}},writeCard(o,d,u){let c=n(),C=u??c[o]?.key??e.defaultCardKey(o),w=e.writeCard(C,d);c[o]={key:C,checksum:w,updatedAt:new Date().toISOString()},e.writeIndex(c);},patchCard(o,d,u){let c=n(),C=c[o];if(!C||!e.cardExists(C.key))throw new Error(`card "${o}" not found`);let w=e.readCard(C.key);if(!w||typeof w!="object"||Array.isArray(w))throw new Error(`card "${o}" is not patchable`);let q=a(w,d,u),X=e.writeCard(C.key,q);c[o]={key:C.key,checksum:X,updatedAt:new Date().toISOString()},e.writeIndex(c);},removeCard(o){let d=n(),u=d[o];u&&(e.removeCard(u.key),delete d[o],e.writeIndex(d));},readIndex(){return n()}}}function _e(e,t){return gt(e,t)}function yt(e){return mt(e)}var Oe="v1",Re="board/graph",Ct="board/lastJournalProcessedId";function vr(e){return `cards/${e}/runtime`}function bt(e){return ft(e,Oe)}function qe(e){function t(n){let a=e.read(n);return a==null?null:typeof a=="string"?a:JSON.stringify(a)}return {readTaskExecutorRef(){let n=t("task-executor");if(n?.trim())return c$1(n.trim())},writeTaskExecutorRef(n){e.write("task-executor",b$1(n));},readChatHandlerFlow(){return e.read("chat-handler-flow")},writeChatHandlerFlow(n){e.write("chat-handler-flow",n);},readBoardRuntimeStoreRef(){return t("board-runtime-store-ref")},writeBoardRuntimeStoreRef(n){e.write("board-runtime-store-ref",n);},readCardStoreRef(){return t("card-store-ref")},writeCardStoreRef(n){e.write("card-store-ref",n);},readOutputsStoreRef(){return t("outputs-store-ref")},writeOutputsStoreRef(n){e.write("outputs-store-ref",n);},readQueueStoreRef(){return t("queue-store-ref")},writeQueueStoreRef(n){e.write("queue-store-ref",n);},readScratchStoreRef(){return t("scratch-store-ref")},writeScratchStoreRef(n){e.write("scratch-store-ref",n);},readChatStoreRef(){return t("chat-store-ref")},writeChatStoreRef(n){e.write("chat-store-ref",n);},readArtifactsStoreRef(){return t("artifacts-store-ref")},writeArtifactsStoreRef(n){e.write("artifacts-store-ref",n);},readFetchedSourcesStoreRef(){return t("fetched-sources-store-ref")},writeFetchedSourcesStoreRef(n){e.write("fetched-sources-store-ref",n);}}}function wt(e){return St(e)}function kt(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function Zt(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function Rt(e,t){return e?.lastRequestedToken?Zt(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<t?"dispatch":"idle":"dispatch"}function er(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"success"}}function ht(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"failure"}}function Pe(e,t){let n=t.state.tasks,a=t.config.tasks,o=Object.keys(n),d=r(t),u={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},c=new Map;for(let k of d.pending)c.set(k.taskName,k.waitingOn);for(let k of d.unresolved)c.set(k.taskName,k.missingTokens);for(let k of d.blocked)c.set(k.taskName,k.failedTokens);let C=new Map;for(let[k,x]of Object.entries(a))for(let G of x.requires??[]){let K=C.get(G)??[];K.push(k),C.set(G,K);}let w=o.sort().map(k=>{let x=n[k],G=a[k]??{requires:[],provides:[]};x.status==="completed"?u.completed+=1:x.status==="failed"?u.failed+=1:x.status==="in-progress"&&(u.in_progress+=1);let K=G.requires??[],p=G.provides??[],i=Object.keys(x.data??{}).sort(),m=K.filter(P=>t.state.availableOutputs.includes(P)),b=K.filter(P=>!t.state.availableOutputs.includes(P)),I=c.get(k)??b,R=new Set;for(let P of p)for(let $ of C.get(P)??[])$!==k&&R.add($);let O=x.failedAt,j=x.error?{message:x.error,code:"TASK_FAILED",at:O,source:"task-runtime"}:void 0;return {name:k,status:x.status,error:j,requires:K,requires_satisfied:m,requires_missing:b,provides_declared:p,provides_runtime:i,blocked_by:I,unblocks:Array.from(R).sort(),runtime:{attempt_count:x.executionCount??0,restart_count:x.retryCount??0,in_progress_since:x.status==="in-progress"?x.startedAt??null:null,last_transition_at:x.lastUpdated??null,last_completed_at:x.completedAt??null,last_restarted_at:x.startedAt??null,status_age_ms:x.lastUpdated?0:null}}});u.pending=d.pending.length,u.blocked=d.blocked.length,u.unresolved=d.unresolved.length;let q=w.map(k=>({name:k.name,fanOut:k.unblocks.length})).sort((k,x)=>x.fanOut-k.fanOut||k.name.localeCompare(x.name)),X=q.length>0?q[0]:{name:null,fanOut:0},Y=new Set;for(let k of Object.values(a))for(let x of k.requires??[])Y.add(x);let ee=0;for(let[k,x]of Object.entries(a)){let G=(x.requires??[]).length===0,p=(x.provides??[]).some(i=>(C.get(i)??[]).some(m=>m!==k));G&&!p&&(ee+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:o.length,completed:u.completed,eligible:d.eligible.length,pending:u.pending,blocked:u.blocked,unresolved:u.unresolved,failed:u.failed,in_progress:u.in_progress,orphan_cards:ee,topology:{edge_count:Array.from(Y).length,max_fan_out_card:X.name,max_fan_out:X.fanOut}},cards:w}}function tr(){return new Date().toISOString()}function vt(e,t,n,a$1,o,d,u){return async c=>{let C=[],w=n.cardStore.readCard(c.nodeId);if(!w)return "task-initiate-failure";let q=w.id,X=w.card_data??{},Y=w.source_defs??[],ee=Y.filter(h=>h.optionalForCompletionGating!==true),k=n.cardRuntimeStore.readRuntime(q),x=false,G=()=>{x&&(n.cardRuntimeStore.writeRuntime(q,k),x=false);},K=h=>kt(k._sources[h]),p=(h,v)=>{k._sources[h]=kt(v),x=true;},i=c.taskState?.executionCount??0;if(k._lastExecutionCount!==i&&(k._sources={},k._lastExecutionCount=i,x=true),c.update){let h=c.update,v=h.outputFile;if(v){let B=K(v);if(h.failure){let M=h.rqt??B.lastRequestedToken??B.queueRequestedToken;M&&p(v,ht(B,M));}else {let M=h.rqt;if(!B.lastCompletedToken||M>B.lastCompletedToken){let V=typeof h.deliveryToken=="string"?h.deliveryToken:void 0,H=false;V&&(H=n.fetchedSourcesStore.commitSourceData(q,v,V)),H?p(v,er(B,M)):p(v,ht(B,M));}}G();}}let b={};for(let h of Y)if(h.outputFile){let v=n.fetchedSourcesStore.readSourceData(q,h.outputFile);v!==null&&(b[h.bindTo]=v);}let I={};for(let[h,v]of Object.entries(c.state??{}))if(v!==null&&typeof v=="object"&&!Array.isArray(v)){let B=v[h];I[h]=B!==void 0?B:v;}else I[h]=v;let R={id:q,card_data:{...X},requires:I,source_defs:Y,compute:w.compute};R._sourcesData=b,w.compute&&a$3.runSync(R,{sourcesData:b}),(d??n.outputStore.writeComputedValues.bind(n.outputStore))(q,R.computed_values??{});let O={...w},j=a$3.enrichSourcesSync(Array.isArray(w.source_defs)?w.source_defs:void 0,{card_data:w.card_data,requires:I}),P=e.value;O.source_defs=Array.isArray(j)?j.map(h=>({...h,boardDir:typeof h.boardDir=="string"&&h.boardDir?h.boardDir:P})):j;let $=tr(),J=c.update?void 0:$,U=ee.filter(h=>{let v=h.outputFile;if(typeof v!="string"||!v)return true;let B=K(v);J&&(B={...B,queueRequestedToken:J},p(v,B));let M=B.queueRequestedToken??B.lastRequestedToken??$,V=Rt(B,M);return V==="in-flight"?false:V==="dispatch"});if(G(),U.length>0){let h=false,v=$;for(let B of U){let M=B.outputFile;if(typeof M!="string"||!M)continue;let V=K(M),H=V.queueRequestedToken??$;p(M,{...V,lastRequestedToken:H}),v=H,h=true;}return h&&G(),h&&(C.push({taskKind:"source-fetch",payload:{boardRef:a(e),enrichedCard:O,callbackToken:c.callbackToken,rqt:v}}),n.executionRequestStore.appendEntries(t,C)),"task-initiated"}if(ee.some(h=>{let v=h.outputFile;if(typeof v!="string"||!v)return false;let B=K(v),M=B.queueRequestedToken??B.lastRequestedToken??$;return Rt(B,M)==="in-flight"}))return "task-initiated";let me=w.provides??[],ie={};for(let{bindTo:h,ref:v}of me)ie[h]=a$3.resolve(R,v);return (u??n.outputStore.writeDataObjects.bind(n.outputStore))(ie),Y.filter(h=>{if(h.optionalForCompletionGating!==true)return false;let v=K(h.outputFile);return !v.lastRequestedToken||!v.lastCompletedToken?true:v.lastCompletedToken<=v.lastRequestedToken}).length>0&&C.push({taskKind:"source-fetch",payload:{boardRef:a(e),enrichedCard:O,callbackToken:c.callbackToken,rqt:$}}),a$1(c.nodeId,ie),C.length>0&&n.executionRequestStore.appendEntries(t,C),"task-initiated"}}var Ge={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function xt(e){return {[Re]:e.graph,[Ct]:e.lastDrainedJournalId,board:{runtimeByCardId:e.runtimeByCardId}}}function Et(e){let t=e[Re],n=e[Ct],o=e.board?.runtimeByCardId;if(!t||typeof t!="object")throw new Error(`State snapshot is missing required key: ${Re}`);return {graph:t,lastDrainedJournalId:typeof n=="string"?n:"",runtimeByCardId:o&&typeof o=="object"?o:{}}}function Tt(e){let t=e.requires;return {provides:e.provides?.map(a=>a.bindTo)??[],taskHandlers:["card-handler"],description:e.meta?.title??e.id,...t&&t.length>0?{requires:t}:{}}}function E(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function S(e){return {status:"fail",error:e}}function T(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function rr(e){let t=new TextEncoder().encode(e),n=Array.from(t,a=>String.fromCharCode(a)).join("");return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Ft(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),n=t+"=".repeat((4-t.length%4)%4),a=atob(n),o=Uint8Array.from(a,d=>d.charCodeAt(0));return new TextDecoder().decode(o)}function Be(e){try{let t=JSON.parse(Ft(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function It(e){return rr(JSON.stringify(e))}function At(e){try{let t=JSON.parse(Ft(e));return typeof t?.cbk=="string"&&typeof t?.cid=="string"&&typeof t?.b=="string"&&typeof t?.d=="string"?t:null}catch{return null}}function Z(){return new Date().toISOString()}function nr(e){let t=new Map;return {appendEntries(n,a){if(!n||a.length===0)return;let o=t.get(n)??[];t.set(n,[...o,...a]);},dispatchEntriesForJournalId(n,a){if(!n)return;let o=t.get(n);if(!(!o||o.length===0)){for(let d of o)try{a(d);}catch(u){try{e(d,u instanceof Error?u.message:String(u));}catch{}}t.delete(n);}}}}function qr(e,t,n={}){dt(t.callbackTransport,"createBoardLiveCardsPublic");let a$3=t.callbackTransport,o=t.onWarn??(()=>{}),d=a(e),u$1=n.boardRuntimeStoreRef,c$1=n.scratchStoreRef,C=n.taskExecutorRef,w=n.chatHandlerFlow;function q$1(){if(!u$1)throw new Error(`Board at ${e.value} has no board runtime store configured. Pass boardRuntimeStoreRef at construction or init.`);return u$1}function X(s){if(s.length!==0)try{let r=t.publishBoardChangeNotifications?.(s);r&&typeof r.catch=="function"&&r.catch(l=>o(`[board-live-cards-public] publishBoardChangeNotifications failed: ${l instanceof Error?l.message:String(l)}`));}catch(r){o(`[board-live-cards-public] publishBoardChangeNotifications failed: ${r instanceof Error?r.message:String(r)}`);}}function Y(){let s=k().readCardStoreRef();if(!s)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let r=t.kvStorageForRef(s);return {readIndex(){return r.read("_index")},writeIndex(l){r.write("_index",l);},readCard(l){return r.read(l)},writeCard(l,g){return r.write(l,g),t.hashFn(g)},removeCard(l){r.delete(l);},cardExists(l){return r.read(l)!==null},defaultCardKey(l){return l}}}let ee={readValues(s){let r=t.kvStorageForRef(q$1()),l=r.listKeys().sort();if(l.length===0)return {version:null,values:{}};let g={};for(let A of l)g[A]=r.read(A);return {version:t.hashFn(g),values:g}},writeValues(s,r,l){let g=t.kvStorageForRef(q$1());for(let A of l)g.delete(A);for(let[A,F]of Object.entries(r))g.write(A,F);return t.hashFn(r)}},k=()=>qe(t.kvStorageForRef(q$1())),x=()=>bt(ee),G=()=>yt(t.journalAdapterForRef(q$1())),K=()=>He(Y(),o),p$1=()=>{let s=k().readOutputsStoreRef();if(!s)throw new Error(`Board at ${e.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return wt(t.kvStorageForRef(s))};function i(){return C??k().readTaskExecutorRef()}function m(){return !!x().readSnapshot(e.value).values[Re]}function b$1(){let s=x().readSnapshot(e.value);if(!s.values[Re])throw new Error(`Board not initialized at ${e.value}`);return Et(s.values)}function I(s,r){let l=x().commitSnapshot(e.value,{schemaVersion:Oe,expectedVersion:r,commitId:t.genId(),committedAt:Z(),deleteKeys:[],shallowMerge:xt(s)});if(!l.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${r??"null"} current=${l.currentVersion??"null"}`)}function R(s){G().appendEvent(s);}async function O(){let r=nr((f,y)=>{let _=f.payload,L=(_?.enrichedCard??{}).id??_?.cardId??"unknown";R({type:"task-failed",taskName:L,error:y,timestamp:Z()});}),l=b$1(),g=q(l.graph),{events:A,newCursor:F}=G().readEntriesAfterCursor(l.lastDrainedJournalId),Q=V(),D=_e(Q,f=>t.resolveBlob(f)),W={...l.runtimeByCardId},te=new Map,ge={readRuntime(f){return te.get(f)??W[f]??{_sources:{}}},writeRuntime(f,y){te.set(f,y),W[f]=y;}},Se=[],re=new Map,we={readSourceData(f,y){let _=`${f}/${y}`;return re.has(_)?re.get(_):D.readSourceData(f,y)},ingestSourceDataStaged(f,y,_,se){D.ingestSourceDataStaged(f,y,_,se);},commitSourceData(f,y,_){let se=`${f}/.staged/${_}/${y}`,L=Q.read(se);if(L==null){let z=Q.keyRef?.(se);z&&(L=t.resolveBlob(z));}if(L==null)return false;let ne=`${f}/${y}`,le=L.trim();try{re.set(ne,JSON.parse(le));}catch{re.set(ne,le);}return Se.push({cardId:f,outputFile:y,deliveryToken:_}),true},hasSource(f,y){let _=`${f}/${y}`;return re.has(_)?true:D.hasSource(f,y)},listSources(f){let y=D.listSources(f),_=new Set;for(let L of re.keys())L.startsWith(`${f}/`)&&_.add(L.slice(`${f}/`.length));let se=new Set([...y,..._]);return Array.from(se)}},ce={cardStore:K(),cardRuntimeStore:ge,fetchedSourcesStore:we,outputStore:p$1(),executionRequestStore:r},ke=[],Ve=[],je=[],Ke=new Map,ze=new Set,Ht=(f,y)=>{ke.push({type:"task-completed",taskName:f,data:y,timestamp:Z()});},Le=(f,y)=>{R({type:"task-failed",taskName:f,error:y,timestamp:Z()});},ve=u(g,{handlers:{"card-handler":vt(e,F,ce,Ht,Le,(f,y)=>{Ve.push({cardId:f,values:y});},f=>{je.push(f);})},onNodeRemoved:f=>{Ke.delete(f),te.delete(f),delete W[f],ze.add(f);}});for(ke=A;ke.length>0;){let f=ke;ke=[];for(let y of f)if(y.type==="task-restart"){let _=ce.cardStore.readCard(y.taskName);_&&Ke.set(y.taskName,_);}ve.pushAll(f),await ve.waitForHandlers();}let Ye=ve.getState();await ve.dispose({wait:true});let Gt=x().readSnapshot(e.value).version;I({lastDrainedJournalId:F,graph:p(Ye),runtimeByCardId:W},Gt);for(let{cardId:f,values:y}of Ve)ce.outputStore.writeComputedValues(f,y);for(let f of je)ce.outputStore.writeDataObjects(f);for(let{cardId:f,outputFile:y,deliveryToken:_}of Se)D.commitSourceData(f,y,_);let xe;try{xe=Pe(d,Ye),ce.outputStore.writeStatusSnapshot(xe);}catch(f){o(`[board-live-cards-public] status publish failed: ${f instanceof Error?f.message:String(f)}`);}let he=[];for(let{cardId:f,values:y}of Ve)he.push({kind:"computed_values",cardId:f,values:y});for(let f of je)for(let[y,_]of Object.entries(f))y&&he.push({kind:"data_object",key:y,payload:_});for(let[f,y]of Ke)he.push({kind:"card_refreshed",cardId:f,card:y});for(let f of ze)he.push({kind:"card_removed",cardId:f});xe!==void 0&&he.push({kind:"status",status:xe}),X(he);let ye=i()??{howToRun:"built-in",whatToRun:a({kind:"built-in",value:"source-cli-task-executor"})},Xe=t.supportsDirectSourceOutput?.(ye)===true;r.dispatchEntriesForJournalId(F,f=>{if(f.taskKind!=="source-fetch"){o(`[process-accumulated-events] unknown taskKind "${f.taskKind}" \u2014 skipping`);return}let y=f.payload,_=y.enrichedCard?.id??"unknown",se=y.enrichedCard?.source_defs??[];if(ye.howToRun==="queue-storage"&&Xe){try{let L=t.queueStorageForRef(j(),"task-executor"),ne=typeof ye.extra?.boardId=="string"?ye.extra.boardId:void 0,le=[];for(let z of se){if(!z.outputFile){o(`[dispatch] source "${z.bindTo}" has no outputFile \u2014 skipping`);continue}let Ee=t.genId(),Te=`${_}/.staged/${Ee}/${z.outputFile}`,We=Q.keyRef?.(Te);if(!We)continue;let Ze={ref:a(We),deliveryToken:Ee,outputFile:z.outputFile,cardId:_},Ut=It({cbk:y.callbackToken,rg:e.value,br:a(e),cid:_,b:z.bindTo,d:z.outputFile,cs:void 0,rqt:y.rqt,dt:Ze.deliveryToken});le.push({...ne?{boardId:ne}:{},ref:ye,args:{source_def:z,base_ref:a(e),callback:a$3.createCallback(Ut),output:Ze}});}le.length>0&&L.enqueueMany(le);}catch(L){Le(_,L instanceof Error?L.message:String(L));}return}for(let L of se){if(!L.outputFile){o(`[dispatch] source "${L.bindTo}" has no outputFile \u2014 skipping`);continue}let ne;if(Xe){let z=t.genId(),Ee=`${_}/.staged/${z}/${L.outputFile}`,Te=Q.keyRef?.(Ee);Te&&(ne={ref:a(Te),deliveryToken:z,outputFile:L.outputFile,cardId:_});}let le=It({cbk:y.callbackToken,rg:e.value,br:a(e),cid:_,b:L.bindTo,d:L.outputFile,cs:void 0,rqt:y.rqt,...ne?{dt:ne.deliveryToken}:{}});t.dispatchExecution(ye,{source_def:L,base_ref:a(e),callback:a$3.createCallback(le),...ne?{output:ne}:{}}).catch(z=>Le(_,z instanceof Error?z.message:String(z)));}});}function j(){let s=k().readQueueStoreRef();if(!s)throw new Error(`Board at ${e.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);return s}function P(){let s=t.queueStorageForRef(j(),"process-accumulated");s.enqueueIfAbsent?s.enqueueIfAbsent({boardRef:a(e)},`process-accumulated:${a(e)}`):s.enqueue({boardRef:a(e)}),t.requestProcessAccumulated?.();}function $(){let s=t.queueStorageForRef(j(),"process-accumulated");for(;;){let r=s.lease({max:64,visibilityMs:1e3});if(r.length<=0)return;for(let l of r)s.ack(l.id,l.leaseToken);if(r.length<64)return}}async function J(){try{let s=()=>{let l=b$1(),{events:g}=G().readEntriesAfterCursor(l.lastDrainedJournalId);g.length<=0||P();},r=await c(t.lock,O,s);return E({ran:r!==!1})}catch(s){return T(s)}}function U(){P();}function de(s){try{let r=s.params?.cardStoreRef;if(!r)return S("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(u$1=s.params?.boardRuntimeStoreRef,!u$1)return S("init requires params.boardRuntimeStoreRef \u2014 pass the board runtime store ref here");if(!m()){let W=a$1(Ge);I({lastDrainedJournalId:"",graph:p(W),runtimeByCardId:{}},null);}let l=s.params?.outputsStoreRef;if(!l)return S("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let g=s.params?.queueStoreRef;if(!g)return S("init requires params.queueStoreRef \u2014 pass the queue store ref here");let A=s.params?.fetchedSourcesStoreRef;if(!A)return S("init requires params.fetchedSourcesStoreRef \u2014 pass the fetched sources store ref here");if(c$1=s.params?.scratchStoreRef,!c$1)return S("init requires params.scratchStoreRef \u2014 pass the scratch store ref here");let F=s.params?.chatStoreRef;if(!F)return S("init requires params.chatStoreRef \u2014 pass the chat store ref here");let Q=s.params?.artifactsStoreRef;if(!Q)return S("init requires params.artifactsStoreRef \u2014 pass the artifacts store ref here");let D=k();D.writeBoardRuntimeStoreRef(u$1),D.writeCardStoreRef(r),D.writeOutputsStoreRef(l),D.writeQueueStoreRef(g),D.writeFetchedSourcesStoreRef(A),D.writeChatStoreRef(F),D.writeArtifactsStoreRef(Q);try{p$1().writeStatusSnapshot(Pe(d,q(b$1().graph)));}catch{}return E()}catch(r){return T(r)}}function me(s){try{let r=p$1().readStatusSnapshot();if(!r){r=Pe(d,q(b$1().graph));try{p$1().writeStatusSnapshot(r);}catch{}}return E(r)}catch(r){return T(r)}}function ie(s){try{let r=s.params?.id;if(!r)return S("removeCard requires params.id");try{t.kvStorage("card-upsert").delete(r);}catch{}return R({type:"task-removal",taskName:r,timestamp:Z()}),U(),E()}catch(r){return T(r)}}function Ce(s){try{let r=s.params?.cardId;if(!r)return S("addCardFiles requires params.cardId");let l=a$2(K()).appendFiles({params:{id:r},body:s.body});if(l.status!=="success")return l;let g=h({params:{cardId:r}});return g.status!=="success"?g:E({cardId:r,files_added:l.data.files_added,notified:!0})}catch(r){return T(r)}}function h(s){try{let r=s.params?.cardId;if(!r)return S("cardRefreshedNotify requires params.cardId");let l=K().readCard(r);return l?(X([{kind:"card_refreshed",cardId:r,card:l}]),E({cardId:r,notified:!0})):S(`Card "${r}" not found in board at ${e.value}`)}catch(r){return T(r)}}function v(s){try{let r=s.params?.id;return r?(R({type:"task-restart",taskName:r,timestamp:Z()}),U(),E()):S("retrigger requires params.id")}catch(r){return T(r)}}async function B(s){return $(),J()}function M(){let s=k().readFetchedSourcesStoreRef();if(!s)throw new Error(`Board at ${e.value} has no fetched sources store configured. Run: init --fetched-sources-store-ref <b64-ref>`);return s}function V(){return t.blobStorageForRef(M())}function H(s){try{let r=s.params?.cardId,l=s.params?.all,g=!!s.params?.restart;if(!r&&!l)return S("upsertCard requires --card-id <id> or --all");let A=l?K().readAllCards().map(F=>F.id):[r];for(let F of A)if(!K().readCard(F))return S(`Card "${F}" not found in board at ${e.value}`);for(let F of A){let Q=K().readCard(F),D=Tt(Q),W=t.hashFn(D),te=t.kvStorage("card-upsert"),ge=te.read(F),Se=ge?.taskConfigHash!==W;if(!(!Se&&!g)){if(Se){let re=ge?.blobRef??K().readCardKey(F)??F;R({type:"task-upsert",taskName:F,taskConfig:D,timestamp:Z()}),te.write(F,{blobRef:re,taskConfigHash:W,updatedAt:Z()});}g&&R({type:"task-restart",taskName:F,timestamp:Z()});}}return U(),E()}catch(r){return T(r)}}function oe(s){try{let r=s.params?.token;if(!r)return S("taskFailed requires params.token");let l=s.params?.error??"unknown error",g=Be(r);return g?(R({type:"task-failed",taskName:g.taskName,error:l,timestamp:Z()}),U(),E()):S("Invalid callback token")}catch(r){return T(r)}}function pe(s){try{let r=s.params?.token;if(!r)return S("taskProgress requires params.token");let g=(s.body??{}).update??{},A=Be(r);return A?(R({type:"task-progress",taskName:A.taskName,update:g,timestamp:Z()}),U(),E()):S("Invalid callback token")}catch(r){return T(r)}}function be(s){try{let r=s.params?.token,l=s.params?.ref;if(!r)return S("sourceDataFetched requires params.token");if(!l)return S("sourceDataFetched requires params.ref");let g=At(r);if(!g)return S("Invalid source token");let{cbk:A,cid:F,b:Q,d:D,cs:W,rqt:te,dt:ge}=g,Se=_e(V(),ke=>t.resolveBlob(ke)),re=ge||t.genId();ge||Se.ingestSourceDataStaged(F,D,b(l),re);let we=Be(A);if(!we)return S("Invalid callback token embedded in source token");let ce=Z();return R({type:"task-progress",taskName:we.taskName,update:{bindTo:Q,outputFile:D,fetchedAt:ce,deliveryToken:re,sourceChecksum:W,rqt:te},timestamp:ce}),U(),E()}catch(r){return T(r)}}function ue(s){try{let r=s.params?.token,l=s.params?.reason??"unknown";if(!r)return S("sourceDataFetchFailure requires params.token");let g=At(r);if(!g)return S("Invalid source token");let{cbk:A,b:F,d:Q,cs:D,rqt:W}=g,te=Be(A);return te?(R({type:"task-progress",taskName:te.taskName,update:{bindTo:F,outputFile:Q,failure:!0,reason:l,sourceChecksum:D,rqt:W},timestamp:Z()}),U(),E()):S("Invalid callback token embedded in source token")}catch(r){return T(r)}}function _t(s){try{let r=k().readCardStoreRef();return r?E({storeRef:r}):S(`Board at ${e.value} has no card store configured`)}catch(r){return T(r)}}function Ot(s){try{return E({storeRef:u$1??null})}catch(r){return T(r)}}function qt(s){try{let r=k().readOutputsStoreRef();return r?E({storeRef:r}):S(`Board at ${e.value} has no outputs store configured`)}catch(r){return T(r)}}function Pt(s){try{return E({storeRef:c$1??null})}catch(r){return T(r)}}function Bt(s){try{let r=k().readChatStoreRef();return E({storeRef:r})}catch(r){return T(r)}}function Vt(s){try{let r=k().readArtifactsStoreRef();return E({storeRef:r})}catch(r){return T(r)}}function jt(s){try{let r=k().readFetchedSourcesStoreRef();return E({storeRef:r})}catch(r){return T(r)}}function Kt(s){try{let r=s.params?.key;if(!r)return S("getConfig requires params.key");let l=k(),g;switch(r){case "task-executor":g=C??null;break;case "chat-handler-flow":g=w??null;break;case "board-runtime-store-ref":g=l.readBoardRuntimeStoreRef();break;case "card-store-ref":g=l.readCardStoreRef();break;case "outputs-store-ref":g=l.readOutputsStoreRef();break;case "scratch-store-ref":g=c$1??null;break;case "chat-store-ref":g=l.readChatStoreRef();break;case "artifacts-store-ref":g=l.readArtifactsStoreRef();break;case "fetched-sources-store-ref":g=l.readFetchedSourcesStoreRef();break;default:return S(`getConfig: unknown key "${r}"`)}return E({value:g})}catch(r){return T(r)}}function Lt(s){try{let r=s.params?.key;if(!r)return S("getOutputsDataObject requires params.key");let l=p$1().readDataObject(r);return E(l)}catch(r){return T(r)}}function $t(s){try{return E(p$1().readAllDataObjects())}catch(r){return T(r)}}function Dt(s){try{let r=s.params?.key;if(!r)return S("getOutputsComputedValues requires params.key");let l=p$1().readComputedValues(r);return E(l)}catch(r){return T(r)}}function Nt(s){try{return E(p$1().readAllComputedValues())}catch(r){return T(r)}}function Ue(){return _e(V(),s=>t.resolveBlob(s))}function Qe(s){let r=V().keyRef?.(s);if(!r)throw new Error("configured fetched-sources store does not support keyRef");return a(r)}function Jt(s){try{let r=s.params?.key;if(!r)return S("getOutputsFetchedSources requires params.key");let l=Ue().listSources(r),g={};for(let A of l)g[A]=Qe(`${r}/${A}`);return E(g)}catch(r){return T(r)}}function Mt(s){try{let r=Ue(),l=new Set;for(let A of V().listKeys()){let F=A.indexOf("/");F>0&&!A.includes("/.staged/")&&l.add(A.slice(0,F));}let g={};for(let A of l){let F=r.listSources(A);if(F.length>0){g[A]={};for(let Q of F)g[A][Q]=Qe(`${A}/${Q}`);}}return E(g)}catch(r){return T(r)}}return {init:de,status:me,getBoardRuntimeStoreRef:Ot,getCardStoreRef:_t,getOutputsStoreRef:qt,getScratchStoreRef:Pt,getChatStoreRef:Bt,getArtifactsStoreRef:Vt,getFetchedSourcesStoreRef:jt,getConfig:Kt,getOutputsDataObject:Lt,getAllOutputsDataObjects:$t,getOutputsComputedValues:Dt,getAllOutputsComputedValues:Nt,getOutputsFetchedSources:Jt,getAllOutputsFetchedSources:Mt,removeCard:ie,addCardFiles:Ce,cardRefreshedNotify:h,retrigger:v,processAccumulatedEvents:B,upsertCard:H,taskFailed:oe,taskProgress:pe,sourceDataFetched:be,sourceDataFetchFailure:ue}}function Pr(e,t,n){let a=n?.taskExecutorRef,o=()=>{if(n){if(!n.boardRuntimeStoreRef)throw new Error(`Board at ${e.value} requires boardRuntimeStoreRef for non-core runtime operations.`);return qe(t.kvStorageForRef(n.boardRuntimeStoreRef))}return qe(t.kvStorage("config"))};function d(){let p=o().readCardStoreRef();if(!p)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let i=t.kvStorageForRef(p);return {readIndex(){return i.read("_index")},writeIndex(m){i.write("_index",m);},readCard(m){return i.read(m)},writeCard(m,b){return i.write(m,b),t.hashFn(b)},removeCard(m){i.delete(m);},cardExists(m){return i.read(m)!==null},defaultCardKey(m){return m}}}let u=()=>He(d(),t.onWarn??(()=>{}));function c(){return a??o().readTaskExecutorRef()}async function C(p,i){let m=t.validateSchema(i),b=[],I=c();if(I&&Array.isArray(i.source_defs))for(let O of i.source_defs){let j=typeof O.bindTo=="string"?O.bindTo:"(unknown)";try{let P;try{P=await t.invokeExecutor(I,"validate-source-def",{timeout:t.executorTimeouts?.validationMs??1e4,input:JSON.stringify(O)});}catch(J){let U=J;if(P=typeof U?.stdout=="string"?U.stdout:"",!P.trim()){b.push(`source "${j}": executor validate-source-def failed \u2014 ${J instanceof Error?J.message:String(J)}`);continue}}let $=JSON.parse(P.trim());if(!$.ok&&Array.isArray($.errors))for(let J of $.errors)b.push(`source "${j}": ${J}`);}catch(P){b.push(`source "${j}": executor validate-source-def failed \u2014 ${P instanceof Error?P.message:String(P)}`);}}let R=[...m.errors,...b];return E({cardId:p,isValid:R.length===0,issues:R})}function w(p,i){let m=p.params?.sourceIdx,b=p.params?.outRef;if(m===void 0)return S(`${i} requires params.sourceIdx`);if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return S(`${i} requires card JSON object in body`);let I=p.body,R=I["card-content"]??I,O=I["mock-projections"]??{},j=R.source_defs??[];if(m<0||m>=j.length)return S(`sourceIdx ${m} out of range (card has ${j.length} source(s))`);let P=j[m],$=typeof P.bindTo=="string"?P.bindTo:"source";return {src:P,bindTo:$,outRef:b,mockProjections:O}}async function q(p){try{if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return S("validateCardPreflight requires card JSON object in body");let i=p.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)";return await C(b,m)}catch(i){return T(i)}}async function X(p){try{let i=w(p,"probeSourcePreflight");if("status"in i)return i;let m=c();if(!m)return S("No task-executor registered for this board");try{let b={...i.src,_projections:i.mockProjections},I=await t.invokeExecutor(m,"probe-source-preflight",{timeout:i.src.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(b)}),R=JSON.parse(I.trim());return R.ok?E({bindTo:i.bindTo,reachable:R.reachable,latencyMs:R.latencyMs,note:R.note}):S(R.error??"Preflight probe failed")}catch{return S("Executor does not support probe-source-preflight")}}catch(i){return T(i)}}async function Y(p){try{let i=w(p,"runSourcePreflight");if("status"in i)return i;let m=c();if(!m)return S("No task-executor registered for this board");try{let b$1={...i.src,_projections:i.mockProjections},I=await t.invokeExecutor(m,"run-source-preflight",{timeout:i.src.timeout??t.executorTimeouts?.probeMs??6e4,input:JSON.stringify(b$1)}),R=JSON.parse(I.trim());if(!R.ok)return E({bindTo:i.bindTo,ok:!1,result:null,issues:[R.error??"Preflight run failed"]});if(i.outRef){let O=b(i.outRef);t.absoluteBlob.write(O.value,JSON.stringify(R.resultValue,null,2));}return E({bindTo:typeof R.bindTo=="string"?R.bindTo:i.bindTo,ok:!0,result:R.resultValue??null,issues:[]})}catch(b){let I=b instanceof Error?b.message:String(b);return E({bindTo:i.bindTo,ok:!1,result:null,issues:[I]})}}catch(i){return T(i)}}async function ee(p){try{let i=c();if(!i)return S("No task-executor registered for this board");let m=await t.invokeExecutor(i,"describe-capabilities",{timeout:t.executorTimeouts?.describeMs??1e4});return E(JSON.parse(m.trim()))}catch(i){return T(i)}}function k(p){try{let i=p.body;if(!i||!Array.isArray(i.ops))return S("updatesInCardStore requires body.ops array");let m=i.ops,b=u();for(let I of m){let R=I.op,O=I.id;if(!O)return S('op is missing "id"');if(R==="update"){let j=I["card-content"];if(!j)return S(`update op for "${O}" is missing "card-content"`);b.writeCard(O,j);}else return S(`Unknown op type: "${R??"(none)"}"`)}return E()}catch(i){return T(i)}}function x(p){try{let i=p.body;if(!i||!Array.isArray(i.ids))return S("readFromCardStore requires body.ids array");let m=i.ids,b=u(),I=m.map(R=>({id:R,"card-content":b.readCard(R)}));return E({cards:I})}catch(i){return T(i)}}function G(p){try{if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return S("evalCardCompute requires a JSON object in body");let i=p.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)",I=i["mock-fetched-sources"]??{},R=i["mock-requires"]??{},O=m.compute;if(!O||!Array.isArray(O)||O.length===0)return E({cardId:b,ok:!0,computed_values:{},errors:[]});let j={id:b,card_data:m.card_data??{},requires:R,source_defs:m.source_defs,compute:O},P=a$3.runSync(j,{sourcesData:I}),$=P.node.computed_values??{},J=P.errors??[];return E({cardId:b,ok:J.length===0,computed_values:$,errors:J})}catch(i){return T(i)}}async function K(p){try{if(!p.body||typeof p.body!="object"||Array.isArray(p.body))return S("simulateCardCycle requires a JSON object in body");let i=p.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)",I=i["mock-fetched-sources"]??{},R=i["mock-requires"]??{},O=await C(b,m),j=O.status==="success"?{isValid:O.data.isValid,issues:O.data.issues}:{isValid:!1,issues:[O.status==="fail"?O.error:"internal error"]},P=m.source_defs??[],$=m.card_data??{},J=[],U=[];if(P.length>0){J=a$3.enrichSourcesSync(P,{card_data:$,requires:R});for(let V of J){let H=V.projections,oe=V._projections;if(H&&oe){for(let pe of Object.keys(H))if(oe[pe]===void 0){let be=typeof V.bindTo=="string"?V.bindTo:"(unknown)";U.push({bindTo:be,key:pe,error:`Projection "${pe}" resolved to undefined`});}}}}let de=[],me={...I},ie=i["task-executor-ref"],Ce=(ie?.howToRun&&ie?.whatToRun?ie:void 0)??c();for(let V=0;V<J.length;V++){let H=J[V],oe=typeof H.bindTo=="string"?H.bindTo:`source_${V}`;if(!Ce){de.push({bindTo:oe,skipped:!0,error:"No task executor configured"});continue}try{let pe={...H},be=await t.invokeExecutor(Ce,"run-source-preflight",{timeout:H.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(pe)}),ue=JSON.parse(be.trim());ue.ok&&!Object.prototype.hasOwnProperty.call(I,oe)&&Object.prototype.hasOwnProperty.call(ue,"resultValue")&&(me[oe]=ue.resultValue),de.push({bindTo:oe,reachable:ue.reachable,latencyMs:ue.latencyMs,error:ue.ok?void 0:ue.error});}catch{de.push({bindTo:oe,skipped:!0,error:"Executor does not support run-source-preflight"});}}let h=m.compute,v={},B=[];if(h&&Array.isArray(h)&&h.length>0){let V={id:b,card_data:$,requires:R,source_defs:m.source_defs,compute:h},H=a$3.runSync(V,{sourcesData:me});v=H.node.computed_values??{},B=H.errors??[];}let M=j.isValid&&U.length===0&&B.length===0&&de.every(V=>V.reachable!==!1);return E({cardId:b,ok:M,validation:j,source_probes:de,projection_errors:U,fetched_sources:me,computed_values:v,compute_errors:B})}catch(i){return T(i)}}return {validateCardPreflight:q,probeSourcePreflight:X,runSourcePreflight:Y,evalCardCompute:G,simulateCardCycle:K,describeTaskExecutorCapabilities:ee,updatesInCardStore:k,readFromCardStore:x}}
2
+ export{pr as a,ft as b,gr as c,dt as d,cr as e,lr as f,fr as g,gt as h,Xt as i,Wt as j,St as k,He as l,Oe as m,Re as n,vr as o,kt as p,Rt as q,er as r,ht as s,Pe as t,Ge as u,xt as v,Et as w,Tt as x,qr as y,Pr as z};//# sourceMappingURL=chunk-ZWVT24YW.js.map
3
+ //# sourceMappingURL=chunk-ZWVT24YW.js.map
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkR44X3RQB_cjs=require('./chunk-R44X3RQB.cjs'),chunkCMFD27ZC_cjs=require('./chunk-CMFD27ZC.cjs'),chunk37HDEW26_cjs=require('./chunk-37HDEW26.cjs');require('./chunk-PBCDDO4V.cjs'),require('./chunk-NDAKMJQK.cjs'),require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-IXZG74EW.cjs'),require('./chunk-HWYMZK3N.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-YMEIPKLW.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createAzureBlobStorage",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.d}});Object.defineProperty(exports,"createAzureQueueStorage",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.e}});Object.defineProperty(exports,"createCosmosAtomicRelayLock",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.c}});Object.defineProperty(exports,"createCosmosJournalStorage",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.b}});Object.defineProperty(exports,"createCosmosKvStorage",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.a}});Object.defineProperty(exports,"createAsyncBoardLiveCardsPublic",{enumerable:true,get:function(){return chunkCMFD27ZC_cjs.g}});Object.defineProperty(exports,"createAsyncCardStorageAdapter",{enumerable:true,get:function(){return chunkCMFD27ZC_cjs.c}});Object.defineProperty(exports,"createAsyncCardStore",{enumerable:true,get:function(){return chunkCMFD27ZC_cjs.d}});Object.defineProperty(exports,"createAsyncJsonStorage",{enumerable:true,get:function(){return chunkCMFD27ZC_cjs.b}});Object.defineProperty(exports,"createAsyncStateSnapshotAdapter",{enumerable:true,get:function(){return chunkCMFD27ZC_cjs.e}});Object.defineProperty(exports,"createAsyncStorageProvider",{enumerable:true,get:function(){return chunkCMFD27ZC_cjs.f}});Object.defineProperty(exports,"withAsyncRelayLock",{enumerable:true,get:function(){return chunkCMFD27ZC_cjs.a}});Object.defineProperty(exports,"createAsyncBoardConfigStore",{enumerable:true,get:function(){return chunk37HDEW26_cjs.b}});Object.defineProperty(exports,"createAsyncBoardWorkerStore",{enumerable:true,get:function(){return chunk37HDEW26_cjs.a}});Object.defineProperty(exports,"createHostedAsyncBoardPlatformAdapter",{enumerable:true,get:function(){return chunk37HDEW26_cjs.c}});//# sourceMappingURL=cloud-storage.cjs.map
1
+ 'use strict';var chunkR44X3RQB_cjs=require('./chunk-R44X3RQB.cjs'),chunk36QUKFL7_cjs=require('./chunk-36QUKFL7.cjs'),chunk37HDEW26_cjs=require('./chunk-37HDEW26.cjs');require('./chunk-ZENTBLLA.cjs'),require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-IXZG74EW.cjs'),require('./chunk-HWYMZK3N.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-YMEIPKLW.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createAzureBlobStorage",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.d}});Object.defineProperty(exports,"createAzureQueueStorage",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.e}});Object.defineProperty(exports,"createCosmosAtomicRelayLock",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.c}});Object.defineProperty(exports,"createCosmosJournalStorage",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.b}});Object.defineProperty(exports,"createCosmosKvStorage",{enumerable:true,get:function(){return chunkR44X3RQB_cjs.a}});Object.defineProperty(exports,"createAsyncBoardLiveCardsPublic",{enumerable:true,get:function(){return chunk36QUKFL7_cjs.g}});Object.defineProperty(exports,"createAsyncCardStorageAdapter",{enumerable:true,get:function(){return chunk36QUKFL7_cjs.c}});Object.defineProperty(exports,"createAsyncCardStore",{enumerable:true,get:function(){return chunk36QUKFL7_cjs.d}});Object.defineProperty(exports,"createAsyncJsonStorage",{enumerable:true,get:function(){return chunk36QUKFL7_cjs.b}});Object.defineProperty(exports,"createAsyncStateSnapshotAdapter",{enumerable:true,get:function(){return chunk36QUKFL7_cjs.e}});Object.defineProperty(exports,"createAsyncStorageProvider",{enumerable:true,get:function(){return chunk36QUKFL7_cjs.f}});Object.defineProperty(exports,"withAsyncRelayLock",{enumerable:true,get:function(){return chunk36QUKFL7_cjs.a}});Object.defineProperty(exports,"createAsyncBoardConfigStore",{enumerable:true,get:function(){return chunk37HDEW26_cjs.b}});Object.defineProperty(exports,"createAsyncBoardWorkerStore",{enumerable:true,get:function(){return chunk37HDEW26_cjs.a}});Object.defineProperty(exports,"createHostedAsyncBoardPlatformAdapter",{enumerable:true,get:function(){return chunk37HDEW26_cjs.c}});//# sourceMappingURL=cloud-storage.cjs.map
2
2
  //# sourceMappingURL=cloud-storage.cjs.map
@@ -1,2 +1,2 @@
1
- export{d as createAzureBlobStorage,e as createAzureQueueStorage,c as createCosmosAtomicRelayLock,b as createCosmosJournalStorage,a as createCosmosKvStorage}from'./chunk-7BTZCOT5.js';export{g as createAsyncBoardLiveCardsPublic,c as createAsyncCardStorageAdapter,d as createAsyncCardStore,b as createAsyncJsonStorage,e as createAsyncStateSnapshotAdapter,f as createAsyncStorageProvider,a as withAsyncRelayLock}from'./chunk-GU3T75C4.js';export{b as createAsyncBoardConfigStore,a as createAsyncBoardWorkerStore,c as createHostedAsyncBoardPlatformAdapter}from'./chunk-NNSBBO5R.js';import'./chunk-HEEDJEKM.js';import'./chunk-DOFNXJ4C.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-JMDHDY6M.js';import'./chunk-3KC6LBOG.js';import'./chunk-MNEOJWPS.js';import'./chunk-KBELAKIY.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=cloud-storage.js.map
1
+ export{d as createAzureBlobStorage,e as createAzureQueueStorage,c as createCosmosAtomicRelayLock,b as createCosmosJournalStorage,a as createCosmosKvStorage}from'./chunk-7BTZCOT5.js';export{g as createAsyncBoardLiveCardsPublic,c as createAsyncCardStorageAdapter,d as createAsyncCardStore,b as createAsyncJsonStorage,e as createAsyncStateSnapshotAdapter,f as createAsyncStorageProvider,a as withAsyncRelayLock}from'./chunk-7QQFDYBM.js';export{b as createAsyncBoardConfigStore,a as createAsyncBoardWorkerStore,c as createHostedAsyncBoardPlatformAdapter}from'./chunk-NNSBBO5R.js';import'./chunk-ZWVT24YW.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-JMDHDY6M.js';import'./chunk-3KC6LBOG.js';import'./chunk-MNEOJWPS.js';import'./chunk-KBELAKIY.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=cloud-storage.js.map
2
2
  //# sourceMappingURL=cloud-storage.js.map
@@ -1,3 +1,3 @@
1
- 'use strict';var chunkHFW7E2Z7_cjs=require('../chunk-HFW7E2Z7.cjs'),chunkFO4KNVU7_cjs=require('../chunk-FO4KNVU7.cjs'),chunkMCPADH33_cjs=require('../chunk-MCPADH33.cjs');require('../chunk-R44X3RQB.cjs'),require('../chunk-CMFD27ZC.cjs');var chunk37HDEW26_cjs=require('../chunk-37HDEW26.cjs');require('../chunk-PBCDDO4V.cjs'),require('../chunk-NDAKMJQK.cjs'),require('../chunk-7JVHYHT2.cjs');var chunkVQCIOKJV_cjs=require('../chunk-VQCIOKJV.cjs');require('../chunk-G4XXRHL2.cjs'),require('../chunk-LODXIALE.cjs');var chunkIXZG74EW_cjs=require('../chunk-IXZG74EW.cjs');require('../chunk-HWYMZK3N.cjs'),require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-YMEIPKLW.cjs'),require('../chunk-GNFE24S7.cjs');function x(e){return {status:"success",data:e}}function S(e){return {status:"fail",error:e}}function q(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function $(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function ue(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function de(e,t={}){let n=()=>chunk37HDEW26_cjs.b(e.kvStorage("config"));async function r(){return await n().readTaskExecutorRef().catch(()=>{})}async function s(c,i,a){if(!t.nonCoreTaskExecutor)throw new Error(`${c} is not supported on the hosted Firestore runtime yet`);let y=await t.nonCoreTaskExecutor({subcommand:c,...i!==void 0?{input:typeof i=="string"?i:JSON.stringify(i)}:{},...a!==void 0?{timeoutMs:a}:{}});return $(y)}async function o(c){try{if(!c.body||typeof c.body!="object"||Array.isArray(c.body))return S("validateCardPreflight requires card JSON object in body");let i=c.body,a=i["card-content"]??i,y=typeof a.id=="string"?a.id:"(unknown)",g=chunkFO4KNVU7_cjs.a(a),p=Array.isArray(a.source_defs)&&a.source_defs.length>0,d=[...g.issues];if(p)if(t.nonCoreTaskExecutor)for(let m of a.source_defs){let f=typeof m.bindTo=="string"?m.bindTo:"(unknown)";try{let R=await s("validate-source-def",m,1e4);if(R.ok!==!0&&Array.isArray(R.errors))for(let C of R.errors)typeof C=="string"&&C&&d.push(`source "${f}": ${C}`);}catch(R){d.push(`source "${f}": executor validate-source-def failed \u2014 ${R instanceof Error?R.message:String(R)}`);}}else await r()&&d.push("executor-backed source_def preflight is not supported on the hosted Firestore runtime yet");return x({cardId:y,isValid:d.length===0,issues:d})}catch(i){return q(i)}}function u(c){try{if(!c.body||typeof c.body!="object"||Array.isArray(c.body))return S("evalCardCompute requires a JSON object in body");let i=c.body,a=i["card-content"]??i,y=typeof a.id=="string"?a.id:"(unknown)",g=i["mock-fetched-sources"]??{},p=i["mock-requires"]??{},d=a.compute;if(!d||!Array.isArray(d)||d.length===0)return x({cardId:y,ok:!0,computed_values:{},errors:[]});let m={id:y,card_data:a.card_data??{},requires:p,source_defs:a.source_defs,compute:d},f=chunkIXZG74EW_cjs.a.runSync(m,{sourcesData:g});return x({cardId:y,ok:(f.errors??[]).length===0,computed_values:f.node.computed_values??{},errors:f.errors??[]})}catch(i){return q(i)}}async function l(c){return await r(),S(`${c} is not supported on the hosted Firestore runtime yet`)}async function w(){try{return t.nonCoreTaskExecutor?x(await s("describe-capabilities",void 0,1e4)):await l("describeTaskExecutorCapabilities")}catch(c){return q(c)}}async function E(c){try{if(!t.nonCoreTaskExecutor)return await l("probeSourcePreflight");if(!c.body||typeof c.body!="object"||Array.isArray(c.body))return S("probeSourcePreflight requires card JSON object in body");let i=c.body,a=i["card-content"]??i,y=$(i["mock-projections"]??{}),g=c.params?.sourceIdx,p=Array.isArray(a.source_defs)?a.source_defs:[];if(g===void 0)return S("probeSourcePreflight requires params.sourceIdx");if(g<0||g>=p.length)return S(`sourceIdx ${g} out of range (card has ${p.length} source(s))`);let d=p[g],m=typeof d.bindTo=="string"?d.bindTo:"source",f=await s("probe-source-preflight",{...d,_projections:y},d.timeout??6e4);return f.ok!==!0?S(typeof f.error=="string"?f.error:"Preflight probe failed"):x({bindTo:m,reachable:f.reachable,latencyMs:f.latencyMs,...typeof f.note=="string"?{note:f.note}:{}})}catch(i){return q(i)}}async function D(c){try{if(!t.nonCoreTaskExecutor)return await l("runSourcePreflight");if(!c.body||typeof c.body!="object"||Array.isArray(c.body))return S("runSourcePreflight requires card JSON object in body");let i=c.body,a=i["card-content"]??i,y=$(i["mock-projections"]??{}),g=c.params?.sourceIdx,p=Array.isArray(a.source_defs)?a.source_defs:[];if(g===void 0)return S("runSourcePreflight requires params.sourceIdx");if(g<0||g>=p.length)return S(`sourceIdx ${g} out of range (card has ${p.length} source(s))`);let d=p[g],m=typeof d.bindTo=="string"?d.bindTo:"source",f=await s("run-source-preflight",{...d,_projections:y},d.timeout??6e4);return f.ok!==!0?x({bindTo:m,ok:!1,result:null,issues:[typeof f.error=="string"?f.error:"Preflight run failed"]}):x({bindTo:m,ok:!0,result:Object.prototype.hasOwnProperty.call(f,"resultValue")?f.resultValue:null,issues:[]})}catch(i){return q(i)}}async function B(c){try{if(!c.body||typeof c.body!="object"||Array.isArray(c.body))return S("simulateCardCycle requires a JSON object in body");let i=c.body,a=i["card-content"]??i,y=typeof a.id=="string"?a.id:"(unknown)",g=$(i["mock-fetched-sources"]??{}),p=$(i["mock-requires"]??{}),d=await o({body:{"card-content":a}}),m=d.status==="success"?{isValid:d.data.isValid,issues:d.data.issues}:{isValid:!1,issues:[d.status==="fail"?d.error:"internal error"]},f=Array.isArray(a.source_defs)?a.source_defs:[],R=$(a.card_data??{}),C=[],V=[];if(f.length>0){C=chunkIXZG74EW_cjs.a.enrichSourcesSync(f,{card_data:R,requires:p});for(let b of C){let A=b.projections,T=b._projections;if(A&&T){for(let k of Object.keys(A))if(T[k]===void 0){let ce=typeof b.bindTo=="string"?b.bindTo:"(unknown)";V.push({bindTo:ce,key:k,error:`Projection "${k}" resolved to undefined`});}}}}let L=[],K={...g};for(let b=0;b<C.length;b+=1){let A=C[b],T=typeof A.bindTo=="string"?A.bindTo:`source_${b}`;if(!t.nonCoreTaskExecutor){L.push({bindTo:T,skipped:!0,error:"No task executor configured"});continue}try{let k=await s("run-source-preflight",A,A.timeout??6e4);k.ok===!0&&!Object.prototype.hasOwnProperty.call(g,T)&&Object.prototype.hasOwnProperty.call(k,"resultValue")&&(K[T]=k.resultValue),L.push({bindTo:T,reachable:k.reachable,latencyMs:k.latencyMs,...k.ok===!0?{}:{error:typeof k.error=="string"?k.error:"Preflight run failed"}});}catch{L.push({bindTo:T,skipped:!0,error:"Executor does not support run-source-preflight"});}}let O=a.compute,H={},Q=[];if(O&&Array.isArray(O)&&O.length>0){let b={id:y,card_data:R,requires:p,source_defs:a.source_defs,compute:O},A=chunkIXZG74EW_cjs.a.runSync(b,{sourcesData:K});H=A.node.computed_values??{},Q=A.errors??[];}return x({cardId:y,ok:m.isValid&&V.length===0&&Q.length===0&&L.every(b=>!b.error),validation:m,source_probes:L,projection_errors:V,fetched_sources:K,computed_values:H,compute_errors:Q})}catch(i){return q(i)}}return {describeTaskExecutorCapabilities:w,validateCardPreflight:o,evalCardCompute:u,probeSourcePreflight:E,runSourcePreflight:D,simulateCardCycle:B}}function ne(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function le(e){let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}function fe(e){let t=new TextEncoder().encode(e);return ne(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function ge(e){return chunkHFW7E2Z7_cjs.a(e).slice(0,16)}function oe(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():`${Date.now().toString(16)}-${Math.random().toString(16).slice(2,10)}`}function h(e){return fe(String(e))}function _(){let e=String(Date.now()).padStart(13,"0"),t=Math.random().toString(36).slice(2,10).padEnd(8,"0");return `${e}-${t}`}function se(e){try{return chunkVQCIOKJV_cjs.b(e)}catch{return null}}function P(e,t){let n=se(e);return n?.kind==="firestore"&&n.value?n.value:t}function v(e){if(e===void 0)return null;if(Array.isArray(e))return e.map(t=>v(t===void 0?null:t));if(e&&typeof e=="object"){let t=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,r])=>[n,v(r)]);return Object.fromEntries(t)}return e}function ae(e,t){return e.collection("boards").doc(t)}function j(e,t,n){return ae(e,t).collection(n)}function U(e){return {kind:"firestore",value:String(e)}}function F(e){return chunkVQCIOKJV_cjs.a(U(e))}function ie(e){return {baseRef:U(`boards/${e}`),boardRuntimeStoreRef:F(`boards/${e}/runtime-board`),cardStoreRef:F(`boards/${e}/cards`),outputsStoreRef:F(`boards/${e}/runtime-out`),queueStoreRef:F(`boards/${e}/runtime`),scratchStoreRef:F(`boards/${e}/scratch`),chatStoreRef:F(`boards/${e}/chat`),artifactsStoreRef:F(`boards/${e}/files`),fetchedSourcesStoreRef:F(`boards/${e}/sources`)}}function J(e){return {async read(t){let n=await e.doc(h(t)).get();return n.exists?n.data()?.value??null:null},async write(t,n){await e.doc(h(t)).set(v({k:t,value:n}));},async delete(t){await e.doc(h(t)).delete();},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(s=>s.data()?.k??s.id)}}}function N(e){return {async append(t){let n=_();return await e.doc(n).set(v({id:n,createdAt:new Date().toISOString(),payload:t})),{id:n,payload:t}},async readAll(){return (await e.orderBy("id").get()).docs.map(n=>{let r=n.data()??{};return {id:String(r.id??n.id),payload:r.payload}})},async readAfter(t){let s=(await(t?e.where("id",">",t).orderBy("id"):e.orderBy("id")).get()).docs.map(o=>{let u=o.data()??{};return {id:String(u.id??o.id),payload:u.payload}});return {entries:s,newCursor:s.length>0?s[s.length-1].id:t}},async clear(){let t=await e.get();if(typeof e.firestore.batch=="function"){let n=e.firestore.batch();for(let r of t.docs)n.delete(e.doc(r.id));await n.commit();return}await Promise.all(t.docs.map(n=>e.doc(n.id).delete()));}}}function M(e){return {async read(t){let n=await e.doc(h(t)).get();return n.exists?n.data()?.content??null:null},async write(t,n){await e.doc(h(t)).set({k:t,content:n});},async exists(t){return (await e.doc(h(t)).get()).exists},async remove(t){await e.doc(h(t)).delete();},async readBytes(t){let n=await e.doc(h(t)).get();if(!n.exists)return null;let r=n.data()??{};return typeof r.bytesBase64=="string"?le(r.bytesBase64):typeof r.content=="string"?new TextEncoder().encode(r.content):null},async writeBytes(t,n){await e.doc(h(t)).set({k:t,bytesBase64:ne(n)});},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(s=>s.data()?.k??s.id)},async stat(t){let n=await e.doc(h(t)).get();if(!n.exists)return null;let r=n.data()??{},s=typeof r.bytesBase64=="string"?Math.floor(r.bytesBase64.length*3/4):typeof r.content=="string"?r.content.length:0;return {key:t,size:s,contentType:String(r.contentType??"application/octet-stream")}},async renameKey(t,n){let r=await e.doc(h(t)).get();if(!r.exists)return false;let s=r.data()??{};return await e.doc(h(n)).set({...s,k:n}),await e.doc(h(t)).delete(),true}}}function re(e){let t=M(e);return {...t,async getUniqueKey(n="scratch-",r=""){return `${n}${_()}${r}`},async create(n,r="scratch-",s=""){let o=`${r}${_()}${s}`;return await t.write(o,n),o},keyRef(n){return U(`${e.path}/${h(n)}`)},config:{async get(n){let r=await t.read(`__config__/${n}`);if(r==null)return null;try{return JSON.parse(r)}catch{return r}},async set(n,r){await t.write(`__config__/${n}`,JSON.stringify(r));}}}}function te(e,t){let n=ae(e,t);return {stream(r){return N(n.collection(`archive-stream-${r}`))},blob(r){return M(n.collection(`archive-blob-${r}`))},async listStreams(r=""){return typeof n.listCollections!="function"?[]:(await n.listCollections()).map(o=>o.path.split("/").at(-1)??"").filter(o=>o.startsWith(`archive-stream-${r}`)).map(o=>o.slice(15))},async listBlobs(r=""){return typeof n.listCollections!="function"?[]:(await n.listCollections()).map(o=>o.path.split("/").at(-1)??"").filter(o=>o.startsWith(`archive-blob-${r}`)).map(o=>o.slice(13))},config:{async get(r){let s=await n.collection("archive-config").doc("main").get();return s.exists?s.data()?.[r]??null:null},async set(r,s){await n.collection("archive-config").doc("main").set(v({[r]:s}),{merge:true});}}}}function ye(e,t={}){let n=t.holderId??oe(),r=t.ttlMs??3e4;return {async tryAcquire(){try{await e.firestore.runTransaction(async s=>{let o=await s.get(e),u=new Date().toISOString();if(o.exists){let l=o.data()??{};if(l.held===!0&&typeof l.expiresAt=="string"&&l.expiresAt>u)throw Object.assign(new Error("locked"),{code:"locked"})}s.set(e,{held:!0,holderId:n,acquiredAt:u,expiresAt:new Date(Date.now()+r).toISOString()});});}catch(s){if(s?.code==="locked")return null;throw s}return async()=>{try{await e.firestore.runTransaction(async s=>{let o=await s.get(e);if(!o.exists)return;(o.data()??{}).holderId===n&&s.update(e,{held:!1,holderId:null});});}catch{}}}}}function pe(e,t={}){let n=t.defaultVisibilityMs??3e4;return {async enqueue(r){let s=_(),o=new Date().toISOString();return await e.doc(s).set(v({id:s,body:r,enqueuedAt:o,attempt:0,staged:false,visibleAfter:o,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:s,body:r,enqueuedAt:o,attempt:0}},async enqueueMany(r){let s=[];for(let o of r)s.push(await this.enqueue(o));return s},async enqueueIfAbsent(r,s){if((await e.where("dedupKey","==",s).where("dead","==",false).limit(1).get()).docs.length>0)return null;let u=_(),l=new Date().toISOString();return await e.doc(u).set(v({id:u,body:r,dedupKey:s,enqueuedAt:l,attempt:0,staged:false,visibleAfter:l,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:u,body:r,enqueuedAt:l,attempt:0}},async stage(r,s={}){if(s.dedupKey&&(await e.where("dedupKey","==",s.dedupKey).where("dead","==",false).limit(1).get()).docs.length>0)return null;let o=_(),u=new Date().toISOString();return await e.doc(o).set(v({id:o,body:r,dedupKey:s.dedupKey,enqueuedAt:u,attempt:0,staged:true,visibleAfter:null,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:o,body:r,enqueuedAt:u,attempt:0}},async commitStaged(r){try{return await e.firestore.runTransaction(async s=>{let o=e.doc(r),u=await s.get(o);if(!u.exists)throw new Error("missing");let l=u.data()??{};if(l.dead===!0||l.staged!==!0)throw new Error("not-staged");s.update(o,{staged:!1,enqueuedAt:new Date().toISOString(),attempt:0,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async discardStaged(r,s){try{return await e.firestore.runTransaction(async o=>{let u=e.doc(r),l=await o.get(u);if(!l.exists)throw new Error("missing");let w=l.data()??{};if(w.dead===!0||w.staged!==!0)throw new Error("not-staged");o.update(u,{staged:!1,dead:!0,deadReason:s??"discarded"});}),!0}catch{return false}},async peekStaged(r=""){return (await e.where("dead","==",false).where("staged","==",true).orderBy("enqueuedAt").get()).docs.map(o=>o.data()??{}).filter(o=>!r||String(o.id??"").startsWith(r)).map(o=>({id:String(o.id??""),body:o.body,enqueuedAt:String(o.enqueuedAt??""),attempt:Number(o.attempt??0)}))},async lease(r={}){let s=Math.max(1,Number(r.max??1)),o=Math.max(1,Number(r.visibilityMs??n)),u=new Date().toISOString(),l=await e.where("dead","==",false).where("staged","==",false).where("visibleAfter","<=",u).orderBy("visibleAfter").limit(s*4).get(),w=[];for(let E of l.docs){if(w.length>=s)break;let D=e.doc(E.id);try{let B=null;await e.firestore.runTransaction(async c=>{let i=await c.get(D);if(!i.exists)throw new Error("gone");let a=i.data()??{},y=new Date().toISOString();if(a.dead===!0)throw new Error("dead");if(a.staged===!0)throw new Error("staged");if(typeof a.visibleAfter=="string"&&a.visibleAfter>y)throw new Error("hidden");if(a.leaseToken&&typeof a.leaseExpiresAt=="string"&&a.leaseExpiresAt>y)throw new Error("leased");let g=oe(),p=new Date(Date.now()+o).toISOString(),d=Number(a.attempt??0)+1;c.update(D,{leaseToken:g,leaseExpiresAt:p,attempt:d}),B={id:String(a.id??E.id),body:a.body,enqueuedAt:String(a.enqueuedAt??y),attempt:d,leaseToken:g,leaseExpiresAt:p};}),B&&w.push(B);}catch{}}return w},async ack(r,s){try{return await e.firestore.runTransaction(async o=>{let u=e.doc(r),l=await o.get(u);if(!l.exists)return;if((l.data()??{}).leaseToken!==s)throw new Error("token mismatch");o.delete(u);}),!0}catch{return false}},async nack(r,s,o={}){try{return await e.firestore.runTransaction(async u=>{let l=e.doc(r),w=await u.get(l);if(!w.exists)return;if((w.data()??{}).leaseToken!==s)throw new Error("token mismatch");o.dead===!0?u.update(l,{dead:!0,deadReason:o.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):u.update(l,{leaseToken:null,leaseExpiresAt:null,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async peekActive(r=""){return (await e.where("dead","==",false).where("staged","==",false).orderBy("enqueuedAt").get()).docs.map(o=>o.data()??{}).filter(o=>!r||String(o.id??"").startsWith(r)).map(o=>({id:String(o.id??""),body:o.body,enqueuedAt:String(o.enqueuedAt??""),attempt:Number(o.attempt??0)}))},async peekDeadLetter(r=""){return (await e.where("dead","==",true).orderBy("enqueuedAt").get()).docs.map(o=>o.data()??{}).filter(o=>!r||String(o.id??"").startsWith(r)).map(o=>({id:String(o.id??""),body:o.body,enqueuedAt:String(o.enqueuedAt??""),attempt:Number(o.attempt??0),reason:o.deadReason}))}}}function me(e,t,n={}){return chunk37HDEW26_cjs.c({boardId:t,kvStorage(r){return J(j(e,t,`kv-${r||"root"}`))},kvStorageForRef(r){return J(e.collection(P(r,`boards/${t}/kv-root`)))},blobStorage(r){return M(j(e,t,`blobs-${r||"root"}`))},blobStorageForRef(r){return M(e.collection(P(r,`boards/${t}/blobs-root`)))},chatStorageForRef(r){let s=P(r,`boards/${t}/chat`);return chunkMCPADH33_cjs.b(o=>N(e.collection(`${s}-journal-${ue(o)}`)),J(e.collection(`${s}-kv`)))},queueStoreRef:ie(t).queueStoreRef,queueStorageForRef(r,s){let o=P(r,`boards/${t}/runtime`);return pe(e.collection(`${o}-${s}`))},scratchStorage(){return re(j(e,t,"scratch"))},scratchStorageForRef(r){return re(e.collection(P(r,`boards/${t}/scratch`)))},archiveFactory(){return te(e,t)},archiveFactoryForRef(r){let s=se(r),o=s?.kind==="firestore-board"?s.value:t;return te(e,o)},journalStorage(){return N(j(e,t,"journal"))},journalStorageForRef(r){let s=P(r,`boards/${t}/runtime-board`);return N(e.collection(`${s}-journal`))},lock:ye(j(e,t,"locks").doc("board-lock"),{holderId:n.holderId}),hashFn(r){return ge(r)},genId(){return _()},supportsDirectSourceOutput(r){return r.howToRun==="queue-storage"||r.howToRun==="http:post"},requestProcessAccumulated:n.requestProcessAccumulated,publishBoardChangeNotifications:n.publishBoardChangeNotifications,onWarn:r=>console.warn(`[firestore-board-adapter:${t}] ${r}`)})}function Ce(e,t,n={}){let r={...ie(t),...n.refs??{}},s=me(e,t,n);return {refs:r,boardAdapter:s,nonCore:de(s,n)}}
2
- exports.createFirestoreArchiveFactory=te;exports.createFirestoreBlobStorage=M;exports.createFirestoreBoardAdapter=me;exports.createFirestoreBoardRefs=ie;exports.createFirestoreBoardRuntimeBundle=Ce;exports.createFirestoreJournalStorage=N;exports.createFirestoreKvStorage=J;exports.createFirestoreLock=ye;exports.createFirestoreQueueStorage=pe;exports.createFirestoreScratchStorage=re;exports.makeFirestoreRef=U;exports.serializeFirestoreRef=F;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var chunkHFW7E2Z7_cjs=require('../chunk-HFW7E2Z7.cjs'),chunkMCPADH33_cjs=require('../chunk-MCPADH33.cjs');require('../chunk-R44X3RQB.cjs'),require('../chunk-36QUKFL7.cjs');var chunk37HDEW26_cjs=require('../chunk-37HDEW26.cjs');require('../chunk-ZENTBLLA.cjs'),require('../chunk-7JVHYHT2.cjs');var chunkVQCIOKJV_cjs=require('../chunk-VQCIOKJV.cjs');require('../chunk-G4XXRHL2.cjs'),require('../chunk-LODXIALE.cjs'),require('../chunk-IXZG74EW.cjs'),require('../chunk-HWYMZK3N.cjs'),require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-YMEIPKLW.cjs'),require('../chunk-GNFE24S7.cjs');function N(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function P(e){let r="";for(let n=0;n<e.length;n++)r+=String.fromCharCode(e[n]);return btoa(r)}function j(e){let r=atob(e),n=new Uint8Array(r.length);for(let t=0;t<r.length;t++)n[t]=r.charCodeAt(t);return n}function U(e){let r=new TextEncoder().encode(e);return P(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function I(e){return chunkHFW7E2Z7_cjs.a(e).slice(0,16)}function K(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():`${Date.now().toString(16)}-${Math.random().toString(16).slice(2,10)}`}function c(e){return U(String(e))}function f(){let e=String(Date.now()).padStart(13,"0"),r=Math.random().toString(36).slice(2,10).padEnd(8,"0");return `${e}-${r}`}function M(e){try{return chunkVQCIOKJV_cjs.b(e)}catch{return null}}function p(e,r){let n=M(e);return n?.kind==="firestore"&&n.value?n.value:r}function g(e){if(e===void 0)return null;if(Array.isArray(e))return e.map(r=>g(r===void 0?null:r));if(e&&typeof e=="object"){let r=Object.entries(e).filter(([,n])=>n!==void 0).map(([n,t])=>[n,g(t)]);return Object.fromEntries(r)}return e}function Q(e,r){return e.collection("boards").doc(r)}function y(e,r,n){return Q(e,r).collection(n)}function b(e){return {kind:"firestore",value:String(e)}}function l(e){return chunkVQCIOKJV_cjs.a(b(e))}function _(e){return {baseRef:b(`boards/${e}`),boardRuntimeStoreRef:l(`boards/${e}/runtime-board`),cardStoreRef:l(`boards/${e}/cards`),outputsStoreRef:l(`boards/${e}/runtime-out`),queueStoreRef:l(`boards/${e}/runtime`),scratchStoreRef:l(`boards/${e}/scratch`),chatStoreRef:l(`boards/${e}/chat`),artifactsStoreRef:l(`boards/${e}/files`),fetchedSourcesStoreRef:l(`boards/${e}/sources`)}}function A(e){return {async read(r){let n=await e.doc(c(r)).get();return n.exists?n.data()?.value??null:null},async write(r,n){await e.doc(c(r)).set(g({k:r,value:n}));},async delete(r){await e.doc(c(r)).delete();},async listKeys(r=""){return (await(r?e.where("k",">=",r).where("k","<",`${r}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(s=>s.data()?.k??s.id)}}}function h(e){return {async append(r){let n=f();return await e.doc(n).set(g({id:n,createdAt:new Date().toISOString(),payload:r})),{id:n,payload:r}},async readAll(){return (await e.orderBy("id").get()).docs.map(n=>{let t=n.data()??{};return {id:String(t.id??n.id),payload:t.payload}})},async readAfter(r){let s=(await(r?e.where("id",">",r).orderBy("id"):e.orderBy("id")).get()).docs.map(a=>{let o=a.data()??{};return {id:String(o.id??a.id),payload:o.payload}});return {entries:s,newCursor:s.length>0?s[s.length-1].id:r}},async clear(){let r=await e.get();if(typeof e.firestore.batch=="function"){let n=e.firestore.batch();for(let t of r.docs)n.delete(e.doc(t.id));await n.commit();return}await Promise.all(r.docs.map(n=>e.doc(n.id).delete()));}}}function m(e){return {async read(r){let n=await e.doc(c(r)).get();return n.exists?n.data()?.content??null:null},async write(r,n){await e.doc(c(r)).set({k:r,content:n});},async exists(r){return (await e.doc(c(r)).get()).exists},async remove(r){await e.doc(c(r)).delete();},async readBytes(r){let n=await e.doc(c(r)).get();if(!n.exists)return null;let t=n.data()??{};return typeof t.bytesBase64=="string"?j(t.bytesBase64):typeof t.content=="string"?new TextEncoder().encode(t.content):null},async writeBytes(r,n){await e.doc(c(r)).set({k:r,bytesBase64:P(n)});},async listKeys(r=""){return (await(r?e.where("k",">=",r).where("k","<",`${r}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(s=>s.data()?.k??s.id)},async stat(r){let n=await e.doc(c(r)).get();if(!n.exists)return null;let t=n.data()??{},s=typeof t.bytesBase64=="string"?Math.floor(t.bytesBase64.length*3/4):typeof t.content=="string"?t.content.length:0;return {key:r,size:s,contentType:String(t.contentType??"application/octet-stream")}},async renameKey(r,n){let t=await e.doc(c(r)).get();if(!t.exists)return false;let s=t.data()??{};return await e.doc(c(n)).set({...s,k:n}),await e.doc(c(r)).delete(),true}}}function E(e){let r=m(e);return {...r,async getUniqueKey(n="scratch-",t=""){return `${n}${f()}${t}`},async create(n,t="scratch-",s=""){let a=`${t}${f()}${s}`;return await r.write(a,n),a},keyRef(n){return b(`${e.path}/${c(n)}`)},config:{async get(n){let t=await r.read(`__config__/${n}`);if(t==null)return null;try{return JSON.parse(t)}catch{return t}},async set(n,t){await r.write(`__config__/${n}`,JSON.stringify(t));}}}}function O(e,r){let n=Q(e,r);return {stream(t){return h(n.collection(`archive-stream-${t}`))},blob(t){return m(n.collection(`archive-blob-${t}`))},async listStreams(t=""){return typeof n.listCollections!="function"?[]:(await n.listCollections()).map(a=>a.path.split("/").at(-1)??"").filter(a=>a.startsWith(`archive-stream-${t}`)).map(a=>a.slice(15))},async listBlobs(t=""){return typeof n.listCollections!="function"?[]:(await n.listCollections()).map(a=>a.path.split("/").at(-1)??"").filter(a=>a.startsWith(`archive-blob-${t}`)).map(a=>a.slice(13))},config:{async get(t){let s=await n.collection("archive-config").doc("main").get();return s.exists?s.data()?.[t]??null:null},async set(t,s){await n.collection("archive-config").doc("main").set(g({[t]:s}),{merge:true});}}}}function V(e,r={}){let n=r.holderId??K(),t=r.ttlMs??3e4;return {async tryAcquire(){try{await e.firestore.runTransaction(async s=>{let a=await s.get(e),o=new Date().toISOString();if(a.exists){let i=a.data()??{};if(i.held===!0&&typeof i.expiresAt=="string"&&i.expiresAt>o)throw Object.assign(new Error("locked"),{code:"locked"})}s.set(e,{held:!0,holderId:n,acquiredAt:o,expiresAt:new Date(Date.now()+t).toISOString()});});}catch(s){if(s?.code==="locked")return null;throw s}return async()=>{try{await e.firestore.runTransaction(async s=>{let a=await s.get(e);if(!a.exists)return;(a.data()??{}).holderId===n&&s.update(e,{held:!1,holderId:null});});}catch{}}}}}function J(e,r={}){let n=r.defaultVisibilityMs??3e4;return {async enqueue(t){let s=f(),a=new Date().toISOString();return await e.doc(s).set(g({id:s,body:t,enqueuedAt:a,attempt:0,staged:false,visibleAfter:a,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:s,body:t,enqueuedAt:a,attempt:0}},async enqueueMany(t){let s=[];for(let a of t)s.push(await this.enqueue(a));return s},async enqueueIfAbsent(t,s){if((await e.where("dedupKey","==",s).where("dead","==",false).limit(1).get()).docs.length>0)return null;let o=f(),i=new Date().toISOString();return await e.doc(o).set(g({id:o,body:t,dedupKey:s,enqueuedAt:i,attempt:0,staged:false,visibleAfter:i,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:o,body:t,enqueuedAt:i,attempt:0}},async stage(t,s={}){if(s.dedupKey&&(await e.where("dedupKey","==",s.dedupKey).where("dead","==",false).limit(1).get()).docs.length>0)return null;let a=f(),o=new Date().toISOString();return await e.doc(a).set(g({id:a,body:t,dedupKey:s.dedupKey,enqueuedAt:o,attempt:0,staged:true,visibleAfter:null,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:a,body:t,enqueuedAt:o,attempt:0}},async commitStaged(t){try{return await e.firestore.runTransaction(async s=>{let a=e.doc(t),o=await s.get(a);if(!o.exists)throw new Error("missing");let i=o.data()??{};if(i.dead===!0||i.staged!==!0)throw new Error("not-staged");s.update(a,{staged:!1,enqueuedAt:new Date().toISOString(),attempt:0,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async discardStaged(t,s){try{return await e.firestore.runTransaction(async a=>{let o=e.doc(t),i=await a.get(o);if(!i.exists)throw new Error("missing");let d=i.data()??{};if(d.dead===!0||d.staged!==!0)throw new Error("not-staged");a.update(o,{staged:!1,dead:!0,deadReason:s??"discarded"});}),!0}catch{return false}},async peekStaged(t=""){return (await e.where("dead","==",false).where("staged","==",true).orderBy("enqueuedAt").get()).docs.map(a=>a.data()??{}).filter(a=>!t||String(a.id??"").startsWith(t)).map(a=>({id:String(a.id??""),body:a.body,enqueuedAt:String(a.enqueuedAt??""),attempt:Number(a.attempt??0)}))},async lease(t={}){let s=Math.max(1,Number(t.max??1)),a=Math.max(1,Number(t.visibilityMs??n)),o=new Date().toISOString(),i=await e.where("dead","==",false).where("staged","==",false).where("visibleAfter","<=",o).orderBy("visibleAfter").limit(s*4).get(),d=[];for(let w of i.docs){if(d.length>=s)break;let F=e.doc(w.id);try{let S=null;await e.firestore.runTransaction(async R=>{let x=await R.get(F);if(!x.exists)throw new Error("gone");let u=x.data()??{},k=new Date().toISOString();if(u.dead===!0)throw new Error("dead");if(u.staged===!0)throw new Error("staged");if(typeof u.visibleAfter=="string"&&u.visibleAfter>k)throw new Error("hidden");if(u.leaseToken&&typeof u.leaseExpiresAt=="string"&&u.leaseExpiresAt>k)throw new Error("leased");let T=K(),$=new Date(Date.now()+a).toISOString(),v=Number(u.attempt??0)+1;R.update(F,{leaseToken:T,leaseExpiresAt:$,attempt:v}),S={id:String(u.id??w.id),body:u.body,enqueuedAt:String(u.enqueuedAt??k),attempt:v,leaseToken:T,leaseExpiresAt:$};}),S&&d.push(S);}catch{}}return d},async ack(t,s){try{return await e.firestore.runTransaction(async a=>{let o=e.doc(t),i=await a.get(o);if(!i.exists)return;if((i.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.delete(o);}),!0}catch{return false}},async nack(t,s,a={}){try{return await e.firestore.runTransaction(async o=>{let i=e.doc(t),d=await o.get(i);if(!d.exists)return;if((d.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.dead===!0?o.update(i,{dead:!0,deadReason:a.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):o.update(i,{leaseToken:null,leaseExpiresAt:null,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async peekActive(t=""){return (await e.where("dead","==",false).where("staged","==",false).orderBy("enqueuedAt").get()).docs.map(a=>a.data()??{}).filter(a=>!t||String(a.id??"").startsWith(t)).map(a=>({id:String(a.id??""),body:a.body,enqueuedAt:String(a.enqueuedAt??""),attempt:Number(a.attempt??0)}))},async peekDeadLetter(t=""){return (await e.where("dead","==",true).orderBy("enqueuedAt").get()).docs.map(a=>a.data()??{}).filter(a=>!t||String(a.id??"").startsWith(t)).map(a=>({id:String(a.id??""),body:a.body,enqueuedAt:String(a.enqueuedAt??""),attempt:Number(a.attempt??0),reason:a.deadReason}))}}}function W(e,r,n={}){return chunk37HDEW26_cjs.c({boardId:r,kvStorage(t){return A(y(e,r,`kv-${t||"root"}`))},kvStorageForRef(t){return A(e.collection(p(t,`boards/${r}/kv-root`)))},blobStorage(t){return m(y(e,r,`blobs-${t||"root"}`))},blobStorageForRef(t){return m(e.collection(p(t,`boards/${r}/blobs-root`)))},chatStorageForRef(t){let s=p(t,`boards/${r}/chat`);return chunkMCPADH33_cjs.b(a=>h(e.collection(`${s}-journal-${N(a)}`)),A(e.collection(`${s}-kv`)))},queueStoreRef:_(r).queueStoreRef,queueStorageForRef(t,s){let a=p(t,`boards/${r}/runtime`);return J(e.collection(`${a}-${s}`))},scratchStorage(){return E(y(e,r,"scratch"))},scratchStorageForRef(t){return E(e.collection(p(t,`boards/${r}/scratch`)))},archiveFactory(){return O(e,r)},archiveFactoryForRef(t){let s=M(t),a=s?.kind==="firestore-board"?s.value:r;return O(e,a)},journalStorage(){return h(y(e,r,"journal"))},journalStorageForRef(t){let s=p(t,`boards/${r}/runtime-board`);return h(e.collection(`${s}-journal`))},lock:V(y(e,r,"locks").doc("board-lock"),{holderId:n.holderId}),hashFn(t){return I(t)},genId(){return f()},supportsDirectSourceOutput(t){return t.howToRun==="queue-storage"||t.howToRun==="http:post"},requestProcessAccumulated:n.requestProcessAccumulated,publishBoardChangeNotifications:n.publishBoardChangeNotifications,onWarn:t=>console.warn(`[firestore-board-adapter:${r}] ${t}`)})}function X(e,r,n={}){let t={..._(r),...n.refs??{}},s=W(e,r,n);return {refs:t,boardAdapter:s}}
2
+ exports.createFirestoreArchiveFactory=O;exports.createFirestoreBlobStorage=m;exports.createFirestoreBoardAdapter=W;exports.createFirestoreBoardRefs=_;exports.createFirestoreBoardRuntimeBundle=X;exports.createFirestoreJournalStorage=h;exports.createFirestoreKvStorage=A;exports.createFirestoreLock=V;exports.createFirestoreQueueStorage=J;exports.createFirestoreScratchStorage=E;exports.makeFirestoreRef=b;exports.serializeFirestoreRef=l;//# sourceMappingURL=index.cjs.map
3
3
  //# sourceMappingURL=index.cjs.map
@@ -1,11 +1,9 @@
1
- import { ExecutionRef } from '../execution-refs.cjs';
2
1
  import { a as KindValueRef } from '../storage-interface-D-iEiTJA.cjs';
3
2
  import { A as AsyncArchiveFactory, a as AsyncBlobStorage, b as AsyncJournalStorage, c as AsyncKVStorage, d as AsyncAtomicRelayLock, e as AsyncQueueStorage, f as AsyncScratchStorage } from '../storage-async-interface-CyO-zwVQ.cjs';
4
3
  import { A as AsyncBoardPlatformAdapter } from '../board-platform-adapter-async-BZIftm36.cjs';
5
- import { c as BoardRuntimeNonCorePublic } from '../types-Ch0u3FKP.cjs';
6
4
  import '../board-live-cards-public-BT5HrgqZ.cjs';
5
+ import '../execution-refs.cjs';
7
6
  import '../types-BBhqYGhE.cjs';
8
- import '../board-live-cards-public-async-CYjr4mgX.cjs';
9
7
 
10
8
  interface FirestoreDocumentSnapshotLike {
11
9
  readonly exists: boolean;
@@ -63,12 +61,6 @@ interface FirestoreBoardRefs {
63
61
  artifactsStoreRef: string;
64
62
  fetchedSourcesStoreRef: string;
65
63
  }
66
- interface FirestoreNonCoreExecutorRequest {
67
- subcommand: string;
68
- input?: string;
69
- timeoutMs?: number;
70
- }
71
- type FirestoreNonCoreExecutorHook = (request: FirestoreNonCoreExecutorRequest) => Promise<unknown>;
72
64
  interface FirestoreQueueStorageOptions {
73
65
  defaultVisibilityMs?: number;
74
66
  }
@@ -77,8 +69,6 @@ interface FirestoreBoardAdapterOptions {
77
69
  holderId?: string;
78
70
  requestProcessAccumulated?: () => void | Promise<void>;
79
71
  publishBoardChangeNotifications?: (notifications: unknown[]) => void | Promise<void>;
80
- nonCoreTaskExecutorRef?: ExecutionRef;
81
- nonCoreTaskExecutor?: FirestoreNonCoreExecutorHook;
82
72
  }
83
73
  declare function makeFirestoreRef(path: string): KindValueRef;
84
74
  declare function serializeFirestoreRef(path: string): string;
@@ -107,7 +97,6 @@ declare function createFirestoreBoardRuntimeBundle(db: FirestoreLike, boardId: s
107
97
  fetchedSourcesStoreRef: string;
108
98
  };
109
99
  boardAdapter: AsyncBoardPlatformAdapter;
110
- nonCore: BoardRuntimeNonCorePublic;
111
100
  };
112
101
 
113
- export { type FirestoreBoardAdapterOptions, type FirestoreBoardRefs, type FirestoreCollectionLike, type FirestoreDocumentLike, type FirestoreDocumentSnapshotLike, type FirestoreLike, type FirestoreNonCoreExecutorHook, type FirestoreNonCoreExecutorRequest, type FirestoreQueryLike, type FirestoreQuerySnapshotLike, type FirestoreQueueStorageOptions, type FirestoreTransactionLike, createFirestoreArchiveFactory, createFirestoreBlobStorage, createFirestoreBoardAdapter, createFirestoreBoardRefs, createFirestoreBoardRuntimeBundle, createFirestoreJournalStorage, createFirestoreKvStorage, createFirestoreLock, createFirestoreQueueStorage, createFirestoreScratchStorage, makeFirestoreRef, serializeFirestoreRef };
102
+ export { type FirestoreBoardAdapterOptions, type FirestoreBoardRefs, type FirestoreCollectionLike, type FirestoreDocumentLike, type FirestoreDocumentSnapshotLike, type FirestoreLike, type FirestoreQueryLike, type FirestoreQuerySnapshotLike, type FirestoreQueueStorageOptions, type FirestoreTransactionLike, createFirestoreArchiveFactory, createFirestoreBlobStorage, createFirestoreBoardAdapter, createFirestoreBoardRefs, createFirestoreBoardRuntimeBundle, createFirestoreJournalStorage, createFirestoreKvStorage, createFirestoreLock, createFirestoreQueueStorage, createFirestoreScratchStorage, makeFirestoreRef, serializeFirestoreRef };