yaml-flow 8.11.2 → 8.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/browser/adapters/firestore-storage.js +2 -2
  2. package/browser/adapters/localstorage-storage.js +3 -3
  3. package/browser/asset-integrity.json +5 -5
  4. package/browser/server-runtime-controlface.js +5 -5
  5. package/examples/board/test/server-http-test-browser.ts +8 -0
  6. package/examples/board/test/server-http-test.js +14 -18
  7. package/lib/board-live-cards-node.cjs +2 -2
  8. package/lib/board-live-cards-node.js +2 -2
  9. package/lib/board-live-cards-public.cjs +1 -1
  10. package/lib/board-live-cards-public.js +1 -1
  11. package/lib/board-live-cards-server-runtime.cjs +1 -1
  12. package/lib/board-live-cards-server-runtime.js +1 -1
  13. package/lib/chunk-5VTIOM2U.js +3 -0
  14. package/lib/chunk-BAG7MHZP.cjs +3 -0
  15. package/lib/chunk-EZOXABJ2.js +3 -0
  16. package/lib/chunk-HVLWVMG6.cjs +3 -0
  17. package/lib/chunk-SEUSFOMM.js +3 -0
  18. package/lib/{chunk-42ZOYXEV.cjs → chunk-YQ4MW72D.cjs} +3 -3
  19. package/lib/cloud-storage.cjs +1 -1
  20. package/lib/cloud-storage.js +1 -1
  21. package/lib/firestore-storage/index.cjs +1 -1
  22. package/lib/firestore-storage/index.js +1 -1
  23. package/lib/localstorage-storage/index.cjs +1 -1
  24. package/lib/localstorage-storage/index.js +1 -1
  25. package/lib/server-runtime/index.cjs +1 -1
  26. package/lib/server-runtime/index.js +1 -1
  27. package/lib/server-runtime-controlface/index.cjs +1 -1
  28. package/lib/server-runtime-controlface/index.js +1 -1
  29. package/package.json +1 -1
  30. package/lib/chunk-AHW6EMUO.js +0 -3
  31. package/lib/chunk-EYBDAEVO.cjs +0 -3
  32. package/lib/chunk-HFI2NAZJ.js +0 -3
  33. package/lib/chunk-LDVJPFIW.js +0 -3
  34. package/lib/chunk-ZOZ7ZDGA.cjs +0 -3
@@ -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'),chunkQBEQL4TL_cjs=require('./chunk-QBEQL4TL.cjs'),chunk5XLFPPTY_cjs=require('./chunk-5XLFPPTY.cjs'),chunk2RIHC5TZ_cjs=require('./chunk-2RIHC5TZ.cjs');function St(e){return typeof e=="string"&&e.trim().length>0}function kt(e,t){if(!e||typeof e!="object")throw new Error(`${t}: adapter.selfRef is required`);if(!St(e.howToRun))throw new Error(`${t}: adapter.selfRef.howToRun is required`);if(!St(e.whatToRun))throw new Error(`${t}: adapter.selfRef.whatToRun is required`)}function Rt(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 or(e,t="callbackTransport"){return {createCallback(r){let s=e();return kt(s,t),{token:r,via:s}}}}function Ue(e){return or(()=>e,"createStaticExecutionRefCallbackTransport")}function br(e){return Ue({meta:"board-live-cards",howToRun:"http:post",whatToRun:chunkVQCIOKJV_cjs.a({kind:"http-url",value:String(e||"").trim()})})}function wr(e){return Ue({meta:"board-live-cards",howToRun:"in-process-loop",whatToRun:chunkVQCIOKJV_cjs.a({kind:"in-process-loop",value:String(e||"").trim()})})}function vr(e){let t=typeof e=="string"?{notifyChannel:e}:e??{},r={};return t.notifyChannel&&(r.notifyChannel=t.notifyChannel),t.boardRuntimeStoreRef&&(r.boardRuntimeStoreRef=t.boardRuntimeStoreRef),t.queueStoreRef&&(r.queueStoreRef=t.queueStoreRef),Ue({meta:"board-live-cards",howToRun:"built-in",whatToRun:chunkVQCIOKJV_cjs.a({kind:"built-in",value:"board-live-cards"}),...Object.keys(r).length>0?{extra:r}:{}})}function Oe(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function Ye(e,t){return Oe(e)?e.then(t):t(e)}function yt(e,t){let r={...e};for(let s of t.deleteKeys)delete r[s];return {...r,...t.shallowMerge}}function Tr(e,t){return {readValues(s){let o=e(s);return Ye(o.listKeys(),a=>{let c=[...a].sort();if(c.length===0)return {version:null,values:{}};let d={},S=null;for(let y of c){let V=o.read(y);Oe(V)?S=(S??Promise.resolve()).then(async()=>{d[y]=await V;}):d[y]=V;}return S?S.then(()=>({version:t(d),values:d})):{version:t(d),values:d}})},writeValues(s,o,a){let c=e(s),d=null;for(let S of a){let y=c.delete(S);Oe(y)&&(d=(d??Promise.resolve()).then(()=>y).then(()=>{}));}for(let[S,y]of Object.entries(o)){let V=c.write(S,y);Oe(V)&&(d=(d??Promise.resolve()).then(()=>V).then(()=>{}));}return d?d.then(()=>t(o)):t(o)}}}function Ct(e,t){return {readSnapshot(r){return e.readValues(r)},commitSnapshot(r,s){if(s.schemaVersion!==t)throw new Error(`Unsupported snapshot schema version: ${s.schemaVersion}`);return Ye(e.readValues(r),o=>{if(o.version!==s.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:o.version};let a=yt(o.values,s);return Ye(e.writeValues(r,a,s.deleteKeys),c=>({ok:true,newVersion:c}))})}}}function ht(e,t){if(!t)return e;let r=e.findIndex(s=>s.id===t);return r===-1?e:e.slice(r+1)}function bt(e){return {readEntriesAfterCursor(t){let r=ht(e.readAllEntries(),t);return r.length===0?{events:[],newCursor:t}:{events:r.map(s=>s.event),newCursor:r[r.length-1].id}},pendingCount(t){return ht(e.readAllEntries(),t).length},appendEvent(t){e.appendEntry({id:e.generateId(),event:t});}}}function Er(e){return {appendEvent(t){return e.append(t).then(()=>{})},async readEntriesAfterCursor(t){let r=await e.readAfter(t||null);return {events:r.entries.map(s=>s.payload),newCursor:r.newCursor??t}}}}function Be(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function ce(e,t){return Be(e)?e.then(t):t(e)}function ze(e,t){let r=null;for(let s of e){if(r){r=r.then(()=>t(s)).then(()=>{});continue}let o=t(s);Be(o)&&(r=Promise.resolve(o).then(()=>{}));}return r??void 0}function sr(e){if(e==null)return null;let t=e.trim();if(!t)return null;try{return JSON.parse(t)}catch{return t}}function ar(e,t){let r=e.match(t);return r?r[1]:null}function wt(e,t,r){let s={},o=ze(e,a=>{let c=r(a);if(c)return ce(t(a),d=>{s[c]=d;})});return Be(o)?o.then(()=>s):s}function vt(e,t){return {readSourceData(r,s){return ce(e.read(`${r}/${s}`),sr)},ingestSourceDataStaged(r,s,o,a){return ce(t(o),c=>e.write(`${r}/.staged/${a}/${s}`,c))},commitSourceData(r,s,o){let a=`${r}/.staged/${o}/${s}`,c=`${r}/${s}`;return e.renameKey(a,c)},hasSource(r,s){return e.exists(`${r}/${s}`)},listSources(r){return ce(e.listKeys(`${r}/`),s=>s.filter(o=>!o.includes("/.staged/")).map(o=>o.slice(`${r}/`.length)))}}}function ir(e,t){let r=(s,o)=>{try{let a=o(s);return Be(a)?a.catch(c=>t(s,c instanceof Error?c.message:String(c))):void 0}catch(a){try{return t(s,a instanceof Error?a.message:String(a))}catch{return}}};return {appendEntries(s,o){if(!(!s||o.length===0))return ce(e.read(s),a=>e.write(s,[...a??[],...o]))},dispatchEntriesForJournalId(s,o){if(s)return ce(e.read(s),a=>{let c=a;if(!(!c||c.length===0))return ce(ze(c,d=>r(d,o)),()=>e.delete(s))})}}}function ur(e,t,r){return {readRuntime(s){return ce(e.read(t(s)),o=>o??r())},writeRuntime(s,o){return e.write(t(s),o)}}}function xt(e){return {writeComputedValues(t,r){return e.write(`cards/${t}/computed_values`,r)},readComputedValues(t){return e.read(`cards/${t}/computed_values`)},readAllComputedValues(){return ce(e.listKeys("cards/"),t=>wt(t,r=>e.read(r),r=>ar(r,/^cards\/([^/]+)\/computed_values$/)))},writeDataObjects(t){return ze(Object.entries(t),([r,s])=>{if(r)return s===void 0?e.delete(`data-objects/${r}`):e.write(`data-objects/${r}`,s)})},readDataObject(t){return e.read(`data-objects/${t}`)},readAllDataObjects(){return ce(e.listKeys("data-objects/"),t=>wt(t,r=>e.read(r),r=>r.slice(13)))},writeStatusSnapshot(t){return e.write("status",t)},readStatusSnapshot(){return e.read("status")}}}var fe="sys_keys_board_state",ae="__sys_keys_board_state_init";function It(e){if(!e||typeof e!="object"||Array.isArray(e))return false;let t=e.__private;return !!t&&typeof t=="object"&&!Array.isArray(t)&&t.visible_controlplane_only===true}function dr(e){let t=e.filter(o=>!It(o)),r=[...new Set(t.map(o=>o.id).filter(o=>typeof o=="string"&&o.length>0))].sort(),s=[...new Set(t.flatMap(o=>Array.isArray(o.provides)?o.provides:[]).map(o=>o&&typeof o=="object"&&!Array.isArray(o)?o.bindTo:void 0).filter(o=>typeof o=="string"&&o.length>0&&o!==fe))].sort();return {card_ids:r,data_object_keys:s}}function cr(e,t){let r=e.filter(a=>!It(a)),s=[...new Set(r.map(a=>a.id).filter(a=>typeof a=="string"&&a.length>0))].sort(),o=[...new Set(Object.entries(t).filter(([a])=>a!==ae).flatMap(([,a])=>Array.isArray(a.provides)?a.provides:[]).filter(a=>typeof a=="string"&&a.length>0&&a!==fe))].sort();return {card_ids:s,data_object_keys:o}}function Pe(){return {id:ae,meta:{title:"System Keys Board State",synthetic:true},provides:[{bindTo:fe,ref:`card_data.${fe}`}],card_data:{[fe]:{card_ids:[],data_object_keys:[]}},__private:{visible_controlplane_only:true}}}function Qe(e,t){function r(){return e.readIndex()??{}}function s(o,a,c){let d=String(a||"").split(".").filter(Boolean);if(d.length===0)return c&&typeof c=="object"&&!Array.isArray(c)?c:{value:c};let S={...o},y=S;for(let V=0;V<d.length-1;V++){let z=d[V],Q=y[z],te=Q&&typeof Q=="object"&&!Array.isArray(Q)?{...Q}:{};y[z]=te,y=te;}return y[d[d.length-1]]=c,S}return {readCard(o){let a=r()[o];return !a||!e.cardExists(a.key)?null:e.readCard(a.key)},readCardKey(o){return r()[o]?.key??null},readAllCards(){let o=[];for(let[a,c]of Object.entries(r())){if(!e.cardExists(c.key))continue;let d=e.readCard(c.key);d?o.push(d):t?.(`[card-store] could not read card "${a}" at key "${c.key}"`);}return o},readChecksumIndex(){let o={};for(let[a,c]of Object.entries(r()))o[a]=c.checksum;return o},changedSince(o){let a=r(),c=[];for(let[d,S]of Object.entries(a))o[d]!==S.checksum&&c.push(d);for(let d of Object.keys(o))a[d]||c.push(d);return c},validateUpsert(o,a){let c=r(),d=c[o],S=Object.entries(c).find(([,y])=>y.key===a);return d&&d.key!==a?{ok:false,error:`Card id "${o}" is already mapped to key "${d.key}", cannot remap to "${a}"`}:S&&S[0]!==o?{ok:false,error:`Key "${a}" is already mapped to card id "${S[0]}", cannot remap to "${o}"`}:{ok:true}},writeCard(o,a,c){let d=r(),S=c??d[o]?.key??e.defaultCardKey(o),y=e.writeCard(S,a);d[o]={key:S,checksum:y,updatedAt:new Date().toISOString()},e.writeIndex(d);},patchCard(o,a,c){let d=r(),S=d[o];if(!S||!e.cardExists(S.key))throw new Error(`card "${o}" not found`);let y=e.readCard(S.key);if(!y||typeof y!="object"||Array.isArray(y))throw new Error(`card "${o}" is not patchable`);let V=s(y,a,c),z=e.writeCard(S.key,V);d[o]={key:S.key,checksum:z,updatedAt:new Date().toISOString()},e.writeIndex(d);},removeCard(o){let a=r(),c=a[o];c&&(e.removeCard(c.key),delete a[o],e.writeIndex(a));},readIndex(){return r()}}}function qe(e,t){return vt(e,t)}function _t(e){return bt(e)}var Ve="v1",ye="board/graph",Ft="board/lastJournalProcessedId";function Vr(e){return `cards/${e}/runtime`}function Ot(e){return Ct(e,Ve)}function je(e){function t(r){let s=e.read(r);return s==null?null:typeof s=="string"?s:JSON.stringify(s)}return {readTaskExecutorRef(){let r=t("task-executor");if(r?.trim())return chunk7JVHYHT2_cjs.c(r.trim())},writeTaskExecutorRef(r){e.write("task-executor",chunk7JVHYHT2_cjs.b(r));},readChatHandlerFlow(){return e.read("chat-handler-flow")},writeChatHandlerFlow(r){e.write("chat-handler-flow",r);},readBoardRuntimeStoreRef(){return t("board-runtime-store-ref")},writeBoardRuntimeStoreRef(r){e.write("board-runtime-store-ref",r);},readCardStoreRef(){return t("card-store-ref")},writeCardStoreRef(r){e.write("card-store-ref",r);},readOutputsStoreRef(){return t("outputs-store-ref")},writeOutputsStoreRef(r){e.write("outputs-store-ref",r);},readQueueStoreRef(){return t("queue-store-ref")},writeQueueStoreRef(r){e.write("queue-store-ref",r);},readScratchStoreRef(){return t("scratch-store-ref")},writeScratchStoreRef(r){e.write("scratch-store-ref",r);},readChatStoreRef(){return t("chat-store-ref")},writeChatStoreRef(r){e.write("chat-store-ref",r);},readArtifactsStoreRef(){return t("artifacts-store-ref")},writeArtifactsStoreRef(r){e.write("artifacts-store-ref",r);},readFetchedSourcesStoreRef(){return t("fetched-sources-store-ref")},writeFetchedSourcesStoreRef(r){e.write("fetched-sources-store-ref",r);}}}function Bt(e){return xt(e)}function Tt(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function lr(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function Et(e,t){return e?.lastRequestedToken?lr(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<t?"dispatch":"idle":"dispatch"}function fr(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"success"}}function At(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"failure"}}function Ke(e){let t=e.cards.filter(d=>d.name!==ae);if(t.length===e.cards.length)return e;let r=new Set;for(let d of t)for(let S of d.requires)r.add(S);let s=t.map(d=>({name:d.name,fanOut:d.unblocks.length})).sort((d,S)=>S.fanOut-d.fanOut||d.name.localeCompare(S.name)),o=s.length>0?s[0]:{name:null,fanOut:0},a=d=>t.filter(S=>S.status===d).length,c=t.filter(d=>d.requires.length===0&&d.unblocks.length===0).length;return {...e,summary:{...e.summary,card_count:t.length,completed:a("completed"),eligible:a("eligible"),pending:a("pending"),blocked:a("blocked"),unresolved:a("unresolved"),failed:a("failed"),in_progress:a("in-progress"),orphan_cards:c,topology:{edge_count:r.size,max_fan_out_card:o.name,max_fan_out:o.fanOut}},cards:t}}function Pt(e){let{[fe]:t,...r}=e;return r}function De(e,t){let r=t.state.tasks,s=t.config.tasks,o=Object.keys(r),a=chunkG4XXRHL2_cjs.r(t),c={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},d=new Map;for(let A of a.pending)d.set(A.taskName,A.waitingOn);for(let A of a.unresolved)d.set(A.taskName,A.missingTokens);for(let A of a.blocked)d.set(A.taskName,A.failedTokens);let S=new Map;for(let[A,k]of Object.entries(s))for(let H of k.requires??[]){let G=S.get(H)??[];G.push(A),S.set(H,G);}let y=o.sort().map(A=>{let k=r[A],H=s[A]??{requires:[],provides:[]};k.status==="completed"?c.completed+=1:k.status==="failed"?c.failed+=1:k.status==="in-progress"&&(c.in_progress+=1);let G=H.requires??[],g=H.provides??[],u=Object.keys(k.data??{}).sort(),p=G.filter(P=>t.state.availableOutputs.includes(P)),v=G.filter(P=>!t.state.availableOutputs.includes(P)),I=d.get(A)??v,T=new Set;for(let P of g)for(let L of S.get(P)??[])L!==A&&T.add(L);let x=k.failedAt,D=k.error?{message:k.error,code:"TASK_FAILED",at:x,source:"task-runtime"}:void 0;return {name:A,status:k.status,error:D,requires:G,requires_satisfied:p,requires_missing:v,provides_declared:g,provides_runtime:u,blocked_by:I,unblocks:Array.from(T).sort(),runtime:{attempt_count:k.executionCount??0,restart_count:k.retryCount??0,in_progress_since:k.status==="in-progress"?k.startedAt??null:null,last_transition_at:k.lastUpdated??null,last_completed_at:k.completedAt??null,last_restarted_at:k.startedAt??null,status_age_ms:k.lastUpdated?0:null}}});c.pending=a.pending.length,c.blocked=a.blocked.length,c.unresolved=a.unresolved.length;let V=y.map(A=>({name:A.name,fanOut:A.unblocks.length})).sort((A,k)=>k.fanOut-A.fanOut||A.name.localeCompare(k.name)),z=V.length>0?V[0]:{name:null,fanOut:0},Q=new Set;for(let A of Object.values(s))for(let k of A.requires??[])Q.add(k);let te=0;for(let[A,k]of Object.entries(s)){let H=(k.requires??[]).length===0,g=(k.provides??[]).some(u=>(S.get(u)??[]).some(p=>p!==A));H&&!g&&(te+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:o.length,completed:c.completed,eligible:a.eligible.length,pending:c.pending,blocked:c.blocked,unresolved:c.unresolved,failed:c.failed,in_progress:c.in_progress,orphan_cards:te,topology:{edge_count:Array.from(Q).length,max_fan_out_card:z.name,max_fan_out:z.fanOut}},cards:y}}function mr(){return new Date().toISOString()}function qt(e,t,r,s,o,a,c){return async d=>{let S=[],y=r.cardStore.readCard(d.nodeId);if(!y)return "task-initiate-failure";let V=y.id;if(V===ae){let C=r.activeTaskConfigs?.(),b={[fe]:C?cr(Object.keys(C).filter(_=>_!==ae).map(_=>r.cardStore.readCard(_)).filter(_=>!!_),C):dr(r.cardStore.readAllCards())};return (c??r.outputStore.writeDataObjects.bind(r.outputStore))(b),s(d.nodeId,b),"task-initiated"}let z=y.card_data??{},Q=y.source_defs??[],te=Q,A=r.cardRuntimeStore.readRuntime(V),k=false,H=()=>{k&&(r.cardRuntimeStore.writeRuntime(V,A),k=false);},G=C=>Tt(A._sources[C]),g=(C,b)=>{A._sources[C]=Tt(b),k=true;},u=d.taskState?.executionCount??0;if(A._lastExecutionCount!==u&&(A._sources={},A._lastExecutionCount=u,k=true),d.update){let C=d.update,b=C.outputFile;if(b){let _=G(b);if(C.failure){let $=C.rqt??_.lastRequestedToken??_.queueRequestedToken;$&&g(b,At(_,$));}else {let $=C.rqt;if(!_.lastCompletedToken||$>_.lastCompletedToken){let re=typeof C.deliveryToken=="string"?C.deliveryToken:void 0,K=false;re&&(K=r.fetchedSourcesStore.commitSourceData(V,b,re)),K?g(b,fr(_,$)):g(b,At(_,$));}}H();}}let v={};for(let C of Q)if(C.outputFile){let b=r.fetchedSourcesStore.readSourceData(V,C.outputFile);b!==null&&(v[C.bindTo]=b);}let I={};for(let[C,b]of Object.entries(d.state??{}))if(b!==null&&typeof b=="object"&&!Array.isArray(b)){let _=b[C];I[C]=_!==void 0?_:b;}else I[C]=b;let T={id:V,card_data:{...z},requires:I,source_defs:Q,compute:y.compute};T._sourcesData=v,y.compute&&chunkQBEQL4TL_cjs.a.runSync(T,{sourcesData:v}),(a??r.outputStore.writeComputedValues.bind(r.outputStore))(V,T.computed_values??{});let x={...y},D=chunkQBEQL4TL_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(D)?D.map(C=>({...C,boardDir:typeof C.boardDir=="string"&&C.boardDir?C.boardDir:P})):D;let L=mr(),M=d.update?void 0:L,oe=te.filter(C=>{let b=C.outputFile;if(typeof b!="string"||!b)return true;let _=G(b);M&&(_={..._,queueRequestedToken:M},g(b,_));let $=_.queueRequestedToken??_.lastRequestedToken??L,re=Et(_,$);return re==="in-flight"?false:re==="dispatch"});if(H(),oe.length>0){let C=false,b=L;for(let _ of oe){let $=_.outputFile;if(typeof $!="string"||!$)continue;let re=G($),K=re.queueRequestedToken??L;g($,{...re,lastRequestedToken:K}),b=K,C=true;}return C&&H(),C&&(S.push({taskKind:"source-fetch",payload:{boardRef:chunkVQCIOKJV_cjs.a(e),enrichedCard:x,callbackToken:d.callbackToken,rqt:b}}),r.executionRequestStore.appendEntries(t,S)),"task-initiated"}if(te.some(C=>{let b=C.outputFile;if(typeof b!="string"||!b)return false;let _=G(b),$=_.queueRequestedToken??_.lastRequestedToken??L;return Et(_,$)==="in-flight"}))return "task-initiated";let ge=y.provides??[],ie={};for(let{bindTo:C,ref:b}of ge)ie[C]=chunkQBEQL4TL_cjs.a.resolve(T,b);return (c??r.outputStore.writeDataObjects.bind(r.outputStore))(ie),s(d.nodeId,ie),S.length>0&&r.executionRequestStore.appendEntries(t,S),"task-initiated"}}var Xe={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function Vt(e){return {[ye]:e.graph,[Ft]:e.lastDrainedJournalId,board:{runtimeByCardId:e.runtimeByCardId}}}function jt(e){let t=e[ye],r=e[Ft],o=e.board?.runtimeByCardId;if(!t||typeof t!="object")throw new Error(`State snapshot is missing required key: ${ye}`);return {graph:t,lastDrainedJournalId:typeof r=="string"?r:"",runtimeByCardId:o&&typeof o=="object"?o:{}}}function Kt(e){let t=e.requires;return {provides:e.provides?.map(s=>s.bindTo)??[],taskHandlers:["card-handler"],description:e.meta?.title??e.id,...t&&t.length>0?{requires:t}:{}}}function E(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function h(e){return {status:"fail",error:e}}function F(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function pr(e){let t=new TextEncoder().encode(e),r=Array.from(t,s=>String.fromCharCode(s)).join("");return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Lt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),s=atob(r),o=Uint8Array.from(s,a=>a.charCodeAt(0));return new TextDecoder().decode(o)}function Ne(e){try{let t=JSON.parse(Lt(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function Dt(e){return pr(JSON.stringify(e))}function Nt(e){try{let t=JSON.parse(Lt(e));return typeof t?.cbk=="string"&&typeof t?.cid=="string"&&typeof t?.b=="string"&&typeof t?.d=="string"?t:null}catch{return null}}function W(){return new Date().toISOString()}function gr(e){let t=new Map;return {appendEntries(r,s){if(!r||s.length===0)return;let o=t.get(r)??[];t.set(r,[...o,...s]);},dispatchEntriesForJournalId(r,s){if(!r)return;let o=t.get(r);if(!(!o||o.length===0)){for(let a of o)try{s(a);}catch(c){try{e(a,c instanceof Error?c.message:String(c));}catch{}}t.delete(r);}}}}function Gr(e,t,r={}){Rt(t.callbackTransport,"createBoardLiveCardsPublic");let s=t.callbackTransport,o=t.onWarn??(()=>{}),a=chunkVQCIOKJV_cjs.a(e),c=r.boardRuntimeStoreRef,d=r.scratchStoreRef,S=r.taskExecutorRef,y=r.chatHandlerFlow,V=r.emitNotification??(i=>{if(!t.publishBoardChangeNotifications)return;let n=i.kind==="notification-batch"?i.notifications:[i];return t.publishBoardChangeNotifications(n)});function z(){if(!c)throw new Error(`Board at ${e.value} has no board runtime store configured. Pass boardRuntimeStoreRef at construction or init.`);return c}function Q(i){if(i.length!==0)try{let n=chunk2RIHC5TZ_cjs.e(i),l=chunk2RIHC5TZ_cjs.f({kind:"notification-batch",notifications:n}),m=V(l);m&&typeof m.catch=="function"&&m.catch(w=>o(`[board-live-cards-public] emitNotification failed: ${w instanceof Error?w.message:String(w)}`));}catch(n){o(`[board-live-cards-public] emitNotification failed: ${n instanceof Error?n.message:String(n)}`);}}function te(){let i=k().readCardStoreRef();if(!i)throw new Error(`Board at ${e.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let n=t.kvStorageForRef(i);return {readIndex(){return n.read("_index")},writeIndex(l){n.write("_index",l);},readCard(l){return n.read(l)},writeCard(l,m){return n.write(l,m),t.hashFn(m)},removeCard(l){n.delete(l);},cardExists(l){return n.read(l)!==null},defaultCardKey(l){return l}}}let A={readValues(i){let n=t.kvStorageForRef(z()),l=n.listKeys().sort();if(l.length===0)return {version:null,values:{}};let m={};for(let w of l)m[w]=n.read(w);return {version:t.hashFn(m),values:m}},writeValues(i,n,l){let m=t.kvStorageForRef(z());for(let w of l)m.delete(w);for(let[w,j]of Object.entries(n))m.write(w,j);return t.hashFn(n)}},k=()=>je(t.kvStorageForRef(z())),H=()=>Ot(A),G=()=>_t(t.journalAdapterForRef(z())),g=()=>Qe(te(),o),u=()=>{let i=k().readOutputsStoreRef();if(!i)throw new Error(`Board at ${e.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return Bt(t.kvStorageForRef(i))};function p(){return S??k().readTaskExecutorRef()}function v(){return !!H().readSnapshot(e.value).values[ye]}function I(){let i=H().readSnapshot(e.value);if(!i.values[ye])throw new Error(`Board not initialized at ${e.value}`);return jt(i.values)}function T(i,n){let l=H().commitSnapshot(e.value,{schemaVersion:Ve,expectedVersion:n,commitId:t.genId(),committedAt:W(),deleteKeys:[],shallowMerge:Vt(i)});if(!l.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${n??"null"} current=${l.currentVersion??"null"}`)}function x(i){G().appendEvent(i);}async function D(){let n=gr((f,R)=>{let B=f.payload,N=(B?.enrichedCard??{}).id??B?.cardId??"unknown";x({type:"task-failed",taskName:N,error:R,timestamp:W()});}),l=I(),m=chunkG4XXRHL2_cjs.q(l.graph),{events:w,newCursor:j}=G().readEntriesAfterCursor(l.lastDrainedJournalId),O=K(),q=qe(O,f=>t.resolveBlob(f)),J={...l.runtimeByCardId},X=new Map,ke={readRuntime(f){return X.get(f)??J[f]??{_sources:{}}},writeRuntime(f,R){X.set(f,R),J[f]=R;}},Re=[],ne=new Map,Ce={readSourceData(f,R){let B=`${f}/${R}`;return ne.has(B)?ne.get(B):q.readSourceData(f,R)},ingestSourceDataStaged(f,R,B,de){q.ingestSourceDataStaged(f,R,B,de);},commitSourceData(f,R,B){let de=`${f}/.staged/${B}/${R}`,N=O.read(de);if(N==null){let Y=O.keyRef?.(de);Y&&(N=t.resolveBlob(Y));}if(N==null)return false;let se=`${f}/${R}`,me=N.trim();try{ne.set(se,JSON.parse(me));}catch{ne.set(se,me);}return Re.push({cardId:f,outputFile:R,deliveryToken:B}),true},hasSource(f,R){let B=`${f}/${R}`;return ne.has(B)?true:q.hasSource(f,R)},listSources(f){let R=q.listSources(f),B=new Set;for(let N of ne.keys())N.startsWith(`${f}/`)&&B.add(N.slice(`${f}/`.length));let de=new Set([...R,...B]);return Array.from(de)}},xe=()=>m.config.tasks,he={cardStore:g(),cardRuntimeStore:ke,fetchedSourcesStore:Ce,outputStore:u(),executionRequestStore:n,activeTaskConfigs:()=>xe()},Te=[],Le=[],$e=[],Je=new Map,rt=new Set,tr=(f,R)=>{Te.push({type:"task-completed",taskName:f,data:R,timestamp:W()});},Me=(f,R)=>{x({type:"task-failed",taskName:f,error:R,timestamp:W()});},Ee=chunkG4XXRHL2_cjs.u(m,{handlers:{"card-handler":qt(e,j,he,tr,Me,(f,R)=>{Le.push({cardId:f,values:R});},f=>{$e.push(f);})},onNodeRemoved:f=>{Je.delete(f),X.delete(f),delete J[f],rt.add(f);}});for(xe=()=>Ee.getState().config.tasks,Te=w;Te.length>0;){let f=Te;Te=[];for(let R of f)if(R.type==="task-restart"){let B=he.cardStore.readCard(R.taskName);B&&Je.set(R.taskName,B);}Ee.pushAll(f),await Ee.waitForHandlers();}let nt=Ee.getState();await Ee.dispose({wait:true});let rr=H().readSnapshot(e.value).version;T({lastDrainedJournalId:j,graph:chunkG4XXRHL2_cjs.p(nt),runtimeByCardId:J},rr);for(let{cardId:f,values:R}of Le)he.outputStore.writeComputedValues(f,R);for(let f of $e)he.outputStore.writeDataObjects(f);for(let{cardId:f,outputFile:R,deliveryToken:B}of Re)q.commitSourceData(f,R,B);let Ae;try{Ae=Ke(De(a,nt)),he.outputStore.writeStatusSnapshot(Ae);}catch(f){o(`[board-live-cards-public] status publish failed: ${f instanceof Error?f.message:String(f)}`);}let be=[];for(let{cardId:f,values:R}of Le)be.push({kind:"computed_values",cardId:f,values:R});for(let f of $e)for(let[R,B]of Object.entries(f))R&&be.push({kind:"data_object",key:R,payload:B});for(let[f,R]of Je)be.push({kind:"card_refreshed",cardId:f,card:R});for(let f of rt)be.push({kind:"card_removed",cardId:f});Ae!==void 0&&be.push({kind:"status",status:Ae}),Q(be);let we=p()??{howToRun:"built-in",whatToRun:chunkVQCIOKJV_cjs.a({kind:"built-in",value:"source-cli-task-executor"})},ot=t.supportsDirectSourceOutput?.(we)===true;n.dispatchEntriesForJournalId(j,f=>{if(f.taskKind!=="source-fetch"){o(`[process-accumulated-events] unknown taskKind "${f.taskKind}" \u2014 skipping`);return}let R=f.payload,B=R.enrichedCard?.id??"unknown",de=R.enrichedCard?.source_defs??[];if(we.howToRun==="queue-storage"&&ot){try{let N=t.queueStorageForRef(P(),"task-executor"),se=typeof we.extra?.boardId=="string"?we.extra.boardId:void 0,me=[];for(let Y of de){if(!Y.outputFile){o(`[dispatch] source "${Y.bindTo}" has no outputFile \u2014 skipping`);continue}let Ie=t.genId(),_e=`${B}/.staged/${Ie}/${Y.outputFile}`,st=O.keyRef?.(_e);if(!st)continue;let at={ref:chunkVQCIOKJV_cjs.a(st),deliveryToken:Ie,outputFile:Y.outputFile,cardId:B},nr=Dt({cbk:R.callbackToken,rg:e.value,br:chunkVQCIOKJV_cjs.a(e),cid:B,b:Y.bindTo,d:Y.outputFile,cs:void 0,rqt:R.rqt,dt:at.deliveryToken});me.push({...se?{boardId:se}:{},ref:we,args:{source_def:Y,base_ref:chunkVQCIOKJV_cjs.a(e),callback:s.createCallback(nr),output:at}});}me.length>0&&N.enqueueMany(me);}catch(N){Me(B,N instanceof Error?N.message:String(N));}return}for(let N of de){if(!N.outputFile){o(`[dispatch] source "${N.bindTo}" has no outputFile \u2014 skipping`);continue}let se;if(ot){let Y=t.genId(),Ie=`${B}/.staged/${Y}/${N.outputFile}`,_e=O.keyRef?.(Ie);_e&&(se={ref:chunkVQCIOKJV_cjs.a(_e),deliveryToken:Y,outputFile:N.outputFile,cardId:B});}let me=Dt({cbk:R.callbackToken,rg:e.value,br:chunkVQCIOKJV_cjs.a(e),cid:B,b:N.bindTo,d:N.outputFile,cs:void 0,rqt:R.rqt,...se?{dt:se.deliveryToken}:{}});t.dispatchExecution(we,{source_def:N,base_ref:chunkVQCIOKJV_cjs.a(e),callback:s.createCallback(me),...se?{output:se}:{}}).catch(Y=>Me(B,Y instanceof Error?Y.message:String(Y)));}});}function P(){let i=k().readQueueStoreRef();if(!i)throw new Error(`Board at ${e.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);return i}function L(){t.queueStorageForRef(P(),"process-accumulated").enqueue({boardRef:chunkVQCIOKJV_cjs.a(e)}),t.requestProcessAccumulated?.();}function M(){let i=t.queueStorageForRef(P(),"process-accumulated");for(;;){let n=i.lease({max:64,visibilityMs:1e3});if(n.length<=0)return;for(let l of n)i.ack(l.id,l.leaseToken);if(n.length<64)return}}async function oe(){try{let i=()=>{let l=I(),{events:m}=G().readEntriesAfterCursor(l.lastDrainedJournalId);m.length<=0||L();},n=await chunkVQCIOKJV_cjs.c(t.lock,D,i);return E({ran:n!==!1})}catch(i){return F(i)}}function Z(){L();}function ge(i){try{let n=i.params?.cardStoreRef;if(!n)return h("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(c=i.params?.boardRuntimeStoreRef,!c)return h("init requires params.boardRuntimeStoreRef \u2014 pass the board runtime store ref here");if(!v()){let X=chunkG4XXRHL2_cjs.a(Xe);T({lastDrainedJournalId:"",graph:chunkG4XXRHL2_cjs.p(X),runtimeByCardId:{}},null);}let l=i.params?.outputsStoreRef;if(!l)return h("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let m=i.params?.queueStoreRef;if(!m)return h("init requires params.queueStoreRef \u2014 pass the queue store ref here");let w=i.params?.fetchedSourcesStoreRef;if(!w)return h("init requires params.fetchedSourcesStoreRef \u2014 pass the fetched sources store ref here");d=i.params?.scratchStoreRef;let j=i.params?.chatStoreRef;if(!j)return h("init requires params.chatStoreRef \u2014 pass the chat store ref here");let O=i.params?.artifactsStoreRef;if(!O)return h("init requires params.artifactsStoreRef \u2014 pass the artifacts store ref here");let q=k();q.writeBoardRuntimeStoreRef(c),q.writeCardStoreRef(n),q.writeOutputsStoreRef(l),q.writeQueueStoreRef(m),q.writeFetchedSourcesStoreRef(w),q.writeChatStoreRef(j),q.writeArtifactsStoreRef(O),g().writeCard(Pe().id,Pe());let J=ee({params:{cardId:Pe().id,restart:!0}});if(J.status!=="success")return J;try{u().writeStatusSnapshot(Ke(De(a,chunkG4XXRHL2_cjs.q(I().graph))));}catch{}return E()}catch(n){return F(n)}}function ie(i){try{let n=u().readStatusSnapshot();if(!n){n=Ke(De(a,chunkG4XXRHL2_cjs.q(I().graph)));try{u().writeStatusSnapshot(n);}catch{}}return E(n)}catch(n){return F(n)}}function C(i){try{let n=i.params?.id;if(!n)return h("removeCard requires params.id");try{t.kvStorage("card-upsert").delete(n);}catch{}return x({type:"task-removal",taskName:n,timestamp:W()}),n!==ae&&x({type:"task-restart",taskName:ae,timestamp:W()}),Z(),E()}catch(n){return F(n)}}function b(i){try{let n=i.params?.cardId;if(!n)return h("addCardFiles requires params.cardId");let l=chunk5XLFPPTY_cjs.a(g(),{emitNotification:V}).appendFiles({params:{id:n},body:i.body});return l.status!=="success"?l:E({cardId:n,files_added:l.data.files_added,notified:!0})}catch(n){return F(n)}}function _(i){try{let n=i.params?.id;return n?(x({type:"task-restart",taskName:n,timestamp:W()}),Z(),E()):h("retrigger requires params.id")}catch(n){return F(n)}}async function $(i){return M(),oe()}function re(){let i=k().readFetchedSourcesStoreRef();if(!i)throw new Error(`Board at ${e.value} has no fetched sources store configured. Run: init --fetched-sources-store-ref <b64-ref>`);return i}function K(){return t.blobStorageForRef(re())}function ee(i){try{let n=i.params?.cardId,l=i.params?.all,m=!!i.params?.restart;if(!n&&!l)return h("upsertCard requires --card-id <id> or --all");let w=l?g().readAllCards().map(O=>O.id):[n];for(let O of w)if(!g().readCard(O))return h(`Card "${O}" not found in board at ${e.value}`);let j=!1;for(let O of w){let q=g().readCard(O),J=Kt(q),X=t.hashFn(J),ke=t.kvStorage("card-upsert"),Re=ke.read(O),ne=Re?.taskConfigHash!==X;if(!(!ne&&!m)){if(ne){let Ce=Re?.blobRef??g().readCardKey(O)??O;x({type:"task-upsert",taskName:O,taskConfig:J,timestamp:W()}),ke.write(O,{blobRef:Ce,taskConfigHash:X,updatedAt:W()}),j=j||O!==ae;}m&&x({type:"task-restart",taskName:O,timestamp:W()});}}return j&&x({type:"task-restart",taskName:ae,timestamp:W()}),Z(),E()}catch(n){return F(n)}}function ue(i){try{let n=i.params?.token;if(!n)return h("taskFailed requires params.token");let l=i.params?.error??"unknown error",m=Ne(n);return m?(x({type:"task-failed",taskName:m.taskName,error:l,timestamp:W()}),Z(),E()):h("Invalid callback token")}catch(n){return F(n)}}function Se(i){try{let n=i.params?.token;if(!n)return h("taskProgress requires params.token");let m=(i.body??{}).update??{},w=Ne(n);return w?(x({type:"task-progress",taskName:w.taskName,update:m,timestamp:W()}),Z(),E()):h("Invalid callback token")}catch(n){return F(n)}}function ve(i){try{let n=i.params?.token,l=i.params?.ref;if(!n)return h("sourceDataFetched requires params.token");if(!l)return h("sourceDataFetched requires params.ref");let m=Nt(n);if(!m)return h("Invalid source token");let{cbk:w,cid:j,b:O,d:q,cs:J,rqt:X,dt:ke}=m,Re=qe(K(),he=>t.resolveBlob(he)),ne=ke||t.genId();ke||Re.ingestSourceDataStaged(j,q,chunkVQCIOKJV_cjs.b(l),ne);let Ce=Ne(w);if(!Ce)return h("Invalid callback token embedded in source token");let xe=W();return x({type:"task-progress",taskName:Ce.taskName,update:{bindTo:O,outputFile:q,fetchedAt:xe,deliveryToken:ne,sourceChecksum:J,rqt:X},timestamp:xe}),Z(),E()}catch(n){return F(n)}}function le(i){try{let n=i.params?.token,l=i.params?.reason??"unknown";if(!n)return h("sourceDataFetchFailure requires params.token");let m=Nt(n);if(!m)return h("Invalid source token");let{cbk:w,b:j,d:O,cs:q,rqt:J}=m,X=Ne(w);return X?(x({type:"task-progress",taskName:X.taskName,update:{bindTo:j,outputFile:O,failure:!0,reason:l,sourceChecksum:q,rqt:J},timestamp:W()}),Z(),E()):h("Invalid callback token embedded in source token")}catch(n){return F(n)}}function $t(i){try{let n=k().readCardStoreRef();return n?E({storeRef:n}):h(`Board at ${e.value} has no card store configured`)}catch(n){return F(n)}}function Jt(i){try{return E({storeRef:c??null})}catch(n){return F(n)}}function Mt(i){try{let n=k().readOutputsStoreRef();return n?E({storeRef:n}):h(`Board at ${e.value} has no outputs store configured`)}catch(n){return F(n)}}function Ht(i){try{return E({storeRef:d??null})}catch(n){return F(n)}}function Gt(i){try{let n=k().readChatStoreRef();return E({storeRef:n})}catch(n){return F(n)}}function Ut(i){try{let n=k().readArtifactsStoreRef();return E({storeRef:n})}catch(n){return F(n)}}function Yt(i){try{let n=k().readFetchedSourcesStoreRef();return E({storeRef:n})}catch(n){return F(n)}}function zt(i){try{let n=i.params?.key;if(!n)return h("getConfig requires params.key");let l=k(),m;switch(n){case "task-executor":m=S??null;break;case "chat-handler-flow":m=y??null;break;case "board-runtime-store-ref":m=l.readBoardRuntimeStoreRef();break;case "card-store-ref":m=l.readCardStoreRef();break;case "outputs-store-ref":m=l.readOutputsStoreRef();break;case "scratch-store-ref":m=d??null;break;case "chat-store-ref":m=l.readChatStoreRef();break;case "artifacts-store-ref":m=l.readArtifactsStoreRef();break;case "fetched-sources-store-ref":m=l.readFetchedSourcesStoreRef();break;default:return h(`getConfig: unknown key "${n}"`)}return E({value:m})}catch(n){return F(n)}}function Qt(i){try{let n=i.params?.key;if(!n)return h("getOutputsDataObject requires params.key");if(n===fe)return E(null);let l=u().readDataObject(n);return E(l)}catch(n){return F(n)}}function We(i){try{return E(Pt(u().readAllDataObjects()))}catch(n){return F(n)}}function Xt(i){try{let n=i.params?.key;if(!n)return h("getOutputsComputedValues requires params.key");let l=u().readComputedValues(n);return E(l)}catch(n){return F(n)}}function Ze(i){try{return E(u().readAllComputedValues())}catch(n){return F(n)}}function et(){return qe(K(),i=>t.resolveBlob(i))}function tt(i){let n=K().keyRef?.(i);if(!n)throw new Error("configured fetched-sources store does not support keyRef");return chunkVQCIOKJV_cjs.a(n)}function Wt(i){try{let n=i.params?.key;if(!n)return h("getOutputsFetchedSources requires params.key");let l=et().listSources(n),m={};for(let w of l)m[w]=tt(`${n}/${w}`);return E(m)}catch(n){return F(n)}}function Zt(i){try{let n=et(),l=new Set;for(let w of K().listKeys()){let j=w.indexOf("/");j>0&&!w.includes("/.staged/")&&l.add(w.slice(0,j));}let m={};for(let w of l){let j=n.listSources(w);if(j.length>0){m[w]={};for(let O of j)m[w][O]=tt(`${w}/${O}`);}}return E(m)}catch(n){return F(n)}}function er(i){try{let n=g().readAllCards().filter(q=>q.id!==ae),l=ie({});if(l.status!=="success")return l;let m=We({});if(m.status!=="success")return m;let w=Ze({});if(w.status!=="success")return w;let j=w.data,O={};for(let q of n){let J=typeof q?.id=="string"?q.id:null;if(!J)continue;let X=q.card_data&&typeof q.card_data=="object"&&!Array.isArray(q.card_data)?q.card_data:{};O[J]={schema_version:"v1",card_id:J,card_data:{...X},computed_values:j[J]&&typeof j[J]=="object"?j[J]:{}};}return E({cardDefinitions:n,statusSnapshot:l.data,dataObjectsByToken:m.data,cardRuntimeById:O})}catch(n){return F(n)}}return {init:ge,status:ie,getBoardRuntimeStoreRef:Jt,getCardStoreRef:$t,getOutputsStoreRef:Mt,getScratchStoreRef:Ht,getChatStoreRef:Gt,getArtifactsStoreRef:Ut,getFetchedSourcesStoreRef:Yt,getConfig:zt,getOutputsDataObject:Qt,getAllOutputsDataObjects:We,getOutputsComputedValues:Xt,getAllOutputsComputedValues:Ze,getOutputsFetchedSources:Wt,getAllOutputsFetchedSources:Zt,buildSseOneShotPayload:er,removeCard:C,addCardFiles:b,retrigger:_,processAccumulatedEvents:$,upsertCard:ee,taskFailed:ue,taskProgress:Se,sourceDataFetched:ve,sourceDataFetchFailure:le}}function Ur(e,t,r){let s=r?.taskExecutorRef,o=()=>{if(r){if(!r.boardRuntimeStoreRef)throw new Error(`Board at ${e.value} requires boardRuntimeStoreRef for non-core runtime operations.`);return je(t.kvStorageForRef(r.boardRuntimeStoreRef))}return je(t.kvStorage("config"))};function a(){let g=o().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 u=t.kvStorageForRef(g);return {readIndex(){return u.read("_index")},writeIndex(p){u.write("_index",p);},readCard(p){return u.read(p)},writeCard(p,v){return u.write(p,v),t.hashFn(v)},removeCard(p){u.delete(p);},cardExists(p){return u.read(p)!==null},defaultCardKey(p){return p}}}let c=()=>Qe(a(),t.onWarn??(()=>{}));function d(){return s??o().readTaskExecutorRef()}async function S(g,u){let p=t.validateSchema(u),v=[],I=d();if(I&&Array.isArray(u.source_defs))for(let x of u.source_defs){let D=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(M){let oe=M;if(P=typeof oe?.stdout=="string"?oe.stdout:"",!P.trim()){v.push(`source "${D}": executor validate-source-def failed \u2014 ${M instanceof Error?M.message:String(M)}`);continue}}let L=JSON.parse(P.trim());if(!L.ok&&Array.isArray(L.errors))for(let M of L.errors)v.push(`source "${D}": ${M}`);}catch(P){v.push(`source "${D}": executor validate-source-def failed \u2014 ${P instanceof Error?P.message:String(P)}`);}}let T=[...p.errors,...v];return E({cardId:g,isValid:T.length===0,issues:T})}function y(g,u){let p=g.params?.sourceIdx,v=g.params?.outRef;if(p===void 0)return h(`${u} requires params.sourceIdx`);if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return h(`${u} requires card JSON object in body`);let I=g.body,T=I["card-content"]??I,x=I["mock-projections"]??{},D=T.source_defs??[];if(p<0||p>=D.length)return h(`sourceIdx ${p} out of range (card has ${D.length} source(s))`);let P=D[p],L=typeof P.bindTo=="string"?P.bindTo:"source";return {src:P,bindTo:L,outRef:v,mockProjections:x}}async function V(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return h("validateCardPreflight requires card JSON object in body");let u=g.body,p=u["card-content"]??u,v=typeof p.id=="string"?p.id:"(unknown)";return await S(v,p)}catch(u){return F(u)}}async function z(g){try{let u=y(g,"probeSourcePreflight");if("status"in u)return u;let p=d();if(!p)return h("No task-executor registered for this board");try{let v={...u.src,_projections:u.mockProjections},I=await t.invokeExecutor(p,"probe-source-preflight",{timeout:u.src.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(v)}),T=JSON.parse(I.trim());return T.ok?E({bindTo:u.bindTo,reachable:T.reachable,latencyMs:T.latencyMs,note:T.note}):h(T.error??"Preflight probe failed")}catch{return h("Executor does not support probe-source-preflight")}}catch(u){return F(u)}}async function Q(g){try{let u=y(g,"runSourcePreflight");if("status"in u)return u;let p=d();if(!p)return h("No task-executor registered for this board");try{let v={...u.src,_projections:u.mockProjections},I=await t.invokeExecutor(p,"run-source-preflight",{timeout:u.src.timeout??t.executorTimeouts?.probeMs??6e4,input:JSON.stringify(v)}),T=JSON.parse(I.trim());if(!T.ok)return E({bindTo:u.bindTo,ok:!1,result:null,issues:[T.error??"Preflight run failed"]});if(u.outRef){let x=chunkVQCIOKJV_cjs.b(u.outRef);t.absoluteBlob.write(x.value,JSON.stringify(T.resultValue,null,2));}return E({bindTo:typeof T.bindTo=="string"?T.bindTo:u.bindTo,ok:!0,result:T.resultValue??null,issues:[]})}catch(v){let I=v instanceof Error?v.message:String(v);return E({bindTo:u.bindTo,ok:!1,result:null,issues:[I]})}}catch(u){return F(u)}}async function te(g){try{let u=d();if(!u)return h("No task-executor registered for this board");let p=await t.invokeExecutor(u,"describe-capabilities",{timeout:t.executorTimeouts?.describeMs??1e4});return E(JSON.parse(p.trim()))}catch(u){return F(u)}}function A(g){try{let u=g.body;if(!u||!Array.isArray(u.ops))return h("updatesInCardStore requires body.ops array");let p=u.ops,v=c();for(let I of p){let T=I.op,x=I.id;if(!x)return h('op is missing "id"');if(T==="update"){let D=I["card-content"];if(!D)return h(`update op for "${x}" is missing "card-content"`);v.writeCard(x,D);}else return h(`Unknown op type: "${T??"(none)"}"`)}return E()}catch(u){return F(u)}}function k(g){try{let u=g.body;if(!u||!Array.isArray(u.ids))return h("readFromCardStore requires body.ids array");let p=u.ids,v=c(),I=p.map(T=>({id:T,"card-content":v.readCard(T)}));return E({cards:I})}catch(u){return F(u)}}function H(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return h("evalCardCompute requires a JSON object in body");let u=g.body,p=u["card-content"]??u,v=typeof p.id=="string"?p.id:"(unknown)",I=u["mock-fetched-sources"]??{},T=u["mock-requires"]??{},x=p.compute;if(!x||!Array.isArray(x)||x.length===0)return E({cardId:v,ok:!0,computed_values:{},errors:[]});let D={id:v,card_data:p.card_data??{},requires:T,source_defs:p.source_defs,compute:x},P=chunkQBEQL4TL_cjs.a.runSync(D,{sourcesData:I}),L=P.node.computed_values??{},M=P.errors??[];return E({cardId:v,ok:M.length===0,computed_values:L,errors:M})}catch(u){return F(u)}}async function G(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return h("simulateCardCycle requires a JSON object in body");let u=g.body,p=u["card-content"]??u,v=typeof p.id=="string"?p.id:"(unknown)",I=u["mock-fetched-sources"]??{},T=u["mock-requires"]??{},x=await S(v,p),D=x.status==="success"?{isValid:x.data.isValid,issues:x.data.issues}:{isValid:!1,issues:[x.status==="fail"?x.error:"internal error"]},P=p.source_defs??[],L=p.card_data??{},M=[],oe=[];if(P.length>0){M=chunkQBEQL4TL_cjs.a.enrichSourcesSync(P,{card_data:L,requires:T});for(let K of M){let ee=K.projections,ue=K._projections;if(ee&&ue){for(let Se of Object.keys(ee))if(ue[Se]===void 0){let ve=typeof K.bindTo=="string"?K.bindTo:"(unknown)";oe.push({bindTo:ve,key:Se,error:`Projection "${Se}" resolved to undefined`});}}}}let Z=[],ge={...I},ie=u["task-executor-ref"],C=(ie?.howToRun&&ie?.whatToRun?ie:void 0)??d();for(let K=0;K<M.length;K++){let ee=M[K],ue=typeof ee.bindTo=="string"?ee.bindTo:`source_${K}`;if(!C){Z.push({bindTo:ue,skipped:!0,error:"No task executor configured"});continue}try{let Se={...ee},ve=await t.invokeExecutor(C,"run-source-preflight",{timeout:ee.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(Se)}),le=JSON.parse(ve.trim());le.ok&&!Object.prototype.hasOwnProperty.call(I,ue)&&Object.prototype.hasOwnProperty.call(le,"resultValue")&&(ge[ue]=le.resultValue),Z.push({bindTo:ue,reachable:le.reachable,latencyMs:le.latencyMs,error:le.ok?void 0:le.error});}catch{Z.push({bindTo:ue,skipped:!0,error:"Executor does not support run-source-preflight"});}}let b=p.compute,_={},$=[];if(b&&Array.isArray(b)&&b.length>0){let K={id:v,card_data:L,requires:T,source_defs:p.source_defs,compute:b},ee=chunkQBEQL4TL_cjs.a.runSync(K,{sourcesData:ge});_=ee.node.computed_values??{},$=ee.errors??[];}let re=D.isValid&&oe.length===0&&$.length===0&&Z.every(K=>K.reachable!==!1);return E({cardId:v,ok:re,validation:D,source_probes:Z,projection_errors:oe,fetched_sources:ge,computed_values:_,compute_errors:$})}catch(u){return F(u)}}return {validateCardPreflight:V,probeSourcePreflight:z,runSourcePreflight:Q,evalCardCompute:H,simulateCardCycle:G,describeTaskExecutorCapabilities:te,updatesInCardStore:A,readFromCardStore:k}}
2
+ exports.A=De;exports.B=Xe;exports.C=Vt;exports.D=jt;exports.E=Kt;exports.F=Gr;exports.G=Ur;exports.a=Tr;exports.b=Ct;exports.c=Er;exports.d=Rt;exports.e=br;exports.f=wr;exports.g=vr;exports.h=vt;exports.i=ir;exports.j=ur;exports.k=xt;exports.l=fe;exports.m=ae;exports.n=dr;exports.o=cr;exports.p=Pe;exports.q=Qe;exports.r=Ve;exports.s=ye;exports.t=Vr;exports.u=Tt;exports.v=Et;exports.w=fr;exports.x=At;exports.y=Ke;exports.z=Pt;//# sourceMappingURL=chunk-BAG7MHZP.cjs.map
3
+ //# sourceMappingURL=chunk-BAG7MHZP.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-ATOQP3BD.js';import {a as a$2}from'./chunk-7QNEV5S3.js';import {e,f}from'./chunk-UGB7PC4P.js';function St(e){return typeof e=="string"&&e.trim().length>0}function kt(e,t){if(!e||typeof e!="object")throw new Error(`${t}: adapter.selfRef is required`);if(!St(e.howToRun))throw new Error(`${t}: adapter.selfRef.howToRun is required`);if(!St(e.whatToRun))throw new Error(`${t}: adapter.selfRef.whatToRun is required`)}function Rt(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 or(e,t="callbackTransport"){return {createCallback(r){let s=e();return kt(s,t),{token:r,via:s}}}}function Ue(e){return or(()=>e,"createStaticExecutionRefCallbackTransport")}function br(e){return Ue({meta:"board-live-cards",howToRun:"http:post",whatToRun:a({kind:"http-url",value:String(e||"").trim()})})}function wr(e){return Ue({meta:"board-live-cards",howToRun:"in-process-loop",whatToRun:a({kind:"in-process-loop",value:String(e||"").trim()})})}function vr(e){let t=typeof e=="string"?{notifyChannel:e}:e??{},r={};return t.notifyChannel&&(r.notifyChannel=t.notifyChannel),t.boardRuntimeStoreRef&&(r.boardRuntimeStoreRef=t.boardRuntimeStoreRef),t.queueStoreRef&&(r.queueStoreRef=t.queueStoreRef),Ue({meta:"board-live-cards",howToRun:"built-in",whatToRun:a({kind:"built-in",value:"board-live-cards"}),...Object.keys(r).length>0?{extra:r}:{}})}function Oe(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function Ye(e,t){return Oe(e)?e.then(t):t(e)}function yt(e,t){let r={...e};for(let s of t.deleteKeys)delete r[s];return {...r,...t.shallowMerge}}function Tr(e,t){return {readValues(s){let o=e(s);return Ye(o.listKeys(),a=>{let c=[...a].sort();if(c.length===0)return {version:null,values:{}};let d={},S=null;for(let y of c){let V=o.read(y);Oe(V)?S=(S??Promise.resolve()).then(async()=>{d[y]=await V;}):d[y]=V;}return S?S.then(()=>({version:t(d),values:d})):{version:t(d),values:d}})},writeValues(s,o,a){let c=e(s),d=null;for(let S of a){let y=c.delete(S);Oe(y)&&(d=(d??Promise.resolve()).then(()=>y).then(()=>{}));}for(let[S,y]of Object.entries(o)){let V=c.write(S,y);Oe(V)&&(d=(d??Promise.resolve()).then(()=>V).then(()=>{}));}return d?d.then(()=>t(o)):t(o)}}}function Ct(e,t){return {readSnapshot(r){return e.readValues(r)},commitSnapshot(r,s){if(s.schemaVersion!==t)throw new Error(`Unsupported snapshot schema version: ${s.schemaVersion}`);return Ye(e.readValues(r),o=>{if(o.version!==s.expectedVersion)return {ok:false,reason:"version-mismatch",currentVersion:o.version};let a=yt(o.values,s);return Ye(e.writeValues(r,a,s.deleteKeys),c=>({ok:true,newVersion:c}))})}}}function ht(e,t){if(!t)return e;let r=e.findIndex(s=>s.id===t);return r===-1?e:e.slice(r+1)}function bt(e){return {readEntriesAfterCursor(t){let r=ht(e.readAllEntries(),t);return r.length===0?{events:[],newCursor:t}:{events:r.map(s=>s.event),newCursor:r[r.length-1].id}},pendingCount(t){return ht(e.readAllEntries(),t).length},appendEvent(t){e.appendEntry({id:e.generateId(),event:t});}}}function Er(e){return {appendEvent(t){return e.append(t).then(()=>{})},async readEntriesAfterCursor(t){let r=await e.readAfter(t||null);return {events:r.entries.map(s=>s.payload),newCursor:r.newCursor??t}}}}function Be(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function ce(e,t){return Be(e)?e.then(t):t(e)}function ze(e,t){let r=null;for(let s of e){if(r){r=r.then(()=>t(s)).then(()=>{});continue}let o=t(s);Be(o)&&(r=Promise.resolve(o).then(()=>{}));}return r??void 0}function sr(e){if(e==null)return null;let t=e.trim();if(!t)return null;try{return JSON.parse(t)}catch{return t}}function ar(e,t){let r=e.match(t);return r?r[1]:null}function wt(e,t,r){let s={},o=ze(e,a=>{let c=r(a);if(c)return ce(t(a),d=>{s[c]=d;})});return Be(o)?o.then(()=>s):s}function vt(e,t){return {readSourceData(r,s){return ce(e.read(`${r}/${s}`),sr)},ingestSourceDataStaged(r,s,o,a){return ce(t(o),c=>e.write(`${r}/.staged/${a}/${s}`,c))},commitSourceData(r,s,o){let a=`${r}/.staged/${o}/${s}`,c=`${r}/${s}`;return e.renameKey(a,c)},hasSource(r,s){return e.exists(`${r}/${s}`)},listSources(r){return ce(e.listKeys(`${r}/`),s=>s.filter(o=>!o.includes("/.staged/")).map(o=>o.slice(`${r}/`.length)))}}}function ir(e,t){let r=(s,o)=>{try{let a=o(s);return Be(a)?a.catch(c=>t(s,c instanceof Error?c.message:String(c))):void 0}catch(a){try{return t(s,a instanceof Error?a.message:String(a))}catch{return}}};return {appendEntries(s,o){if(!(!s||o.length===0))return ce(e.read(s),a=>e.write(s,[...a??[],...o]))},dispatchEntriesForJournalId(s,o){if(s)return ce(e.read(s),a=>{let c=a;if(!(!c||c.length===0))return ce(ze(c,d=>r(d,o)),()=>e.delete(s))})}}}function ur(e,t,r){return {readRuntime(s){return ce(e.read(t(s)),o=>o??r())},writeRuntime(s,o){return e.write(t(s),o)}}}function xt(e){return {writeComputedValues(t,r){return e.write(`cards/${t}/computed_values`,r)},readComputedValues(t){return e.read(`cards/${t}/computed_values`)},readAllComputedValues(){return ce(e.listKeys("cards/"),t=>wt(t,r=>e.read(r),r=>ar(r,/^cards\/([^/]+)\/computed_values$/)))},writeDataObjects(t){return ze(Object.entries(t),([r,s])=>{if(r)return s===void 0?e.delete(`data-objects/${r}`):e.write(`data-objects/${r}`,s)})},readDataObject(t){return e.read(`data-objects/${t}`)},readAllDataObjects(){return ce(e.listKeys("data-objects/"),t=>wt(t,r=>e.read(r),r=>r.slice(13)))},writeStatusSnapshot(t){return e.write("status",t)},readStatusSnapshot(){return e.read("status")}}}var fe="sys_keys_board_state",ae="__sys_keys_board_state_init";function It(e){if(!e||typeof e!="object"||Array.isArray(e))return false;let t=e.__private;return !!t&&typeof t=="object"&&!Array.isArray(t)&&t.visible_controlplane_only===true}function dr(e){let t=e.filter(o=>!It(o)),r=[...new Set(t.map(o=>o.id).filter(o=>typeof o=="string"&&o.length>0))].sort(),s=[...new Set(t.flatMap(o=>Array.isArray(o.provides)?o.provides:[]).map(o=>o&&typeof o=="object"&&!Array.isArray(o)?o.bindTo:void 0).filter(o=>typeof o=="string"&&o.length>0&&o!==fe))].sort();return {card_ids:r,data_object_keys:s}}function cr(e,t){let r=e.filter(a=>!It(a)),s=[...new Set(r.map(a=>a.id).filter(a=>typeof a=="string"&&a.length>0))].sort(),o=[...new Set(Object.entries(t).filter(([a])=>a!==ae).flatMap(([,a])=>Array.isArray(a.provides)?a.provides:[]).filter(a=>typeof a=="string"&&a.length>0&&a!==fe))].sort();return {card_ids:s,data_object_keys:o}}function Pe(){return {id:ae,meta:{title:"System Keys Board State",synthetic:true},provides:[{bindTo:fe,ref:`card_data.${fe}`}],card_data:{[fe]:{card_ids:[],data_object_keys:[]}},__private:{visible_controlplane_only:true}}}function Qe(e,t){function r(){return e.readIndex()??{}}function s(o,a,c){let d=String(a||"").split(".").filter(Boolean);if(d.length===0)return c&&typeof c=="object"&&!Array.isArray(c)?c:{value:c};let S={...o},y=S;for(let V=0;V<d.length-1;V++){let z=d[V],Q=y[z],te=Q&&typeof Q=="object"&&!Array.isArray(Q)?{...Q}:{};y[z]=te,y=te;}return y[d[d.length-1]]=c,S}return {readCard(o){let a=r()[o];return !a||!e.cardExists(a.key)?null:e.readCard(a.key)},readCardKey(o){return r()[o]?.key??null},readAllCards(){let o=[];for(let[a,c]of Object.entries(r())){if(!e.cardExists(c.key))continue;let d=e.readCard(c.key);d?o.push(d):t?.(`[card-store] could not read card "${a}" at key "${c.key}"`);}return o},readChecksumIndex(){let o={};for(let[a,c]of Object.entries(r()))o[a]=c.checksum;return o},changedSince(o){let a=r(),c=[];for(let[d,S]of Object.entries(a))o[d]!==S.checksum&&c.push(d);for(let d of Object.keys(o))a[d]||c.push(d);return c},validateUpsert(o,a){let c=r(),d=c[o],S=Object.entries(c).find(([,y])=>y.key===a);return d&&d.key!==a?{ok:false,error:`Card id "${o}" is already mapped to key "${d.key}", cannot remap to "${a}"`}:S&&S[0]!==o?{ok:false,error:`Key "${a}" is already mapped to card id "${S[0]}", cannot remap to "${o}"`}:{ok:true}},writeCard(o,a,c){let d=r(),S=c??d[o]?.key??e.defaultCardKey(o),y=e.writeCard(S,a);d[o]={key:S,checksum:y,updatedAt:new Date().toISOString()},e.writeIndex(d);},patchCard(o,a,c){let d=r(),S=d[o];if(!S||!e.cardExists(S.key))throw new Error(`card "${o}" not found`);let y=e.readCard(S.key);if(!y||typeof y!="object"||Array.isArray(y))throw new Error(`card "${o}" is not patchable`);let V=s(y,a,c),z=e.writeCard(S.key,V);d[o]={key:S.key,checksum:z,updatedAt:new Date().toISOString()},e.writeIndex(d);},removeCard(o){let a=r(),c=a[o];c&&(e.removeCard(c.key),delete a[o],e.writeIndex(a));},readIndex(){return r()}}}function qe(e,t){return vt(e,t)}function _t(e){return bt(e)}var Ve="v1",ye="board/graph",Ft="board/lastJournalProcessedId";function Vr(e){return `cards/${e}/runtime`}function Ot(e){return Ct(e,Ve)}function je(e){function t(r){let s=e.read(r);return s==null?null:typeof s=="string"?s:JSON.stringify(s)}return {readTaskExecutorRef(){let r=t("task-executor");if(r?.trim())return c$1(r.trim())},writeTaskExecutorRef(r){e.write("task-executor",b$1(r));},readChatHandlerFlow(){return e.read("chat-handler-flow")},writeChatHandlerFlow(r){e.write("chat-handler-flow",r);},readBoardRuntimeStoreRef(){return t("board-runtime-store-ref")},writeBoardRuntimeStoreRef(r){e.write("board-runtime-store-ref",r);},readCardStoreRef(){return t("card-store-ref")},writeCardStoreRef(r){e.write("card-store-ref",r);},readOutputsStoreRef(){return t("outputs-store-ref")},writeOutputsStoreRef(r){e.write("outputs-store-ref",r);},readQueueStoreRef(){return t("queue-store-ref")},writeQueueStoreRef(r){e.write("queue-store-ref",r);},readScratchStoreRef(){return t("scratch-store-ref")},writeScratchStoreRef(r){e.write("scratch-store-ref",r);},readChatStoreRef(){return t("chat-store-ref")},writeChatStoreRef(r){e.write("chat-store-ref",r);},readArtifactsStoreRef(){return t("artifacts-store-ref")},writeArtifactsStoreRef(r){e.write("artifacts-store-ref",r);},readFetchedSourcesStoreRef(){return t("fetched-sources-store-ref")},writeFetchedSourcesStoreRef(r){e.write("fetched-sources-store-ref",r);}}}function Bt(e){return xt(e)}function Tt(e){return e?{lastRequestedToken:e.lastRequestedToken,lastCompletedToken:e.lastCompletedToken,lastCompletionStatus:e.lastCompletionStatus??(e.lastCompletedToken?"success":"not-started"),queueRequestedToken:e.queueRequestedToken}:{lastCompletionStatus:"not-started"}}function lr(e){return e?.lastRequestedToken?e.lastCompletedToken!==e.lastRequestedToken:false}function Et(e,t){return e?.lastRequestedToken?lr(e)?"in-flight":!e.lastCompletedToken||e.lastCompletedToken<t?"dispatch":"idle":"dispatch"}function fr(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"success"}}function At(e,t){return {...e,lastCompletedToken:t,lastCompletionStatus:"failure"}}function Ke(e){let t=e.cards.filter(d=>d.name!==ae);if(t.length===e.cards.length)return e;let r=new Set;for(let d of t)for(let S of d.requires)r.add(S);let s=t.map(d=>({name:d.name,fanOut:d.unblocks.length})).sort((d,S)=>S.fanOut-d.fanOut||d.name.localeCompare(S.name)),o=s.length>0?s[0]:{name:null,fanOut:0},a=d=>t.filter(S=>S.status===d).length,c=t.filter(d=>d.requires.length===0&&d.unblocks.length===0).length;return {...e,summary:{...e.summary,card_count:t.length,completed:a("completed"),eligible:a("eligible"),pending:a("pending"),blocked:a("blocked"),unresolved:a("unresolved"),failed:a("failed"),in_progress:a("in-progress"),orphan_cards:c,topology:{edge_count:r.size,max_fan_out_card:o.name,max_fan_out:o.fanOut}},cards:t}}function Pt(e){let{[fe]:t,...r}=e;return r}function De(e,t){let r$1=t.state.tasks,s=t.config.tasks,o=Object.keys(r$1),a=r(t),c={completed:0,failed:0,in_progress:0,pending:0,blocked:0,unresolved:0},d=new Map;for(let A of a.pending)d.set(A.taskName,A.waitingOn);for(let A of a.unresolved)d.set(A.taskName,A.missingTokens);for(let A of a.blocked)d.set(A.taskName,A.failedTokens);let S=new Map;for(let[A,k]of Object.entries(s))for(let H of k.requires??[]){let G=S.get(H)??[];G.push(A),S.set(H,G);}let y=o.sort().map(A=>{let k=r$1[A],H=s[A]??{requires:[],provides:[]};k.status==="completed"?c.completed+=1:k.status==="failed"?c.failed+=1:k.status==="in-progress"&&(c.in_progress+=1);let G=H.requires??[],g=H.provides??[],u=Object.keys(k.data??{}).sort(),p=G.filter(P=>t.state.availableOutputs.includes(P)),v=G.filter(P=>!t.state.availableOutputs.includes(P)),I=d.get(A)??v,T=new Set;for(let P of g)for(let L of S.get(P)??[])L!==A&&T.add(L);let x=k.failedAt,D=k.error?{message:k.error,code:"TASK_FAILED",at:x,source:"task-runtime"}:void 0;return {name:A,status:k.status,error:D,requires:G,requires_satisfied:p,requires_missing:v,provides_declared:g,provides_runtime:u,blocked_by:I,unblocks:Array.from(T).sort(),runtime:{attempt_count:k.executionCount??0,restart_count:k.retryCount??0,in_progress_since:k.status==="in-progress"?k.startedAt??null:null,last_transition_at:k.lastUpdated??null,last_completed_at:k.completedAt??null,last_restarted_at:k.startedAt??null,status_age_ms:k.lastUpdated?0:null}}});c.pending=a.pending.length,c.blocked=a.blocked.length,c.unresolved=a.unresolved.length;let V=y.map(A=>({name:A.name,fanOut:A.unblocks.length})).sort((A,k)=>k.fanOut-A.fanOut||A.name.localeCompare(k.name)),z=V.length>0?V[0]:{name:null,fanOut:0},Q=new Set;for(let A of Object.values(s))for(let k of A.requires??[])Q.add(k);let te=0;for(let[A,k]of Object.entries(s)){let H=(k.requires??[]).length===0,g=(k.provides??[]).some(u=>(S.get(u)??[]).some(p=>p!==A));H&&!g&&(te+=1);}return {schema_version:"v1",meta:{board:{path:e}},summary:{card_count:o.length,completed:c.completed,eligible:a.eligible.length,pending:c.pending,blocked:c.blocked,unresolved:c.unresolved,failed:c.failed,in_progress:c.in_progress,orphan_cards:te,topology:{edge_count:Array.from(Q).length,max_fan_out_card:z.name,max_fan_out:z.fanOut}},cards:y}}function mr(){return new Date().toISOString()}function qt(e,t,r,s,o,a$1,c){return async d=>{let S=[],y=r.cardStore.readCard(d.nodeId);if(!y)return "task-initiate-failure";let V=y.id;if(V===ae){let C=r.activeTaskConfigs?.(),b={[fe]:C?cr(Object.keys(C).filter(_=>_!==ae).map(_=>r.cardStore.readCard(_)).filter(_=>!!_),C):dr(r.cardStore.readAllCards())};return (c??r.outputStore.writeDataObjects.bind(r.outputStore))(b),s(d.nodeId,b),"task-initiated"}let z=y.card_data??{},Q=y.source_defs??[],te=Q,A=r.cardRuntimeStore.readRuntime(V),k=false,H=()=>{k&&(r.cardRuntimeStore.writeRuntime(V,A),k=false);},G=C=>Tt(A._sources[C]),g=(C,b)=>{A._sources[C]=Tt(b),k=true;},u=d.taskState?.executionCount??0;if(A._lastExecutionCount!==u&&(A._sources={},A._lastExecutionCount=u,k=true),d.update){let C=d.update,b=C.outputFile;if(b){let _=G(b);if(C.failure){let $=C.rqt??_.lastRequestedToken??_.queueRequestedToken;$&&g(b,At(_,$));}else {let $=C.rqt;if(!_.lastCompletedToken||$>_.lastCompletedToken){let re=typeof C.deliveryToken=="string"?C.deliveryToken:void 0,K=false;re&&(K=r.fetchedSourcesStore.commitSourceData(V,b,re)),K?g(b,fr(_,$)):g(b,At(_,$));}}H();}}let v={};for(let C of Q)if(C.outputFile){let b=r.fetchedSourcesStore.readSourceData(V,C.outputFile);b!==null&&(v[C.bindTo]=b);}let I={};for(let[C,b]of Object.entries(d.state??{}))if(b!==null&&typeof b=="object"&&!Array.isArray(b)){let _=b[C];I[C]=_!==void 0?_:b;}else I[C]=b;let T={id:V,card_data:{...z},requires:I,source_defs:Q,compute:y.compute};T._sourcesData=v,y.compute&&a$3.runSync(T,{sourcesData:v}),(a$1??r.outputStore.writeComputedValues.bind(r.outputStore))(V,T.computed_values??{});let x={...y},D=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(D)?D.map(C=>({...C,boardDir:typeof C.boardDir=="string"&&C.boardDir?C.boardDir:P})):D;let L=mr(),M=d.update?void 0:L,oe=te.filter(C=>{let b=C.outputFile;if(typeof b!="string"||!b)return true;let _=G(b);M&&(_={..._,queueRequestedToken:M},g(b,_));let $=_.queueRequestedToken??_.lastRequestedToken??L,re=Et(_,$);return re==="in-flight"?false:re==="dispatch"});if(H(),oe.length>0){let C=false,b=L;for(let _ of oe){let $=_.outputFile;if(typeof $!="string"||!$)continue;let re=G($),K=re.queueRequestedToken??L;g($,{...re,lastRequestedToken:K}),b=K,C=true;}return C&&H(),C&&(S.push({taskKind:"source-fetch",payload:{boardRef:a(e),enrichedCard:x,callbackToken:d.callbackToken,rqt:b}}),r.executionRequestStore.appendEntries(t,S)),"task-initiated"}if(te.some(C=>{let b=C.outputFile;if(typeof b!="string"||!b)return false;let _=G(b),$=_.queueRequestedToken??_.lastRequestedToken??L;return Et(_,$)==="in-flight"}))return "task-initiated";let ge=y.provides??[],ie={};for(let{bindTo:C,ref:b}of ge)ie[C]=a$3.resolve(T,b);return (c??r.outputStore.writeDataObjects.bind(r.outputStore))(ie),s(d.nodeId,ie),S.length>0&&r.executionRequestStore.appendEntries(t,S),"task-initiated"}}var Xe={settings:{completion:"manual",refreshStrategy:"data-changed"},tasks:{}};function Vt(e){return {[ye]:e.graph,[Ft]:e.lastDrainedJournalId,board:{runtimeByCardId:e.runtimeByCardId}}}function jt(e){let t=e[ye],r=e[Ft],o=e.board?.runtimeByCardId;if(!t||typeof t!="object")throw new Error(`State snapshot is missing required key: ${ye}`);return {graph:t,lastDrainedJournalId:typeof r=="string"?r:"",runtimeByCardId:o&&typeof o=="object"?o:{}}}function Kt(e){let t=e.requires;return {provides:e.provides?.map(s=>s.bindTo)??[],taskHandlers:["card-handler"],description:e.meta?.title??e.id,...t&&t.length>0?{requires:t}:{}}}function E(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function h(e){return {status:"fail",error:e}}function F(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function pr(e){let t=new TextEncoder().encode(e),r=Array.from(t,s=>String.fromCharCode(s)).join("");return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Lt(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),s=atob(r),o=Uint8Array.from(s,a=>a.charCodeAt(0));return new TextDecoder().decode(o)}function Ne(e){try{let t=JSON.parse(Lt(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function Dt(e){return pr(JSON.stringify(e))}function Nt(e){try{let t=JSON.parse(Lt(e));return typeof t?.cbk=="string"&&typeof t?.cid=="string"&&typeof t?.b=="string"&&typeof t?.d=="string"?t:null}catch{return null}}function W(){return new Date().toISOString()}function gr(e){let t=new Map;return {appendEntries(r,s){if(!r||s.length===0)return;let o=t.get(r)??[];t.set(r,[...o,...s]);},dispatchEntriesForJournalId(r,s){if(!r)return;let o=t.get(r);if(!(!o||o.length===0)){for(let a of o)try{s(a);}catch(c){try{e(a,c instanceof Error?c.message:String(c));}catch{}}t.delete(r);}}}}function Gr(e$1,t,r={}){Rt(t.callbackTransport,"createBoardLiveCardsPublic");let s=t.callbackTransport,o=t.onWarn??(()=>{}),a$3=a(e$1),c$1=r.boardRuntimeStoreRef,d=r.scratchStoreRef,S=r.taskExecutorRef,y=r.chatHandlerFlow,V=r.emitNotification??(i=>{if(!t.publishBoardChangeNotifications)return;let n=i.kind==="notification-batch"?i.notifications:[i];return t.publishBoardChangeNotifications(n)});function z(){if(!c$1)throw new Error(`Board at ${e$1.value} has no board runtime store configured. Pass boardRuntimeStoreRef at construction or init.`);return c$1}function Q(i){if(i.length!==0)try{let n=e(i),l=f({kind:"notification-batch",notifications:n}),m=V(l);m&&typeof m.catch=="function"&&m.catch(w=>o(`[board-live-cards-public] emitNotification failed: ${w instanceof Error?w.message:String(w)}`));}catch(n){o(`[board-live-cards-public] emitNotification failed: ${n instanceof Error?n.message:String(n)}`);}}function te(){let i=k().readCardStoreRef();if(!i)throw new Error(`Board at ${e$1.value} has no card store configured. Run: init --base-ref <ref> --store-ref <b64-ref>`);let n=t.kvStorageForRef(i);return {readIndex(){return n.read("_index")},writeIndex(l){n.write("_index",l);},readCard(l){return n.read(l)},writeCard(l,m){return n.write(l,m),t.hashFn(m)},removeCard(l){n.delete(l);},cardExists(l){return n.read(l)!==null},defaultCardKey(l){return l}}}let A={readValues(i){let n=t.kvStorageForRef(z()),l=n.listKeys().sort();if(l.length===0)return {version:null,values:{}};let m={};for(let w of l)m[w]=n.read(w);return {version:t.hashFn(m),values:m}},writeValues(i,n,l){let m=t.kvStorageForRef(z());for(let w of l)m.delete(w);for(let[w,j]of Object.entries(n))m.write(w,j);return t.hashFn(n)}},k=()=>je(t.kvStorageForRef(z())),H=()=>Ot(A),G=()=>_t(t.journalAdapterForRef(z())),g=()=>Qe(te(),o),u$1=()=>{let i=k().readOutputsStoreRef();if(!i)throw new Error(`Board at ${e$1.value} has no outputs store configured. Run: init --outputs-store-ref <b64-ref>`);return Bt(t.kvStorageForRef(i))};function p$1(){return S??k().readTaskExecutorRef()}function v(){return !!H().readSnapshot(e$1.value).values[ye]}function I(){let i=H().readSnapshot(e$1.value);if(!i.values[ye])throw new Error(`Board not initialized at ${e$1.value}`);return jt(i.values)}function T(i,n){let l=H().commitSnapshot(e$1.value,{schemaVersion:Ve,expectedVersion:n,commitId:t.genId(),committedAt:W(),deleteKeys:[],shallowMerge:Vt(i)});if(!l.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${n??"null"} current=${l.currentVersion??"null"}`)}function x(i){G().appendEvent(i);}async function D(){let n=gr((f,R)=>{let B=f.payload,N=(B?.enrichedCard??{}).id??B?.cardId??"unknown";x({type:"task-failed",taskName:N,error:R,timestamp:W()});}),l=I(),m=q(l.graph),{events:w,newCursor:j}=G().readEntriesAfterCursor(l.lastDrainedJournalId),O=K(),q$1=qe(O,f=>t.resolveBlob(f)),J={...l.runtimeByCardId},X=new Map,ke={readRuntime(f){return X.get(f)??J[f]??{_sources:{}}},writeRuntime(f,R){X.set(f,R),J[f]=R;}},Re=[],ne=new Map,Ce={readSourceData(f,R){let B=`${f}/${R}`;return ne.has(B)?ne.get(B):q$1.readSourceData(f,R)},ingestSourceDataStaged(f,R,B,de){q$1.ingestSourceDataStaged(f,R,B,de);},commitSourceData(f,R,B){let de=`${f}/.staged/${B}/${R}`,N=O.read(de);if(N==null){let Y=O.keyRef?.(de);Y&&(N=t.resolveBlob(Y));}if(N==null)return false;let se=`${f}/${R}`,me=N.trim();try{ne.set(se,JSON.parse(me));}catch{ne.set(se,me);}return Re.push({cardId:f,outputFile:R,deliveryToken:B}),true},hasSource(f,R){let B=`${f}/${R}`;return ne.has(B)?true:q$1.hasSource(f,R)},listSources(f){let R=q$1.listSources(f),B=new Set;for(let N of ne.keys())N.startsWith(`${f}/`)&&B.add(N.slice(`${f}/`.length));let de=new Set([...R,...B]);return Array.from(de)}},xe=()=>m.config.tasks,he={cardStore:g(),cardRuntimeStore:ke,fetchedSourcesStore:Ce,outputStore:u$1(),executionRequestStore:n,activeTaskConfigs:()=>xe()},Te=[],Le=[],$e=[],Je=new Map,rt=new Set,tr=(f,R)=>{Te.push({type:"task-completed",taskName:f,data:R,timestamp:W()});},Me=(f,R)=>{x({type:"task-failed",taskName:f,error:R,timestamp:W()});},Ee=u(m,{handlers:{"card-handler":qt(e$1,j,he,tr,Me,(f,R)=>{Le.push({cardId:f,values:R});},f=>{$e.push(f);})},onNodeRemoved:f=>{Je.delete(f),X.delete(f),delete J[f],rt.add(f);}});for(xe=()=>Ee.getState().config.tasks,Te=w;Te.length>0;){let f=Te;Te=[];for(let R of f)if(R.type==="task-restart"){let B=he.cardStore.readCard(R.taskName);B&&Je.set(R.taskName,B);}Ee.pushAll(f),await Ee.waitForHandlers();}let nt=Ee.getState();await Ee.dispose({wait:true});let rr=H().readSnapshot(e$1.value).version;T({lastDrainedJournalId:j,graph:p(nt),runtimeByCardId:J},rr);for(let{cardId:f,values:R}of Le)he.outputStore.writeComputedValues(f,R);for(let f of $e)he.outputStore.writeDataObjects(f);for(let{cardId:f,outputFile:R,deliveryToken:B}of Re)q$1.commitSourceData(f,R,B);let Ae;try{Ae=Ke(De(a$3,nt)),he.outputStore.writeStatusSnapshot(Ae);}catch(f){o(`[board-live-cards-public] status publish failed: ${f instanceof Error?f.message:String(f)}`);}let be=[];for(let{cardId:f,values:R}of Le)be.push({kind:"computed_values",cardId:f,values:R});for(let f of $e)for(let[R,B]of Object.entries(f))R&&be.push({kind:"data_object",key:R,payload:B});for(let[f,R]of Je)be.push({kind:"card_refreshed",cardId:f,card:R});for(let f of rt)be.push({kind:"card_removed",cardId:f});Ae!==void 0&&be.push({kind:"status",status:Ae}),Q(be);let we=p$1()??{howToRun:"built-in",whatToRun:a({kind:"built-in",value:"source-cli-task-executor"})},ot=t.supportsDirectSourceOutput?.(we)===true;n.dispatchEntriesForJournalId(j,f=>{if(f.taskKind!=="source-fetch"){o(`[process-accumulated-events] unknown taskKind "${f.taskKind}" \u2014 skipping`);return}let R=f.payload,B=R.enrichedCard?.id??"unknown",de=R.enrichedCard?.source_defs??[];if(we.howToRun==="queue-storage"&&ot){try{let N=t.queueStorageForRef(P(),"task-executor"),se=typeof we.extra?.boardId=="string"?we.extra.boardId:void 0,me=[];for(let Y of de){if(!Y.outputFile){o(`[dispatch] source "${Y.bindTo}" has no outputFile \u2014 skipping`);continue}let Ie=t.genId(),_e=`${B}/.staged/${Ie}/${Y.outputFile}`,st=O.keyRef?.(_e);if(!st)continue;let at={ref:a(st),deliveryToken:Ie,outputFile:Y.outputFile,cardId:B},nr=Dt({cbk:R.callbackToken,rg:e$1.value,br:a(e$1),cid:B,b:Y.bindTo,d:Y.outputFile,cs:void 0,rqt:R.rqt,dt:at.deliveryToken});me.push({...se?{boardId:se}:{},ref:we,args:{source_def:Y,base_ref:a(e$1),callback:s.createCallback(nr),output:at}});}me.length>0&&N.enqueueMany(me);}catch(N){Me(B,N instanceof Error?N.message:String(N));}return}for(let N of de){if(!N.outputFile){o(`[dispatch] source "${N.bindTo}" has no outputFile \u2014 skipping`);continue}let se;if(ot){let Y=t.genId(),Ie=`${B}/.staged/${Y}/${N.outputFile}`,_e=O.keyRef?.(Ie);_e&&(se={ref:a(_e),deliveryToken:Y,outputFile:N.outputFile,cardId:B});}let me=Dt({cbk:R.callbackToken,rg:e$1.value,br:a(e$1),cid:B,b:N.bindTo,d:N.outputFile,cs:void 0,rqt:R.rqt,...se?{dt:se.deliveryToken}:{}});t.dispatchExecution(we,{source_def:N,base_ref:a(e$1),callback:s.createCallback(me),...se?{output:se}:{}}).catch(Y=>Me(B,Y instanceof Error?Y.message:String(Y)));}});}function P(){let i=k().readQueueStoreRef();if(!i)throw new Error(`Board at ${e$1.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);return i}function L(){t.queueStorageForRef(P(),"process-accumulated").enqueue({boardRef:a(e$1)}),t.requestProcessAccumulated?.();}function M(){let i=t.queueStorageForRef(P(),"process-accumulated");for(;;){let n=i.lease({max:64,visibilityMs:1e3});if(n.length<=0)return;for(let l of n)i.ack(l.id,l.leaseToken);if(n.length<64)return}}async function oe(){try{let i=()=>{let l=I(),{events:m}=G().readEntriesAfterCursor(l.lastDrainedJournalId);m.length<=0||L();},n=await c(t.lock,D,i);return E({ran:n!==!1})}catch(i){return F(i)}}function Z(){L();}function ge(i){try{let n=i.params?.cardStoreRef;if(!n)return h("init requires params.cardStoreRef \u2014 create a card store with card-store-cli and pass its ref here");if(c$1=i.params?.boardRuntimeStoreRef,!c$1)return h("init requires params.boardRuntimeStoreRef \u2014 pass the board runtime store ref here");if(!v()){let X=a$1(Xe);T({lastDrainedJournalId:"",graph:p(X),runtimeByCardId:{}},null);}let l=i.params?.outputsStoreRef;if(!l)return h("init requires params.outputsStoreRef \u2014 pass the outputs store ref here");let m=i.params?.queueStoreRef;if(!m)return h("init requires params.queueStoreRef \u2014 pass the queue store ref here");let w=i.params?.fetchedSourcesStoreRef;if(!w)return h("init requires params.fetchedSourcesStoreRef \u2014 pass the fetched sources store ref here");d=i.params?.scratchStoreRef;let j=i.params?.chatStoreRef;if(!j)return h("init requires params.chatStoreRef \u2014 pass the chat store ref here");let O=i.params?.artifactsStoreRef;if(!O)return h("init requires params.artifactsStoreRef \u2014 pass the artifacts store ref here");let q$1=k();q$1.writeBoardRuntimeStoreRef(c$1),q$1.writeCardStoreRef(n),q$1.writeOutputsStoreRef(l),q$1.writeQueueStoreRef(m),q$1.writeFetchedSourcesStoreRef(w),q$1.writeChatStoreRef(j),q$1.writeArtifactsStoreRef(O),g().writeCard(Pe().id,Pe());let J=ee({params:{cardId:Pe().id,restart:!0}});if(J.status!=="success")return J;try{u$1().writeStatusSnapshot(Ke(De(a$3,q(I().graph))));}catch{}return E()}catch(n){return F(n)}}function ie(i){try{let n=u$1().readStatusSnapshot();if(!n){n=Ke(De(a$3,q(I().graph)));try{u$1().writeStatusSnapshot(n);}catch{}}return E(n)}catch(n){return F(n)}}function C(i){try{let n=i.params?.id;if(!n)return h("removeCard requires params.id");try{t.kvStorage("card-upsert").delete(n);}catch{}return x({type:"task-removal",taskName:n,timestamp:W()}),n!==ae&&x({type:"task-restart",taskName:ae,timestamp:W()}),Z(),E()}catch(n){return F(n)}}function b$1(i){try{let n=i.params?.cardId;if(!n)return h("addCardFiles requires params.cardId");let l=a$2(g(),{emitNotification:V}).appendFiles({params:{id:n},body:i.body});return l.status!=="success"?l:E({cardId:n,files_added:l.data.files_added,notified:!0})}catch(n){return F(n)}}function _(i){try{let n=i.params?.id;return n?(x({type:"task-restart",taskName:n,timestamp:W()}),Z(),E()):h("retrigger requires params.id")}catch(n){return F(n)}}async function $(i){return M(),oe()}function re(){let i=k().readFetchedSourcesStoreRef();if(!i)throw new Error(`Board at ${e$1.value} has no fetched sources store configured. Run: init --fetched-sources-store-ref <b64-ref>`);return i}function K(){return t.blobStorageForRef(re())}function ee(i){try{let n=i.params?.cardId,l=i.params?.all,m=!!i.params?.restart;if(!n&&!l)return h("upsertCard requires --card-id <id> or --all");let w=l?g().readAllCards().map(O=>O.id):[n];for(let O of w)if(!g().readCard(O))return h(`Card "${O}" not found in board at ${e$1.value}`);let j=!1;for(let O of w){let q=g().readCard(O),J=Kt(q),X=t.hashFn(J),ke=t.kvStorage("card-upsert"),Re=ke.read(O),ne=Re?.taskConfigHash!==X;if(!(!ne&&!m)){if(ne){let Ce=Re?.blobRef??g().readCardKey(O)??O;x({type:"task-upsert",taskName:O,taskConfig:J,timestamp:W()}),ke.write(O,{blobRef:Ce,taskConfigHash:X,updatedAt:W()}),j=j||O!==ae;}m&&x({type:"task-restart",taskName:O,timestamp:W()});}}return j&&x({type:"task-restart",taskName:ae,timestamp:W()}),Z(),E()}catch(n){return F(n)}}function ue(i){try{let n=i.params?.token;if(!n)return h("taskFailed requires params.token");let l=i.params?.error??"unknown error",m=Ne(n);return m?(x({type:"task-failed",taskName:m.taskName,error:l,timestamp:W()}),Z(),E()):h("Invalid callback token")}catch(n){return F(n)}}function Se(i){try{let n=i.params?.token;if(!n)return h("taskProgress requires params.token");let m=(i.body??{}).update??{},w=Ne(n);return w?(x({type:"task-progress",taskName:w.taskName,update:m,timestamp:W()}),Z(),E()):h("Invalid callback token")}catch(n){return F(n)}}function ve(i){try{let n=i.params?.token,l=i.params?.ref;if(!n)return h("sourceDataFetched requires params.token");if(!l)return h("sourceDataFetched requires params.ref");let m=Nt(n);if(!m)return h("Invalid source token");let{cbk:w,cid:j,b:O,d:q,cs:J,rqt:X,dt:ke}=m,Re=qe(K(),he=>t.resolveBlob(he)),ne=ke||t.genId();ke||Re.ingestSourceDataStaged(j,q,b(l),ne);let Ce=Ne(w);if(!Ce)return h("Invalid callback token embedded in source token");let xe=W();return x({type:"task-progress",taskName:Ce.taskName,update:{bindTo:O,outputFile:q,fetchedAt:xe,deliveryToken:ne,sourceChecksum:J,rqt:X},timestamp:xe}),Z(),E()}catch(n){return F(n)}}function le(i){try{let n=i.params?.token,l=i.params?.reason??"unknown";if(!n)return h("sourceDataFetchFailure requires params.token");let m=Nt(n);if(!m)return h("Invalid source token");let{cbk:w,b:j,d:O,cs:q,rqt:J}=m,X=Ne(w);return X?(x({type:"task-progress",taskName:X.taskName,update:{bindTo:j,outputFile:O,failure:!0,reason:l,sourceChecksum:q,rqt:J},timestamp:W()}),Z(),E()):h("Invalid callback token embedded in source token")}catch(n){return F(n)}}function $t(i){try{let n=k().readCardStoreRef();return n?E({storeRef:n}):h(`Board at ${e$1.value} has no card store configured`)}catch(n){return F(n)}}function Jt(i){try{return E({storeRef:c$1??null})}catch(n){return F(n)}}function Mt(i){try{let n=k().readOutputsStoreRef();return n?E({storeRef:n}):h(`Board at ${e$1.value} has no outputs store configured`)}catch(n){return F(n)}}function Ht(i){try{return E({storeRef:d??null})}catch(n){return F(n)}}function Gt(i){try{let n=k().readChatStoreRef();return E({storeRef:n})}catch(n){return F(n)}}function Ut(i){try{let n=k().readArtifactsStoreRef();return E({storeRef:n})}catch(n){return F(n)}}function Yt(i){try{let n=k().readFetchedSourcesStoreRef();return E({storeRef:n})}catch(n){return F(n)}}function zt(i){try{let n=i.params?.key;if(!n)return h("getConfig requires params.key");let l=k(),m;switch(n){case "task-executor":m=S??null;break;case "chat-handler-flow":m=y??null;break;case "board-runtime-store-ref":m=l.readBoardRuntimeStoreRef();break;case "card-store-ref":m=l.readCardStoreRef();break;case "outputs-store-ref":m=l.readOutputsStoreRef();break;case "scratch-store-ref":m=d??null;break;case "chat-store-ref":m=l.readChatStoreRef();break;case "artifacts-store-ref":m=l.readArtifactsStoreRef();break;case "fetched-sources-store-ref":m=l.readFetchedSourcesStoreRef();break;default:return h(`getConfig: unknown key "${n}"`)}return E({value:m})}catch(n){return F(n)}}function Qt(i){try{let n=i.params?.key;if(!n)return h("getOutputsDataObject requires params.key");if(n===fe)return E(null);let l=u$1().readDataObject(n);return E(l)}catch(n){return F(n)}}function We(i){try{return E(Pt(u$1().readAllDataObjects()))}catch(n){return F(n)}}function Xt(i){try{let n=i.params?.key;if(!n)return h("getOutputsComputedValues requires params.key");let l=u$1().readComputedValues(n);return E(l)}catch(n){return F(n)}}function Ze(i){try{return E(u$1().readAllComputedValues())}catch(n){return F(n)}}function et(){return qe(K(),i=>t.resolveBlob(i))}function tt(i){let n=K().keyRef?.(i);if(!n)throw new Error("configured fetched-sources store does not support keyRef");return a(n)}function Wt(i){try{let n=i.params?.key;if(!n)return h("getOutputsFetchedSources requires params.key");let l=et().listSources(n),m={};for(let w of l)m[w]=tt(`${n}/${w}`);return E(m)}catch(n){return F(n)}}function Zt(i){try{let n=et(),l=new Set;for(let w of K().listKeys()){let j=w.indexOf("/");j>0&&!w.includes("/.staged/")&&l.add(w.slice(0,j));}let m={};for(let w of l){let j=n.listSources(w);if(j.length>0){m[w]={};for(let O of j)m[w][O]=tt(`${w}/${O}`);}}return E(m)}catch(n){return F(n)}}function er(i){try{let n=g().readAllCards().filter(q=>q.id!==ae),l=ie({});if(l.status!=="success")return l;let m=We({});if(m.status!=="success")return m;let w=Ze({});if(w.status!=="success")return w;let j=w.data,O={};for(let q of n){let J=typeof q?.id=="string"?q.id:null;if(!J)continue;let X=q.card_data&&typeof q.card_data=="object"&&!Array.isArray(q.card_data)?q.card_data:{};O[J]={schema_version:"v1",card_id:J,card_data:{...X},computed_values:j[J]&&typeof j[J]=="object"?j[J]:{}};}return E({cardDefinitions:n,statusSnapshot:l.data,dataObjectsByToken:m.data,cardRuntimeById:O})}catch(n){return F(n)}}return {init:ge,status:ie,getBoardRuntimeStoreRef:Jt,getCardStoreRef:$t,getOutputsStoreRef:Mt,getScratchStoreRef:Ht,getChatStoreRef:Gt,getArtifactsStoreRef:Ut,getFetchedSourcesStoreRef:Yt,getConfig:zt,getOutputsDataObject:Qt,getAllOutputsDataObjects:We,getOutputsComputedValues:Xt,getAllOutputsComputedValues:Ze,getOutputsFetchedSources:Wt,getAllOutputsFetchedSources:Zt,buildSseOneShotPayload:er,removeCard:C,addCardFiles:b$1,retrigger:_,processAccumulatedEvents:$,upsertCard:ee,taskFailed:ue,taskProgress:Se,sourceDataFetched:ve,sourceDataFetchFailure:le}}function Ur(e,t,r){let s=r?.taskExecutorRef,o=()=>{if(r){if(!r.boardRuntimeStoreRef)throw new Error(`Board at ${e.value} requires boardRuntimeStoreRef for non-core runtime operations.`);return je(t.kvStorageForRef(r.boardRuntimeStoreRef))}return je(t.kvStorage("config"))};function a(){let g=o().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 u=t.kvStorageForRef(g);return {readIndex(){return u.read("_index")},writeIndex(p){u.write("_index",p);},readCard(p){return u.read(p)},writeCard(p,v){return u.write(p,v),t.hashFn(v)},removeCard(p){u.delete(p);},cardExists(p){return u.read(p)!==null},defaultCardKey(p){return p}}}let c=()=>Qe(a(),t.onWarn??(()=>{}));function d(){return s??o().readTaskExecutorRef()}async function S(g,u){let p=t.validateSchema(u),v=[],I=d();if(I&&Array.isArray(u.source_defs))for(let x of u.source_defs){let D=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(M){let oe=M;if(P=typeof oe?.stdout=="string"?oe.stdout:"",!P.trim()){v.push(`source "${D}": executor validate-source-def failed \u2014 ${M instanceof Error?M.message:String(M)}`);continue}}let L=JSON.parse(P.trim());if(!L.ok&&Array.isArray(L.errors))for(let M of L.errors)v.push(`source "${D}": ${M}`);}catch(P){v.push(`source "${D}": executor validate-source-def failed \u2014 ${P instanceof Error?P.message:String(P)}`);}}let T=[...p.errors,...v];return E({cardId:g,isValid:T.length===0,issues:T})}function y(g,u){let p=g.params?.sourceIdx,v=g.params?.outRef;if(p===void 0)return h(`${u} requires params.sourceIdx`);if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return h(`${u} requires card JSON object in body`);let I=g.body,T=I["card-content"]??I,x=I["mock-projections"]??{},D=T.source_defs??[];if(p<0||p>=D.length)return h(`sourceIdx ${p} out of range (card has ${D.length} source(s))`);let P=D[p],L=typeof P.bindTo=="string"?P.bindTo:"source";return {src:P,bindTo:L,outRef:v,mockProjections:x}}async function V(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return h("validateCardPreflight requires card JSON object in body");let u=g.body,p=u["card-content"]??u,v=typeof p.id=="string"?p.id:"(unknown)";return await S(v,p)}catch(u){return F(u)}}async function z(g){try{let u=y(g,"probeSourcePreflight");if("status"in u)return u;let p=d();if(!p)return h("No task-executor registered for this board");try{let v={...u.src,_projections:u.mockProjections},I=await t.invokeExecutor(p,"probe-source-preflight",{timeout:u.src.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(v)}),T=JSON.parse(I.trim());return T.ok?E({bindTo:u.bindTo,reachable:T.reachable,latencyMs:T.latencyMs,note:T.note}):h(T.error??"Preflight probe failed")}catch{return h("Executor does not support probe-source-preflight")}}catch(u){return F(u)}}async function Q(g){try{let u=y(g,"runSourcePreflight");if("status"in u)return u;let p=d();if(!p)return h("No task-executor registered for this board");try{let v={...u.src,_projections:u.mockProjections},I=await t.invokeExecutor(p,"run-source-preflight",{timeout:u.src.timeout??t.executorTimeouts?.probeMs??6e4,input:JSON.stringify(v)}),T=JSON.parse(I.trim());if(!T.ok)return E({bindTo:u.bindTo,ok:!1,result:null,issues:[T.error??"Preflight run failed"]});if(u.outRef){let x=b(u.outRef);t.absoluteBlob.write(x.value,JSON.stringify(T.resultValue,null,2));}return E({bindTo:typeof T.bindTo=="string"?T.bindTo:u.bindTo,ok:!0,result:T.resultValue??null,issues:[]})}catch(v){let I=v instanceof Error?v.message:String(v);return E({bindTo:u.bindTo,ok:!1,result:null,issues:[I]})}}catch(u){return F(u)}}async function te(g){try{let u=d();if(!u)return h("No task-executor registered for this board");let p=await t.invokeExecutor(u,"describe-capabilities",{timeout:t.executorTimeouts?.describeMs??1e4});return E(JSON.parse(p.trim()))}catch(u){return F(u)}}function A(g){try{let u=g.body;if(!u||!Array.isArray(u.ops))return h("updatesInCardStore requires body.ops array");let p=u.ops,v=c();for(let I of p){let T=I.op,x=I.id;if(!x)return h('op is missing "id"');if(T==="update"){let D=I["card-content"];if(!D)return h(`update op for "${x}" is missing "card-content"`);v.writeCard(x,D);}else return h(`Unknown op type: "${T??"(none)"}"`)}return E()}catch(u){return F(u)}}function k(g){try{let u=g.body;if(!u||!Array.isArray(u.ids))return h("readFromCardStore requires body.ids array");let p=u.ids,v=c(),I=p.map(T=>({id:T,"card-content":v.readCard(T)}));return E({cards:I})}catch(u){return F(u)}}function H(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return h("evalCardCompute requires a JSON object in body");let u=g.body,p=u["card-content"]??u,v=typeof p.id=="string"?p.id:"(unknown)",I=u["mock-fetched-sources"]??{},T=u["mock-requires"]??{},x=p.compute;if(!x||!Array.isArray(x)||x.length===0)return E({cardId:v,ok:!0,computed_values:{},errors:[]});let D={id:v,card_data:p.card_data??{},requires:T,source_defs:p.source_defs,compute:x},P=a$3.runSync(D,{sourcesData:I}),L=P.node.computed_values??{},M=P.errors??[];return E({cardId:v,ok:M.length===0,computed_values:L,errors:M})}catch(u){return F(u)}}async function G(g){try{if(!g.body||typeof g.body!="object"||Array.isArray(g.body))return h("simulateCardCycle requires a JSON object in body");let u=g.body,p=u["card-content"]??u,v=typeof p.id=="string"?p.id:"(unknown)",I=u["mock-fetched-sources"]??{},T=u["mock-requires"]??{},x=await S(v,p),D=x.status==="success"?{isValid:x.data.isValid,issues:x.data.issues}:{isValid:!1,issues:[x.status==="fail"?x.error:"internal error"]},P=p.source_defs??[],L=p.card_data??{},M=[],oe=[];if(P.length>0){M=a$3.enrichSourcesSync(P,{card_data:L,requires:T});for(let K of M){let ee=K.projections,ue=K._projections;if(ee&&ue){for(let Se of Object.keys(ee))if(ue[Se]===void 0){let ve=typeof K.bindTo=="string"?K.bindTo:"(unknown)";oe.push({bindTo:ve,key:Se,error:`Projection "${Se}" resolved to undefined`});}}}}let Z=[],ge={...I},ie=u["task-executor-ref"],C=(ie?.howToRun&&ie?.whatToRun?ie:void 0)??d();for(let K=0;K<M.length;K++){let ee=M[K],ue=typeof ee.bindTo=="string"?ee.bindTo:`source_${K}`;if(!C){Z.push({bindTo:ue,skipped:!0,error:"No task executor configured"});continue}try{let Se={...ee},ve=await t.invokeExecutor(C,"run-source-preflight",{timeout:ee.timeout??t.executorTimeouts?.preflightMs??6e4,input:JSON.stringify(Se)}),le=JSON.parse(ve.trim());le.ok&&!Object.prototype.hasOwnProperty.call(I,ue)&&Object.prototype.hasOwnProperty.call(le,"resultValue")&&(ge[ue]=le.resultValue),Z.push({bindTo:ue,reachable:le.reachable,latencyMs:le.latencyMs,error:le.ok?void 0:le.error});}catch{Z.push({bindTo:ue,skipped:!0,error:"Executor does not support run-source-preflight"});}}let b=p.compute,_={},$=[];if(b&&Array.isArray(b)&&b.length>0){let K={id:v,card_data:L,requires:T,source_defs:p.source_defs,compute:b},ee=a$3.runSync(K,{sourcesData:ge});_=ee.node.computed_values??{},$=ee.errors??[];}let re=D.isValid&&oe.length===0&&$.length===0&&Z.every(K=>K.reachable!==!1);return E({cardId:v,ok:re,validation:D,source_probes:Z,projection_errors:oe,fetched_sources:ge,computed_values:_,compute_errors:$})}catch(u){return F(u)}}return {validateCardPreflight:V,probeSourcePreflight:z,runSourcePreflight:Q,evalCardCompute:H,simulateCardCycle:G,describeTaskExecutorCapabilities:te,updatesInCardStore:A,readFromCardStore:k}}
2
+ export{De as A,Xe as B,Vt as C,jt as D,Kt as E,Gr as F,Ur as G,Tr as a,Ct as b,Er as c,Rt as d,br as e,wr as f,vr as g,vt as h,ir as i,ur as j,xt as k,fe as l,ae as m,dr as n,cr as o,Pe as p,Qe as q,Ve as r,ye as s,Vr as t,Tt as u,Et as v,fr as w,At as x,Ke as y,Pt as z};//# sourceMappingURL=chunk-EZOXABJ2.js.map
3
+ //# sourceMappingURL=chunk-EZOXABJ2.js.map
@@ -0,0 +1,3 @@
1
+ 'use strict';var chunkWRMOGPRG_cjs=require('./chunk-WRMOGPRG.cjs'),chunkBAG7MHZP_cjs=require('./chunk-BAG7MHZP.cjs'),chunkVQCIOKJV_cjs=require('./chunk-VQCIOKJV.cjs'),chunkG4XXRHL2_cjs=require('./chunk-G4XXRHL2.cjs'),chunkQBEQL4TL_cjs=require('./chunk-QBEQL4TL.cjs'),chunk2RIHC5TZ_cjs=require('./chunk-2RIHC5TZ.cjs');async function mt(e,o,a){let r=await e.tryAcquire();if(!r)return false;try{await o();}finally{await r();}return await a?.(),true}function Pt(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}function Pe(e,o){return Pt(e)?e.then(o):o(e)}function lt(e,o){let a={...e};for(let[r,s]of Object.entries(o))s!==null&&typeof s=="object"&&!Array.isArray(s)&&a[r]!==null&&typeof a[r]=="object"&&!Array.isArray(a[r])?a[r]=lt(a[r],s):a[r]=s;return a}function ve(e,o,a){if(o.length===0)return e;let[r,...s]=o;if(s.length===0)return {...e,[r]:a};let d=e[r]!==null&&typeof e[r]=="object"&&!Array.isArray(e[r])?e[r]:{};return {...e,[r]:ve(d,s,a)}}function ft(e){return {read:a=>e.read(a),get(a,r){return Pe(e.read(a),s=>{if(s===null)return null;let d=s;for(let f of r.split(".").filter(Boolean)){if(d===null||typeof d!="object"||Array.isArray(d))return null;d=d[f]??null;}return d??null})},write:(a,r)=>e.write(a,r),delete:a=>e.delete(a),listKeys:a=>e.listKeys(a),shallowMerge(a,r){return Pe(e.read(a),s=>e.write(a,{...s??{},...r}))},deepMerge(a,r){return Pe(e.read(a),s=>e.write(a,lt(s??{},r)))},patch(a,r,s){return Pe(e.read(a),d=>{let f=r.split(".").filter(Boolean);return e.write(a,ve(d??{},f,s))})}}}function gt(e){return ft(e)}function pt(e,o){return {async readIndex(){return await e.read("_index")},writeIndex(a){return e.write("_index",a)},async readCard(a){return await e.read(a)},async writeCard(a,r){return await e.write(a,r),o(r)},removeCard(a){return e.delete(a)},async cardExists(a){return await e.read(a)!==null},defaultCardKey(a){return a}}}function yt(e,o){async function a(){return await e.readIndex()??{}}return {async readCard(r){let s=(await a())[r];return !s||!await e.cardExists(s.key)?null:await e.readCard(s.key)},async readCardKey(r){return (await a())[r]?.key??null},async readAllCards(){let r=[];for(let[s,d]of Object.entries(await a())){if(!await e.cardExists(d.key))continue;let f=await e.readCard(d.key);f?r.push(f):o?.(`[card-store] could not read card "${s}" at key "${d.key}"`);}return r},async readChecksumIndex(){let r={};for(let[s,d]of Object.entries(await a()))r[s]=d.checksum;return r},async changedSince(r){let s=await a(),d=[];for(let[f,v]of Object.entries(s))r[f]!==v.checksum&&d.push(f);for(let f of Object.keys(r))s[f]||d.push(f);return d},async validateUpsert(r,s){let d=await a(),f=d[r],v=Object.entries(d).find(([,w])=>w.key===s);return f&&f.key!==s?{ok:false,error:`Card id "${r}" is already mapped to key "${f.key}", cannot remap to "${s}"`}:v&&v[0]!==r?{ok:false,error:`Key "${s}" is already mapped to card id "${v[0]}", cannot remap to "${r}"`}:{ok:true}},async writeCard(r,s,d){let f=await a(),v=d??f[r]?.key??e.defaultCardKey(r),w=await e.writeCard(v,s);f[r]={key:v,checksum:w,updatedAt:new Date().toISOString()},await e.writeIndex(f);},async patchCard(r,s,d){let f=await a(),v=f[r];if(!v||!await e.cardExists(v.key))throw new Error(`card "${r}" not found`);let w=await e.readCard(v.key);if(!w||typeof w!="object"||Array.isArray(w))throw new Error(`card "${r}" is not patchable`);let m=String(s||"").split(".").filter(Boolean),l=ve(w,m,d),S=await e.writeCard(v.key,l);f[r]={key:v.key,checksum:S,updatedAt:new Date().toISOString()},await e.writeIndex(f);},async removeCard(r){let s=await a(),d=s[r];d&&(await e.removeCard(d.key),delete s[r],await e.writeIndex(s));},readIndex(){return a()}}}function Nt(e,o){return chunkBAG7MHZP_cjs.a(e,o)}function _t(e,o,a){return {blob:e,kv:o,journal:a}}function St(e,o={}){function a(m){return {status:"success",data:m}}function r(m){return {status:"fail",error:m}}function s(m){return {status:"error",error:m instanceof Error?m.message:String(m)}}async function d(m){let l=o.emitNotification;if(!l||m.length===0)return;let S=chunk2RIHC5TZ_cjs.e(m);if(S.length===1){await l(S[0]);return}await l(chunk2RIHC5TZ_cjs.f({kind:"notification-batch",notifications:S}));}async function f(m){let l=m.params?.id;if(l){let S=await e.readCard(l);if(!S)throw new Error(`card "${l}" not found`);return [S]}return await e.readAllCards()}function v(m){return chunk2RIHC5TZ_cjs.f({kind:"notification-batch",notifications:chunk2RIHC5TZ_cjs.e(m.map(l=>({kind:"card_refreshed",cardId:l.id,card:l})))})}function w(m){if(Array.isArray(m))return m;if(m&&typeof m=="object"){let l=m;return Array.isArray(l.files)?l.files:[m]}return null}return {async get(m){try{return a({cards:await f(m)})}catch(l){return s(l)}},async buildNotificationBatch(m){try{return a(v(await f(m)))}catch(l){return s(l)}},async set(m){try{let l=m.body;if(l==null)return r("set requires a body (card object or array of cards)");let S=Array.isArray(l)?l:[l];for(let h of S){if(typeof h.id!="string")return r("each card must have a string `id` field");await e.writeCard(h.id,h);}return await d(S.map(h=>({kind:"card_refreshed",cardId:h.id,card:h}))),a({count:S.length})}catch(l){return s(l)}},async del(m){try{let l=m.body?.ids??[],S=m.params?.id,h=S?[...l,S]:l;if(h.length===0)return r("del requires body.ids (string[]) or params.id");for(let N of h)await e.removeCard(N);return await d(h.map(N=>({kind:"card_removed",cardId:N}))),a({count:h.length})}catch(l){return s(l)}},async patch(m){try{let l=m.params?.id,S=m.params?.path;if(!l)return r("patch requires params.id");if(!S)return r("patch requires params.path");let h=m.body,N=h&&Object.prototype.hasOwnProperty.call(h,"value")?h.value:m.body;await e.patchCard(l,S,N);let O=await e.readCard(l);return O?(await d([{kind:"card_refreshed",cardId:l,card:O}]),a({count:1})):r(`card "${l}" not found`)}catch(l){return s(l)}},async appendFiles(m){try{let l=m.params?.id;if(!l)return r("appendFiles requires params.id");let S=await e.readCard(l);if(!S)return r(`card "${l}" not found`);let h=w(m.body);if(!h||h.length===0)return r("appendFiles requires a file metadata object, array, or body.files array");let N=S.card_data&&typeof S.card_data=="object"&&!Array.isArray(S.card_data)?S.card_data:{},O=Array.isArray(N.files)?N.files:[],M=[...O,...h],V=h.map(($,Z)=>({idx:O.length+Z,entry:$})),K=await this.patch({params:{id:l,path:"card_data.files"},body:{value:M}});return K.status!=="success"?K:a({files_added:V})}catch(l){return s(l)}}}}async function vt(e,o){return (await e.peekActive()).find(a=>a.id===o)}function $t(e,o={}){async function a(r){let s=o.emitNotification;if(!s||r.length===0)return;let d=chunk2RIHC5TZ_cjs.e(r);if(d.length===1){await s(d[0]);return}await s(chunk2RIHC5TZ_cjs.f({kind:"notification-batch",notifications:d}));}return {async enqueue(r){let s=await e.enqueue(r);return await a([{kind:"message_enqueued",lane:o.lane,message:s}]),s},async enqueueMany(r){let s=await e.enqueueMany(r);return await a(s.map(d=>({kind:"message_enqueued",lane:o.lane,message:d}))),s},enqueueIfAbsent:e.enqueueIfAbsent?async(r,s)=>{let d=await e.enqueueIfAbsent(r,s);return d&&await a([{kind:"message_enqueued",lane:o.lane,message:d}]),d}:void 0,lease(r){return e.lease(r)},ack(r,s){return e.ack(r,s)},nack(r,s,d){return e.nack(r,s,d)},peekActive(r){return e.peekActive(r)},peekDeadLetter(r){return e.peekDeadLetter(r)},async stage(r,s){return e.stage(r,s)},async commitStaged(r){let s=await e.commitStaged(r);if(s){let d=await vt(e,r);d&&await a([{kind:"message_enqueued",lane:o.lane,message:d}]);}return s},async discardStaged(r,s){return e.discardStaged(r,s)},peekStaged(r){return e.peekStaged(r)}}}function b(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function R(e){return {status:"fail",error:e}}function T(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function q(){return new Date().toISOString()}function bt(e){let o=new TextEncoder().encode(e),a=Array.from(o,r=>String.fromCharCode(r)).join("");return btoa(a).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Rt(e){let o=e.replace(/-/g,"+").replace(/_/g,"/"),a=o+"=".repeat((4-o.length%4)%4),r=atob(a),s=Uint8Array.from(r,d=>d.charCodeAt(0));return new TextDecoder().decode(s)}function be(e){try{let o=JSON.parse(Rt(e));return typeof o?.t=="string"?{taskName:o.t}:null}catch{return null}}function kt(e){return bt(JSON.stringify(e))}function Ct(e){try{let o=JSON.parse(Rt(e));return typeof o?.cbk=="string"&&typeof o?.cid=="string"&&typeof o?.b=="string"&&typeof o?.d=="string"?o:null}catch{return null}}function At(e){return chunkBAG7MHZP_cjs.j(e,chunkBAG7MHZP_cjs.t,()=>({_sources:{}}))}function It(e,o){return chunkBAG7MHZP_cjs.h(e,o)}function xt(e){return chunkBAG7MHZP_cjs.k(e)}function Tt(e,o){return chunkBAG7MHZP_cjs.i(e,o)}function Ot(e,o,a,r,s,d){return async f=>{let v=[],w=await a.cardStore.readCard(f.nodeId);if(!w)return "task-initiate-failure";let m=w.id;if(m===chunkBAG7MHZP_cjs.m){let p=a.activeTaskConfigs?.(),y={[chunkBAG7MHZP_cjs.l]:p?chunkBAG7MHZP_cjs.o((await Promise.all(Object.keys(p).filter(k=>k!==chunkBAG7MHZP_cjs.m).map(k=>a.cardStore.readCard(k)))).filter(k=>!!k),p):await chunkBAG7MHZP_cjs.n(await a.cardStore.readAllCards())};return (d??(()=>{}))(y),r(f.nodeId,y),"task-initiated"}let l=w.card_data??{},S=w.source_defs??[],h=S,N=await a.cardRuntimeStore.readRuntime(m),O=false,M=async()=>{O&&(await a.cardRuntimeStore.writeRuntime(m,N),O=false);},V=p=>chunkBAG7MHZP_cjs.u(N._sources[p]),K=(p,y)=>{N._sources[p]=chunkBAG7MHZP_cjs.u(y),O=true;},$=f.taskState?.executionCount??0;if(N._lastExecutionCount!==$&&(N._sources={},N._lastExecutionCount=$,O=true),f.update){let p=f.update.outputFile;if(p){let y=V(p);if(f.update.failure){let k=f.update.rqt??y.lastRequestedToken??y.queueRequestedToken;k&&K(p,chunkBAG7MHZP_cjs.x(y,k));}else {let k=f.update.rqt;if(!y.lastCompletedToken||k>y.lastCompletedToken){let j=typeof f.update.deliveryToken=="string"?f.update.deliveryToken:void 0,re=j?await a.fetchedSourcesStore.commitSourceData(m,p,j):false;K(p,re?chunkBAG7MHZP_cjs.w(y,k):chunkBAG7MHZP_cjs.x(y,k));}}await M();}}let Z={};for(let p of S){if(!p.outputFile)continue;let y=await a.fetchedSourcesStore.readSourceData(m,p.outputFile);y!==null&&(Z[p.bindTo]=y);}let H={};for(let[p,y]of Object.entries(f.state??{}))if(y!==null&&typeof y=="object"&&!Array.isArray(y)){let k=y[p];H[p]=k!==void 0?k:y;}else H[p]=y;let ee={id:m,card_data:{...l},requires:H,source_defs:S,compute:w.compute};ee._sourcesData=Z,w.compute&&chunkQBEQL4TL_cjs.a.runSync(ee,{sourcesData:Z}),(s??(()=>{}))(m,ee.computed_values??{});let te=chunkQBEQL4TL_cjs.a.enrichSourcesSync(Array.isArray(w.source_defs)?w.source_defs:void 0,{card_data:w.card_data,requires:H}),Ae={...w,source_defs:Array.isArray(te)?te.map(p=>({...p,boardDir:typeof p.boardDir=="string"&&p.boardDir?p.boardDir:e.value})):te},W=q(),E=f.update?void 0:W,ge=h.filter(p=>{let y=p.outputFile;if(typeof y!="string"||!y)return true;let k=V(y);E&&(k={...k,queueRequestedToken:E},K(y,k));let j=k.queueRequestedToken??k.lastRequestedToken??W;return chunkBAG7MHZP_cjs.v(k,j)==="dispatch"});if(await M(),ge.length>0){let p=false,y=W;for(let k of ge){let j=k.outputFile;if(typeof j!="string"||!j)continue;let re=V(j),L=re.queueRequestedToken??W;K(j,{...re,lastRequestedToken:L}),y=L,p=true;}return p&&await M(),p&&(v.push({taskKind:"source-fetch",payload:{boardRef:chunkVQCIOKJV_cjs.a(e),enrichedCard:Ae,callbackToken:f.callbackToken,rqt:y}}),await a.executionRequestStore.appendEntries(o,v)),"task-initiated"}if(h.some(p=>{let y=p.outputFile;if(typeof y!="string"||!y)return false;let k=V(y),j=k.queueRequestedToken??k.lastRequestedToken??W;return chunkBAG7MHZP_cjs.v(k,j)==="in-flight"}))return "task-initiated";let ie=w.provides??[],ue={};for(let{bindTo:p,ref:y}of ie)ue[p]=chunkQBEQL4TL_cjs.a.resolve(ee,y);return (d??(()=>{}))(ue),r(f.nodeId,ue),v.length>0&&await a.executionRequestStore.appendEntries(o,v),"task-initiated"}}function nr(e,o,a={}){chunkBAG7MHZP_cjs.d(o.callbackTransport,"createAsyncBoardLiveCardsPublic");let r=o.callbackTransport,s=o.warn??(()=>{}),d=chunkVQCIOKJV_cjs.a(e),f=a.emitNotification??(n=>{if(!o.publishBoardChangeNotifications)return;let t=n.kind==="notification-batch"?n.notifications:[n];return o.publishBoardChangeNotifications(t)}),v=null,w=a.boardRuntimeStoreRef,m=a.scratchStoreRef,l=a.taskExecutorRef,S=a.chatHandlerFlow;function h(){if(!w)throw new Error(`Board at ${e.value} has no board runtime store configured. Pass boardRuntimeStoreRef at construction or init.`);return w}function N(n){if(n.length!==0)try{let t=chunk2RIHC5TZ_cjs.e(n),c=chunk2RIHC5TZ_cjs.f({kind:"notification-batch",notifications:t});return Promise.resolve(f(c)).catch(i=>{s(`[async-board-live-cards-public] emitNotification failed: ${i instanceof Error?i.message:String(i)}`);})}catch(t){s(`[async-board-live-cards-public] emitNotification failed: ${t instanceof Error?t.message:String(t)}`);return}}let O=()=>chunkWRMOGPRG_cjs.b(o.kvStorageForRef(h())),M=e.value,V=()=>chunkBAG7MHZP_cjs.b(chunkBAG7MHZP_cjs.a(()=>o.kvStorageForRef(h()),o.hashFn),"v1"),K=async()=>{let n=await O().readOutputsStoreRef();if(!n)throw new Error(`Board at ${e.value} has no outputs store configured.`);return xt(o.kvStorageForRef(n))},$=async()=>{let n=await O().readCardStoreRef();if(!n)throw new Error(`Board at ${e.value} has no card store configured.`);let t=o.kvStorageForRef(n);return yt(pt(gt(t),o.hashFn),s)};async function Z(){return !!(await V().readSnapshot(M)).values[chunkBAG7MHZP_cjs.s]}async function H(){let n=await V().readSnapshot(M);if(!n.values[chunkBAG7MHZP_cjs.s])throw new Error(`Board not initialized at ${e.value}`);return chunkBAG7MHZP_cjs.D(n.values)}async function ee(n,t){let c=await V().commitSnapshot(M,{schemaVersion:"v1",expectedVersion:t,deleteKeys:[],shallowMerge:chunkBAG7MHZP_cjs.C(n)});if(!c.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${t??"null"} current=${c.currentVersion??"null"}`)}let te=()=>chunkBAG7MHZP_cjs.c(o.journalStorageForRef(h()));async function Ae(){return l??await O().readTaskExecutorRef()}async function W(){return chunkBAG7MHZP_cjs.z(await(await K()).readAllDataObjects())}async function E(n){await te().appendEvent(n);}async function ge(){let n=await O().readFetchedSourcesStoreRef();if(!n)throw new Error(`Board at ${e.value} has no fetched sources store configured. Run: init --fetched-sources-store-ref <b64-ref>`);return n}async function le(){return o.blobStorageForRef(await ge())}async function ie(){return It(await le(),n=>o.resolveBlob(n))}async function ue(n){let t=(await le()).keyRef?.(n);if(!t)throw new Error("configured fetched-sources store does not support keyRef");let c=await Promise.resolve(t);return chunkVQCIOKJV_cjs.a(c)}async function p(){let n=Tt(o.kvStorageForRef(h()),async(u,g)=>{let P=u.payload,B=(P.enrichedCard??{}).id??P.cardId??"unknown";await E({type:"task-failed",taskName:B,error:g,timestamp:q()});}),t=At(o.kvStorageForRef(h())),c=await le(),i=await ie(),A=await $(),I=await K(),F=new Map,C=new Map,x=[],Q=[],G=[],X=new Map,de=new Set,ce={async readRuntime(u){return F.get(u)??await t.readRuntime(u)},async writeRuntime(u,g){F.set(u,g),Te[u]=g;}},Ie={async readSourceData(u,g){let P=`${u}/${g}`;return C.has(P)?C.get(P):await i.readSourceData(u,g)},ingestSourceDataStaged(u,g,P,D){return i.ingestSourceDataStaged(u,g,P,D)},async commitSourceData(u,g,P){let D=`${u}/.staged/${P}/${g}`,B=await c.read(D);if(B==null){let z=await Promise.resolve(c.keyRef?.(D));z&&(B=await o.resolveBlob(z));}if(B==null)return false;let U=`${u}/${g}`,ae=B.trim();try{C.set(U,JSON.parse(ae));}catch{C.set(U,ae);}return x.push({cardId:u,outputFile:g,deliveryToken:P}),true},async hasSource(u,g){let P=`${u}/${g}`;return C.has(P)||await i.hasSource(u,g)},async listSources(u){let g=await i.listSources(u),P=[...C.keys()].filter(D=>D.startsWith(`${u}/`)).map(D=>D.slice(`${u}/`.length));return [...new Set([...g,...P])]}},xe=await H(),De=chunkG4XXRHL2_cjs.q(xe.graph),Te={...xe.runtimeByCardId},{events:wt,newCursor:Oe}=await te().readEntriesAfterCursor(xe.lastDrainedJournalId),pe=wt,Ve=()=>De.config.tasks,fe=chunkG4XXRHL2_cjs.u(De,{handlers:{"card-handler":Ot(e,Oe,{cardStore:A,cardRuntimeStore:ce,fetchedSourcesStore:Ie,outputStore:I,executionRequestStore:n,activeTaskConfigs:()=>Ve()},(u,g)=>{pe.push({type:"task-completed",taskName:u,data:g,timestamp:q()});},(u,g)=>{Q.push({cardId:u,values:g});},u=>{G.push(u);})},onNodeRemoved:u=>{X.delete(u),F.delete(u),delete Te[u],de.add(u);}});for(Ve=()=>fe.getState().config.tasks;pe.length>0;){let u=pe;pe=[];for(let g of u)if(g.type==="task-restart"){let P=await A.readCard(g.taskName);P&&X.set(g.taskName,P);}fe.pushAll(u),await fe.waitForHandlers();}let $e=fe.getState();await fe.dispose({wait:true}),await ee({lastDrainedJournalId:Oe,graph:chunkG4XXRHL2_cjs.p($e),runtimeByCardId:Te},(await V().readSnapshot(M)).version);for(let{cardId:u,values:g}of Q)await I.writeComputedValues(u,g);for(let u of G)await I.writeDataObjects(u);for(let[u,g]of F)await t.writeRuntime(u,g);for(let u of x)await i.commitSourceData(u.cardId,u.outputFile,u.deliveryToken);let Le=chunkBAG7MHZP_cjs.y(chunkBAG7MHZP_cjs.A(d,$e));await I.writeStatusSnapshot(Le);let me=[];for(let{cardId:u,values:g}of Q)me.push({kind:"computed_values",cardId:u,values:g});for(let u of G)for(let[g,P]of Object.entries(u))me.push({kind:"data_object",key:g,payload:P});for(let[u,g]of X)me.push({kind:"card_refreshed",cardId:u,card:g});for(let u of de)me.push({kind:"card_removed",cardId:u});me.push({kind:"status",status:Le}),await N(me);let ne=await Ae();if(!ne)return;let Je=o.supportsDirectSourceOutput?.(ne)===true;await n.dispatchEntriesForJournalId(Oe,async u=>{if(u.taskKind!=="source-fetch"){s(`[async-process-accumulated-events] unknown taskKind "${u.taskKind}" \u2014 skipping`);return}let g=u.payload,P=g.enrichedCard?.id??"unknown",D=g.enrichedCard?.source_defs??[];if(ne.howToRun==="queue-storage"&&Je){try{let B=await O().readQueueStoreRef();if(!B)throw new Error(`Board at ${e.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);let U=o.queueStorageForRef(B,"task-executor"),ae=typeof ne.extra?.boardId=="string"?ne.extra.boardId:void 0,z=[];for(let Y of D){if(!Y.outputFile)continue;let ye=o.genId(),Se=`${P}/.staged/${ye}/${Y.outputFile}`,Me=await Promise.resolve(c.keyRef?.(Se));if(!Me)continue;let Qe={ref:chunkVQCIOKJV_cjs.a(Me),deliveryToken:ye,outputFile:Y.outputFile,cardId:P},ht=kt({cbk:g.callbackToken,rg:e.value,br:chunkVQCIOKJV_cjs.a(e),cid:P,b:Y.bindTo,d:Y.outputFile,cs:void 0,rqt:g.rqt,dt:Qe.deliveryToken});z.push({...ae?{boardId:ae}:{},ref:ne,args:{source_def:Y,base_ref:chunkVQCIOKJV_cjs.a(e),callback:r.createCallback(ht),output:Qe}});}z.length>0&&await U.enqueueMany(z);}catch(B){await E({type:"task-failed",taskName:P,error:B instanceof Error?B.message:String(B),timestamp:q()});}return}for(let B of D){if(!B.outputFile)continue;let U;if(Je){let Y=o.genId(),ye=`${P}/.staged/${Y}/${B.outputFile}`,Se=await Promise.resolve(c.keyRef?.(ye));Se&&(U={ref:chunkVQCIOKJV_cjs.a(Se),deliveryToken:Y,outputFile:B.outputFile,cardId:P});}let ae=kt({cbk:g.callbackToken,rg:e.value,br:chunkVQCIOKJV_cjs.a(e),cid:P,b:B.bindTo,d:B.outputFile,cs:void 0,rqt:g.rqt,...U?{dt:U.deliveryToken}:{}}),z=await o.dispatchExecution(ne,{source_def:B,base_ref:chunkVQCIOKJV_cjs.a(e),callback:r.createCallback(ae),...U?{output:U}:{}});z.dispatched||await E({type:"task-failed",taskName:P,error:z.error??"dispatch failed",timestamp:q()});}});}async function y(){try{let n=async()=>{let c=await H(),{events:i}=await te().readEntriesAfterCursor(c.lastDrainedJournalId);i.length>0&&await j();},t=await mt(o.lock,p,n);return b({ran:t!==!1})}catch(n){return T(n)}}async function k(){return v||(v=y().finally(()=>{v=null;}),v)}async function j(){let n=await O().readQueueStoreRef();if(!n)throw new Error(`Board at ${e.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);await o.queueStorageForRef(n,"process-accumulated").enqueue({boardRef:chunkVQCIOKJV_cjs.a(e)}),await o.requestProcessAccumulated?.();}async function re(){let n=await O().readQueueStoreRef();if(!n)throw new Error(`Board at ${e.value} has no queue store configured. Run: init --queue-store-ref <b64-ref>`);let t=o.queueStorageForRef(n,"process-accumulated");for(;;){let c=await t.lease({max:64,visibilityMs:1e3});if(c.length<=0)return;for(let i of c)await t.ack(i.id,i.leaseToken);if(c.length<64)return}}function L(){j();}return {async init(n){try{let t=n.params?.cardStoreRef;if(!t)return R("init requires params.cardStoreRef");if(w=n.params?.boardRuntimeStoreRef,!w)return R("init requires params.boardRuntimeStoreRef");let c=n.params?.outputsStoreRef;if(!c)return R("init requires params.outputsStoreRef");let i=n.params?.queueStoreRef;if(!i)return R("init requires params.queueStoreRef");let A=n.params?.fetchedSourcesStoreRef;if(!A)return R("init requires params.fetchedSourcesStoreRef");m=n.params?.scratchStoreRef;let I=n.params?.chatStoreRef;if(!I)return R("init requires params.chatStoreRef");let F=n.params?.artifactsStoreRef;if(!F)return R("init requires params.artifactsStoreRef");await Z()||await ee({lastDrainedJournalId:"",graph:chunkG4XXRHL2_cjs.p(chunkG4XXRHL2_cjs.a(chunkBAG7MHZP_cjs.B)),runtimeByCardId:{}},null);let C=O();await C.writeBoardRuntimeStoreRef(w),await C.writeCardStoreRef(t),await C.writeOutputsStoreRef(c),await C.writeQueueStoreRef(i),await C.writeFetchedSourcesStoreRef(A),await C.writeChatStoreRef(I),await C.writeArtifactsStoreRef(F),await(await $()).writeCard(chunkBAG7MHZP_cjs.m,chunkBAG7MHZP_cjs.p());let x=o.kvStorage("card-upsert"),Q=chunkBAG7MHZP_cjs.p(),G=chunkBAG7MHZP_cjs.E(Q),X=o.hashFn(G),ce=(await x.read(chunkBAG7MHZP_cjs.m))?.blobRef??await(await $()).readCardKey(chunkBAG7MHZP_cjs.m)??chunkBAG7MHZP_cjs.m;return await E({type:"task-upsert",taskName:chunkBAG7MHZP_cjs.m,taskConfig:G,timestamp:q()}),await x.write(chunkBAG7MHZP_cjs.m,{blobRef:ce,taskConfigHash:X,updatedAt:q()}),await E({type:"task-restart",taskName:chunkBAG7MHZP_cjs.m,timestamp:q()}),L(),await(await K()).writeStatusSnapshot(chunkBAG7MHZP_cjs.y(chunkBAG7MHZP_cjs.A(d,chunkG4XXRHL2_cjs.q((await H()).graph)))),b()}catch(t){return T(t)}},async status(n){try{let t=await K(),c=await t.readStatusSnapshot();return c||(c=chunkBAG7MHZP_cjs.y(chunkBAG7MHZP_cjs.A(d,chunkG4XXRHL2_cjs.q((await H()).graph))),await t.writeStatusSnapshot(c)),b(c)}catch(t){return T(t)}},async getCardStoreRef(n){try{let t=await O().readCardStoreRef();return t?b({storeRef:t}):R(`Board at ${e.value} has no card store configured`)}catch(t){return T(t)}},async getBoardRuntimeStoreRef(n){try{return b({storeRef:w??null})}catch(t){return T(t)}},async getOutputsStoreRef(n){try{let t=await O().readOutputsStoreRef();return t?b({storeRef:t}):R(`Board at ${e.value} has no outputs store configured`)}catch(t){return T(t)}},async getScratchStoreRef(n){try{return b({storeRef:m??null})}catch(t){return T(t)}},async getChatStoreRef(n){try{return b({storeRef:await O().readChatStoreRef()})}catch(t){return T(t)}},async getArtifactsStoreRef(n){try{return b({storeRef:await O().readArtifactsStoreRef()})}catch(t){return T(t)}},async getFetchedSourcesStoreRef(n){try{return b({storeRef:await O().readFetchedSourcesStoreRef()})}catch(t){return T(t)}},async getConfig(n){try{let t=n.params?.key;if(!t)return R("getConfig requires params.key");let c=O(),i;switch(t){case "task-executor":i=l??null;break;case "chat-handler-flow":i=S??null;break;case "board-runtime-store-ref":i=await c.readBoardRuntimeStoreRef();break;case "card-store-ref":i=await c.readCardStoreRef();break;case "outputs-store-ref":i=await c.readOutputsStoreRef();break;case "scratch-store-ref":i=m??null;break;case "chat-store-ref":i=await c.readChatStoreRef();break;case "artifacts-store-ref":i=await c.readArtifactsStoreRef();break;case "fetched-sources-store-ref":i=await c.readFetchedSourcesStoreRef();break;default:return R(`getConfig: unknown key "${t}"`)}return b({value:i})}catch(t){return T(t)}},async getOutputsDataObject(n){try{let t=n.params?.key;if(!t)return R("getOutputsDataObject requires params.key");if(t===chunkBAG7MHZP_cjs.l)return b(null);let c=await W();return b(c[t]??null)}catch(t){return T(t)}},async getAllOutputsDataObjects(n){try{return b(await W())}catch(t){return T(t)}},async getOutputsComputedValues(n){try{let t=n.params?.key;return t?b(await(await K()).readComputedValues(t)):R("getOutputsComputedValues requires params.key")}catch(t){return T(t)}},async getAllOutputsComputedValues(n){try{return b(await(await K()).readAllComputedValues())}catch(t){return T(t)}},async getOutputsFetchedSources(n){try{let t=n.params?.key;if(!t)return R("getOutputsFetchedSources requires params.key");let c=await(await ie()).listSources(t),i={};for(let A of c)i[A]=await ue(`${t}/${A}`);return b(i)}catch(t){return T(t)}},async getAllOutputsFetchedSources(n){try{let t=await ie(),c=await(await le()).listKeys(),i=new Set;for(let I of c){let F=I.indexOf("/");F>0&&!I.includes("/.staged/")&&i.add(I.slice(0,F));}let A={};for(let I of i){let F=await t.listSources(I);if(F.length!==0){A[I]={};for(let C of F)A[I][C]=await ue(`${I}/${C}`);}}return b(A)}catch(t){return T(t)}},async buildSseOneShotPayload(n){try{let t=(await(await $()).readAllCards()).filter(C=>C.id!==chunkBAG7MHZP_cjs.m),c=await this.status({});if(c.status!=="success")return c;let i=await this.getAllOutputsDataObjects({});if(i.status!=="success")return i;let A=await this.getAllOutputsComputedValues({});if(A.status!=="success")return A;let I=A.data,F={};for(let C of t){let x=typeof C?.id=="string"?C.id:null;if(!x)continue;let Q=C.card_data&&typeof C.card_data=="object"&&!Array.isArray(C.card_data)?C.card_data:{};F[x]={schema_version:"v1",card_id:x,card_data:{...Q},computed_values:I[x]&&typeof I[x]=="object"?I[x]:{}};}return b({cardDefinitions:t,statusSnapshot:c.data,dataObjectsByToken:i.data,cardRuntimeById:F})}catch(t){return T(t)}},async addCardFiles(n){try{let t=n.params?.cardId;if(!t)return R("addCardFiles requires params.cardId");let i=await St(await $(),{emitNotification:f}).appendFiles({params:{id:t},body:n.body});return i.status!=="success"?i:b({cardId:t,files_added:i.data.files_added,notified:!0})}catch(t){return T(t)}},async removeCard(n){try{let t=n.params?.id;if(!t)return R("removeCard requires params.id");try{await o.kvStorage("card-upsert").delete(t);}catch{}return await E({type:"task-removal",taskName:t,timestamp:q()}),t!==chunkBAG7MHZP_cjs.m&&await E({type:"task-restart",taskName:chunkBAG7MHZP_cjs.m,timestamp:q()}),L(),b()}catch(t){return T(t)}},async retrigger(n){try{let t=n.params?.id;return t?(await E({type:"task-restart",taskName:t,timestamp:q()}),L(),b()):R("retrigger requires params.id")}catch(t){return T(t)}},async processAccumulatedEvents(n){return await re(),k()},async upsertCard(n){try{let t=n.params?.cardId,c=n.params?.all,i=!!n.params?.restart;if(!t&&!c)return R("upsertCard requires --card-id <id> or --all");let A=await $(),I=c?(await A.readAllCards()).map(x=>x.id):[t];for(let x of I)if(!await A.readCard(x))return R(`Card "${x}" not found in board at ${e.value}`);let F=o.kvStorage("card-upsert"),C=!1;for(let x of I){let Q=await A.readCard(x);if(!Q)continue;let G=chunkBAG7MHZP_cjs.E(Q),X=o.hashFn(G),de=await F.read(x),ce=de?.taskConfigHash!==X;if(!(!ce&&!i)){if(ce){let Ie=de?.blobRef??await A.readCardKey(x)??x;await E({type:"task-upsert",taskName:x,taskConfig:G,timestamp:q()}),await F.write(x,{blobRef:Ie,taskConfigHash:X,updatedAt:q()}),C=C||x!==chunkBAG7MHZP_cjs.m;}i&&await E({type:"task-restart",taskName:x,timestamp:q()});}}return C&&await E({type:"task-restart",taskName:chunkBAG7MHZP_cjs.m,timestamp:q()}),L(),b()}catch(t){return T(t)}},async taskFailed(n){try{let t=n.params?.token;if(!t)return R("taskFailed requires params.token");let c=n.params?.error??"unknown error",i=be(t);return i?(await E({type:"task-failed",taskName:i.taskName,error:c,timestamp:q()}),L(),b()):R("Invalid callback token")}catch(t){return T(t)}},async taskProgress(n){try{let t=n.params?.token;if(!t)return R("taskProgress requires params.token");let c=(n.body??{}).update??{},i=be(t);return i?(await E({type:"task-progress",taskName:i.taskName,update:c,timestamp:q()}),L(),b()):R("Invalid callback token")}catch(t){return T(t)}},async sourceDataFetched(n){try{let t=n.params?.token,c=n.params?.ref;if(!t)return R("sourceDataFetched requires params.token");if(!c)return R("sourceDataFetched requires params.ref");let i=Ct(t);if(!i)return R("Invalid source token");let A=await ie(),I=i.dt||o.genId();i.dt||await A.ingestSourceDataStaged(i.cid,i.d,chunkVQCIOKJV_cjs.b(c),I);let F=be(i.cbk);return F?(await E({type:"task-progress",taskName:F.taskName,update:{bindTo:i.b,outputFile:i.d,fetchedAt:q(),deliveryToken:I,sourceChecksum:i.cs,rqt:i.rqt},timestamp:q()}),L(),b()):R("Invalid callback token embedded in source token")}catch(t){return T(t)}},async sourceDataFetchFailure(n){try{let t=n.params?.token,c=n.params?.reason??"unknown";if(!t)return R("sourceDataFetchFailure requires params.token");let i=Ct(t);if(!i)return R("Invalid source token");let A=be(i.cbk);return A?(await E({type:"task-progress",taskName:A.taskName,update:{bindTo:i.b,outputFile:i.d,failure:!0,reason:c,sourceChecksum:i.cs,rqt:i.rqt},timestamp:q()}),L(),b()):R("Invalid callback token embedded in source token")}catch(t){return T(t)}}}}
2
+ exports.a=mt;exports.b=gt;exports.c=pt;exports.d=yt;exports.e=Nt;exports.f=_t;exports.g=St;exports.h=$t;exports.i=nr;//# sourceMappingURL=chunk-HVLWVMG6.cjs.map
3
+ //# sourceMappingURL=chunk-HVLWVMG6.cjs.map
@@ -0,0 +1,3 @@
1
+ import {a,b}from'./chunk-JB4Q2W7I.js';import {a as a$3}from'./chunk-XYN5D3GL.js';import {a as a$6,c as c$2}from'./chunk-O5UYCGIN.js';import {p,j,k,l,c as c$1,d as d$1,m,n,e as e$1,a as a$8,b as b$3,o}from'./chunk-CZ6ZFWFT.js';import {a as a$4,d as d$2,b as b$2,c as c$3}from'./chunk-FOFGEABN.js';import {a as a$c}from'./chunk-RKKSVOP2.js';import {a as a$2}from'./chunk-NTICU4OK.js';import {a as a$9,c as c$4}from'./chunk-O7NOHKVR.js';import {a as a$a,b as b$4}from'./chunk-ZJ5M5COT.js';import {i,d,c,b as b$1,g,h}from'./chunk-5VTIOM2U.js';import {a as a$b}from'./chunk-6MD6FVE3.js';import {F,G,q}from'./chunk-EZOXABJ2.js';import {a as a$5}from'./chunk-7QNEV5S3.js';import {a as a$7}from'./chunk-BJGK5FNL.js';import {a as a$1}from'./chunk-NIBLKYXN.js';import {e}from'./chunk-UGB7PC4P.js';function ie(R){let{apiBasePath:w,json:b,readJsonBody:$,bootstrapBoard:A,createMcpControlplaneToolRegistry:x,retriggerCard:D,applyCardAction:N,resolveChatHandlerTarget:E,sendCardFileDownloadResponse:q}=R;async function j(T,S,W){let H=T.method||"GET",J=W,f=J.pathname;try{if(H==="POST"&&f===`${w}/mcp-actions`){await A();let p=Date.now(),y=new Date(p).toISOString(),O=await $(T),l=typeof O.tool=="string"?O.tool.trim():"",B=O.args&&typeof O.args=="object"&&!Array.isArray(O.args)?O.args:{};if(!l)return b(S,400,{error:"tool is required"}),!0;let k=a$9(B,"card_id");if(!k)return b(S,400,{error:"MCP action requires card_id"}),!0;if(l==="retrigger-card"||l==="retrigger"){await D(k);let F=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:k,actionType:l,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(F).toISOString(),responseSentAtMs:F,responseStatus:200}}),!0}let P=c$4(B,"payload");if(l==="chat-send"&&!await E(k)){let F=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${k}`,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(F).toISOString(),responseSentAtMs:F,responseStatus:409}),!0}if(l==="chat-send"){let F=typeof P["turn-id"]=="string"?P["turn-id"]:typeof P.turnId=="string"?P.turnId:typeof P.turn=="string"?P.turn:"";if(!F||!String(F).trim()){let L=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${k}`,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(L).toISOString(),responseSentAtMs:L,responseStatus:400}),!0}}await N(k,l,P);let I=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:k,actionType:l,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(I).toISOString(),responseSentAtMs:I,responseStatus:200}}),!0}if(H==="POST"&&f===`${w}/mcp-controlplane`){await A();let p=await $(T),y=typeof p.tool=="string"?p.tool.trim():"",O=p.args&&typeof p.args=="object"&&!Array.isArray(p.args)?p.args:{};if(!y)return b(S,400,{error:"tool is required"}),!0;try{let l=await a$a(y,O,x());if(l&&typeof l=="object"&&!Array.isArray(l)){let B=l;if(B.status==="fail")return b(S,400,{error:b$4(l,"Request failed")}),!0;if(B.status==="error")return b(S,500,{error:b$4(l,"Internal error")}),!0}b(S,200,l);}catch(l){let B=typeof l?.statusCode=="number"?Number(l.statusCode):500,k=l instanceof Error?l.message:String(l);b(S,B,{error:k});}return !0}let g=f.match(new RegExp(`^${c$3(w)}/cards/([^/]+)/retrigger$`));if(H==="POST"&&g){await A();let p=decodeURIComponent(g[1]);return await D(p),b(S,200,{ok:!0}),!0}let d=f.match(new RegExp(`^${c$3(w)}/cards/([^/]+)/actions$`));if(H==="POST"&&d){await A();let p=decodeURIComponent(d[1]),y=Date.now(),O=new Date(y).toISOString(),l=await $(T),B=l?.actionType;if(B==="chat-send"&&!await E(p)){let P=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${p}`,requestReceivedAt:O,requestReceivedAtMs:y,responseSentAt:new Date(P).toISOString(),responseSentAtMs:P,responseStatus:409}),!0}if(B==="chat-send"){let P=l?.payload??{},I=typeof P["turn-id"]=="string"?P["turn-id"]:typeof P.turnId=="string"?P.turnId:typeof P.turn=="string"?P.turn:"";if(!I||!String(I).trim()){let F=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${p}`,requestReceivedAt:O,requestReceivedAtMs:y,responseSentAt:new Date(F).toISOString(),responseSentAtMs:F,responseStatus:400}),!0}}await N(p,B,l?.payload);let k=Date.now();return b(S,200,{ok:!0,requestReceivedAt:O,requestReceivedAtMs:y,responseSentAt:new Date(k).toISOString(),responseSentAtMs:k,responseStatus:200}),!0}let v=f.match(new RegExp(`^${c$3(w)}/cards/([^/]+)/files/(\\d+)$`));if(H==="GET"&&v){let p=decodeURIComponent(v[1]),y=parseInt(v[2],10),O=J.searchParams.get("sn");return await q(S,p,y,O),!0}return !1}catch(g){let d=g?.statusCode||500;return b(S,d,{error:String(g?.message||g)}),true}}return {handleRuntimeApi:j}}var ze=3e4;function Ke(R){let w=R.socket?.remoteAddress??"";return w==="127.0.0.1"||w==="::1"||w==="::ffff:127.0.0.1"}function ce(R){let{apiBasePath:w,emitNotifications:b,readJsonBody:$,json:A}=R,x=`${w}/notify-q`;async function D(N,E,q){if(q.pathname!==x)return false;if((N.method??"").toUpperCase()!=="POST")return A(E,405,{status:"error",error:"Method not allowed"}),true;if(!Ke(N))return A(E,403,{status:"error",error:"Forbidden"}),true;let j;try{j=await $(N);}catch{return A(E,400,{status:"error",error:"Invalid JSON body"}),true}if(!j||typeof j!="object"||!Array.isArray(j.notifications))return A(E,400,{status:"error",error:"body.notifications must be an array"}),true;let T=j.notifications,{accepted:S,rejected:W}=b$3(T,Date.now(),ze);return S.length>0&&b(S),A(E,200,{status:"success",data:{accepted:S.length,rejected:W}}),true}return {handleNotifyRoute:D}}var de={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},ue="chat-handler-flow-queue",ot="__probe__echo__probe__";function jr(R){let w=String(R.apiBasePath||"/api/board").replace(/\/$/,""),b$3={...de,...R.corsHeaders||{}},$=R.queueLaneTuning??{},A=R.boardId||"",x=R.logger||{info:console.log,warn:console.warn,error:console.error},D=R.invocationAdapter,N=R.chatFlowRunner||null,E=R.notificationTransport||null,q$1=R.serverUrl||null,j$1=R.executionExtra||{},T=R.onSseClientConnected,S=R.onSseClientDisconnected,W=R.onChannelSubscribed,H=R.onChannelUnsubscribed,J=a({buildChatOneShotBatch:async(t,e)=>await tt.buildSseOneShotBatch({params:{cardId:t},body:{receiving:e}}),onSseClientDisconnected:S}),f=a({buildChatOneShotBatch:async()=>({status:"success",data:{kind:"notification-batch",category:"batch",notifications:[]}})});function g$1(t){function e(a){return {...a,queueStorageForRef(u,C){return a$7(a.queueStorageForRef(u,C),{lane:C,emitNotification:i$1})}}}function r(a){return {...a,queueStorageForRef(u,C){return h(a.queueStorageForRef(u,C),{lane:C,emitNotification:i$1})}}}function n(a){return {async get(u){return a.get(u)},async set(u){return a.set(u)},async del(u){return a.del(u)},async patch(u){return a.patch(u)},async appendFiles(u){return a.appendFiles(u)}}}function o(a){return {async get(u){return await a.get(u)},async set(u){return await a.set(u)},async del(u){return await a.del(u)},async patch(u){return await a.patch(u)},async appendFiles(u){return await a.appendFiles(u)}}}let s=null;function i$1(a){if(a.kind==="notification-batch"){V(a.notifications,s??void 0);return}V([a],s??void 0);}let c$2=a$4(t.boardAdapter)?r(t.boardAdapter):e(t.boardAdapter),M=t.nonCoreAdapter??(!a$4(c$2)&&l$1(c$2)?c$2:null),h$1=a$4(c$2)?i(t.baseRef,c$2,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i$1}):F(t.baseRef,c$2,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i$1}),_=t.nonCore??(M?G(t.baseRef,M,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),Ue=c$2.chatStorageForRef(t.chatStoreRef),dt,We=a$4(c$2)?(()=>{let a=d(c(b$1(c$2.kvStorageForRef(t.cardStoreRef)),c$2.hashFn),x.warn),u=g(a,{emitNotification:i$1}),C=o(u);return dt={get(m){return C.get(m)},set(m){return C.set(m)}},C})():(()=>{let a=c$2.kvStorageForRef(t.cardStoreRef),C=a$5(q({readIndex:()=>a.read("_index"),writeIndex:m=>a.write("_index",m),readCard:m=>a.read(m),writeCard:(m,ft)=>(a.write(m,ft),m),removeCard:m=>{a.delete(m);},cardExists:m=>a.read(m)!==null,defaultCardKey:m=>m},x.warn),{emitNotification:i$1});return dt=C,n(C)})(),lt;if(a$4(c$2)){let a=c$2.blobStorageForRef(t.artifactsStoreRef);lt={async putBytes(u,C){if(a.writeBytes){await a.writeBytes(u,C);return}let m=JSON.stringify({__kind:"bytes-array",data:[...C]});await a.write(u,m);},async getBytes(u){if(a.readBytes){let m=await a.readBytes(u);if(m!==null)return m}let C=await a.read(u);if(C===null)return null;try{let m=JSON.parse(C);if(m&&m.__kind==="bytes-array"&&Array.isArray(m.data))return new Uint8Array(m.data)}catch{}return new TextEncoder().encode(C)},async listKeys(u){return await a.listKeys(u)}};}else {let a=c$2.blobStorageForRef(t.artifactsStoreRef),u=a$6(a);lt={putBytes(C,m,ft){u.putBytes(C,m,ft);},getBytes(C){return u.getBytes(C)},listKeys(C){return u.list(C).map(m=>m.key)}};}let Je={async init(a){return h$1.init(a)},async status(a){return h$1.status(a)},async getConfig(a){return h$1.getConfig(a)},async getAllOutputsDataObjects(a){return h$1.getAllOutputsDataObjects(a)},async getAllOutputsComputedValues(a){return h$1.getAllOutputsComputedValues(a)},async getOutputsFetchedSources(a){return h$1.getOutputsFetchedSources(a)},async buildSseOneShotPayload(a){return h$1.buildSseOneShotPayload(a)},async upsertCard(a){return h$1.upsertCard(a)},async removeCard(a){return h$1.removeCard(a)},async sourceDataFetched(a){return h$1.sourceDataFetched(a)},async sourceDataFetchFailure(a){return h$1.sourceDataFetchFailure(a)}};return s={label:t.label,board:h$1,nonCore:_,publicCardStore:dt,boardOps:Je,cardStoreOps:We,get filesArtifacts(){return lt},get chatStorage(){return Ue},boardAdapter:c$2,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:c$1(),notificationTeardown:null,initialized:false,cardsBootstrapped:false},s}let d$3=R.boards.map(g$1),v=new Map;function p$1(t){return v.get(t)??0}function y(t){return t.queueStoreRef}function O(t,e){if(a$4(t.boardAdapter)){let n=t.boardAdapter.queueStorageForRef(y(t),e);return a$b(n)}let r=t.boardAdapter.queueStorageForRef(y(t),e);return a$c(r)}function l$1(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function B(t){let e=d$3[p$1(t)];return {files:e?e.filesArtifacts:null}}function k$1(){return c$2()}function P(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}function I(t){return "cardId"in t&&typeof t.cardId=="string"?z(t.cardId)??void 0:d$3[0]??void 0}function F$1(t){for(let e of t){let r=I(e);if(r)return r}return d$3[0]??void 0}function L(t,e$2={}){if(!t||t.length===0)return;let r=e(t),n={kind:"notification-batch",category:"batch",notifications:r},o=e$2.ctx??F$1(r);if(e$2.appendState!==false&&o&&e$1(o.notification,n),e$2.broadcastSse!==false){let s=r.filter(c=>c.kind==="message_enqueued"),i=r.filter(c=>c.kind!=="message_enqueued");i.length>0&&J.broadcastNotificationBatch(i),s.length>0&&f.broadcastNotificationBatch(s);}if(!(e$2.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 V(t,e){L(t,{ctx:e,appendState:true,broadcastSse:true,mirrorExternal:true});}async function le(t){if(!t||t.notificationTeardown||!E||!t.notifyRef)return;let e=await E.subscribe(t.notifyRef,r=>{let n=a$8(r);L(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 le(t),!t.chatHandlerFlow&&t.chatHandlerRef&&D.describe)try{let o=await D.describe(t.chatHandlerRef);o&&o.kind!=="chat-handler"?x.warn(`[init] chat-handler describe returned kind="${o.kind}", expected "chat-handler" for ${t.label}`):o&&x.info(`[init] chat-handler validated: ${o.name} (protocol ${o.protocolVersion}) for ${t.label}`);}catch(o){x.warn(`[init] chat-handler describe failed for ${t.label}: ${o?.message||String(o)}`);}t.initialized=true;}async function ct(t){let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&d$1(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&&L(e,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});}async function gt(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"&&(v.set(o.id,e),await t.boardOps.upsertCard({params:{cardId:o.id}}));t.cardsBootstrapped=true;}async function G$1(){for(let t of d$3)await fe(t);}async function at(){await G$1();for(let t=0;t<d$3.length;t++)await ct(d$3[t]),await gt(d$3[t],t),await ct(d$3[t]);}async function Rt(t=false){t||await G$1();for(let e of d$3){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function z(t){return d$3[p$1(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 d$3)e.push(...await t(r));return e}function yt(){return d$3[0]??null}function me(t){return z(t)??yt()}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=a$1({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"){V(t.notifications);return}V([t]);}}),ht=p({boardContexts:d$3,cardOwnerIndex:v,cardContextForCard:t=>z(t),readStatusSnapshot:()=>be(),readDataObjectsByToken:()=>Ce(),readCardRuntimeArtifacts:()=>Se(),readCardFromStore:t=>X(t),readCardDefinitions:()=>pe(),processAccumulatedLaneInternal:t=>Rt(t),reportSourceFetched:(t,e)=>Bt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>kt(t,{reason:e}),uploadCardFile:(t,e,r,n,o)=>St(t,e,r,n,o),chatStorePublic:tt,serverUrl:q$1,apiBasePath:w}),Re=ht.mcpCardStoreFacade,st=ht.createMcpFacade,ye=j({boardId:A,bootstrapBoard:()=>at(),sseHub:J,onChannelSubscribed:W,onChannelUnsubscribed:H,getMcpFacade:()=>st(),getMcpCardStoreFacade:()=>Re()});function he(t){return m(t)}function we(){return n(st())}function wt(){return o({boardId:A,uploadCardFile:St,getMcpFacade:()=>st(),controlplane:ye})}let it=k({boardId:A,boardContexts:d$3,readChatRecords:t=>Fe(t),getChatProcessing:t=>ge(t)}),be=it.readStatusSnapshot,Se=it.readCardRuntimeArtifacts,Ce=it.readDataObjectsByToken,ut=it.buildPublishedRuntimePayload;async function bt(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,M=e(i)||i;if(o&&JSON.stringify(M)===c)return;let h=await s.cardStoreOps.set({body:M});if(h.status!=="success")throw Object.assign(new Error(h.error||`Failed to persist card: ${t}`),{statusCode:500});if(n){let _=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(_.status!=="success")throw Object.assign(new Error(_.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Ae(t,e){await bt(t,e,{syncBoard:true});}async function Be(t,e){await bt(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 St=l({safeCardId:t=>P(t),artifactsStores:t=>B(t),cardFileMetadataStore:()=>k$1(),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 Ct(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 Ct(t);if(!s){try{await Y(t,!1);}catch{}return}let{ctx:i,handlerFlow:c,handlerRef:M}=s;if(!r)try{await Y(t,!0);}catch{}let h={boardId:A,cardId:String(t),lastChatEntryId:e,...n?{turnId:n}:{},...typeof o=="string"&&o.trim()?{probe:o.trim()}:{},...j$1,...q$1?{serverUrl:q$1}:{}},_=c!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:ue}}:M;a$4(i.boardAdapter)?await O(i,"chat-agent").enqueueRequest({boardId:A,ref:_,args:c!=null?{...h,__chatHandlerFlow:c}:h}):O(i,"chat-agent").enqueueRequest({boardId:A,ref:_,args:c!=null?{...h,__chatHandlerFlow:c}:h}),await Promise.resolve(i.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await Y(t,!1);}catch{}x.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"&&b$2(e)===ue){let n=N,o=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,n?n.run(o,s,{boardId:A,cardId:String(s.cardId||""),label:t.label,logger:x,serverUrl:q$1,executionExtra:j$1}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return D.invoke(e,r)}async function Ne(t,e=false){e||await G$1();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",n=r?z(r):yt();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=wt(),i=ve(r?.text),c=i?i.text:r?.text,M=await a$a("manage.add-chat-entry-and-any-attachments",{board_id:A,card_id:t,role:"user",text:c,turn_id:o,files:[]},s);if(M?.status!=="success")throw new Error(b$4(M,`chat-send append failed for card ${t}`));let h=M?.data?.id;if(typeof h!="string"||!h)throw new Error(`chat-send did not return an append id for card ${t}`);let _=await a$a("setstate.chat-processing-started",{board_id:A,card_id:t},s);if(_?.status!=="success")throw new Error(b$4(_,`chat-send processing update failed for card ${t}`));xe(t,h,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=k$1().normalizeIncoming(r?.files,s);return c.length>0&&k$1().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,{...b$3,"Content-Type":"application/json; charset=utf-8","Content-Length":o}),t.end(n);}async function At(t,e,r){let n=await X(t);if(!n)throw Object.assign(new Error("Card not found"),{statusCode:404});let o=k$1().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=P(t),c=B(t),M=String(s.stored_name||""),h=`${i}/${M}`,_=c.files?await c.files.getBytes(h):null;if(!_)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:_}}async function je(t,e,r,n){let{fileRecord:o,bytes:s}=await At(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(d$2(e)).trim();return r?JSON.parse(r):{}}async function Bt(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let n=d$3[0];return n?n.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function kt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",n=d$3[0];return n?n.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let De=b({sseHub:J,queueSseHub:f,corsHeaders:b$3,json:et,buildPublishedRuntimePayload:()=>ut(),onSseClientConnected:T,onChannelSubscribed:W,onChannelUnsubscribed:H,apiBasePath:w,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G$1(),bootstrapBoard:()=>at(),boardContexts:d$3,publishPersistedStateSnapshot:t=>ct(t),upsertCardsFromSource:(t,e)=>gt(t,e)}).handleWatchersRoutes,qe=a$2({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpFacade:()=>st(),createMcpToolRegistry:t=>he(t),resolveCardFileDownloadPayload:(t,e,r)=>At(t,e,r),isLikelyTextMimeType:t=>Me(t),sliceTextByLines:(t,e,r)=>_e(t,e,r)}).handleAgentfaceApi,Ie=a$3({apiBasePath:w,json:et,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G$1(),createMcpWebhookToolRegistry:()=>we()}).handleWebhooksApi,$e=ie({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpControlplaneToolRegistry:()=>wt(),retriggerCard:t=>ke(t),applyCardAction:(t,e,r)=>Ee(t,e,r),resolveChatHandlerTarget:t=>Ct(t),sendCardFileDownloadResponse:(t,e,r,n)=>je(t,e,r,n)}).handleRuntimeApi,He=ce({apiBasePath:w,emitNotifications:t=>V(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 w},get corsHeaders(){return b$3},get queueLaneTuning(){return $},handleRuntimeApi:Le,emitNotification(t){if(t.kind==="notification-batch"){V(t.notifications);return}V([t]);},buildPublishedRuntimePayload:ut,__drainProcessAccumulatedLane:Rt,handleChatAgentRequest:Ne,clearChatRecords:Pe,reportSourceFetched(t,e){return Bt(t,{ref:e})},reportSourceFetchFailure(t,e){return kt(t,{reason:e})},get cardStore(){return d$3[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 w=String(R.apiBasePath||"/api/boards").replace(/\/$/,""),b={...de,...R.corsHeaders||{}},$=R.serverMetaStore,A=R.boardRuntimeFactory,x=new Map,D="boards-config.json";function N(){let f=$.getText(D);if(!f)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(f)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function E(f){$.putText(D,JSON.stringify(f,null,2));}function q(f){let g=String(f||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return g.length>0&&g.length<=64?g:null}function j(f){if(x.has(f))return x.get(f);let d=N().boards.find(p=>p.id===f)||{},v=A(f,d);return x.set(f,v),v}function T(f,g,d){let v=JSON.stringify(d),p=typeof Buffer<"u"?Buffer.byteLength(v):new TextEncoder().encode(v).length;f.writeHead(g,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":p}),f.end(v);}async function S(f,g,d){let v=f.method||"GET",p=d.pathname;if(v==="GET"&&p===w)return T(g,200,{ok:true,boards:N().boards}),true;if(v==="POST"&&p===w){let y=[];for await(let F of f)y.push(F);let O=typeof Buffer<"u"?Buffer.concat(y).toString("utf-8").trim():new TextDecoder().decode(d$2(y)).trim(),l={};try{l=O?JSON.parse(O):{};}catch{l={};}let B=q(l.id);if(!B)return T(g,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let k=N();if(k.boards.some(F=>F.id===B))return T(g,409,{error:`Board "${B}" is already registered`}),true;let P=typeof l.label=="string"&&l.label.trim()?l.label.trim():B,I={id:B,label:P};for(let[F,L]of Object.entries(l))F==="id"||F==="label"||L!=null&&(I[F]=L);return k.boards.push(I),E(k),T(g,200,{ok:true,board:I}),true}return false}async function W(f,g,d){let p=d.pathname.match(new RegExp(`^${c$3(w)}/([^/]+)(/|$)`));if(!p)return false;let y=q(decodeURIComponent(p[1]));return y?N().boards.some(B=>B.id===y)?!!await j(y).handleRuntimeApi(f,g,d):(T(g,404,{error:`Board "${y}" not registered. POST ${w} with {id} to register it first.`}),true):(T(g,400,{error:"Invalid board id"}),true)}async function H(f,g,d){return !!(await S(f,g,d)||await W(f,g,d))}function J(f){if(!N().boards.some(d=>d.id===f))throw Object.assign(new Error(`Board "${f}" not registered`),{statusCode:404});return {service:j(f)}}return {get apiBasePath(){return w},get corsHeaders(){return b},handleApi:H,requireBoardService:J}}export{jr as a,Mr as b};//# sourceMappingURL=chunk-SEUSFOMM.js.map
3
+ //# sourceMappingURL=chunk-SEUSFOMM.js.map
@@ -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'),chunkNMOUBZXX_cjs=require('./chunk-NMOUBZXX.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'),chunkZOZ7ZDGA_cjs=require('./chunk-ZOZ7ZDGA.cjs'),chunkWRMOGPRG_cjs=require('./chunk-WRMOGPRG.cjs'),chunkEYBDAEVO_cjs=require('./chunk-EYBDAEVO.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 ie(R){let{apiBasePath:w,json:b,readJsonBody:$,bootstrapBoard:A,createMcpControlplaneToolRegistry:x,retriggerCard:D,applyCardAction:N,resolveChatHandlerTarget:E,sendCardFileDownloadResponse:q}=R;async function j(T,S,W){let H=T.method||"GET",J=W,f=J.pathname;try{if(H==="POST"&&f===`${w}/mcp-actions`){await A();let p=Date.now(),y=new Date(p).toISOString(),O=await $(T),l=typeof O.tool=="string"?O.tool.trim():"",B=O.args&&typeof O.args=="object"&&!Array.isArray(O.args)?O.args:{};if(!l)return b(S,400,{error:"tool is required"}),!0;let k=chunkLPXVVMQT_cjs.a(B,"card_id");if(!k)return b(S,400,{error:"MCP action requires card_id"}),!0;if(l==="retrigger-card"||l==="retrigger"){await D(k);let F=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:k,actionType:l,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(F).toISOString(),responseSentAtMs:F,responseStatus:200}}),!0}let P=chunkLPXVVMQT_cjs.c(B,"payload");if(l==="chat-send"&&!await E(k)){let F=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${k}`,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(F).toISOString(),responseSentAtMs:F,responseStatus:409}),!0}if(l==="chat-send"){let F=typeof P["turn-id"]=="string"?P["turn-id"]:typeof P.turnId=="string"?P.turnId:typeof P.turn=="string"?P.turn:"";if(!F||!String(F).trim()){let L=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${k}`,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(L).toISOString(),responseSentAtMs:L,responseStatus:400}),!0}}await N(k,l,P);let I=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:k,actionType:l,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(I).toISOString(),responseSentAtMs:I,responseStatus:200}}),!0}if(H==="POST"&&f===`${w}/mcp-controlplane`){await A();let p=await $(T),y=typeof p.tool=="string"?p.tool.trim():"",O=p.args&&typeof p.args=="object"&&!Array.isArray(p.args)?p.args:{};if(!y)return b(S,400,{error:"tool is required"}),!0;try{let l=await chunk272IYUKT_cjs.a(y,O,x());if(l&&typeof l=="object"&&!Array.isArray(l)){let B=l;if(B.status==="fail")return b(S,400,{error:chunk272IYUKT_cjs.b(l,"Request failed")}),!0;if(B.status==="error")return b(S,500,{error:chunk272IYUKT_cjs.b(l,"Internal error")}),!0}b(S,200,l);}catch(l){let B=typeof l?.statusCode=="number"?Number(l.statusCode):500,k=l instanceof Error?l.message:String(l);b(S,B,{error:k});}return !0}let g=f.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/retrigger$`));if(H==="POST"&&g){await A();let p=decodeURIComponent(g[1]);return await D(p),b(S,200,{ok:!0}),!0}let d=f.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/actions$`));if(H==="POST"&&d){await A();let p=decodeURIComponent(d[1]),y=Date.now(),O=new Date(y).toISOString(),l=await $(T),B=l?.actionType;if(B==="chat-send"&&!await E(p)){let P=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${p}`,requestReceivedAt:O,requestReceivedAtMs:y,responseSentAt:new Date(P).toISOString(),responseSentAtMs:P,responseStatus:409}),!0}if(B==="chat-send"){let P=l?.payload??{},I=typeof P["turn-id"]=="string"?P["turn-id"]:typeof P.turnId=="string"?P.turnId:typeof P.turn=="string"?P.turn:"";if(!I||!String(I).trim()){let F=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${p}`,requestReceivedAt:O,requestReceivedAtMs:y,responseSentAt:new Date(F).toISOString(),responseSentAtMs:F,responseStatus:400}),!0}}await N(p,B,l?.payload);let k=Date.now();return b(S,200,{ok:!0,requestReceivedAt:O,requestReceivedAtMs:y,responseSentAt:new Date(k).toISOString(),responseSentAtMs:k,responseStatus:200}),!0}let v=f.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/files/(\\d+)$`));if(H==="GET"&&v){let p=decodeURIComponent(v[1]),y=parseInt(v[2],10),O=J.searchParams.get("sn");return await q(S,p,y,O),!0}return !1}catch(g){let d=g?.statusCode||500;return b(S,d,{error:String(g?.message||g)}),true}}return {handleRuntimeApi:j}}var ze=3e4;function Ke(R){let w=R.socket?.remoteAddress??"";return w==="127.0.0.1"||w==="::1"||w==="::ffff:127.0.0.1"}function ce(R){let{apiBasePath:w,emitNotifications:b,readJsonBody:$,json:A}=R,x=`${w}/notify-q`;async function D(N,E,q){if(q.pathname!==x)return false;if((N.method??"").toUpperCase()!=="POST")return A(E,405,{status:"error",error:"Method not allowed"}),true;if(!Ke(N))return A(E,403,{status:"error",error:"Forbidden"}),true;let j;try{j=await $(N);}catch{return A(E,400,{status:"error",error:"Invalid JSON body"}),true}if(!j||typeof j!="object"||!Array.isArray(j.notifications))return A(E,400,{status:"error",error:"body.notifications must be an array"}),true;let T=j.notifications,{accepted:S,rejected:W}=chunkNMOUBZXX_cjs.b(T,Date.now(),ze);return S.length>0&&b(S),A(E,200,{status:"success",data:{accepted:S.length,rejected:W}}),true}return {handleNotifyRoute:D}}var de={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},ue="chat-handler-flow-queue",ot="__probe__echo__probe__";function jr(R){let w=String(R.apiBasePath||"/api/board").replace(/\/$/,""),b={...de,...R.corsHeaders||{}},$=R.queueLaneTuning??{},A=R.boardId||"",x=R.logger||{info:console.log,warn:console.warn,error:console.error},D=R.invocationAdapter,N=R.chatFlowRunner||null,E=R.notificationTransport||null,q=R.serverUrl||null,j=R.executionExtra||{},T=R.onSseClientConnected,S=R.onSseClientDisconnected,W=R.onChannelSubscribed,H=R.onChannelUnsubscribed,J=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async(t,e)=>await tt.buildSseOneShotBatch({params:{cardId:t},body:{receiving:e}}),onSseClientDisconnected:S}),f=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async()=>({status:"success",data:{kind:"notification-batch",category:"batch",notifications:[]}})});function g(t){function e(a){return {...a,queueStorageForRef(u,C){return chunkSDJ3747Q_cjs.a(a.queueStorageForRef(u,C),{lane:C,emitNotification:i})}}}function r(a){return {...a,queueStorageForRef(u,C){return chunkZOZ7ZDGA_cjs.h(a.queueStorageForRef(u,C),{lane:C,emitNotification:i})}}}function n(a){return {async get(u){return a.get(u)},async set(u){return a.set(u)},async del(u){return a.del(u)},async patch(u){return a.patch(u)},async appendFiles(u){return a.appendFiles(u)}}}function o(a){return {async get(u){return await a.get(u)},async set(u){return await a.set(u)},async del(u){return await a.del(u)},async patch(u){return await a.patch(u)},async appendFiles(u){return await a.appendFiles(u)}}}let s=null;function i(a){if(a.kind==="notification-batch"){V(a.notifications,s??void 0);return}V([a],s??void 0);}let c=chunkBQUQTOPB_cjs.a(t.boardAdapter)?r(t.boardAdapter):e(t.boardAdapter),M=t.nonCoreAdapter??(!chunkBQUQTOPB_cjs.a(c)&&l(c)?c:null),h=chunkBQUQTOPB_cjs.a(c)?chunkZOZ7ZDGA_cjs.i(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}):chunkEYBDAEVO_cjs.y(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}),_=t.nonCore??(M?chunkEYBDAEVO_cjs.z(t.baseRef,M,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),Ue=c.chatStorageForRef(t.chatStoreRef),dt,We=chunkBQUQTOPB_cjs.a(c)?(()=>{let a=chunkZOZ7ZDGA_cjs.d(chunkZOZ7ZDGA_cjs.c(chunkZOZ7ZDGA_cjs.b(c.kvStorageForRef(t.cardStoreRef)),c.hashFn),x.warn),u=chunkZOZ7ZDGA_cjs.g(a,{emitNotification:i}),C=o(u);return dt={get(m){return C.get(m)},set(m){return C.set(m)}},C})():(()=>{let a=c.kvStorageForRef(t.cardStoreRef),C=chunk5XLFPPTY_cjs.a(chunkEYBDAEVO_cjs.l({readIndex:()=>a.read("_index"),writeIndex:m=>a.write("_index",m),readCard:m=>a.read(m),writeCard:(m,ft)=>(a.write(m,ft),m),removeCard:m=>{a.delete(m);},cardExists:m=>a.read(m)!==null,defaultCardKey:m=>m},x.warn),{emitNotification:i});return dt=C,n(C)})(),lt;if(chunkBQUQTOPB_cjs.a(c)){let a=c.blobStorageForRef(t.artifactsStoreRef);lt={async putBytes(u,C){if(a.writeBytes){await a.writeBytes(u,C);return}let m=JSON.stringify({__kind:"bytes-array",data:[...C]});await a.write(u,m);},async getBytes(u){if(a.readBytes){let m=await a.readBytes(u);if(m!==null)return m}let C=await a.read(u);if(C===null)return null;try{let m=JSON.parse(C);if(m&&m.__kind==="bytes-array"&&Array.isArray(m.data))return new Uint8Array(m.data)}catch{}return new TextEncoder().encode(C)},async listKeys(u){return await a.listKeys(u)}};}else {let a=c.blobStorageForRef(t.artifactsStoreRef),u=chunkNBJTYAYN_cjs.a(a);lt={putBytes(C,m,ft){u.putBytes(C,m,ft);},getBytes(C){return u.getBytes(C)},listKeys(C){return u.list(C).map(m=>m.key)}};}let Je={async init(a){return h.init(a)},async status(a){return h.status(a)},async getConfig(a){return h.getConfig(a)},async getAllOutputsDataObjects(a){return h.getAllOutputsDataObjects(a)},async getAllOutputsComputedValues(a){return h.getAllOutputsComputedValues(a)},async getOutputsFetchedSources(a){return h.getOutputsFetchedSources(a)},async buildSseOneShotPayload(a){return h.buildSseOneShotPayload(a)},async upsertCard(a){return h.upsertCard(a)},async removeCard(a){return h.removeCard(a)},async sourceDataFetched(a){return h.sourceDataFetched(a)},async sourceDataFetchFailure(a){return h.sourceDataFetchFailure(a)}};return s={label:t.label,board:h,nonCore:_,publicCardStore:dt,boardOps:Je,cardStoreOps:We,get filesArtifacts(){return lt},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:chunkNMOUBZXX_cjs.c(),notificationTeardown:null,initialized:false,cardsBootstrapped:false},s}let d=R.boards.map(g),v=new Map;function p(t){return v.get(t)??0}function y(t){return t.queueStoreRef}function O(t,e){if(chunkBQUQTOPB_cjs.a(t.boardAdapter)){let n=t.boardAdapter.queueStorageForRef(y(t),e);return chunkWRMOGPRG_cjs.a(n)}let r=t.boardAdapter.queueStorageForRef(y(t),e);return chunkGPCMBPLK_cjs.a(r)}function l(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function B(t){let e=d[p(t)];return {files:e?e.filesArtifacts:null}}function k(){return chunkNBJTYAYN_cjs.c()}function P(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}function I(t){return "cardId"in t&&typeof t.cardId=="string"?z(t.cardId)??void 0:d[0]??void 0}function F(t){for(let e of t){let r=I(e);if(r)return r}return d[0]??void 0}function L(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??F(r);if(e.appendState!==false&&o&&chunkNMOUBZXX_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&&J.broadcastNotificationBatch(i),s.length>0&&f.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 V(t,e){L(t,{ctx:e,appendState:true,broadcastSse:true,mirrorExternal:true});}async function le(t){if(!t||t.notificationTeardown||!E||!t.notifyRef)return;let e=await E.subscribe(t.notifyRef,r=>{let n=chunkNMOUBZXX_cjs.a(r);L(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 le(t),!t.chatHandlerFlow&&t.chatHandlerRef&&D.describe)try{let o=await D.describe(t.chatHandlerRef);o&&o.kind!=="chat-handler"?x.warn(`[init] chat-handler describe returned kind="${o.kind}", expected "chat-handler" for ${t.label}`):o&&x.info(`[init] chat-handler validated: ${o.name} (protocol ${o.protocolVersion}) for ${t.label}`);}catch(o){x.warn(`[init] chat-handler describe failed for ${t.label}: ${o?.message||String(o)}`);}t.initialized=true;}async function ct(t){let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&chunkNMOUBZXX_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&&L(e,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});}async function gt(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"&&(v.set(o.id,e),await t.boardOps.upsertCard({params:{cardId:o.id}}));t.cardsBootstrapped=true;}async function G(){for(let t of d)await fe(t);}async function at(){await G();for(let t=0;t<d.length;t++)await ct(d[t]),await gt(d[t],t),await ct(d[t]);}async function Rt(t=false){t||await G();for(let e of d){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function z(t){return d[p(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 d)e.push(...await t(r));return e}function yt(){return d[0]??null}function me(t){return z(t)??yt()}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"){V(t.notifications);return}V([t]);}}),ht=chunkNMOUBZXX_cjs.p({boardContexts:d,cardOwnerIndex:v,cardContextForCard:t=>z(t),readStatusSnapshot:()=>be(),readDataObjectsByToken:()=>Ce(),readCardRuntimeArtifacts:()=>Se(),readCardFromStore:t=>X(t),readCardDefinitions:()=>pe(),processAccumulatedLaneInternal:t=>Rt(t),reportSourceFetched:(t,e)=>Bt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>kt(t,{reason:e}),uploadCardFile:(t,e,r,n,o)=>St(t,e,r,n,o),chatStorePublic:tt,serverUrl:q,apiBasePath:w}),Re=ht.mcpCardStoreFacade,st=ht.createMcpFacade,ye=chunkNMOUBZXX_cjs.j({boardId:A,bootstrapBoard:()=>at(),sseHub:J,onChannelSubscribed:W,onChannelUnsubscribed:H,getMcpFacade:()=>st(),getMcpCardStoreFacade:()=>Re()});function he(t){return chunkNMOUBZXX_cjs.m(t)}function we(){return chunkNMOUBZXX_cjs.n(st())}function wt(){return chunkNMOUBZXX_cjs.o({boardId:A,uploadCardFile:St,getMcpFacade:()=>st(),controlplane:ye})}let it=chunkNMOUBZXX_cjs.k({boardId:A,boardContexts:d,readChatRecords:t=>Fe(t),getChatProcessing:t=>ge(t)}),be=it.readStatusSnapshot,Se=it.readCardRuntimeArtifacts,Ce=it.readDataObjectsByToken,ut=it.buildPublishedRuntimePayload;async function bt(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,M=e(i)||i;if(o&&JSON.stringify(M)===c)return;let h=await s.cardStoreOps.set({body:M});if(h.status!=="success")throw Object.assign(new Error(h.error||`Failed to persist card: ${t}`),{statusCode:500});if(n){let _=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(_.status!=="success")throw Object.assign(new Error(_.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Ae(t,e){await bt(t,e,{syncBoard:true});}async function Be(t,e){await bt(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 St=chunkNMOUBZXX_cjs.l({safeCardId:t=>P(t),artifactsStores:t=>B(t),cardFileMetadataStore:()=>k(),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 Ct(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 Ct(t);if(!s){try{await Y(t,!1);}catch{}return}let{ctx:i,handlerFlow:c,handlerRef:M}=s;if(!r)try{await Y(t,!0);}catch{}let h={boardId:A,cardId:String(t),lastChatEntryId:e,...n?{turnId:n}:{},...typeof o=="string"&&o.trim()?{probe:o.trim()}:{},...j,...q?{serverUrl:q}:{}},_=c!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:ue}}:M;chunkBQUQTOPB_cjs.a(i.boardAdapter)?await O(i,"chat-agent").enqueueRequest({boardId:A,ref:_,args:c!=null?{...h,__chatHandlerFlow:c}:h}):O(i,"chat-agent").enqueueRequest({boardId:A,ref:_,args:c!=null?{...h,__chatHandlerFlow:c}:h}),await Promise.resolve(i.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await Y(t,!1);}catch{}x.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)===ue){let n=N,o=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,n?n.run(o,s,{boardId:A,cardId:String(s.cardId||""),label:t.label,logger:x,serverUrl:q,executionExtra:j}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return D.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):yt();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=wt(),i=ve(r?.text),c=i?i.text:r?.text,M=await chunk272IYUKT_cjs.a("manage.add-chat-entry-and-any-attachments",{board_id:A,card_id:t,role:"user",text:c,turn_id:o,files:[]},s);if(M?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(M,`chat-send append failed for card ${t}`));let h=M?.data?.id;if(typeof h!="string"||!h)throw new Error(`chat-send did not return an append id for card ${t}`);let _=await chunk272IYUKT_cjs.a("setstate.chat-processing-started",{board_id:A,card_id:t},s);if(_?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(_,`chat-send processing update failed for card ${t}`));xe(t,h,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=k().normalizeIncoming(r?.files,s);return c.length>0&&k().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,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":o}),t.end(n);}async function At(t,e,r){let n=await X(t);if(!n)throw Object.assign(new Error("Card not found"),{statusCode:404});let o=k().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=P(t),c=B(t),M=String(s.stored_name||""),h=`${i}/${M}`,_=c.files?await c.files.getBytes(h):null;if(!_)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:_}}async function je(t,e,r,n){let{fileRecord:o,bytes:s}=await At(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 Bt(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let n=d[0];return n?n.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function kt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",n=d[0];return n?n.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let De=chunkLFVMX23W_cjs.b({sseHub:J,queueSseHub:f,corsHeaders:b,json:et,buildPublishedRuntimePayload:()=>ut(),onSseClientConnected:T,onChannelSubscribed:W,onChannelUnsubscribed:H,apiBasePath:w,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),bootstrapBoard:()=>at(),boardContexts:d,publishPersistedStateSnapshot:t=>ct(t),upsertCardsFromSource:(t,e)=>gt(t,e)}).handleWatchersRoutes,qe=chunk7FGPOGRV_cjs.a({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpFacade:()=>st(),createMcpToolRegistry:t=>he(t),resolveCardFileDownloadPayload:(t,e,r)=>At(t,e,r),isLikelyTextMimeType:t=>Me(t),sliceTextByLines:(t,e,r)=>_e(t,e,r)}).handleAgentfaceApi,Ie=chunkNM6O35RY_cjs.a({apiBasePath:w,json:et,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),createMcpWebhookToolRegistry:()=>we()}).handleWebhooksApi,$e=ie({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpControlplaneToolRegistry:()=>wt(),retriggerCard:t=>ke(t),applyCardAction:(t,e,r)=>Ee(t,e,r),resolveChatHandlerTarget:t=>Ct(t),sendCardFileDownloadResponse:(t,e,r,n)=>je(t,e,r,n)}).handleRuntimeApi,He=ce({apiBasePath:w,emitNotifications:t=>V(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 w},get corsHeaders(){return b},get queueLaneTuning(){return $},handleRuntimeApi:Le,emitNotification(t){if(t.kind==="notification-batch"){V(t.notifications);return}V([t]);},buildPublishedRuntimePayload:ut,__drainProcessAccumulatedLane:Rt,handleChatAgentRequest:Ne,clearChatRecords:Pe,reportSourceFetched(t,e){return Bt(t,{ref:e})},reportSourceFetchFailure(t,e){return kt(t,{reason:e})},get cardStore(){return d[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 w=String(R.apiBasePath||"/api/boards").replace(/\/$/,""),b={...de,...R.corsHeaders||{}},$=R.serverMetaStore,A=R.boardRuntimeFactory,x=new Map,D="boards-config.json";function N(){let f=$.getText(D);if(!f)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(f)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function E(f){$.putText(D,JSON.stringify(f,null,2));}function q(f){let g=String(f||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return g.length>0&&g.length<=64?g:null}function j(f){if(x.has(f))return x.get(f);let d=N().boards.find(p=>p.id===f)||{},v=A(f,d);return x.set(f,v),v}function T(f,g,d){let v=JSON.stringify(d),p=typeof Buffer<"u"?Buffer.byteLength(v):new TextEncoder().encode(v).length;f.writeHead(g,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":p}),f.end(v);}async function S(f,g,d){let v=f.method||"GET",p=d.pathname;if(v==="GET"&&p===w)return T(g,200,{ok:true,boards:N().boards}),true;if(v==="POST"&&p===w){let y=[];for await(let F of f)y.push(F);let O=typeof Buffer<"u"?Buffer.concat(y).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(y)).trim(),l={};try{l=O?JSON.parse(O):{};}catch{l={};}let B=q(l.id);if(!B)return T(g,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let k=N();if(k.boards.some(F=>F.id===B))return T(g,409,{error:`Board "${B}" is already registered`}),true;let P=typeof l.label=="string"&&l.label.trim()?l.label.trim():B,I={id:B,label:P};for(let[F,L]of Object.entries(l))F==="id"||F==="label"||L!=null&&(I[F]=L);return k.boards.push(I),E(k),T(g,200,{ok:true,board:I}),true}return false}async function W(f,g,d){let p=d.pathname.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/([^/]+)(/|$)`));if(!p)return false;let y=q(decodeURIComponent(p[1]));return y?N().boards.some(B=>B.id===y)?!!await j(y).handleRuntimeApi(f,g,d):(T(g,404,{error:`Board "${y}" not registered. POST ${w} with {id} to register it first.`}),true):(T(g,400,{error:"Invalid board id"}),true)}async function H(f,g,d){return !!(await S(f,g,d)||await W(f,g,d))}function J(f){if(!N().boards.some(d=>d.id===f))throw Object.assign(new Error(`Board "${f}" not registered`),{statusCode:404});return {service:j(f)}}return {get apiBasePath(){return w},get corsHeaders(){return b},handleApi:H,requireBoardService:J}}exports.a=jr;exports.b=Mr;//# sourceMappingURL=chunk-42ZOYXEV.cjs.map
3
- //# sourceMappingURL=chunk-42ZOYXEV.cjs.map
1
+ 'use strict';var chunkLFVMX23W_cjs=require('./chunk-LFVMX23W.cjs'),chunkNM6O35RY_cjs=require('./chunk-NM6O35RY.cjs'),chunkNBJTYAYN_cjs=require('./chunk-NBJTYAYN.cjs'),chunkNMOUBZXX_cjs=require('./chunk-NMOUBZXX.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'),chunkHVLWVMG6_cjs=require('./chunk-HVLWVMG6.cjs'),chunkWRMOGPRG_cjs=require('./chunk-WRMOGPRG.cjs'),chunkBAG7MHZP_cjs=require('./chunk-BAG7MHZP.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 ie(R){let{apiBasePath:w,json:b,readJsonBody:$,bootstrapBoard:A,createMcpControlplaneToolRegistry:x,retriggerCard:D,applyCardAction:N,resolveChatHandlerTarget:E,sendCardFileDownloadResponse:q}=R;async function j(T,S,W){let H=T.method||"GET",J=W,f=J.pathname;try{if(H==="POST"&&f===`${w}/mcp-actions`){await A();let p=Date.now(),y=new Date(p).toISOString(),O=await $(T),l=typeof O.tool=="string"?O.tool.trim():"",B=O.args&&typeof O.args=="object"&&!Array.isArray(O.args)?O.args:{};if(!l)return b(S,400,{error:"tool is required"}),!0;let k=chunkLPXVVMQT_cjs.a(B,"card_id");if(!k)return b(S,400,{error:"MCP action requires card_id"}),!0;if(l==="retrigger-card"||l==="retrigger"){await D(k);let F=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:k,actionType:l,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(F).toISOString(),responseSentAtMs:F,responseStatus:200}}),!0}let P=chunkLPXVVMQT_cjs.c(B,"payload");if(l==="chat-send"&&!await E(k)){let F=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${k}`,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(F).toISOString(),responseSentAtMs:F,responseStatus:409}),!0}if(l==="chat-send"){let F=typeof P["turn-id"]=="string"?P["turn-id"]:typeof P.turnId=="string"?P.turnId:typeof P.turn=="string"?P.turn:"";if(!F||!String(F).trim()){let L=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${k}`,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(L).toISOString(),responseSentAtMs:L,responseStatus:400}),!0}}await N(k,l,P);let I=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:k,actionType:l,requestReceivedAt:y,requestReceivedAtMs:p,responseSentAt:new Date(I).toISOString(),responseSentAtMs:I,responseStatus:200}}),!0}if(H==="POST"&&f===`${w}/mcp-controlplane`){await A();let p=await $(T),y=typeof p.tool=="string"?p.tool.trim():"",O=p.args&&typeof p.args=="object"&&!Array.isArray(p.args)?p.args:{};if(!y)return b(S,400,{error:"tool is required"}),!0;try{let l=await chunk272IYUKT_cjs.a(y,O,x());if(l&&typeof l=="object"&&!Array.isArray(l)){let B=l;if(B.status==="fail")return b(S,400,{error:chunk272IYUKT_cjs.b(l,"Request failed")}),!0;if(B.status==="error")return b(S,500,{error:chunk272IYUKT_cjs.b(l,"Internal error")}),!0}b(S,200,l);}catch(l){let B=typeof l?.statusCode=="number"?Number(l.statusCode):500,k=l instanceof Error?l.message:String(l);b(S,B,{error:k});}return !0}let g=f.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/retrigger$`));if(H==="POST"&&g){await A();let p=decodeURIComponent(g[1]);return await D(p),b(S,200,{ok:!0}),!0}let d=f.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/actions$`));if(H==="POST"&&d){await A();let p=decodeURIComponent(d[1]),y=Date.now(),O=new Date(y).toISOString(),l=await $(T),B=l?.actionType;if(B==="chat-send"&&!await E(p)){let P=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${p}`,requestReceivedAt:O,requestReceivedAtMs:y,responseSentAt:new Date(P).toISOString(),responseSentAtMs:P,responseStatus:409}),!0}if(B==="chat-send"){let P=l?.payload??{},I=typeof P["turn-id"]=="string"?P["turn-id"]:typeof P.turnId=="string"?P.turnId:typeof P.turn=="string"?P.turn:"";if(!I||!String(I).trim()){let F=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${p}`,requestReceivedAt:O,requestReceivedAtMs:y,responseSentAt:new Date(F).toISOString(),responseSentAtMs:F,responseStatus:400}),!0}}await N(p,B,l?.payload);let k=Date.now();return b(S,200,{ok:!0,requestReceivedAt:O,requestReceivedAtMs:y,responseSentAt:new Date(k).toISOString(),responseSentAtMs:k,responseStatus:200}),!0}let v=f.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/files/(\\d+)$`));if(H==="GET"&&v){let p=decodeURIComponent(v[1]),y=parseInt(v[2],10),O=J.searchParams.get("sn");return await q(S,p,y,O),!0}return !1}catch(g){let d=g?.statusCode||500;return b(S,d,{error:String(g?.message||g)}),true}}return {handleRuntimeApi:j}}var ze=3e4;function Ke(R){let w=R.socket?.remoteAddress??"";return w==="127.0.0.1"||w==="::1"||w==="::ffff:127.0.0.1"}function ce(R){let{apiBasePath:w,emitNotifications:b,readJsonBody:$,json:A}=R,x=`${w}/notify-q`;async function D(N,E,q){if(q.pathname!==x)return false;if((N.method??"").toUpperCase()!=="POST")return A(E,405,{status:"error",error:"Method not allowed"}),true;if(!Ke(N))return A(E,403,{status:"error",error:"Forbidden"}),true;let j;try{j=await $(N);}catch{return A(E,400,{status:"error",error:"Invalid JSON body"}),true}if(!j||typeof j!="object"||!Array.isArray(j.notifications))return A(E,400,{status:"error",error:"body.notifications must be an array"}),true;let T=j.notifications,{accepted:S,rejected:W}=chunkNMOUBZXX_cjs.b(T,Date.now(),ze);return S.length>0&&b(S),A(E,200,{status:"success",data:{accepted:S.length,rejected:W}}),true}return {handleNotifyRoute:D}}var de={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},ue="chat-handler-flow-queue",ot="__probe__echo__probe__";function jr(R){let w=String(R.apiBasePath||"/api/board").replace(/\/$/,""),b={...de,...R.corsHeaders||{}},$=R.queueLaneTuning??{},A=R.boardId||"",x=R.logger||{info:console.log,warn:console.warn,error:console.error},D=R.invocationAdapter,N=R.chatFlowRunner||null,E=R.notificationTransport||null,q=R.serverUrl||null,j=R.executionExtra||{},T=R.onSseClientConnected,S=R.onSseClientDisconnected,W=R.onChannelSubscribed,H=R.onChannelUnsubscribed,J=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async(t,e)=>await tt.buildSseOneShotBatch({params:{cardId:t},body:{receiving:e}}),onSseClientDisconnected:S}),f=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async()=>({status:"success",data:{kind:"notification-batch",category:"batch",notifications:[]}})});function g(t){function e(a){return {...a,queueStorageForRef(u,C){return chunkSDJ3747Q_cjs.a(a.queueStorageForRef(u,C),{lane:C,emitNotification:i})}}}function r(a){return {...a,queueStorageForRef(u,C){return chunkHVLWVMG6_cjs.h(a.queueStorageForRef(u,C),{lane:C,emitNotification:i})}}}function n(a){return {async get(u){return a.get(u)},async set(u){return a.set(u)},async del(u){return a.del(u)},async patch(u){return a.patch(u)},async appendFiles(u){return a.appendFiles(u)}}}function o(a){return {async get(u){return await a.get(u)},async set(u){return await a.set(u)},async del(u){return await a.del(u)},async patch(u){return await a.patch(u)},async appendFiles(u){return await a.appendFiles(u)}}}let s=null;function i(a){if(a.kind==="notification-batch"){V(a.notifications,s??void 0);return}V([a],s??void 0);}let c=chunkBQUQTOPB_cjs.a(t.boardAdapter)?r(t.boardAdapter):e(t.boardAdapter),M=t.nonCoreAdapter??(!chunkBQUQTOPB_cjs.a(c)&&l(c)?c:null),h=chunkBQUQTOPB_cjs.a(c)?chunkHVLWVMG6_cjs.i(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}):chunkBAG7MHZP_cjs.F(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}),_=t.nonCore??(M?chunkBAG7MHZP_cjs.G(t.baseRef,M,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),Ue=c.chatStorageForRef(t.chatStoreRef),dt,We=chunkBQUQTOPB_cjs.a(c)?(()=>{let a=chunkHVLWVMG6_cjs.d(chunkHVLWVMG6_cjs.c(chunkHVLWVMG6_cjs.b(c.kvStorageForRef(t.cardStoreRef)),c.hashFn),x.warn),u=chunkHVLWVMG6_cjs.g(a,{emitNotification:i}),C=o(u);return dt={get(m){return C.get(m)},set(m){return C.set(m)}},C})():(()=>{let a=c.kvStorageForRef(t.cardStoreRef),C=chunk5XLFPPTY_cjs.a(chunkBAG7MHZP_cjs.q({readIndex:()=>a.read("_index"),writeIndex:m=>a.write("_index",m),readCard:m=>a.read(m),writeCard:(m,ft)=>(a.write(m,ft),m),removeCard:m=>{a.delete(m);},cardExists:m=>a.read(m)!==null,defaultCardKey:m=>m},x.warn),{emitNotification:i});return dt=C,n(C)})(),lt;if(chunkBQUQTOPB_cjs.a(c)){let a=c.blobStorageForRef(t.artifactsStoreRef);lt={async putBytes(u,C){if(a.writeBytes){await a.writeBytes(u,C);return}let m=JSON.stringify({__kind:"bytes-array",data:[...C]});await a.write(u,m);},async getBytes(u){if(a.readBytes){let m=await a.readBytes(u);if(m!==null)return m}let C=await a.read(u);if(C===null)return null;try{let m=JSON.parse(C);if(m&&m.__kind==="bytes-array"&&Array.isArray(m.data))return new Uint8Array(m.data)}catch{}return new TextEncoder().encode(C)},async listKeys(u){return await a.listKeys(u)}};}else {let a=c.blobStorageForRef(t.artifactsStoreRef),u=chunkNBJTYAYN_cjs.a(a);lt={putBytes(C,m,ft){u.putBytes(C,m,ft);},getBytes(C){return u.getBytes(C)},listKeys(C){return u.list(C).map(m=>m.key)}};}let Je={async init(a){return h.init(a)},async status(a){return h.status(a)},async getConfig(a){return h.getConfig(a)},async getAllOutputsDataObjects(a){return h.getAllOutputsDataObjects(a)},async getAllOutputsComputedValues(a){return h.getAllOutputsComputedValues(a)},async getOutputsFetchedSources(a){return h.getOutputsFetchedSources(a)},async buildSseOneShotPayload(a){return h.buildSseOneShotPayload(a)},async upsertCard(a){return h.upsertCard(a)},async removeCard(a){return h.removeCard(a)},async sourceDataFetched(a){return h.sourceDataFetched(a)},async sourceDataFetchFailure(a){return h.sourceDataFetchFailure(a)}};return s={label:t.label,board:h,nonCore:_,publicCardStore:dt,boardOps:Je,cardStoreOps:We,get filesArtifacts(){return lt},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:chunkNMOUBZXX_cjs.c(),notificationTeardown:null,initialized:false,cardsBootstrapped:false},s}let d=R.boards.map(g),v=new Map;function p(t){return v.get(t)??0}function y(t){return t.queueStoreRef}function O(t,e){if(chunkBQUQTOPB_cjs.a(t.boardAdapter)){let n=t.boardAdapter.queueStorageForRef(y(t),e);return chunkWRMOGPRG_cjs.a(n)}let r=t.boardAdapter.queueStorageForRef(y(t),e);return chunkGPCMBPLK_cjs.a(r)}function l(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function B(t){let e=d[p(t)];return {files:e?e.filesArtifacts:null}}function k(){return chunkNBJTYAYN_cjs.c()}function P(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}function I(t){return "cardId"in t&&typeof t.cardId=="string"?z(t.cardId)??void 0:d[0]??void 0}function F(t){for(let e of t){let r=I(e);if(r)return r}return d[0]??void 0}function L(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??F(r);if(e.appendState!==false&&o&&chunkNMOUBZXX_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&&J.broadcastNotificationBatch(i),s.length>0&&f.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 V(t,e){L(t,{ctx:e,appendState:true,broadcastSse:true,mirrorExternal:true});}async function le(t){if(!t||t.notificationTeardown||!E||!t.notifyRef)return;let e=await E.subscribe(t.notifyRef,r=>{let n=chunkNMOUBZXX_cjs.a(r);L(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 le(t),!t.chatHandlerFlow&&t.chatHandlerRef&&D.describe)try{let o=await D.describe(t.chatHandlerRef);o&&o.kind!=="chat-handler"?x.warn(`[init] chat-handler describe returned kind="${o.kind}", expected "chat-handler" for ${t.label}`):o&&x.info(`[init] chat-handler validated: ${o.name} (protocol ${o.protocolVersion}) for ${t.label}`);}catch(o){x.warn(`[init] chat-handler describe failed for ${t.label}: ${o?.message||String(o)}`);}t.initialized=true;}async function ct(t){let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&chunkNMOUBZXX_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&&L(e,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});}async function gt(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"&&(v.set(o.id,e),await t.boardOps.upsertCard({params:{cardId:o.id}}));t.cardsBootstrapped=true;}async function G(){for(let t of d)await fe(t);}async function at(){await G();for(let t=0;t<d.length;t++)await ct(d[t]),await gt(d[t],t),await ct(d[t]);}async function Rt(t=false){t||await G();for(let e of d){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function z(t){return d[p(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 d)e.push(...await t(r));return e}function yt(){return d[0]??null}function me(t){return z(t)??yt()}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"){V(t.notifications);return}V([t]);}}),ht=chunkNMOUBZXX_cjs.p({boardContexts:d,cardOwnerIndex:v,cardContextForCard:t=>z(t),readStatusSnapshot:()=>be(),readDataObjectsByToken:()=>Ce(),readCardRuntimeArtifacts:()=>Se(),readCardFromStore:t=>X(t),readCardDefinitions:()=>pe(),processAccumulatedLaneInternal:t=>Rt(t),reportSourceFetched:(t,e)=>Bt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>kt(t,{reason:e}),uploadCardFile:(t,e,r,n,o)=>St(t,e,r,n,o),chatStorePublic:tt,serverUrl:q,apiBasePath:w}),Re=ht.mcpCardStoreFacade,st=ht.createMcpFacade,ye=chunkNMOUBZXX_cjs.j({boardId:A,bootstrapBoard:()=>at(),sseHub:J,onChannelSubscribed:W,onChannelUnsubscribed:H,getMcpFacade:()=>st(),getMcpCardStoreFacade:()=>Re()});function he(t){return chunkNMOUBZXX_cjs.m(t)}function we(){return chunkNMOUBZXX_cjs.n(st())}function wt(){return chunkNMOUBZXX_cjs.o({boardId:A,uploadCardFile:St,getMcpFacade:()=>st(),controlplane:ye})}let it=chunkNMOUBZXX_cjs.k({boardId:A,boardContexts:d,readChatRecords:t=>Fe(t),getChatProcessing:t=>ge(t)}),be=it.readStatusSnapshot,Se=it.readCardRuntimeArtifacts,Ce=it.readDataObjectsByToken,ut=it.buildPublishedRuntimePayload;async function bt(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,M=e(i)||i;if(o&&JSON.stringify(M)===c)return;let h=await s.cardStoreOps.set({body:M});if(h.status!=="success")throw Object.assign(new Error(h.error||`Failed to persist card: ${t}`),{statusCode:500});if(n){let _=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(_.status!=="success")throw Object.assign(new Error(_.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Ae(t,e){await bt(t,e,{syncBoard:true});}async function Be(t,e){await bt(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 St=chunkNMOUBZXX_cjs.l({safeCardId:t=>P(t),artifactsStores:t=>B(t),cardFileMetadataStore:()=>k(),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 Ct(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 Ct(t);if(!s){try{await Y(t,!1);}catch{}return}let{ctx:i,handlerFlow:c,handlerRef:M}=s;if(!r)try{await Y(t,!0);}catch{}let h={boardId:A,cardId:String(t),lastChatEntryId:e,...n?{turnId:n}:{},...typeof o=="string"&&o.trim()?{probe:o.trim()}:{},...j,...q?{serverUrl:q}:{}},_=c!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:ue}}:M;chunkBQUQTOPB_cjs.a(i.boardAdapter)?await O(i,"chat-agent").enqueueRequest({boardId:A,ref:_,args:c!=null?{...h,__chatHandlerFlow:c}:h}):O(i,"chat-agent").enqueueRequest({boardId:A,ref:_,args:c!=null?{...h,__chatHandlerFlow:c}:h}),await Promise.resolve(i.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await Y(t,!1);}catch{}x.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)===ue){let n=N,o=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,n?n.run(o,s,{boardId:A,cardId:String(s.cardId||""),label:t.label,logger:x,serverUrl:q,executionExtra:j}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return D.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):yt();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=wt(),i=ve(r?.text),c=i?i.text:r?.text,M=await chunk272IYUKT_cjs.a("manage.add-chat-entry-and-any-attachments",{board_id:A,card_id:t,role:"user",text:c,turn_id:o,files:[]},s);if(M?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(M,`chat-send append failed for card ${t}`));let h=M?.data?.id;if(typeof h!="string"||!h)throw new Error(`chat-send did not return an append id for card ${t}`);let _=await chunk272IYUKT_cjs.a("setstate.chat-processing-started",{board_id:A,card_id:t},s);if(_?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(_,`chat-send processing update failed for card ${t}`));xe(t,h,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=k().normalizeIncoming(r?.files,s);return c.length>0&&k().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,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":o}),t.end(n);}async function At(t,e,r){let n=await X(t);if(!n)throw Object.assign(new Error("Card not found"),{statusCode:404});let o=k().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=P(t),c=B(t),M=String(s.stored_name||""),h=`${i}/${M}`,_=c.files?await c.files.getBytes(h):null;if(!_)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:_}}async function je(t,e,r,n){let{fileRecord:o,bytes:s}=await At(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 Bt(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let n=d[0];return n?n.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function kt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",n=d[0];return n?n.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let De=chunkLFVMX23W_cjs.b({sseHub:J,queueSseHub:f,corsHeaders:b,json:et,buildPublishedRuntimePayload:()=>ut(),onSseClientConnected:T,onChannelSubscribed:W,onChannelUnsubscribed:H,apiBasePath:w,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),bootstrapBoard:()=>at(),boardContexts:d,publishPersistedStateSnapshot:t=>ct(t),upsertCardsFromSource:(t,e)=>gt(t,e)}).handleWatchersRoutes,qe=chunk7FGPOGRV_cjs.a({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpFacade:()=>st(),createMcpToolRegistry:t=>he(t),resolveCardFileDownloadPayload:(t,e,r)=>At(t,e,r),isLikelyTextMimeType:t=>Me(t),sliceTextByLines:(t,e,r)=>_e(t,e,r)}).handleAgentfaceApi,Ie=chunkNM6O35RY_cjs.a({apiBasePath:w,json:et,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),createMcpWebhookToolRegistry:()=>we()}).handleWebhooksApi,$e=ie({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpControlplaneToolRegistry:()=>wt(),retriggerCard:t=>ke(t),applyCardAction:(t,e,r)=>Ee(t,e,r),resolveChatHandlerTarget:t=>Ct(t),sendCardFileDownloadResponse:(t,e,r,n)=>je(t,e,r,n)}).handleRuntimeApi,He=ce({apiBasePath:w,emitNotifications:t=>V(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 w},get corsHeaders(){return b},get queueLaneTuning(){return $},handleRuntimeApi:Le,emitNotification(t){if(t.kind==="notification-batch"){V(t.notifications);return}V([t]);},buildPublishedRuntimePayload:ut,__drainProcessAccumulatedLane:Rt,handleChatAgentRequest:Ne,clearChatRecords:Pe,reportSourceFetched(t,e){return Bt(t,{ref:e})},reportSourceFetchFailure(t,e){return kt(t,{reason:e})},get cardStore(){return d[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 w=String(R.apiBasePath||"/api/boards").replace(/\/$/,""),b={...de,...R.corsHeaders||{}},$=R.serverMetaStore,A=R.boardRuntimeFactory,x=new Map,D="boards-config.json";function N(){let f=$.getText(D);if(!f)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(f)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function E(f){$.putText(D,JSON.stringify(f,null,2));}function q(f){let g=String(f||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return g.length>0&&g.length<=64?g:null}function j(f){if(x.has(f))return x.get(f);let d=N().boards.find(p=>p.id===f)||{},v=A(f,d);return x.set(f,v),v}function T(f,g,d){let v=JSON.stringify(d),p=typeof Buffer<"u"?Buffer.byteLength(v):new TextEncoder().encode(v).length;f.writeHead(g,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":p}),f.end(v);}async function S(f,g,d){let v=f.method||"GET",p=d.pathname;if(v==="GET"&&p===w)return T(g,200,{ok:true,boards:N().boards}),true;if(v==="POST"&&p===w){let y=[];for await(let F of f)y.push(F);let O=typeof Buffer<"u"?Buffer.concat(y).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(y)).trim(),l={};try{l=O?JSON.parse(O):{};}catch{l={};}let B=q(l.id);if(!B)return T(g,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let k=N();if(k.boards.some(F=>F.id===B))return T(g,409,{error:`Board "${B}" is already registered`}),true;let P=typeof l.label=="string"&&l.label.trim()?l.label.trim():B,I={id:B,label:P};for(let[F,L]of Object.entries(l))F==="id"||F==="label"||L!=null&&(I[F]=L);return k.boards.push(I),E(k),T(g,200,{ok:true,board:I}),true}return false}async function W(f,g,d){let p=d.pathname.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/([^/]+)(/|$)`));if(!p)return false;let y=q(decodeURIComponent(p[1]));return y?N().boards.some(B=>B.id===y)?!!await j(y).handleRuntimeApi(f,g,d):(T(g,404,{error:`Board "${y}" not registered. POST ${w} with {id} to register it first.`}),true):(T(g,400,{error:"Invalid board id"}),true)}async function H(f,g,d){return !!(await S(f,g,d)||await W(f,g,d))}function J(f){if(!N().boards.some(d=>d.id===f))throw Object.assign(new Error(`Board "${f}" not registered`),{statusCode:404});return {service:j(f)}}return {get apiBasePath(){return w},get corsHeaders(){return b},handleApi:H,requireBoardService:J}}exports.a=jr;exports.b=Mr;//# sourceMappingURL=chunk-YQ4MW72D.cjs.map
3
+ //# sourceMappingURL=chunk-YQ4MW72D.cjs.map
@@ -1,2 +1,2 @@
1
- 'use strict';var chunk6EJRZHFP_cjs=require('./chunk-6EJRZHFP.cjs'),chunkZOZ7ZDGA_cjs=require('./chunk-ZOZ7ZDGA.cjs'),chunkWRMOGPRG_cjs=require('./chunk-WRMOGPRG.cjs');require('./chunk-EYBDAEVO.cjs'),require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-QBEQL4TL.cjs'),require('./chunk-QEHKMLHA.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 chunkZOZ7ZDGA_cjs.i}});Object.defineProperty(exports,"createAsyncCardStorageAdapter",{enumerable:true,get:function(){return chunkZOZ7ZDGA_cjs.c}});Object.defineProperty(exports,"createAsyncCardStore",{enumerable:true,get:function(){return chunkZOZ7ZDGA_cjs.d}});Object.defineProperty(exports,"createAsyncCardStorePublic",{enumerable:true,get:function(){return chunkZOZ7ZDGA_cjs.g}});Object.defineProperty(exports,"createAsyncJsonStorage",{enumerable:true,get:function(){return chunkZOZ7ZDGA_cjs.b}});Object.defineProperty(exports,"createAsyncQueueStoragePublic",{enumerable:true,get:function(){return chunkZOZ7ZDGA_cjs.h}});Object.defineProperty(exports,"createAsyncStateSnapshotAdapter",{enumerable:true,get:function(){return chunkZOZ7ZDGA_cjs.e}});Object.defineProperty(exports,"createAsyncStorageProvider",{enumerable:true,get:function(){return chunkZOZ7ZDGA_cjs.f}});Object.defineProperty(exports,"withAsyncRelayLock",{enumerable:true,get:function(){return chunkZOZ7ZDGA_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
1
+ 'use strict';var chunk6EJRZHFP_cjs=require('./chunk-6EJRZHFP.cjs'),chunkHVLWVMG6_cjs=require('./chunk-HVLWVMG6.cjs'),chunkWRMOGPRG_cjs=require('./chunk-WRMOGPRG.cjs');require('./chunk-BAG7MHZP.cjs'),require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-QBEQL4TL.cjs'),require('./chunk-QEHKMLHA.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 chunkHVLWVMG6_cjs.i}});Object.defineProperty(exports,"createAsyncCardStorageAdapter",{enumerable:true,get:function(){return chunkHVLWVMG6_cjs.c}});Object.defineProperty(exports,"createAsyncCardStore",{enumerable:true,get:function(){return chunkHVLWVMG6_cjs.d}});Object.defineProperty(exports,"createAsyncCardStorePublic",{enumerable:true,get:function(){return chunkHVLWVMG6_cjs.g}});Object.defineProperty(exports,"createAsyncJsonStorage",{enumerable:true,get:function(){return chunkHVLWVMG6_cjs.b}});Object.defineProperty(exports,"createAsyncQueueStoragePublic",{enumerable:true,get:function(){return chunkHVLWVMG6_cjs.h}});Object.defineProperty(exports,"createAsyncStateSnapshotAdapter",{enumerable:true,get:function(){return chunkHVLWVMG6_cjs.e}});Object.defineProperty(exports,"createAsyncStorageProvider",{enumerable:true,get:function(){return chunkHVLWVMG6_cjs.f}});Object.defineProperty(exports,"withAsyncRelayLock",{enumerable:true,get:function(){return chunkHVLWVMG6_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
@@ -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-HFI2NAZJ.js';export{b as createAsyncBoardConfigStore,a as createAsyncBoardWorkerStore,c as createHostedAsyncBoardPlatformAdapter}from'./chunk-6MD6FVE3.js';import'./chunk-AHW6EMUO.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-ATOQP3BD.js';import'./chunk-YT76JNKE.js';import'./chunk-MNEOJWPS.js';import'./chunk-7QNEV5S3.js';import'./chunk-UGB7PC4P.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=cloud-storage.js.map
1
+ export{d as createAzureBlobStorage,e as createAzureQueueStorage,c as createCosmosAtomicRelayLock,b as createCosmosJournalStorage,a as createCosmosKvStorage}from'./chunk-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-5VTIOM2U.js';export{b as createAsyncBoardConfigStore,a as createAsyncBoardWorkerStore,c as createHostedAsyncBoardPlatformAdapter}from'./chunk-6MD6FVE3.js';import'./chunk-EZOXABJ2.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-ATOQP3BD.js';import'./chunk-YT76JNKE.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