yaml-flow 8.9.1 → 8.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/asset-integrity.json +5 -5
- package/browser/live-cards.schema.json +1 -6
- package/browser/server-runtime-controlface.js +4 -4
- package/lib/board-live-cards-mcp.cjs +1 -1
- package/lib/board-live-cards-mcp.js +1 -1
- package/lib/board-live-cards-node.cjs +2 -2
- package/lib/board-live-cards-node.js +1 -1
- package/lib/board-live-cards-public.cjs +1 -1
- package/lib/board-live-cards-public.js +1 -1
- package/lib/board-live-cards-server-runtime.cjs +1 -1
- package/lib/board-live-cards-server-runtime.js +1 -1
- package/lib/board-livegraph-runtime/index.cjs +1 -1
- package/lib/board-livegraph-runtime/index.js +1 -1
- package/lib/card-compute/index.cjs +1 -1
- package/lib/card-compute/index.d.cts +0 -1
- package/lib/card-compute/index.d.ts +0 -1
- package/lib/card-compute/index.js +1 -1
- package/lib/card-validation.cjs +1 -1
- package/lib/card-validation.js +1 -1
- package/lib/{chunk-32GZ4ODA.js → chunk-4VZL3GWU.js} +3 -3
- package/lib/{chunk-4HIEOBJC.js → chunk-7E5NKZIO.js} +2 -2
- package/lib/{chunk-XQAHHUZO.cjs → chunk-7W4QQX7S.cjs} +2 -2
- package/lib/chunk-BVQISI6G.js +3 -0
- package/lib/chunk-CBRVINMT.js +2 -0
- package/lib/chunk-E46UCDYN.js +2 -0
- package/lib/{chunk-OPNGCSXJ.js → chunk-GLKWEPX6.js} +2 -2
- package/lib/{chunk-JAL25FGA.cjs → chunk-GTHQJXYW.cjs} +2 -2
- package/lib/{chunk-ORBKEBNX.cjs → chunk-IRGTOCEU.cjs} +2 -2
- package/lib/chunk-JHXRGPL7.cjs +3 -0
- package/lib/{chunk-HDGEWOC2.cjs → chunk-KSKPS6OO.cjs} +2 -2
- package/lib/chunk-M53MX233.js +3 -0
- package/lib/chunk-N5RUH4NG.cjs +3 -0
- package/lib/chunk-NLC4FN7V.cjs +2 -0
- package/lib/{chunk-7KSENEPK.js → chunk-OEL5P7XE.js} +2 -2
- package/lib/{chunk-XLHMUPBW.js → chunk-RWAEV253.js} +2 -2
- package/lib/chunk-UG55PF75.cjs +2 -0
- package/lib/{chunk-INRLKWC2.cjs → chunk-WYKCHXBZ.cjs} +3 -3
- package/lib/chunk-YXKWIPQM.cjs +3 -0
- package/lib/chunk-ZA4FS27N.js +3 -0
- package/lib/cloud-storage.cjs +1 -1
- package/lib/cloud-storage.js +1 -1
- package/lib/continuous-event-graph/index.cjs +1 -1
- package/lib/continuous-event-graph/index.js +1 -1
- package/lib/firestore-storage/index.cjs +1 -1
- package/lib/firestore-storage/index.js +1 -1
- package/lib/index.cjs +2 -2
- package/lib/index.js +1 -1
- package/lib/localstorage-storage/index.cjs +1 -1
- package/lib/localstorage-storage/index.js +1 -1
- package/lib/server-runtime/index.cjs +1 -1
- package/lib/server-runtime/index.js +1 -1
- package/lib/server-runtime-controlface/index.cjs +1 -1
- package/lib/server-runtime-controlface/index.js +1 -1
- package/lib/server-runtime-core/index.cjs +1 -1
- package/lib/server-runtime-core/index.js +1 -1
- package/package.json +1 -1
- package/schema/live-cards.schema.json +1 -6
- package/lib/chunk-3KC6LBOG.js +0 -3
- package/lib/chunk-FO4KNVU7.cjs +0 -2
- package/lib/chunk-HWYMZK3N.cjs +0 -3
- package/lib/chunk-IXZG74EW.cjs +0 -2
- package/lib/chunk-JMDHDY6M.js +0 -2
- package/lib/chunk-RP2I3OLA.cjs +0 -3
- package/lib/chunk-TMS7KDKH.js +0 -3
- package/lib/chunk-UIUCNV3X.cjs +0 -3
- package/lib/chunk-VS4E7QFN.js +0 -3
- package/lib/chunk-YBYXCFAI.js +0 -2
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var chunkLFVMX23W_cjs=require('./chunk-LFVMX23W.cjs'),chunkNM6O35RY_cjs=require('./chunk-NM6O35RY.cjs'),chunkNBJTYAYN_cjs=require('./chunk-NBJTYAYN.cjs'),chunkHDGEWOC2_cjs=require('./chunk-HDGEWOC2.cjs'),chunkBQUQTOPB_cjs=require('./chunk-BQUQTOPB.cjs'),chunkGPCMBPLK_cjs=require('./chunk-GPCMBPLK.cjs'),chunk7FGPOGRV_cjs=require('./chunk-7FGPOGRV.cjs'),chunkLPXVVMQT_cjs=require('./chunk-LPXVVMQT.cjs'),chunk272IYUKT_cjs=require('./chunk-272IYUKT.cjs'),chunkUIUCNV3X_cjs=require('./chunk-UIUCNV3X.cjs'),chunkWRMOGPRG_cjs=require('./chunk-WRMOGPRG.cjs'),chunkRP2I3OLA_cjs=require('./chunk-RP2I3OLA.cjs'),chunk5XLFPPTY_cjs=require('./chunk-5XLFPPTY.cjs'),chunkSDJ3747Q_cjs=require('./chunk-SDJ3747Q.cjs'),chunkOF4FPYNI_cjs=require('./chunk-OF4FPYNI.cjs'),chunk2RIHC5TZ_cjs=require('./chunk-2RIHC5TZ.cjs');function ce(R){let{apiBasePath:h,json:w,readJsonBody:L,initBoardAndSetup:F,bootstrapBoard:v,buildPublishedRuntimePayload:W,createMcpControlplaneToolRegistry:j,retriggerCard:M,applyCardAction:I,resolveChatHandlerTarget:E,sendCardFileDownloadResponse:$}=R;async function J(H,B,V){let l=H.method||"GET",A=V,u=A.pathname;try{if(l==="POST"&&u===`${h}/mcp-actions`){await v();let m=Date.now(),b=new Date(m).toISOString(),S=await L(H),f=typeof S.tool=="string"?S.tool.trim():"",T=S.args&&typeof S.args=="object"&&!Array.isArray(S.args)?S.args:{};if(!f)return w(B,400,{error:"tool is required"}),!0;let P=chunkLPXVVMQT_cjs.a(T,"card_id");if(!P)return w(B,400,{error:"MCP action requires card_id"}),!0;if(f==="retrigger-card"||f==="retrigger"){await M(P);let O=Date.now();return w(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:f,requestReceivedAt:b,requestReceivedAtMs:m,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:200}}),!0}let g=chunkLPXVVMQT_cjs.c(T,"payload");if(f==="chat-send"&&!await E(P)){let O=Date.now();return w(B,409,{error:`chat handler is not configured for card: ${P}`,requestReceivedAt:b,requestReceivedAtMs:m,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:409}),!0}if(f==="chat-send"){let O=typeof g["turn-id"]=="string"?g["turn-id"]:typeof g.turnId=="string"?g.turnId:typeof g.turn=="string"?g.turn:"";if(!O||!String(O).trim()){let at=Date.now();return w(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${P}`,requestReceivedAt:b,requestReceivedAtMs:m,responseSentAt:new Date(at).toISOString(),responseSentAtMs:at,responseStatus:400}),!0}}await I(P,f,g);let _=Date.now();return w(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:f,requestReceivedAt:b,requestReceivedAtMs:m,responseSentAt:new Date(_).toISOString(),responseSentAtMs:_,responseStatus:200}}),!0}if(l==="POST"&&u===`${h}/mcp-controlplane`){await v();let m=await L(H),b=typeof m.tool=="string"?m.tool.trim():"",S=m.args&&typeof m.args=="object"&&!Array.isArray(m.args)?m.args:{};if(!b)return w(B,400,{error:"tool is required"}),!0;try{let f=await chunk272IYUKT_cjs.a(b,S,j());if(f&&typeof f=="object"&&!Array.isArray(f)){let T=f;if(T.status==="fail")return w(B,400,{error:chunk272IYUKT_cjs.b(f,"Request failed")}),!0;if(T.status==="error")return w(B,500,{error:chunk272IYUKT_cjs.b(f,"Internal error")}),!0}w(B,200,f);}catch(f){let T=typeof f?.statusCode=="number"?Number(f.statusCode):500,P=f instanceof Error?f.message:String(f);w(B,T,{error:P});}return !0}let k=u.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(h)}/cards/([^/]+)/retrigger$`));if(l==="POST"&&k){await v();let m=decodeURIComponent(k[1]);return await M(m),w(B,200,{ok:!0}),!0}let x=u.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(h)}/cards/([^/]+)/actions$`));if(l==="POST"&&x){await v();let m=decodeURIComponent(x[1]),b=Date.now(),S=new Date(b).toISOString(),f=await L(H),T=f?.actionType;if(T==="chat-send"&&!await E(m)){let g=Date.now();return w(B,409,{error:`chat handler is not configured for card: ${m}`,requestReceivedAt:S,requestReceivedAtMs:b,responseSentAt:new Date(g).toISOString(),responseSentAtMs:g,responseStatus:409}),!0}if(T==="chat-send"){let g=f?.payload??{},_=typeof g["turn-id"]=="string"?g["turn-id"]:typeof g.turnId=="string"?g.turnId:typeof g.turn=="string"?g.turn:"";if(!_||!String(_).trim()){let O=Date.now();return w(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${m}`,requestReceivedAt:S,requestReceivedAtMs:b,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:400}),!0}}await I(m,T,f?.payload);let P=Date.now();return w(B,200,{ok:!0,requestReceivedAt:S,requestReceivedAtMs:b,responseSentAt:new Date(P).toISOString(),responseSentAtMs:P,responseStatus:200}),!0}let N=u.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(h)}/cards/([^/]+)/files/(\\d+)$`));if(l==="GET"&&N){let m=decodeURIComponent(N[1]),b=parseInt(N[2],10),S=A.searchParams.get("sn");return await $(B,m,b,S),!0}return !1}catch(k){let x=k?.statusCode||500;return w(B,x,{error:String(k?.message||k)}),true}}return {handleRuntimeApi:J}}var ze=3e4;function Ke(R){let h=R.socket?.remoteAddress??"";return h==="127.0.0.1"||h==="::1"||h==="::ffff:127.0.0.1"}function ue(R){let{apiBasePath:h,emitNotifications:w,readJsonBody:L,json:F}=R,v=`${h}/notify-q`;async function W(j,M,I){if(I.pathname!==v)return false;if((j.method??"").toUpperCase()!=="POST")return F(M,405,{status:"error",error:"Method not allowed"}),true;if(!Ke(j))return F(M,403,{status:"error",error:"Forbidden"}),true;let E;try{E=await L(j);}catch{return F(M,400,{status:"error",error:"Invalid JSON body"}),true}if(!E||typeof E!="object"||!Array.isArray(E.notifications))return F(M,400,{status:"error",error:"body.notifications must be an array"}),true;let $=E.notifications,{accepted:J,rejected:H}=chunkHDGEWOC2_cjs.b($,Date.now(),ze);return J.length>0&&w(J),F(M,200,{status:"success",data:{accepted:J.length,rejected:H}}),true}return {handleNotifyRoute:W}}var le={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},de="chat-handler-flow-queue",ot="__probe__echo__probe__";function jr(R){let h=String(R.apiBasePath||"/api/board").replace(/\/$/,""),w={...le,...R.corsHeaders||{}},L=R.queueLaneTuning??{},F=R.boardId||"",v=R.logger||{info:console.log,warn:console.warn,error:console.error},W=R.invocationAdapter,j=R.chatFlowRunner||null,M=R.notificationTransport||null,I=R.serverUrl||null,E=R.executionExtra||{},$=R.onSseClientConnected,J=R.onSseClientDisconnected,H=R.onChannelSubscribed,B=R.onChannelUnsubscribed,V=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async(t,e)=>await tt.buildSseOneShotBatch({params:{cardId:t},body:{receiving:e}}),onSseClientDisconnected:J}),l=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async()=>({status:"success",data:{kind:"notification-batch",category:"batch",notifications:[]}})});function A(t){function e(a){return {...a,queueStorageForRef(d,C){return chunkSDJ3747Q_cjs.a(a.queueStorageForRef(d,C),{lane:C,emitNotification:i})}}}function r(a){return {...a,queueStorageForRef(d,C){return chunkUIUCNV3X_cjs.h(a.queueStorageForRef(d,C),{lane:C,emitNotification:i})}}}function n(a){return {async get(d){return a.get(d)},async set(d){return a.set(d)},async del(d){return a.del(d)},async patch(d){return a.patch(d)},async appendFiles(d){return a.appendFiles(d)}}}function o(a){return {async get(d){return await a.get(d)},async set(d){return await a.set(d)},async del(d){return await a.del(d)},async patch(d){return await a.patch(d)},async appendFiles(d){return await a.appendFiles(d)}}}let s=null;function i(a){if(a.kind==="notification-batch"){O(a.notifications,s??void 0);return}O([a],s??void 0);}let c=chunkBQUQTOPB_cjs.a(t.boardAdapter)?r(t.boardAdapter):e(t.boardAdapter),D=t.nonCoreAdapter??(!chunkBQUQTOPB_cjs.a(c)&&b(c)?c:null),y=chunkBQUQTOPB_cjs.a(c)?chunkUIUCNV3X_cjs.i(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}):chunkRP2I3OLA_cjs.y(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}),q=t.nonCore??(D?chunkRP2I3OLA_cjs.z(t.baseRef,D,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),Ue=c.chatStorageForRef(t.chatStoreRef),lt,We=chunkBQUQTOPB_cjs.a(c)?(()=>{let a=chunkUIUCNV3X_cjs.d(chunkUIUCNV3X_cjs.c(chunkUIUCNV3X_cjs.b(c.kvStorageForRef(t.cardStoreRef)),c.hashFn),v.warn),d=chunkUIUCNV3X_cjs.g(a,{emitNotification:i}),C=o(d);return lt={get(p){return C.get(p)},set(p){return C.set(p)}},C})():(()=>{let a=c.kvStorageForRef(t.cardStoreRef),C=chunk5XLFPPTY_cjs.a(chunkRP2I3OLA_cjs.l({readIndex:()=>a.read("_index"),writeIndex:p=>a.write("_index",p),readCard:p=>a.read(p),writeCard:(p,pt)=>(a.write(p,pt),p),removeCard:p=>{a.delete(p);},cardExists:p=>a.read(p)!==null,defaultCardKey:p=>p},v.warn),{emitNotification:i});return lt=C,n(C)})(),ft;if(chunkBQUQTOPB_cjs.a(c)){let a=c.blobStorageForRef(t.artifactsStoreRef);ft={async putBytes(d,C){if(a.writeBytes){await a.writeBytes(d,C);return}let p=JSON.stringify({__kind:"bytes-array",data:[...C]});await a.write(d,p);},async getBytes(d){if(a.readBytes){let p=await a.readBytes(d);if(p!==null)return p}let C=await a.read(d);if(C===null)return null;try{let p=JSON.parse(C);if(p&&p.__kind==="bytes-array"&&Array.isArray(p.data))return new Uint8Array(p.data)}catch{}return new TextEncoder().encode(C)},async listKeys(d){return await a.listKeys(d)}};}else {let a=c.blobStorageForRef(t.artifactsStoreRef),d=chunkNBJTYAYN_cjs.a(a);ft={putBytes(C,p,pt){d.putBytes(C,p,pt);},getBytes(C){return d.getBytes(C)},listKeys(C){return d.list(C).map(p=>p.key)}};}let Je={async init(a){return y.init(a)},async status(a){return y.status(a)},async getConfig(a){return y.getConfig(a)},async getAllOutputsDataObjects(a){return y.getAllOutputsDataObjects(a)},async getAllOutputsComputedValues(a){return y.getAllOutputsComputedValues(a)},async getOutputsFetchedSources(a){return y.getOutputsFetchedSources(a)},async buildSseOneShotPayload(a){return y.buildSseOneShotPayload(a)},async upsertCard(a){return y.upsertCard(a)},async removeCard(a){return y.removeCard(a)},async sourceDataFetched(a){return y.sourceDataFetched(a)},async sourceDataFetchFailure(a){return y.sourceDataFetchFailure(a)}};return s={label:t.label,board:y,nonCore:q,publicCardStore:lt,boardOps:Je,cardStoreOps:We,get filesArtifacts(){return ft},get chatStorage(){return Ue},boardAdapter:c,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:chunkHDGEWOC2_cjs.c(),notificationTeardown:null,initialized:false,cardsBootstrapped:false},s}let u=R.boards.map(A),k=new Map;function x(t){return k.get(t)??0}function N(t){return t.queueStoreRef}function m(t,e){if(chunkBQUQTOPB_cjs.a(t.boardAdapter)){let n=t.boardAdapter.queueStorageForRef(N(t),e);return chunkWRMOGPRG_cjs.a(n)}let r=t.boardAdapter.queueStorageForRef(N(t),e);return chunkGPCMBPLK_cjs.a(r)}function b(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function S(t){let e=u[x(t)];return {files:e?e.filesArtifacts:null}}function f(){return chunkNBJTYAYN_cjs.c()}function T(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}function P(t){return "cardId"in t&&typeof t.cardId=="string"?z(t.cardId)??void 0:u[0]??void 0}function g(t){for(let e of t){let r=P(e);if(r)return r}return u[0]??void 0}function _(t,e={}){if(!t||t.length===0)return;let r=chunk2RIHC5TZ_cjs.e(t),n={kind:"notification-batch",category:"batch",notifications:r},o=e.ctx??g(r);if(e.appendState!==false&&o&&chunkHDGEWOC2_cjs.e(o.notification,n),e.broadcastSse!==false){let s=r.filter(c=>c.kind==="message_enqueued"),i=r.filter(c=>c.kind!=="message_enqueued");i.length>0&&V.broadcastNotificationBatch(i),s.length>0&&l.broadcastNotificationBatch(s);}if(!(e.mirrorExternal===false||!o?.boardAdapter.publishBoardChangeNotifications))try{let s=r.filter(i=>i.category==="board-output"||i.category==="card-store");s.length>0&&o.boardAdapter.publishBoardChangeNotifications(s);}catch{}}function O(t,e){_(t,{ctx:e,appendState:true,broadcastSse:true,mirrorExternal:true});}async function at(t){if(!t||t.notificationTeardown||!M||!t.notifyRef)return;let e=await M.subscribe(t.notifyRef,r=>{let n=chunkHDGEWOC2_cjs.a(r);_(n,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});});t.notificationTeardown=e;}async function fe(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 n=await t.boardOps.init({params:e,body:r});if(n.status!=="success")throw Object.assign(new Error(n.error||`init failed for ${t.label}`),{statusCode:500});if(await at(t),!t.chatHandlerFlow&&t.chatHandlerRef&&W.describe)try{let o=await W.describe(t.chatHandlerRef);o&&o.kind!=="chat-handler"?v.warn(`[init] chat-handler describe returned kind="${o.kind}", expected "chat-handler" for ${t.label}`):o&&v.info(`[init] chat-handler validated: ${o.name} (protocol ${o.protocolVersion}) for ${t.label}`);}catch(o){v.warn(`[init] chat-handler describe failed for ${t.label}: ${o?.message||String(o)}`);}t.initialized=true;}async function ut(t){let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&chunkHDGEWOC2_cjs.d(r.data)&&e.push({kind:"status",status:r.data});let n=await t.boardOps.getAllOutputsDataObjects({});if(n.status==="success"&&n.data!=null)for(let[s,i]of Object.entries(n.data))s&&e.push({kind:"data_object",key:s,payload:i});let o=await t.boardOps.getAllOutputsComputedValues({});if(o.status==="success"&&o.data!=null)for(let[s,i]of Object.entries(o.data))s&&i&&typeof i=="object"&&!Array.isArray(i)&&e.push({kind:"computed_values",cardId:s,values:i});e.length>0&&_(e,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});}async function Rt(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),n=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let o of n)typeof o.id=="string"&&(k.set(o.id,e),await t.boardOps.upsertCard({params:{cardId:o.id}}));t.cardsBootstrapped=true;}async function G(){for(let t of u)await fe(t);}async function st(){await G();for(let t=0;t<u.length;t++)await ut(u[t]),await Rt(u[t],t),await ut(u[t]);}async function yt(t=false){t||await G();for(let e of u){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function z(t){return u[x(t)]??null}async function X(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 n=Array.isArray(r.data?.cards)?r.data.cards:[];return n.length>0?n[0]:null}async function pe(){let t=async r=>{if(!r)return [];let n=await r.cardStoreOps.get({});return n.status!=="success"||!Array.isArray(n.data?.cards)?[]:n.data.cards},e=[];for(let r of u)e.push(...await t(r));return e}function ht(){return u[0]??null}function me(t){return z(t)??ht()}function U(t){let e=me(t);if(!e)throw Object.assign(new Error(`Board context is unavailable for chat operations: ${t}`),{statusCode:404});return e.chatStorage}async function ge(t){return await U(t).isProcessing(t)}async function Y(t,e){let r=await tt.setProcessing({params:{cardId:t},body:{active:e}});if(r.status!=="success")throw Object.assign(new Error(r.error||`Failed to set chat processing for card: ${t}`),{statusCode:500})}let tt=chunkOF4FPYNI_cjs.a({append(t,e,r,n,o){return U(t).append(t,e,r,n,o)},readAll(t){return U(t).readAll(t)},readAfter(t,e){return U(t).readAfter(t,e)},clear(t){return U(t).clear(t)},setProcessing(t,e){return U(t).setProcessing(t,e)},isProcessing(t){return U(t).isProcessing(t)},getConfig(t){return U(t).getConfig(t)},setConfig(t,e){return U(t).setConfig(t,e)}},{emitNotification(t){if(t.kind==="notification-batch"){O(t.notifications);return}O([t]);}}),wt=chunkHDGEWOC2_cjs.p({boardContexts:u,cardOwnerIndex:k,cardContextForCard:t=>z(t),readStatusSnapshot:()=>be(),readDataObjectsByToken:()=>Ce(),readCardRuntimeArtifacts:()=>Se(),readCardFromStore:t=>X(t),readCardDefinitions:()=>pe(),processAccumulatedLaneInternal:t=>yt(t),reportSourceFetched:(t,e)=>kt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>Pt(t,{reason:e}),uploadCardFile:(t,e,r,n,o)=>Ct(t,e,r,n,o),chatStorePublic:tt,serverUrl:I,apiBasePath:h}),Re=wt.mcpCardStoreFacade,it=wt.createMcpFacade,ye=chunkHDGEWOC2_cjs.j({boardId:F,bootstrapBoard:()=>st(),sseHub:V,onChannelSubscribed:H,onChannelUnsubscribed:B,getMcpFacade:()=>it(),getMcpCardStoreFacade:()=>Re()});function he(t){return chunkHDGEWOC2_cjs.m(t)}function we(){return chunkHDGEWOC2_cjs.n(it())}function bt(){return chunkHDGEWOC2_cjs.o({boardId:F,uploadCardFile:Ct,getMcpFacade:()=>it(),controlplane:ye})}let ct=chunkHDGEWOC2_cjs.k({boardId:F,boardContexts:u,readChatRecords:t=>Fe(t),getChatProcessing:t=>ge(t)}),be=ct.readStatusSnapshot,Se=ct.readCardRuntimeArtifacts,Ce=ct.readDataObjectsByToken,dt=ct.buildPublishedRuntimePayload;async function St(t,e,r){let n=r?.syncBoard!==false,o=r?.restartOnlyIfChanged===true,s=z(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let i=await X(t);if(!i)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let c=o?JSON.stringify(i):null,D=e(i)||i;if(o&&JSON.stringify(D)===c)return;let y=await s.cardStoreOps.set({body:D});if(y.status!=="success")throw Object.assign(new Error(y.error||`Failed to persist card: ${t}`),{statusCode:500});if(n){let q=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(q.status!=="success")throw Object.assign(new Error(q.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Ae(t,e){await St(t,e,{syncBoard:true});}async function Be(t,e){await St(t,e,{syncBoard:false});}async function ke(t){let e=z(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await X(t))throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let n=await e.boardOps.upsertCard({params:{cardId:t,restart:true}});if(n.status!=="success")throw Object.assign(new Error(n.error||`Failed to retrigger card: ${t}`),{statusCode:500})}async function Pe(t){let e=await tt.clear({params:{cardId:t}});if(e.status!=="success")throw Object.assign(new Error(e.error||`Failed to clear chat records for card: ${t}`),{statusCode:500});try{await Y(t,!1);}catch{}}async function Oe(t,e,r,n,o=""){let s=typeof r=="string"?r.trim():"",i=await tt.append({params:{cardId:t},body:{role:e||"system",text:s,files:n,turn:o}});if(i.status!=="success")throw Object.assign(new Error(i.error||`Failed to append chat record for card: ${t}`),{statusCode:500});return String(i.data?.id||"")}async function Fe(t){return await U(t).readAll(t)}let Ct=chunkHDGEWOC2_cjs.l({safeCardId:t=>T(t),artifactsStores:t=>S(t),cardFileMetadataStore:()=>f(),readCardFromStore:t=>X(t),updateCardLocalOnly:(t,e)=>Be(t,e),writeChatRecord:(t,e,r,n,o)=>Oe(t,e,r,n,o)}).uploadCardFile;async function At(t){let e=z(t);if(!e)return null;let r=await e.boardOps.getConfig({params:{key:"chat-handler-flow"}}),o=(r.status==="success"?r.data?.value:null)??e.chatHandlerFlow??null,s=e.chatHandlerRef;return o==null&&(!s||typeof s!="object")?null:{ctx:e,handlerFlow:o,handlerRef:s}}function ve(t){let e=typeof t=="string"?t.trim():"";if(e.length<ot.length*2||!e.startsWith(ot)||!e.endsWith(ot))return null;let r=e.slice(ot.length,e.length-ot.length).trim(),n=/^([A-Za-z0-9_-]+)__(.*)$/s.exec(r);return n?{assistant:n[1].trim().toLowerCase(),text:n[2].trim()}:{assistant:"echo",text:r}}async function xe(t,e,r=false,n="",o=""){try{let s=await At(t);if(!s){try{await Y(t,!1);}catch{}return}let{ctx:i,handlerFlow:c,handlerRef:D}=s;if(!r)try{await Y(t,!0);}catch{}let y={boardId:F,cardId:String(t),lastChatEntryId:e,...n?{turnId:n}:{},...typeof o=="string"&&o.trim()?{probe:o.trim()}:{},...E,...I?{serverUrl:I}:{}},q=c!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:de}}:D;chunkBQUQTOPB_cjs.a(i.boardAdapter)?await m(i,"chat-agent").enqueueRequest({boardId:F,ref:q,args:c!=null?{...y,__chatHandlerFlow:c}:y}):m(i,"chat-agent").enqueueRequest({boardId:F,ref:q,args:c!=null?{...y,__chatHandlerFlow:c}:y}),await Promise.resolve(i.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await Y(t,!1);}catch{}v.warn(`[chat-handler] queue failed for card "${t}": ${s instanceof Error?s.message:String(s)}`);}}async function Te(t,e,r){if(e.howToRun==="built-in"&&chunkBQUQTOPB_cjs.b(e)===de){let n=j,o=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,n?n.run(o,s,{boardId:F,cardId:String(s.cardId||""),label:t.label,logger:v,serverUrl:I,executionExtra:E}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return W.invoke(e,r)}async function Ne(t,e=false){e||await G();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",n=r?z(r):ht();if(!n)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let o=await Te(n,t.ref,t.args);if(!o.dispatched){if(r)try{await Y(r,!1);}catch{}throw new Error(o.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function Ee(t,e,r){if(e==="chat-send"){let o=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=bt(),i=ve(r?.text),c=i?i.text:r?.text,D=await chunk272IYUKT_cjs.a("manage.add-chat-entry-and-any-attachments",{board_id:F,card_id:t,role:"user",text:c,turn_id:o,files:[]},s);if(D?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(D,`chat-send append failed for card ${t}`));let y=D?.data?.id;if(typeof y!="string"||!y)throw new Error(`chat-send did not return an append id for card ${t}`);let q=await chunk272IYUKT_cjs.a("setstate.chat-processing-started",{board_id:F,card_id:t},s);if(q?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(q,`chat-send processing update failed for card ${t}`));xe(t,y,true,o,i?.assistant||"");return}await Ae(t,o=>{let s=new Date().toISOString(),i=o.card_data&&typeof o.card_data=="object"?o.card_data:{};if(o.card_data=i,e==="file-upload"){let c=f().normalizeIncoming(r?.files,s);return c.length>0&&f().merge(i,c),o}if(e==="action"){let c=r&&typeof r.buttonId=="string"?r.buttonId:"";if(!c)return o;i.lastAction={buttonId:c,at:s},i.lastActionText=`${c} @ ${s}`;}return o});}function et(t,e,r){let n=JSON.stringify(r),o=typeof Buffer<"u"?Buffer.byteLength(n):new TextEncoder().encode(n).length;t.writeHead(e,{...w,"Content-Type":"application/json; charset=utf-8","Content-Length":o}),t.end(n);}async function Bt(t,e,r){let n=await X(t);if(!n)throw Object.assign(new Error("Card not found"),{statusCode:404});let o=f().resolve(n.card_data,e,r);if(!o.ok&&o.reason==="stale_reference")throw Object.assign(new Error("File reference is stale. Refresh and try again."),{statusCode:409});if(!o.ok)throw Object.assign(new Error("File not found"),{statusCode:404});let s=o.file,i=T(t),c=S(t),D=String(s.stored_name||""),y=`${i}/${D}`,q=c.files?await c.files.getBytes(y):null;if(!q)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:q}}async function je(t,e,r,n){let{fileRecord:o,bytes:s}=await Bt(e,r,n),i=String(o.name||o.stored_name||"download.bin"),c=String(o.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":c,"Content-Disposition":`attachment; filename="${i}"`,"Content-Length":s.length}),t.end(s);}function Me(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 _e(t,e,r){let n=t.split(/\r?\n/);return (e==="head"?n.slice(0,r):n.slice(-r)).join(`
|
|
2
|
-
`)}async function rt(t){let e=[];for await(let n of t)e.push(n);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 kt(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 n=u[0];return n?n.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function Pt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",n=u[0];return n?n.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let De=chunkLFVMX23W_cjs.b({sseHub:V,queueSseHub:l,corsHeaders:w,json:et,buildPublishedRuntimePayload:()=>dt(),onSseClientConnected:$,onChannelSubscribed:H,onChannelUnsubscribed:B,apiBasePath:h,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),bootstrapBoard:()=>st(),boardContexts:u,publishPersistedStateSnapshot:t=>ut(t),upsertCardsFromSource:(t,e)=>Rt(t,e)}).handleWatchersRoutes,qe=chunk7FGPOGRV_cjs.a({apiBasePath:h,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>st(),createMcpFacade:()=>it(),createMcpToolRegistry:t=>he(t),resolveCardFileDownloadPayload:(t,e,r)=>Bt(t,e,r),isLikelyTextMimeType:t=>Me(t),sliceTextByLines:(t,e,r)=>_e(t,e,r)}).handleAgentfaceApi,Ie=chunkNM6O35RY_cjs.a({apiBasePath:h,json:et,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),createMcpWebhookToolRegistry:()=>we()}).handleWebhooksApi,$e=ce({apiBasePath:h,json:et,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),bootstrapBoard:()=>st(),buildPublishedRuntimePayload:()=>dt(),createMcpControlplaneToolRegistry:()=>bt(),retriggerCard:t=>ke(t),applyCardAction:(t,e,r)=>Ee(t,e,r),resolveChatHandlerTarget:t=>At(t),sendCardFileDownloadResponse:(t,e,r,n)=>je(t,e,r,n)}).handleRuntimeApi,He=ue({apiBasePath:h,emitNotifications:t=>O(t),readJsonBody:t=>rt(t),json:(t,e,r)=>et(t,e,r)}).handleNotifyRoute;async function Le(t,e,r){return !!(await qe(t,e,r)||await Ie(t,e,r)||await De(t,e,r)||await He(t,e,r)||await $e(t,e,r))}return {get apiBasePath(){return h},get corsHeaders(){return w},get queueLaneTuning(){return L},handleRuntimeApi:Le,emitNotification(t){if(t.kind==="notification-batch"){O(t.notifications);return}O([t]);},buildPublishedRuntimePayload:dt,__drainProcessAccumulatedLane:yt,handleChatAgentRequest:Ne,clearChatRecords:Pe,reportSourceFetched(t,e){return kt(t,{ref:e})},reportSourceFetchFailure(t,e){return Pt(t,{reason:e})},get cardStore(){return u[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function Mr(R){let h=String(R.apiBasePath||"/api/boards").replace(/\/$/,""),w={...le,...R.corsHeaders||{}},L=R.serverMetaStore,F=R.boardRuntimeFactory,v=new Map,W="boards-config.json";function j(){let l=L.getText(W);if(!l)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(l)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function M(l){L.putText(W,JSON.stringify(l,null,2));}function I(l){let A=String(l||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return A.length>0&&A.length<=64?A:null}function E(l){if(v.has(l))return v.get(l);let u=j().boards.find(x=>x.id===l)||{},k=F(l,u);return v.set(l,k),k}function $(l,A,u){let k=JSON.stringify(u),x=typeof Buffer<"u"?Buffer.byteLength(k):new TextEncoder().encode(k).length;l.writeHead(A,{...w,"Content-Type":"application/json; charset=utf-8","Content-Length":x}),l.end(k);}async function J(l,A,u){let k=l.method||"GET",x=u.pathname;if(k==="GET"&&x===h)return $(A,200,{ok:true,boards:j().boards}),true;if(k==="POST"&&x===h){let N=[];for await(let g of l)N.push(g);let m=typeof Buffer<"u"?Buffer.concat(N).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(N)).trim(),b={};try{b=m?JSON.parse(m):{};}catch{b={};}let S=I(b.id);if(!S)return $(A,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let f=j();if(f.boards.some(g=>g.id===S))return $(A,409,{error:`Board "${S}" is already registered`}),true;let T=typeof b.label=="string"&&b.label.trim()?b.label.trim():S,P={id:S,label:T};for(let[g,_]of Object.entries(b))g==="id"||g==="label"||_!=null&&(P[g]=_);return f.boards.push(P),M(f),$(A,200,{ok:true,board:P}),true}return false}async function H(l,A,u){let x=u.pathname.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(h)}/([^/]+)(/|$)`));if(!x)return false;let N=I(decodeURIComponent(x[1]));return N?j().boards.some(S=>S.id===N)?!!await E(N).handleRuntimeApi(l,A,u):($(A,404,{error:`Board "${N}" not registered. POST ${h} with {id} to register it first.`}),true):($(A,400,{error:"Invalid board id"}),true)}async function B(l,A,u){return !!(await J(l,A,u)||await H(l,A,u))}function V(l){if(!j().boards.some(u=>u.id===l))throw Object.assign(new Error(`Board "${l}" not registered`),{statusCode:404});return {service:E(l)}}return {get apiBasePath(){return h},get corsHeaders(){return w},handleApi:B,requireBoardService:V}}exports.a=jr;exports.b=Mr;//# sourceMappingURL=chunk-
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkLFVMX23W_cjs=require('./chunk-LFVMX23W.cjs'),chunkNM6O35RY_cjs=require('./chunk-NM6O35RY.cjs'),chunkNBJTYAYN_cjs=require('./chunk-NBJTYAYN.cjs'),chunkKSKPS6OO_cjs=require('./chunk-KSKPS6OO.cjs'),chunkBQUQTOPB_cjs=require('./chunk-BQUQTOPB.cjs'),chunkGPCMBPLK_cjs=require('./chunk-GPCMBPLK.cjs'),chunk7FGPOGRV_cjs=require('./chunk-7FGPOGRV.cjs'),chunkLPXVVMQT_cjs=require('./chunk-LPXVVMQT.cjs'),chunk272IYUKT_cjs=require('./chunk-272IYUKT.cjs'),chunkN5RUH4NG_cjs=require('./chunk-N5RUH4NG.cjs'),chunkWRMOGPRG_cjs=require('./chunk-WRMOGPRG.cjs'),chunkYXKWIPQM_cjs=require('./chunk-YXKWIPQM.cjs'),chunk5XLFPPTY_cjs=require('./chunk-5XLFPPTY.cjs'),chunkSDJ3747Q_cjs=require('./chunk-SDJ3747Q.cjs'),chunkOF4FPYNI_cjs=require('./chunk-OF4FPYNI.cjs'),chunk2RIHC5TZ_cjs=require('./chunk-2RIHC5TZ.cjs');function ce(R){let{apiBasePath:h,json:w,readJsonBody:L,initBoardAndSetup:F,bootstrapBoard:v,buildPublishedRuntimePayload:W,createMcpControlplaneToolRegistry:j,retriggerCard:M,applyCardAction:I,resolveChatHandlerTarget:E,sendCardFileDownloadResponse:$}=R;async function J(H,B,V){let l=H.method||"GET",A=V,u=A.pathname;try{if(l==="POST"&&u===`${h}/mcp-actions`){await v();let m=Date.now(),b=new Date(m).toISOString(),S=await L(H),f=typeof S.tool=="string"?S.tool.trim():"",T=S.args&&typeof S.args=="object"&&!Array.isArray(S.args)?S.args:{};if(!f)return w(B,400,{error:"tool is required"}),!0;let P=chunkLPXVVMQT_cjs.a(T,"card_id");if(!P)return w(B,400,{error:"MCP action requires card_id"}),!0;if(f==="retrigger-card"||f==="retrigger"){await M(P);let O=Date.now();return w(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:f,requestReceivedAt:b,requestReceivedAtMs:m,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:200}}),!0}let g=chunkLPXVVMQT_cjs.c(T,"payload");if(f==="chat-send"&&!await E(P)){let O=Date.now();return w(B,409,{error:`chat handler is not configured for card: ${P}`,requestReceivedAt:b,requestReceivedAtMs:m,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:409}),!0}if(f==="chat-send"){let O=typeof g["turn-id"]=="string"?g["turn-id"]:typeof g.turnId=="string"?g.turnId:typeof g.turn=="string"?g.turn:"";if(!O||!String(O).trim()){let at=Date.now();return w(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${P}`,requestReceivedAt:b,requestReceivedAtMs:m,responseSentAt:new Date(at).toISOString(),responseSentAtMs:at,responseStatus:400}),!0}}await I(P,f,g);let _=Date.now();return w(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:f,requestReceivedAt:b,requestReceivedAtMs:m,responseSentAt:new Date(_).toISOString(),responseSentAtMs:_,responseStatus:200}}),!0}if(l==="POST"&&u===`${h}/mcp-controlplane`){await v();let m=await L(H),b=typeof m.tool=="string"?m.tool.trim():"",S=m.args&&typeof m.args=="object"&&!Array.isArray(m.args)?m.args:{};if(!b)return w(B,400,{error:"tool is required"}),!0;try{let f=await chunk272IYUKT_cjs.a(b,S,j());if(f&&typeof f=="object"&&!Array.isArray(f)){let T=f;if(T.status==="fail")return w(B,400,{error:chunk272IYUKT_cjs.b(f,"Request failed")}),!0;if(T.status==="error")return w(B,500,{error:chunk272IYUKT_cjs.b(f,"Internal error")}),!0}w(B,200,f);}catch(f){let T=typeof f?.statusCode=="number"?Number(f.statusCode):500,P=f instanceof Error?f.message:String(f);w(B,T,{error:P});}return !0}let k=u.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(h)}/cards/([^/]+)/retrigger$`));if(l==="POST"&&k){await v();let m=decodeURIComponent(k[1]);return await M(m),w(B,200,{ok:!0}),!0}let x=u.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(h)}/cards/([^/]+)/actions$`));if(l==="POST"&&x){await v();let m=decodeURIComponent(x[1]),b=Date.now(),S=new Date(b).toISOString(),f=await L(H),T=f?.actionType;if(T==="chat-send"&&!await E(m)){let g=Date.now();return w(B,409,{error:`chat handler is not configured for card: ${m}`,requestReceivedAt:S,requestReceivedAtMs:b,responseSentAt:new Date(g).toISOString(),responseSentAtMs:g,responseStatus:409}),!0}if(T==="chat-send"){let g=f?.payload??{},_=typeof g["turn-id"]=="string"?g["turn-id"]:typeof g.turnId=="string"?g.turnId:typeof g.turn=="string"?g.turn:"";if(!_||!String(_).trim()){let O=Date.now();return w(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${m}`,requestReceivedAt:S,requestReceivedAtMs:b,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:400}),!0}}await I(m,T,f?.payload);let P=Date.now();return w(B,200,{ok:!0,requestReceivedAt:S,requestReceivedAtMs:b,responseSentAt:new Date(P).toISOString(),responseSentAtMs:P,responseStatus:200}),!0}let N=u.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(h)}/cards/([^/]+)/files/(\\d+)$`));if(l==="GET"&&N){let m=decodeURIComponent(N[1]),b=parseInt(N[2],10),S=A.searchParams.get("sn");return await $(B,m,b,S),!0}return !1}catch(k){let x=k?.statusCode||500;return w(B,x,{error:String(k?.message||k)}),true}}return {handleRuntimeApi:J}}var ze=3e4;function Ke(R){let h=R.socket?.remoteAddress??"";return h==="127.0.0.1"||h==="::1"||h==="::ffff:127.0.0.1"}function ue(R){let{apiBasePath:h,emitNotifications:w,readJsonBody:L,json:F}=R,v=`${h}/notify-q`;async function W(j,M,I){if(I.pathname!==v)return false;if((j.method??"").toUpperCase()!=="POST")return F(M,405,{status:"error",error:"Method not allowed"}),true;if(!Ke(j))return F(M,403,{status:"error",error:"Forbidden"}),true;let E;try{E=await L(j);}catch{return F(M,400,{status:"error",error:"Invalid JSON body"}),true}if(!E||typeof E!="object"||!Array.isArray(E.notifications))return F(M,400,{status:"error",error:"body.notifications must be an array"}),true;let $=E.notifications,{accepted:J,rejected:H}=chunkKSKPS6OO_cjs.b($,Date.now(),ze);return J.length>0&&w(J),F(M,200,{status:"success",data:{accepted:J.length,rejected:H}}),true}return {handleNotifyRoute:W}}var le={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},de="chat-handler-flow-queue",ot="__probe__echo__probe__";function jr(R){let h=String(R.apiBasePath||"/api/board").replace(/\/$/,""),w={...le,...R.corsHeaders||{}},L=R.queueLaneTuning??{},F=R.boardId||"",v=R.logger||{info:console.log,warn:console.warn,error:console.error},W=R.invocationAdapter,j=R.chatFlowRunner||null,M=R.notificationTransport||null,I=R.serverUrl||null,E=R.executionExtra||{},$=R.onSseClientConnected,J=R.onSseClientDisconnected,H=R.onChannelSubscribed,B=R.onChannelUnsubscribed,V=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async(t,e)=>await tt.buildSseOneShotBatch({params:{cardId:t},body:{receiving:e}}),onSseClientDisconnected:J}),l=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async()=>({status:"success",data:{kind:"notification-batch",category:"batch",notifications:[]}})});function A(t){function e(a){return {...a,queueStorageForRef(d,C){return chunkSDJ3747Q_cjs.a(a.queueStorageForRef(d,C),{lane:C,emitNotification:i})}}}function r(a){return {...a,queueStorageForRef(d,C){return chunkN5RUH4NG_cjs.h(a.queueStorageForRef(d,C),{lane:C,emitNotification:i})}}}function n(a){return {async get(d){return a.get(d)},async set(d){return a.set(d)},async del(d){return a.del(d)},async patch(d){return a.patch(d)},async appendFiles(d){return a.appendFiles(d)}}}function o(a){return {async get(d){return await a.get(d)},async set(d){return await a.set(d)},async del(d){return await a.del(d)},async patch(d){return await a.patch(d)},async appendFiles(d){return await a.appendFiles(d)}}}let s=null;function i(a){if(a.kind==="notification-batch"){O(a.notifications,s??void 0);return}O([a],s??void 0);}let c=chunkBQUQTOPB_cjs.a(t.boardAdapter)?r(t.boardAdapter):e(t.boardAdapter),D=t.nonCoreAdapter??(!chunkBQUQTOPB_cjs.a(c)&&b(c)?c:null),y=chunkBQUQTOPB_cjs.a(c)?chunkN5RUH4NG_cjs.i(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}):chunkYXKWIPQM_cjs.y(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}),q=t.nonCore??(D?chunkYXKWIPQM_cjs.z(t.baseRef,D,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),Ue=c.chatStorageForRef(t.chatStoreRef),lt,We=chunkBQUQTOPB_cjs.a(c)?(()=>{let a=chunkN5RUH4NG_cjs.d(chunkN5RUH4NG_cjs.c(chunkN5RUH4NG_cjs.b(c.kvStorageForRef(t.cardStoreRef)),c.hashFn),v.warn),d=chunkN5RUH4NG_cjs.g(a,{emitNotification:i}),C=o(d);return lt={get(p){return C.get(p)},set(p){return C.set(p)}},C})():(()=>{let a=c.kvStorageForRef(t.cardStoreRef),C=chunk5XLFPPTY_cjs.a(chunkYXKWIPQM_cjs.l({readIndex:()=>a.read("_index"),writeIndex:p=>a.write("_index",p),readCard:p=>a.read(p),writeCard:(p,pt)=>(a.write(p,pt),p),removeCard:p=>{a.delete(p);},cardExists:p=>a.read(p)!==null,defaultCardKey:p=>p},v.warn),{emitNotification:i});return lt=C,n(C)})(),ft;if(chunkBQUQTOPB_cjs.a(c)){let a=c.blobStorageForRef(t.artifactsStoreRef);ft={async putBytes(d,C){if(a.writeBytes){await a.writeBytes(d,C);return}let p=JSON.stringify({__kind:"bytes-array",data:[...C]});await a.write(d,p);},async getBytes(d){if(a.readBytes){let p=await a.readBytes(d);if(p!==null)return p}let C=await a.read(d);if(C===null)return null;try{let p=JSON.parse(C);if(p&&p.__kind==="bytes-array"&&Array.isArray(p.data))return new Uint8Array(p.data)}catch{}return new TextEncoder().encode(C)},async listKeys(d){return await a.listKeys(d)}};}else {let a=c.blobStorageForRef(t.artifactsStoreRef),d=chunkNBJTYAYN_cjs.a(a);ft={putBytes(C,p,pt){d.putBytes(C,p,pt);},getBytes(C){return d.getBytes(C)},listKeys(C){return d.list(C).map(p=>p.key)}};}let Je={async init(a){return y.init(a)},async status(a){return y.status(a)},async getConfig(a){return y.getConfig(a)},async getAllOutputsDataObjects(a){return y.getAllOutputsDataObjects(a)},async getAllOutputsComputedValues(a){return y.getAllOutputsComputedValues(a)},async getOutputsFetchedSources(a){return y.getOutputsFetchedSources(a)},async buildSseOneShotPayload(a){return y.buildSseOneShotPayload(a)},async upsertCard(a){return y.upsertCard(a)},async removeCard(a){return y.removeCard(a)},async sourceDataFetched(a){return y.sourceDataFetched(a)},async sourceDataFetchFailure(a){return y.sourceDataFetchFailure(a)}};return s={label:t.label,board:y,nonCore:q,publicCardStore:lt,boardOps:Je,cardStoreOps:We,get filesArtifacts(){return ft},get chatStorage(){return Ue},boardAdapter:c,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:chunkKSKPS6OO_cjs.c(),notificationTeardown:null,initialized:false,cardsBootstrapped:false},s}let u=R.boards.map(A),k=new Map;function x(t){return k.get(t)??0}function N(t){return t.queueStoreRef}function m(t,e){if(chunkBQUQTOPB_cjs.a(t.boardAdapter)){let n=t.boardAdapter.queueStorageForRef(N(t),e);return chunkWRMOGPRG_cjs.a(n)}let r=t.boardAdapter.queueStorageForRef(N(t),e);return chunkGPCMBPLK_cjs.a(r)}function b(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function S(t){let e=u[x(t)];return {files:e?e.filesArtifacts:null}}function f(){return chunkNBJTYAYN_cjs.c()}function T(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}function P(t){return "cardId"in t&&typeof t.cardId=="string"?z(t.cardId)??void 0:u[0]??void 0}function g(t){for(let e of t){let r=P(e);if(r)return r}return u[0]??void 0}function _(t,e={}){if(!t||t.length===0)return;let r=chunk2RIHC5TZ_cjs.e(t),n={kind:"notification-batch",category:"batch",notifications:r},o=e.ctx??g(r);if(e.appendState!==false&&o&&chunkKSKPS6OO_cjs.e(o.notification,n),e.broadcastSse!==false){let s=r.filter(c=>c.kind==="message_enqueued"),i=r.filter(c=>c.kind!=="message_enqueued");i.length>0&&V.broadcastNotificationBatch(i),s.length>0&&l.broadcastNotificationBatch(s);}if(!(e.mirrorExternal===false||!o?.boardAdapter.publishBoardChangeNotifications))try{let s=r.filter(i=>i.category==="board-output"||i.category==="card-store");s.length>0&&o.boardAdapter.publishBoardChangeNotifications(s);}catch{}}function O(t,e){_(t,{ctx:e,appendState:true,broadcastSse:true,mirrorExternal:true});}async function at(t){if(!t||t.notificationTeardown||!M||!t.notifyRef)return;let e=await M.subscribe(t.notifyRef,r=>{let n=chunkKSKPS6OO_cjs.a(r);_(n,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});});t.notificationTeardown=e;}async function fe(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 n=await t.boardOps.init({params:e,body:r});if(n.status!=="success")throw Object.assign(new Error(n.error||`init failed for ${t.label}`),{statusCode:500});if(await at(t),!t.chatHandlerFlow&&t.chatHandlerRef&&W.describe)try{let o=await W.describe(t.chatHandlerRef);o&&o.kind!=="chat-handler"?v.warn(`[init] chat-handler describe returned kind="${o.kind}", expected "chat-handler" for ${t.label}`):o&&v.info(`[init] chat-handler validated: ${o.name} (protocol ${o.protocolVersion}) for ${t.label}`);}catch(o){v.warn(`[init] chat-handler describe failed for ${t.label}: ${o?.message||String(o)}`);}t.initialized=true;}async function ut(t){let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&chunkKSKPS6OO_cjs.d(r.data)&&e.push({kind:"status",status:r.data});let n=await t.boardOps.getAllOutputsDataObjects({});if(n.status==="success"&&n.data!=null)for(let[s,i]of Object.entries(n.data))s&&e.push({kind:"data_object",key:s,payload:i});let o=await t.boardOps.getAllOutputsComputedValues({});if(o.status==="success"&&o.data!=null)for(let[s,i]of Object.entries(o.data))s&&i&&typeof i=="object"&&!Array.isArray(i)&&e.push({kind:"computed_values",cardId:s,values:i});e.length>0&&_(e,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});}async function Rt(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),n=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let o of n)typeof o.id=="string"&&(k.set(o.id,e),await t.boardOps.upsertCard({params:{cardId:o.id}}));t.cardsBootstrapped=true;}async function G(){for(let t of u)await fe(t);}async function st(){await G();for(let t=0;t<u.length;t++)await ut(u[t]),await Rt(u[t],t),await ut(u[t]);}async function yt(t=false){t||await G();for(let e of u){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function z(t){return u[x(t)]??null}async function X(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 n=Array.isArray(r.data?.cards)?r.data.cards:[];return n.length>0?n[0]:null}async function pe(){let t=async r=>{if(!r)return [];let n=await r.cardStoreOps.get({});return n.status!=="success"||!Array.isArray(n.data?.cards)?[]:n.data.cards},e=[];for(let r of u)e.push(...await t(r));return e}function ht(){return u[0]??null}function me(t){return z(t)??ht()}function U(t){let e=me(t);if(!e)throw Object.assign(new Error(`Board context is unavailable for chat operations: ${t}`),{statusCode:404});return e.chatStorage}async function ge(t){return await U(t).isProcessing(t)}async function Y(t,e){let r=await tt.setProcessing({params:{cardId:t},body:{active:e}});if(r.status!=="success")throw Object.assign(new Error(r.error||`Failed to set chat processing for card: ${t}`),{statusCode:500})}let tt=chunkOF4FPYNI_cjs.a({append(t,e,r,n,o){return U(t).append(t,e,r,n,o)},readAll(t){return U(t).readAll(t)},readAfter(t,e){return U(t).readAfter(t,e)},clear(t){return U(t).clear(t)},setProcessing(t,e){return U(t).setProcessing(t,e)},isProcessing(t){return U(t).isProcessing(t)},getConfig(t){return U(t).getConfig(t)},setConfig(t,e){return U(t).setConfig(t,e)}},{emitNotification(t){if(t.kind==="notification-batch"){O(t.notifications);return}O([t]);}}),wt=chunkKSKPS6OO_cjs.p({boardContexts:u,cardOwnerIndex:k,cardContextForCard:t=>z(t),readStatusSnapshot:()=>be(),readDataObjectsByToken:()=>Ce(),readCardRuntimeArtifacts:()=>Se(),readCardFromStore:t=>X(t),readCardDefinitions:()=>pe(),processAccumulatedLaneInternal:t=>yt(t),reportSourceFetched:(t,e)=>kt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>Pt(t,{reason:e}),uploadCardFile:(t,e,r,n,o)=>Ct(t,e,r,n,o),chatStorePublic:tt,serverUrl:I,apiBasePath:h}),Re=wt.mcpCardStoreFacade,it=wt.createMcpFacade,ye=chunkKSKPS6OO_cjs.j({boardId:F,bootstrapBoard:()=>st(),sseHub:V,onChannelSubscribed:H,onChannelUnsubscribed:B,getMcpFacade:()=>it(),getMcpCardStoreFacade:()=>Re()});function he(t){return chunkKSKPS6OO_cjs.m(t)}function we(){return chunkKSKPS6OO_cjs.n(it())}function bt(){return chunkKSKPS6OO_cjs.o({boardId:F,uploadCardFile:Ct,getMcpFacade:()=>it(),controlplane:ye})}let ct=chunkKSKPS6OO_cjs.k({boardId:F,boardContexts:u,readChatRecords:t=>Fe(t),getChatProcessing:t=>ge(t)}),be=ct.readStatusSnapshot,Se=ct.readCardRuntimeArtifacts,Ce=ct.readDataObjectsByToken,dt=ct.buildPublishedRuntimePayload;async function St(t,e,r){let n=r?.syncBoard!==false,o=r?.restartOnlyIfChanged===true,s=z(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let i=await X(t);if(!i)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let c=o?JSON.stringify(i):null,D=e(i)||i;if(o&&JSON.stringify(D)===c)return;let y=await s.cardStoreOps.set({body:D});if(y.status!=="success")throw Object.assign(new Error(y.error||`Failed to persist card: ${t}`),{statusCode:500});if(n){let q=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(q.status!=="success")throw Object.assign(new Error(q.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Ae(t,e){await St(t,e,{syncBoard:true});}async function Be(t,e){await St(t,e,{syncBoard:false});}async function ke(t){let e=z(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await X(t))throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let n=await e.boardOps.upsertCard({params:{cardId:t,restart:true}});if(n.status!=="success")throw Object.assign(new Error(n.error||`Failed to retrigger card: ${t}`),{statusCode:500})}async function Pe(t){let e=await tt.clear({params:{cardId:t}});if(e.status!=="success")throw Object.assign(new Error(e.error||`Failed to clear chat records for card: ${t}`),{statusCode:500});try{await Y(t,!1);}catch{}}async function Oe(t,e,r,n,o=""){let s=typeof r=="string"?r.trim():"",i=await tt.append({params:{cardId:t},body:{role:e||"system",text:s,files:n,turn:o}});if(i.status!=="success")throw Object.assign(new Error(i.error||`Failed to append chat record for card: ${t}`),{statusCode:500});return String(i.data?.id||"")}async function Fe(t){return await U(t).readAll(t)}let Ct=chunkKSKPS6OO_cjs.l({safeCardId:t=>T(t),artifactsStores:t=>S(t),cardFileMetadataStore:()=>f(),readCardFromStore:t=>X(t),updateCardLocalOnly:(t,e)=>Be(t,e),writeChatRecord:(t,e,r,n,o)=>Oe(t,e,r,n,o)}).uploadCardFile;async function At(t){let e=z(t);if(!e)return null;let r=await e.boardOps.getConfig({params:{key:"chat-handler-flow"}}),o=(r.status==="success"?r.data?.value:null)??e.chatHandlerFlow??null,s=e.chatHandlerRef;return o==null&&(!s||typeof s!="object")?null:{ctx:e,handlerFlow:o,handlerRef:s}}function ve(t){let e=typeof t=="string"?t.trim():"";if(e.length<ot.length*2||!e.startsWith(ot)||!e.endsWith(ot))return null;let r=e.slice(ot.length,e.length-ot.length).trim(),n=/^([A-Za-z0-9_-]+)__(.*)$/s.exec(r);return n?{assistant:n[1].trim().toLowerCase(),text:n[2].trim()}:{assistant:"echo",text:r}}async function xe(t,e,r=false,n="",o=""){try{let s=await At(t);if(!s){try{await Y(t,!1);}catch{}return}let{ctx:i,handlerFlow:c,handlerRef:D}=s;if(!r)try{await Y(t,!0);}catch{}let y={boardId:F,cardId:String(t),lastChatEntryId:e,...n?{turnId:n}:{},...typeof o=="string"&&o.trim()?{probe:o.trim()}:{},...E,...I?{serverUrl:I}:{}},q=c!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:de}}:D;chunkBQUQTOPB_cjs.a(i.boardAdapter)?await m(i,"chat-agent").enqueueRequest({boardId:F,ref:q,args:c!=null?{...y,__chatHandlerFlow:c}:y}):m(i,"chat-agent").enqueueRequest({boardId:F,ref:q,args:c!=null?{...y,__chatHandlerFlow:c}:y}),await Promise.resolve(i.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await Y(t,!1);}catch{}v.warn(`[chat-handler] queue failed for card "${t}": ${s instanceof Error?s.message:String(s)}`);}}async function Te(t,e,r){if(e.howToRun==="built-in"&&chunkBQUQTOPB_cjs.b(e)===de){let n=j,o=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,n?n.run(o,s,{boardId:F,cardId:String(s.cardId||""),label:t.label,logger:v,serverUrl:I,executionExtra:E}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return W.invoke(e,r)}async function Ne(t,e=false){e||await G();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",n=r?z(r):ht();if(!n)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let o=await Te(n,t.ref,t.args);if(!o.dispatched){if(r)try{await Y(r,!1);}catch{}throw new Error(o.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function Ee(t,e,r){if(e==="chat-send"){let o=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=bt(),i=ve(r?.text),c=i?i.text:r?.text,D=await chunk272IYUKT_cjs.a("manage.add-chat-entry-and-any-attachments",{board_id:F,card_id:t,role:"user",text:c,turn_id:o,files:[]},s);if(D?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(D,`chat-send append failed for card ${t}`));let y=D?.data?.id;if(typeof y!="string"||!y)throw new Error(`chat-send did not return an append id for card ${t}`);let q=await chunk272IYUKT_cjs.a("setstate.chat-processing-started",{board_id:F,card_id:t},s);if(q?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(q,`chat-send processing update failed for card ${t}`));xe(t,y,true,o,i?.assistant||"");return}await Ae(t,o=>{let s=new Date().toISOString(),i=o.card_data&&typeof o.card_data=="object"?o.card_data:{};if(o.card_data=i,e==="file-upload"){let c=f().normalizeIncoming(r?.files,s);return c.length>0&&f().merge(i,c),o}if(e==="action"){let c=r&&typeof r.buttonId=="string"?r.buttonId:"";if(!c)return o;i.lastAction={buttonId:c,at:s},i.lastActionText=`${c} @ ${s}`;}return o});}function et(t,e,r){let n=JSON.stringify(r),o=typeof Buffer<"u"?Buffer.byteLength(n):new TextEncoder().encode(n).length;t.writeHead(e,{...w,"Content-Type":"application/json; charset=utf-8","Content-Length":o}),t.end(n);}async function Bt(t,e,r){let n=await X(t);if(!n)throw Object.assign(new Error("Card not found"),{statusCode:404});let o=f().resolve(n.card_data,e,r);if(!o.ok&&o.reason==="stale_reference")throw Object.assign(new Error("File reference is stale. Refresh and try again."),{statusCode:409});if(!o.ok)throw Object.assign(new Error("File not found"),{statusCode:404});let s=o.file,i=T(t),c=S(t),D=String(s.stored_name||""),y=`${i}/${D}`,q=c.files?await c.files.getBytes(y):null;if(!q)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:q}}async function je(t,e,r,n){let{fileRecord:o,bytes:s}=await Bt(e,r,n),i=String(o.name||o.stored_name||"download.bin"),c=String(o.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":c,"Content-Disposition":`attachment; filename="${i}"`,"Content-Length":s.length}),t.end(s);}function Me(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 _e(t,e,r){let n=t.split(/\r?\n/);return (e==="head"?n.slice(0,r):n.slice(-r)).join(`
|
|
2
|
+
`)}async function rt(t){let e=[];for await(let n of t)e.push(n);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 kt(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 n=u[0];return n?n.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function Pt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",n=u[0];return n?n.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let De=chunkLFVMX23W_cjs.b({sseHub:V,queueSseHub:l,corsHeaders:w,json:et,buildPublishedRuntimePayload:()=>dt(),onSseClientConnected:$,onChannelSubscribed:H,onChannelUnsubscribed:B,apiBasePath:h,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),bootstrapBoard:()=>st(),boardContexts:u,publishPersistedStateSnapshot:t=>ut(t),upsertCardsFromSource:(t,e)=>Rt(t,e)}).handleWatchersRoutes,qe=chunk7FGPOGRV_cjs.a({apiBasePath:h,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>st(),createMcpFacade:()=>it(),createMcpToolRegistry:t=>he(t),resolveCardFileDownloadPayload:(t,e,r)=>Bt(t,e,r),isLikelyTextMimeType:t=>Me(t),sliceTextByLines:(t,e,r)=>_e(t,e,r)}).handleAgentfaceApi,Ie=chunkNM6O35RY_cjs.a({apiBasePath:h,json:et,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),createMcpWebhookToolRegistry:()=>we()}).handleWebhooksApi,$e=ce({apiBasePath:h,json:et,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),bootstrapBoard:()=>st(),buildPublishedRuntimePayload:()=>dt(),createMcpControlplaneToolRegistry:()=>bt(),retriggerCard:t=>ke(t),applyCardAction:(t,e,r)=>Ee(t,e,r),resolveChatHandlerTarget:t=>At(t),sendCardFileDownloadResponse:(t,e,r,n)=>je(t,e,r,n)}).handleRuntimeApi,He=ue({apiBasePath:h,emitNotifications:t=>O(t),readJsonBody:t=>rt(t),json:(t,e,r)=>et(t,e,r)}).handleNotifyRoute;async function Le(t,e,r){return !!(await qe(t,e,r)||await Ie(t,e,r)||await De(t,e,r)||await He(t,e,r)||await $e(t,e,r))}return {get apiBasePath(){return h},get corsHeaders(){return w},get queueLaneTuning(){return L},handleRuntimeApi:Le,emitNotification(t){if(t.kind==="notification-batch"){O(t.notifications);return}O([t]);},buildPublishedRuntimePayload:dt,__drainProcessAccumulatedLane:yt,handleChatAgentRequest:Ne,clearChatRecords:Pe,reportSourceFetched(t,e){return kt(t,{ref:e})},reportSourceFetchFailure(t,e){return Pt(t,{reason:e})},get cardStore(){return u[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function Mr(R){let h=String(R.apiBasePath||"/api/boards").replace(/\/$/,""),w={...le,...R.corsHeaders||{}},L=R.serverMetaStore,F=R.boardRuntimeFactory,v=new Map,W="boards-config.json";function j(){let l=L.getText(W);if(!l)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(l)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function M(l){L.putText(W,JSON.stringify(l,null,2));}function I(l){let A=String(l||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return A.length>0&&A.length<=64?A:null}function E(l){if(v.has(l))return v.get(l);let u=j().boards.find(x=>x.id===l)||{},k=F(l,u);return v.set(l,k),k}function $(l,A,u){let k=JSON.stringify(u),x=typeof Buffer<"u"?Buffer.byteLength(k):new TextEncoder().encode(k).length;l.writeHead(A,{...w,"Content-Type":"application/json; charset=utf-8","Content-Length":x}),l.end(k);}async function J(l,A,u){let k=l.method||"GET",x=u.pathname;if(k==="GET"&&x===h)return $(A,200,{ok:true,boards:j().boards}),true;if(k==="POST"&&x===h){let N=[];for await(let g of l)N.push(g);let m=typeof Buffer<"u"?Buffer.concat(N).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(N)).trim(),b={};try{b=m?JSON.parse(m):{};}catch{b={};}let S=I(b.id);if(!S)return $(A,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let f=j();if(f.boards.some(g=>g.id===S))return $(A,409,{error:`Board "${S}" is already registered`}),true;let T=typeof b.label=="string"&&b.label.trim()?b.label.trim():S,P={id:S,label:T};for(let[g,_]of Object.entries(b))g==="id"||g==="label"||_!=null&&(P[g]=_);return f.boards.push(P),M(f),$(A,200,{ok:true,board:P}),true}return false}async function H(l,A,u){let x=u.pathname.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(h)}/([^/]+)(/|$)`));if(!x)return false;let N=I(decodeURIComponent(x[1]));return N?j().boards.some(S=>S.id===N)?!!await E(N).handleRuntimeApi(l,A,u):($(A,404,{error:`Board "${N}" not registered. POST ${h} with {id} to register it first.`}),true):($(A,400,{error:"Invalid board id"}),true)}async function B(l,A,u){return !!(await J(l,A,u)||await H(l,A,u))}function V(l){if(!j().boards.some(u=>u.id===l))throw Object.assign(new Error(`Board "${l}" not registered`),{statusCode:404});return {service:E(l)}}return {get apiBasePath(){return h},get corsHeaders(){return w},handleApi:B,requireBoardService:V}}exports.a=jr;exports.b=Mr;//# sourceMappingURL=chunk-WYKCHXBZ.cjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-WYKCHXBZ.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'),chunkUG55PF75_cjs=require('./chunk-UG55PF75.cjs'),chunk5XLFPPTY_cjs=require('./chunk-5XLFPPTY.cjs'),chunk2RIHC5TZ_cjs=require('./chunk-2RIHC5TZ.cjs');function lt(e){return typeof e=="string"&&e.trim().length>0}function ft(e,t){if(!e||typeof e!="object")throw new Error(`${t}: adapter.selfRef is required`);if(!lt(e.howToRun))throw new Error(`${t}: adapter.selfRef.howToRun is required`);if(!lt(e.whatToRun))throw new Error(`${t}: adapter.selfRef.whatToRun is required`)}function mt(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 Xt(e,t="callbackTransport"){return {createCallback(n){let a=e();return ft(a,t),{token:n,via:a}}}}function $e(e){return Xt(()=>e,"createStaticExecutionRefCallbackTransport")}function mr(e){return $e({meta:"board-live-cards",howToRun:"http:post",whatToRun:chunkVQCIOKJV_cjs.a({kind:"http-url",value:String(e||"").trim()})})}function pr(e){return $e({meta:"board-live-cards",howToRun:"in-process-loop",whatToRun:chunkVQCIOKJV_cjs.a({kind:"in-process-loop",value:String(e||"").trim()})})}function gr(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),$e({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 Ie(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function Je(e,t){return Ie(e)?e.then(t):t(e)}function gt(e,t){let n={...e};for(let a of t.deleteKeys)delete n[a];return {...n,...t.shallowMerge}}function kr(e,t){return {readValues(a){let s=e(a);return Je(s.listKeys(),d=>{let u=[...d].sort();if(u.length===0)return {version:null,values:{}};let c={},h=null;for(let y of u){let V=s.read(y);Ie(V)?h=(h??Promise.resolve()).then(async()=>{c[y]=await V;}):c[y]=V;}return h?h.then(()=>({version:t(c),values:c})):{version:t(c),values:c}})},writeValues(a,s,d){let u=e(a),c=null;for(let h of d){let y=u.delete(h);Ie(y)&&(c=(c??Promise.resolve()).then(()=>y).then(()=>{}));}for(let[h,y]of Object.entries(s)){let V=u.write(h,y);Ie(V)&&(c=(c??Promise.resolve()).then(()=>V).then(()=>{}));}return c?c.then(()=>t(s)):t(s)}}}function St(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),s=>{if(s.version!==a.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:s.version};let d=gt(s.values,a);return Je(e.writeValues(n,d,a.deleteKeys),u=>({ok:true,newVersion:u}))})}}}function pt(e,t){if(!t)return e;let n=e.findIndex(a=>a.id===t);return n===-1?e:e.slice(n+1)}function kt(e){return {readEntriesAfterCursor(t){let n=pt(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 pt(e.readAllEntries(),t).length},appendEvent(t){e.appendEntry({id:e.generateId(),event:t});}}}function Rr(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 de(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 s=t(a);Fe(s)&&(n=Promise.resolve(s).then(()=>{}));}return n??void 0}function Wt(e){if(e==null)return null;let t=e.trim();if(!t)return null;try{return JSON.parse(t)}catch{return t}}function Zt(e,t){let n=e.match(t);return n?n[1]:null}function Rt(e,t,n){let a={},s=Me(e,d=>{let u=n(d);if(u)return de(t(d),c=>{a[u]=c;})});return Fe(s)?s.then(()=>a):a}function ht(e,t){return {readSourceData(n,a){return de(e.read(`${n}/${a}`),Wt)},ingestSourceDataStaged(n,a,s,d){return de(t(s),u=>e.write(`${n}/.staged/${d}/${a}`,u))},commitSourceData(n,a,s){let d=`${n}/.staged/${s}/${a}`,u=`${n}/${a}`;return e.renameKey(d,u)},hasSource(n,a){return e.exists(`${n}/${a}`)},listSources(n){return de(e.listKeys(`${n}/`),a=>a.filter(s=>!s.includes("/.staged/")).map(s=>s.slice(`${n}/`.length)))}}}function er(e,t){let n=(a,s)=>{try{let d=s(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,s){if(!(!a||s.length===0))return de(e.read(a),d=>e.write(a,[...d??[],...s]))},dispatchEntriesForJournalId(a,s){if(a)return de(e.read(a),d=>{let u=d;if(!(!u||u.length===0))return de(Me(u,c=>n(c,s)),()=>e.delete(a))})}}}function tr(e,t,n){return {readRuntime(a){return de(e.read(t(a)),s=>s??n())},writeRuntime(a,s){return e.write(t(a),s)}}}function yt(e){return {writeComputedValues(t,n){return e.write(`cards/${t}/computed_values`,n)},readComputedValues(t){return e.read(`cards/${t}/computed_values`)},readAllComputedValues(){return de(e.listKeys("cards/"),t=>Rt(t,n=>e.read(n),n=>Zt(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 de(e.listKeys("data-objects/"),t=>Rt(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(s,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 h={...s},y=h;for(let V=0;V<c.length-1;V++){let z=c[V],Y=y[z],ee=Y&&typeof Y=="object"&&!Array.isArray(Y)?{...Y}:{};y[z]=ee,y=ee;}return y[c[c.length-1]]=u,h}return {readCard(s){let d=n()[s];return !d||!e.cardExists(d.key)?null:e.readCard(d.key)},readCardKey(s){return n()[s]?.key??null},readAllCards(){let s=[];for(let[d,u]of Object.entries(n())){if(!e.cardExists(u.key))continue;let c=e.readCard(u.key);c?s.push(c):t?.(`[card-store] could not read card "${d}" at key "${u.key}"`);}return s},readChecksumIndex(){let s={};for(let[d,u]of Object.entries(n()))s[d]=u.checksum;return s},changedSince(s){let d=n(),u=[];for(let[c,h]of Object.entries(d))s[c]!==h.checksum&&u.push(c);for(let c of Object.keys(s))d[c]||u.push(c);return u},validateUpsert(s,d){let u=n(),c=u[s],h=Object.entries(u).find(([,y])=>y.key===d);return c&&c.key!==d?{ok:false,error:`Card id "${s}" is already mapped to key "${c.key}", cannot remap to "${d}"`}:h&&h[0]!==s?{ok:false,error:`Key "${d}" is already mapped to card id "${h[0]}", cannot remap to "${s}"`}:{ok:true}},writeCard(s,d,u){let c=n(),h=u??c[s]?.key??e.defaultCardKey(s),y=e.writeCard(h,d);c[s]={key:h,checksum:y,updatedAt:new Date().toISOString()},e.writeIndex(c);},patchCard(s,d,u){let c=n(),h=c[s];if(!h||!e.cardExists(h.key))throw new Error(`card "${s}" not found`);let y=e.readCard(h.key);if(!y||typeof y!="object"||Array.isArray(y))throw new Error(`card "${s}" is not patchable`);let V=a(y,d,u),z=e.writeCard(h.key,V);c[s]={key:h.key,checksum:z,updatedAt:new Date().toISOString()},e.writeIndex(c);},removeCard(s){let d=n(),u=d[s];u&&(e.removeCard(u.key),delete d[s],e.writeIndex(d));},readIndex(){return n()}}}function _e(e,t){return ht(e,t)}function vt(e){return kt(e)}var Oe="v1",he="board/graph",xt="board/lastJournalProcessedId";function Tr(e){return `cards/${e}/runtime`}function Et(e){return St(e,Oe)}function Pe(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 Tt(e){return yt(e)}function Ct(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function rr(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function bt(e,t){return e?.lastRequestedToken?rr(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<t?"dispatch":"idle":"dispatch"}function nr(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"success"}}function wt(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"failure"}}function Be(e,t){let n=t.state.tasks,a=t.config.tasks,s=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 T of d.pending)c.set(T.taskName,T.waitingOn);for(let T of d.unresolved)c.set(T.taskName,T.missingTokens);for(let T of d.blocked)c.set(T.taskName,T.failedTokens);let h=new Map;for(let[T,S]of Object.entries(a))for(let G of S.requires??[]){let U=h.get(G)??[];U.push(T),h.set(G,U);}let y=s.sort().map(T=>{let S=n[T],G=a[T]??{requires:[],provides:[]};S.status==="completed"?u.completed+=1:S.status==="failed"?u.failed+=1:S.status==="in-progress"&&(u.in_progress+=1);let U=G.requires??[],g=G.provides??[],i=Object.keys(S.data??{}).sort(),m=U.filter(P=>t.state.availableOutputs.includes(P)),b=U.filter(P=>!t.state.availableOutputs.includes(P)),I=c.get(T)??b,w=new Set;for(let P of g)for(let D of h.get(P)??[])D!==T&&w.add(D);let x=S.failedAt,K=S.error?{message:S.error,code:"TASK_FAILED",at:x,source:"task-runtime"}:void 0;return {name:T,status:S.status,error:K,requires:U,requires_satisfied:m,requires_missing:b,provides_declared:g,provides_runtime:i,blocked_by:I,unblocks:Array.from(w).sort(),runtime:{attempt_count:S.executionCount??0,restart_count:S.retryCount??0,in_progress_since:S.status==="in-progress"?S.startedAt??null:null,last_transition_at:S.lastUpdated??null,last_completed_at:S.completedAt??null,last_restarted_at:S.startedAt??null,status_age_ms:S.lastUpdated?0:null}}});u.pending=d.pending.length,u.blocked=d.blocked.length,u.unresolved=d.unresolved.length;let V=y.map(T=>({name:T.name,fanOut:T.unblocks.length})).sort((T,S)=>S.fanOut-T.fanOut||T.name.localeCompare(S.name)),z=V.length>0?V[0]:{name:null,fanOut:0},Y=new Set;for(let T of Object.values(a))for(let S of T.requires??[])Y.add(S);let ee=0;for(let[T,S]of Object.entries(a)){let G=(S.requires??[]).length===0,g=(S.provides??[]).some(i=>(h.get(i)??[]).some(m=>m!==T));G&&!g&&(ee+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:s.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:z.name,max_fan_out:z.fanOut}},cards:y}}function or(){return new Date().toISOString()}function At(e,t,n,a,s,d,u){return async c=>{let h=[],y=n.cardStore.readCard(c.nodeId);if(!y)return "task-initiate-failure";let V=y.id,z=y.card_data??{},Y=y.source_defs??[],ee=Y,T=n.cardRuntimeStore.readRuntime(V),S=false,G=()=>{S&&(n.cardRuntimeStore.writeRuntime(V,T),S=false);},U=E=>Ct(T._sources[E]),g=(E,v)=>{T._sources[E]=Ct(v),S=true;},i=c.taskState?.executionCount??0;if(T._lastExecutionCount!==i&&(T._sources={},T._lastExecutionCount=i,S=true),c.update){let E=c.update,v=E.outputFile;if(v){let B=U(v);if(E.failure){let L=E.rqt??B.lastRequestedToken??B.queueRequestedToken;L&&g(v,wt(B,L));}else {let L=E.rqt;if(!B.lastCompletedToken||L>B.lastCompletedToken){let te=typeof E.deliveryToken=="string"?E.deliveryToken:void 0,j=false;te&&(j=n.fetchedSourcesStore.commitSourceData(V,v,te)),j?g(v,nr(B,L)):g(v,wt(B,L));}}G();}}let b={};for(let E of Y)if(E.outputFile){let v=n.fetchedSourcesStore.readSourceData(V,E.outputFile);v!==null&&(b[E.bindTo]=v);}let I={};for(let[E,v]of Object.entries(c.state??{}))if(v!==null&&typeof v=="object"&&!Array.isArray(v)){let B=v[E];I[E]=B!==void 0?B:v;}else I[E]=v;let w={id:V,card_data:{...z},requires:I,source_defs:Y,compute:y.compute};w._sourcesData=b,y.compute&&chunkUG55PF75_cjs.a.runSync(w,{sourcesData:b}),(d??n.outputStore.writeComputedValues.bind(n.outputStore))(V,w.computed_values??{});let x={...y},K=chunkUG55PF75_cjs.a.enrichSourcesSync(Array.isArray(y.source_defs)?y.source_defs:void 0,{card_data:y.card_data,requires:I}),P=e.value;x.source_defs=Array.isArray(K)?K.map(E=>({...E,boardDir:typeof E.boardDir=="string"&&E.boardDir?E.boardDir:P})):K;let D=or(),H=c.update?void 0:D,ne=ee.filter(E=>{let v=E.outputFile;if(typeof v!="string"||!v)return true;let B=U(v);H&&(B={...B,queueRequestedToken:H},g(v,B));let L=B.queueRequestedToken??B.lastRequestedToken??D,te=bt(B,L);return te==="in-flight"?false:te==="dispatch"});if(G(),ne.length>0){let E=false,v=D;for(let B of ne){let L=B.outputFile;if(typeof L!="string"||!L)continue;let te=U(L),j=te.queueRequestedToken??D;g(L,{...te,lastRequestedToken:j}),v=j,E=true;}return E&&G(),E&&(h.push({taskKind:"source-fetch",payload:{boardRef:chunkVQCIOKJV_cjs.a(e),enrichedCard:x,callbackToken:c.callbackToken,rqt:v}}),n.executionRequestStore.appendEntries(t,h)),"task-initiated"}if(ee.some(E=>{let v=E.outputFile;if(typeof v!="string"||!v)return false;let B=U(v),L=B.queueRequestedToken??B.lastRequestedToken??D;return bt(B,L)==="in-flight"}))return "task-initiated";let pe=y.provides??[],ae={};for(let{bindTo:E,ref:v}of pe)ae[E]=chunkUG55PF75_cjs.a.resolve(w,v);return (u??n.outputStore.writeDataObjects.bind(n.outputStore))(ae),a(c.nodeId,ae),h.length>0&&n.executionRequestStore.appendEntries(t,h),"task-initiated"}}var Ge={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function It(e){return {[he]:e.graph,[xt]:e.lastDrainedJournalId,board:{runtimeByCardId:e.runtimeByCardId}}}function Ft(e){let t=e[he],n=e[xt],s=e.board?.runtimeByCardId;if(!t||typeof t!="object")throw new Error(`State snapshot is missing required key: ${he}`);return {graph:t,lastDrainedJournalId:typeof n=="string"?n:"",runtimeByCardId:s&&typeof s=="object"?s:{}}}function _t(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 A(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function R(e){return {status:"fail",error:e}}function _(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function sr(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 Bt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),n=t+"=".repeat((4-t.length%4)%4),a=atob(n),s=Uint8Array.from(a,d=>d.charCodeAt(0));return new TextDecoder().decode(s)}function qe(e){try{let t=JSON.parse(Bt(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function Ot(e){return sr(JSON.stringify(e))}function Pt(e){try{let t=JSON.parse(Bt(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 ar(e){let t=new Map;return {appendEntries(n,a){if(!n||a.length===0)return;let s=t.get(n)??[];t.set(n,[...s,...a]);},dispatchEntriesForJournalId(n,a){if(!n)return;let s=t.get(n);if(!(!s||s.length===0)){for(let d of s)try{a(d);}catch(u){try{e(d,u instanceof Error?u.message:String(u));}catch{}}t.delete(n);}}}}function jr(e,t,n={}){mt(t.callbackTransport,"createBoardLiveCardsPublic");let a=t.callbackTransport,s=t.onWarn??(()=>{}),d=chunkVQCIOKJV_cjs.a(e),u=n.boardRuntimeStoreRef,c=n.scratchStoreRef,h=n.taskExecutorRef,y=n.chatHandlerFlow,V=n.emitNotification??(o=>{if(!t.publishBoardChangeNotifications)return;let r=o.kind==="notification-batch"?o.notifications:[o];return t.publishBoardChangeNotifications(r)});function z(){if(!u)throw new Error(`Board at ${e.value} has no board runtime store configured. Pass boardRuntimeStoreRef at construction or init.`);return u}function Y(o){if(o.length!==0)try{let r=chunk2RIHC5TZ_cjs.e(o),l=chunk2RIHC5TZ_cjs.f({kind:"notification-batch",notifications:r}),p=V(l);p&&typeof p.catch=="function"&&p.catch(C=>s(`[board-live-cards-public] emitNotification failed: ${C instanceof Error?C.message:String(C)}`));}catch(r){s(`[board-live-cards-public] emitNotification failed: ${r instanceof Error?r.message:String(r)}`);}}function ee(){let o=S().readCardStoreRef();if(!o)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(o);return {readIndex(){return r.read("_index")},writeIndex(l){r.write("_index",l);},readCard(l){return r.read(l)},writeCard(l,p){return r.write(l,p),t.hashFn(p)},removeCard(l){r.delete(l);},cardExists(l){return r.read(l)!==null},defaultCardKey(l){return l}}}let T={readValues(o){let r=t.kvStorageForRef(z()),l=r.listKeys().sort();if(l.length===0)return {version:null,values:{}};let p={};for(let C of l)p[C]=r.read(C);return {version:t.hashFn(p),values:p}},writeValues(o,r,l){let p=t.kvStorageForRef(z());for(let C of l)p.delete(C);for(let[C,F]of Object.entries(r))p.write(C,F);return t.hashFn(r)}},S=()=>Pe(t.kvStorageForRef(z())),G=()=>Et(T),U=()=>vt(t.journalAdapterForRef(z())),g=()=>He(ee(),s),i=()=>{let o=S().readOutputsStoreRef();if(!o)throw new Error(`Board at ${e.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return Tt(t.kvStorageForRef(o))};function m(){return h??S().readTaskExecutorRef()}function b(){return !!G().readSnapshot(e.value).values[he]}function I(){let o=G().readSnapshot(e.value);if(!o.values[he])throw new Error(`Board not initialized at ${e.value}`);return Ft(o.values)}function w(o,r){let l=G().commitSnapshot(e.value,{schemaVersion:Oe,expectedVersion:r,commitId:t.genId(),committedAt:Z(),deleteKeys:[],shallowMerge:It(o)});if(!l.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${r??"null"} current=${l.currentVersion??"null"}`)}function x(o){U().appendEvent(o);}async function K(){let r=ar((f,k)=>{let O=f.payload,N=(O?.enrichedCard??{}).id??O?.cardId??"unknown";x({type:"task-failed",taskName:N,error:k,timestamp:Z()});}),l=I(),p=chunkG4XXRHL2_cjs.q(l.graph),{events:C,newCursor:F}=U().readEntriesAfterCursor(l.lastDrainedJournalId),$=j(),q=_e($,f=>t.resolveBlob(f)),J={...l.runtimeByCardId},W=new Map,Se={readRuntime(f){return W.get(f)??J[f]??{_sources:{}}},writeRuntime(f,k){W.set(f,k),J[f]=k;}},ke=[],oe=new Map,we={readSourceData(f,k){let O=`${f}/${k}`;return oe.has(O)?oe.get(O):q.readSourceData(f,k)},ingestSourceDataStaged(f,k,O,ue){q.ingestSourceDataStaged(f,k,O,ue);},commitSourceData(f,k,O){let ue=`${f}/.staged/${O}/${k}`,N=$.read(ue);if(N==null){let Q=$.keyRef?.(ue);Q&&(N=t.resolveBlob(Q));}if(N==null)return false;let se=`${f}/${k}`,fe=N.trim();try{oe.set(se,JSON.parse(fe));}catch{oe.set(se,fe);}return ke.push({cardId:f,outputFile:k,deliveryToken:O}),true},hasSource(f,k){let O=`${f}/${k}`;return oe.has(O)?true:q.hasSource(f,k)},listSources(f){let k=q.listSources(f),O=new Set;for(let N of oe.keys())N.startsWith(`${f}/`)&&O.add(N.slice(`${f}/`.length));let ue=new Set([...k,...O]);return Array.from(ue)}},le={cardStore:g(),cardRuntimeStore:Se,fetchedSourcesStore:we,outputStore:i(),executionRequestStore:r},Re=[],Ve=[],je=[],Ke=new Map,Xe=new Set,Qt=(f,k)=>{Re.push({type:"task-completed",taskName:f,data:k,timestamp:Z()});},Ne=(f,k)=>{x({type:"task-failed",taskName:f,error:k,timestamp:Z()});},ve=chunkG4XXRHL2_cjs.u(p,{handlers:{"card-handler":At(e,F,le,Qt,Ne,(f,k)=>{Ve.push({cardId:f,values:k});},f=>{je.push(f);})},onNodeRemoved:f=>{Ke.delete(f),W.delete(f),delete J[f],Xe.add(f);}});for(Re=C;Re.length>0;){let f=Re;Re=[];for(let k of f)if(k.type==="task-restart"){let O=le.cardStore.readCard(k.taskName);O&&Ke.set(k.taskName,O);}ve.pushAll(f),await ve.waitForHandlers();}let We=ve.getState();await ve.dispose({wait:true});let zt=G().readSnapshot(e.value).version;w({lastDrainedJournalId:F,graph:chunkG4XXRHL2_cjs.p(We),runtimeByCardId:J},zt);for(let{cardId:f,values:k}of Ve)le.outputStore.writeComputedValues(f,k);for(let f of je)le.outputStore.writeDataObjects(f);for(let{cardId:f,outputFile:k,deliveryToken:O}of ke)q.commitSourceData(f,k,O);let xe;try{xe=Be(d,We),le.outputStore.writeStatusSnapshot(xe);}catch(f){s(`[board-live-cards-public] status publish failed: ${f instanceof Error?f.message:String(f)}`);}let ye=[];for(let{cardId:f,values:k}of Ve)ye.push({kind:"computed_values",cardId:f,values:k});for(let f of je)for(let[k,O]of Object.entries(f))k&&ye.push({kind:"data_object",key:k,payload:O});for(let[f,k]of Ke)ye.push({kind:"card_refreshed",cardId:f,card:k});for(let f of Xe)ye.push({kind:"card_removed",cardId:f});xe!==void 0&&ye.push({kind:"status",status:xe}),Y(ye);let Ce=m()??{howToRun:"built-in",whatToRun:chunkVQCIOKJV_cjs.a({kind:"built-in",value:"source-cli-task-executor"})},Ze=t.supportsDirectSourceOutput?.(Ce)===true;r.dispatchEntriesForJournalId(F,f=>{if(f.taskKind!=="source-fetch"){s(`[process-accumulated-events] unknown taskKind "${f.taskKind}" \u2014 skipping`);return}let k=f.payload,O=k.enrichedCard?.id??"unknown",ue=k.enrichedCard?.source_defs??[];if(Ce.howToRun==="queue-storage"&&Ze){try{let N=t.queueStorageForRef(P(),"task-executor"),se=typeof Ce.extra?.boardId=="string"?Ce.extra.boardId:void 0,fe=[];for(let Q of ue){if(!Q.outputFile){s(`[dispatch] source "${Q.bindTo}" has no outputFile \u2014 skipping`);continue}let Ee=t.genId(),Te=`${O}/.staged/${Ee}/${Q.outputFile}`,et=$.keyRef?.(Te);if(!et)continue;let tt={ref:chunkVQCIOKJV_cjs.a(et),deliveryToken:Ee,outputFile:Q.outputFile,cardId:O},Yt=Ot({cbk:k.callbackToken,rg:e.value,br:chunkVQCIOKJV_cjs.a(e),cid:O,b:Q.bindTo,d:Q.outputFile,cs:void 0,rqt:k.rqt,dt:tt.deliveryToken});fe.push({...se?{boardId:se}:{},ref:Ce,args:{source_def:Q,base_ref:chunkVQCIOKJV_cjs.a(e),callback:a.createCallback(Yt),output:tt}});}fe.length>0&&N.enqueueMany(fe);}catch(N){Ne(O,N instanceof Error?N.message:String(N));}return}for(let N of ue){if(!N.outputFile){s(`[dispatch] source "${N.bindTo}" has no outputFile \u2014 skipping`);continue}let se;if(Ze){let Q=t.genId(),Ee=`${O}/.staged/${Q}/${N.outputFile}`,Te=$.keyRef?.(Ee);Te&&(se={ref:chunkVQCIOKJV_cjs.a(Te),deliveryToken:Q,outputFile:N.outputFile,cardId:O});}let fe=Ot({cbk:k.callbackToken,rg:e.value,br:chunkVQCIOKJV_cjs.a(e),cid:O,b:N.bindTo,d:N.outputFile,cs:void 0,rqt:k.rqt,...se?{dt:se.deliveryToken}:{}});t.dispatchExecution(Ce,{source_def:N,base_ref:chunkVQCIOKJV_cjs.a(e),callback:a.createCallback(fe),...se?{output:se}:{}}).catch(Q=>Ne(O,Q instanceof Error?Q.message:String(Q)));}});}function P(){let o=S().readQueueStoreRef();if(!o)throw new Error(`Board at ${e.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);return o}function D(){let o=t.queueStorageForRef(P(),"process-accumulated");o.enqueueIfAbsent?o.enqueueIfAbsent({boardRef:chunkVQCIOKJV_cjs.a(e)},`process-accumulated:${chunkVQCIOKJV_cjs.a(e)}`):o.enqueue({boardRef:chunkVQCIOKJV_cjs.a(e)}),t.requestProcessAccumulated?.();}function H(){let o=t.queueStorageForRef(P(),"process-accumulated");for(;;){let r=o.lease({max:64,visibilityMs:1e3});if(r.length<=0)return;for(let l of r)o.ack(l.id,l.leaseToken);if(r.length<64)return}}async function ne(){try{let o=()=>{let l=I(),{events:p}=U().readEntriesAfterCursor(l.lastDrainedJournalId);p.length<=0||D();},r=await chunkVQCIOKJV_cjs.c(t.lock,K,o);return A({ran:r!==!1})}catch(o){return _(o)}}function X(){D();}function pe(o){try{let r=o.params?.cardStoreRef;if(!r)return R("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(u=o.params?.boardRuntimeStoreRef,!u)return R("init requires params.boardRuntimeStoreRef \u2014 pass the board runtime store ref here");if(!b()){let J=chunkG4XXRHL2_cjs.a(Ge);w({lastDrainedJournalId:"",graph:chunkG4XXRHL2_cjs.p(J),runtimeByCardId:{}},null);}let l=o.params?.outputsStoreRef;if(!l)return R("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let p=o.params?.queueStoreRef;if(!p)return R("init requires params.queueStoreRef \u2014 pass the queue store ref here");let C=o.params?.fetchedSourcesStoreRef;if(!C)return R("init requires params.fetchedSourcesStoreRef \u2014 pass the fetched sources store ref here");c=o.params?.scratchStoreRef;let F=o.params?.chatStoreRef;if(!F)return R("init requires params.chatStoreRef \u2014 pass the chat store ref here");let $=o.params?.artifactsStoreRef;if(!$)return R("init requires params.artifactsStoreRef \u2014 pass the artifacts store ref here");let q=S();q.writeBoardRuntimeStoreRef(u),q.writeCardStoreRef(r),q.writeOutputsStoreRef(l),q.writeQueueStoreRef(p),q.writeFetchedSourcesStoreRef(C),q.writeChatStoreRef(F),q.writeArtifactsStoreRef($);try{i().writeStatusSnapshot(Be(d,chunkG4XXRHL2_cjs.q(I().graph)));}catch{}return A()}catch(r){return _(r)}}function ae(o){try{let r=i().readStatusSnapshot();if(!r){r=Be(d,chunkG4XXRHL2_cjs.q(I().graph));try{i().writeStatusSnapshot(r);}catch{}}return A(r)}catch(r){return _(r)}}function E(o){try{let r=o.params?.id;if(!r)return R("removeCard requires params.id");try{t.kvStorage("card-upsert").delete(r);}catch{}return x({type:"task-removal",taskName:r,timestamp:Z()}),X(),A()}catch(r){return _(r)}}function v(o){try{let r=o.params?.cardId;if(!r)return R("addCardFiles requires params.cardId");let l=chunk5XLFPPTY_cjs.a(g(),{emitNotification:V}).appendFiles({params:{id:r},body:o.body});return l.status!=="success"?l:A({cardId:r,files_added:l.data.files_added,notified:!0})}catch(r){return _(r)}}function B(o){try{let r=o.params?.id;return r?(x({type:"task-restart",taskName:r,timestamp:Z()}),X(),A()):R("retrigger requires params.id")}catch(r){return _(r)}}async function L(o){return H(),ne()}function te(){let o=S().readFetchedSourcesStoreRef();if(!o)throw new Error(`Board at ${e.value} has no fetched sources store configured. Run: init --fetched-sources-store-ref <b64-ref>`);return o}function j(){return t.blobStorageForRef(te())}function re(o){try{let r=o.params?.cardId,l=o.params?.all,p=!!o.params?.restart;if(!r&&!l)return R("upsertCard requires --card-id <id> or --all");let C=l?g().readAllCards().map(F=>F.id):[r];for(let F of C)if(!g().readCard(F))return R(`Card "${F}" not found in board at ${e.value}`);for(let F of C){let $=g().readCard(F),q=_t($),J=t.hashFn(q),W=t.kvStorage("card-upsert"),Se=W.read(F),ke=Se?.taskConfigHash!==J;if(!(!ke&&!p)){if(ke){let oe=Se?.blobRef??g().readCardKey(F)??F;x({type:"task-upsert",taskName:F,taskConfig:q,timestamp:Z()}),W.write(F,{blobRef:oe,taskConfigHash:J,updatedAt:Z()});}p&&x({type:"task-restart",taskName:F,timestamp:Z()});}}return X(),A()}catch(r){return _(r)}}function ie(o){try{let r=o.params?.token;if(!r)return R("taskFailed requires params.token");let l=o.params?.error??"unknown error",p=qe(r);return p?(x({type:"task-failed",taskName:p.taskName,error:l,timestamp:Z()}),X(),A()):R("Invalid callback token")}catch(r){return _(r)}}function ge(o){try{let r=o.params?.token;if(!r)return R("taskProgress requires params.token");let p=(o.body??{}).update??{},C=qe(r);return C?(x({type:"task-progress",taskName:C.taskName,update:p,timestamp:Z()}),X(),A()):R("Invalid callback token")}catch(r){return _(r)}}function be(o){try{let r=o.params?.token,l=o.params?.ref;if(!r)return R("sourceDataFetched requires params.token");if(!l)return R("sourceDataFetched requires params.ref");let p=Pt(r);if(!p)return R("Invalid source token");let{cbk:C,cid:F,b:$,d:q,cs:J,rqt:W,dt:Se}=p,ke=_e(j(),Re=>t.resolveBlob(Re)),oe=Se||t.genId();Se||ke.ingestSourceDataStaged(F,q,chunkVQCIOKJV_cjs.b(l),oe);let we=qe(C);if(!we)return R("Invalid callback token embedded in source token");let le=Z();return x({type:"task-progress",taskName:we.taskName,update:{bindTo:$,outputFile:q,fetchedAt:le,deliveryToken:oe,sourceChecksum:J,rqt:W},timestamp:le}),X(),A()}catch(r){return _(r)}}function ce(o){try{let r=o.params?.token,l=o.params?.reason??"unknown";if(!r)return R("sourceDataFetchFailure requires params.token");let p=Pt(r);if(!p)return R("Invalid source token");let{cbk:C,b:F,d:$,cs:q,rqt:J}=p,W=qe(C);return W?(x({type:"task-progress",taskName:W.taskName,update:{bindTo:F,outputFile:$,failure:!0,reason:l,sourceChecksum:q,rqt:J},timestamp:Z()}),X(),A()):R("Invalid callback token embedded in source token")}catch(r){return _(r)}}function qt(o){try{let r=S().readCardStoreRef();return r?A({storeRef:r}):R(`Board at ${e.value} has no card store configured`)}catch(r){return _(r)}}function Vt(o){try{return A({storeRef:u??null})}catch(r){return _(r)}}function jt(o){try{let r=S().readOutputsStoreRef();return r?A({storeRef:r}):R(`Board at ${e.value} has no outputs store configured`)}catch(r){return _(r)}}function Kt(o){try{return A({storeRef:c??null})}catch(r){return _(r)}}function Nt(o){try{let r=S().readChatStoreRef();return A({storeRef:r})}catch(r){return _(r)}}function Dt(o){try{let r=S().readArtifactsStoreRef();return A({storeRef:r})}catch(r){return _(r)}}function Lt(o){try{let r=S().readFetchedSourcesStoreRef();return A({storeRef:r})}catch(r){return _(r)}}function $t(o){try{let r=o.params?.key;if(!r)return R("getConfig requires params.key");let l=S(),p;switch(r){case "task-executor":p=h??null;break;case "chat-handler-flow":p=y??null;break;case "board-runtime-store-ref":p=l.readBoardRuntimeStoreRef();break;case "card-store-ref":p=l.readCardStoreRef();break;case "outputs-store-ref":p=l.readOutputsStoreRef();break;case "scratch-store-ref":p=c??null;break;case "chat-store-ref":p=l.readChatStoreRef();break;case "artifacts-store-ref":p=l.readArtifactsStoreRef();break;case "fetched-sources-store-ref":p=l.readFetchedSourcesStoreRef();break;default:return R(`getConfig: unknown key "${r}"`)}return A({value:p})}catch(r){return _(r)}}function Jt(o){try{let r=o.params?.key;if(!r)return R("getOutputsDataObject requires params.key");let l=i().readDataObject(r);return A(l)}catch(r){return _(r)}}function Ue(o){try{return A(i().readAllDataObjects())}catch(r){return _(r)}}function Mt(o){try{let r=o.params?.key;if(!r)return R("getOutputsComputedValues requires params.key");let l=i().readComputedValues(r);return A(l)}catch(r){return _(r)}}function Qe(o){try{return A(i().readAllComputedValues())}catch(r){return _(r)}}function ze(){return _e(j(),o=>t.resolveBlob(o))}function Ye(o){let r=j().keyRef?.(o);if(!r)throw new Error("configured fetched-sources store does not support keyRef");return chunkVQCIOKJV_cjs.a(r)}function Ht(o){try{let r=o.params?.key;if(!r)return R("getOutputsFetchedSources requires params.key");let l=ze().listSources(r),p={};for(let C of l)p[C]=Ye(`${r}/${C}`);return A(p)}catch(r){return _(r)}}function Gt(o){try{let r=ze(),l=new Set;for(let C of j().listKeys()){let F=C.indexOf("/");F>0&&!C.includes("/.staged/")&&l.add(C.slice(0,F));}let p={};for(let C of l){let F=r.listSources(C);if(F.length>0){p[C]={};for(let $ of F)p[C][$]=Ye(`${C}/${$}`);}}return A(p)}catch(r){return _(r)}}function Ut(o){try{let r=g().readAllCards(),l=ae({});if(l.status!=="success")return l;let p=Ue({});if(p.status!=="success")return p;let C=Qe({});if(C.status!=="success")return C;let F=C.data,$={};for(let q of r){let J=typeof q?.id=="string"?q.id:null;if(!J)continue;let W=q.card_data&&typeof q.card_data=="object"&&!Array.isArray(q.card_data)?q.card_data:{};$[J]={schema_version:"v1",card_id:J,card_data:{...W},computed_values:F[J]&&typeof F[J]=="object"?F[J]:{}};}return A({cardDefinitions:r,statusSnapshot:l.data,dataObjectsByToken:p.data,cardRuntimeById:$})}catch(r){return _(r)}}return {init:pe,status:ae,getBoardRuntimeStoreRef:Vt,getCardStoreRef:qt,getOutputsStoreRef:jt,getScratchStoreRef:Kt,getChatStoreRef:Nt,getArtifactsStoreRef:Dt,getFetchedSourcesStoreRef:Lt,getConfig:$t,getOutputsDataObject:Jt,getAllOutputsDataObjects:Ue,getOutputsComputedValues:Mt,getAllOutputsComputedValues:Qe,getOutputsFetchedSources:Ht,getAllOutputsFetchedSources:Gt,buildSseOneShotPayload:Ut,removeCard:E,addCardFiles:v,retrigger:B,processAccumulatedEvents:L,upsertCard:re,taskFailed:ie,taskProgress:ge,sourceDataFetched:be,sourceDataFetchFailure:ce}}function Kr(e,t,n){let a=n?.taskExecutorRef,s=()=>{if(n){if(!n.boardRuntimeStoreRef)throw new Error(`Board at ${e.value} requires boardRuntimeStoreRef for non-core runtime operations.`);return Pe(t.kvStorageForRef(n.boardRuntimeStoreRef))}return Pe(t.kvStorage("config"))};function d(){let g=s().readCardStoreRef();if(!g)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let i=t.kvStorageForRef(g);return {readIndex(){return i.read("_index")},writeIndex(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??s().readTaskExecutorRef()}async function h(g,i){let m=t.validateSchema(i),b=[],I=c();if(I&&Array.isArray(i.source_defs))for(let x of i.source_defs){let K=typeof x.bindTo=="string"?x.bindTo:"(unknown)";try{let P;try{P=await t.invokeExecutor(I,"validate-source-def",{timeout:t.executorTimeouts?.validationMs??1e4,input:JSON.stringify(x)});}catch(H){let ne=H;if(P=typeof ne?.stdout=="string"?ne.stdout:"",!P.trim()){b.push(`source "${K}": executor validate-source-def failed \u2014 ${H instanceof Error?H.message:String(H)}`);continue}}let D=JSON.parse(P.trim());if(!D.ok&&Array.isArray(D.errors))for(let H of D.errors)b.push(`source "${K}": ${H}`);}catch(P){b.push(`source "${K}": executor validate-source-def failed \u2014 ${P instanceof Error?P.message:String(P)}`);}}let w=[...m.errors,...b];return A({cardId:g,isValid:w.length===0,issues:w})}function y(g,i){let m=g.params?.sourceIdx,b=g.params?.outRef;if(m===void 0)return R(`${i} requires params.sourceIdx`);if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return R(`${i} requires card JSON object in body`);let I=g.body,w=I["card-content"]??I,x=I["mock-projections"]??{},K=w.source_defs??[];if(m<0||m>=K.length)return R(`sourceIdx ${m} out of range (card has ${K.length} source(s))`);let P=K[m],D=typeof P.bindTo=="string"?P.bindTo:"source";return {src:P,bindTo:D,outRef:b,mockProjections:x}}async function V(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return R("validateCardPreflight requires card JSON object in body");let i=g.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)";return await h(b,m)}catch(i){return _(i)}}async function z(g){try{let i=y(g,"probeSourcePreflight");if("status"in i)return i;let m=c();if(!m)return R("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)}),w=JSON.parse(I.trim());return w.ok?A({bindTo:i.bindTo,reachable:w.reachable,latencyMs:w.latencyMs,note:w.note}):R(w.error??"Preflight probe failed")}catch{return R("Executor does not support probe-source-preflight")}}catch(i){return _(i)}}async function Y(g){try{let i=y(g,"runSourcePreflight");if("status"in i)return i;let m=c();if(!m)return R("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)}),w=JSON.parse(I.trim());if(!w.ok)return A({bindTo:i.bindTo,ok:!1,result:null,issues:[w.error??"Preflight run failed"]});if(i.outRef){let x=chunkVQCIOKJV_cjs.b(i.outRef);t.absoluteBlob.write(x.value,JSON.stringify(w.resultValue,null,2));}return A({bindTo:typeof w.bindTo=="string"?w.bindTo:i.bindTo,ok:!0,result:w.resultValue??null,issues:[]})}catch(b){let I=b instanceof Error?b.message:String(b);return A({bindTo:i.bindTo,ok:!1,result:null,issues:[I]})}}catch(i){return _(i)}}async function ee(g){try{let i=c();if(!i)return R("No task-executor registered for this board");let m=await t.invokeExecutor(i,"describe-capabilities",{timeout:t.executorTimeouts?.describeMs??1e4});return A(JSON.parse(m.trim()))}catch(i){return _(i)}}function T(g){try{let i=g.body;if(!i||!Array.isArray(i.ops))return R("updatesInCardStore requires body.ops array");let m=i.ops,b=u();for(let I of m){let w=I.op,x=I.id;if(!x)return R('op is missing "id"');if(w==="update"){let K=I["card-content"];if(!K)return R(`update op for "${x}" is missing "card-content"`);b.writeCard(x,K);}else return R(`Unknown op type: "${w??"(none)"}"`)}return A()}catch(i){return _(i)}}function S(g){try{let i=g.body;if(!i||!Array.isArray(i.ids))return R("readFromCardStore requires body.ids array");let m=i.ids,b=u(),I=m.map(w=>({id:w,"card-content":b.readCard(w)}));return A({cards:I})}catch(i){return _(i)}}function G(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return R("evalCardCompute requires a JSON object in body");let i=g.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)",I=i["mock-fetched-sources"]??{},w=i["mock-requires"]??{},x=m.compute;if(!x||!Array.isArray(x)||x.length===0)return A({cardId:b,ok:!0,computed_values:{},errors:[]});let K={id:b,card_data:m.card_data??{},requires:w,source_defs:m.source_defs,compute:x},P=chunkUG55PF75_cjs.a.runSync(K,{sourcesData:I}),D=P.node.computed_values??{},H=P.errors??[];return A({cardId:b,ok:H.length===0,computed_values:D,errors:H})}catch(i){return _(i)}}async function U(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return R("simulateCardCycle requires a JSON object in body");let i=g.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)",I=i["mock-fetched-sources"]??{},w=i["mock-requires"]??{},x=await h(b,m),K=x.status==="success"?{isValid:x.data.isValid,issues:x.data.issues}:{isValid:!1,issues:[x.status==="fail"?x.error:"internal error"]},P=m.source_defs??[],D=m.card_data??{},H=[],ne=[];if(P.length>0){H=chunkUG55PF75_cjs.a.enrichSourcesSync(P,{card_data:D,requires:w});for(let j of H){let re=j.projections,ie=j._projections;if(re&&ie){for(let ge of Object.keys(re))if(ie[ge]===void 0){let be=typeof j.bindTo=="string"?j.bindTo:"(unknown)";ne.push({bindTo:be,key:ge,error:`Projection "${ge}" resolved to undefined`});}}}}let X=[],pe={...I},ae=i["task-executor-ref"],E=(ae?.howToRun&&ae?.whatToRun?ae:void 0)??c();for(let j=0;j<H.length;j++){let re=H[j],ie=typeof re.bindTo=="string"?re.bindTo:`source_${j}`;if(!E){X.push({bindTo:ie,skipped:!0,error:"No task executor configured"});continue}try{let ge={...re},be=await t.invokeExecutor(E,"run-source-preflight",{timeout:re.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(ge)}),ce=JSON.parse(be.trim());ce.ok&&!Object.prototype.hasOwnProperty.call(I,ie)&&Object.prototype.hasOwnProperty.call(ce,"resultValue")&&(pe[ie]=ce.resultValue),X.push({bindTo:ie,reachable:ce.reachable,latencyMs:ce.latencyMs,error:ce.ok?void 0:ce.error});}catch{X.push({bindTo:ie,skipped:!0,error:"Executor does not support run-source-preflight"});}}let v=m.compute,B={},L=[];if(v&&Array.isArray(v)&&v.length>0){let j={id:b,card_data:D,requires:w,source_defs:m.source_defs,compute:v},re=chunkUG55PF75_cjs.a.runSync(j,{sourcesData:pe});B=re.node.computed_values??{},L=re.errors??[];}let te=K.isValid&&ne.length===0&&L.length===0&&X.every(j=>j.reachable!==!1);return A({cardId:b,ok:te,validation:K,source_probes:X,projection_errors:ne,fetched_sources:pe,computed_values:B,compute_errors:L})}catch(i){return _(i)}}return {validateCardPreflight:V,probeSourcePreflight:z,runSourcePreflight:Y,evalCardCompute:G,simulateCardCycle:U,describeTaskExecutorCapabilities:ee,updatesInCardStore:T,readFromCardStore:S}}
|
|
2
|
+
exports.a=kr;exports.b=St;exports.c=Rr;exports.d=mt;exports.e=mr;exports.f=pr;exports.g=gr;exports.h=ht;exports.i=er;exports.j=tr;exports.k=yt;exports.l=He;exports.m=Oe;exports.n=he;exports.o=Tr;exports.p=Ct;exports.q=bt;exports.r=nr;exports.s=wt;exports.t=Be;exports.u=Ge;exports.v=It;exports.w=Ft;exports.x=_t;exports.y=jr;exports.z=Kr;//# sourceMappingURL=chunk-YXKWIPQM.cjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-YXKWIPQM.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-E46UCDYN.js';import {a as a$2}from'./chunk-7QNEV5S3.js';import {e,f}from'./chunk-UGB7PC4P.js';function lt(e){return typeof e=="string"&&e.trim().length>0}function ft(e,t){if(!e||typeof e!="object")throw new Error(`${t}: adapter.selfRef is required`);if(!lt(e.howToRun))throw new Error(`${t}: adapter.selfRef.howToRun is required`);if(!lt(e.whatToRun))throw new Error(`${t}: adapter.selfRef.whatToRun is required`)}function mt(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 Xt(e,t="callbackTransport"){return {createCallback(n){let a=e();return ft(a,t),{token:n,via:a}}}}function $e(e){return Xt(()=>e,"createStaticExecutionRefCallbackTransport")}function mr(e){return $e({meta:"board-live-cards",howToRun:"http:post",whatToRun:a({kind:"http-url",value:String(e||"").trim()})})}function pr(e){return $e({meta:"board-live-cards",howToRun:"in-process-loop",whatToRun:a({kind:"in-process-loop",value:String(e||"").trim()})})}function gr(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),$e({meta:"board-live-cards",howToRun:"built-in",whatToRun:a({kind:"built-in",value:"board-live-cards"}),...Object.keys(n).length>0?{extra:n}:{}})}function Ie(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function Je(e,t){return Ie(e)?e.then(t):t(e)}function gt(e,t){let n={...e};for(let a of t.deleteKeys)delete n[a];return {...n,...t.shallowMerge}}function kr(e,t){return {readValues(a){let s=e(a);return Je(s.listKeys(),d=>{let u=[...d].sort();if(u.length===0)return {version:null,values:{}};let c={},h=null;for(let y of u){let V=s.read(y);Ie(V)?h=(h??Promise.resolve()).then(async()=>{c[y]=await V;}):c[y]=V;}return h?h.then(()=>({version:t(c),values:c})):{version:t(c),values:c}})},writeValues(a,s,d){let u=e(a),c=null;for(let h of d){let y=u.delete(h);Ie(y)&&(c=(c??Promise.resolve()).then(()=>y).then(()=>{}));}for(let[h,y]of Object.entries(s)){let V=u.write(h,y);Ie(V)&&(c=(c??Promise.resolve()).then(()=>V).then(()=>{}));}return c?c.then(()=>t(s)):t(s)}}}function St(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),s=>{if(s.version!==a.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:s.version};let d=gt(s.values,a);return Je(e.writeValues(n,d,a.deleteKeys),u=>({ok:true,newVersion:u}))})}}}function pt(e,t){if(!t)return e;let n=e.findIndex(a=>a.id===t);return n===-1?e:e.slice(n+1)}function kt(e){return {readEntriesAfterCursor(t){let n=pt(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 pt(e.readAllEntries(),t).length},appendEvent(t){e.appendEntry({id:e.generateId(),event:t});}}}function Rr(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 de(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 s=t(a);Fe(s)&&(n=Promise.resolve(s).then(()=>{}));}return n??void 0}function Wt(e){if(e==null)return null;let t=e.trim();if(!t)return null;try{return JSON.parse(t)}catch{return t}}function Zt(e,t){let n=e.match(t);return n?n[1]:null}function Rt(e,t,n){let a={},s=Me(e,d=>{let u=n(d);if(u)return de(t(d),c=>{a[u]=c;})});return Fe(s)?s.then(()=>a):a}function ht(e,t){return {readSourceData(n,a){return de(e.read(`${n}/${a}`),Wt)},ingestSourceDataStaged(n,a,s,d){return de(t(s),u=>e.write(`${n}/.staged/${d}/${a}`,u))},commitSourceData(n,a,s){let d=`${n}/.staged/${s}/${a}`,u=`${n}/${a}`;return e.renameKey(d,u)},hasSource(n,a){return e.exists(`${n}/${a}`)},listSources(n){return de(e.listKeys(`${n}/`),a=>a.filter(s=>!s.includes("/.staged/")).map(s=>s.slice(`${n}/`.length)))}}}function er(e,t){let n=(a,s)=>{try{let d=s(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,s){if(!(!a||s.length===0))return de(e.read(a),d=>e.write(a,[...d??[],...s]))},dispatchEntriesForJournalId(a,s){if(a)return de(e.read(a),d=>{let u=d;if(!(!u||u.length===0))return de(Me(u,c=>n(c,s)),()=>e.delete(a))})}}}function tr(e,t,n){return {readRuntime(a){return de(e.read(t(a)),s=>s??n())},writeRuntime(a,s){return e.write(t(a),s)}}}function yt(e){return {writeComputedValues(t,n){return e.write(`cards/${t}/computed_values`,n)},readComputedValues(t){return e.read(`cards/${t}/computed_values`)},readAllComputedValues(){return de(e.listKeys("cards/"),t=>Rt(t,n=>e.read(n),n=>Zt(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 de(e.listKeys("data-objects/"),t=>Rt(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(s,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 h={...s},y=h;for(let V=0;V<c.length-1;V++){let z=c[V],Y=y[z],ee=Y&&typeof Y=="object"&&!Array.isArray(Y)?{...Y}:{};y[z]=ee,y=ee;}return y[c[c.length-1]]=u,h}return {readCard(s){let d=n()[s];return !d||!e.cardExists(d.key)?null:e.readCard(d.key)},readCardKey(s){return n()[s]?.key??null},readAllCards(){let s=[];for(let[d,u]of Object.entries(n())){if(!e.cardExists(u.key))continue;let c=e.readCard(u.key);c?s.push(c):t?.(`[card-store] could not read card "${d}" at key "${u.key}"`);}return s},readChecksumIndex(){let s={};for(let[d,u]of Object.entries(n()))s[d]=u.checksum;return s},changedSince(s){let d=n(),u=[];for(let[c,h]of Object.entries(d))s[c]!==h.checksum&&u.push(c);for(let c of Object.keys(s))d[c]||u.push(c);return u},validateUpsert(s,d){let u=n(),c=u[s],h=Object.entries(u).find(([,y])=>y.key===d);return c&&c.key!==d?{ok:false,error:`Card id "${s}" is already mapped to key "${c.key}", cannot remap to "${d}"`}:h&&h[0]!==s?{ok:false,error:`Key "${d}" is already mapped to card id "${h[0]}", cannot remap to "${s}"`}:{ok:true}},writeCard(s,d,u){let c=n(),h=u??c[s]?.key??e.defaultCardKey(s),y=e.writeCard(h,d);c[s]={key:h,checksum:y,updatedAt:new Date().toISOString()},e.writeIndex(c);},patchCard(s,d,u){let c=n(),h=c[s];if(!h||!e.cardExists(h.key))throw new Error(`card "${s}" not found`);let y=e.readCard(h.key);if(!y||typeof y!="object"||Array.isArray(y))throw new Error(`card "${s}" is not patchable`);let V=a(y,d,u),z=e.writeCard(h.key,V);c[s]={key:h.key,checksum:z,updatedAt:new Date().toISOString()},e.writeIndex(c);},removeCard(s){let d=n(),u=d[s];u&&(e.removeCard(u.key),delete d[s],e.writeIndex(d));},readIndex(){return n()}}}function _e(e,t){return ht(e,t)}function vt(e){return kt(e)}var Oe="v1",he="board/graph",xt="board/lastJournalProcessedId";function Tr(e){return `cards/${e}/runtime`}function Et(e){return St(e,Oe)}function Pe(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 Tt(e){return yt(e)}function Ct(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function rr(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function bt(e,t){return e?.lastRequestedToken?rr(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<t?"dispatch":"idle":"dispatch"}function nr(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"success"}}function wt(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"failure"}}function Be(e,t){let n=t.state.tasks,a=t.config.tasks,s=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 T of d.pending)c.set(T.taskName,T.waitingOn);for(let T of d.unresolved)c.set(T.taskName,T.missingTokens);for(let T of d.blocked)c.set(T.taskName,T.failedTokens);let h=new Map;for(let[T,S]of Object.entries(a))for(let G of S.requires??[]){let U=h.get(G)??[];U.push(T),h.set(G,U);}let y=s.sort().map(T=>{let S=n[T],G=a[T]??{requires:[],provides:[]};S.status==="completed"?u.completed+=1:S.status==="failed"?u.failed+=1:S.status==="in-progress"&&(u.in_progress+=1);let U=G.requires??[],g=G.provides??[],i=Object.keys(S.data??{}).sort(),m=U.filter(P=>t.state.availableOutputs.includes(P)),b=U.filter(P=>!t.state.availableOutputs.includes(P)),I=c.get(T)??b,w=new Set;for(let P of g)for(let D of h.get(P)??[])D!==T&&w.add(D);let x=S.failedAt,K=S.error?{message:S.error,code:"TASK_FAILED",at:x,source:"task-runtime"}:void 0;return {name:T,status:S.status,error:K,requires:U,requires_satisfied:m,requires_missing:b,provides_declared:g,provides_runtime:i,blocked_by:I,unblocks:Array.from(w).sort(),runtime:{attempt_count:S.executionCount??0,restart_count:S.retryCount??0,in_progress_since:S.status==="in-progress"?S.startedAt??null:null,last_transition_at:S.lastUpdated??null,last_completed_at:S.completedAt??null,last_restarted_at:S.startedAt??null,status_age_ms:S.lastUpdated?0:null}}});u.pending=d.pending.length,u.blocked=d.blocked.length,u.unresolved=d.unresolved.length;let V=y.map(T=>({name:T.name,fanOut:T.unblocks.length})).sort((T,S)=>S.fanOut-T.fanOut||T.name.localeCompare(S.name)),z=V.length>0?V[0]:{name:null,fanOut:0},Y=new Set;for(let T of Object.values(a))for(let S of T.requires??[])Y.add(S);let ee=0;for(let[T,S]of Object.entries(a)){let G=(S.requires??[]).length===0,g=(S.provides??[]).some(i=>(h.get(i)??[]).some(m=>m!==T));G&&!g&&(ee+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:s.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:z.name,max_fan_out:z.fanOut}},cards:y}}function or(){return new Date().toISOString()}function At(e,t,n,a$1,s,d,u){return async c=>{let h=[],y=n.cardStore.readCard(c.nodeId);if(!y)return "task-initiate-failure";let V=y.id,z=y.card_data??{},Y=y.source_defs??[],ee=Y,T=n.cardRuntimeStore.readRuntime(V),S=false,G=()=>{S&&(n.cardRuntimeStore.writeRuntime(V,T),S=false);},U=E=>Ct(T._sources[E]),g=(E,v)=>{T._sources[E]=Ct(v),S=true;},i=c.taskState?.executionCount??0;if(T._lastExecutionCount!==i&&(T._sources={},T._lastExecutionCount=i,S=true),c.update){let E=c.update,v=E.outputFile;if(v){let B=U(v);if(E.failure){let L=E.rqt??B.lastRequestedToken??B.queueRequestedToken;L&&g(v,wt(B,L));}else {let L=E.rqt;if(!B.lastCompletedToken||L>B.lastCompletedToken){let te=typeof E.deliveryToken=="string"?E.deliveryToken:void 0,j=false;te&&(j=n.fetchedSourcesStore.commitSourceData(V,v,te)),j?g(v,nr(B,L)):g(v,wt(B,L));}}G();}}let b={};for(let E of Y)if(E.outputFile){let v=n.fetchedSourcesStore.readSourceData(V,E.outputFile);v!==null&&(b[E.bindTo]=v);}let I={};for(let[E,v]of Object.entries(c.state??{}))if(v!==null&&typeof v=="object"&&!Array.isArray(v)){let B=v[E];I[E]=B!==void 0?B:v;}else I[E]=v;let w={id:V,card_data:{...z},requires:I,source_defs:Y,compute:y.compute};w._sourcesData=b,y.compute&&a$3.runSync(w,{sourcesData:b}),(d??n.outputStore.writeComputedValues.bind(n.outputStore))(V,w.computed_values??{});let x={...y},K=a$3.enrichSourcesSync(Array.isArray(y.source_defs)?y.source_defs:void 0,{card_data:y.card_data,requires:I}),P=e.value;x.source_defs=Array.isArray(K)?K.map(E=>({...E,boardDir:typeof E.boardDir=="string"&&E.boardDir?E.boardDir:P})):K;let D=or(),H=c.update?void 0:D,ne=ee.filter(E=>{let v=E.outputFile;if(typeof v!="string"||!v)return true;let B=U(v);H&&(B={...B,queueRequestedToken:H},g(v,B));let L=B.queueRequestedToken??B.lastRequestedToken??D,te=bt(B,L);return te==="in-flight"?false:te==="dispatch"});if(G(),ne.length>0){let E=false,v=D;for(let B of ne){let L=B.outputFile;if(typeof L!="string"||!L)continue;let te=U(L),j=te.queueRequestedToken??D;g(L,{...te,lastRequestedToken:j}),v=j,E=true;}return E&&G(),E&&(h.push({taskKind:"source-fetch",payload:{boardRef:a(e),enrichedCard:x,callbackToken:c.callbackToken,rqt:v}}),n.executionRequestStore.appendEntries(t,h)),"task-initiated"}if(ee.some(E=>{let v=E.outputFile;if(typeof v!="string"||!v)return false;let B=U(v),L=B.queueRequestedToken??B.lastRequestedToken??D;return bt(B,L)==="in-flight"}))return "task-initiated";let pe=y.provides??[],ae={};for(let{bindTo:E,ref:v}of pe)ae[E]=a$3.resolve(w,v);return (u??n.outputStore.writeDataObjects.bind(n.outputStore))(ae),a$1(c.nodeId,ae),h.length>0&&n.executionRequestStore.appendEntries(t,h),"task-initiated"}}var Ge={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function It(e){return {[he]:e.graph,[xt]:e.lastDrainedJournalId,board:{runtimeByCardId:e.runtimeByCardId}}}function Ft(e){let t=e[he],n=e[xt],s=e.board?.runtimeByCardId;if(!t||typeof t!="object")throw new Error(`State snapshot is missing required key: ${he}`);return {graph:t,lastDrainedJournalId:typeof n=="string"?n:"",runtimeByCardId:s&&typeof s=="object"?s:{}}}function _t(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 A(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function R(e){return {status:"fail",error:e}}function _(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function sr(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 Bt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),n=t+"=".repeat((4-t.length%4)%4),a=atob(n),s=Uint8Array.from(a,d=>d.charCodeAt(0));return new TextDecoder().decode(s)}function qe(e){try{let t=JSON.parse(Bt(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function Ot(e){return sr(JSON.stringify(e))}function Pt(e){try{let t=JSON.parse(Bt(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 ar(e){let t=new Map;return {appendEntries(n,a){if(!n||a.length===0)return;let s=t.get(n)??[];t.set(n,[...s,...a]);},dispatchEntriesForJournalId(n,a){if(!n)return;let s=t.get(n);if(!(!s||s.length===0)){for(let d of s)try{a(d);}catch(u){try{e(d,u instanceof Error?u.message:String(u));}catch{}}t.delete(n);}}}}function jr(e$1,t,n={}){mt(t.callbackTransport,"createBoardLiveCardsPublic");let a$3=t.callbackTransport,s=t.onWarn??(()=>{}),d=a(e$1),u$1=n.boardRuntimeStoreRef,c$1=n.scratchStoreRef,h=n.taskExecutorRef,y=n.chatHandlerFlow,V=n.emitNotification??(o=>{if(!t.publishBoardChangeNotifications)return;let r=o.kind==="notification-batch"?o.notifications:[o];return t.publishBoardChangeNotifications(r)});function z(){if(!u$1)throw new Error(`Board at ${e$1.value} has no board runtime store configured. Pass boardRuntimeStoreRef at construction or init.`);return u$1}function Y(o){if(o.length!==0)try{let r=e(o),l=f({kind:"notification-batch",notifications:r}),p=V(l);p&&typeof p.catch=="function"&&p.catch(C=>s(`[board-live-cards-public] emitNotification failed: ${C instanceof Error?C.message:String(C)}`));}catch(r){s(`[board-live-cards-public] emitNotification failed: ${r instanceof Error?r.message:String(r)}`);}}function ee(){let o=S().readCardStoreRef();if(!o)throw new Error(`Board at ${e$1.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let r=t.kvStorageForRef(o);return {readIndex(){return r.read("_index")},writeIndex(l){r.write("_index",l);},readCard(l){return r.read(l)},writeCard(l,p){return r.write(l,p),t.hashFn(p)},removeCard(l){r.delete(l);},cardExists(l){return r.read(l)!==null},defaultCardKey(l){return l}}}let T={readValues(o){let r=t.kvStorageForRef(z()),l=r.listKeys().sort();if(l.length===0)return {version:null,values:{}};let p={};for(let C of l)p[C]=r.read(C);return {version:t.hashFn(p),values:p}},writeValues(o,r,l){let p=t.kvStorageForRef(z());for(let C of l)p.delete(C);for(let[C,F]of Object.entries(r))p.write(C,F);return t.hashFn(r)}},S=()=>Pe(t.kvStorageForRef(z())),G=()=>Et(T),U=()=>vt(t.journalAdapterForRef(z())),g=()=>He(ee(),s),i=()=>{let o=S().readOutputsStoreRef();if(!o)throw new Error(`Board at ${e$1.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return Tt(t.kvStorageForRef(o))};function m(){return h??S().readTaskExecutorRef()}function b$1(){return !!G().readSnapshot(e$1.value).values[he]}function I(){let o=G().readSnapshot(e$1.value);if(!o.values[he])throw new Error(`Board not initialized at ${e$1.value}`);return Ft(o.values)}function w(o,r){let l=G().commitSnapshot(e$1.value,{schemaVersion:Oe,expectedVersion:r,commitId:t.genId(),committedAt:Z(),deleteKeys:[],shallowMerge:It(o)});if(!l.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${r??"null"} current=${l.currentVersion??"null"}`)}function x(o){U().appendEvent(o);}async function K(){let r=ar((f,k)=>{let O=f.payload,N=(O?.enrichedCard??{}).id??O?.cardId??"unknown";x({type:"task-failed",taskName:N,error:k,timestamp:Z()});}),l=I(),p$1=q(l.graph),{events:C,newCursor:F}=U().readEntriesAfterCursor(l.lastDrainedJournalId),$=j(),q$1=_e($,f=>t.resolveBlob(f)),J={...l.runtimeByCardId},W=new Map,Se={readRuntime(f){return W.get(f)??J[f]??{_sources:{}}},writeRuntime(f,k){W.set(f,k),J[f]=k;}},ke=[],oe=new Map,we={readSourceData(f,k){let O=`${f}/${k}`;return oe.has(O)?oe.get(O):q$1.readSourceData(f,k)},ingestSourceDataStaged(f,k,O,ue){q$1.ingestSourceDataStaged(f,k,O,ue);},commitSourceData(f,k,O){let ue=`${f}/.staged/${O}/${k}`,N=$.read(ue);if(N==null){let Q=$.keyRef?.(ue);Q&&(N=t.resolveBlob(Q));}if(N==null)return false;let se=`${f}/${k}`,fe=N.trim();try{oe.set(se,JSON.parse(fe));}catch{oe.set(se,fe);}return ke.push({cardId:f,outputFile:k,deliveryToken:O}),true},hasSource(f,k){let O=`${f}/${k}`;return oe.has(O)?true:q$1.hasSource(f,k)},listSources(f){let k=q$1.listSources(f),O=new Set;for(let N of oe.keys())N.startsWith(`${f}/`)&&O.add(N.slice(`${f}/`.length));let ue=new Set([...k,...O]);return Array.from(ue)}},le={cardStore:g(),cardRuntimeStore:Se,fetchedSourcesStore:we,outputStore:i(),executionRequestStore:r},Re=[],Ve=[],je=[],Ke=new Map,Xe=new Set,Qt=(f,k)=>{Re.push({type:"task-completed",taskName:f,data:k,timestamp:Z()});},Ne=(f,k)=>{x({type:"task-failed",taskName:f,error:k,timestamp:Z()});},ve=u(p$1,{handlers:{"card-handler":At(e$1,F,le,Qt,Ne,(f,k)=>{Ve.push({cardId:f,values:k});},f=>{je.push(f);})},onNodeRemoved:f=>{Ke.delete(f),W.delete(f),delete J[f],Xe.add(f);}});for(Re=C;Re.length>0;){let f=Re;Re=[];for(let k of f)if(k.type==="task-restart"){let O=le.cardStore.readCard(k.taskName);O&&Ke.set(k.taskName,O);}ve.pushAll(f),await ve.waitForHandlers();}let We=ve.getState();await ve.dispose({wait:true});let zt=G().readSnapshot(e$1.value).version;w({lastDrainedJournalId:F,graph:p(We),runtimeByCardId:J},zt);for(let{cardId:f,values:k}of Ve)le.outputStore.writeComputedValues(f,k);for(let f of je)le.outputStore.writeDataObjects(f);for(let{cardId:f,outputFile:k,deliveryToken:O}of ke)q$1.commitSourceData(f,k,O);let xe;try{xe=Be(d,We),le.outputStore.writeStatusSnapshot(xe);}catch(f){s(`[board-live-cards-public] status publish failed: ${f instanceof Error?f.message:String(f)}`);}let ye=[];for(let{cardId:f,values:k}of Ve)ye.push({kind:"computed_values",cardId:f,values:k});for(let f of je)for(let[k,O]of Object.entries(f))k&&ye.push({kind:"data_object",key:k,payload:O});for(let[f,k]of Ke)ye.push({kind:"card_refreshed",cardId:f,card:k});for(let f of Xe)ye.push({kind:"card_removed",cardId:f});xe!==void 0&&ye.push({kind:"status",status:xe}),Y(ye);let Ce=m()??{howToRun:"built-in",whatToRun:a({kind:"built-in",value:"source-cli-task-executor"})},Ze=t.supportsDirectSourceOutput?.(Ce)===true;r.dispatchEntriesForJournalId(F,f=>{if(f.taskKind!=="source-fetch"){s(`[process-accumulated-events] unknown taskKind "${f.taskKind}" \u2014 skipping`);return}let k=f.payload,O=k.enrichedCard?.id??"unknown",ue=k.enrichedCard?.source_defs??[];if(Ce.howToRun==="queue-storage"&&Ze){try{let N=t.queueStorageForRef(P(),"task-executor"),se=typeof Ce.extra?.boardId=="string"?Ce.extra.boardId:void 0,fe=[];for(let Q of ue){if(!Q.outputFile){s(`[dispatch] source "${Q.bindTo}" has no outputFile \u2014 skipping`);continue}let Ee=t.genId(),Te=`${O}/.staged/${Ee}/${Q.outputFile}`,et=$.keyRef?.(Te);if(!et)continue;let tt={ref:a(et),deliveryToken:Ee,outputFile:Q.outputFile,cardId:O},Yt=Ot({cbk:k.callbackToken,rg:e$1.value,br:a(e$1),cid:O,b:Q.bindTo,d:Q.outputFile,cs:void 0,rqt:k.rqt,dt:tt.deliveryToken});fe.push({...se?{boardId:se}:{},ref:Ce,args:{source_def:Q,base_ref:a(e$1),callback:a$3.createCallback(Yt),output:tt}});}fe.length>0&&N.enqueueMany(fe);}catch(N){Ne(O,N instanceof Error?N.message:String(N));}return}for(let N of ue){if(!N.outputFile){s(`[dispatch] source "${N.bindTo}" has no outputFile \u2014 skipping`);continue}let se;if(Ze){let Q=t.genId(),Ee=`${O}/.staged/${Q}/${N.outputFile}`,Te=$.keyRef?.(Ee);Te&&(se={ref:a(Te),deliveryToken:Q,outputFile:N.outputFile,cardId:O});}let fe=Ot({cbk:k.callbackToken,rg:e$1.value,br:a(e$1),cid:O,b:N.bindTo,d:N.outputFile,cs:void 0,rqt:k.rqt,...se?{dt:se.deliveryToken}:{}});t.dispatchExecution(Ce,{source_def:N,base_ref:a(e$1),callback:a$3.createCallback(fe),...se?{output:se}:{}}).catch(Q=>Ne(O,Q instanceof Error?Q.message:String(Q)));}});}function P(){let o=S().readQueueStoreRef();if(!o)throw new Error(`Board at ${e$1.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);return o}function D(){let o=t.queueStorageForRef(P(),"process-accumulated");o.enqueueIfAbsent?o.enqueueIfAbsent({boardRef:a(e$1)},`process-accumulated:${a(e$1)}`):o.enqueue({boardRef:a(e$1)}),t.requestProcessAccumulated?.();}function H(){let o=t.queueStorageForRef(P(),"process-accumulated");for(;;){let r=o.lease({max:64,visibilityMs:1e3});if(r.length<=0)return;for(let l of r)o.ack(l.id,l.leaseToken);if(r.length<64)return}}async function ne(){try{let o=()=>{let l=I(),{events:p}=U().readEntriesAfterCursor(l.lastDrainedJournalId);p.length<=0||D();},r=await c(t.lock,K,o);return A({ran:r!==!1})}catch(o){return _(o)}}function X(){D();}function pe(o){try{let r=o.params?.cardStoreRef;if(!r)return R("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(u$1=o.params?.boardRuntimeStoreRef,!u$1)return R("init requires params.boardRuntimeStoreRef \u2014 pass the board runtime store ref here");if(!b$1()){let J=a$1(Ge);w({lastDrainedJournalId:"",graph:p(J),runtimeByCardId:{}},null);}let l=o.params?.outputsStoreRef;if(!l)return R("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let p$1=o.params?.queueStoreRef;if(!p$1)return R("init requires params.queueStoreRef \u2014 pass the queue store ref here");let C=o.params?.fetchedSourcesStoreRef;if(!C)return R("init requires params.fetchedSourcesStoreRef \u2014 pass the fetched sources store ref here");c$1=o.params?.scratchStoreRef;let F=o.params?.chatStoreRef;if(!F)return R("init requires params.chatStoreRef \u2014 pass the chat store ref here");let $=o.params?.artifactsStoreRef;if(!$)return R("init requires params.artifactsStoreRef \u2014 pass the artifacts store ref here");let q$1=S();q$1.writeBoardRuntimeStoreRef(u$1),q$1.writeCardStoreRef(r),q$1.writeOutputsStoreRef(l),q$1.writeQueueStoreRef(p$1),q$1.writeFetchedSourcesStoreRef(C),q$1.writeChatStoreRef(F),q$1.writeArtifactsStoreRef($);try{i().writeStatusSnapshot(Be(d,q(I().graph)));}catch{}return A()}catch(r){return _(r)}}function ae(o){try{let r=i().readStatusSnapshot();if(!r){r=Be(d,q(I().graph));try{i().writeStatusSnapshot(r);}catch{}}return A(r)}catch(r){return _(r)}}function E(o){try{let r=o.params?.id;if(!r)return R("removeCard requires params.id");try{t.kvStorage("card-upsert").delete(r);}catch{}return x({type:"task-removal",taskName:r,timestamp:Z()}),X(),A()}catch(r){return _(r)}}function v(o){try{let r=o.params?.cardId;if(!r)return R("addCardFiles requires params.cardId");let l=a$2(g(),{emitNotification:V}).appendFiles({params:{id:r},body:o.body});return l.status!=="success"?l:A({cardId:r,files_added:l.data.files_added,notified:!0})}catch(r){return _(r)}}function B(o){try{let r=o.params?.id;return r?(x({type:"task-restart",taskName:r,timestamp:Z()}),X(),A()):R("retrigger requires params.id")}catch(r){return _(r)}}async function L(o){return H(),ne()}function te(){let o=S().readFetchedSourcesStoreRef();if(!o)throw new Error(`Board at ${e$1.value} has no fetched sources store configured. Run: init --fetched-sources-store-ref <b64-ref>`);return o}function j(){return t.blobStorageForRef(te())}function re(o){try{let r=o.params?.cardId,l=o.params?.all,p=!!o.params?.restart;if(!r&&!l)return R("upsertCard requires --card-id <id> or --all");let C=l?g().readAllCards().map(F=>F.id):[r];for(let F of C)if(!g().readCard(F))return R(`Card "${F}" not found in board at ${e$1.value}`);for(let F of C){let $=g().readCard(F),q=_t($),J=t.hashFn(q),W=t.kvStorage("card-upsert"),Se=W.read(F),ke=Se?.taskConfigHash!==J;if(!(!ke&&!p)){if(ke){let oe=Se?.blobRef??g().readCardKey(F)??F;x({type:"task-upsert",taskName:F,taskConfig:q,timestamp:Z()}),W.write(F,{blobRef:oe,taskConfigHash:J,updatedAt:Z()});}p&&x({type:"task-restart",taskName:F,timestamp:Z()});}}return X(),A()}catch(r){return _(r)}}function ie(o){try{let r=o.params?.token;if(!r)return R("taskFailed requires params.token");let l=o.params?.error??"unknown error",p=qe(r);return p?(x({type:"task-failed",taskName:p.taskName,error:l,timestamp:Z()}),X(),A()):R("Invalid callback token")}catch(r){return _(r)}}function ge(o){try{let r=o.params?.token;if(!r)return R("taskProgress requires params.token");let p=(o.body??{}).update??{},C=qe(r);return C?(x({type:"task-progress",taskName:C.taskName,update:p,timestamp:Z()}),X(),A()):R("Invalid callback token")}catch(r){return _(r)}}function be(o){try{let r=o.params?.token,l=o.params?.ref;if(!r)return R("sourceDataFetched requires params.token");if(!l)return R("sourceDataFetched requires params.ref");let p=Pt(r);if(!p)return R("Invalid source token");let{cbk:C,cid:F,b:$,d:q,cs:J,rqt:W,dt:Se}=p,ke=_e(j(),Re=>t.resolveBlob(Re)),oe=Se||t.genId();Se||ke.ingestSourceDataStaged(F,q,b(l),oe);let we=qe(C);if(!we)return R("Invalid callback token embedded in source token");let le=Z();return x({type:"task-progress",taskName:we.taskName,update:{bindTo:$,outputFile:q,fetchedAt:le,deliveryToken:oe,sourceChecksum:J,rqt:W},timestamp:le}),X(),A()}catch(r){return _(r)}}function ce(o){try{let r=o.params?.token,l=o.params?.reason??"unknown";if(!r)return R("sourceDataFetchFailure requires params.token");let p=Pt(r);if(!p)return R("Invalid source token");let{cbk:C,b:F,d:$,cs:q,rqt:J}=p,W=qe(C);return W?(x({type:"task-progress",taskName:W.taskName,update:{bindTo:F,outputFile:$,failure:!0,reason:l,sourceChecksum:q,rqt:J},timestamp:Z()}),X(),A()):R("Invalid callback token embedded in source token")}catch(r){return _(r)}}function qt(o){try{let r=S().readCardStoreRef();return r?A({storeRef:r}):R(`Board at ${e$1.value} has no card store configured`)}catch(r){return _(r)}}function Vt(o){try{return A({storeRef:u$1??null})}catch(r){return _(r)}}function jt(o){try{let r=S().readOutputsStoreRef();return r?A({storeRef:r}):R(`Board at ${e$1.value} has no outputs store configured`)}catch(r){return _(r)}}function Kt(o){try{return A({storeRef:c$1??null})}catch(r){return _(r)}}function Nt(o){try{let r=S().readChatStoreRef();return A({storeRef:r})}catch(r){return _(r)}}function Dt(o){try{let r=S().readArtifactsStoreRef();return A({storeRef:r})}catch(r){return _(r)}}function Lt(o){try{let r=S().readFetchedSourcesStoreRef();return A({storeRef:r})}catch(r){return _(r)}}function $t(o){try{let r=o.params?.key;if(!r)return R("getConfig requires params.key");let l=S(),p;switch(r){case "task-executor":p=h??null;break;case "chat-handler-flow":p=y??null;break;case "board-runtime-store-ref":p=l.readBoardRuntimeStoreRef();break;case "card-store-ref":p=l.readCardStoreRef();break;case "outputs-store-ref":p=l.readOutputsStoreRef();break;case "scratch-store-ref":p=c$1??null;break;case "chat-store-ref":p=l.readChatStoreRef();break;case "artifacts-store-ref":p=l.readArtifactsStoreRef();break;case "fetched-sources-store-ref":p=l.readFetchedSourcesStoreRef();break;default:return R(`getConfig: unknown key "${r}"`)}return A({value:p})}catch(r){return _(r)}}function Jt(o){try{let r=o.params?.key;if(!r)return R("getOutputsDataObject requires params.key");let l=i().readDataObject(r);return A(l)}catch(r){return _(r)}}function Ue(o){try{return A(i().readAllDataObjects())}catch(r){return _(r)}}function Mt(o){try{let r=o.params?.key;if(!r)return R("getOutputsComputedValues requires params.key");let l=i().readComputedValues(r);return A(l)}catch(r){return _(r)}}function Qe(o){try{return A(i().readAllComputedValues())}catch(r){return _(r)}}function ze(){return _e(j(),o=>t.resolveBlob(o))}function Ye(o){let r=j().keyRef?.(o);if(!r)throw new Error("configured fetched-sources store does not support keyRef");return a(r)}function Ht(o){try{let r=o.params?.key;if(!r)return R("getOutputsFetchedSources requires params.key");let l=ze().listSources(r),p={};for(let C of l)p[C]=Ye(`${r}/${C}`);return A(p)}catch(r){return _(r)}}function Gt(o){try{let r=ze(),l=new Set;for(let C of j().listKeys()){let F=C.indexOf("/");F>0&&!C.includes("/.staged/")&&l.add(C.slice(0,F));}let p={};for(let C of l){let F=r.listSources(C);if(F.length>0){p[C]={};for(let $ of F)p[C][$]=Ye(`${C}/${$}`);}}return A(p)}catch(r){return _(r)}}function Ut(o){try{let r=g().readAllCards(),l=ae({});if(l.status!=="success")return l;let p=Ue({});if(p.status!=="success")return p;let C=Qe({});if(C.status!=="success")return C;let F=C.data,$={};for(let q of r){let J=typeof q?.id=="string"?q.id:null;if(!J)continue;let W=q.card_data&&typeof q.card_data=="object"&&!Array.isArray(q.card_data)?q.card_data:{};$[J]={schema_version:"v1",card_id:J,card_data:{...W},computed_values:F[J]&&typeof F[J]=="object"?F[J]:{}};}return A({cardDefinitions:r,statusSnapshot:l.data,dataObjectsByToken:p.data,cardRuntimeById:$})}catch(r){return _(r)}}return {init:pe,status:ae,getBoardRuntimeStoreRef:Vt,getCardStoreRef:qt,getOutputsStoreRef:jt,getScratchStoreRef:Kt,getChatStoreRef:Nt,getArtifactsStoreRef:Dt,getFetchedSourcesStoreRef:Lt,getConfig:$t,getOutputsDataObject:Jt,getAllOutputsDataObjects:Ue,getOutputsComputedValues:Mt,getAllOutputsComputedValues:Qe,getOutputsFetchedSources:Ht,getAllOutputsFetchedSources:Gt,buildSseOneShotPayload:Ut,removeCard:E,addCardFiles:v,retrigger:B,processAccumulatedEvents:L,upsertCard:re,taskFailed:ie,taskProgress:ge,sourceDataFetched:be,sourceDataFetchFailure:ce}}function Kr(e,t,n){let a=n?.taskExecutorRef,s=()=>{if(n){if(!n.boardRuntimeStoreRef)throw new Error(`Board at ${e.value} requires boardRuntimeStoreRef for non-core runtime operations.`);return Pe(t.kvStorageForRef(n.boardRuntimeStoreRef))}return Pe(t.kvStorage("config"))};function d(){let g=s().readCardStoreRef();if(!g)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let i=t.kvStorageForRef(g);return {readIndex(){return i.read("_index")},writeIndex(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??s().readTaskExecutorRef()}async function h(g,i){let m=t.validateSchema(i),b=[],I=c();if(I&&Array.isArray(i.source_defs))for(let x of i.source_defs){let K=typeof x.bindTo=="string"?x.bindTo:"(unknown)";try{let P;try{P=await t.invokeExecutor(I,"validate-source-def",{timeout:t.executorTimeouts?.validationMs??1e4,input:JSON.stringify(x)});}catch(H){let ne=H;if(P=typeof ne?.stdout=="string"?ne.stdout:"",!P.trim()){b.push(`source "${K}": executor validate-source-def failed \u2014 ${H instanceof Error?H.message:String(H)}`);continue}}let D=JSON.parse(P.trim());if(!D.ok&&Array.isArray(D.errors))for(let H of D.errors)b.push(`source "${K}": ${H}`);}catch(P){b.push(`source "${K}": executor validate-source-def failed \u2014 ${P instanceof Error?P.message:String(P)}`);}}let w=[...m.errors,...b];return A({cardId:g,isValid:w.length===0,issues:w})}function y(g,i){let m=g.params?.sourceIdx,b=g.params?.outRef;if(m===void 0)return R(`${i} requires params.sourceIdx`);if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return R(`${i} requires card JSON object in body`);let I=g.body,w=I["card-content"]??I,x=I["mock-projections"]??{},K=w.source_defs??[];if(m<0||m>=K.length)return R(`sourceIdx ${m} out of range (card has ${K.length} source(s))`);let P=K[m],D=typeof P.bindTo=="string"?P.bindTo:"source";return {src:P,bindTo:D,outRef:b,mockProjections:x}}async function V(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return R("validateCardPreflight requires card JSON object in body");let i=g.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)";return await h(b,m)}catch(i){return _(i)}}async function z(g){try{let i=y(g,"probeSourcePreflight");if("status"in i)return i;let m=c();if(!m)return R("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)}),w=JSON.parse(I.trim());return w.ok?A({bindTo:i.bindTo,reachable:w.reachable,latencyMs:w.latencyMs,note:w.note}):R(w.error??"Preflight probe failed")}catch{return R("Executor does not support probe-source-preflight")}}catch(i){return _(i)}}async function Y(g){try{let i=y(g,"runSourcePreflight");if("status"in i)return i;let m=c();if(!m)return R("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)}),w=JSON.parse(I.trim());if(!w.ok)return A({bindTo:i.bindTo,ok:!1,result:null,issues:[w.error??"Preflight run failed"]});if(i.outRef){let x=b(i.outRef);t.absoluteBlob.write(x.value,JSON.stringify(w.resultValue,null,2));}return A({bindTo:typeof w.bindTo=="string"?w.bindTo:i.bindTo,ok:!0,result:w.resultValue??null,issues:[]})}catch(b){let I=b instanceof Error?b.message:String(b);return A({bindTo:i.bindTo,ok:!1,result:null,issues:[I]})}}catch(i){return _(i)}}async function ee(g){try{let i=c();if(!i)return R("No task-executor registered for this board");let m=await t.invokeExecutor(i,"describe-capabilities",{timeout:t.executorTimeouts?.describeMs??1e4});return A(JSON.parse(m.trim()))}catch(i){return _(i)}}function T(g){try{let i=g.body;if(!i||!Array.isArray(i.ops))return R("updatesInCardStore requires body.ops array");let m=i.ops,b=u();for(let I of m){let w=I.op,x=I.id;if(!x)return R('op is missing "id"');if(w==="update"){let K=I["card-content"];if(!K)return R(`update op for "${x}" is missing "card-content"`);b.writeCard(x,K);}else return R(`Unknown op type: "${w??"(none)"}"`)}return A()}catch(i){return _(i)}}function S(g){try{let i=g.body;if(!i||!Array.isArray(i.ids))return R("readFromCardStore requires body.ids array");let m=i.ids,b=u(),I=m.map(w=>({id:w,"card-content":b.readCard(w)}));return A({cards:I})}catch(i){return _(i)}}function G(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return R("evalCardCompute requires a JSON object in body");let i=g.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)",I=i["mock-fetched-sources"]??{},w=i["mock-requires"]??{},x=m.compute;if(!x||!Array.isArray(x)||x.length===0)return A({cardId:b,ok:!0,computed_values:{},errors:[]});let K={id:b,card_data:m.card_data??{},requires:w,source_defs:m.source_defs,compute:x},P=a$3.runSync(K,{sourcesData:I}),D=P.node.computed_values??{},H=P.errors??[];return A({cardId:b,ok:H.length===0,computed_values:D,errors:H})}catch(i){return _(i)}}async function U(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return R("simulateCardCycle requires a JSON object in body");let i=g.body,m=i["card-content"]??i,b=typeof m.id=="string"?m.id:"(unknown)",I=i["mock-fetched-sources"]??{},w=i["mock-requires"]??{},x=await h(b,m),K=x.status==="success"?{isValid:x.data.isValid,issues:x.data.issues}:{isValid:!1,issues:[x.status==="fail"?x.error:"internal error"]},P=m.source_defs??[],D=m.card_data??{},H=[],ne=[];if(P.length>0){H=a$3.enrichSourcesSync(P,{card_data:D,requires:w});for(let j of H){let re=j.projections,ie=j._projections;if(re&&ie){for(let ge of Object.keys(re))if(ie[ge]===void 0){let be=typeof j.bindTo=="string"?j.bindTo:"(unknown)";ne.push({bindTo:be,key:ge,error:`Projection "${ge}" resolved to undefined`});}}}}let X=[],pe={...I},ae=i["task-executor-ref"],E=(ae?.howToRun&&ae?.whatToRun?ae:void 0)??c();for(let j=0;j<H.length;j++){let re=H[j],ie=typeof re.bindTo=="string"?re.bindTo:`source_${j}`;if(!E){X.push({bindTo:ie,skipped:!0,error:"No task executor configured"});continue}try{let ge={...re},be=await t.invokeExecutor(E,"run-source-preflight",{timeout:re.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(ge)}),ce=JSON.parse(be.trim());ce.ok&&!Object.prototype.hasOwnProperty.call(I,ie)&&Object.prototype.hasOwnProperty.call(ce,"resultValue")&&(pe[ie]=ce.resultValue),X.push({bindTo:ie,reachable:ce.reachable,latencyMs:ce.latencyMs,error:ce.ok?void 0:ce.error});}catch{X.push({bindTo:ie,skipped:!0,error:"Executor does not support run-source-preflight"});}}let v=m.compute,B={},L=[];if(v&&Array.isArray(v)&&v.length>0){let j={id:b,card_data:D,requires:w,source_defs:m.source_defs,compute:v},re=a$3.runSync(j,{sourcesData:pe});B=re.node.computed_values??{},L=re.errors??[];}let te=K.isValid&&ne.length===0&&L.length===0&&X.every(j=>j.reachable!==!1);return A({cardId:b,ok:te,validation:K,source_probes:X,projection_errors:ne,fetched_sources:pe,computed_values:B,compute_errors:L})}catch(i){return _(i)}}return {validateCardPreflight:V,probeSourcePreflight:z,runSourcePreflight:Y,evalCardCompute:G,simulateCardCycle:U,describeTaskExecutorCapabilities:ee,updatesInCardStore:T,readFromCardStore:S}}
|
|
2
|
+
export{kr as a,St as b,Rr as c,mt as d,mr as e,pr as f,gr as g,ht as h,er as i,tr as j,yt as k,He as l,Oe as m,he as n,Tr as o,Ct as p,bt as q,nr as r,wt as s,Be as t,Ge as u,It as v,Ft as w,_t as x,jr as y,Kr as z};//# sourceMappingURL=chunk-ZA4FS27N.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-ZA4FS27N.js.map
|
package/lib/cloud-storage.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var chunk6EJRZHFP_cjs=require('./chunk-6EJRZHFP.cjs'),
|
|
1
|
+
'use strict';var chunk6EJRZHFP_cjs=require('./chunk-6EJRZHFP.cjs'),chunkN5RUH4NG_cjs=require('./chunk-N5RUH4NG.cjs'),chunkWRMOGPRG_cjs=require('./chunk-WRMOGPRG.cjs');require('./chunk-YXKWIPQM.cjs'),require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-UG55PF75.cjs'),require('./chunk-JHXRGPL7.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-5XLFPPTY.cjs'),require('./chunk-2RIHC5TZ.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createAzureBlobStorage",{enumerable:true,get:function(){return chunk6EJRZHFP_cjs.d}});Object.defineProperty(exports,"createAzureQueueStorage",{enumerable:true,get:function(){return chunk6EJRZHFP_cjs.e}});Object.defineProperty(exports,"createCosmosAtomicRelayLock",{enumerable:true,get:function(){return chunk6EJRZHFP_cjs.c}});Object.defineProperty(exports,"createCosmosJournalStorage",{enumerable:true,get:function(){return chunk6EJRZHFP_cjs.b}});Object.defineProperty(exports,"createCosmosKvStorage",{enumerable:true,get:function(){return chunk6EJRZHFP_cjs.a}});Object.defineProperty(exports,"createAsyncBoardLiveCardsPublic",{enumerable:true,get:function(){return chunkN5RUH4NG_cjs.i}});Object.defineProperty(exports,"createAsyncCardStorageAdapter",{enumerable:true,get:function(){return chunkN5RUH4NG_cjs.c}});Object.defineProperty(exports,"createAsyncCardStore",{enumerable:true,get:function(){return chunkN5RUH4NG_cjs.d}});Object.defineProperty(exports,"createAsyncCardStorePublic",{enumerable:true,get:function(){return chunkN5RUH4NG_cjs.g}});Object.defineProperty(exports,"createAsyncJsonStorage",{enumerable:true,get:function(){return chunkN5RUH4NG_cjs.b}});Object.defineProperty(exports,"createAsyncQueueStoragePublic",{enumerable:true,get:function(){return chunkN5RUH4NG_cjs.h}});Object.defineProperty(exports,"createAsyncStateSnapshotAdapter",{enumerable:true,get:function(){return chunkN5RUH4NG_cjs.e}});Object.defineProperty(exports,"createAsyncStorageProvider",{enumerable:true,get:function(){return chunkN5RUH4NG_cjs.f}});Object.defineProperty(exports,"withAsyncRelayLock",{enumerable:true,get:function(){return chunkN5RUH4NG_cjs.a}});Object.defineProperty(exports,"createAsyncBoardConfigStore",{enumerable:true,get:function(){return chunkWRMOGPRG_cjs.b}});Object.defineProperty(exports,"createAsyncBoardWorkerStore",{enumerable:true,get:function(){return chunkWRMOGPRG_cjs.a}});Object.defineProperty(exports,"createHostedAsyncBoardPlatformAdapter",{enumerable:true,get:function(){return chunkWRMOGPRG_cjs.c}});//# sourceMappingURL=cloud-storage.cjs.map
|
|
2
2
|
//# sourceMappingURL=cloud-storage.cjs.map
|
package/lib/cloud-storage.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{d as createAzureBlobStorage,e as createAzureQueueStorage,c as createCosmosAtomicRelayLock,b as createCosmosJournalStorage,a as createCosmosKvStorage}from'./chunk-QLB6PKOT.js';export{i as createAsyncBoardLiveCardsPublic,c as createAsyncCardStorageAdapter,d as createAsyncCardStore,g as createAsyncCardStorePublic,b as createAsyncJsonStorage,h as createAsyncQueueStoragePublic,e as createAsyncStateSnapshotAdapter,f as createAsyncStorageProvider,a as withAsyncRelayLock}from'./chunk-
|
|
1
|
+
export{d as createAzureBlobStorage,e as createAzureQueueStorage,c as createCosmosAtomicRelayLock,b as createCosmosJournalStorage,a as createCosmosKvStorage}from'./chunk-QLB6PKOT.js';export{i as createAsyncBoardLiveCardsPublic,c as createAsyncCardStorageAdapter,d as createAsyncCardStore,g as createAsyncCardStorePublic,b as createAsyncJsonStorage,h as createAsyncQueueStoragePublic,e as createAsyncStateSnapshotAdapter,f as createAsyncStorageProvider,a as withAsyncRelayLock}from'./chunk-BVQISI6G.js';export{b as createAsyncBoardConfigStore,a as createAsyncBoardWorkerStore,c as createHostedAsyncBoardPlatformAdapter}from'./chunk-6MD6FVE3.js';import'./chunk-ZA4FS27N.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-E46UCDYN.js';import'./chunk-M53MX233.js';import'./chunk-MNEOJWPS.js';import'./chunk-7QNEV5S3.js';import'./chunk-UGB7PC4P.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=cloud-storage.js.map
|
|
2
2
|
//# sourceMappingURL=cloud-storage.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkGTHQJXYW_cjs=require('../chunk-GTHQJXYW.cjs'),chunkG4XXRHL2_cjs=require('../chunk-G4XXRHL2.cjs');require('../chunk-LODXIALE.cjs'),require('../chunk-UG55PF75.cjs'),require('../chunk-JHXRGPL7.cjs'),require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createCallbackHandler",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.i}});Object.defineProperty(exports,"createFireAndForgetHandler",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.j}});Object.defineProperty(exports,"createNoopHandler",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.o}});Object.defineProperty(exports,"createProcessHandler",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.l}});Object.defineProperty(exports,"createScriptHandler",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.m}});Object.defineProperty(exports,"createShellHandler",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.k}});Object.defineProperty(exports,"createWebhookHandler",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.n}});Object.defineProperty(exports,"getDownstream",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.e}});Object.defineProperty(exports,"getUnreachableNodes",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.c}});Object.defineProperty(exports,"getUnreachableTokens",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.b}});Object.defineProperty(exports,"getUpstream",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.d}});Object.defineProperty(exports,"inspect",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.a}});Object.defineProperty(exports,"liveCardsToReactiveGraph",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.p}});Object.defineProperty(exports,"mutateGraph",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.h}});Object.defineProperty(exports,"validateLiveGraph",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.f}});Object.defineProperty(exports,"validateReactiveGraph",{enumerable:true,get:function(){return chunkGTHQJXYW_cjs.g}});Object.defineProperty(exports,"MemoryJournal",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.s}});Object.defineProperty(exports,"addNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.d}});Object.defineProperty(exports,"addProvides",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.h}});Object.defineProperty(exports,"addRequires",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.f}});Object.defineProperty(exports,"applyEvent",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.b}});Object.defineProperty(exports,"applyEvents",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.c}});Object.defineProperty(exports,"computeDataHash",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.t}});Object.defineProperty(exports,"createLiveGraph",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.a}});Object.defineProperty(exports,"createReactiveGraph",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.u}});Object.defineProperty(exports,"disableNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.m}});Object.defineProperty(exports,"drainTokens",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.k}});Object.defineProperty(exports,"enableNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.n}});Object.defineProperty(exports,"getNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.o}});Object.defineProperty(exports,"injectTokens",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.j}});Object.defineProperty(exports,"removeNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.e}});Object.defineProperty(exports,"removeProvides",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.i}});Object.defineProperty(exports,"removeRequires",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.g}});Object.defineProperty(exports,"resetNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.l}});Object.defineProperty(exports,"restore",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.q}});Object.defineProperty(exports,"schedule",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.r}});Object.defineProperty(exports,"snapshot",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.p}});//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{i as createCallbackHandler,j as createFireAndForgetHandler,o as createNoopHandler,l as createProcessHandler,m as createScriptHandler,k as createShellHandler,n as createWebhookHandler,e as getDownstream,c as getUnreachableNodes,b as getUnreachableTokens,d as getUpstream,a as inspect,p as liveCardsToReactiveGraph,h as mutateGraph,f as validateLiveGraph,g as validateReactiveGraph}from'../chunk-
|
|
1
|
+
export{i as createCallbackHandler,j as createFireAndForgetHandler,o as createNoopHandler,l as createProcessHandler,m as createScriptHandler,k as createShellHandler,n as createWebhookHandler,e as getDownstream,c as getUnreachableNodes,b as getUnreachableTokens,d as getUpstream,a as inspect,p as liveCardsToReactiveGraph,h as mutateGraph,f as validateLiveGraph,g as validateReactiveGraph}from'../chunk-GLKWEPX6.js';export{s as MemoryJournal,d as addNode,h as addProvides,f as addRequires,b as applyEvent,c as applyEvents,t as computeDataHash,a as createLiveGraph,u as createReactiveGraph,m as disableNode,k as drainTokens,n as enableNode,o as getNode,j as injectTokens,e as removeNode,i as removeProvides,g as removeRequires,l as resetNode,q as restore,r as schedule,p as snapshot}from'../chunk-VGT3TRQG.js';import'../chunk-WDPOGXTY.js';import'../chunk-E46UCDYN.js';import'../chunk-M53MX233.js';import'../chunk-MNEOJWPS.js';import'../chunk-FW4363Y4.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var chunkHFW7E2Z7_cjs=require('../chunk-HFW7E2Z7.cjs'),chunkMCPADH33_cjs=require('../chunk-MCPADH33.cjs');require('../chunk-6EJRZHFP.cjs'),require('../chunk-UIUCNV3X.cjs');var chunkWRMOGPRG_cjs=require('../chunk-WRMOGPRG.cjs');require('../chunk-RP2I3OLA.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-5XLFPPTY.cjs'),require('../chunk-2RIHC5TZ.cjs'),require('../chunk-GNFE24S7.cjs');function j(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function M(e){let r="";for(let n=0;n<e.length;n++)r+=String.fromCharCode(e[n]);return btoa(r)}function U(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 I(e){let r=new TextEncoder().encode(e);return M(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function V(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 I(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 Q(e){try{return chunkVQCIOKJV_cjs.b(e)}catch{return null}}function p(e,r){let n=Q(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 _(e,r){return e.collection("boards").doc(r)}function y(e,r,n){return _(e,r).collection(n)}function b(e){return {kind:"firestore",value:String(e)}}function l(e){return chunkVQCIOKJV_cjs.a(b(e))}function N(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 m(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 i=a.data()??{};return {id:String(i.id??a.id),payload:i.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 w(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"?U(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:M(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 O(e){let r=w(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 P(e,r){let n=_(e,r);return {stream(t){return m(n.collection(`archive-stream-${t}`))},blob(t){return w(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 J(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),i=new Date().toISOString();if(a.exists){let o=a.data()??{};if(o.held===!0&&typeof o.expiresAt=="string"&&o.expiresAt>i)throw Object.assign(new Error("locked"),{code:"locked"})}s.set(e,{held:!0,holderId:n,acquiredAt:i,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 W(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 i=f(),o=new Date().toISOString();return await e.doc(i).set(g({id:i,body:t,dedupKey:s,enqueuedAt:o,attempt:0,staged:false,visibleAfter:o,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:i,body:t,enqueuedAt:o,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(),i=new Date().toISOString();return await e.doc(a).set(g({id:a,body:t,dedupKey:s.dedupKey,enqueuedAt:i,attempt:0,staged:true,visibleAfter:null,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:a,body:t,enqueuedAt:i,attempt:0}},async commitStaged(t){try{return await e.firestore.runTransaction(async s=>{let a=e.doc(t),i=await s.get(a);if(!i.exists)throw new Error("missing");let o=i.data()??{};if(o.dead===!0||o.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 i=e.doc(t),o=await a.get(i);if(!o.exists)throw new Error("missing");let d=o.data()??{};if(d.dead===!0||d.staged!==!0)throw new Error("not-staged");a.update(i,{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)),i=new Date().toISOString(),o=Math.max(s*32,128),d=await e.where("dead","==",false).where("staged","==",false).where("visibleAfter","<=",i).orderBy("visibleAfter").limit(o).get(),h=[];for(let F of d.docs){if(h.length>=s)break;let R=e.doc(F.id);try{let S=null;await e.firestore.runTransaction(async x=>{let T=await x.get(R);if(!T.exists)throw new Error("gone");let u=T.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 L=K(),$=new Date(Date.now()+a).toISOString(),v=Number(u.attempt??0)+1;x.update(R,{leaseToken:L,leaseExpiresAt:$,attempt:v}),S={id:String(u.id??F.id),body:u.body,enqueuedAt:String(u.enqueuedAt??k),attempt:v,leaseToken:L,leaseExpiresAt:$};}),S&&h.push(S);}catch{}}return h},async ack(t,s){try{return await e.firestore.runTransaction(async a=>{let i=e.doc(t),o=await a.get(i);if(!o.exists)return;if((o.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.delete(i);}),!0}catch{return false}},async nack(t,s,a={}){try{return await e.firestore.runTransaction(async i=>{let o=e.doc(t),d=await i.get(o);if(!d.exists)return;if((d.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.dead===!0?i.update(o,{dead:!0,deadReason:a.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):i.update(o,{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 z(e,r,n={}){return chunkWRMOGPRG_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 w(y(e,r,`blobs-${t||"root"}`))},blobStorageForRef(t){return w(e.collection(p(t,`boards/${r}/blobs-root`)))},chatStorageForRef(t){let s=p(t,`boards/${r}/chat`);return chunkMCPADH33_cjs.b(a=>m(e.collection(`${s}-journal-${j(a)}`)),A(e.collection(`${s}-kv`)))},queueStoreRef:N(r).queueStoreRef,queueStorageForRef(t,s){let a=p(t,`boards/${r}/runtime`);return W(e.collection(`${a}-${s}`))},scratchStorage(){return O(y(e,r,"scratch"))},scratchStorageForRef(t){return O(e.collection(p(t,`boards/${r}/scratch`)))},archiveFactory(){return P(e,r)},archiveFactoryForRef(t){let s=Q(t),a=s?.kind==="firestore-board"?s.value:r;return P(e,a)},journalStorage(){return m(y(e,r,"journal"))},journalStorageForRef(t){let s=p(t,`boards/${r}/runtime-board`);return m(e.collection(`${s}-journal`))},lock:J(y(e,r,"locks").doc("board-lock"),{holderId:n.holderId}),hashFn(t){return V(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 Y(e,r,n={}){let t={...N(r),...n.refs??{}},s=z(e,r,n);return {refs:t,boardAdapter:s}}
|
|
1
|
+
'use strict';var chunkHFW7E2Z7_cjs=require('../chunk-HFW7E2Z7.cjs'),chunkMCPADH33_cjs=require('../chunk-MCPADH33.cjs');require('../chunk-6EJRZHFP.cjs'),require('../chunk-N5RUH4NG.cjs');var chunkWRMOGPRG_cjs=require('../chunk-WRMOGPRG.cjs');require('../chunk-YXKWIPQM.cjs'),require('../chunk-7JVHYHT2.cjs');var chunkVQCIOKJV_cjs=require('../chunk-VQCIOKJV.cjs');require('../chunk-G4XXRHL2.cjs'),require('../chunk-LODXIALE.cjs'),require('../chunk-UG55PF75.cjs'),require('../chunk-JHXRGPL7.cjs'),require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-5XLFPPTY.cjs'),require('../chunk-2RIHC5TZ.cjs'),require('../chunk-GNFE24S7.cjs');function j(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function M(e){let r="";for(let n=0;n<e.length;n++)r+=String.fromCharCode(e[n]);return btoa(r)}function U(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 I(e){let r=new TextEncoder().encode(e);return M(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function V(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 I(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 Q(e){try{return chunkVQCIOKJV_cjs.b(e)}catch{return null}}function p(e,r){let n=Q(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 _(e,r){return e.collection("boards").doc(r)}function y(e,r,n){return _(e,r).collection(n)}function b(e){return {kind:"firestore",value:String(e)}}function l(e){return chunkVQCIOKJV_cjs.a(b(e))}function N(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 m(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 i=a.data()??{};return {id:String(i.id??a.id),payload:i.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 w(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"?U(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:M(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 O(e){let r=w(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 P(e,r){let n=_(e,r);return {stream(t){return m(n.collection(`archive-stream-${t}`))},blob(t){return w(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 J(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),i=new Date().toISOString();if(a.exists){let o=a.data()??{};if(o.held===!0&&typeof o.expiresAt=="string"&&o.expiresAt>i)throw Object.assign(new Error("locked"),{code:"locked"})}s.set(e,{held:!0,holderId:n,acquiredAt:i,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 W(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 i=f(),o=new Date().toISOString();return await e.doc(i).set(g({id:i,body:t,dedupKey:s,enqueuedAt:o,attempt:0,staged:false,visibleAfter:o,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:i,body:t,enqueuedAt:o,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(),i=new Date().toISOString();return await e.doc(a).set(g({id:a,body:t,dedupKey:s.dedupKey,enqueuedAt:i,attempt:0,staged:true,visibleAfter:null,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:a,body:t,enqueuedAt:i,attempt:0}},async commitStaged(t){try{return await e.firestore.runTransaction(async s=>{let a=e.doc(t),i=await s.get(a);if(!i.exists)throw new Error("missing");let o=i.data()??{};if(o.dead===!0||o.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 i=e.doc(t),o=await a.get(i);if(!o.exists)throw new Error("missing");let d=o.data()??{};if(d.dead===!0||d.staged!==!0)throw new Error("not-staged");a.update(i,{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)),i=new Date().toISOString(),o=Math.max(s*32,128),d=await e.where("dead","==",false).where("staged","==",false).where("visibleAfter","<=",i).orderBy("visibleAfter").limit(o).get(),h=[];for(let F of d.docs){if(h.length>=s)break;let R=e.doc(F.id);try{let S=null;await e.firestore.runTransaction(async x=>{let T=await x.get(R);if(!T.exists)throw new Error("gone");let u=T.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 L=K(),$=new Date(Date.now()+a).toISOString(),v=Number(u.attempt??0)+1;x.update(R,{leaseToken:L,leaseExpiresAt:$,attempt:v}),S={id:String(u.id??F.id),body:u.body,enqueuedAt:String(u.enqueuedAt??k),attempt:v,leaseToken:L,leaseExpiresAt:$};}),S&&h.push(S);}catch{}}return h},async ack(t,s){try{return await e.firestore.runTransaction(async a=>{let i=e.doc(t),o=await a.get(i);if(!o.exists)return;if((o.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.delete(i);}),!0}catch{return false}},async nack(t,s,a={}){try{return await e.firestore.runTransaction(async i=>{let o=e.doc(t),d=await i.get(o);if(!d.exists)return;if((d.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.dead===!0?i.update(o,{dead:!0,deadReason:a.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):i.update(o,{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 z(e,r,n={}){return chunkWRMOGPRG_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 w(y(e,r,`blobs-${t||"root"}`))},blobStorageForRef(t){return w(e.collection(p(t,`boards/${r}/blobs-root`)))},chatStorageForRef(t){let s=p(t,`boards/${r}/chat`);return chunkMCPADH33_cjs.b(a=>m(e.collection(`${s}-journal-${j(a)}`)),A(e.collection(`${s}-kv`)))},queueStoreRef:N(r).queueStoreRef,queueStorageForRef(t,s){let a=p(t,`boards/${r}/runtime`);return W(e.collection(`${a}-${s}`))},scratchStorage(){return O(y(e,r,"scratch"))},scratchStorageForRef(t){return O(e.collection(p(t,`boards/${r}/scratch`)))},archiveFactory(){return P(e,r)},archiveFactoryForRef(t){let s=Q(t),a=s?.kind==="firestore-board"?s.value:r;return P(e,a)},journalStorage(){return m(y(e,r,"journal"))},journalStorageForRef(t){let s=p(t,`boards/${r}/runtime-board`);return m(e.collection(`${s}-journal`))},lock:J(y(e,r,"locks").doc("board-lock"),{holderId:n.holderId}),hashFn(t){return V(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 Y(e,r,n={}){let t={...N(r),...n.refs??{}},s=z(e,r,n);return {refs:t,boardAdapter:s}}
|
|
2
2
|
exports.createFirestoreArchiveFactory=P;exports.createFirestoreBlobStorage=w;exports.createFirestoreBoardAdapter=z;exports.createFirestoreBoardRefs=N;exports.createFirestoreBoardRuntimeBundle=Y;exports.createFirestoreJournalStorage=m;exports.createFirestoreKvStorage=A;exports.createFirestoreLock=J;exports.createFirestoreQueueStorage=W;exports.createFirestoreScratchStorage=O;exports.makeFirestoreRef=b;exports.serializeFirestoreRef=l;//# sourceMappingURL=index.cjs.map
|
|
3
3
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {a as a$1}from'../chunk-VS3BXEYK.js';import {b as b$1}from'../chunk-Y4WK7HE4.js';import'../chunk-QLB6PKOT.js';import'../chunk-TMS7KDKH.js';import {c as c$1}from'../chunk-6MD6FVE3.js';import'../chunk-VS4E7QFN.js';import'../chunk-ANKA7HEJ.js';import {a,b as b$2}from'../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-7QNEV5S3.js';import'../chunk-UGB7PC4P.js';import'../chunk-FW4363Y4.js';function j(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function M(e){let r="";for(let n=0;n<e.length;n++)r+=String.fromCharCode(e[n]);return btoa(r)}function U(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 I(e){let r=new TextEncoder().encode(e);return M(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function V(e){return a$1(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 I(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 Q(e){try{return b$2(e)}catch{return null}}function p(e,r){let n=Q(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 _(e,r){return e.collection("boards").doc(r)}function y(e,r,n){return _(e,r).collection(n)}function b(e){return {kind:"firestore",value:String(e)}}function l(e){return a(b(e))}function N(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 m(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 i=a.data()??{};return {id:String(i.id??a.id),payload:i.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 w(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"?U(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:M(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 O(e){let r=w(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 P(e,r){let n=_(e,r);return {stream(t){return m(n.collection(`archive-stream-${t}`))},blob(t){return w(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 J(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),i=new Date().toISOString();if(a.exists){let o=a.data()??{};if(o.held===!0&&typeof o.expiresAt=="string"&&o.expiresAt>i)throw Object.assign(new Error("locked"),{code:"locked"})}s.set(e,{held:!0,holderId:n,acquiredAt:i,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 W(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 i=f(),o=new Date().toISOString();return await e.doc(i).set(g({id:i,body:t,dedupKey:s,enqueuedAt:o,attempt:0,staged:false,visibleAfter:o,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:i,body:t,enqueuedAt:o,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(),i=new Date().toISOString();return await e.doc(a).set(g({id:a,body:t,dedupKey:s.dedupKey,enqueuedAt:i,attempt:0,staged:true,visibleAfter:null,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:a,body:t,enqueuedAt:i,attempt:0}},async commitStaged(t){try{return await e.firestore.runTransaction(async s=>{let a=e.doc(t),i=await s.get(a);if(!i.exists)throw new Error("missing");let o=i.data()??{};if(o.dead===!0||o.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 i=e.doc(t),o=await a.get(i);if(!o.exists)throw new Error("missing");let d=o.data()??{};if(d.dead===!0||d.staged!==!0)throw new Error("not-staged");a.update(i,{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)),i=new Date().toISOString(),o=Math.max(s*32,128),d=await e.where("dead","==",false).where("staged","==",false).where("visibleAfter","<=",i).orderBy("visibleAfter").limit(o).get(),h=[];for(let F of d.docs){if(h.length>=s)break;let R=e.doc(F.id);try{let S=null;await e.firestore.runTransaction(async x=>{let T=await x.get(R);if(!T.exists)throw new Error("gone");let u=T.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 L=K(),$=new Date(Date.now()+a).toISOString(),v=Number(u.attempt??0)+1;x.update(R,{leaseToken:L,leaseExpiresAt:$,attempt:v}),S={id:String(u.id??F.id),body:u.body,enqueuedAt:String(u.enqueuedAt??k),attempt:v,leaseToken:L,leaseExpiresAt:$};}),S&&h.push(S);}catch{}}return h},async ack(t,s){try{return await e.firestore.runTransaction(async a=>{let i=e.doc(t),o=await a.get(i);if(!o.exists)return;if((o.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.delete(i);}),!0}catch{return false}},async nack(t,s,a={}){try{return await e.firestore.runTransaction(async i=>{let o=e.doc(t),d=await i.get(o);if(!d.exists)return;if((d.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.dead===!0?i.update(o,{dead:!0,deadReason:a.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):i.update(o,{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 z(e,r,n={}){return c$1({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 w(y(e,r,`blobs-${t||"root"}`))},blobStorageForRef(t){return w(e.collection(p(t,`boards/${r}/blobs-root`)))},chatStorageForRef(t){let s=p(t,`boards/${r}/chat`);return b$1(a=>m(e.collection(`${s}-journal-${j(a)}`)),A(e.collection(`${s}-kv`)))},queueStoreRef:N(r).queueStoreRef,queueStorageForRef(t,s){let a=p(t,`boards/${r}/runtime`);return W(e.collection(`${a}-${s}`))},scratchStorage(){return O(y(e,r,"scratch"))},scratchStorageForRef(t){return O(e.collection(p(t,`boards/${r}/scratch`)))},archiveFactory(){return P(e,r)},archiveFactoryForRef(t){let s=Q(t),a=s?.kind==="firestore-board"?s.value:r;return P(e,a)},journalStorage(){return m(y(e,r,"journal"))},journalStorageForRef(t){let s=p(t,`boards/${r}/runtime-board`);return m(e.collection(`${s}-journal`))},lock:J(y(e,r,"locks").doc("board-lock"),{holderId:n.holderId}),hashFn(t){return V(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 Y(e,r,n={}){let t={...N(r),...n.refs??{}},s=z(e,r,n);return {refs:t,boardAdapter:s}}
|
|
1
|
+
import {a as a$1}from'../chunk-VS3BXEYK.js';import {b as b$1}from'../chunk-Y4WK7HE4.js';import'../chunk-QLB6PKOT.js';import'../chunk-BVQISI6G.js';import {c as c$1}from'../chunk-6MD6FVE3.js';import'../chunk-ZA4FS27N.js';import'../chunk-ANKA7HEJ.js';import {a,b as b$2}from'../chunk-44L64VQ2.js';import'../chunk-VGT3TRQG.js';import'../chunk-WDPOGXTY.js';import'../chunk-E46UCDYN.js';import'../chunk-M53MX233.js';import'../chunk-MNEOJWPS.js';import'../chunk-7QNEV5S3.js';import'../chunk-UGB7PC4P.js';import'../chunk-FW4363Y4.js';function j(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function M(e){let r="";for(let n=0;n<e.length;n++)r+=String.fromCharCode(e[n]);return btoa(r)}function U(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 I(e){let r=new TextEncoder().encode(e);return M(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function V(e){return a$1(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 I(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 Q(e){try{return b$2(e)}catch{return null}}function p(e,r){let n=Q(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 _(e,r){return e.collection("boards").doc(r)}function y(e,r,n){return _(e,r).collection(n)}function b(e){return {kind:"firestore",value:String(e)}}function l(e){return a(b(e))}function N(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 m(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 i=a.data()??{};return {id:String(i.id??a.id),payload:i.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 w(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"?U(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:M(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 O(e){let r=w(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 P(e,r){let n=_(e,r);return {stream(t){return m(n.collection(`archive-stream-${t}`))},blob(t){return w(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 J(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),i=new Date().toISOString();if(a.exists){let o=a.data()??{};if(o.held===!0&&typeof o.expiresAt=="string"&&o.expiresAt>i)throw Object.assign(new Error("locked"),{code:"locked"})}s.set(e,{held:!0,holderId:n,acquiredAt:i,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 W(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 i=f(),o=new Date().toISOString();return await e.doc(i).set(g({id:i,body:t,dedupKey:s,enqueuedAt:o,attempt:0,staged:false,visibleAfter:o,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:i,body:t,enqueuedAt:o,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(),i=new Date().toISOString();return await e.doc(a).set(g({id:a,body:t,dedupKey:s.dedupKey,enqueuedAt:i,attempt:0,staged:true,visibleAfter:null,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null})),{id:a,body:t,enqueuedAt:i,attempt:0}},async commitStaged(t){try{return await e.firestore.runTransaction(async s=>{let a=e.doc(t),i=await s.get(a);if(!i.exists)throw new Error("missing");let o=i.data()??{};if(o.dead===!0||o.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 i=e.doc(t),o=await a.get(i);if(!o.exists)throw new Error("missing");let d=o.data()??{};if(d.dead===!0||d.staged!==!0)throw new Error("not-staged");a.update(i,{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)),i=new Date().toISOString(),o=Math.max(s*32,128),d=await e.where("dead","==",false).where("staged","==",false).where("visibleAfter","<=",i).orderBy("visibleAfter").limit(o).get(),h=[];for(let F of d.docs){if(h.length>=s)break;let R=e.doc(F.id);try{let S=null;await e.firestore.runTransaction(async x=>{let T=await x.get(R);if(!T.exists)throw new Error("gone");let u=T.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 L=K(),$=new Date(Date.now()+a).toISOString(),v=Number(u.attempt??0)+1;x.update(R,{leaseToken:L,leaseExpiresAt:$,attempt:v}),S={id:String(u.id??F.id),body:u.body,enqueuedAt:String(u.enqueuedAt??k),attempt:v,leaseToken:L,leaseExpiresAt:$};}),S&&h.push(S);}catch{}}return h},async ack(t,s){try{return await e.firestore.runTransaction(async a=>{let i=e.doc(t),o=await a.get(i);if(!o.exists)return;if((o.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.delete(i);}),!0}catch{return false}},async nack(t,s,a={}){try{return await e.firestore.runTransaction(async i=>{let o=e.doc(t),d=await i.get(o);if(!d.exists)return;if((d.data()??{}).leaseToken!==s)throw new Error("token mismatch");a.dead===!0?i.update(o,{dead:!0,deadReason:a.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):i.update(o,{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 z(e,r,n={}){return c$1({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 w(y(e,r,`blobs-${t||"root"}`))},blobStorageForRef(t){return w(e.collection(p(t,`boards/${r}/blobs-root`)))},chatStorageForRef(t){let s=p(t,`boards/${r}/chat`);return b$1(a=>m(e.collection(`${s}-journal-${j(a)}`)),A(e.collection(`${s}-kv`)))},queueStoreRef:N(r).queueStoreRef,queueStorageForRef(t,s){let a=p(t,`boards/${r}/runtime`);return W(e.collection(`${a}-${s}`))},scratchStorage(){return O(y(e,r,"scratch"))},scratchStorageForRef(t){return O(e.collection(p(t,`boards/${r}/scratch`)))},archiveFactory(){return P(e,r)},archiveFactoryForRef(t){let s=Q(t),a=s?.kind==="firestore-board"?s.value:r;return P(e,a)},journalStorage(){return m(y(e,r,"journal"))},journalStorageForRef(t){let s=p(t,`boards/${r}/runtime-board`);return m(e.collection(`${s}-journal`))},lock:J(y(e,r,"locks").doc("board-lock"),{holderId:n.holderId}),hashFn(t){return V(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 Y(e,r,n={}){let t={...N(r),...n.refs??{}},s=z(e,r,n);return {refs:t,boardAdapter:s}}
|
|
2
2
|
export{P as createFirestoreArchiveFactory,w as createFirestoreBlobStorage,z as createFirestoreBoardAdapter,N as createFirestoreBoardRefs,Y as createFirestoreBoardRuntimeBundle,m as createFirestoreJournalStorage,A as createFirestoreKvStorage,J as createFirestoreLock,W as createFirestoreQueueStorage,O as createFirestoreScratchStorage,b as makeFirestoreRef,l as serializeFirestoreRef};//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|