yaml-flow 8.11.7 → 8.11.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/asset-integrity.json +5 -5
- package/browser/live-cards.schema.json +779 -150
- package/browser/server-runtime-controlface.js +4 -4
- package/examples/board/cards/card-rebalance-sim.json +11 -6
- package/examples/board/cards/cardT-market-prices.json +3 -1
- package/examples/board/cards/cardT-portfolio-value.json +3 -1
- package/examples/board/cards/cardT-portfolio.json +4 -2
- package/examples/board/test/server-http-test-browser.ts +3 -1
- package/examples/board/test/server-http-test.js +3 -1
- package/examples/portfolio-tracker/portfolio-tracker.js +2 -2
- package/examples/portfolio-tracker/test/portfolio-t4.js +2 -2
- package/lib/board-live-cards-mcp.cjs +1 -1
- package/lib/board-live-cards-mcp.js +1 -1
- package/lib/board-live-cards-node.cjs +6 -6
- package/lib/board-live-cards-node.js +6 -6
- package/lib/board-live-cards-public.cjs +1 -1
- package/lib/board-live-cards-public.js +1 -1
- package/lib/board-live-cards-server-runtime.cjs +1 -1
- package/lib/board-live-cards-server-runtime.js +1 -1
- package/lib/board-livegraph-runtime/index.cjs +1 -1
- package/lib/board-livegraph-runtime/index.d.cts +1 -1
- package/lib/board-livegraph-runtime/index.d.ts +1 -1
- package/lib/board-livegraph-runtime/index.js +1 -1
- package/lib/card-compute/index.cjs +1 -1
- package/lib/card-compute/index.d.cts +6 -0
- package/lib/card-compute/index.d.ts +6 -0
- package/lib/card-compute/index.js +1 -1
- package/lib/card-store-public.cjs +1 -1
- package/lib/card-store-public.js +1 -1
- package/lib/card-validation.cjs +1 -1
- package/lib/card-validation.js +1 -1
- package/lib/{chunk-TUQ6JBER.cjs → chunk-22S5GCQK.cjs} +3 -3
- package/lib/{chunk-HKPVF5UI.js → chunk-3C52UCJC.js} +3 -3
- package/lib/{chunk-NOAERAOE.cjs → chunk-3HCH2ZFB.cjs} +2 -2
- package/lib/chunk-66ZZIF2L.cjs +2 -0
- package/lib/{chunk-EHREWADE.js → chunk-72FB4M6P.js} +2 -2
- package/lib/chunk-AW6XLBHX.cjs +2 -0
- package/lib/chunk-BSZYTSFX.js +2 -0
- package/lib/chunk-C7OY3PYL.js +3 -0
- package/lib/chunk-C7RR2JCL.cjs +3 -0
- package/lib/chunk-CAID4CGO.cjs +2 -0
- package/lib/chunk-CVTL2EFR.js +3 -0
- package/lib/chunk-E7SDEZSI.js +3 -0
- package/lib/{chunk-I3ZOFU3F.js → chunk-F6KRSQ7V.js} +2 -2
- package/lib/chunk-G5UUXBIB.cjs +2 -0
- package/lib/{chunk-23PEDGFN.js → chunk-K2VRX4TC.js} +2 -2
- package/lib/chunk-ONJG6QW6.js +2 -0
- package/lib/{chunk-52XPRCZC.cjs → chunk-P4WQJ7LA.cjs} +2 -2
- package/lib/chunk-P7STTKRO.cjs +3 -0
- package/lib/{chunk-YAPTL2MP.cjs → chunk-PYYRDOD5.cjs} +2 -2
- package/lib/chunk-QE3QXEHI.js +2 -0
- package/lib/chunk-QJQ53PLM.js +2 -0
- package/lib/chunk-TIQ775WI.cjs +3 -0
- package/lib/cloud-storage.cjs +1 -1
- package/lib/cloud-storage.js +1 -1
- package/lib/continuous-event-graph/index.cjs +1 -1
- package/lib/continuous-event-graph/index.d.cts +2 -2
- package/lib/continuous-event-graph/index.d.ts +2 -2
- package/lib/continuous-event-graph/index.js +1 -1
- package/lib/firestore-storage/index.cjs +1 -1
- package/lib/firestore-storage/index.js +1 -1
- package/lib/index.cjs +2 -2
- package/lib/index.d.cts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/{live-cards-bridge-Bwi-lbBT.d.cts → live-cards-bridge-D8kP3uog.d.cts} +2 -2
- package/lib/{live-cards-bridge-YL6AWawT.d.ts → live-cards-bridge-DMBSDgpk.d.ts} +2 -2
- package/lib/localstorage-storage/index.cjs +1 -1
- package/lib/localstorage-storage/index.js +1 -1
- package/lib/server-runtime/index.cjs +1 -1
- package/lib/server-runtime/index.js +1 -1
- package/lib/server-runtime-controlface/index.cjs +1 -1
- package/lib/server-runtime-controlface/index.js +1 -1
- package/lib/server-runtime-core/index.cjs +1 -1
- package/lib/server-runtime-core/index.js +1 -1
- package/package.json +2 -1
- package/schema/live-cards.schema.json +779 -150
- package/browser/live-cards.js +0 -108
- package/lib/chunk-2LGCYN35.js +0 -2
- package/lib/chunk-3XPY7CCM.cjs +0 -3
- package/lib/chunk-6M3RIGUH.js +0 -2
- package/lib/chunk-ATOQP3BD.js +0 -2
- package/lib/chunk-CPJXGK2T.cjs +0 -2
- package/lib/chunk-GHUW6P4G.cjs +0 -2
- package/lib/chunk-J7KE7SPA.cjs +0 -2
- package/lib/chunk-K5TEZRZK.cjs +0 -3
- package/lib/chunk-QBEQL4TL.cjs +0 -2
- package/lib/chunk-QEHKMLHA.cjs +0 -3
- package/lib/chunk-RKLEBQUG.js +0 -3
- package/lib/chunk-WGYS2L4V.js +0 -2
- package/lib/chunk-X32SJDLT.js +0 -3
- package/lib/chunk-YT76JNKE.js +0 -3
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {a as a$3}from'./chunk-Y4WK7HE4.js';export{a as createChatStorage,c as createInMemoryChatStorage}from'./chunk-Y4WK7HE4.js';import {a as a$6}from'./chunk-
|
|
1
|
+
import {a as a$3}from'./chunk-Y4WK7HE4.js';export{a as createChatStorage,c as createInMemoryChatStorage}from'./chunk-Y4WK7HE4.js';import {a as a$6}from'./chunk-BSZYTSFX.js';import {a as a$4}from'./chunk-O5UYCGIN.js';export{a as createArtifactsStore,c as createCardFileMetadataStore,b as createFileArtifactsStore}from'./chunk-O5UYCGIN.js';import {a as a$5}from'./chunk-RKKSVOP2.js';export{a as createBoardWorkerStore,b as createQueueLaneRegistry}from'./chunk-RKKSVOP2.js';import {h}from'./chunk-J4MHQ7JF.js';import {a as a$1}from'./chunk-VGDLSS2H.js';export{a as createBoardContainerLifecycle}from'./chunk-F3A3ZNF6.js';import'./chunk-QLB6PKOT.js';import'./chunk-E7SDEZSI.js';import {b as b$1}from'./chunk-PEJRTZU3.js';import {d,e}from'./chunk-C7OY3PYL.js';export{f as createBoardLiveCardsNonCorePublic,e as createBoardLiveCardsPublic,b as createHttpBoardCallbackTransport,c as createInProcessBoardCallbackTransport,d as createLocalNodeBoardCallbackTransport}from'./chunk-C7OY3PYL.js';import'./chunk-FULAMLUU.js';import'./chunk-EOVTMJYZ.js';export{a as createBoardLiveCardsMcp}from'./chunk-ONJG6QW6.js';export{q as BOARD_GRAPH_KEY,D as EMPTY_CONFIG,p as SNAPSHOT_SCHEMA_VERSION_V1,m as createCardStore,H as createCardStorePublic}from'./chunk-QJQ53PLM.js';export{a as executionRefFromScriptPath,c as parseExecutionRef,b as serializeExecutionRef}from'./chunk-ANKA7HEJ.js';import {a as a$2,b}from'./chunk-44L64VQ2.js';export{b as parseRef,a as serializeRef}from'./chunk-44L64VQ2.js';import'./chunk-Q444D72R.js';import'./chunk-R7SQQSDX.js';import {a as a$7}from'./chunk-QE3QXEHI.js';import {d as d$1}from'./chunk-CVTL2EFR.js';import'./chunk-MNEOJWPS.js';export{a as createQueueStoragePublic}from'./chunk-BJGK5FNL.js';export{a as createArtifactsStorePublic}from'./chunk-X3LC4LII.js';import'./chunk-UGB7PC4P.js';import'./chunk-FW4363Y4.js';import {spawn,spawnSync,execFile,execFileSync}from'child_process';import*as a from'fs';import a__default from'fs';import*as Je from'os';import*as v from'path';import v__default from'path';import*as Ke from'net';import {fileURLToPath}from'url';import {randomUUID,createHash}from'crypto';import {createRequire}from'module';import {lockSync}from'proper-lockfile';function P(...e){return v.join(...e)}function We(e){return v.isAbsolute(e)}function pe(){return randomUUID()}function He(e){return createHash("sha256").update(e).digest("hex")}function Ve(e){return v.dirname(fileURLToPath(e))}function Qt(e){if(typeof e=="object"&&e!==null){let{command:r,args:o=[],...n}=e,s=De(r,o);return {...n,command:s.command,args:s.args}}let t=Ue(e);if(t.length===0)throw new Error(`Empty command spec: ${JSON.stringify(e)}`);return De(t[0],t.slice(1))}function De(e,t){return /^(node|node\.exe)$/i.test(e)?{command:process.execPath,args:t}:/\.m?js$/i.test(e)?{command:process.execPath,args:[e,...t]}:{command:e,args:t}}function Ue(e){let t=[],r="",o=null;for(let n of e.trim()){if(o){n===o?o=null:r+=n;continue}if(n==='"'||n==="'"){o=n;continue}if(/\s/.test(n)){r&&(t.push(r),r="");continue}r+=n;}if(o)throw new Error(`Unterminated quote in command: ${e}`);return r&&t.push(r),t}function ze(e){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(e)}function Ge(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:d}=e;return execFileSync(r,o,{shell:ze(r),timeout:d,encoding:t?.encoding??"utf-8",cwd:n,windowsHide:true,env:s?{...process.env,...s}:void 0,input:t?.input})}function Dt(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:d=3e4}=e;execFile(r,o,{shell:ze(r),encoding:"utf8",windowsHide:true,timeout:d,maxBuffer:10*1024*1024,cwd:n,env:s?{...process.env,...s}:void 0},(g,x,u)=>t(g??null,x,u));}function Ye(e,t,r){let o=v.join(e,"board-live-cards-cli.js");if(a.existsSync(o))return {cmd:process.execPath,args:[o,t,...r]};let n=v.join(e,"board-live-cards-cli.ts"),d=[v.join(e,"..","..","..","node_modules","tsx","dist","cli.mjs"),v.join(e,"..","..","node_modules","tsx","dist","cli.mjs"),v.join(e,"..","..","..","node_modules",".bin","tsx"),v.join(e,"..","..","node_modules",".bin","tsx")].find(x=>a.existsSync(x));return a.existsSync(n)&&d?{cmd:process.execPath,args:[d,n,t,...r]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",n,t,...r]}}function Ze(e){let t=v.join(e,"board-live-cards-cli.mjs");if(a.existsSync(t))return t;let r=v.join(e,"..","..","..","dev","board-live-cards-cli.js");if(a.existsSync(r))return r;let o=v.join(e,"..","..","dev","board-live-cards-cli.js");if(a.existsSync(o))return o;let n=v.join(e,"board-live-cards-cli.js");if(a.existsSync(n))return n;throw new Error(`resolveBoardCliCallbackTarget: cannot find callback target in ${e} (expected dev/board-live-cards-cli.js wrapper, ${n}, or ${t})`)}function Jt(e){return process.platform==="win32"?`\\\\.\\pipe\\${e}`:v.join(Je.tmpdir(),`${e}.sock`)}var fe=new Map;function Xe(e,t,r){if(t.length===0)return;let o=t.map(g=>JSON.stringify(g)).join(`
|
|
2
2
|
`)+`
|
|
3
|
-
`,n=de.get(e);if(n&&!n.socket.destroyed){n.ready?n.socket.write(o):n.queue.push(o);return}let s=Qt(e),d=De.createConnection(s);n={socket:d,ready:false,queue:[o]},de.set(e,n),d.on("connect",()=>{n.ready=true;for(let g of n.queue)d.write(g);n.queue.length=0;}),d.on("error",g=>{r?.(`[named-pipe publish] ${s}: ${g instanceof Error?g.message:String(g)}`),de.delete(e);}),d.on("close",()=>{de.delete(e);});}function Ze(){return {executeSync(e,t,r){return Ue({command:e,args:t,cwd:r?.cwd,timeoutMs:r?.timeout,env:r?.env},{encoding:r?.encoding,input:r?.input})},executeAsync(e,t,r){qt({command:e,args:t},r);},resolveInvocation(e,t){let r=Nt({command:e,args:t});return {cmd:r.command,args:r.args??[]}},splitCommand:He}}function be(e){return {id:e.id??"board-worker",pollIntervalMs:e.pollIntervalMs,visibilityMs:e.visibilityMs,concurrency:e.concurrency,maxAttempts:e.maxAttempts,async lease(t){return e.workerStore.leaseRequests(t).map(r=>({id:r.messageId,attempt:r.attempt,message:r.request,ack:()=>e.workerStore.ackRequest(r.messageId,r.leaseToken),nack:o=>e.workerStore.nackRequest(r.messageId,r.leaseToken,o)}))},async handle(t){await e.handleRequest(t.args,t);},onError:e.onError}}function ve(e){return {id:e.id,pollIntervalMs:e.pollIntervalMs,visibilityMs:e.visibilityMs,concurrency:e.concurrency,maxAttempts:e.maxAttempts,async lease(t){return e.queueStorage.lease(t).map(r=>({id:r.id,attempt:r.attempt,message:r.body,ack:()=>e.queueStorage.ack(r.id,r.leaseToken),nack:o=>e.queueStorage.nack(r.id,r.leaseToken,o)}))},handle:e.handleMessage,onError:e.onError}}async function Xe(e,t){try{await e.handle(t.message,t),await t.ack();}catch(r){let o=t.attempt>=Math.max(1,Math.floor(e.maxAttempts??5));await t.nack({dead:o,reason:r instanceof Error?r.message:String(r)}),e.onError?.(r,t);}}function et(e){let t=Math.max(1,Math.floor(e.pollIntervalMs??250)),r=Math.max(1,Math.floor(e.visibilityMs??6e4)),o=Math.max(1,Math.floor(e.concurrency??1)),n=false,s=false;async function d(){if(!(n||s)){s=true;try{let x=await e.lease({max:o,visibilityMs:r});for(let u of x)await Xe(e,u);}finally{s=false;}}}let g=setInterval(()=>{d();},t);return typeof g.unref=="function"&&g.unref(),d(),()=>{n=true,clearInterval(g);}}async function Dt(e){let t=Math.max(1,Math.floor(e.visibilityMs??6e4)),r=Math.max(1,Math.floor(e.concurrency??1)),o=await e.lease({max:r,visibilityMs:t});for(let n of o)await Xe(e,n);return o.length}async function fe(e,t){let r=Math.max(1,Math.floor(t?.maxPasses??256)),o=0;for(let n=0;n<r;n+=1){let s=await Dt(e);if(o+=s,s<=0)return o}throw new Error(`drainQueueLaneToIdle exceeded ${r} passes for lane "${e.id}"`)}function Jt(e){let r=(Array.isArray(e)?e:e.lanes).map(o=>et(o));return ()=>{for(let o of r)o();}}var Wt=createRequire(import.meta.url);function Ht(e){return typeof e=="object"?e:b(e)}function rt(e){let t=v.basename(String(e||"").trim());if(!t)throw new Error(`resolveYamlFlowCliPath: expected non-empty cli file name, got ${JSON.stringify(e)}`);let r=v.dirname(Wt.resolve("yaml-flow/package.json")),o=t.replace(/\.[^.]+$/,""),n=v.join(r,"cli","bundled",`${o}.mjs`);if(a.existsSync(n))return n;let s=v.join(r,"cli","node",t);if(a.existsSync(s))return s;throw new Error(`resolveYamlFlowCliPath: could not find ${t} under cli/bundled or cli/node in ${r}`)}function q(e){let t=Ht(e);return t.kind==="yaml-flow-cli"?rt(t.value):t.value}function Vt(e,t){let r=q(e);switch(r){case "source-cli-task-executor":{let o=v.join(t,"source-cli-task-executor.js");if(a.existsSync(o))return {command:process.execPath,args:[o]};let n=v.join(t,"source-cli-task-executor.ts"),s=v.join(t,"..","..","node_modules","tsx","dist","cli.mjs"),d=v.join(t,"..","..","node_modules",".bin","tsx"),g=a.existsSync(s)?s:d;return a.existsSync(n)&&a.existsSync(g)?{command:process.execPath,args:[g,n]}:{command:process.execPath,args:[o]}}case "board-live-cards":{let{cmd:o,args:n}=ze(t,"_",[]);return {command:o,args:n}}default:throw new Error(`resolveBuiltIn: unknown built-in name "${r}". Supported: source-cli-task-executor, board-live-cards`)}}function Ut(e,t){if(e.howToRun==="built-in"){let{command:o,args:n}=Vt(e.whatToRun,t);return {command:o,baseArgs:n}}let r=(typeof e.whatToRun=="object",q(e.whatToRun));switch(e.howToRun){case "local-node":return {command:process.execPath,baseArgs:[r]};case "local-python":return {command:process.platform==="win32"?"python":"python3",baseArgs:[r]};case "local-process":return {command:r,baseArgs:[]};default:throw new Error(`resolveBaseInvocation: howToRun "${e.howToRun}" is not a local transport`)}}function pe(e,t){return Ut(e,t)}var Ae=new Map;function zt(e,t){let r=String(e||"").trim();if(!r)throw new Error("registerInProcessExecutionHandler: key is required");Ae.set(r,t);}function Gt(e){let t=String(e||"").trim();t&&Ae.delete(t);}function nt(e){let t=e.trim();if(!t)throw new Error("empty stdout");try{return JSON.parse(t)}catch{let r=t.split(/\r?\n/).filter(Boolean),o=r[r.length-1];return JSON.parse(o)}}function ot(e,t){return {...t,whatToRun:q(e.whatToRun),...e.extra?{extra:e.extra}:{}}}function Te(e,t,r="invokeExecutionRef"){return a$1(e,t,r)}function st(e,t){if(e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.result=="string"&&e.data&&typeof e.data=="object"&&!Array.isArray(e.data))return {...e,...t||{}};if(e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.status=="string"){let o=e,n=o.status==="success"?"success":o.status==="fail"?"failure":o.status,s=o.data&&typeof o.data=="object"&&!Array.isArray(o.data)?o.data:o.data===void 0?{}:{stdout:o.data};return {result:n,data:s,...typeof o.error=="string"?{error:o.error}:{},...t||{}}}return {result:"success",data:e&&typeof e=="object"&&!Array.isArray(e)?e:{stdout:e},...t||{}}}function N(e){return {result:"failure",data:{error:e}}}function G(e,t,r){let o=r?.label??"invokeExecutionRefSync",n=r?.cliDir??r?.cwd??process.cwd(),s;try{s=Te(e.argsMassaging,ot(e,t),o);}catch(h){let R=h instanceof Error?h.message:String(h);return N(R)}let d;try{d=pe(e,n);}catch(h){let R=h instanceof Error?h.message:String(h);return N(`[${o}] ref resolution failed: ${R}`)}let g=[...d.baseArgs,...s.cmdArgs??[]],x=JSON.stringify(s.stdin??t),u=Ze(),p;try{p=u.executeSync(d.command,g,{timeout:r?.timeoutMs??3e4,encoding:"utf-8",cwd:r?.cwd,input:x});}catch(h){let R=h,y=(R.stderr?String(R.stderr):"").trim(),l=typeof R.status=="number"?R.status:"unknown",f=y||R.message;return N(`[${o}] ref exited with status ${l}${f?`: ${f}`:""}`)}try{return st(nt(p))}catch{return {result:"success",data:{stdout:p.trim()}}}}async function tt(e,t,r){let o=r?.label??"invokeExecutionRef",n;try{n=Te(e.argsMassaging,ot(e,t),o);}catch(h){let R=h instanceof Error?h.message:String(h);return N(R)}let s=q(e.whatToRun),d=n.headers?{"Content-Type":"application/json",...n.headers}:{"Content-Type":"application/json"},g=n.url??s,x;if(e.howToRun==="http:get"){let h=n.body&&typeof n.body=="object"&&!Array.isArray(n.body)?n.body:t,R=new URLSearchParams(Object.entries(h).filter(([,y])=>y!=null).map(([y,l])=>[y,String(l)]));R.size>0&&(g=`${g}${g.includes("?")?"&":"?"}${R.toString()}`);}else x=JSON.stringify(n.body??t);let u={method:e.howToRun==="http:get"?"GET":"POST",headers:d,body:x},p=0;for(;;)try{let h=await fetch(g,u);if(!h.ok){let f=await h.text().catch(()=>"");return N(`[${o}] HTTP ${h.status}${f?`: ${f}`:""}`)}let R={};h.headers.forEach((f,m)=>{R[m]=f;});let y=new Uint8Array(await h.arrayBuffer());if(y.byteLength===0)return {result:"success",data:{},headers:R};let l=new TextDecoder().decode(y);try{return st(nt(l),{headers:R})}catch{return {result:"success",data:{stdout:l},headers:R}}}catch(h){let R=h?.cause,y=R&&typeof R=="object"&&"code"in R?String(R.code||""):"";if((y==="ECONNRESET"||y==="UND_ERR_SOCKET")&&p===0){p+=1;continue}let f=h instanceof Error?h.message:String(h),m=R instanceof Error?`${R.name}: ${R.message}${y?` [${y}]`:""}`:R?String(R):"",S=n.url??s??"",c=`${f}${m?` (cause: ${m})`:""}${S?` url=${S}`:""}`;return N(`[${o}] ${c}`)}}async function Yt(e,t,r){let o=r?.label??"invokeExecutionRef",n=q(e.whatToRun).trim();if(!n)return N(`[${o}] in-process-loop requires a non-empty handler key`);let s=Ae.get(n);if(!s)return N(`[${o}] no in-process handler registered for: ${n}`);try{return await s(e,t,r)}catch(d){let g=d instanceof Error?d.message:String(d);return N(`[${o}] ${g}`)}}var Zt={"local-node":async(e,t,r)=>G(e,t,r),"local-python":async(e,t,r)=>G(e,t,r),"local-process":async(e,t,r)=>G(e,t,r),"built-in":async(e,t,r)=>G(e,t,r),"http:post":tt,"http:get":tt,"in-process-loop":Yt},Xt={"local-node":G,"local-python":G,"local-process":G,"built-in":G};async function te(e,t,r){let o=r?.transports?.[e.howToRun]??Zt[e.howToRun];return o?o(e,t,r):N(`[${r?.label??"invokeExecutionRef"}] unsupported howToRun: ${e.howToRun}`)}function Ee(e,t,r){let o=r?.syncTransports?.[e.howToRun]??Xt[e.howToRun];return o?o(e,t,r):N(`[${r?.label??"invokeExecutionRefSync"}] unsupported sync howToRun: ${e.howToRun}`)}function er(e){return {invoke(t,r){return te(t,r,e)},invokeSync(t,r){return Ee(t,r,e)}}}function tr(e,t,r){return Ee(e,t,r)}function Ce(e={}){let t=e.resolveRef??(r=>r);return {...e.executorTimeouts?{executorTimeouts:e.executorTimeouts}:{},async invokeExecutor(r,o,n){let s=t(r);if(s.howToRun==="queue-storage")throw new Error("queue-storage does not support inline executor request/response");if(s.howToRun==="http:post"||s.howToRun==="in-process-loop"){let p=await h(s,{subcommand:o,...n?.input!==void 0?{input:n.input}:{}});return typeof p=="string"?p:p&&typeof p=="object"&&!Array.isArray(p)&&typeof p.stdout=="string"?String(p.stdout):JSON.stringify(p??{})}if(s.howToRun==="http:get"){let p=await te(s,{subcommand:o,...n?.input!==void 0?{input:n.input}:{},...s.extra?{extra:s.extra}:{}},{cwd:process.cwd(),timeoutMs:n?.timeout??3e4,label:`invokeExecutor:${o}`});if(p.result!=="success"){let h=typeof p.data?.error=="string"?p.data.error:p.error;throw new Error(h||`executor request failed: ${p.result}`)}return typeof p.data?.stdout=="string"?p.data.stdout:JSON.stringify(p.data??{})}if(!e.resolveCliDir)throw new Error(`createNonCoreExecutorDispatcher: ref.howToRun="${s.howToRun}" requires opts.resolveCliDir`);let{command:d,baseArgs:g}=pe(s,e.resolveCliDir()),x=s.extra?["--extra",Buffer.from(JSON.stringify(s.extra)).toString("base64")]:[],u=[...g,o,...x];return await new Promise((p,h)=>{let R=spawn(d,u,{cwd:process.cwd(),stdio:"pipe",windowsHide:true,shell:process.platform==="win32"&&/\.(cmd|bat)$/i.test(d)}),y=[],l=[],f=false,m=null,S=i=>{f||(f=true,m&&clearTimeout(m),h(i));},c=i=>{f||(f=true,m&&clearTimeout(m),p(i));};R.stdout.on("data",i=>{y.push(Buffer.from(i));}),R.stderr.on("data",i=>{l.push(Buffer.from(i));}),R.on("error",i=>{let k=i;k.stdout=Buffer.concat(y).toString("utf-8"),k.stderr=Buffer.concat(l).toString("utf-8"),S(k);}),R.on("close",i=>{let k=Buffer.concat(y).toString("utf-8"),w=Buffer.concat(l).toString("utf-8");if(i===0){c(k);return}let b=new Error(w.trim()||`executor exited with status ${i}`);b.stdout=k,b.stderr=w,S(b);}),n?.timeout&&n.timeout>0&&(m=setTimeout(()=>{R.kill();let i=new Error(`executor timed out after ${n.timeout}ms`);i.stdout=Buffer.concat(y).toString("utf-8"),i.stderr=Buffer.concat(l).toString("utf-8"),S(i);},n.timeout)),n?.input!==void 0?R.stdin.end(n.input):R.stdin.end();})}}}function $(e,t){if(process.platform!=="win32"){a.renameSync(e,t);return}let r=[10,20,40,80,160];for(let o=0;o<=r.length;o++)try{a.renameSync(e,t);return}catch(n){let s=n.code;if((s==="EPERM"||s==="EBUSY")&&o<r.length){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,r[o]);continue}throw n}}function Y(e){function t(n){return v.join(e,...n.split("/"))}function r(n){return v.relative(e,n).replace(/\\/g,"/")}function o(n,s){if(a.existsSync(n))for(let d of a.readdirSync(n,{withFileTypes:true})){let g=v.join(n,d.name);if(d.isDirectory()){o(g,s);continue}d.isFile()&&s.push(r(g));}}return {read(n){let s=t(n);if(!a.existsSync(s))return null;try{return a.readFileSync(s,"utf-8")}catch{return null}},write(n,s){let d=t(n),g=`${d}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(d),{recursive:true}),a.writeFileSync(g,s,"utf-8"),$(g,d);},exists(n){return a.existsSync(t(n))},remove(n){let s=t(n);try{a.existsSync(s)&&a.unlinkSync(s);}catch{}},readBytes(n){let s=t(n);if(!a.existsSync(s))return null;try{return new Uint8Array(a.readFileSync(s))}catch{return null}},writeBytes(n,s){let d=t(n),g=`${d}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(d),{recursive:true}),a.writeFileSync(g,Buffer.from(s)),$(g,d);},listKeys(n){let s=[];o(e,s);let d=s.sort();return n?d.filter(g=>g.startsWith(n)):d},stat(n){let s=t(n);if(!a.existsSync(s))return null;try{let d=a.statSync(s);return {key:n,size:Number(d.size||0),updatedAt:new Date(d.mtimeMs).toISOString()}}catch{return null}},keyRef(n){return {kind:"fs-path",value:t(n)}},renameKey(n,s){let d=t(n);if(!a.existsSync(d))return false;let g=t(s);return a.mkdirSync(v.dirname(g),{recursive:true}),$(d,g),true}}}function Pe(){return {read(e){if(!a.existsSync(e))return null;try{return a.readFileSync(e,"utf-8")}catch{return null}},write(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(e),{recursive:true}),a.writeFileSync(r,t,"utf-8"),$(r,e);},exists(e){return a.existsSync(e)},remove(e){try{a.existsSync(e)&&a.unlinkSync(e);}catch{}},readBytes(e){if(!a.existsSync(e))return null;try{return new Uint8Array(a.readFileSync(e))}catch{return null}},writeBytes(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(e),{recursive:true}),a.writeFileSync(r,Buffer.from(t)),$(r,e);},stat(e){if(!a.existsSync(e))return null;try{let t=a.statSync(e);return {key:e,size:Number(t.size||0),updatedAt:new Date(t.mtimeMs).toISOString()}}catch{return null}},listKeys(e){return []},renameKey(e,t){return a.existsSync(e)?(a.mkdirSync(v.dirname(t),{recursive:true}),$(e,t),true):false}}}function W(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(e),{recursive:true}),a.writeFileSync(r,JSON.stringify(t,null,2),"utf-8"),$(r,e);}function Q(e){if(!a.existsSync(e))return null;try{return JSON.parse(a.readFileSync(e,"utf-8"))}catch{return null}}function re(e){return a.existsSync(e)?a.readdirSync(e).filter(t=>t.endsWith(".json")).sort().map(t=>v.join(e,t)):[]}function ne(e){return {id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}}function sr(e){return {...ne(e),leaseToken:String(e.leaseToken||""),leaseExpiresAt:String(e.leaseExpiresAt||"")}}function ir(e){return {...ne(e),reason:e.reason}}function Fe(e){let t=v.join(e,"active"),r=v.join(e,"leased"),o=v.join(e,"done"),n=v.join(e,"dead"),s=v.join(e,"staged");for(let l of [t,r,o,n,s])a.mkdirSync(l,{recursive:true});let d=0;function g(l){let f=l.replace(/[:.]/g,"-"),m=String(d++).padStart(6,"0");return `${f}-${m}`}function x(l){let f=l.activeOrderKey||g(String(l.enqueuedAt||new Date().toISOString()));return v.join(t,`${f}-${l.id}.json`)}function u(l){return v.join(r,`${l}.json`)}function p(l){return v.join(o,`${l}.json`)}function h(l){return v.join(n,`${l}.json`)}function R(l){return v.join(s,`${l}.json`)}function y(){let l=Date.now();for(let f of re(r)){let m=Q(f);if(!m?.leaseExpiresAt)continue;let S=Date.parse(m.leaseExpiresAt);if(Number.isNaN(S)||S>l)continue;let c={id:m.id,body:m.body,enqueuedAt:m.enqueuedAt,attempt:m.attempt,activeOrderKey:m.activeOrderKey};W(x(c),c);try{a.unlinkSync(f);}catch{}}}return {enqueue(l){let f={id:randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0};return f.activeOrderKey=g(f.enqueuedAt),W(x(f),f),ne(f)},enqueueMany(l){return l.map(f=>this.enqueue(f))},enqueueIfAbsent(l,f){y();for(let S of [t,r,s])for(let c of re(S))if(Q(c)?.dedupKey===f)return null;let m={id:randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0,dedupKey:f};return m.activeOrderKey=g(m.enqueuedAt),W(x(m),m),ne(m)},lease(l){y();let f=Math.max(1,Math.floor(l?.max??1)),m=Math.max(1,Math.floor(l?.visibilityMs??6e4)),S=[];for(let c of re(t)){if(S.length>=f)break;let i=Q(c);if(!i)continue;let k=u(i.id);try{$(c,k);}catch{continue}let w={...i,attempt:(Number(i.attempt)||0)+1,leaseToken:randomUUID(),leaseExpiresAt:new Date(Date.now()+m).toISOString()};W(k,w),S.push(sr(w));}return S},ack(l,f){let m=u(l),S=Q(m);if(!S||S.leaseToken!==f)return false;try{$(m,p(l));}catch{return false}return true},nack(l,f,m){let S=u(l),c=Q(S);if(!c||c.leaseToken!==f)return false;let i={id:c.id,body:c.body,enqueuedAt:c.enqueuedAt,attempt:c.attempt,activeOrderKey:c.activeOrderKey};m?.dead?(i.reason=m.reason,W(h(l),i)):W(x(i),i);try{a.unlinkSync(S);}catch{}return true},peekActive(l){return y(),re(t).map(f=>Q(f)).filter(f=>!!f).map(ne)},peekDeadLetter(l){return re(n).map(f=>Q(f)).filter(f=>!!f).map(ir)},stage(l,f){let m=f?.dedupKey;if(m){y();for(let c of [t,r,s])for(let i of re(c))if(Q(i)?.dedupKey===m)return null}let S={id:randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0,...m?{dedupKey:m}:{}};return W(R(S.id),S),ne(S)},commitStaged(l){let f=R(l),m=Q(f);if(!m)return false;let S=new Date().toISOString(),c={...m,attempt:0,enqueuedAt:S,activeOrderKey:g(S)};W(x(c),c);try{a.unlinkSync(f);}catch{}return true},discardStaged(l,f){let m=R(l),S=Q(m);if(!S)return false;let c={id:S.id,body:S.body,enqueuedAt:S.enqueuedAt,attempt:S.attempt,reason:f};W(h(l),c);try{a.unlinkSync(m);}catch{}return true},peekStaged(l){return re(s).map(f=>Q(f)).filter(f=>!!f).map(ne)}}}var je="__scratch-marker",Be="__scratch-config.json",ar=1440*60*1e3,cr=720*60*1e3,ur=500;function it(e,t){if(!e)return t;let r=e.replace(/[^A-Za-z0-9._-]/g,"_");return r.length>0?r:t}function ie(e){a.mkdirSync(e,{recursive:true});let t=v.join(e,je),r=v.join(e,Be),o=!a.existsSync(t);if(o)try{a.writeFileSync(t,`scratch-store
|
|
3
|
+
`,n=fe.get(e);if(n&&!n.socket.destroyed){n.ready?n.socket.write(o):n.queue.push(o);return}let s=Jt(e),d=Ke.createConnection(s);n={socket:d,ready:false,queue:[o]},fe.set(e,n),d.on("connect",()=>{n.ready=true;for(let g of n.queue)d.write(g);n.queue.length=0;}),d.on("error",g=>{r?.(`[named-pipe publish] ${s}: ${g instanceof Error?g.message:String(g)}`),fe.delete(e);}),d.on("close",()=>{fe.delete(e);});}function et(){return {executeSync(e,t,r){return Ge({command:e,args:t,cwd:r?.cwd,timeoutMs:r?.timeout,env:r?.env},{encoding:r?.encoding,input:r?.input})},executeAsync(e,t,r){Dt({command:e,args:t},r);},resolveInvocation(e,t){let r=Qt({command:e,args:t});return {cmd:r.command,args:r.args??[]}},splitCommand:Ue}}function Ae(e){return {id:e.id??"board-worker",pollIntervalMs:e.pollIntervalMs,visibilityMs:e.visibilityMs,concurrency:e.concurrency,maxAttempts:e.maxAttempts,async lease(t){return e.workerStore.leaseRequests(t).map(r=>({id:r.messageId,attempt:r.attempt,message:r.request,ack:()=>e.workerStore.ackRequest(r.messageId,r.leaseToken),nack:o=>e.workerStore.nackRequest(r.messageId,r.leaseToken,o)}))},async handle(t){await e.handleRequest(t.args,t);},onError:e.onError}}function Te(e){return {id:e.id,pollIntervalMs:e.pollIntervalMs,visibilityMs:e.visibilityMs,concurrency:e.concurrency,maxAttempts:e.maxAttempts,async lease(t){return e.queueStorage.lease(t).map(r=>({id:r.id,attempt:r.attempt,message:r.body,ack:()=>e.queueStorage.ack(r.id,r.leaseToken),nack:o=>e.queueStorage.nack(r.id,r.leaseToken,o)}))},handle:e.handleMessage,onError:e.onError}}async function tt(e,t){try{await e.handle(t.message,t),await t.ack();}catch(r){let o=t.attempt>=Math.max(1,Math.floor(e.maxAttempts??5));await t.nack({dead:o,reason:r instanceof Error?r.message:String(r)}),e.onError?.(r,t);}}function rt(e){let t=Math.max(1,Math.floor(e.pollIntervalMs??250)),r=Math.max(1,Math.floor(e.visibilityMs??6e4)),o=Math.max(1,Math.floor(e.concurrency??1)),n=false,s=false;async function d(){if(!(n||s)){s=true;try{let x=await e.lease({max:o,visibilityMs:r});for(let u of x)await tt(e,u);}finally{s=false;}}}let g=setInterval(()=>{d();},t);return typeof g.unref=="function"&&g.unref(),d(),()=>{n=true,clearInterval(g);}}async function Kt(e){let t=Math.max(1,Math.floor(e.visibilityMs??6e4)),r=Math.max(1,Math.floor(e.concurrency??1)),o=await e.lease({max:r,visibilityMs:t});for(let n of o)await tt(e,n);return o.length}async function ge(e,t){let r=Math.max(1,Math.floor(t?.maxPasses??256)),o=0;for(let n=0;n<r;n+=1){let s=await Kt(e);if(o+=s,s<=0)return o}throw new Error(`drainQueueLaneToIdle exceeded ${r} passes for lane "${e.id}"`)}function Wt(e){let r=(Array.isArray(e)?e:e.lanes).map(o=>rt(o));return ()=>{for(let o of r)o();}}var Vt=createRequire(import.meta.url);function Ut(e){return typeof e=="object"?e:b(e)}function ot(e){let t=v.basename(String(e||"").trim());if(!t)throw new Error(`resolveYamlFlowCliPath: expected non-empty cli file name, got ${JSON.stringify(e)}`);let r=v.dirname(Vt.resolve("yaml-flow/package.json")),o=t.replace(/\.[^.]+$/,""),n=v.join(r,"cli","bundled",`${o}.mjs`);if(a.existsSync(n))return n;let s=v.join(r,"cli","node",t);if(a.existsSync(s))return s;throw new Error(`resolveYamlFlowCliPath: could not find ${t} under cli/bundled or cli/node in ${r}`)}function q(e){let t=Ut(e);return t.kind==="yaml-flow-cli"?ot(t.value):t.value}function zt(e,t){let r=q(e);switch(r){case "source-cli-task-executor":{let o=v.join(t,"source-cli-task-executor.js");if(a.existsSync(o))return {command:process.execPath,args:[o]};let n=v.join(t,"source-cli-task-executor.ts"),s=v.join(t,"..","..","node_modules","tsx","dist","cli.mjs"),d=v.join(t,"..","..","node_modules",".bin","tsx"),g=a.existsSync(s)?s:d;return a.existsSync(n)&&a.existsSync(g)?{command:process.execPath,args:[g,n]}:{command:process.execPath,args:[o]}}case "board-live-cards":{let{cmd:o,args:n}=Ye(t,"_",[]);return {command:o,args:n}}default:throw new Error(`resolveBuiltIn: unknown built-in name "${r}". Supported: source-cli-task-executor, board-live-cards`)}}function Gt(e,t){if(e.howToRun==="built-in"){let{command:o,args:n}=zt(e.whatToRun,t);return {command:o,baseArgs:n}}let r=(typeof e.whatToRun=="object",q(e.whatToRun));switch(e.howToRun){case "local-node":return {command:process.execPath,baseArgs:[r]};case "local-python":return {command:process.platform==="win32"?"python":"python3",baseArgs:[r]};case "local-process":return {command:r,baseArgs:[]};default:throw new Error(`resolveBaseInvocation: howToRun "${e.howToRun}" is not a local transport`)}}function me(e,t){return Gt(e,t)}var Ee=new Map;function Yt(e,t){let r=String(e||"").trim();if(!r)throw new Error("registerInProcessExecutionHandler: key is required");Ee.set(r,t);}function Zt(e){let t=String(e||"").trim();t&&Ee.delete(t);}function st(e){let t=e.trim();if(!t)throw new Error("empty stdout");try{return JSON.parse(t)}catch{let r=t.split(/\r?\n/).filter(Boolean),o=r[r.length-1];return JSON.parse(o)}}function it(e,t){return {...t,whatToRun:q(e.whatToRun),...e.extra?{extra:e.extra}:{}}}function Ce(e,t,r="invokeExecutionRef"){return a$1(e,t,r)}function at(e,t){if(e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.result=="string"&&e.data&&typeof e.data=="object"&&!Array.isArray(e.data))return {...e,...t||{}};if(e&&typeof e=="object"&&!Array.isArray(e)&&typeof e.status=="string"){let o=e,n=o.status==="success"?"success":o.status==="fail"?"failure":o.status,s=o.data&&typeof o.data=="object"&&!Array.isArray(o.data)?o.data:o.data===void 0?{}:{stdout:o.data};return {result:n,data:s,...typeof o.error=="string"?{error:o.error}:{},...t||{}}}return {result:"success",data:e&&typeof e=="object"&&!Array.isArray(e)?e:{stdout:e},...t||{}}}function N(e){return {result:"failure",data:{error:e}}}function G(e,t,r){let o=r?.label??"invokeExecutionRefSync",n=r?.cliDir??r?.cwd??process.cwd(),s;try{s=Ce(e.argsMassaging,it(e,t),o);}catch(h){let R=h instanceof Error?h.message:String(h);return N(R)}let d;try{d=me(e,n);}catch(h){let R=h instanceof Error?h.message:String(h);return N(`[${o}] ref resolution failed: ${R}`)}let g=[...d.baseArgs,...s.cmdArgs??[]],x=JSON.stringify(s.stdin??t),u=et(),p;try{p=u.executeSync(d.command,g,{timeout:r?.timeoutMs??3e4,encoding:"utf-8",cwd:r?.cwd,input:x});}catch(h){let R=h,y=(R.stderr?String(R.stderr):"").trim(),l=typeof R.status=="number"?R.status:"unknown",f=y||R.message;return N(`[${o}] ref exited with status ${l}${f?`: ${f}`:""}`)}try{return at(st(p))}catch{return {result:"success",data:{stdout:p.trim()}}}}async function nt(e,t,r){let o=r?.label??"invokeExecutionRef",n;try{n=Ce(e.argsMassaging,it(e,t),o);}catch(h){let R=h instanceof Error?h.message:String(h);return N(R)}let s=q(e.whatToRun),d=n.headers?{"Content-Type":"application/json",...n.headers}:{"Content-Type":"application/json"},g=n.url??s,x;if(e.howToRun==="http:get"){let h=n.body&&typeof n.body=="object"&&!Array.isArray(n.body)?n.body:t,R=new URLSearchParams(Object.entries(h).filter(([,y])=>y!=null).map(([y,l])=>[y,String(l)]));R.size>0&&(g=`${g}${g.includes("?")?"&":"?"}${R.toString()}`);}else x=JSON.stringify(n.body??t);let u={method:e.howToRun==="http:get"?"GET":"POST",headers:d,body:x},p=0;for(;;)try{let h=await fetch(g,u);if(!h.ok){let f=await h.text().catch(()=>"");return N(`[${o}] HTTP ${h.status}${f?`: ${f}`:""}`)}let R={};h.headers.forEach((f,m)=>{R[m]=f;});let y=new Uint8Array(await h.arrayBuffer());if(y.byteLength===0)return {result:"success",data:{},headers:R};let l=new TextDecoder().decode(y);try{return at(st(l),{headers:R})}catch{return {result:"success",data:{stdout:l},headers:R}}}catch(h){let R=h?.cause,y=R&&typeof R=="object"&&"code"in R?String(R.code||""):"";if((y==="ECONNRESET"||y==="UND_ERR_SOCKET")&&p===0){p+=1;continue}let f=h instanceof Error?h.message:String(h),m=R instanceof Error?`${R.name}: ${R.message}${y?` [${y}]`:""}`:R?String(R):"",S=n.url??s??"",c=`${f}${m?` (cause: ${m})`:""}${S?` url=${S}`:""}`;return N(`[${o}] ${c}`)}}async function Xt(e,t,r){let o=r?.label??"invokeExecutionRef",n=q(e.whatToRun).trim();if(!n)return N(`[${o}] in-process-loop requires a non-empty handler key`);let s=Ee.get(n);if(!s)return N(`[${o}] no in-process handler registered for: ${n}`);try{return await s(e,t,r)}catch(d){let g=d instanceof Error?d.message:String(d);return N(`[${o}] ${g}`)}}var er={"local-node":async(e,t,r)=>G(e,t,r),"local-python":async(e,t,r)=>G(e,t,r),"local-process":async(e,t,r)=>G(e,t,r),"built-in":async(e,t,r)=>G(e,t,r),"http:post":nt,"http:get":nt,"in-process-loop":Xt},tr={"local-node":G,"local-python":G,"local-process":G,"built-in":G};async function re(e,t,r){let o=r?.transports?.[e.howToRun]??er[e.howToRun];return o?o(e,t,r):N(`[${r?.label??"invokeExecutionRef"}] unsupported howToRun: ${e.howToRun}`)}function je(e,t,r){let o=r?.syncTransports?.[e.howToRun]??tr[e.howToRun];return o?o(e,t,r):N(`[${r?.label??"invokeExecutionRefSync"}] unsupported sync howToRun: ${e.howToRun}`)}function rr(e){return {invoke(t,r){return re(t,r,e)},invokeSync(t,r){return je(t,r,e)}}}function nr(e,t,r){return je(e,t,r)}function Be(e={}){let t=e.resolveRef??(r=>r);return {...e.executorTimeouts?{executorTimeouts:e.executorTimeouts}:{},async invokeExecutor(r,o,n){let s=t(r);if(s.howToRun==="queue-storage")throw new Error("queue-storage does not support inline executor request/response");if(s.howToRun==="http:post"||s.howToRun==="in-process-loop"){let p=await h(s,{subcommand:o,...n?.input!==void 0?{input:n.input}:{}});return typeof p=="string"?p:p&&typeof p=="object"&&!Array.isArray(p)&&typeof p.stdout=="string"?String(p.stdout):JSON.stringify(p??{})}if(s.howToRun==="http:get"){let p=await re(s,{subcommand:o,...n?.input!==void 0?{input:n.input}:{},...s.extra?{extra:s.extra}:{}},{cwd:process.cwd(),timeoutMs:n?.timeout??3e4,label:`invokeExecutor:${o}`});if(p.result!=="success"){let h=typeof p.data?.error=="string"?p.data.error:p.error;throw new Error(h||`executor request failed: ${p.result}`)}return typeof p.data?.stdout=="string"?p.data.stdout:JSON.stringify(p.data??{})}if(!e.resolveCliDir)throw new Error(`createNonCoreExecutorDispatcher: ref.howToRun="${s.howToRun}" requires opts.resolveCliDir`);let{command:d,baseArgs:g}=me(s,e.resolveCliDir()),x=s.extra?["--extra",Buffer.from(JSON.stringify(s.extra)).toString("base64")]:[],u=[...g,o,...x];return await new Promise((p,h)=>{let R=spawn(d,u,{cwd:process.cwd(),stdio:"pipe",windowsHide:true,shell:process.platform==="win32"&&/\.(cmd|bat)$/i.test(d)}),y=[],l=[],f=false,m=null,S=i=>{f||(f=true,m&&clearTimeout(m),h(i));},c=i=>{f||(f=true,m&&clearTimeout(m),p(i));};R.stdout.on("data",i=>{y.push(Buffer.from(i));}),R.stderr.on("data",i=>{l.push(Buffer.from(i));}),R.on("error",i=>{let k=i;k.stdout=Buffer.concat(y).toString("utf-8"),k.stderr=Buffer.concat(l).toString("utf-8"),S(k);}),R.on("close",i=>{let k=Buffer.concat(y).toString("utf-8"),w=Buffer.concat(l).toString("utf-8");if(i===0){c(k);return}let b=new Error(w.trim()||`executor exited with status ${i}`);b.stdout=k,b.stderr=w,S(b);}),n?.timeout&&n.timeout>0&&(m=setTimeout(()=>{R.kill();let i=new Error(`executor timed out after ${n.timeout}ms`);i.stdout=Buffer.concat(y).toString("utf-8"),i.stderr=Buffer.concat(l).toString("utf-8"),S(i);},n.timeout)),n?.input!==void 0?R.stdin.end(n.input):R.stdin.end();})}}}function $(e,t){if(process.platform!=="win32"){a.renameSync(e,t);return}let r=[10,20,40,80,160];for(let o=0;o<=r.length;o++)try{a.renameSync(e,t);return}catch(n){let s=n.code;if((s==="EPERM"||s==="EBUSY")&&o<r.length){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,r[o]);continue}throw n}}function Y(e){function t(n){return v.join(e,...n.split("/"))}function r(n){return v.relative(e,n).replace(/\\/g,"/")}function o(n,s){if(a.existsSync(n))for(let d of a.readdirSync(n,{withFileTypes:true})){let g=v.join(n,d.name);if(d.isDirectory()){o(g,s);continue}d.isFile()&&s.push(r(g));}}return {read(n){let s=t(n);if(!a.existsSync(s))return null;try{return a.readFileSync(s,"utf-8")}catch{return null}},write(n,s){let d=t(n),g=`${d}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(d),{recursive:true}),a.writeFileSync(g,s,"utf-8"),$(g,d);},exists(n){return a.existsSync(t(n))},remove(n){let s=t(n);try{a.existsSync(s)&&a.unlinkSync(s);}catch{}},readBytes(n){let s=t(n);if(!a.existsSync(s))return null;try{return new Uint8Array(a.readFileSync(s))}catch{return null}},writeBytes(n,s){let d=t(n),g=`${d}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(d),{recursive:true}),a.writeFileSync(g,Buffer.from(s)),$(g,d);},listKeys(n){let s=[];o(e,s);let d=s.sort();return n?d.filter(g=>g.startsWith(n)):d},stat(n){let s=t(n);if(!a.existsSync(s))return null;try{let d=a.statSync(s);return {key:n,size:Number(d.size||0),updatedAt:new Date(d.mtimeMs).toISOString()}}catch{return null}},keyRef(n){return {kind:"fs-path",value:t(n)}},renameKey(n,s){let d=t(n);if(!a.existsSync(d))return false;let g=t(s);return a.mkdirSync(v.dirname(g),{recursive:true}),$(d,g),true}}}function $e(){return {read(e){if(!a.existsSync(e))return null;try{return a.readFileSync(e,"utf-8")}catch{return null}},write(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(e),{recursive:true}),a.writeFileSync(r,t,"utf-8"),$(r,e);},exists(e){return a.existsSync(e)},remove(e){try{a.existsSync(e)&&a.unlinkSync(e);}catch{}},readBytes(e){if(!a.existsSync(e))return null;try{return new Uint8Array(a.readFileSync(e))}catch{return null}},writeBytes(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(e),{recursive:true}),a.writeFileSync(r,Buffer.from(t)),$(r,e);},stat(e){if(!a.existsSync(e))return null;try{let t=a.statSync(e);return {key:e,size:Number(t.size||0),updatedAt:new Date(t.mtimeMs).toISOString()}}catch{return null}},listKeys(e){return []},renameKey(e,t){return a.existsSync(e)?(a.mkdirSync(v.dirname(t),{recursive:true}),$(e,t),true):false}}}function H(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(e),{recursive:true}),a.writeFileSync(r,JSON.stringify(t,null,2),"utf-8"),$(r,e);}function Q(e){if(!a.existsSync(e))return null;try{return JSON.parse(a.readFileSync(e,"utf-8"))}catch{return null}}function ne(e){return a.existsSync(e)?a.readdirSync(e).filter(t=>t.endsWith(".json")).sort().map(t=>v.join(e,t)):[]}function oe(e){return {id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}}function ar(e){return {...oe(e),leaseToken:String(e.leaseToken||""),leaseExpiresAt:String(e.leaseExpiresAt||"")}}function cr(e){return {...oe(e),reason:e.reason}}function Me(e){let t=v.join(e,"active"),r=v.join(e,"leased"),o=v.join(e,"done"),n=v.join(e,"dead"),s=v.join(e,"staged");for(let l of [t,r,o,n,s])a.mkdirSync(l,{recursive:true});let d=0;function g(l){let f=l.replace(/[:.]/g,"-"),m=String(d++).padStart(6,"0");return `${f}-${m}`}function x(l){let f=l.activeOrderKey||g(String(l.enqueuedAt||new Date().toISOString()));return v.join(t,`${f}-${l.id}.json`)}function u(l){return v.join(r,`${l}.json`)}function p(l){return v.join(o,`${l}.json`)}function h(l){return v.join(n,`${l}.json`)}function R(l){return v.join(s,`${l}.json`)}function y(){let l=Date.now();for(let f of ne(r)){let m=Q(f);if(!m?.leaseExpiresAt)continue;let S=Date.parse(m.leaseExpiresAt);if(Number.isNaN(S)||S>l)continue;let c={id:m.id,body:m.body,enqueuedAt:m.enqueuedAt,attempt:m.attempt,activeOrderKey:m.activeOrderKey};H(x(c),c);try{a.unlinkSync(f);}catch{}}}return {enqueue(l){let f={id:randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0};return f.activeOrderKey=g(f.enqueuedAt),H(x(f),f),oe(f)},enqueueMany(l){return l.map(f=>this.enqueue(f))},enqueueIfAbsent(l,f){y();for(let S of [t,r,s])for(let c of ne(S))if(Q(c)?.dedupKey===f)return null;let m={id:randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0,dedupKey:f};return m.activeOrderKey=g(m.enqueuedAt),H(x(m),m),oe(m)},lease(l){y();let f=Math.max(1,Math.floor(l?.max??1)),m=Math.max(1,Math.floor(l?.visibilityMs??6e4)),S=[];for(let c of ne(t)){if(S.length>=f)break;let i=Q(c);if(!i)continue;let k=u(i.id);try{$(c,k);}catch{continue}let w={...i,attempt:(Number(i.attempt)||0)+1,leaseToken:randomUUID(),leaseExpiresAt:new Date(Date.now()+m).toISOString()};H(k,w),S.push(ar(w));}return S},ack(l,f){let m=u(l),S=Q(m);if(!S||S.leaseToken!==f)return false;try{$(m,p(l));}catch{return false}return true},nack(l,f,m){let S=u(l),c=Q(S);if(!c||c.leaseToken!==f)return false;let i={id:c.id,body:c.body,enqueuedAt:c.enqueuedAt,attempt:c.attempt,activeOrderKey:c.activeOrderKey};m?.dead?(i.reason=m.reason,H(h(l),i)):H(x(i),i);try{a.unlinkSync(S);}catch{}return true},peekActive(l){return y(),ne(t).map(f=>Q(f)).filter(f=>!!f).map(oe)},peekDeadLetter(l){return ne(n).map(f=>Q(f)).filter(f=>!!f).map(cr)},stage(l,f){let m=f?.dedupKey;if(m){y();for(let c of [t,r,s])for(let i of ne(c))if(Q(i)?.dedupKey===m)return null}let S={id:randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0,...m?{dedupKey:m}:{}};return H(R(S.id),S),oe(S)},commitStaged(l){let f=R(l),m=Q(f);if(!m)return false;let S=new Date().toISOString(),c={...m,attempt:0,enqueuedAt:S,activeOrderKey:g(S)};H(x(c),c);try{a.unlinkSync(f);}catch{}return true},discardStaged(l,f){let m=R(l),S=Q(m);if(!S)return false;let c={id:S.id,body:S.body,enqueuedAt:S.enqueuedAt,attempt:S.attempt,reason:f};H(h(l),c);try{a.unlinkSync(m);}catch{}return true},peekStaged(l){return ne(s).map(f=>Q(f)).filter(f=>!!f).map(oe)}}}var Ie="__scratch-marker",Pe="__scratch-config.json",ur=1440*60*1e3,dr=720*60*1e3,lr=500;function ct(e,t){if(!e)return t;let r=e.replace(/[^A-Za-z0-9._-]/g,"_");return r.length>0?r:t}function ce(e){a.mkdirSync(e,{recursive:true});let t=v.join(e,Ie),r=v.join(e,Pe),o=!a.existsSync(t);if(o)try{a.writeFileSync(t,`scratch-store
|
|
4
4
|
${new Date().toISOString()}
|
|
5
|
-
`,"utf-8");}catch{}function n(){if(!a.existsSync(r))return {};try{let u=a.readFileSync(r,"utf-8"),p=JSON.parse(u);return p&&typeof p=="object"&&!Array.isArray(p)?p:{}}catch{return {}}}function s(u){let p=`${r}.${process.pid}.${randomUUID()}.tmp`;try{a.writeFileSync(p,JSON.stringify(u,null,2),"utf-8"),$(p,r);}catch{}}if(o){let u=n();typeof u["retention.lastSweepAt"]!="number"&&(u["retention.lastSweepAt"]=Date.now(),s(u));}function d(){if(!a.existsSync(t))return;let u=n(),p=typeof u["retention.maxAgeMs"]=="number"?u["retention.maxAgeMs"]:
|
|
5
|
+
`,"utf-8");}catch{}function n(){if(!a.existsSync(r))return {};try{let u=a.readFileSync(r,"utf-8"),p=JSON.parse(u);return p&&typeof p=="object"&&!Array.isArray(p)?p:{}}catch{return {}}}function s(u){let p=`${r}.${process.pid}.${randomUUID()}.tmp`;try{a.writeFileSync(p,JSON.stringify(u,null,2),"utf-8"),$(p,r);}catch{}}if(o){let u=n();typeof u["retention.lastSweepAt"]!="number"&&(u["retention.lastSweepAt"]=Date.now(),s(u));}function d(){if(!a.existsSync(t))return;let u=n(),p=typeof u["retention.maxAgeMs"]=="number"?u["retention.maxAgeMs"]:ur,h=typeof u["retention.sweepIntervalMs"]=="number"?u["retention.sweepIntervalMs"]:dr;if(p<=0||h<=0)return;let R=typeof u["retention.lastSweepAt"]=="number"?u["retention.lastSweepAt"]:0,y=Date.now();if(y-R<h)return;u["retention.lastSweepAt"]=y,s(u);let l=y;try{let f=a.readdirSync(e,{withFileTypes:!0});for(let m of f){if(Date.now()-l>lr)break;if(!m.isFile()||m.name===Ie||m.name===Pe)continue;let S=v.join(e,m.name);try{let c=a.statSync(S);if(y-c.mtimeMs>p)try{a.unlinkSync(S);}catch{}}catch{}}}catch{}}function g(u,p){let h=ct(u,"scratch"),R=ct(p,".json"),y=R.startsWith(".")?R:`.${R}`,l=`${h}-${Date.now()}-${randomUUID().slice(0,8)}${y}`;return v.join(e,l)}function x(u,p){let h=`${u}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(u),{recursive:true}),a.writeFileSync(h,p,"utf-8"),$(h,u);}return {read(u){if(!a.existsSync(u))return null;try{return a.readFileSync(u,"utf-8")}catch{return null}},write(u,p){x(u,p);try{d();}catch{}},exists(u){return a.existsSync(u)},remove(u){try{a.existsSync(u)&&a.unlinkSync(u);}catch{}},readBytes(u){if(!a.existsSync(u))return null;try{return new Uint8Array(a.readFileSync(u))}catch{return null}},writeBytes(u,p){let h=`${u}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(u),{recursive:true}),a.writeFileSync(h,Buffer.from(p)),$(h,u);try{d();}catch{}},stat(u){if(!a.existsSync(u))return null;try{let p=a.statSync(u);return {key:u,size:Number(p.size||0),updatedAt:new Date(p.mtimeMs).toISOString()}}catch{return null}},listKeys(u){try{let p=a.readdirSync(e,{withFileTypes:!0}),h=[];for(let R of p){if(!R.isFile()||R.name===Ie||R.name===Pe)continue;let y=v.join(e,R.name);(!u||y.startsWith(u))&&h.push(y);}return h.sort()}catch{return []}},getUniqueKey(u,p){return g(u,p)},create(u,p,h){let R=g(p,h);x(R,u);try{d();}catch{}return R},keyRef(u){return {kind:"fs-path",value:u}},renameKey(u,p){return a.existsSync(u)?(a.mkdirSync(v.dirname(p),{recursive:true}),$(u,p),true):false},config:{get(u){return n()[u]??null},set(u,p){let h=n();p==null?delete h[u]:h[u]=p,s(h);}}}}var fr="__archive-marker",pr="__archive-config.json",ye="streams",he="blobs",gr=500;function ut(e){let t=e.replace(/[^A-Za-z0-9._-]/g,"_");if(!t)throw new Error("Archive segment name cannot be empty after sanitization");return t}function Re(e){a.mkdirSync(e,{recursive:true}),a.mkdirSync(v.join(e,ye),{recursive:true}),a.mkdirSync(v.join(e,he),{recursive:true});let t=v.join(e,fr),r=v.join(e,pr);if(!a.existsSync(t))try{a.writeFileSync(t,`archive-store
|
|
6
6
|
${new Date().toISOString()}
|
|
7
|
-
`,"utf-8");}catch{}function o(){if(!a.existsSync(r))return {};try{let d=a.readFileSync(r,"utf-8"),g=JSON.parse(d);return g&&typeof g=="object"&&!Array.isArray(g)?g:{}}catch{return {}}}function n(d){let g=`${r}.${process.pid}.${randomUUID()}.tmp`;try{a.writeFileSync(g,JSON.stringify(d,null,2),"utf-8"),$(g,r);}catch{}}function s(){if(!a.existsSync(t))return;let d=o(),g=typeof d["retention.maxAgeMs"]=="number"?d["retention.maxAgeMs"]:0,x=typeof d["retention.sweepIntervalMs"]=="number"?d["retention.sweepIntervalMs"]:0;if(g<=0||x<=0)return;let u=typeof d["retention.lastSweepAt"]=="number"?d["retention.lastSweepAt"]:0,p=Date.now();if(p-u<x)return;d["retention.lastSweepAt"]=p,n(d);let h=p,R=y=>{let l;try{l=a.readdirSync(y,{withFileTypes:!0});}catch{return}for(let f of l){if(Date.now()-h>
|
|
7
|
+
`,"utf-8");}catch{}function o(){if(!a.existsSync(r))return {};try{let d=a.readFileSync(r,"utf-8"),g=JSON.parse(d);return g&&typeof g=="object"&&!Array.isArray(g)?g:{}}catch{return {}}}function n(d){let g=`${r}.${process.pid}.${randomUUID()}.tmp`;try{a.writeFileSync(g,JSON.stringify(d,null,2),"utf-8"),$(g,r);}catch{}}function s(){if(!a.existsSync(t))return;let d=o(),g=typeof d["retention.maxAgeMs"]=="number"?d["retention.maxAgeMs"]:0,x=typeof d["retention.sweepIntervalMs"]=="number"?d["retention.sweepIntervalMs"]:0;if(g<=0||x<=0)return;let u=typeof d["retention.lastSweepAt"]=="number"?d["retention.lastSweepAt"]:0,p=Date.now();if(p-u<x)return;d["retention.lastSweepAt"]=p,n(d);let h=p,R=y=>{let l;try{l=a.readdirSync(y,{withFileTypes:!0});}catch{return}for(let f of l){if(Date.now()-h>gr)return;let m=v.join(y,f.name);if(f.isDirectory()){R(m);continue}if(f.isFile())try{let S=a.statSync(m);if(p-S.mtimeMs>g)try{a.unlinkSync(m);}catch{}}catch{}}};R(v.join(e,ye)),R(v.join(e,he));}return {stream(d){let g=ut(d),x=v.join(e,ye,`${g}.jsonl`),u=Se(x);return {append(p){let h=u.append(p);try{s();}catch{}return h},readAll:()=>u.readAll(),readAfter:p=>u.readAfter(p),clear:()=>{u.clear&&u.clear();}}},blob(d){let g=ut(d),x=v.join(e,he,g);a.mkdirSync(x,{recursive:true});let u=Y(x);return {read:p=>u.read(p),write:(p,h)=>{u.write(p,h);try{s();}catch{}},exists:p=>u.exists(p),remove:p=>u.remove(p),readBytes:u.readBytes?p=>u.readBytes(p):void 0,writeBytes:u.writeBytes?(p,h)=>{u.writeBytes(p,h);try{s();}catch{}}:void 0,listKeys:p=>u.listKeys(p),stat:u.stat?p=>u.stat(p):void 0,renameKey:(p,h)=>u.renameKey(p,h)}},listStreams(d){let g=v.join(e,ye);try{return a.readdirSync(g,{withFileTypes:!0}).filter(x=>x.isFile()&&x.name.endsWith(".jsonl")).map(x=>x.name.slice(0,-6)).filter(x=>!d||x.startsWith(d)).sort()}catch{return []}},listBlobs(d){let g=v.join(e,he);try{return a.readdirSync(g,{withFileTypes:!0}).filter(x=>x.isDirectory()).map(x=>x.name).filter(x=>!d||x.startsWith(d)).sort()}catch{return []}},config:{get(d){return o()[d]??null},set(d,g){let x=o();g==null?delete x[d]:x[d]=g,n(x);}}}}function ue(e){function t(o){return v.join(e,...o.split("/"))+".json"}function r(o,n,s,d){if(a.existsSync(o))for(let g of a.readdirSync(o,{withFileTypes:true})){let x=n?`${n}/${g.name}`:g.name;if(g.isDirectory()){r(v.join(o,g.name),x,s,d);continue}if(!g.isFile()||!g.name.endsWith(".json"))continue;let u=x.replace(/\.json$/,"");(!s||u.startsWith(s))&&d.push(u);}}return {read(o){let n=t(o);if(!a.existsSync(n))return null;try{return JSON.parse(a.readFileSync(n,"utf-8"))}catch{return null}},write(o,n){let s=t(o),d=`${s}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(v.dirname(s),{recursive:true}),a.writeFileSync(d,JSON.stringify(n,null,2),"utf-8"),$(d,s);},delete(o){let n=t(o);try{a.existsSync(n)&&a.unlinkSync(n);}catch{}},listKeys(o){let n=[];return r(e,"",o,n),n.sort()}}}function Se(e){function t(){if(!a.existsSync(e))return [];let r=a.readFileSync(e,"utf-8").trim();return r?r.split(`
|
|
8
8
|
`).filter(Boolean).map(o=>JSON.parse(o)):[]}return {append(r){let o={id:randomUUID(),payload:r};return a.mkdirSync(v.dirname(e),{recursive:true}),a.appendFileSync(e,JSON.stringify(o)+`
|
|
9
|
-
`,"utf-8"),o},readAll(){return t()},readAfter(r){let o=t();if(!r)return {entries:o,newCursor:o.length>0?o[o.length-1].id:null};let n=o.findIndex(d=>d.id===r),s=n===-1?o:o.slice(n+1);return {entries:s,newCursor:s.length>0?s[s.length-1].id:r}},clear(){a.existsSync(e)&&a.truncateSync(e,0);}}}function
|
|
9
|
+
`,"utf-8"),o},readAll(){return t()},readAfter(r){let o=t();if(!r)return {entries:o,newCursor:o.length>0?o[o.length-1].id:null};let n=o.findIndex(d=>d.id===r),s=n===-1?o:o.slice(n+1);return {entries:s,newCursor:s.length>0?s[s.length-1].id:r}},clear(){a.existsSync(e)&&a.truncateSync(e,0);}}}function Fe(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return `[${e.map(Fe).join(",")}]`;let t=e;return `{${Object.keys(t).sort().map(o=>`${JSON.stringify(o)}:${Fe(t[o])}`).join(",")}}`}function dt(e){return createHash("sha256").update(Fe(e)).digest("hex")}function Oe(e){let t=v.join(e,"board-journal.jsonl");return {readAllEntries(){if(!a.existsSync(t))return [];let r=a.readFileSync(t,"utf-8").trim();return r?r.split(`
|
|
10
10
|
`).filter(Boolean).map(o=>JSON.parse(o)):[]},appendEntry(r){a.appendFileSync(t,JSON.stringify(r)+`
|
|
11
|
-
`,"utf-8");},generateId(){return randomUUID()}}}function ut(e){return {tryAcquire(){try{if(!a.existsSync(e)){a.mkdirSync(v.dirname(e),{recursive:!0});try{a.writeFileSync(e,"{}",{flag:"wx"});}catch{}}return lockSync(e,{retries:0})}catch{return null}}}}function dt(e,t){if(e?.kind!=="fs-path"||typeof e.value!="string"||!e.value.trim())throw new Error(`${t} must be an fs-path ref`);return v__default.normalize(e.value)}function Re(e){a__default.existsSync(e)||a__default.mkdirSync(e,{recursive:true});}function pr(e=new Date){let t=r=>String(r).padStart(2,"0");return `${t(e.getMonth()+1)}${t(e.getDate())}-${t(e.getHours())}${t(e.getMinutes())}${t(e.getSeconds())}`}function lt(e){return a__default.existsSync(e)?JSON.parse(a__default.readFileSync(e,"utf8")):null}function gr(e){let t=e.registry??{},r=dt(t.boardsIndexRef,"registry.boardsIndexRef"),o=dt(t.boardsLayoutRef,"registry.boardsLayoutRef"),n=t.deprecatedContainerRef?.kind==="fs-path"&&typeof t.deprecatedContainerRef.value=="string"&&t.deprecatedContainerRef.value.trim()?v__default.normalize(t.deprecatedContainerRef.value):"";function s(i){return v__default.join(r,`${i}.json`)}function d(i){return v__default.join(o,`${i}.json`)}function g(i){Re(n);let k=pr(),w="",b=1;for(;;){let A=`${i}-${k}${w}`,C=v__default.join(n,`${A}.json`),E=v__default.join(n,`${A}.layout.json`),j=v__default.join(n,A);if(!a__default.existsSync(C)&&!a__default.existsSync(E)&&!a__default.existsSync(j))return {archiveBase:A,archiveRecordPath:C,archiveLayoutPath:E,archiveWorkspaceDir:j};b+=1,w=`-${b}`;}}function x(i,k){if(!i||!a__default.existsSync(i))return "";let w=10;for(let b=1;b<=w;b+=1)try{return a__default.renameSync(i,k),k}catch(A){let C=A&&typeof A=="object"&&"code"in A?String(A.code??""):"";if(!(C==="EPERM"||C==="EBUSY"||C==="EACCES"||C==="ENOTEMPTY")||b===w)return "";}return ""}async function u(){if(!a__default.existsSync(r))return [];let i=[];for(let k of a__default.readdirSync(r)){if(!k.endsWith(".json"))continue;let w=k.slice(0,-5),b=JSON.parse(a__default.readFileSync(v__default.join(r,k),"utf8"));i.push({id:w,record:b});}return i}async function p(i){return lt(s(i))}async function h(i){return a__default.existsSync(s(i))}async function R(i,k){Re(r),a__default.writeFileSync(s(i),JSON.stringify(k,null,2),{encoding:"utf8",flag:"wx"});}async function y(i,k){Re(r),a__default.writeFileSync(s(i),JSON.stringify(k,null,2),{encoding:"utf8",flag:"w"});}async function l(i){return lt(d(i))}async function f(i,k){Re(o),a__default.writeFileSync(d(i),JSON.stringify(k,null,2),{encoding:"utf8",flag:"w"});}async function m(i){let k=d(i);a__default.existsSync(k)&&a__default.unlinkSync(k);}async function S(i,k,w={}){if(await R(i,k),w.layout==null){await m(i);return}await f(i,w.layout);}async function c(i,k={}){let w=s(i),b=d(i);if(!a__default.existsSync(w))return null;let A=typeof k.workspaceDir=="string"&&k.workspaceDir.trim()?v__default.normalize(k.workspaceDir):"";if(!n){if(a__default.rmSync(w,{force:true}),a__default.existsSync(b)&&a__default.rmSync(b,{force:true}),A&&a__default.existsSync(A))try{a__default.rmSync(A,{recursive:!0,force:!0});}catch{}return {archiveId:"",archiveRecordPath:"",archiveWorkspaceDir:"",archiveLayoutPath:""}}let{archiveBase:C,archiveRecordPath:E,archiveLayoutPath:j,archiveWorkspaceDir:J}=g(i);a__default.renameSync(w,E),a__default.existsSync(b)&&a__default.renameSync(b,j);let V=x(A,J);return {archiveId:C,archiveRecordPath:E,archiveWorkspaceDir:V,archiveLayoutPath:a__default.existsSync(j)?j:""}}return {kind:"fs-board-container",list:u,get:p,has:h,put:R,set:y,getLayout:l,setLayout:f,removeLayout:m,provision:S,archive:c}}function Z(e){return {status:"success",data:e}}function D(e){return {status:"fail",error:e}}function oe(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function se(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function mr(e,t={}){let r=()=>b$1(e.kvStorage("config")),o=t.unsupportedLabel??"hosted async runtime";async function n(){return t.taskExecutorRef?t.taskExecutorRef:await r().readTaskExecutorRef().catch(()=>{})}async function s(y,l,f){let m=await n();if(!m||!t.invokeExecutor)throw new Error(`${y} is not supported on the ${o} yet`);let c=(await t.invokeExecutor(m,y,{...l!==void 0?{input:typeof l=="string"?l:JSON.stringify(l)}:{},...f!==void 0?{timeout:f}:{}})).trim();return c?se(JSON.parse(c)):{}}async function d(y){try{if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("validateCardPreflight requires card JSON object in body");let l=y.body,f=l["card-content"]??l,m=typeof f.id=="string"?f.id:"(unknown)",S=a$6(f),c=Array.isArray(f.source_defs)&&f.source_defs.length>0,i=[...S.issues];if(c)if(t.invokeExecutor&&await n())for(let k of f.source_defs){let w=typeof k.bindTo=="string"?k.bindTo:"(unknown)";try{let b=await s("validate-source-def",k,1e4);if(b.ok!==!0&&Array.isArray(b.errors))for(let A of b.errors)typeof A=="string"&&A&&i.push(`source "${w}": ${A}`);}catch(b){i.push(`source "${w}": executor validate-source-def failed \u2014 ${b instanceof Error?b.message:String(b)}`);}}else await n()&&i.push(`executor-backed source_def preflight is not supported on the ${o} yet`);return Z({cardId:m,isValid:i.length===0,issues:i})}catch(l){return oe(l)}}function g(y){try{if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("evalCardCompute requires a JSON object in body");let l=y.body,f=l["card-content"]??l,m=typeof f.id=="string"?f.id:"(unknown)",S=l["mock-fetched-sources"]??{},c=l["mock-requires"]??{},i=f.compute;if(!i||!Array.isArray(i)||i.length===0)return Z({cardId:m,ok:!0,computed_values:{},errors:[]});let k={id:m,card_data:f.card_data??{},requires:c,source_defs:f.source_defs,compute:i},w=a$7.runSync(k,{sourcesData:S});return Z({cardId:m,ok:(w.errors??[]).length===0,computed_values:w.node.computed_values??{},errors:w.errors??[]})}catch(l){return oe(l)}}async function x(y){return D(`${y} is not supported on the ${o} yet`)}async function u(){try{return t.invokeExecutor&&await n()?Z(await s("describe-capabilities",void 0,1e4)):await x("describeTaskExecutorCapabilities")}catch(y){return oe(y)}}async function p(y){try{if(!t.invokeExecutor||!await n())return await x("probeSourcePreflight");if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("probeSourcePreflight requires card JSON object in body");let l=y.body,f=l["card-content"]??l,m=se(l["mock-projections"]??{}),S=y.params?.sourceIdx,c=Array.isArray(f.source_defs)?f.source_defs:[];if(S===void 0)return D("probeSourcePreflight requires params.sourceIdx");if(S<0||S>=c.length)return D(`sourceIdx ${S} out of range (card has ${c.length} source(s))`);let i=c[S],k=typeof i.bindTo=="string"?i.bindTo:"source",w=await s("probe-source-preflight",{...i,_projections:m},i.timeout??6e4);return w.ok!==!0?D(typeof w.error=="string"?w.error:"Preflight probe failed"):Z({bindTo:k,reachable:w.reachable,latencyMs:w.latencyMs,...typeof w.note=="string"?{note:w.note}:{}})}catch(l){return oe(l)}}async function h(y){try{if(!t.invokeExecutor||!await n())return await x("runSourcePreflight");if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("runSourcePreflight requires card JSON object in body");let l=y.body,f=l["card-content"]??l,m=se(l["mock-projections"]??{}),S=y.params?.sourceIdx,c=Array.isArray(f.source_defs)?f.source_defs:[];if(S===void 0)return D("runSourcePreflight requires params.sourceIdx");if(S<0||S>=c.length)return D(`sourceIdx ${S} out of range (card has ${c.length} source(s))`);let i=c[S],k=typeof i.bindTo=="string"?i.bindTo:"source",w=await s("run-source-preflight",{...i,_projections:m},i.timeout??6e4);return w.ok!==!0?Z({bindTo:k,ok:!1,result:null,issues:[typeof w.error=="string"?w.error:"Preflight run failed"]}):Z({bindTo:k,ok:!0,result:Object.prototype.hasOwnProperty.call(w,"resultValue")?w.resultValue:null,issues:[]})}catch(l){return oe(l)}}async function R(y){try{if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("simulateCardCycle requires a JSON object in body");let l=y.body,f=l["card-content"]??l,m=typeof f.id=="string"?f.id:"(unknown)",S=se(l["mock-fetched-sources"]??{}),c=se(l["mock-requires"]??{}),i=await d({body:{"card-content":f}}),k=i.status==="success"?{isValid:i.data.isValid,issues:i.data.issues}:{isValid:!1,issues:[i.status==="fail"?i.error:"internal error"]},w=Array.isArray(f.source_defs)?f.source_defs:[],b=se(f.card_data??{}),A=[],C=[];if(w.length>0){A=a$7.enrichSourcesSync(w,{card_data:b,requires:c});for(let P of A){let M=P.projections,U=P._projections;if(M&&U){for(let O of Object.keys(M))if(U[O]===void 0){let gt=typeof P.bindTo=="string"?P.bindTo:"(unknown)";C.push({bindTo:gt,key:O,error:`Projection "${O}" resolved to undefined`});}}}}let E=[],j={...S};for(let P=0;P<A.length;P+=1){let M=A[P],U=typeof M.bindTo=="string"?M.bindTo:`source_${P}`;if(!t.invokeExecutor||!await n()){E.push({bindTo:U,skipped:!0,error:"No task executor configured"});continue}try{let O=await s("run-source-preflight",M,M.timeout??6e4);O.ok===!0&&!Object.prototype.hasOwnProperty.call(S,U)&&Object.prototype.hasOwnProperty.call(O,"resultValue")&&(j[U]=O.resultValue),E.push({bindTo:U,reachable:O.reachable,latencyMs:O.latencyMs,...O.ok===!0?{}:{error:typeof O.error=="string"?O.error:"Preflight run failed"}});}catch{E.push({bindTo:U,skipped:!0,error:"Executor does not support run-source-preflight"});}}let J=f.compute,V={},X=[];if(J&&Array.isArray(J)&&J.length>0){let P={id:m,card_data:b,requires:c,source_defs:f.source_defs,compute:J},M=a$7.runSync(P,{sourcesData:j});V=M.node.computed_values??{},X=M.errors??[];}return Z({cardId:m,ok:k.isValid&&C.length===0&&X.length===0&&E.every(P=>!P.error),validation:k,source_probes:E,projection_errors:C,fetched_sources:j,computed_values:V,compute_errors:X})}catch(l){return oe(l)}}return {describeTaskExecutorCapabilities:u,validateCardPreflight:d,evalCardCompute:g,probeSourcePreflight:p,runSourcePreflight:h,simulateCardCycle:R}}function hn(){return {async invoke(e,t){if(e.howToRun!=="local-node")return {dispatched:false,error:`createNodeSpawnInvocationAdapter: unsupported howToRun "${e.howToRun}"`};let r="";try{let s=e.whatToRun;r=q(s);}catch{r="";}if(!r)return {dispatched:false,error:"createNodeSpawnInvocationAdapter: could not resolve executable path from whatToRun"};let o={...t},n=Buffer.from(JSON.stringify(o)).toString("base64");try{return spawn(process.execPath,[r,"--boardId",String(t.boardId??""),"--cardId",String(t.cardId??""),"--extraEncJson",n],{stdio:"ignore",windowsHide:!0}).unref(),{dispatched:!0}}catch(s){return {dispatched:false,error:s instanceof Error?s.message:String(s)}}},async describe(e){if(e.howToRun!=="local-node")return null;let t="";try{let r=e.whatToRun;t=q(r);}catch{t="";}if(!t)return null;try{let r=spawnSync(process.execPath,[t,"describe"],{timeout:5e3,encoding:"utf-8",windowsHide:!0});return r.status!==0?null:JSON.parse(String(r.stdout).trim())}catch{return null}}}}var Rr=".board.lock";function ft(e,t){if(!e||!t)return false;let r=String(e).replace(/[\\/]+$/,"").split(/[\\/]+/).filter(Boolean);return r.length>0&&r[r.length-1]===t}function Sr(e,t){return typeof e=="string"?{cliDir:e,opts:t}:{cliDir:void 0,opts:e}}function xr(e,t){return typeof e=="string"?{cliDir:e,opts:t}:{cliDir:void 0,opts:e}}function pt(e){if(e)return e;let t=We(import.meta.url),r=[t,I(t,"..","cli","node"),I(t,"..","..","cli","node")];for(let o of r)try{return Ge(o),o}catch{}throw new Error(`createFsBoardPlatformAdapter: could not resolve a public CLI directory from module dir ${t}`)}function wr(e$1,t,r){let{cliDir:o,opts:n}=Sr(t,r),s=e$1.value,d$1=null,g,x=null,u;function p(){return u||(u=pt(o)),u}function h(c){let i=n?.queueStoreRef;if(!i)throw new Error(`createFsBoardPlatformAdapter: ${c} requires opts.queueStoreRef`);return i}function R(c){let i=n?.boardRuntimeStoreRef;if(!i)throw new Error(`createFsBoardPlatformAdapter: ${c} requires opts.boardRuntimeStoreRef`);return i}let y=n?.callbackTransport??d({notifyChannel:n?.notifyChannel,boardRuntimeStoreRef:n?.boardRuntimeStoreRef,queueStoreRef:n?.queueStoreRef}),l;function f(c){return l.queueStorageForRef(h(`internal lane "${c}"`),c)}function m(c){return a$5(f(c))}function S(){if(n?.suppressSpawn||d$1)return;let c=be({id:"task-executor",workerStore:m("task-executor"),handleRequest:async(i,k)=>{let w=await te(k.ref,k.args,{cliDir:p(),cwd:process.cwd(),label:"fsBoardAdapter.boardWorker"});if(w.result!=="success"){let b=typeof w.data?.error=="string"?w.data.error:w.error;throw new Error(b||w.result)}}});d$1=fe(c).catch(i=>{n?.onWarn?.(`[board-worker] in-process queue drain failed: ${i instanceof Error?i.message:String(i)}`);}).finally(()=>{d$1=null,f("task-executor").peekActive().length>0&&S();});}return l={kvStorage:c=>ae(I(s,`.${c}`)),blobStorage:c=>c?Y(I(s,c)):Y(s),blobStorageForRef:c=>Y(b(c).value),chatStorageForRef:c=>kr(b(c).value),queueStorageForRef:(c,i)=>Fe(I(b(c).value,i)),scratchStorage:()=>ie(I(s,".tmp")),scratchStorageForRef:c=>ie(b(c).value),archiveFactory:()=>ye(I(s,"archive")),archiveFactoryForRef:c=>ye(b(c).value),journalAdapter:()=>$e(s),journalAdapterForRef:c=>$e(b(c).value),lock:ut(I(s,Rr)),callbackTransport:y,async dispatchExecution(c,i){let k=!!i.output?.ref;if(c.howToRun==="queue-storage")try{let b=m("task-executor"),A=typeof c.extra?.boardId=="string"?c.extra.boardId:void 0;if(k)return b.enqueueRequest({boardId:A,ref:c,args:i}),{dispatched:!0};let C=i.source_def?.bindTo??le().slice(0,8),E=ie(I(s,".tmp")),j=E.create(JSON.stringify(i,null,2),`exec-in-${C}`,".json"),J=E.getUniqueKey(`exec-out-${C}`,".json"),V=E.getUniqueKey(`exec-err-${C}`,".txt"),X=a$2(E.keyRef(j)),P=a$2(E.keyRef(J)),M=a$2(E.keyRef(V));return b.enqueueRequest({boardId:A,ref:c,args:{subcommand:"run-source-fetch",inRef:X,outRef:P,errRef:M}}),{dispatched:!0}}catch(b){return {dispatched:false,error:b instanceof Error?b.message:String(b)}}if(k&&(c.howToRun==="http:post"||c.howToRun==="in-process-loop"))try{if(c.howToRun==="http:post"){let C=q(c.whatToRun),E=await fetch(C,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...i,...c.extra?{extra:c.extra}:{}})});if(!E.ok){let j=await E.text().catch(()=>"");return {dispatched:!1,error:`HTTP ${E.status}: ${j}`}}return {dispatched:!0}}let b=await te(c,i,{cwd:process.cwd(),label:"dispatchExecution.directHostedWorker"});return b.result==="success"?{dispatched:!0}:{dispatched:!1,error:(typeof b.data?.error=="string"?b.data.error:b.error)||b.result}}catch(b){return {dispatched:false,error:b instanceof Error?b.message:String(b)}}let w=c.howToRun==="local-node"||c.howToRun==="local-process"||c.howToRun==="local-python"||c.howToRun==="built-in";if(n?.suppressSpawn&&w)return {dispatched:false};try{let b=i.source_def?.bindTo??le().slice(0,8),A=ie(I(s,".tmp")),C=A.create(JSON.stringify(i,null,2),`exec-in-${b}`,".json"),E=A.getUniqueKey(`exec-out-${b}`,".json"),j=A.getUniqueKey(`exec-err-${b}`,".txt"),J=a$2(A.keyRef(C)),V=a$2(A.keyRef(E)),X=a$2(A.keyRef(j)),P=m("task-executor"),M=typeof c.extra?.boardId=="string"?c.extra.boardId:void 0;return P.enqueueRequest({boardId:M,ref:c,args:{subcommand:"run-source-fetch",inRef:J,outRef:V,errRef:X}}),S(),{dispatched:!0}}catch(b){let A=b instanceof Error?b.message:String(b);try{let C=ye(I(s,"archive")),E=new Date().toISOString().replace(/[:.]/g,"-"),j=i.source_def?.bindTo??"unknown";C.blob("exec-failures").write(`${E}-${j}.json`,JSON.stringify({error:A,args:i,ref:c,at:new Date().toISOString()},null,2));}catch{}return {dispatched:false,error:A}}},supportsDirectSourceOutput(c){return c.howToRun==="queue-storage"||c.howToRun==="http:post"||c.howToRun==="in-process-loop"},resolveBlob(c){let i=Je(c.value)?Pe().read(c.value):Y(s).read(c.value);if(i===null)throw new Error(`resolveBlob: blob not found: ::${c.kind}::${c.value}`);return i},hashFn:ct,genId:()=>Ke(`${Date.now()}-${Math.random()}`).slice(0,32),kvStorageForRef:c=>ae(b(c).value),requestProcessAccumulated(){if(n?.suppressSpawn||x)return;let c=this,i=g??=e(e$1,c,{boardRuntimeStoreRef:R("requestProcessAccumulated")}),k=ve({id:"process-accumulated",queueStorage:f("process-accumulated"),handleMessage:async()=>{let w=await i.processAccumulatedEvents({});if(w.status!=="success")throw new Error(w.error||`processAccumulatedEvents returned ${w.status}`)}});x=fe(k).catch(w=>{n?.onWarn?.(`[process-accumulated] in-process queue drain failed: ${w instanceof Error?w.message:String(w)}`);}).finally(()=>{x=null,f("process-accumulated").peekActive().length>0&&c.requestProcessAccumulated?.();});},publishBoardChangeNotifications(c){if(!n?.notifyChannel||c.length===0)return;let i=c.map(k=>({id:le(),ts:new Date().toISOString(),boardRef:a$2(e$1),notification:k}));Ye(n.notifyChannel,i,n.onWarn);},onWarn:n?.onWarn},l}function Rn(e,t,r){let{cliDir:o,opts:n}=xr(t,r),s,d=()=>(s||(s=pt(o)),s),g=wr(e,o,n),x=Ce({resolveCliDir:d,...n?.resolveRef?{resolveRef:n.resolveRef}:{}});return {...g,invokeExecutor:x.invokeExecutor,validateSchema(u){let p=d$1(u);return {ok:p.errors.length===0,errors:p.errors}},absoluteBlob:Pe()}}function Sn(e,t={}){let r=t.chatsSubdir??"chats",o=t.kvSubdir??".kv",n=o?[o,"chat"]:["chat"],s=r&&!ft(e,r)?I(e,r):e,d=ae(I(e,...n));return a$3(g=>{let u=`${String(g).replace(/[^a-zA-Z0-9_-]/g,"_")}.jsonl`,p=I(s,u);return he(p)},d)}function kr(e){return a$3(t=>{let o=`${String(t).replace(/[^a-zA-Z0-9_-]/g,"_")}.jsonl`;return he(I(e,"journal",o))},ae(I(e,"kv")))}function xn(e,t={}){let r=t.filesSubdir??"files",o=r&&!ft(e,r)?I(e,r):e;return a$4(Y(o))}function wn(e){try{let t=JSON.parse(Buffer.from(e,"base64url").toString());return typeof t.br=="string"?t.br:null}catch{return null}}export{pe as buildLocalBaseSpec,be as createBoardWorkerQueueLane,er as createExecutionRefInvoker,Y as createFsBlobStorage,Sn as createFsBoardChatStorage,gr as createFsBoardContainerStorage,xn as createFsBoardFileArtifactsStore,Rn as createFsBoardNonCorePlatformAdapter,wr as createFsBoardPlatformAdapter,kr as createFsChatStorageForRefRoot,Fe as createFsQueueStorage,mr as createHostedAsyncBoardNonCorePublic,hn as createNodeSpawnInvocationAdapter,Ce as createNonCoreExecutorDispatcher,ve as createQueueStorageLane,wn as decodeBoardRefFromToken,fe as drainQueueLaneToIdle,Te as evaluateArgsMassaging,te as invokeExecutionRef,Ee as invokeExecutionRefSync,tr as invokeRefSync,zt as registerInProcessExecutionHandler,q as resolveWhatToRunValue,rt as resolveYamlFlowCliPath,et as startQueueLaneRunner,Jt as startQueueLaneRunners,Gt as unregisterInProcessExecutionHandler};//# sourceMappingURL=board-live-cards-node.js.map
|
|
11
|
+
`,"utf-8");},generateId(){return randomUUID()}}}function lt(e){return {tryAcquire(){try{if(!a.existsSync(e)){a.mkdirSync(v.dirname(e),{recursive:!0});try{a.writeFileSync(e,"{}",{flag:"wx"});}catch{}}return lockSync(e,{retries:0})}catch{return null}}}}function ft(e,t){if(e?.kind!=="fs-path"||typeof e.value!="string"||!e.value.trim())throw new Error(`${t} must be an fs-path ref`);return v__default.normalize(e.value)}function xe(e){a__default.existsSync(e)||a__default.mkdirSync(e,{recursive:true});}function mr(e=new Date){let t=r=>String(r).padStart(2,"0");return `${t(e.getMonth()+1)}${t(e.getDate())}-${t(e.getHours())}${t(e.getMinutes())}${t(e.getSeconds())}`}function pt(e){return a__default.existsSync(e)?JSON.parse(a__default.readFileSync(e,"utf8")):null}function yr(e){let t=e.registry??{},r=ft(t.boardsIndexRef,"registry.boardsIndexRef"),o=ft(t.boardsLayoutRef,"registry.boardsLayoutRef"),n=t.deprecatedContainerRef?.kind==="fs-path"&&typeof t.deprecatedContainerRef.value=="string"&&t.deprecatedContainerRef.value.trim()?v__default.normalize(t.deprecatedContainerRef.value):"";function s(i){return v__default.join(r,`${i}.json`)}function d(i){return v__default.join(o,`${i}.json`)}function g(i){xe(n);let k=mr(),w="",b=1;for(;;){let A=`${i}-${k}${w}`,C=v__default.join(n,`${A}.json`),E=v__default.join(n,`${A}.layout.json`),j=v__default.join(n,A);if(!a__default.existsSync(C)&&!a__default.existsSync(E)&&!a__default.existsSync(j))return {archiveBase:A,archiveRecordPath:C,archiveLayoutPath:E,archiveWorkspaceDir:j};b+=1,w=`-${b}`;}}function x(i,k){if(!i||!a__default.existsSync(i))return "";let w=10;for(let b=1;b<=w;b+=1)try{return a__default.renameSync(i,k),k}catch(A){let C=A&&typeof A=="object"&&"code"in A?String(A.code??""):"";if(!(C==="EPERM"||C==="EBUSY"||C==="EACCES"||C==="ENOTEMPTY")||b===w)return "";}return ""}async function u(){if(!a__default.existsSync(r))return [];let i=[];for(let k of a__default.readdirSync(r)){if(!k.endsWith(".json"))continue;let w=k.slice(0,-5),b=JSON.parse(a__default.readFileSync(v__default.join(r,k),"utf8"));i.push({id:w,record:b});}return i}async function p(i){return pt(s(i))}async function h(i){return a__default.existsSync(s(i))}async function R(i,k){xe(r),a__default.writeFileSync(s(i),JSON.stringify(k,null,2),{encoding:"utf8",flag:"wx"});}async function y(i,k){xe(r),a__default.writeFileSync(s(i),JSON.stringify(k,null,2),{encoding:"utf8",flag:"w"});}async function l(i){return pt(d(i))}async function f(i,k){xe(o),a__default.writeFileSync(d(i),JSON.stringify(k,null,2),{encoding:"utf8",flag:"w"});}async function m(i){let k=d(i);a__default.existsSync(k)&&a__default.unlinkSync(k);}async function S(i,k,w={}){if(await R(i,k),w.layout==null){await m(i);return}await f(i,w.layout);}async function c(i,k={}){let w=s(i),b=d(i);if(!a__default.existsSync(w))return null;let A=typeof k.workspaceDir=="string"&&k.workspaceDir.trim()?v__default.normalize(k.workspaceDir):"";if(!n){if(a__default.rmSync(w,{force:true}),a__default.existsSync(b)&&a__default.rmSync(b,{force:true}),A&&a__default.existsSync(A))try{a__default.rmSync(A,{recursive:!0,force:!0});}catch{}return {archiveId:"",archiveRecordPath:"",archiveWorkspaceDir:"",archiveLayoutPath:""}}let{archiveBase:C,archiveRecordPath:E,archiveLayoutPath:j,archiveWorkspaceDir:X}=g(i);a__default.renameSync(w,E),a__default.existsSync(b)&&a__default.renameSync(b,j);let K=x(A,X);return {archiveId:C,archiveRecordPath:E,archiveWorkspaceDir:K,archiveLayoutPath:a__default.existsSync(j)?j:""}}return {kind:"fs-board-container",list:u,get:p,has:h,put:R,set:y,getLayout:l,setLayout:f,removeLayout:m,provision:S,archive:c}}function Z(e){return {status:"success",data:e}}function D(e){return {status:"fail",error:e}}function ie(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function ae(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function hr(e,t={}){let r=()=>b$1(e.kvStorage("config")),o=t.unsupportedLabel??"hosted async runtime";async function n(){return t.taskExecutorRef?t.taskExecutorRef:await r().readTaskExecutorRef().catch(()=>{})}async function s(y,l,f){let m=await n();if(!m||!t.invokeExecutor)throw new Error(`${y} is not supported on the ${o} yet`);let c=(await t.invokeExecutor(m,y,{...l!==void 0?{input:typeof l=="string"?l:JSON.stringify(l)}:{},...f!==void 0?{timeout:f}:{}})).trim();return c?ae(JSON.parse(c)):{}}async function d(y){try{if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("validateCardPreflight requires card JSON object in body");let l=y.body,f=l["card-content"]??l,m=typeof f.id=="string"?f.id:"(unknown)",S=a$6(f),c=Array.isArray(f.source_defs)&&f.source_defs.length>0,i=[...S.issues];if(c)if(t.invokeExecutor&&await n())for(let k of f.source_defs){let w=typeof k.bindTo=="string"?k.bindTo:"(unknown)";try{let b=await s("validate-source-def",k,1e4);if(b.ok!==!0&&Array.isArray(b.errors))for(let A of b.errors)typeof A=="string"&&A&&i.push(`source "${w}": ${A}`);}catch(b){i.push(`source "${w}": executor validate-source-def failed \u2014 ${b instanceof Error?b.message:String(b)}`);}}else await n()&&i.push(`executor-backed source_def preflight is not supported on the ${o} yet`);return Z({cardId:m,isValid:i.length===0,issues:i})}catch(l){return ie(l)}}function g(y){try{if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("evalCardCompute requires a JSON object in body");let l=y.body,f=l["card-content"]??l,m=typeof f.id=="string"?f.id:"(unknown)",S=l["mock-fetched-sources"]??{},c=l["mock-requires"]??{},i=f.compute;if(!i||!Array.isArray(i)||i.length===0)return Z({cardId:m,ok:!0,computed_values:{},errors:[]});let k={id:m,card_data:f.card_data??{},requires:c,source_defs:f.source_defs,compute:i},w=a$7.runSync(k,{sourcesData:S});return Z({cardId:m,ok:(w.errors??[]).length===0,computed_values:w.node.computed_values??{},errors:w.errors??[]})}catch(l){return ie(l)}}async function x(y){return D(`${y} is not supported on the ${o} yet`)}async function u(){try{return t.invokeExecutor&&await n()?Z(await s("describe-capabilities",void 0,1e4)):await x("describeTaskExecutorCapabilities")}catch(y){return ie(y)}}async function p(y){try{if(!t.invokeExecutor||!await n())return await x("probeSourcePreflight");if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("probeSourcePreflight requires card JSON object in body");let l=y.body,f=l["card-content"]??l,m=ae(l["mock-projections"]??{}),S=y.params?.sourceIdx,c=Array.isArray(f.source_defs)?f.source_defs:[];if(S===void 0)return D("probeSourcePreflight requires params.sourceIdx");if(S<0||S>=c.length)return D(`sourceIdx ${S} out of range (card has ${c.length} source(s))`);let i=c[S],k=typeof i.bindTo=="string"?i.bindTo:"source",w=await s("probe-source-preflight",{...i,_projections:m},i.timeout??6e4);return w.ok!==!0?D(typeof w.error=="string"?w.error:"Preflight probe failed"):Z({bindTo:k,reachable:w.reachable,latencyMs:w.latencyMs,...typeof w.note=="string"?{note:w.note}:{}})}catch(l){return ie(l)}}async function h(y){try{if(!t.invokeExecutor||!await n())return await x("runSourcePreflight");if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("runSourcePreflight requires card JSON object in body");let l=y.body,f=l["card-content"]??l,m=ae(l["mock-projections"]??{}),S=y.params?.sourceIdx,c=Array.isArray(f.source_defs)?f.source_defs:[];if(S===void 0)return D("runSourcePreflight requires params.sourceIdx");if(S<0||S>=c.length)return D(`sourceIdx ${S} out of range (card has ${c.length} source(s))`);let i=c[S],k=typeof i.bindTo=="string"?i.bindTo:"source",w=await s("run-source-preflight",{...i,_projections:m},i.timeout??6e4);return w.ok!==!0?Z({bindTo:k,ok:!1,result:null,issues:[typeof w.error=="string"?w.error:"Preflight run failed"]}):Z({bindTo:k,ok:!0,result:Object.prototype.hasOwnProperty.call(w,"resultValue")?w.resultValue:null,issues:[]})}catch(l){return ie(l)}}async function R(y){try{if(!y.body||typeof y.body!="object"||Array.isArray(y.body))return D("simulateCardCycle requires a JSON object in body");let l=y.body,f=l["card-content"]??l,m=typeof f.id=="string"?f.id:"(unknown)",S=ae(l["mock-fetched-sources"]??{}),c=ae(l["mock-requires"]??{}),i=await d({body:{"card-content":f}}),k=i.status==="success"?{isValid:i.data.isValid,issues:i.data.issues}:{isValid:!1,issues:[i.status==="fail"?i.error:"internal error"]},w=Array.isArray(f.source_defs)?f.source_defs:[],b=ae(f.card_data??{}),A=[],C=[],E=[];if(w.length>0){A=a$7.enrichSourcesSync(w,{card_data:b,requires:c}),C=A.filter(B=>B._skip!==!0);for(let B of C){let O=B.projections,W=B._projections;if(O&&W){for(let M of Object.keys(O))if(W[M]===void 0){let yt=typeof B.bindTo=="string"?B.bindTo:"(unknown)";E.push({bindTo:yt,key:M,error:`Projection "${M}" resolved to undefined`});}}}}let j=[],X=new Set(C.map(B=>typeof B.bindTo=="string"?B.bindTo:"")),K=Object.fromEntries(Object.entries(S).filter(([B])=>X.has(B)));for(let B=0;B<A.length;B+=1){let O=A[B],W=typeof O.bindTo=="string"?O.bindTo:`source_${B}`;if(O._skip===!0){j.push({bindTo:W,skipped:!0});continue}if(!t.invokeExecutor||!await n()){j.push({bindTo:W,skipped:!0,error:"No task executor configured"});continue}try{let M=await s("run-source-preflight",O,O.timeout??6e4);M.ok===!0&&!Object.prototype.hasOwnProperty.call(S,W)&&Object.prototype.hasOwnProperty.call(M,"resultValue")&&(K[W]=M.resultValue),j.push({bindTo:W,reachable:M.reachable,latencyMs:M.latencyMs,...M.ok===!0?{}:{error:typeof M.error=="string"?M.error:"Preflight run failed"}});}catch{j.push({bindTo:W,skipped:!0,error:"Executor does not support run-source-preflight"});}}let U=f.compute,se={},ee=[];if(U&&Array.isArray(U)&&U.length>0){let B={id:m,card_data:b,requires:c,source_defs:f.source_defs,compute:U},O=a$7.runSync(B,{sourcesData:K});se=O.node.computed_values??{},ee=O.errors??[];}return Z({cardId:m,ok:k.isValid&&E.length===0&&ee.length===0&&j.every(B=>!B.error),validation:k,source_probes:j,projection_errors:E,fetched_sources:K,computed_values:se,compute_errors:ee})}catch(l){return ie(l)}}return {describeTaskExecutorCapabilities:u,validateCardPreflight:d,evalCardCompute:g,probeSourcePreflight:p,runSourcePreflight:h,simulateCardCycle:R}}function Sn(){return {async invoke(e,t){if(e.howToRun!=="local-node")return {dispatched:false,error:`createNodeSpawnInvocationAdapter: unsupported howToRun "${e.howToRun}"`};let r="";try{let s=e.whatToRun;r=q(s);}catch{r="";}if(!r)return {dispatched:false,error:"createNodeSpawnInvocationAdapter: could not resolve executable path from whatToRun"};let o={...t},n=Buffer.from(JSON.stringify(o)).toString("base64");try{return spawn(process.execPath,[r,"--boardId",String(t.boardId??""),"--cardId",String(t.cardId??""),"--extraEncJson",n],{stdio:"ignore",windowsHide:!0}).unref(),{dispatched:!0}}catch(s){return {dispatched:false,error:s instanceof Error?s.message:String(s)}}},async describe(e){if(e.howToRun!=="local-node")return null;let t="";try{let r=e.whatToRun;t=q(r);}catch{t="";}if(!t)return null;try{let r=spawnSync(process.execPath,[t,"describe"],{timeout:5e3,encoding:"utf-8",windowsHide:!0});return r.status!==0?null:JSON.parse(String(r.stdout).trim())}catch{return null}}}}var xr=".board.lock";function gt(e,t){if(!e||!t)return false;let r=String(e).replace(/[\\/]+$/,"").split(/[\\/]+/).filter(Boolean);return r.length>0&&r[r.length-1]===t}function wr(e,t){return typeof e=="string"?{cliDir:e,opts:t}:{cliDir:void 0,opts:e}}function kr(e,t){return typeof e=="string"?{cliDir:e,opts:t}:{cliDir:void 0,opts:e}}function mt(e){if(e)return e;let t=Ve(import.meta.url),r=[t,P(t,"..","cli","node"),P(t,"..","..","cli","node")];for(let o of r)try{return Ze(o),o}catch{}throw new Error(`createFsBoardPlatformAdapter: could not resolve a public CLI directory from module dir ${t}`)}function br(e$1,t,r){let{cliDir:o,opts:n}=wr(t,r),s=e$1.value,d$1=null,g,x=null,u;function p(){return u||(u=mt(o)),u}function h(c){let i=n?.queueStoreRef;if(!i)throw new Error(`createFsBoardPlatformAdapter: ${c} requires opts.queueStoreRef`);return i}function R(c){let i=n?.boardRuntimeStoreRef;if(!i)throw new Error(`createFsBoardPlatformAdapter: ${c} requires opts.boardRuntimeStoreRef`);return i}let y=n?.callbackTransport??d({notifyChannel:n?.notifyChannel,boardRuntimeStoreRef:n?.boardRuntimeStoreRef,queueStoreRef:n?.queueStoreRef}),l;function f(c){return l.queueStorageForRef(h(`internal lane "${c}"`),c)}function m(c){return a$5(f(c))}function S(){if(n?.suppressSpawn||d$1)return;let c=Ae({id:"task-executor",workerStore:m("task-executor"),handleRequest:async(i,k)=>{let w=await re(k.ref,k.args,{cliDir:p(),cwd:process.cwd(),label:"fsBoardAdapter.boardWorker"});if(w.result!=="success"){let b=typeof w.data?.error=="string"?w.data.error:w.error;throw new Error(b||w.result)}}});d$1=ge(c).catch(i=>{n?.onWarn?.(`[board-worker] in-process queue drain failed: ${i instanceof Error?i.message:String(i)}`);}).finally(()=>{d$1=null,f("task-executor").peekActive().length>0&&S();});}return l={kvStorage:c=>ue(P(s,`.${c}`)),blobStorage:c=>c?Y(P(s,c)):Y(s),blobStorageForRef:c=>Y(b(c).value),chatStorageForRef:c=>vr(b(c).value),queueStorageForRef:(c,i)=>Me(P(b(c).value,i)),scratchStorage:()=>ce(P(s,".tmp")),scratchStorageForRef:c=>ce(b(c).value),archiveFactory:()=>Re(P(s,"archive")),archiveFactoryForRef:c=>Re(b(c).value),journalAdapter:()=>Oe(s),journalAdapterForRef:c=>Oe(b(c).value),lock:lt(P(s,xr)),callbackTransport:y,async dispatchExecution(c,i){let k=!!i.output?.ref;if(c.howToRun==="queue-storage")try{let b=m("task-executor"),A=typeof c.extra?.boardId=="string"?c.extra.boardId:void 0;if(k)return b.enqueueRequest({boardId:A,ref:c,args:i}),{dispatched:!0};let C=i.source_def?.bindTo??pe().slice(0,8),E=ce(P(s,".tmp")),j=E.create(JSON.stringify(i,null,2),`exec-in-${C}`,".json"),X=E.getUniqueKey(`exec-out-${C}`,".json"),K=E.getUniqueKey(`exec-err-${C}`,".txt"),U=a$2(E.keyRef(j)),se=a$2(E.keyRef(X)),ee=a$2(E.keyRef(K));return b.enqueueRequest({boardId:A,ref:c,args:{subcommand:"run-source-fetch",inRef:U,outRef:se,errRef:ee}}),{dispatched:!0}}catch(b){return {dispatched:false,error:b instanceof Error?b.message:String(b)}}if(k&&(c.howToRun==="http:post"||c.howToRun==="in-process-loop"))try{if(c.howToRun==="http:post"){let C=q(c.whatToRun),E=await fetch(C,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...i,...c.extra?{extra:c.extra}:{}})});if(!E.ok){let j=await E.text().catch(()=>"");return {dispatched:!1,error:`HTTP ${E.status}: ${j}`}}return {dispatched:!0}}let b=await re(c,i,{cwd:process.cwd(),label:"dispatchExecution.directHostedWorker"});return b.result==="success"?{dispatched:!0}:{dispatched:!1,error:(typeof b.data?.error=="string"?b.data.error:b.error)||b.result}}catch(b){return {dispatched:false,error:b instanceof Error?b.message:String(b)}}let w=c.howToRun==="local-node"||c.howToRun==="local-process"||c.howToRun==="local-python"||c.howToRun==="built-in";if(n?.suppressSpawn&&w)return {dispatched:false};try{let b=i.source_def?.bindTo??pe().slice(0,8),A=ce(P(s,".tmp")),C=A.create(JSON.stringify(i,null,2),`exec-in-${b}`,".json"),E=A.getUniqueKey(`exec-out-${b}`,".json"),j=A.getUniqueKey(`exec-err-${b}`,".txt"),X=a$2(A.keyRef(C)),K=a$2(A.keyRef(E)),U=a$2(A.keyRef(j)),se=m("task-executor"),ee=typeof c.extra?.boardId=="string"?c.extra.boardId:void 0;return se.enqueueRequest({boardId:ee,ref:c,args:{subcommand:"run-source-fetch",inRef:X,outRef:K,errRef:U}}),S(),{dispatched:!0}}catch(b){let A=b instanceof Error?b.message:String(b);try{let C=Re(P(s,"archive")),E=new Date().toISOString().replace(/[:.]/g,"-"),j=i.source_def?.bindTo??"unknown";C.blob("exec-failures").write(`${E}-${j}.json`,JSON.stringify({error:A,args:i,ref:c,at:new Date().toISOString()},null,2));}catch{}return {dispatched:false,error:A}}},supportsDirectSourceOutput(c){return c.howToRun==="queue-storage"||c.howToRun==="http:post"||c.howToRun==="in-process-loop"},resolveBlob(c){let i=We(c.value)?$e().read(c.value):Y(s).read(c.value);if(i===null)throw new Error(`resolveBlob: blob not found: ::${c.kind}::${c.value}`);return i},hashFn:dt,genId:()=>He(`${Date.now()}-${Math.random()}`).slice(0,32),kvStorageForRef:c=>ue(b(c).value),requestProcessAccumulated(){if(n?.suppressSpawn||x)return;let c=this,i=g??=e(e$1,c,{boardRuntimeStoreRef:R("requestProcessAccumulated")}),k=Te({id:"process-accumulated",queueStorage:f("process-accumulated"),handleMessage:async()=>{let w=await i.processAccumulatedEvents({});if(w.status!=="success")throw new Error(w.error||`processAccumulatedEvents returned ${w.status}`)}});x=ge(k).catch(w=>{n?.onWarn?.(`[process-accumulated] in-process queue drain failed: ${w instanceof Error?w.message:String(w)}`);}).finally(()=>{x=null,f("process-accumulated").peekActive().length>0&&c.requestProcessAccumulated?.();});},publishBoardChangeNotifications(c){if(!n?.notifyChannel||c.length===0)return;let i=c.map(k=>({id:pe(),ts:new Date().toISOString(),boardRef:a$2(e$1),notification:k}));Xe(n.notifyChannel,i,n.onWarn);},onWarn:n?.onWarn},l}function xn(e,t,r){let{cliDir:o,opts:n}=kr(t,r),s,d=()=>(s||(s=mt(o)),s),g=br(e,o,n),x=Be({resolveCliDir:d,...n?.resolveRef?{resolveRef:n.resolveRef}:{}});return {...g,invokeExecutor:x.invokeExecutor,validateSchema(u){let p=d$1(u);return {ok:p.errors.length===0,errors:p.errors}},absoluteBlob:$e()}}function wn(e,t={}){let r=t.chatsSubdir??"chats",o=t.kvSubdir??".kv",n=o?[o,"chat"]:["chat"],s=r&&!gt(e,r)?P(e,r):e,d=ue(P(e,...n));return a$3(g=>{let u=`${String(g).replace(/[^a-zA-Z0-9_-]/g,"_")}.jsonl`,p=P(s,u);return Se(p)},d)}function vr(e){return a$3(t=>{let o=`${String(t).replace(/[^a-zA-Z0-9_-]/g,"_")}.jsonl`;return Se(P(e,"journal",o))},ue(P(e,"kv")))}function kn(e,t={}){let r=t.filesSubdir??"files",o=r&&!gt(e,r)?P(e,r):e;return a$4(Y(o))}function bn(e){try{let t=JSON.parse(Buffer.from(e,"base64url").toString());return typeof t.br=="string"?t.br:null}catch{return null}}export{me as buildLocalBaseSpec,Ae as createBoardWorkerQueueLane,rr as createExecutionRefInvoker,Y as createFsBlobStorage,wn as createFsBoardChatStorage,yr as createFsBoardContainerStorage,kn as createFsBoardFileArtifactsStore,xn as createFsBoardNonCorePlatformAdapter,br as createFsBoardPlatformAdapter,vr as createFsChatStorageForRefRoot,Me as createFsQueueStorage,hr as createHostedAsyncBoardNonCorePublic,Sn as createNodeSpawnInvocationAdapter,Be as createNonCoreExecutorDispatcher,Te as createQueueStorageLane,bn as decodeBoardRefFromToken,ge as drainQueueLaneToIdle,Ce as evaluateArgsMassaging,re as invokeExecutionRef,je as invokeExecutionRefSync,nr as invokeRefSync,Yt as registerInProcessExecutionHandler,q as resolveWhatToRunValue,ot as resolveYamlFlowCliPath,rt as startQueueLaneRunner,Wt as startQueueLaneRunners,Zt as unregisterInProcessExecutionHandler};//# sourceMappingURL=board-live-cards-node.js.map
|
|
12
12
|
//# sourceMappingURL=board-live-cards-node.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkC7RR2JCL_cjs=require('./chunk-C7RR2JCL.cjs');require('./chunk-AW3COGCI.cjs'),require('./chunk-SIPLKLWU.cjs');var chunkCAID4CGO_cjs=require('./chunk-CAID4CGO.cjs');require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-VI36DRWG.cjs'),require('./chunk-7Y47QXMX.cjs'),require('./chunk-66ZZIF2L.cjs'),require('./chunk-P7STTKRO.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-2RIHC5TZ.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createBoardLiveCardsNonCorePublic",{enumerable:true,get:function(){return chunkC7RR2JCL_cjs.f}});Object.defineProperty(exports,"createBoardLiveCardsPublic",{enumerable:true,get:function(){return chunkC7RR2JCL_cjs.e}});Object.defineProperty(exports,"BOARD_GRAPH_KEY",{enumerable:true,get:function(){return chunkCAID4CGO_cjs.q}});Object.defineProperty(exports,"EMPTY_CONFIG",{enumerable:true,get:function(){return chunkCAID4CGO_cjs.D}});Object.defineProperty(exports,"SNAPSHOT_SCHEMA_VERSION_V1",{enumerable:true,get:function(){return chunkCAID4CGO_cjs.p}});//# sourceMappingURL=board-live-cards-public.cjs.map
|
|
2
2
|
//# sourceMappingURL=board-live-cards-public.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{f as createBoardLiveCardsNonCorePublic,e as createBoardLiveCardsPublic}from'./chunk-
|
|
1
|
+
export{f as createBoardLiveCardsNonCorePublic,e as createBoardLiveCardsPublic}from'./chunk-C7OY3PYL.js';import'./chunk-FULAMLUU.js';import'./chunk-EOVTMJYZ.js';export{q as BOARD_GRAPH_KEY,D as EMPTY_CONFIG,p as SNAPSHOT_SCHEMA_VERSION_V1}from'./chunk-QJQ53PLM.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-Q444D72R.js';import'./chunk-R7SQQSDX.js';import'./chunk-QE3QXEHI.js';import'./chunk-CVTL2EFR.js';import'./chunk-MNEOJWPS.js';import'./chunk-UGB7PC4P.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=board-live-cards-public.js.map
|
|
2
2
|
//# sourceMappingURL=board-live-cards-public.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunk22S5GCQK_cjs=require('./chunk-22S5GCQK.cjs');require('./chunk-LFVMX23W.cjs'),require('./chunk-NM6O35RY.cjs'),require('./chunk-NBJTYAYN.cjs'),require('./chunk-3HCH2ZFB.cjs');var chunkU5BGE52X_cjs=require('./chunk-U5BGE52X.cjs');require('./chunk-BQUQTOPB.cjs'),require('./chunk-GPCMBPLK.cjs'),require('./chunk-7FGPOGRV.cjs'),require('./chunk-LPXVVMQT.cjs'),require('./chunk-272IYUKT.cjs'),require('./chunk-TIQ775WI.cjs'),require('./chunk-CSHNTZW4.cjs'),require('./chunk-C7RR2JCL.cjs'),require('./chunk-AW3COGCI.cjs'),require('./chunk-SIPLKLWU.cjs'),require('./chunk-G5UUXBIB.cjs'),require('./chunk-CAID4CGO.cjs'),require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-VI36DRWG.cjs'),require('./chunk-7Y47QXMX.cjs'),require('./chunk-66ZZIF2L.cjs'),require('./chunk-P7STTKRO.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-SDJ3747Q.cjs'),require('./chunk-OF4FPYNI.cjs'),require('./chunk-2RIHC5TZ.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createMultiBoardServerRuntime",{enumerable:true,get:function(){return chunk22S5GCQK_cjs.b}});Object.defineProperty(exports,"createSingleBoardServerRuntime",{enumerable:true,get:function(){return chunk22S5GCQK_cjs.a}});Object.defineProperty(exports,"createHostedBoardQueueLaneRegistry",{enumerable:true,get:function(){return chunkU5BGE52X_cjs.a}});//# sourceMappingURL=board-live-cards-server-runtime.cjs.map
|
|
2
2
|
//# sourceMappingURL=board-live-cards-server-runtime.cjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{b as createMultiBoardServerRuntime,a as createSingleBoardServerRuntime}from'./chunk-
|
|
1
|
+
export{b as createMultiBoardServerRuntime,a as createSingleBoardServerRuntime}from'./chunk-3C52UCJC.js';import'./chunk-JB4Q2W7I.js';import'./chunk-XYN5D3GL.js';import'./chunk-O5UYCGIN.js';import'./chunk-F6KRSQ7V.js';export{a as createHostedBoardQueueLaneRegistry}from'./chunk-AN7MLI7X.js';import'./chunk-FOFGEABN.js';import'./chunk-RKKSVOP2.js';import'./chunk-NTICU4OK.js';import'./chunk-O7NOHKVR.js';import'./chunk-ZJ5M5COT.js';import'./chunk-E7SDEZSI.js';import'./chunk-PEJRTZU3.js';import'./chunk-C7OY3PYL.js';import'./chunk-FULAMLUU.js';import'./chunk-EOVTMJYZ.js';import'./chunk-ONJG6QW6.js';import'./chunk-QJQ53PLM.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-Q444D72R.js';import'./chunk-R7SQQSDX.js';import'./chunk-QE3QXEHI.js';import'./chunk-CVTL2EFR.js';import'./chunk-MNEOJWPS.js';import'./chunk-BJGK5FNL.js';import'./chunk-NIBLKYXN.js';import'./chunk-UGB7PC4P.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=board-live-cards-server-runtime.js.map
|
|
2
2
|
//# sourceMappingURL=board-live-cards-server-runtime.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkPYYRDOD5_cjs=require('../chunk-PYYRDOD5.cjs');require('../chunk-AW3COGCI.cjs'),require('../chunk-SIPLKLWU.cjs'),require('../chunk-VI36DRWG.cjs'),require('../chunk-7Y47QXMX.cjs'),require('../chunk-66ZZIF2L.cjs'),require('../chunk-P7STTKRO.cjs'),require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-GNFE24S7.cjs');Object.defineProperty(exports,"LocalStorageService",{enumerable:true,get:function(){return chunkPYYRDOD5_cjs.a}});Object.defineProperty(exports,"buildBrowserArtifactsFromRuntime",{enumerable:true,get:function(){return chunkPYYRDOD5_cjs.e}});Object.defineProperty(exports,"createBoardLiveGraphRuntime",{enumerable:true,get:function(){return chunkPYYRDOD5_cjs.b}});Object.defineProperty(exports,"selectAllLiveCardModels",{enumerable:true,get:function(){return chunkPYYRDOD5_cjs.d}});Object.defineProperty(exports,"selectLiveCardModel",{enumerable:true,get:function(){return chunkPYYRDOD5_cjs.c}});//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { G as GraphConfig, f as GraphEvent } from '../types-BBhqYGhE.cjs';
|
|
2
|
-
import { R as ReactiveGraph, d as LiveGraph, a as LiveCard, s as schedule, h as TaskHandlerInput, g as ReactiveGraphOptions, L as LiveBoard } from '../live-cards-bridge-
|
|
2
|
+
import { R as ReactiveGraph, d as LiveGraph, a as LiveCard, s as schedule, h as TaskHandlerInput, g as ReactiveGraphOptions, L as LiveBoard } from '../live-cards-bridge-D8kP3uog.cjs';
|
|
3
3
|
|
|
4
4
|
interface BrowserSourceAdapterContext {
|
|
5
5
|
card: LiveCard;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { G as GraphConfig, f as GraphEvent } from '../types-BBhqYGhE.js';
|
|
2
|
-
import { R as ReactiveGraph, d as LiveGraph, a as LiveCard, s as schedule, h as TaskHandlerInput, g as ReactiveGraphOptions, L as LiveBoard } from '../live-cards-bridge-
|
|
2
|
+
import { R as ReactiveGraph, d as LiveGraph, a as LiveCard, s as schedule, h as TaskHandlerInput, g as ReactiveGraphOptions, L as LiveBoard } from '../live-cards-bridge-DMBSDgpk.js';
|
|
3
3
|
|
|
4
4
|
interface BrowserSourceAdapterContext {
|
|
5
5
|
card: LiveCard;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as LocalStorageService,e as buildBrowserArtifactsFromRuntime,b as createBoardLiveGraphRuntime,d as selectAllLiveCardModels,c as selectLiveCardModel}from'../chunk-
|
|
1
|
+
export{a as LocalStorageService,e as buildBrowserArtifactsFromRuntime,b as createBoardLiveGraphRuntime,d as selectAllLiveCardModels,c as selectLiveCardModel}from'../chunk-72FB4M6P.js';import'../chunk-FULAMLUU.js';import'../chunk-EOVTMJYZ.js';import'../chunk-Q444D72R.js';import'../chunk-R7SQQSDX.js';import'../chunk-QE3QXEHI.js';import'../chunk-CVTL2EFR.js';import'../chunk-MNEOJWPS.js';import'../chunk-FW4363Y4.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunk66ZZIF2L_cjs=require('../chunk-66ZZIF2L.cjs'),chunkP7STTKRO_cjs=require('../chunk-P7STTKRO.cjs');require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-GNFE24S7.cjs');Object.defineProperty(exports,"CardCompute",{enumerable:true,get:function(){return chunk66ZZIF2L_cjs.a}});Object.defineProperty(exports,"default",{enumerable:true,get:function(){return chunk66ZZIF2L_cjs.b}});Object.defineProperty(exports,"validateLiveCard",{enumerable:true,get:function(){return chunkP7STTKRO_cjs.c}});Object.defineProperty(exports,"validateLiveCardDefinition",{enumerable:true,get:function(){return chunkP7STTKRO_cjs.d}});Object.defineProperty(exports,"validateLiveCardRuntimeExpressions",{enumerable:true,get:function(){return chunkP7STTKRO_cjs.b}});Object.defineProperty(exports,"validateLiveCardSchema",{enumerable:true,get:function(){return chunkP7STTKRO_cjs.a}});//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -64,9 +64,15 @@ interface ComputeSource {
|
|
|
64
64
|
outputFile: string;
|
|
65
65
|
cli?: string;
|
|
66
66
|
script?: string;
|
|
67
|
+
/** JSONata expression evaluated against { card_data, requires }. Truthy => skip this source for the current cycle. */
|
|
68
|
+
skip_when?: string;
|
|
67
69
|
/** Named data projections: each key maps to a JSONata expression rooted at card_data or requires.
|
|
68
70
|
* The engine evaluates these before spawning the executor and passes results as _projections. */
|
|
69
71
|
projections?: Record<string, string>;
|
|
72
|
+
/** Ephemeral: resolved projections for the current cycle. */
|
|
73
|
+
_projections?: Record<string, unknown>;
|
|
74
|
+
/** Ephemeral: resolved skip decision for the current cycle. */
|
|
75
|
+
_skip?: boolean;
|
|
70
76
|
[key: string]: unknown;
|
|
71
77
|
}
|
|
72
78
|
/** Options for CardCompute.run() */
|
|
@@ -64,9 +64,15 @@ interface ComputeSource {
|
|
|
64
64
|
outputFile: string;
|
|
65
65
|
cli?: string;
|
|
66
66
|
script?: string;
|
|
67
|
+
/** JSONata expression evaluated against { card_data, requires }. Truthy => skip this source for the current cycle. */
|
|
68
|
+
skip_when?: string;
|
|
67
69
|
/** Named data projections: each key maps to a JSONata expression rooted at card_data or requires.
|
|
68
70
|
* The engine evaluates these before spawning the executor and passes results as _projections. */
|
|
69
71
|
projections?: Record<string, string>;
|
|
72
|
+
/** Ephemeral: resolved projections for the current cycle. */
|
|
73
|
+
_projections?: Record<string, unknown>;
|
|
74
|
+
/** Ephemeral: resolved skip decision for the current cycle. */
|
|
75
|
+
_skip?: boolean;
|
|
70
76
|
[key: string]: unknown;
|
|
71
77
|
}
|
|
72
78
|
/** Options for CardCompute.run() */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as CardCompute,b as default}from'../chunk-
|
|
1
|
+
export{a as CardCompute,b as default}from'../chunk-QE3QXEHI.js';export{c as validateLiveCard,d as validateLiveCardDefinition,b as validateLiveCardRuntimeExpressions,a as validateLiveCardSchema}from'../chunk-CVTL2EFR.js';import'../chunk-MNEOJWPS.js';import'../chunk-FW4363Y4.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkCAID4CGO_cjs=require('./chunk-CAID4CGO.cjs');require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-VI36DRWG.cjs'),require('./chunk-7Y47QXMX.cjs'),require('./chunk-66ZZIF2L.cjs'),require('./chunk-P7STTKRO.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-2RIHC5TZ.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createCardStorePublic",{enumerable:true,get:function(){return chunkCAID4CGO_cjs.H}});//# sourceMappingURL=card-store-public.cjs.map
|
|
2
2
|
//# sourceMappingURL=card-store-public.cjs.map
|
package/lib/card-store-public.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{H as createCardStorePublic}from'./chunk-
|
|
1
|
+
export{H as createCardStorePublic}from'./chunk-QJQ53PLM.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-Q444D72R.js';import'./chunk-R7SQQSDX.js';import'./chunk-QE3QXEHI.js';import'./chunk-CVTL2EFR.js';import'./chunk-MNEOJWPS.js';import'./chunk-UGB7PC4P.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=card-store-public.js.map
|
|
2
2
|
//# sourceMappingURL=card-store-public.js.map
|
package/lib/card-validation.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkAW6XLBHX_cjs=require('./chunk-AW6XLBHX.cjs');require('./chunk-P7STTKRO.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"validateCardPreflight",{enumerable:true,get:function(){return chunkAW6XLBHX_cjs.a}});//# sourceMappingURL=card-validation.cjs.map
|
|
2
2
|
//# sourceMappingURL=card-validation.cjs.map
|
package/lib/card-validation.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as validateCardPreflight}from'./chunk-
|
|
1
|
+
export{a as validateCardPreflight}from'./chunk-BSZYTSFX.js';import'./chunk-CVTL2EFR.js';import'./chunk-MNEOJWPS.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=card-validation.js.map
|
|
2
2
|
//# sourceMappingURL=card-validation.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'),chunkNOAERAOE_cjs=require('./chunk-NOAERAOE.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'),chunkK5TEZRZK_cjs=require('./chunk-K5TEZRZK.cjs'),chunkCSHNTZW4_cjs=require('./chunk-CSHNTZW4.cjs'),chunk3XPY7CCM_cjs=require('./chunk-3XPY7CCM.cjs'),chunkJ7KE7SPA_cjs=require('./chunk-J7KE7SPA.cjs'),chunkSDJ3747Q_cjs=require('./chunk-SDJ3747Q.cjs'),chunkOF4FPYNI_cjs=require('./chunk-OF4FPYNI.cjs'),chunk2RIHC5TZ_cjs=require('./chunk-2RIHC5TZ.cjs');function ce(g){let{apiBasePath:w,json:b,readJsonBody:I,bootstrapBoard:B,createMcpControlplaneToolRegistry:$,retriggerCard:N,applyCardAction:x,resolveChatHandlerTarget:_,sendCardFileDownloadResponse:H}=g;async function E(T,S,z){let q=T.method||"GET",K=z,l=K.pathname;try{if(q==="POST"&&l===`${w}/mcp-actions`){await B();let f=Date.now(),y=new Date(f).toISOString(),k=await I(T),u=typeof k.tool=="string"?k.tool.trim():"",P=k.args&&typeof k.args=="object"&&!Array.isArray(k.args)?k.args:{};if(!u)return b(S,400,{error:"tool is required"}),!0;let v=chunkLPXVVMQT_cjs.a(P,"card_id");if(!v)return b(S,400,{error:"MCP action requires card_id"}),!0;if(u==="retrigger-card"||u==="retrigger"){await N(v);let O=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:v,actionType:u,requestReceivedAt:y,requestReceivedAtMs:f,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:200}}),!0}let A=chunkLPXVVMQT_cjs.c(P,"payload");if(u==="chat-send"&&!await _(v)){let O=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${v}`,requestReceivedAt:y,requestReceivedAtMs:f,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:409}),!0}if(u==="chat-send"){let O=typeof A["turn-id"]=="string"?A["turn-id"]:typeof A.turnId=="string"?A.turnId:typeof A.turn=="string"?A.turn:"";if(!O||!String(O).trim()){let U=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${v}`,requestReceivedAt:y,requestReceivedAtMs:f,responseSentAt:new Date(U).toISOString(),responseSentAtMs:U,responseStatus:400}),!0}}await x(v,u,A);let D=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:v,actionType:u,requestReceivedAt:y,requestReceivedAtMs:f,responseSentAt:new Date(D).toISOString(),responseSentAtMs:D,responseStatus:200}}),!0}if(q==="POST"&&l===`${w}/mcp-controlplane`){await B();let f=await I(T),y=typeof f.tool=="string"?f.tool.trim():"",k=f.args&&typeof f.args=="object"&&!Array.isArray(f.args)?f.args:{};if(!y)return b(S,400,{error:"tool is required"}),!0;try{let u=await chunk272IYUKT_cjs.a(y,k,$());if(u&&typeof u=="object"&&!Array.isArray(u)){let P=u;if(P.status==="fail")return b(S,400,{error:chunk272IYUKT_cjs.b(u,"Request failed")}),!0;if(P.status==="error")return b(S,500,{error:chunk272IYUKT_cjs.b(u,"Internal error")}),!0}b(S,200,u);}catch(u){let P=typeof u?.statusCode=="number"?Number(u.statusCode):500,v=u instanceof Error?u.message:String(u);b(S,P,{error:v});}return !0}let R=l.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/retrigger$`));if(q==="POST"&&R){await B();let f=decodeURIComponent(R[1]);return await N(f),b(S,200,{ok:!0}),!0}let F=l.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/actions$`));if(q==="POST"&&F){await B();let f=decodeURIComponent(F[1]),y=Date.now(),k=new Date(y).toISOString(),u=await I(T),P=u?.actionType;if(P==="chat-send"&&!await _(f)){let A=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${f}`,requestReceivedAt:k,requestReceivedAtMs:y,responseSentAt:new Date(A).toISOString(),responseSentAtMs:A,responseStatus:409}),!0}if(P==="chat-send"){let A=u?.payload??{},D=typeof A["turn-id"]=="string"?A["turn-id"]:typeof A.turnId=="string"?A.turnId:typeof A.turn=="string"?A.turn:"";if(!D||!String(D).trim()){let O=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${f}`,requestReceivedAt:k,requestReceivedAtMs:y,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:400}),!0}}await x(f,P,u?.payload);let v=Date.now();return b(S,200,{ok:!0,requestReceivedAt:k,requestReceivedAtMs:y,responseSentAt:new Date(v).toISOString(),responseSentAtMs:v,responseStatus:200}),!0}let p=l.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/files/(\\d+)$`));if(q==="GET"&&p){let f=decodeURIComponent(p[1]),y=parseInt(p[2],10),k=K.searchParams.get("sn");return await H(S,f,y,k),!0}return !1}catch(R){let F=R?.statusCode||500;return b(S,F,{error:String(R?.message||R)}),true}}return {handleRuntimeApi:E}}var Ke=3e4;function Ve(g){let w=g.socket?.remoteAddress??"";return w==="127.0.0.1"||w==="::1"||w==="::ffff:127.0.0.1"}function ue(g){let{apiBasePath:w,emitNotifications:b,readJsonBody:I,json:B}=g,$=`${w}/notify-q`;async function N(x,_,H){if(H.pathname!==$)return false;if((x.method??"").toUpperCase()!=="POST")return B(_,405,{status:"error",error:"Method not allowed"}),true;if(!Ve(x))return B(_,403,{status:"error",error:"Forbidden"}),true;let E;try{E=await I(x);}catch{return B(_,400,{status:"error",error:"Invalid JSON body"}),true}if(!E||typeof E!="object"||!Array.isArray(E.notifications))return B(_,400,{status:"error",error:"body.notifications must be an array"}),true;let T=E.notifications,{accepted:S,rejected:z}=chunkNOAERAOE_cjs.b(T,Date.now(),Ke);return S.length>0&&b(S),B(_,200,{status:"success",data:{accepted:S.length,rejected:z}}),true}return {handleNotifyRoute:N}}var le={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},de="chat-handler-flow-queue",ot="__probe__echo__probe__";function Mr(g){let w=String(g.apiBasePath||"/api/board").replace(/\/$/,""),b={...le,...g.corsHeaders||{}},I=g.queueLaneTuning??{},B=g.boardId||"",$=Number.isInteger(g.chatBootstrapTailTurns)&&g.chatBootstrapTailTurns>0?g.chatBootstrapTailTurns:1,N=g.logger||{info:console.log,warn:console.warn,error:console.error},x=g.invocationAdapter,_=g.chatFlowRunner||null,H=g.notificationTransport||null,E=g.serverUrl||null,T=g.executionExtra||{},S=g.onSseClientConnected,z=g.onSseClientDisconnected,q=g.onChannelSubscribed,K=g.onChannelUnsubscribed,l=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async(t,e)=>await Q.buildSseOneShotBatch({params:{cardId:t},body:{receiving:e}}),onSseClientDisconnected:z}),R=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async()=>({status:"success",data:{kind:"notification-batch",category:"batch",notifications:[]}})});function F(t){function e(a){return {...a,queueStorageForRef(d,C){return chunkSDJ3747Q_cjs.a(a.queueStorageForRef(d,C),{lane:C,emitNotification:i})}}}function r(a){return {...a,queueStorageForRef(d,C){return chunkK5TEZRZK_cjs.h(a.queueStorageForRef(d,C),{lane:C,emitNotification:i})}}}function n(a){return {async get(d){return a.get(d)},async set(d){return a.set(d)},async del(d){return a.del(d)},async patch(d){return a.patch(d)},async appendFiles(d){return a.appendFiles(d)}}}function o(a){return {async get(d){return await a.get(d)},async set(d){return await a.set(d)},async del(d){return await a.del(d)},async patch(d){return await a.patch(d)},async appendFiles(d){return await a.appendFiles(d)}}}let s=null;function i(a){if(a.kind==="notification-batch"){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),j=t.nonCoreAdapter??(!chunkBQUQTOPB_cjs.a(c)&&P(c)?c:null),h=chunkBQUQTOPB_cjs.a(c)?chunkK5TEZRZK_cjs.i(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}):chunk3XPY7CCM_cjs.e(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}),M=t.nonCore??(j?chunk3XPY7CCM_cjs.f(t.baseRef,j,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),We=c.chatStorageForRef(t.chatStoreRef),lt,Je=chunkBQUQTOPB_cjs.a(c)?(()=>{let a=chunkK5TEZRZK_cjs.d(chunkK5TEZRZK_cjs.c(chunkK5TEZRZK_cjs.b(c.kvStorageForRef(t.cardStoreRef)),c.hashFn),N.warn),d=chunkK5TEZRZK_cjs.g(a,{emitNotification:i}),C=o(d);return lt={get(m){return C.get(m)},set(m){return C.set(m)}},C})():(()=>{let a=c.kvStorageForRef(t.cardStoreRef),C=chunkJ7KE7SPA_cjs.H(chunkJ7KE7SPA_cjs.m({readIndex:()=>a.read("_index"),writeIndex:m=>a.write("_index",m),readCard:m=>a.read(m),writeCard:(m,pt)=>(a.write(m,pt),m),removeCard:m=>{a.delete(m);},cardExists:m=>a.read(m)!==null,defaultCardKey:m=>m},N.warn),{emitNotification:i});return lt=C,n(C)})(),ft;if(chunkBQUQTOPB_cjs.a(c)){let a=c.blobStorageForRef(t.artifactsStoreRef);ft={async putBytes(d,C){if(a.writeBytes){await a.writeBytes(d,C);return}let m=JSON.stringify({__kind:"bytes-array",data:[...C]});await a.write(d,m);},async getBytes(d){if(a.readBytes){let m=await a.readBytes(d);if(m!==null)return m}let C=await a.read(d);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(d){return await a.listKeys(d)}};}else {let a=c.blobStorageForRef(t.artifactsStoreRef),d=chunkNBJTYAYN_cjs.a(a);ft={putBytes(C,m,pt){d.putBytes(C,m,pt);},getBytes(C){return d.getBytes(C)},listKeys(C){return d.list(C).map(m=>m.key)}};}let ze={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:M,publicCardStore:lt,boardOps:ze,cardStoreOps:Je,get filesArtifacts(){return ft},get chatStorage(){return We},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:chunkNOAERAOE_cjs.c(),notificationTeardown:null,initialized:false,cardsBootstrapped:false},s}let p=g.boards.map(F),f=new Map;function y(t){return f.get(t)??0}function k(t){return t.queueStoreRef}function u(t,e){if(chunkBQUQTOPB_cjs.a(t.boardAdapter)){let n=t.boardAdapter.queueStorageForRef(k(t),e);return chunkCSHNTZW4_cjs.a(n)}let r=t.boardAdapter.queueStorageForRef(k(t),e);return chunkGPCMBPLK_cjs.a(r)}function P(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function v(t){let e=p[y(t)];return {files:e?e.filesArtifacts:null}}function A(){return chunkNBJTYAYN_cjs.c()}function D(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}function O(t){return "cardId"in t&&typeof t.cardId=="string"?W(t.cardId)??void 0:p[0]??void 0}function U(t){for(let e of t){let r=O(e);if(r)return r}return p[0]??void 0}function ct(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??U(r);if(e.appendState!==false&&o&&chunkNOAERAOE_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&&l.broadcastNotificationBatch(i),s.length>0&&R.broadcastNotificationBatch(s);}if(!(e.mirrorExternal===false||!o?.boardAdapter.publishBoardChangeNotifications))try{let s=r.filter(i=>i.category==="board-output"||i.category==="card-store"||i.category==="chat-store"||i.category==="hosted-runtime");s.length>0&&o.boardAdapter.publishBoardChangeNotifications(s);}catch{}}function V(t,e){ct(t,{ctx:e,appendState:true,broadcastSse:true,mirrorExternal:true});}async function fe(t){if(!t||t.notificationTeardown||!H||!t.notifyRef)return;let e=await H.subscribe(t.notifyRef,r=>{let n=chunkNOAERAOE_cjs.a(r);ct(n,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});});t.notificationTeardown=e;}async function pe(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 fe(t),!t.chatHandlerFlow&&t.chatHandlerRef&&x.describe)try{let o=await x.describe(t.chatHandlerRef);o&&o.kind!=="chat-handler"?N.warn(`[init] chat-handler describe returned kind="${o.kind}", expected "chat-handler" for ${t.label}`):o&&N.info(`[init] chat-handler validated: ${o.name} (protocol ${o.protocolVersion}) for ${t.label}`);}catch(o){N.warn(`[init] chat-handler describe failed for ${t.label}: ${o?.message||String(o)}`);}t.initialized=true;}async function ut(t){let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&chunkNOAERAOE_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&&ct(e,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});}async function Rt(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),n=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let o of n)typeof o.id=="string"&&(f.set(o.id,e),await t.boardOps.upsertCard({params:{cardId:o.id}}));t.cardsBootstrapped=true;}async function G(){for(let t of p)await pe(t);}async function at(){await G();for(let t=0;t<p.length;t++)await ut(p[t]),await Rt(p[t],t),await ut(p[t]);}async function yt(t=false){t||await G();for(let e of p){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function W(t){return p[y(t)]??null}async function Y(t){let e=W(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 me(){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 p)e.push(...await t(r));return e}function ht(){return p[0]??null}function ge(t){return W(t)??ht()}function L(t){let e=ge(t);if(!e)throw Object.assign(new Error(`Board context is unavailable for chat operations: ${t}`),{statusCode:404});return e.chatStorage}async function Re(t){return await L(t).isProcessing(t)}async function tt(t,e){let r=await Q.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 Q=chunkOF4FPYNI_cjs.a({append(t,e,r,n,o){return L(t).append(t,e,r,n,o)},readAll(t){return L(t).readAll(t)},readAfter(t,e){return L(t).readAfter(t,e)},clear(t){return L(t).clear(t)},setProcessing(t,e){return L(t).setProcessing(t,e)},isProcessing(t){return L(t).isProcessing(t)},getConfig(t){return L(t).getConfig(t)},setConfig(t,e){return L(t).setConfig(t,e)}},{emitNotification(t){if(t.kind==="notification-batch"){V(t.notifications);return}V([t]);}}),wt=chunkNOAERAOE_cjs.p({boardContexts:p,cardOwnerIndex:f,cardContextForCard:t=>W(t),readStatusSnapshot:()=>Se(),readDataObjectsByToken:()=>Ae(),readCardRuntimeArtifacts:()=>Ce(),readCardFromStore:t=>Y(t),readCardDefinitions:()=>me(),processAccumulatedLaneInternal:t=>yt(t),reportSourceFetched:(t,e)=>kt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>Pt(t,{reason:e}),uploadCardFile:(t,e,r,n,o)=>Ct(t,e,r,n,o),chatStorePublic:Q,serverUrl:E,apiBasePath:w}),ye=wt.mcpCardStoreFacade,st=wt.createMcpFacade,he=chunkNOAERAOE_cjs.j({boardId:B,bootstrapBoard:()=>at(),sseHub:l,onChannelSubscribed:q,onChannelUnsubscribed:K,getMcpFacade:()=>st(),getMcpCardStoreFacade:()=>ye()});function we(t){return chunkNOAERAOE_cjs.m(t)}function be(){return chunkNOAERAOE_cjs.n(st())}function bt(){return chunkNOAERAOE_cjs.o({boardId:B,uploadCardFile:Ct,getMcpFacade:()=>st(),controlplane:he})}let it=chunkNOAERAOE_cjs.k({boardId:B,boardContexts:p,readChatRecords:(t,e)=>ve(t,e),getChatProcessing:t=>Re(t),chatBootstrapTailTurns:$}),Se=it.readStatusSnapshot,Ce=it.readCardRuntimeArtifacts,Ae=it.readDataObjectsByToken,dt=it.buildPublishedRuntimePayload;async function St(t,e,r){let n=r?.syncBoard!==false,o=r?.restartOnlyIfChanged===true,s=W(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let i=await Y(t);if(!i)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let c=o?JSON.stringify(i):null,j=e(i)||i;if(o&&JSON.stringify(j)===c)return;let h=await s.cardStoreOps.set({body:j});if(h.status!=="success")throw Object.assign(new Error(h.error||`Failed to persist card: ${t}`),{statusCode:500});if(n){let M=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(M.status!=="success")throw Object.assign(new Error(M.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Be(t,e){await St(t,e,{syncBoard:true});}async function ke(t,e){await St(t,e,{syncBoard:false});}async function Pe(t){let e=W(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await Y(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 Oe(t){let e=await Q.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 tt(t,!1);}catch{}}async function Fe(t,e,r,n,o=""){let s=typeof r=="string"?r.trim():"",i=await Q.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 ve(t,e){let r=Number.isInteger(e?.tailTurns)&&e?.tailTurns>0?e?.tailTurns:void 0,n=await Q.readAll({params:{cardId:t},...r===void 0?{}:{body:{tailTurns:r}}});if(n.status!=="success")throw Object.assign(new Error(n.error||`Failed to read chat records for card: ${t}`),{statusCode:500});return Array.isArray(n.data?.records)?n.data.records:[]}let Ct=chunkNOAERAOE_cjs.l({safeCardId:t=>D(t),artifactsStores:t=>v(t),cardFileMetadataStore:()=>A(),readCardFromStore:t=>Y(t),updateCardLocalOnly:(t,e)=>ke(t,e),writeChatRecord:(t,e,r,n,o)=>Fe(t,e,r,n,o)}).uploadCardFile;async function At(t){let e=W(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 xe(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 Te(t,e,r=false,n="",o=""){try{let s=await At(t);if(!s){try{await tt(t,!1);}catch{}return}let{ctx:i,handlerFlow:c,handlerRef:j}=s;if(!r)try{await tt(t,!0);}catch{}let h={boardId:B,cardId:String(t),lastChatEntryId:e,...n?{turnId:n}:{},...typeof o=="string"&&o.trim()?{probe:o.trim()}:{},...T,...E?{serverUrl:E}:{}},M=c!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:de}}:j;chunkBQUQTOPB_cjs.a(i.boardAdapter)?await u(i,"chat-agent").enqueueRequest({boardId:B,ref:M,args:c!=null?{...h,__chatHandlerFlow:c}:h}):u(i,"chat-agent").enqueueRequest({boardId:B,ref:M,args:c!=null?{...h,__chatHandlerFlow:c}:h}),await Promise.resolve(i.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await tt(t,!1);}catch{}N.warn(`[chat-handler] queue failed for card "${t}": ${s instanceof Error?s.message:String(s)}`);}}async function Ne(t,e,r){if(e.howToRun==="built-in"&&chunkBQUQTOPB_cjs.b(e)===de){let n=_,o=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,n?n.run(o,s,{boardId:B,cardId:String(s.cardId||""),label:t.label,logger:N,serverUrl:E,executionExtra:T}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return x.invoke(e,r)}async function Ee(t,e=false){e||await G();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",n=r?W(r):ht();if(!n)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let o=await Ne(n,t.ref,t.args);if(!o.dispatched){if(r)try{await tt(r,!1);}catch{}throw new Error(o.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function je(t,e,r){if(e==="chat-send"){let o=r&&typeof r["turn-id"]=="string"?r["turn-id"]:r&&typeof r.turnId=="string"?r.turnId:r&&typeof r.turn=="string"?r.turn:"";if(r&&"files"in r&&r.files!==void 0&&r.files!==null)throw Object.assign(new Error('chat-send does not accept a "files" parameter; upload attachments via manage.add-chat-attachment first'),{statusCode:400});let s=bt(),i=xe(r?.text),c=i?i.text:r?.text,j=await chunk272IYUKT_cjs.a("manage.add-chat-entry-and-any-attachments",{board_id:B,card_id:t,role:"user",text:c,turn_id:o,files:[]},s);if(j?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(j,`chat-send append failed for card ${t}`));let h=j?.data?.id;if(typeof h!="string"||!h)throw new Error(`chat-send did not return an append id for card ${t}`);let M=await chunk272IYUKT_cjs.a("setstate.chat-processing-started",{board_id:B,card_id:t},s);if(M?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(M,`chat-send processing update failed for card ${t}`));Te(t,h,true,o,i?.assistant||"");return}await Be(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=A().normalizeIncoming(r?.files,s);return c.length>0&&A().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 Bt(t,e,r){let n=await Y(t);if(!n)throw Object.assign(new Error("Card not found"),{statusCode:404});let o=A().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=D(t),c=v(t),j=String(s.stored_name||""),h=`${i}/${j}`,M=c.files?await c.files.getBytes(h):null;if(!M)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:M}}async function Me(t,e,r,n){let{fileRecord:o,bytes:s}=await Bt(e,r,n),i=String(o.name||o.stored_name||"download.bin"),c=String(o.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":c,"Content-Disposition":`attachment; filename="${i}"`,"Content-Length":s.length}),t.end(s);}function _e(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 De(t,e,r){let n=t.split(/\r?\n/);return (e==="head"?n.slice(0,r):n.slice(-r)).join(`
|
|
2
|
-
`)}async function rt(t){let e=[];for await(let n of t)e.push(n);let r=typeof Buffer<"u"?Buffer.concat(e).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(e)).trim();return r?JSON.parse(r):{}}async function kt(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let n=p[0];return n?n.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function Pt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",n=p[0];return n?n.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let Ie=chunkLFVMX23W_cjs.b({sseHub:l,queueSseHub:R,corsHeaders:b,json:et,buildPublishedRuntimePayload:()=>dt(),onSseClientConnected:S,onChannelSubscribed:q,onChannelUnsubscribed:K,apiBasePath:w,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),bootstrapBoard:()=>at(),boardContexts:p,publishPersistedStateSnapshot:t=>ut(t),upsertCardsFromSource:(t,e)=>Rt(t,e)}).handleWatchersRoutes,qe=chunk7FGPOGRV_cjs.a({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpFacade:()=>st(),createMcpToolRegistry:t=>we(t),resolveCardFileDownloadPayload:(t,e,r)=>Bt(t,e,r),isLikelyTextMimeType:t=>_e(t),sliceTextByLines:(t,e,r)=>De(t,e,r)}).handleAgentfaceApi,$e=chunkNM6O35RY_cjs.a({apiBasePath:w,json:et,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),createMcpWebhookToolRegistry:()=>be()}).handleWebhooksApi,He=ce({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpControlplaneToolRegistry:()=>bt(),retriggerCard:t=>Pe(t),applyCardAction:(t,e,r)=>je(t,e,r),resolveChatHandlerTarget:t=>At(t),sendCardFileDownloadResponse:(t,e,r,n)=>Me(t,e,r,n)}).handleRuntimeApi,Le=ue({apiBasePath:w,emitNotifications:t=>V(t),readJsonBody:t=>rt(t),json:(t,e,r)=>et(t,e,r)}).handleNotifyRoute;async function Ue(t,e,r){return !!(await qe(t,e,r)||await $e(t,e,r)||await Ie(t,e,r)||await Le(t,e,r)||await He(t,e,r))}return {get apiBasePath(){return w},get corsHeaders(){return b},get queueLaneTuning(){return I},handleRuntimeApi:Ue,emitNotification(t){if(t.kind==="notification-batch"){V(t.notifications);return}V([t]);},buildPublishedRuntimePayload:dt,__drainProcessAccumulatedLane:yt,handleChatAgentRequest:Ee,clearChatRecords:Oe,reportSourceFetched(t,e){return kt(t,{ref:e})},reportSourceFetchFailure(t,e){return Pt(t,{reason:e})},get cardStore(){return p[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function _r(g){let w=String(g.apiBasePath||"/api/boards").replace(/\/$/,""),b={...le,...g.corsHeaders||{}},I=g.serverMetaStore,B=g.boardRuntimeFactory,$=new Map,N="boards-config.json";function x(){let l=I.getText(N);if(!l)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(l)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function _(l){I.putText(N,JSON.stringify(l,null,2));}function H(l){let R=String(l||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return R.length>0&&R.length<=64?R:null}function E(l){if($.has(l))return $.get(l);let F=x().boards.find(f=>f.id===l)||{},p=B(l,F);return $.set(l,p),p}function T(l,R,F){let p=JSON.stringify(F),f=typeof Buffer<"u"?Buffer.byteLength(p):new TextEncoder().encode(p).length;l.writeHead(R,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":f}),l.end(p);}async function S(l,R,F){let p=l.method||"GET",f=F.pathname;if(p==="GET"&&f===w)return T(R,200,{ok:true,boards:x().boards}),true;if(p==="POST"&&f===w){let y=[];for await(let O of l)y.push(O);let k=typeof Buffer<"u"?Buffer.concat(y).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(y)).trim(),u={};try{u=k?JSON.parse(k):{};}catch{u={};}let P=H(u.id);if(!P)return T(R,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let v=x();if(v.boards.some(O=>O.id===P))return T(R,409,{error:`Board "${P}" is already registered`}),true;let A=typeof u.label=="string"&&u.label.trim()?u.label.trim():P,D={id:P,label:A};for(let[O,U]of Object.entries(u))O==="id"||O==="label"||U!=null&&(D[O]=U);return v.boards.push(D),_(v),T(R,200,{ok:true,board:D}),true}return false}async function z(l,R,F){let f=F.pathname.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/([^/]+)(/|$)`));if(!f)return false;let y=H(decodeURIComponent(f[1]));return y?x().boards.some(P=>P.id===y)?!!await E(y).handleRuntimeApi(l,R,F):(T(R,404,{error:`Board "${y}" not registered. POST ${w} with {id} to register it first.`}),true):(T(R,400,{error:"Invalid board id"}),true)}async function q(l,R,F){return !!(await S(l,R,F)||await z(l,R,F))}function K(l){if(!x().boards.some(F=>F.id===l))throw Object.assign(new Error(`Board "${l}" not registered`),{statusCode:404});return {service:E(l)}}return {get apiBasePath(){return w},get corsHeaders(){return b},handleApi:q,requireBoardService:K}}exports.a=Mr;exports.b=_r;//# sourceMappingURL=chunk-
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkLFVMX23W_cjs=require('./chunk-LFVMX23W.cjs'),chunkNM6O35RY_cjs=require('./chunk-NM6O35RY.cjs'),chunkNBJTYAYN_cjs=require('./chunk-NBJTYAYN.cjs'),chunk3HCH2ZFB_cjs=require('./chunk-3HCH2ZFB.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'),chunkTIQ775WI_cjs=require('./chunk-TIQ775WI.cjs'),chunkCSHNTZW4_cjs=require('./chunk-CSHNTZW4.cjs'),chunkC7RR2JCL_cjs=require('./chunk-C7RR2JCL.cjs'),chunkCAID4CGO_cjs=require('./chunk-CAID4CGO.cjs'),chunkSDJ3747Q_cjs=require('./chunk-SDJ3747Q.cjs'),chunkOF4FPYNI_cjs=require('./chunk-OF4FPYNI.cjs'),chunk2RIHC5TZ_cjs=require('./chunk-2RIHC5TZ.cjs');function ce(g){let{apiBasePath:w,json:b,readJsonBody:I,bootstrapBoard:B,createMcpControlplaneToolRegistry:$,retriggerCard:N,applyCardAction:x,resolveChatHandlerTarget:_,sendCardFileDownloadResponse:H}=g;async function E(T,S,z){let q=T.method||"GET",K=z,l=K.pathname;try{if(q==="POST"&&l===`${w}/mcp-actions`){await B();let f=Date.now(),y=new Date(f).toISOString(),k=await I(T),u=typeof k.tool=="string"?k.tool.trim():"",P=k.args&&typeof k.args=="object"&&!Array.isArray(k.args)?k.args:{};if(!u)return b(S,400,{error:"tool is required"}),!0;let v=chunkLPXVVMQT_cjs.a(P,"card_id");if(!v)return b(S,400,{error:"MCP action requires card_id"}),!0;if(u==="retrigger-card"||u==="retrigger"){await N(v);let O=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:v,actionType:u,requestReceivedAt:y,requestReceivedAtMs:f,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:200}}),!0}let A=chunkLPXVVMQT_cjs.c(P,"payload");if(u==="chat-send"&&!await _(v)){let O=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${v}`,requestReceivedAt:y,requestReceivedAtMs:f,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:409}),!0}if(u==="chat-send"){let O=typeof A["turn-id"]=="string"?A["turn-id"]:typeof A.turnId=="string"?A.turnId:typeof A.turn=="string"?A.turn:"";if(!O||!String(O).trim()){let U=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${v}`,requestReceivedAt:y,requestReceivedAtMs:f,responseSentAt:new Date(U).toISOString(),responseSentAtMs:U,responseStatus:400}),!0}}await x(v,u,A);let D=Date.now();return b(S,200,{status:"success",data:{ok:!0,cardId:v,actionType:u,requestReceivedAt:y,requestReceivedAtMs:f,responseSentAt:new Date(D).toISOString(),responseSentAtMs:D,responseStatus:200}}),!0}if(q==="POST"&&l===`${w}/mcp-controlplane`){await B();let f=await I(T),y=typeof f.tool=="string"?f.tool.trim():"",k=f.args&&typeof f.args=="object"&&!Array.isArray(f.args)?f.args:{};if(!y)return b(S,400,{error:"tool is required"}),!0;try{let u=await chunk272IYUKT_cjs.a(y,k,$());if(u&&typeof u=="object"&&!Array.isArray(u)){let P=u;if(P.status==="fail")return b(S,400,{error:chunk272IYUKT_cjs.b(u,"Request failed")}),!0;if(P.status==="error")return b(S,500,{error:chunk272IYUKT_cjs.b(u,"Internal error")}),!0}b(S,200,u);}catch(u){let P=typeof u?.statusCode=="number"?Number(u.statusCode):500,v=u instanceof Error?u.message:String(u);b(S,P,{error:v});}return !0}let R=l.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/retrigger$`));if(q==="POST"&&R){await B();let f=decodeURIComponent(R[1]);return await N(f),b(S,200,{ok:!0}),!0}let F=l.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/actions$`));if(q==="POST"&&F){await B();let f=decodeURIComponent(F[1]),y=Date.now(),k=new Date(y).toISOString(),u=await I(T),P=u?.actionType;if(P==="chat-send"&&!await _(f)){let A=Date.now();return b(S,409,{error:`chat handler is not configured for card: ${f}`,requestReceivedAt:k,requestReceivedAtMs:y,responseSentAt:new Date(A).toISOString(),responseSentAtMs:A,responseStatus:409}),!0}if(P==="chat-send"){let A=u?.payload??{},D=typeof A["turn-id"]=="string"?A["turn-id"]:typeof A.turnId=="string"?A.turnId:typeof A.turn=="string"?A.turn:"";if(!D||!String(D).trim()){let O=Date.now();return b(S,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${f}`,requestReceivedAt:k,requestReceivedAtMs:y,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:400}),!0}}await x(f,P,u?.payload);let v=Date.now();return b(S,200,{ok:!0,requestReceivedAt:k,requestReceivedAtMs:y,responseSentAt:new Date(v).toISOString(),responseSentAtMs:v,responseStatus:200}),!0}let p=l.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/cards/([^/]+)/files/(\\d+)$`));if(q==="GET"&&p){let f=decodeURIComponent(p[1]),y=parseInt(p[2],10),k=K.searchParams.get("sn");return await H(S,f,y,k),!0}return !1}catch(R){let F=R?.statusCode||500;return b(S,F,{error:String(R?.message||R)}),true}}return {handleRuntimeApi:E}}var Ke=3e4;function Ve(g){let w=g.socket?.remoteAddress??"";return w==="127.0.0.1"||w==="::1"||w==="::ffff:127.0.0.1"}function ue(g){let{apiBasePath:w,emitNotifications:b,readJsonBody:I,json:B}=g,$=`${w}/notify-q`;async function N(x,_,H){if(H.pathname!==$)return false;if((x.method??"").toUpperCase()!=="POST")return B(_,405,{status:"error",error:"Method not allowed"}),true;if(!Ve(x))return B(_,403,{status:"error",error:"Forbidden"}),true;let E;try{E=await I(x);}catch{return B(_,400,{status:"error",error:"Invalid JSON body"}),true}if(!E||typeof E!="object"||!Array.isArray(E.notifications))return B(_,400,{status:"error",error:"body.notifications must be an array"}),true;let T=E.notifications,{accepted:S,rejected:z}=chunk3HCH2ZFB_cjs.b(T,Date.now(),Ke);return S.length>0&&b(S),B(_,200,{status:"success",data:{accepted:S.length,rejected:z}}),true}return {handleNotifyRoute:N}}var le={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},de="chat-handler-flow-queue",ot="__probe__echo__probe__";function Mr(g){let w=String(g.apiBasePath||"/api/board").replace(/\/$/,""),b={...le,...g.corsHeaders||{}},I=g.queueLaneTuning??{},B=g.boardId||"",$=Number.isInteger(g.chatBootstrapTailTurns)&&g.chatBootstrapTailTurns>0?g.chatBootstrapTailTurns:1,N=g.logger||{info:console.log,warn:console.warn,error:console.error},x=g.invocationAdapter,_=g.chatFlowRunner||null,H=g.notificationTransport||null,E=g.serverUrl||null,T=g.executionExtra||{},S=g.onSseClientConnected,z=g.onSseClientDisconnected,q=g.onChannelSubscribed,K=g.onChannelUnsubscribed,l=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async(t,e)=>await Q.buildSseOneShotBatch({params:{cardId:t},body:{receiving:e}}),onSseClientDisconnected:z}),R=chunkLFVMX23W_cjs.a({buildChatOneShotBatch:async()=>({status:"success",data:{kind:"notification-batch",category:"batch",notifications:[]}})});function F(t){function e(a){return {...a,queueStorageForRef(d,C){return chunkSDJ3747Q_cjs.a(a.queueStorageForRef(d,C),{lane:C,emitNotification:i})}}}function r(a){return {...a,queueStorageForRef(d,C){return chunkTIQ775WI_cjs.h(a.queueStorageForRef(d,C),{lane:C,emitNotification:i})}}}function n(a){return {async get(d){return a.get(d)},async set(d){return a.set(d)},async del(d){return a.del(d)},async patch(d){return a.patch(d)},async appendFiles(d){return a.appendFiles(d)}}}function o(a){return {async get(d){return await a.get(d)},async set(d){return await a.set(d)},async del(d){return await a.del(d)},async patch(d){return await a.patch(d)},async appendFiles(d){return await a.appendFiles(d)}}}let s=null;function i(a){if(a.kind==="notification-batch"){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),j=t.nonCoreAdapter??(!chunkBQUQTOPB_cjs.a(c)&&P(c)?c:null),h=chunkBQUQTOPB_cjs.a(c)?chunkTIQ775WI_cjs.i(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}):chunkC7RR2JCL_cjs.e(t.baseRef,c,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow,emitNotification:i}),M=t.nonCore??(j?chunkC7RR2JCL_cjs.f(t.baseRef,j,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),We=c.chatStorageForRef(t.chatStoreRef),lt,Je=chunkBQUQTOPB_cjs.a(c)?(()=>{let a=chunkTIQ775WI_cjs.d(chunkTIQ775WI_cjs.c(chunkTIQ775WI_cjs.b(c.kvStorageForRef(t.cardStoreRef)),c.hashFn),N.warn),d=chunkTIQ775WI_cjs.g(a,{emitNotification:i}),C=o(d);return lt={get(m){return C.get(m)},set(m){return C.set(m)}},C})():(()=>{let a=c.kvStorageForRef(t.cardStoreRef),C=chunkCAID4CGO_cjs.H(chunkCAID4CGO_cjs.m({readIndex:()=>a.read("_index"),writeIndex:m=>a.write("_index",m),readCard:m=>a.read(m),writeCard:(m,pt)=>(a.write(m,pt),m),removeCard:m=>{a.delete(m);},cardExists:m=>a.read(m)!==null,defaultCardKey:m=>m},N.warn),{emitNotification:i});return lt=C,n(C)})(),ft;if(chunkBQUQTOPB_cjs.a(c)){let a=c.blobStorageForRef(t.artifactsStoreRef);ft={async putBytes(d,C){if(a.writeBytes){await a.writeBytes(d,C);return}let m=JSON.stringify({__kind:"bytes-array",data:[...C]});await a.write(d,m);},async getBytes(d){if(a.readBytes){let m=await a.readBytes(d);if(m!==null)return m}let C=await a.read(d);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(d){return await a.listKeys(d)}};}else {let a=c.blobStorageForRef(t.artifactsStoreRef),d=chunkNBJTYAYN_cjs.a(a);ft={putBytes(C,m,pt){d.putBytes(C,m,pt);},getBytes(C){return d.getBytes(C)},listKeys(C){return d.list(C).map(m=>m.key)}};}let ze={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:M,publicCardStore:lt,boardOps:ze,cardStoreOps:Je,get filesArtifacts(){return ft},get chatStorage(){return We},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:chunk3HCH2ZFB_cjs.c(),notificationTeardown:null,initialized:false,cardsBootstrapped:false},s}let p=g.boards.map(F),f=new Map;function y(t){return f.get(t)??0}function k(t){return t.queueStoreRef}function u(t,e){if(chunkBQUQTOPB_cjs.a(t.boardAdapter)){let n=t.boardAdapter.queueStorageForRef(k(t),e);return chunkCSHNTZW4_cjs.a(n)}let r=t.boardAdapter.queueStorageForRef(k(t),e);return chunkGPCMBPLK_cjs.a(r)}function P(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function v(t){let e=p[y(t)];return {files:e?e.filesArtifacts:null}}function A(){return chunkNBJTYAYN_cjs.c()}function D(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}function O(t){return "cardId"in t&&typeof t.cardId=="string"?W(t.cardId)??void 0:p[0]??void 0}function U(t){for(let e of t){let r=O(e);if(r)return r}return p[0]??void 0}function ct(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??U(r);if(e.appendState!==false&&o&&chunk3HCH2ZFB_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&&l.broadcastNotificationBatch(i),s.length>0&&R.broadcastNotificationBatch(s);}if(!(e.mirrorExternal===false||!o?.boardAdapter.publishBoardChangeNotifications))try{let s=r.filter(i=>i.category==="board-output"||i.category==="card-store"||i.category==="chat-store"||i.category==="hosted-runtime");s.length>0&&o.boardAdapter.publishBoardChangeNotifications(s);}catch{}}function V(t,e){ct(t,{ctx:e,appendState:true,broadcastSse:true,mirrorExternal:true});}async function fe(t){if(!t||t.notificationTeardown||!H||!t.notifyRef)return;let e=await H.subscribe(t.notifyRef,r=>{let n=chunk3HCH2ZFB_cjs.a(r);ct(n,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});});t.notificationTeardown=e;}async function pe(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 fe(t),!t.chatHandlerFlow&&t.chatHandlerRef&&x.describe)try{let o=await x.describe(t.chatHandlerRef);o&&o.kind!=="chat-handler"?N.warn(`[init] chat-handler describe returned kind="${o.kind}", expected "chat-handler" for ${t.label}`):o&&N.info(`[init] chat-handler validated: ${o.name} (protocol ${o.protocolVersion}) for ${t.label}`);}catch(o){N.warn(`[init] chat-handler describe failed for ${t.label}: ${o?.message||String(o)}`);}t.initialized=true;}async function ut(t){let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&chunk3HCH2ZFB_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&&ct(e,{ctx:t,appendState:true,broadcastSse:true,mirrorExternal:false});}async function Rt(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),n=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let o of n)typeof o.id=="string"&&(f.set(o.id,e),await t.boardOps.upsertCard({params:{cardId:o.id}}));t.cardsBootstrapped=true;}async function G(){for(let t of p)await pe(t);}async function at(){await G();for(let t=0;t<p.length;t++)await ut(p[t]),await Rt(p[t],t),await ut(p[t]);}async function yt(t=false){t||await G();for(let e of p){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function W(t){return p[y(t)]??null}async function Y(t){let e=W(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 me(){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 p)e.push(...await t(r));return e}function ht(){return p[0]??null}function ge(t){return W(t)??ht()}function L(t){let e=ge(t);if(!e)throw Object.assign(new Error(`Board context is unavailable for chat operations: ${t}`),{statusCode:404});return e.chatStorage}async function Re(t){return await L(t).isProcessing(t)}async function tt(t,e){let r=await Q.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 Q=chunkOF4FPYNI_cjs.a({append(t,e,r,n,o){return L(t).append(t,e,r,n,o)},readAll(t){return L(t).readAll(t)},readAfter(t,e){return L(t).readAfter(t,e)},clear(t){return L(t).clear(t)},setProcessing(t,e){return L(t).setProcessing(t,e)},isProcessing(t){return L(t).isProcessing(t)},getConfig(t){return L(t).getConfig(t)},setConfig(t,e){return L(t).setConfig(t,e)}},{emitNotification(t){if(t.kind==="notification-batch"){V(t.notifications);return}V([t]);}}),wt=chunk3HCH2ZFB_cjs.p({boardContexts:p,cardOwnerIndex:f,cardContextForCard:t=>W(t),readStatusSnapshot:()=>Se(),readDataObjectsByToken:()=>Ae(),readCardRuntimeArtifacts:()=>Ce(),readCardFromStore:t=>Y(t),readCardDefinitions:()=>me(),processAccumulatedLaneInternal:t=>yt(t),reportSourceFetched:(t,e)=>kt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>Pt(t,{reason:e}),uploadCardFile:(t,e,r,n,o)=>Ct(t,e,r,n,o),chatStorePublic:Q,serverUrl:E,apiBasePath:w}),ye=wt.mcpCardStoreFacade,st=wt.createMcpFacade,he=chunk3HCH2ZFB_cjs.j({boardId:B,bootstrapBoard:()=>at(),sseHub:l,onChannelSubscribed:q,onChannelUnsubscribed:K,getMcpFacade:()=>st(),getMcpCardStoreFacade:()=>ye()});function we(t){return chunk3HCH2ZFB_cjs.m(t)}function be(){return chunk3HCH2ZFB_cjs.n(st())}function bt(){return chunk3HCH2ZFB_cjs.o({boardId:B,uploadCardFile:Ct,getMcpFacade:()=>st(),controlplane:he})}let it=chunk3HCH2ZFB_cjs.k({boardId:B,boardContexts:p,readChatRecords:(t,e)=>ve(t,e),getChatProcessing:t=>Re(t),chatBootstrapTailTurns:$}),Se=it.readStatusSnapshot,Ce=it.readCardRuntimeArtifacts,Ae=it.readDataObjectsByToken,dt=it.buildPublishedRuntimePayload;async function St(t,e,r){let n=r?.syncBoard!==false,o=r?.restartOnlyIfChanged===true,s=W(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let i=await Y(t);if(!i)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let c=o?JSON.stringify(i):null,j=e(i)||i;if(o&&JSON.stringify(j)===c)return;let h=await s.cardStoreOps.set({body:j});if(h.status!=="success")throw Object.assign(new Error(h.error||`Failed to persist card: ${t}`),{statusCode:500});if(n){let M=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(M.status!=="success")throw Object.assign(new Error(M.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Be(t,e){await St(t,e,{syncBoard:true});}async function ke(t,e){await St(t,e,{syncBoard:false});}async function Pe(t){let e=W(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await Y(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 Oe(t){let e=await Q.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 tt(t,!1);}catch{}}async function Fe(t,e,r,n,o=""){let s=typeof r=="string"?r.trim():"",i=await Q.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 ve(t,e){let r=Number.isInteger(e?.tailTurns)&&e?.tailTurns>0?e?.tailTurns:void 0,n=await Q.readAll({params:{cardId:t},...r===void 0?{}:{body:{tailTurns:r}}});if(n.status!=="success")throw Object.assign(new Error(n.error||`Failed to read chat records for card: ${t}`),{statusCode:500});return Array.isArray(n.data?.records)?n.data.records:[]}let Ct=chunk3HCH2ZFB_cjs.l({safeCardId:t=>D(t),artifactsStores:t=>v(t),cardFileMetadataStore:()=>A(),readCardFromStore:t=>Y(t),updateCardLocalOnly:(t,e)=>ke(t,e),writeChatRecord:(t,e,r,n,o)=>Fe(t,e,r,n,o)}).uploadCardFile;async function At(t){let e=W(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 xe(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 Te(t,e,r=false,n="",o=""){try{let s=await At(t);if(!s){try{await tt(t,!1);}catch{}return}let{ctx:i,handlerFlow:c,handlerRef:j}=s;if(!r)try{await tt(t,!0);}catch{}let h={boardId:B,cardId:String(t),lastChatEntryId:e,...n?{turnId:n}:{},...typeof o=="string"&&o.trim()?{probe:o.trim()}:{},...T,...E?{serverUrl:E}:{}},M=c!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:de}}:j;chunkBQUQTOPB_cjs.a(i.boardAdapter)?await u(i,"chat-agent").enqueueRequest({boardId:B,ref:M,args:c!=null?{...h,__chatHandlerFlow:c}:h}):u(i,"chat-agent").enqueueRequest({boardId:B,ref:M,args:c!=null?{...h,__chatHandlerFlow:c}:h}),await Promise.resolve(i.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await tt(t,!1);}catch{}N.warn(`[chat-handler] queue failed for card "${t}": ${s instanceof Error?s.message:String(s)}`);}}async function Ne(t,e,r){if(e.howToRun==="built-in"&&chunkBQUQTOPB_cjs.b(e)===de){let n=_,o=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,n?n.run(o,s,{boardId:B,cardId:String(s.cardId||""),label:t.label,logger:N,serverUrl:E,executionExtra:T}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return x.invoke(e,r)}async function Ee(t,e=false){e||await G();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",n=r?W(r):ht();if(!n)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let o=await Ne(n,t.ref,t.args);if(!o.dispatched){if(r)try{await tt(r,!1);}catch{}throw new Error(o.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function je(t,e,r){if(e==="chat-send"){let o=r&&typeof r["turn-id"]=="string"?r["turn-id"]:r&&typeof r.turnId=="string"?r.turnId:r&&typeof r.turn=="string"?r.turn:"";if(r&&"files"in r&&r.files!==void 0&&r.files!==null)throw Object.assign(new Error('chat-send does not accept a "files" parameter; upload attachments via manage.add-chat-attachment first'),{statusCode:400});let s=bt(),i=xe(r?.text),c=i?i.text:r?.text,j=await chunk272IYUKT_cjs.a("manage.add-chat-entry-and-any-attachments",{board_id:B,card_id:t,role:"user",text:c,turn_id:o,files:[]},s);if(j?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(j,`chat-send append failed for card ${t}`));let h=j?.data?.id;if(typeof h!="string"||!h)throw new Error(`chat-send did not return an append id for card ${t}`);let M=await chunk272IYUKT_cjs.a("setstate.chat-processing-started",{board_id:B,card_id:t},s);if(M?.status!=="success")throw new Error(chunk272IYUKT_cjs.b(M,`chat-send processing update failed for card ${t}`));Te(t,h,true,o,i?.assistant||"");return}await Be(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=A().normalizeIncoming(r?.files,s);return c.length>0&&A().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 Bt(t,e,r){let n=await Y(t);if(!n)throw Object.assign(new Error("Card not found"),{statusCode:404});let o=A().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=D(t),c=v(t),j=String(s.stored_name||""),h=`${i}/${j}`,M=c.files?await c.files.getBytes(h):null;if(!M)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:M}}async function Me(t,e,r,n){let{fileRecord:o,bytes:s}=await Bt(e,r,n),i=String(o.name||o.stored_name||"download.bin"),c=String(o.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":c,"Content-Disposition":`attachment; filename="${i}"`,"Content-Length":s.length}),t.end(s);}function _e(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 De(t,e,r){let n=t.split(/\r?\n/);return (e==="head"?n.slice(0,r):n.slice(-r)).join(`
|
|
2
|
+
`)}async function rt(t){let e=[];for await(let n of t)e.push(n);let r=typeof Buffer<"u"?Buffer.concat(e).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(e)).trim();return r?JSON.parse(r):{}}async function kt(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let n=p[0];return n?n.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function Pt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",n=p[0];return n?n.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let Ie=chunkLFVMX23W_cjs.b({sseHub:l,queueSseHub:R,corsHeaders:b,json:et,buildPublishedRuntimePayload:()=>dt(),onSseClientConnected:S,onChannelSubscribed:q,onChannelUnsubscribed:K,apiBasePath:w,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),bootstrapBoard:()=>at(),boardContexts:p,publishPersistedStateSnapshot:t=>ut(t),upsertCardsFromSource:(t,e)=>Rt(t,e)}).handleWatchersRoutes,qe=chunk7FGPOGRV_cjs.a({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpFacade:()=>st(),createMcpToolRegistry:t=>we(t),resolveCardFileDownloadPayload:(t,e,r)=>Bt(t,e,r),isLikelyTextMimeType:t=>_e(t),sliceTextByLines:(t,e,r)=>De(t,e,r)}).handleAgentfaceApi,$e=chunkNM6O35RY_cjs.a({apiBasePath:w,json:et,readJsonBody:t=>rt(t),initBoardAndSetup:()=>G(),createMcpWebhookToolRegistry:()=>be()}).handleWebhooksApi,He=ce({apiBasePath:w,json:et,readJsonBody:t=>rt(t),bootstrapBoard:()=>at(),createMcpControlplaneToolRegistry:()=>bt(),retriggerCard:t=>Pe(t),applyCardAction:(t,e,r)=>je(t,e,r),resolveChatHandlerTarget:t=>At(t),sendCardFileDownloadResponse:(t,e,r,n)=>Me(t,e,r,n)}).handleRuntimeApi,Le=ue({apiBasePath:w,emitNotifications:t=>V(t),readJsonBody:t=>rt(t),json:(t,e,r)=>et(t,e,r)}).handleNotifyRoute;async function Ue(t,e,r){return !!(await qe(t,e,r)||await $e(t,e,r)||await Ie(t,e,r)||await Le(t,e,r)||await He(t,e,r))}return {get apiBasePath(){return w},get corsHeaders(){return b},get queueLaneTuning(){return I},handleRuntimeApi:Ue,emitNotification(t){if(t.kind==="notification-batch"){V(t.notifications);return}V([t]);},buildPublishedRuntimePayload:dt,__drainProcessAccumulatedLane:yt,handleChatAgentRequest:Ee,clearChatRecords:Oe,reportSourceFetched(t,e){return kt(t,{ref:e})},reportSourceFetchFailure(t,e){return Pt(t,{reason:e})},get cardStore(){return p[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function _r(g){let w=String(g.apiBasePath||"/api/boards").replace(/\/$/,""),b={...le,...g.corsHeaders||{}},I=g.serverMetaStore,B=g.boardRuntimeFactory,$=new Map,N="boards-config.json";function x(){let l=I.getText(N);if(!l)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(l)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function _(l){I.putText(N,JSON.stringify(l,null,2));}function H(l){let R=String(l||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return R.length>0&&R.length<=64?R:null}function E(l){if($.has(l))return $.get(l);let F=x().boards.find(f=>f.id===l)||{},p=B(l,F);return $.set(l,p),p}function T(l,R,F){let p=JSON.stringify(F),f=typeof Buffer<"u"?Buffer.byteLength(p):new TextEncoder().encode(p).length;l.writeHead(R,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":f}),l.end(p);}async function S(l,R,F){let p=l.method||"GET",f=F.pathname;if(p==="GET"&&f===w)return T(R,200,{ok:true,boards:x().boards}),true;if(p==="POST"&&f===w){let y=[];for await(let O of l)y.push(O);let k=typeof Buffer<"u"?Buffer.concat(y).toString("utf-8").trim():new TextDecoder().decode(chunkBQUQTOPB_cjs.d(y)).trim(),u={};try{u=k?JSON.parse(k):{};}catch{u={};}let P=H(u.id);if(!P)return T(R,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let v=x();if(v.boards.some(O=>O.id===P))return T(R,409,{error:`Board "${P}" is already registered`}),true;let A=typeof u.label=="string"&&u.label.trim()?u.label.trim():P,D={id:P,label:A};for(let[O,U]of Object.entries(u))O==="id"||O==="label"||U!=null&&(D[O]=U);return v.boards.push(D),_(v),T(R,200,{ok:true,board:D}),true}return false}async function z(l,R,F){let f=F.pathname.match(new RegExp(`^${chunkBQUQTOPB_cjs.c(w)}/([^/]+)(/|$)`));if(!f)return false;let y=H(decodeURIComponent(f[1]));return y?x().boards.some(P=>P.id===y)?!!await E(y).handleRuntimeApi(l,R,F):(T(R,404,{error:`Board "${y}" not registered. POST ${w} with {id} to register it first.`}),true):(T(R,400,{error:"Invalid board id"}),true)}async function q(l,R,F){return !!(await S(l,R,F)||await z(l,R,F))}function K(l){if(!x().boards.some(F=>F.id===l))throw Object.assign(new Error(`Board "${l}" not registered`),{statusCode:404});return {service:E(l)}}return {get apiBasePath(){return w},get corsHeaders(){return b},handleApi:q,requireBoardService:K}}exports.a=Mr;exports.b=_r;//# sourceMappingURL=chunk-22S5GCQK.cjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-22S5GCQK.cjs.map
|