yaml-flow 8.8.5 → 8.8.7

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.
@@ -1116,7 +1116,8 @@ try {
1116
1116
  const t2InProgress = t2NewMessages.find((m) => m?.role === 'system' && String(m?.text || '').trim().toLowerCase() === PROBE_IN_PROGRESS_TEXT);
1117
1117
  const t2AssistantMsg = t2NewMessages.find((m) => m?.role === 'assistant');
1118
1118
  assert(!!t2User && typeof t2User.id === 'string', 'T3 user chat message missing id');
1119
- assert(String(t2User?.text || '').includes(t2ProbePrompt), 'T3 user file text mismatch');
1119
+ assert(String(t2User?.text || '') === t2ProbePrompt, `T3 expected stored user text to equal prompt without probe envelope, got ${JSON.stringify(String(t2User?.text || ''))}`);
1120
+ assert(!String(t2User?.text || '').includes(ECHO_PROBE_MARKER), 'T3 stored user text should not include probe envelope markers');
1120
1121
  assert(!!t2AssistantMsg && typeof t2AssistantMsg.id === 'string', 'T3 assistant chat message missing id');
1121
1122
  assert(String(t2AssistantMsg?.text || '').includes(`Echo: ${t2ProbePrompt}`), 'T3 assistant echo file content mismatch');
1122
1123
  t3Dbg('step 6: all assertions passed');
@@ -1,4 +1,4 @@
1
- 'use strict';var chunkMCPADH33_cjs=require('./chunk-MCPADH33.cjs'),chunkFO4KNVU7_cjs=require('./chunk-FO4KNVU7.cjs'),chunkNBJTYAYN_cjs=require('./chunk-NBJTYAYN.cjs'),chunkGPCMBPLK_cjs=require('./chunk-GPCMBPLK.cjs'),chunk3CZCGNY4_cjs=require('./chunk-3CZCGNY4.cjs');require('./chunk-R44X3RQB.cjs'),require('./chunk-36QUKFL7.cjs');var chunk37HDEW26_cjs=require('./chunk-37HDEW26.cjs'),chunkZENTBLLA_cjs=require('./chunk-ZENTBLLA.cjs'),chunk7JVHYHT2_cjs=require('./chunk-7JVHYHT2.cjs'),chunkVQCIOKJV_cjs=require('./chunk-VQCIOKJV.cjs');require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs');var chunk7QZ267XP_cjs=require('./chunk-7QZ267XP.cjs'),chunkIXZG74EW_cjs=require('./chunk-IXZG74EW.cjs'),chunkHWYMZK3N_cjs=require('./chunk-HWYMZK3N.cjs');require('./chunk-UJ7ZTV4J.cjs');var chunkYMEIPKLW_cjs=require('./chunk-YMEIPKLW.cjs'),chunkP7ZCDICS_cjs=require('./chunk-P7ZCDICS.cjs'),chunkH4TYOSMD_cjs=require('./chunk-H4TYOSMD.cjs');require('./chunk-GNFE24S7.cjs');var child_process=require('child_process'),i=require('fs'),Oe=require('os'),x=require('path'),qe=require('net'),url=require('url'),crypto=require('crypto'),module$1=require('module'),properLockfile=require('proper-lockfile');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var i__namespace=/*#__PURE__*/_interopNamespace(i);var Oe__namespace=/*#__PURE__*/_interopNamespace(Oe);var x__namespace=/*#__PURE__*/_interopNamespace(x);var qe__namespace=/*#__PURE__*/_interopNamespace(qe);function C(...e){return x__namespace.join(...e)}function Ne(e){return x__namespace.isAbsolute(e)}function ue(){return crypto.randomUUID()}function Qe(e){return crypto.createHash("sha256").update(e).digest("hex")}function Je(e){return x__namespace.dirname(url.fileURLToPath(e))}function Pt(e){if(typeof e=="object"&&e!==null){let{command:r,args:o=[],...n}=e,s=Le(r,o);return {...n,command:s.command,args:s.args}}let t=De(e);if(t.length===0)throw new Error(`Empty command spec: ${JSON.stringify(e)}`);return Le(t[0],t.slice(1))}function Le(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 De(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 We(e){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(e)}function He(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:a}=e;return child_process.execFileSync(r,o,{shell:We(r),timeout:a,encoding:t?.encoding??"utf-8",cwd:n,windowsHide:true,env:s?{...process.env,...s}:void 0,input:t?.input})}function Ft(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:a=3e4}=e;child_process.execFile(r,o,{shell:We(r),encoding:"utf8",windowsHide:true,timeout:a,maxBuffer:10*1024*1024,cwd:n,env:s?{...process.env,...s}:void 0},(g,S,c)=>t(g??null,S,c));}function Ke(e,t,r){let o=x__namespace.join(e,"board-live-cards-cli.js");if(i__namespace.existsSync(o))return {cmd:process.execPath,args:[o,t,...r]};let n=x__namespace.join(e,"board-live-cards-cli.ts"),a=[x__namespace.join(e,"..","..","..","node_modules","tsx","dist","cli.mjs"),x__namespace.join(e,"..","..","node_modules","tsx","dist","cli.mjs"),x__namespace.join(e,"..","..","..","node_modules",".bin","tsx"),x__namespace.join(e,"..","..","node_modules",".bin","tsx")].find(S=>i__namespace.existsSync(S));return i__namespace.existsSync(n)&&a?{cmd:process.execPath,args:[a,n,t,...r]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",n,t,...r]}}function Ve(e){let t=x__namespace.join(e,"board-live-cards-cli.mjs");if(i__namespace.existsSync(t))return t;let r=x__namespace.join(e,"..","..","..","dev","board-live-cards-cli.js");if(i__namespace.existsSync(r))return r;let o=x__namespace.join(e,"..","..","dev","board-live-cards-cli.js");if(i__namespace.existsSync(o))return o;let n=x__namespace.join(e,"board-live-cards-cli.js");if(i__namespace.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 $t(e){return process.platform==="win32"?`\\\\.\\pipe\\${e}`:x__namespace.join(Oe__namespace.tmpdir(),`${e}.sock`)}var ce=new Map;function Ue(e,t,r){if(t.length===0)return;let o=t.map(g=>JSON.stringify(g)).join(`
1
+ 'use strict';var chunkMCPADH33_cjs=require('./chunk-MCPADH33.cjs'),chunkNBJTYAYN_cjs=require('./chunk-NBJTYAYN.cjs'),chunkGPCMBPLK_cjs=require('./chunk-GPCMBPLK.cjs'),chunkFO4KNVU7_cjs=require('./chunk-FO4KNVU7.cjs'),chunk3CZCGNY4_cjs=require('./chunk-3CZCGNY4.cjs');require('./chunk-R44X3RQB.cjs'),require('./chunk-36QUKFL7.cjs');var chunk37HDEW26_cjs=require('./chunk-37HDEW26.cjs'),chunkZENTBLLA_cjs=require('./chunk-ZENTBLLA.cjs'),chunk7JVHYHT2_cjs=require('./chunk-7JVHYHT2.cjs'),chunkVQCIOKJV_cjs=require('./chunk-VQCIOKJV.cjs');require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs');var chunk7QZ267XP_cjs=require('./chunk-7QZ267XP.cjs'),chunkIXZG74EW_cjs=require('./chunk-IXZG74EW.cjs'),chunkHWYMZK3N_cjs=require('./chunk-HWYMZK3N.cjs');require('./chunk-UJ7ZTV4J.cjs');var chunkYMEIPKLW_cjs=require('./chunk-YMEIPKLW.cjs'),chunkP7ZCDICS_cjs=require('./chunk-P7ZCDICS.cjs'),chunkH4TYOSMD_cjs=require('./chunk-H4TYOSMD.cjs');require('./chunk-GNFE24S7.cjs');var child_process=require('child_process'),i=require('fs'),Oe=require('os'),x=require('path'),qe=require('net'),url=require('url'),crypto=require('crypto'),module$1=require('module'),properLockfile=require('proper-lockfile');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var i__namespace=/*#__PURE__*/_interopNamespace(i);var Oe__namespace=/*#__PURE__*/_interopNamespace(Oe);var x__namespace=/*#__PURE__*/_interopNamespace(x);var qe__namespace=/*#__PURE__*/_interopNamespace(qe);function C(...e){return x__namespace.join(...e)}function Ne(e){return x__namespace.isAbsolute(e)}function ue(){return crypto.randomUUID()}function Qe(e){return crypto.createHash("sha256").update(e).digest("hex")}function Je(e){return x__namespace.dirname(url.fileURLToPath(e))}function Pt(e){if(typeof e=="object"&&e!==null){let{command:r,args:o=[],...n}=e,s=Le(r,o);return {...n,command:s.command,args:s.args}}let t=De(e);if(t.length===0)throw new Error(`Empty command spec: ${JSON.stringify(e)}`);return Le(t[0],t.slice(1))}function Le(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 De(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 We(e){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(e)}function He(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:a}=e;return child_process.execFileSync(r,o,{shell:We(r),timeout:a,encoding:t?.encoding??"utf-8",cwd:n,windowsHide:true,env:s?{...process.env,...s}:void 0,input:t?.input})}function Ft(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:a=3e4}=e;child_process.execFile(r,o,{shell:We(r),encoding:"utf8",windowsHide:true,timeout:a,maxBuffer:10*1024*1024,cwd:n,env:s?{...process.env,...s}:void 0},(g,S,c)=>t(g??null,S,c));}function Ke(e,t,r){let o=x__namespace.join(e,"board-live-cards-cli.js");if(i__namespace.existsSync(o))return {cmd:process.execPath,args:[o,t,...r]};let n=x__namespace.join(e,"board-live-cards-cli.ts"),a=[x__namespace.join(e,"..","..","..","node_modules","tsx","dist","cli.mjs"),x__namespace.join(e,"..","..","node_modules","tsx","dist","cli.mjs"),x__namespace.join(e,"..","..","..","node_modules",".bin","tsx"),x__namespace.join(e,"..","..","node_modules",".bin","tsx")].find(S=>i__namespace.existsSync(S));return i__namespace.existsSync(n)&&a?{cmd:process.execPath,args:[a,n,t,...r]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",n,t,...r]}}function Ve(e){let t=x__namespace.join(e,"board-live-cards-cli.mjs");if(i__namespace.existsSync(t))return t;let r=x__namespace.join(e,"..","..","..","dev","board-live-cards-cli.js");if(i__namespace.existsSync(r))return r;let o=x__namespace.join(e,"..","..","dev","board-live-cards-cli.js");if(i__namespace.existsSync(o))return o;let n=x__namespace.join(e,"board-live-cards-cli.js");if(i__namespace.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 $t(e){return process.platform==="win32"?`\\\\.\\pipe\\${e}`:x__namespace.join(Oe__namespace.tmpdir(),`${e}.sock`)}var ce=new Map;function Ue(e,t,r){if(t.length===0)return;let o=t.map(g=>JSON.stringify(g)).join(`
2
2
  `)+`
3
3
  `,n=ce.get(e);if(n&&!n.socket.destroyed){n.ready?n.socket.write(o):n.queue.push(o);return}let s=$t(e),a=qe__namespace.createConnection(s);n={socket:a,ready:false,queue:[o]},ce.set(e,n),a.on("connect",()=>{n.ready=true;for(let g of n.queue)a.write(g);n.queue.length=0;}),a.on("error",g=>{r?.(`[named-pipe publish] ${s}: ${g instanceof Error?g.message:String(g)}`),ce.delete(e);}),a.on("close",()=>{ce.delete(e);});}function ze(){return {executeSync(e,t,r){return He({command:e,args:t,cwd:r?.cwd,timeoutMs:r?.timeout,env:r?.env},{encoding:r?.encoding,input:r?.input})},executeAsync(e,t,r){Ft({command:e,args:t},r);},resolveInvocation(e,t){let r=Pt({command:e,args:t});return {cmd:r.command,args:r.args??[]}},splitCommand:De}}function xe(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 we(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 Ge(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 Ye(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 a(){if(!(n||s)){s=true;try{let S=await e.lease({max:o,visibilityMs:r});for(let c of S)await Ge(e,c);}finally{s=false;}}}let g=setInterval(()=>{a();},t);return typeof g.unref=="function"&&g.unref(),a(),()=>{n=true,clearInterval(g);}}async function Mt(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 Ge(e,n);return o.length}async function de(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 Mt(e);if(o+=s,s<=0)return o}throw new Error(`drainQueueLaneToIdle exceeded ${r} passes for lane "${e.id}"`)}function _t(e){let r=(Array.isArray(e)?e:e.lanes).map(o=>Ye(o));return ()=>{for(let o of r)o();}}var Ot=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('board-live-cards-node.cjs', document.baseURI).href)));function qt(e){return typeof e=="object"?e:chunkVQCIOKJV_cjs.b(e)}function Xe(e){let t=x__namespace.basename(String(e||"").trim());if(!t)throw new Error(`resolveYamlFlowCliPath: expected non-empty cli file name, got ${JSON.stringify(e)}`);let r=x__namespace.dirname(Ot.resolve("yaml-flow/package.json")),o=t.replace(/\.[^.]+$/,""),n=x__namespace.join(r,"cli","bundled",`${o}.mjs`);if(i__namespace.existsSync(n))return n;let s=x__namespace.join(r,"cli","node",t);if(i__namespace.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=qt(e);return t.kind==="yaml-flow-cli"?Xe(t.value):t.value}function Nt(e,t){let r=q(e);switch(r){case "source-cli-task-executor":{let o=x__namespace.join(t,"source-cli-task-executor.js");if(i__namespace.existsSync(o))return {command:process.execPath,args:[o]};let n=x__namespace.join(t,"source-cli-task-executor.ts"),s=x__namespace.join(t,"..","..","node_modules","tsx","dist","cli.mjs"),a=x__namespace.join(t,"..","..","node_modules",".bin","tsx"),g=i__namespace.existsSync(s)?s:a;return i__namespace.existsSync(n)&&i__namespace.existsSync(g)?{command:process.execPath,args:[g,n]}:{command:process.execPath,args:[o]}}case "board-live-cards":{let{cmd:o,args:n}=Ke(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 Qt(e,t){if(e.howToRun==="built-in"){let{command:o,args:n}=Nt(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 le(e,t){return Qt(e,t)}var ke=new Map;function Jt(e,t){let r=String(e||"").trim();if(!r)throw new Error("registerInProcessExecutionHandler: key is required");ke.set(r,t);}function Dt(e){let t=String(e||"").trim();t&&ke.delete(t);}function et(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 tt(e,t){return {...t,whatToRun:q(e.whatToRun),...e.extra?{extra:e.extra}:{}}}function be(e,t,r="invokeExecutionRef"){return chunk3CZCGNY4_cjs.a(e,t,r)}function rt(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 O(e){return {result:"failure",data:{error:e}}}function V(e,t,r){let o=r?.label??"invokeExecutionRefSync",n=r?.cliDir??r?.cwd??process.cwd(),s;try{s=be(e.argsMassaging,tt(e,t),o);}catch(h){let l=h instanceof Error?h.message:String(h);return O(l)}let a;try{a=le(e,n);}catch(h){let l=h instanceof Error?h.message:String(h);return O(`[${o}] ref resolution failed: ${l}`)}let g=[...a.baseArgs,...s.cmdArgs??[]],S=JSON.stringify(s.stdin??t),c=ze(),d;try{d=c.executeSync(a.command,g,{timeout:r?.timeoutMs??3e4,encoding:"utf-8",cwd:r?.cwd,input:S});}catch(h){let l=h,u=(l.stderr?String(l.stderr):"").trim(),p=typeof l.status=="number"?l.status:"unknown",m=u||l.message;return O(`[${o}] ref exited with status ${p}${m?`: ${m}`:""}`)}try{return rt(et(d))}catch{return {result:"success",data:{stdout:d.trim()}}}}async function Ze(e,t,r){let o=r?.label??"invokeExecutionRef",n;try{n=be(e.argsMassaging,tt(e,t),o);}catch(h){let l=h instanceof Error?h.message:String(h);return O(l)}let s=q(e.whatToRun),a=n.headers?{"Content-Type":"application/json",...n.headers}:{"Content-Type":"application/json"},g=n.url??s,S;if(e.howToRun==="http:get"){let h=n.body&&typeof n.body=="object"&&!Array.isArray(n.body)?n.body:t,l=new URLSearchParams(Object.entries(h).filter(([,u])=>u!=null).map(([u,p])=>[u,String(p)]));l.size>0&&(g=`${g}${g.includes("?")?"&":"?"}${l.toString()}`);}else S=JSON.stringify(n.body??t);let c={method:e.howToRun==="http:get"?"GET":"POST",headers:a,body:S},d=0;for(;;)try{let h=await fetch(g,c);if(!h.ok){let m=await h.text().catch(()=>"");return O(`[${o}] HTTP ${h.status}${m?`: ${m}`:""}`)}let l={};h.headers.forEach((m,R)=>{l[R]=m;});let u=new Uint8Array(await h.arrayBuffer());if(u.byteLength===0)return {result:"success",data:{},headers:l};let p=new TextDecoder().decode(u);try{return rt(et(p),{headers:l})}catch{return {result:"success",data:{stdout:p},headers:l}}}catch(h){let l=h?.cause,u=l&&typeof l=="object"&&"code"in l?String(l.code||""):"";if((u==="ECONNRESET"||u==="UND_ERR_SOCKET")&&d===0){d+=1;continue}let m=h instanceof Error?h.message:String(h),R=l instanceof Error?`${l.name}: ${l.message}${u?` [${u}]`:""}`:l?String(l):"",w=n.url??s??"",f=`${m}${R?` (cause: ${R})`:""}${w?` url=${w}`:""}`;return O(`[${o}] ${f}`)}}async function Wt(e,t,r){let o=r?.label??"invokeExecutionRef",n=q(e.whatToRun).trim();if(!n)return O(`[${o}] in-process-loop requires a non-empty handler key`);let s=ke.get(n);if(!s)return O(`[${o}] no in-process handler registered for: ${n}`);try{return await s(e,t,r)}catch(a){let g=a instanceof Error?a.message:String(a);return O(`[${o}] ${g}`)}}var Ht={"local-node":async(e,t,r)=>V(e,t,r),"local-python":async(e,t,r)=>V(e,t,r),"local-process":async(e,t,r)=>V(e,t,r),"built-in":async(e,t,r)=>V(e,t,r),"http:post":Ze,"http:get":Ze,"in-process-loop":Wt},Kt={"local-node":V,"local-python":V,"local-process":V,"built-in":V};async function Z(e,t,r){let o=r?.transports?.[e.howToRun]??Ht[e.howToRun];return o?o(e,t,r):O(`[${r?.label??"invokeExecutionRef"}] unsupported howToRun: ${e.howToRun}`)}function ve(e,t,r){let o=r?.syncTransports?.[e.howToRun]??Kt[e.howToRun];return o?o(e,t,r):O(`[${r?.label??"invokeExecutionRefSync"}] unsupported sync howToRun: ${e.howToRun}`)}function Vt(e){return {invoke(t,r){return Z(t,r,e)},invokeSync(t,r){return ve(t,r,e)}}}function Ut(e,t,r){return ve(e,t,r)}function Ae(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 d=await chunkH4TYOSMD_cjs.h(s,{subcommand:o,...n?.input!==void 0?{input:n.input}:{}});return typeof d=="string"?d:d&&typeof d=="object"&&!Array.isArray(d)&&typeof d.stdout=="string"?String(d.stdout):JSON.stringify(d??{})}if(s.howToRun==="http:get"){let d=await Z(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(d.result!=="success"){let h=typeof d.data?.error=="string"?d.data.error:d.error;throw new Error(h||`executor request failed: ${d.result}`)}return typeof d.data?.stdout=="string"?d.data.stdout:JSON.stringify(d.data??{})}if(!e.resolveCliDir)throw new Error(`createNonCoreExecutorDispatcher: ref.howToRun="${s.howToRun}" requires opts.resolveCliDir`);let{command:a,baseArgs:g}=le(s,e.resolveCliDir()),S=s.extra?["--extra",Buffer.from(JSON.stringify(s.extra)).toString("base64")]:[],c=[...g,o,...S];return await new Promise((d,h)=>{let l=child_process.spawn(a,c,{cwd:process.cwd(),stdio:"pipe",windowsHide:true,shell:process.platform==="win32"&&/\.(cmd|bat)$/i.test(a)}),u=[],p=[],m=false,R=null,w=y=>{m||(m=true,R&&clearTimeout(R),h(y));},f=y=>{m||(m=true,R&&clearTimeout(R),d(y));};l.stdout.on("data",y=>{u.push(Buffer.from(y));}),l.stderr.on("data",y=>{p.push(Buffer.from(y));}),l.on("error",y=>{let v=y;v.stdout=Buffer.concat(u).toString("utf-8"),v.stderr=Buffer.concat(p).toString("utf-8"),w(v);}),l.on("close",y=>{let v=Buffer.concat(u).toString("utf-8"),k=Buffer.concat(p).toString("utf-8");if(y===0){f(v);return}let b=new Error(k.trim()||`executor exited with status ${y}`);b.stdout=v,b.stderr=k,w(b);}),n?.timeout&&n.timeout>0&&(R=setTimeout(()=>{l.kill();let y=new Error(`executor timed out after ${n.timeout}ms`);y.stdout=Buffer.concat(u).toString("utf-8"),y.stderr=Buffer.concat(p).toString("utf-8"),w(y);},n.timeout)),n?.input!==void 0?l.stdin.end(n.input):l.stdin.end();})}}}function B(e,t){if(process.platform!=="win32"){i__namespace.renameSync(e,t);return}let r=[10,20,40,80,160];for(let o=0;o<=r.length;o++)try{i__namespace.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 U(e){function t(n){return x__namespace.join(e,...n.split("/"))}function r(n){return x__namespace.relative(e,n).replace(/\\/g,"/")}function o(n,s){if(i__namespace.existsSync(n))for(let a of i__namespace.readdirSync(n,{withFileTypes:true})){let g=x__namespace.join(n,a.name);if(a.isDirectory()){o(g,s);continue}a.isFile()&&s.push(r(g));}}return {read(n){let s=t(n);if(!i__namespace.existsSync(s))return null;try{return i__namespace.readFileSync(s,"utf-8")}catch{return null}},write(n,s){let a=t(n),g=`${a}.${process.pid}.${crypto.randomUUID()}.tmp`;i__namespace.mkdirSync(x__namespace.dirname(a),{recursive:true}),i__namespace.writeFileSync(g,s,"utf-8"),B(g,a);},exists(n){return i__namespace.existsSync(t(n))},remove(n){let s=t(n);try{i__namespace.existsSync(s)&&i__namespace.unlinkSync(s);}catch{}},readBytes(n){let s=t(n);if(!i__namespace.existsSync(s))return null;try{return new Uint8Array(i__namespace.readFileSync(s))}catch{return null}},writeBytes(n,s){let a=t(n),g=`${a}.${process.pid}.${crypto.randomUUID()}.tmp`;i__namespace.mkdirSync(x__namespace.dirname(a),{recursive:true}),i__namespace.writeFileSync(g,Buffer.from(s)),B(g,a);},listKeys(n){let s=[];o(e,s);let a=s.sort();return n?a.filter(g=>g.startsWith(n)):a},stat(n){let s=t(n);if(!i__namespace.existsSync(s))return null;try{let a=i__namespace.statSync(s);return {key:n,size:Number(a.size||0),updatedAt:new Date(a.mtimeMs).toISOString()}}catch{return null}},keyRef(n){return {kind:"fs-path",value:t(n)}},renameKey(n,s){let a=t(n);if(!i__namespace.existsSync(a))return false;let g=t(s);return i__namespace.mkdirSync(x__namespace.dirname(g),{recursive:true}),B(a,g),true}}}function Ie(){return {read(e){if(!i__namespace.existsSync(e))return null;try{return i__namespace.readFileSync(e,"utf-8")}catch{return null}},write(e,t){let r=`${e}.${process.pid}.${crypto.randomUUID()}.tmp`;i__namespace.mkdirSync(x__namespace.dirname(e),{recursive:true}),i__namespace.writeFileSync(r,t,"utf-8"),B(r,e);},exists(e){return i__namespace.existsSync(e)},remove(e){try{i__namespace.existsSync(e)&&i__namespace.unlinkSync(e);}catch{}},readBytes(e){if(!i__namespace.existsSync(e))return null;try{return new Uint8Array(i__namespace.readFileSync(e))}catch{return null}},writeBytes(e,t){let r=`${e}.${process.pid}.${crypto.randomUUID()}.tmp`;i__namespace.mkdirSync(x__namespace.dirname(e),{recursive:true}),i__namespace.writeFileSync(r,Buffer.from(t)),B(r,e);},stat(e){if(!i__namespace.existsSync(e))return null;try{let t=i__namespace.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 i__namespace.existsSync(e)?(i__namespace.mkdirSync(x__namespace.dirname(t),{recursive:true}),B(e,t),true):false}}}function D(e,t){let r=`${e}.${process.pid}.${crypto.randomUUID()}.tmp`;i__namespace.mkdirSync(x__namespace.dirname(e),{recursive:true}),i__namespace.writeFileSync(r,JSON.stringify(t,null,2),"utf-8"),B(r,e);}function N(e){if(!i__namespace.existsSync(e))return null;try{return JSON.parse(i__namespace.readFileSync(e,"utf-8"))}catch{return null}}function X(e){return i__namespace.existsSync(e)?i__namespace.readdirSync(e).filter(t=>t.endsWith(".json")).sort().map(t=>x__namespace.join(e,t)):[]}function ee(e){return {id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}}function Zt(e){return {...ee(e),leaseToken:String(e.leaseToken||""),leaseExpiresAt:String(e.leaseExpiresAt||"")}}function Xt(e){return {...ee(e),reason:e.reason}}function je(e){let t=x__namespace.join(e,"active"),r=x__namespace.join(e,"leased"),o=x__namespace.join(e,"done"),n=x__namespace.join(e,"dead"),s=x__namespace.join(e,"staged");for(let l of [t,r,o,n,s])i__namespace.mkdirSync(l,{recursive:true});function a(l){let u=String(l.enqueuedAt||new Date().toISOString()).replace(/[:.]/g,"-");return x__namespace.join(t,`${u}-${l.id}.json`)}function g(l){return x__namespace.join(r,`${l}.json`)}function S(l){return x__namespace.join(o,`${l}.json`)}function c(l){return x__namespace.join(n,`${l}.json`)}function d(l){return x__namespace.join(s,`${l}.json`)}function h(){let l=Date.now();for(let u of X(r)){let p=N(u);if(!p?.leaseExpiresAt)continue;let m=Date.parse(p.leaseExpiresAt);if(Number.isNaN(m)||m>l)continue;let R={id:p.id,body:p.body,enqueuedAt:p.enqueuedAt,attempt:p.attempt};D(a(R),R);try{i__namespace.unlinkSync(u);}catch{}}}return {enqueue(l){let u={id:crypto.randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0};return D(a(u),u),ee(u)},enqueueMany(l){return l.map(u=>this.enqueue(u))},enqueueIfAbsent(l,u){h();for(let m of [t,r,s])for(let R of X(m))if(N(R)?.dedupKey===u)return null;let p={id:crypto.randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0,dedupKey:u};return D(a(p),p),ee(p)},lease(l){h();let u=Math.max(1,Math.floor(l?.max??1)),p=Math.max(1,Math.floor(l?.visibilityMs??6e4)),m=[];for(let R of X(t)){if(m.length>=u)break;let w=N(R);if(!w)continue;let f=g(w.id);try{B(R,f);}catch{continue}let y={...w,attempt:(Number(w.attempt)||0)+1,leaseToken:crypto.randomUUID(),leaseExpiresAt:new Date(Date.now()+p).toISOString()};D(f,y),m.push(Zt(y));}return m},ack(l,u){let p=g(l),m=N(p);if(!m||m.leaseToken!==u)return false;try{B(p,S(l));}catch{return false}return true},nack(l,u,p){let m=g(l),R=N(m);if(!R||R.leaseToken!==u)return false;let w={id:R.id,body:R.body,enqueuedAt:R.enqueuedAt,attempt:R.attempt};p?.dead?(w.reason=p.reason,D(c(l),w)):D(a(w),w);try{i__namespace.unlinkSync(m);}catch{}return true},peekActive(l){return h(),X(t).map(u=>N(u)).filter(u=>!!u).map(ee)},peekDeadLetter(l){return X(n).map(u=>N(u)).filter(u=>!!u).map(Xt)},stage(l,u){let p=u?.dedupKey;if(p){h();for(let R of [t,r,s])for(let w of X(R))if(N(w)?.dedupKey===p)return null}let m={id:crypto.randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0,...p?{dedupKey:p}:{}};return D(d(m.id),m),ee(m)},commitStaged(l){let u=d(l),p=N(u);if(!p)return false;let m={...p,attempt:0,enqueuedAt:new Date().toISOString()};D(a(m),m);try{i__namespace.unlinkSync(u);}catch{}return true},discardStaged(l,u){let p=d(l),m=N(p);if(!m)return false;let R={id:m.id,body:m.body,enqueuedAt:m.enqueuedAt,attempt:m.attempt,reason:u};D(c(l),R);try{i__namespace.unlinkSync(p);}catch{}return true},peekStaged(l){return X(s).map(u=>N(u)).filter(u=>!!u).map(ee)}}}var Ee="__scratch-marker",Te="__scratch-config.json",er=1440*60*1e3,tr=720*60*1e3,rr=500;function nt(e,t){if(!e)return t;let r=e.replace(/[^A-Za-z0-9._-]/g,"_");return r.length>0?r:t}function oe(e){i__namespace.mkdirSync(e,{recursive:true});let t=x__namespace.join(e,Ee),r=x__namespace.join(e,Te),o=!i__namespace.existsSync(t);if(o)try{i__namespace.writeFileSync(t,`scratch-store
4
4
  ${new Date().toISOString()}
@@ -1,4 +1,4 @@
1
- import {a as a$2}from'./chunk-Y4WK7HE4.js';export{a as createChatStorage,c as createInMemoryChatStorage}from'./chunk-Y4WK7HE4.js';import {a as a$5}from'./chunk-YBYXCFAI.js';import {a as a$3}from'./chunk-O5UYCGIN.js';export{a as createArtifactsStore,c as createCardFileMetadataStore,b as createFileArtifactsStore}from'./chunk-O5UYCGIN.js';import {a as a$4}from'./chunk-RKKSVOP2.js';export{a as createBoardWorkerStore,b as createQueueLaneRegistry}from'./chunk-RKKSVOP2.js';import {a}from'./chunk-VGDLSS2H.js';import'./chunk-7BTZCOT5.js';import'./chunk-7QQFDYBM.js';import {b as b$1}from'./chunk-NNSBBO5R.js';import {g,y}from'./chunk-ZWVT24YW.js';export{n as BOARD_GRAPH_KEY,u as EMPTY_CONFIG,m as SNAPSHOT_SCHEMA_VERSION_V1,z as createBoardLiveCardsNonCorePublic,y as createBoardLiveCardsPublic,l as createCardStore,e as createHttpBoardCallbackTransport,f as createInProcessBoardCallbackTransport,g as createLocalNodeBoardCallbackTransport}from'./chunk-ZWVT24YW.js';export{a as executionRefFromScriptPath,c as parseExecutionRef,b as serializeExecutionRef}from'./chunk-ANKA7HEJ.js';import {a as a$1,b}from'./chunk-44L64VQ2.js';export{b as parseRef,a as serializeRef}from'./chunk-44L64VQ2.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';export{a as createBoardLiveCardsMcp}from'./chunk-35N7ONTH.js';import {a as a$6}from'./chunk-JMDHDY6M.js';import {d}from'./chunk-3KC6LBOG.js';import'./chunk-MNEOJWPS.js';export{a as createCardStorePublic}from'./chunk-KBELAKIY.js';export{a as createArtifactsStorePublic}from'./chunk-X3LC4LII.js';import {h}from'./chunk-J4MHQ7JF.js';import'./chunk-FW4363Y4.js';import {spawn,spawnSync,execFile,execFileSync}from'child_process';import*as i from'fs';import*as Oe from'os';import*as x from'path';import*as qe from'net';import {fileURLToPath}from'url';import {randomUUID,createHash}from'crypto';import {createRequire}from'module';import {lockSync}from'proper-lockfile';function C(...e){return x.join(...e)}function Ne(e){return x.isAbsolute(e)}function ue(){return randomUUID()}function Qe(e){return createHash("sha256").update(e).digest("hex")}function Je(e){return x.dirname(fileURLToPath(e))}function Pt(e){if(typeof e=="object"&&e!==null){let{command:r,args:o=[],...n}=e,s=Le(r,o);return {...n,command:s.command,args:s.args}}let t=De(e);if(t.length===0)throw new Error(`Empty command spec: ${JSON.stringify(e)}`);return Le(t[0],t.slice(1))}function Le(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 De(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 We(e){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(e)}function He(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:a}=e;return execFileSync(r,o,{shell:We(r),timeout:a,encoding:t?.encoding??"utf-8",cwd:n,windowsHide:true,env:s?{...process.env,...s}:void 0,input:t?.input})}function Ft(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:a=3e4}=e;execFile(r,o,{shell:We(r),encoding:"utf8",windowsHide:true,timeout:a,maxBuffer:10*1024*1024,cwd:n,env:s?{...process.env,...s}:void 0},(g,S,c)=>t(g??null,S,c));}function Ke(e,t,r){let o=x.join(e,"board-live-cards-cli.js");if(i.existsSync(o))return {cmd:process.execPath,args:[o,t,...r]};let n=x.join(e,"board-live-cards-cli.ts"),a=[x.join(e,"..","..","..","node_modules","tsx","dist","cli.mjs"),x.join(e,"..","..","node_modules","tsx","dist","cli.mjs"),x.join(e,"..","..","..","node_modules",".bin","tsx"),x.join(e,"..","..","node_modules",".bin","tsx")].find(S=>i.existsSync(S));return i.existsSync(n)&&a?{cmd:process.execPath,args:[a,n,t,...r]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",n,t,...r]}}function Ve(e){let t=x.join(e,"board-live-cards-cli.mjs");if(i.existsSync(t))return t;let r=x.join(e,"..","..","..","dev","board-live-cards-cli.js");if(i.existsSync(r))return r;let o=x.join(e,"..","..","dev","board-live-cards-cli.js");if(i.existsSync(o))return o;let n=x.join(e,"board-live-cards-cli.js");if(i.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 $t(e){return process.platform==="win32"?`\\\\.\\pipe\\${e}`:x.join(Oe.tmpdir(),`${e}.sock`)}var ce=new Map;function Ue(e,t,r){if(t.length===0)return;let o=t.map(g=>JSON.stringify(g)).join(`
1
+ import {a as a$2}from'./chunk-Y4WK7HE4.js';export{a as createChatStorage,c as createInMemoryChatStorage}from'./chunk-Y4WK7HE4.js';import {a as a$3}from'./chunk-O5UYCGIN.js';export{a as createArtifactsStore,c as createCardFileMetadataStore,b as createFileArtifactsStore}from'./chunk-O5UYCGIN.js';import {a as a$4}from'./chunk-RKKSVOP2.js';export{a as createBoardWorkerStore,b as createQueueLaneRegistry}from'./chunk-RKKSVOP2.js';import {a as a$5}from'./chunk-YBYXCFAI.js';import {a}from'./chunk-VGDLSS2H.js';import'./chunk-7BTZCOT5.js';import'./chunk-7QQFDYBM.js';import {b as b$1}from'./chunk-NNSBBO5R.js';import {g,y}from'./chunk-ZWVT24YW.js';export{n as BOARD_GRAPH_KEY,u as EMPTY_CONFIG,m as SNAPSHOT_SCHEMA_VERSION_V1,z as createBoardLiveCardsNonCorePublic,y as createBoardLiveCardsPublic,l as createCardStore,e as createHttpBoardCallbackTransport,f as createInProcessBoardCallbackTransport,g as createLocalNodeBoardCallbackTransport}from'./chunk-ZWVT24YW.js';export{a as executionRefFromScriptPath,c as parseExecutionRef,b as serializeExecutionRef}from'./chunk-ANKA7HEJ.js';import {a as a$1,b}from'./chunk-44L64VQ2.js';export{b as parseRef,a as serializeRef}from'./chunk-44L64VQ2.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';export{a as createBoardLiveCardsMcp}from'./chunk-35N7ONTH.js';import {a as a$6}from'./chunk-JMDHDY6M.js';import {d}from'./chunk-3KC6LBOG.js';import'./chunk-MNEOJWPS.js';export{a as createCardStorePublic}from'./chunk-KBELAKIY.js';export{a as createArtifactsStorePublic}from'./chunk-X3LC4LII.js';import {h}from'./chunk-J4MHQ7JF.js';import'./chunk-FW4363Y4.js';import {spawn,spawnSync,execFile,execFileSync}from'child_process';import*as i from'fs';import*as Oe from'os';import*as x from'path';import*as qe from'net';import {fileURLToPath}from'url';import {randomUUID,createHash}from'crypto';import {createRequire}from'module';import {lockSync}from'proper-lockfile';function C(...e){return x.join(...e)}function Ne(e){return x.isAbsolute(e)}function ue(){return randomUUID()}function Qe(e){return createHash("sha256").update(e).digest("hex")}function Je(e){return x.dirname(fileURLToPath(e))}function Pt(e){if(typeof e=="object"&&e!==null){let{command:r,args:o=[],...n}=e,s=Le(r,o);return {...n,command:s.command,args:s.args}}let t=De(e);if(t.length===0)throw new Error(`Empty command spec: ${JSON.stringify(e)}`);return Le(t[0],t.slice(1))}function Le(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 De(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 We(e){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(e)}function He(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:a}=e;return execFileSync(r,o,{shell:We(r),timeout:a,encoding:t?.encoding??"utf-8",cwd:n,windowsHide:true,env:s?{...process.env,...s}:void 0,input:t?.input})}function Ft(e,t){let{command:r,args:o=[],cwd:n,env:s,timeoutMs:a=3e4}=e;execFile(r,o,{shell:We(r),encoding:"utf8",windowsHide:true,timeout:a,maxBuffer:10*1024*1024,cwd:n,env:s?{...process.env,...s}:void 0},(g,S,c)=>t(g??null,S,c));}function Ke(e,t,r){let o=x.join(e,"board-live-cards-cli.js");if(i.existsSync(o))return {cmd:process.execPath,args:[o,t,...r]};let n=x.join(e,"board-live-cards-cli.ts"),a=[x.join(e,"..","..","..","node_modules","tsx","dist","cli.mjs"),x.join(e,"..","..","node_modules","tsx","dist","cli.mjs"),x.join(e,"..","..","..","node_modules",".bin","tsx"),x.join(e,"..","..","node_modules",".bin","tsx")].find(S=>i.existsSync(S));return i.existsSync(n)&&a?{cmd:process.execPath,args:[a,n,t,...r]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",n,t,...r]}}function Ve(e){let t=x.join(e,"board-live-cards-cli.mjs");if(i.existsSync(t))return t;let r=x.join(e,"..","..","..","dev","board-live-cards-cli.js");if(i.existsSync(r))return r;let o=x.join(e,"..","..","dev","board-live-cards-cli.js");if(i.existsSync(o))return o;let n=x.join(e,"board-live-cards-cli.js");if(i.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 $t(e){return process.platform==="win32"?`\\\\.\\pipe\\${e}`:x.join(Oe.tmpdir(),`${e}.sock`)}var ce=new Map;function Ue(e,t,r){if(t.length===0)return;let o=t.map(g=>JSON.stringify(g)).join(`
2
2
  `)+`
3
3
  `,n=ce.get(e);if(n&&!n.socket.destroyed){n.ready?n.socket.write(o):n.queue.push(o);return}let s=$t(e),a=qe.createConnection(s);n={socket:a,ready:false,queue:[o]},ce.set(e,n),a.on("connect",()=>{n.ready=true;for(let g of n.queue)a.write(g);n.queue.length=0;}),a.on("error",g=>{r?.(`[named-pipe publish] ${s}: ${g instanceof Error?g.message:String(g)}`),ce.delete(e);}),a.on("close",()=>{ce.delete(e);});}function ze(){return {executeSync(e,t,r){return He({command:e,args:t,cwd:r?.cwd,timeoutMs:r?.timeout,env:r?.env},{encoding:r?.encoding,input:r?.input})},executeAsync(e,t,r){Ft({command:e,args:t},r);},resolveInvocation(e,t){let r=Pt({command:e,args:t});return {cmd:r.command,args:r.args??[]}},splitCommand:De}}function xe(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 we(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 Ge(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 Ye(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 a(){if(!(n||s)){s=true;try{let S=await e.lease({max:o,visibilityMs:r});for(let c of S)await Ge(e,c);}finally{s=false;}}}let g=setInterval(()=>{a();},t);return typeof g.unref=="function"&&g.unref(),a(),()=>{n=true,clearInterval(g);}}async function Mt(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 Ge(e,n);return o.length}async function de(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 Mt(e);if(o+=s,s<=0)return o}throw new Error(`drainQueueLaneToIdle exceeded ${r} passes for lane "${e.id}"`)}function _t(e){let r=(Array.isArray(e)?e:e.lanes).map(o=>Ye(o));return ()=>{for(let o of r)o();}}var Ot=createRequire(import.meta.url);function qt(e){return typeof e=="object"?e:b(e)}function Xe(e){let t=x.basename(String(e||"").trim());if(!t)throw new Error(`resolveYamlFlowCliPath: expected non-empty cli file name, got ${JSON.stringify(e)}`);let r=x.dirname(Ot.resolve("yaml-flow/package.json")),o=t.replace(/\.[^.]+$/,""),n=x.join(r,"cli","bundled",`${o}.mjs`);if(i.existsSync(n))return n;let s=x.join(r,"cli","node",t);if(i.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=qt(e);return t.kind==="yaml-flow-cli"?Xe(t.value):t.value}function Nt(e,t){let r=q(e);switch(r){case "source-cli-task-executor":{let o=x.join(t,"source-cli-task-executor.js");if(i.existsSync(o))return {command:process.execPath,args:[o]};let n=x.join(t,"source-cli-task-executor.ts"),s=x.join(t,"..","..","node_modules","tsx","dist","cli.mjs"),a=x.join(t,"..","..","node_modules",".bin","tsx"),g=i.existsSync(s)?s:a;return i.existsSync(n)&&i.existsSync(g)?{command:process.execPath,args:[g,n]}:{command:process.execPath,args:[o]}}case "board-live-cards":{let{cmd:o,args:n}=Ke(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 Qt(e,t){if(e.howToRun==="built-in"){let{command:o,args:n}=Nt(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 le(e,t){return Qt(e,t)}var ke=new Map;function Jt(e,t){let r=String(e||"").trim();if(!r)throw new Error("registerInProcessExecutionHandler: key is required");ke.set(r,t);}function Dt(e){let t=String(e||"").trim();t&&ke.delete(t);}function et(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 tt(e,t){return {...t,whatToRun:q(e.whatToRun),...e.extra?{extra:e.extra}:{}}}function be(e,t,r="invokeExecutionRef"){return a(e,t,r)}function rt(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 O(e){return {result:"failure",data:{error:e}}}function V(e,t,r){let o=r?.label??"invokeExecutionRefSync",n=r?.cliDir??r?.cwd??process.cwd(),s;try{s=be(e.argsMassaging,tt(e,t),o);}catch(h){let l=h instanceof Error?h.message:String(h);return O(l)}let a;try{a=le(e,n);}catch(h){let l=h instanceof Error?h.message:String(h);return O(`[${o}] ref resolution failed: ${l}`)}let g=[...a.baseArgs,...s.cmdArgs??[]],S=JSON.stringify(s.stdin??t),c=ze(),d;try{d=c.executeSync(a.command,g,{timeout:r?.timeoutMs??3e4,encoding:"utf-8",cwd:r?.cwd,input:S});}catch(h){let l=h,u=(l.stderr?String(l.stderr):"").trim(),p=typeof l.status=="number"?l.status:"unknown",m=u||l.message;return O(`[${o}] ref exited with status ${p}${m?`: ${m}`:""}`)}try{return rt(et(d))}catch{return {result:"success",data:{stdout:d.trim()}}}}async function Ze(e,t,r){let o=r?.label??"invokeExecutionRef",n;try{n=be(e.argsMassaging,tt(e,t),o);}catch(h){let l=h instanceof Error?h.message:String(h);return O(l)}let s=q(e.whatToRun),a=n.headers?{"Content-Type":"application/json",...n.headers}:{"Content-Type":"application/json"},g=n.url??s,S;if(e.howToRun==="http:get"){let h=n.body&&typeof n.body=="object"&&!Array.isArray(n.body)?n.body:t,l=new URLSearchParams(Object.entries(h).filter(([,u])=>u!=null).map(([u,p])=>[u,String(p)]));l.size>0&&(g=`${g}${g.includes("?")?"&":"?"}${l.toString()}`);}else S=JSON.stringify(n.body??t);let c={method:e.howToRun==="http:get"?"GET":"POST",headers:a,body:S},d=0;for(;;)try{let h=await fetch(g,c);if(!h.ok){let m=await h.text().catch(()=>"");return O(`[${o}] HTTP ${h.status}${m?`: ${m}`:""}`)}let l={};h.headers.forEach((m,R)=>{l[R]=m;});let u=new Uint8Array(await h.arrayBuffer());if(u.byteLength===0)return {result:"success",data:{},headers:l};let p=new TextDecoder().decode(u);try{return rt(et(p),{headers:l})}catch{return {result:"success",data:{stdout:p},headers:l}}}catch(h){let l=h?.cause,u=l&&typeof l=="object"&&"code"in l?String(l.code||""):"";if((u==="ECONNRESET"||u==="UND_ERR_SOCKET")&&d===0){d+=1;continue}let m=h instanceof Error?h.message:String(h),R=l instanceof Error?`${l.name}: ${l.message}${u?` [${u}]`:""}`:l?String(l):"",w=n.url??s??"",f=`${m}${R?` (cause: ${R})`:""}${w?` url=${w}`:""}`;return O(`[${o}] ${f}`)}}async function Wt(e,t,r){let o=r?.label??"invokeExecutionRef",n=q(e.whatToRun).trim();if(!n)return O(`[${o}] in-process-loop requires a non-empty handler key`);let s=ke.get(n);if(!s)return O(`[${o}] no in-process handler registered for: ${n}`);try{return await s(e,t,r)}catch(a){let g=a instanceof Error?a.message:String(a);return O(`[${o}] ${g}`)}}var Ht={"local-node":async(e,t,r)=>V(e,t,r),"local-python":async(e,t,r)=>V(e,t,r),"local-process":async(e,t,r)=>V(e,t,r),"built-in":async(e,t,r)=>V(e,t,r),"http:post":Ze,"http:get":Ze,"in-process-loop":Wt},Kt={"local-node":V,"local-python":V,"local-process":V,"built-in":V};async function Z(e,t,r){let o=r?.transports?.[e.howToRun]??Ht[e.howToRun];return o?o(e,t,r):O(`[${r?.label??"invokeExecutionRef"}] unsupported howToRun: ${e.howToRun}`)}function ve(e,t,r){let o=r?.syncTransports?.[e.howToRun]??Kt[e.howToRun];return o?o(e,t,r):O(`[${r?.label??"invokeExecutionRefSync"}] unsupported sync howToRun: ${e.howToRun}`)}function Vt(e){return {invoke(t,r){return Z(t,r,e)},invokeSync(t,r){return ve(t,r,e)}}}function Ut(e,t,r){return ve(e,t,r)}function Ae(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 d=await h(s,{subcommand:o,...n?.input!==void 0?{input:n.input}:{}});return typeof d=="string"?d:d&&typeof d=="object"&&!Array.isArray(d)&&typeof d.stdout=="string"?String(d.stdout):JSON.stringify(d??{})}if(s.howToRun==="http:get"){let d=await Z(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(d.result!=="success"){let h=typeof d.data?.error=="string"?d.data.error:d.error;throw new Error(h||`executor request failed: ${d.result}`)}return typeof d.data?.stdout=="string"?d.data.stdout:JSON.stringify(d.data??{})}if(!e.resolveCliDir)throw new Error(`createNonCoreExecutorDispatcher: ref.howToRun="${s.howToRun}" requires opts.resolveCliDir`);let{command:a,baseArgs:g}=le(s,e.resolveCliDir()),S=s.extra?["--extra",Buffer.from(JSON.stringify(s.extra)).toString("base64")]:[],c=[...g,o,...S];return await new Promise((d,h)=>{let l=spawn(a,c,{cwd:process.cwd(),stdio:"pipe",windowsHide:true,shell:process.platform==="win32"&&/\.(cmd|bat)$/i.test(a)}),u=[],p=[],m=false,R=null,w=y=>{m||(m=true,R&&clearTimeout(R),h(y));},f=y=>{m||(m=true,R&&clearTimeout(R),d(y));};l.stdout.on("data",y=>{u.push(Buffer.from(y));}),l.stderr.on("data",y=>{p.push(Buffer.from(y));}),l.on("error",y=>{let v=y;v.stdout=Buffer.concat(u).toString("utf-8"),v.stderr=Buffer.concat(p).toString("utf-8"),w(v);}),l.on("close",y=>{let v=Buffer.concat(u).toString("utf-8"),k=Buffer.concat(p).toString("utf-8");if(y===0){f(v);return}let b=new Error(k.trim()||`executor exited with status ${y}`);b.stdout=v,b.stderr=k,w(b);}),n?.timeout&&n.timeout>0&&(R=setTimeout(()=>{l.kill();let y=new Error(`executor timed out after ${n.timeout}ms`);y.stdout=Buffer.concat(u).toString("utf-8"),y.stderr=Buffer.concat(p).toString("utf-8"),w(y);},n.timeout)),n?.input!==void 0?l.stdin.end(n.input):l.stdin.end();})}}}function B(e,t){if(process.platform!=="win32"){i.renameSync(e,t);return}let r=[10,20,40,80,160];for(let o=0;o<=r.length;o++)try{i.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 U(e){function t(n){return x.join(e,...n.split("/"))}function r(n){return x.relative(e,n).replace(/\\/g,"/")}function o(n,s){if(i.existsSync(n))for(let a of i.readdirSync(n,{withFileTypes:true})){let g=x.join(n,a.name);if(a.isDirectory()){o(g,s);continue}a.isFile()&&s.push(r(g));}}return {read(n){let s=t(n);if(!i.existsSync(s))return null;try{return i.readFileSync(s,"utf-8")}catch{return null}},write(n,s){let a=t(n),g=`${a}.${process.pid}.${randomUUID()}.tmp`;i.mkdirSync(x.dirname(a),{recursive:true}),i.writeFileSync(g,s,"utf-8"),B(g,a);},exists(n){return i.existsSync(t(n))},remove(n){let s=t(n);try{i.existsSync(s)&&i.unlinkSync(s);}catch{}},readBytes(n){let s=t(n);if(!i.existsSync(s))return null;try{return new Uint8Array(i.readFileSync(s))}catch{return null}},writeBytes(n,s){let a=t(n),g=`${a}.${process.pid}.${randomUUID()}.tmp`;i.mkdirSync(x.dirname(a),{recursive:true}),i.writeFileSync(g,Buffer.from(s)),B(g,a);},listKeys(n){let s=[];o(e,s);let a=s.sort();return n?a.filter(g=>g.startsWith(n)):a},stat(n){let s=t(n);if(!i.existsSync(s))return null;try{let a=i.statSync(s);return {key:n,size:Number(a.size||0),updatedAt:new Date(a.mtimeMs).toISOString()}}catch{return null}},keyRef(n){return {kind:"fs-path",value:t(n)}},renameKey(n,s){let a=t(n);if(!i.existsSync(a))return false;let g=t(s);return i.mkdirSync(x.dirname(g),{recursive:true}),B(a,g),true}}}function Ie(){return {read(e){if(!i.existsSync(e))return null;try{return i.readFileSync(e,"utf-8")}catch{return null}},write(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;i.mkdirSync(x.dirname(e),{recursive:true}),i.writeFileSync(r,t,"utf-8"),B(r,e);},exists(e){return i.existsSync(e)},remove(e){try{i.existsSync(e)&&i.unlinkSync(e);}catch{}},readBytes(e){if(!i.existsSync(e))return null;try{return new Uint8Array(i.readFileSync(e))}catch{return null}},writeBytes(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;i.mkdirSync(x.dirname(e),{recursive:true}),i.writeFileSync(r,Buffer.from(t)),B(r,e);},stat(e){if(!i.existsSync(e))return null;try{let t=i.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 i.existsSync(e)?(i.mkdirSync(x.dirname(t),{recursive:true}),B(e,t),true):false}}}function D(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;i.mkdirSync(x.dirname(e),{recursive:true}),i.writeFileSync(r,JSON.stringify(t,null,2),"utf-8"),B(r,e);}function N(e){if(!i.existsSync(e))return null;try{return JSON.parse(i.readFileSync(e,"utf-8"))}catch{return null}}function X(e){return i.existsSync(e)?i.readdirSync(e).filter(t=>t.endsWith(".json")).sort().map(t=>x.join(e,t)):[]}function ee(e){return {id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}}function Zt(e){return {...ee(e),leaseToken:String(e.leaseToken||""),leaseExpiresAt:String(e.leaseExpiresAt||"")}}function Xt(e){return {...ee(e),reason:e.reason}}function je(e){let t=x.join(e,"active"),r=x.join(e,"leased"),o=x.join(e,"done"),n=x.join(e,"dead"),s=x.join(e,"staged");for(let l of [t,r,o,n,s])i.mkdirSync(l,{recursive:true});function a(l){let u=String(l.enqueuedAt||new Date().toISOString()).replace(/[:.]/g,"-");return x.join(t,`${u}-${l.id}.json`)}function g(l){return x.join(r,`${l}.json`)}function S(l){return x.join(o,`${l}.json`)}function c(l){return x.join(n,`${l}.json`)}function d(l){return x.join(s,`${l}.json`)}function h(){let l=Date.now();for(let u of X(r)){let p=N(u);if(!p?.leaseExpiresAt)continue;let m=Date.parse(p.leaseExpiresAt);if(Number.isNaN(m)||m>l)continue;let R={id:p.id,body:p.body,enqueuedAt:p.enqueuedAt,attempt:p.attempt};D(a(R),R);try{i.unlinkSync(u);}catch{}}}return {enqueue(l){let u={id:randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0};return D(a(u),u),ee(u)},enqueueMany(l){return l.map(u=>this.enqueue(u))},enqueueIfAbsent(l,u){h();for(let m of [t,r,s])for(let R of X(m))if(N(R)?.dedupKey===u)return null;let p={id:randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0,dedupKey:u};return D(a(p),p),ee(p)},lease(l){h();let u=Math.max(1,Math.floor(l?.max??1)),p=Math.max(1,Math.floor(l?.visibilityMs??6e4)),m=[];for(let R of X(t)){if(m.length>=u)break;let w=N(R);if(!w)continue;let f=g(w.id);try{B(R,f);}catch{continue}let y={...w,attempt:(Number(w.attempt)||0)+1,leaseToken:randomUUID(),leaseExpiresAt:new Date(Date.now()+p).toISOString()};D(f,y),m.push(Zt(y));}return m},ack(l,u){let p=g(l),m=N(p);if(!m||m.leaseToken!==u)return false;try{B(p,S(l));}catch{return false}return true},nack(l,u,p){let m=g(l),R=N(m);if(!R||R.leaseToken!==u)return false;let w={id:R.id,body:R.body,enqueuedAt:R.enqueuedAt,attempt:R.attempt};p?.dead?(w.reason=p.reason,D(c(l),w)):D(a(w),w);try{i.unlinkSync(m);}catch{}return true},peekActive(l){return h(),X(t).map(u=>N(u)).filter(u=>!!u).map(ee)},peekDeadLetter(l){return X(n).map(u=>N(u)).filter(u=>!!u).map(Xt)},stage(l,u){let p=u?.dedupKey;if(p){h();for(let R of [t,r,s])for(let w of X(R))if(N(w)?.dedupKey===p)return null}let m={id:randomUUID(),body:l,enqueuedAt:new Date().toISOString(),attempt:0,...p?{dedupKey:p}:{}};return D(d(m.id),m),ee(m)},commitStaged(l){let u=d(l),p=N(u);if(!p)return false;let m={...p,attempt:0,enqueuedAt:new Date().toISOString()};D(a(m),m);try{i.unlinkSync(u);}catch{}return true},discardStaged(l,u){let p=d(l),m=N(p);if(!m)return false;let R={id:m.id,body:m.body,enqueuedAt:m.enqueuedAt,attempt:m.attempt,reason:u};D(c(l),R);try{i.unlinkSync(p);}catch{}return true},peekStaged(l){return X(s).map(u=>N(u)).filter(u=>!!u).map(ee)}}}var Ee="__scratch-marker",Te="__scratch-config.json",er=1440*60*1e3,tr=720*60*1e3,rr=500;function nt(e,t){if(!e)return t;let r=e.replace(/[^A-Za-z0-9._-]/g,"_");return r.length>0?r:t}function oe(e){i.mkdirSync(e,{recursive:true});let t=x.join(e,Ee),r=x.join(e,Te),o=!i.existsSync(t);if(o)try{i.writeFileSync(t,`scratch-store
4
4
  ${new Date().toISOString()}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkPN5D32NP_cjs=require('./chunk-PN5D32NP.cjs');require('./chunk-ZK3E7L4Y.cjs'),require('./chunk-7FGPOGRV.cjs'),require('./chunk-LPXVVMQT.cjs'),require('./chunk-H22NK6KH.cjs'),require('./chunk-NM6O35RY.cjs'),require('./chunk-272IYUKT.cjs');var chunkETW3BXHD_cjs=require('./chunk-ETW3BXHD.cjs');require('./chunk-BQUQTOPB.cjs'),require('./chunk-NBJTYAYN.cjs'),require('./chunk-GPCMBPLK.cjs'),require('./chunk-36QUKFL7.cjs'),require('./chunk-37HDEW26.cjs'),require('./chunk-ZENTBLLA.cjs'),require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-7QZ267XP.cjs'),require('./chunk-IXZG74EW.cjs'),require('./chunk-HWYMZK3N.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-YMEIPKLW.cjs'),require('./chunk-UB54HZA4.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createMultiBoardServerRuntime",{enumerable:true,get:function(){return chunkPN5D32NP_cjs.b}});Object.defineProperty(exports,"createSingleBoardServerRuntime",{enumerable:true,get:function(){return chunkPN5D32NP_cjs.a}});Object.defineProperty(exports,"createHostedBoardQueueLaneRegistry",{enumerable:true,get:function(){return chunkETW3BXHD_cjs.a}});//# sourceMappingURL=board-live-cards-server-runtime.cjs.map
1
+ 'use strict';var chunkQG6ERLZQ_cjs=require('./chunk-QG6ERLZQ.cjs');require('./chunk-OJ2CAQ4C.cjs'),require('./chunk-7FGPOGRV.cjs'),require('./chunk-LPXVVMQT.cjs'),require('./chunk-H22NK6KH.cjs'),require('./chunk-NM6O35RY.cjs'),require('./chunk-272IYUKT.cjs');var chunkETW3BXHD_cjs=require('./chunk-ETW3BXHD.cjs');require('./chunk-BQUQTOPB.cjs'),require('./chunk-NBJTYAYN.cjs'),require('./chunk-GPCMBPLK.cjs'),require('./chunk-36QUKFL7.cjs'),require('./chunk-37HDEW26.cjs'),require('./chunk-ZENTBLLA.cjs'),require('./chunk-7JVHYHT2.cjs'),require('./chunk-VQCIOKJV.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-7QZ267XP.cjs'),require('./chunk-IXZG74EW.cjs'),require('./chunk-HWYMZK3N.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-YMEIPKLW.cjs'),require('./chunk-UB54HZA4.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createMultiBoardServerRuntime",{enumerable:true,get:function(){return chunkQG6ERLZQ_cjs.b}});Object.defineProperty(exports,"createSingleBoardServerRuntime",{enumerable:true,get:function(){return chunkQG6ERLZQ_cjs.a}});Object.defineProperty(exports,"createHostedBoardQueueLaneRegistry",{enumerable:true,get:function(){return chunkETW3BXHD_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-O6II7S4M.js';import'./chunk-NU5NO5NM.js';import'./chunk-NTICU4OK.js';import'./chunk-O7NOHKVR.js';import'./chunk-ABAVFLDP.js';import'./chunk-XYN5D3GL.js';import'./chunk-ZJ5M5COT.js';export{a as createHostedBoardQueueLaneRegistry}from'./chunk-6OPXQPSC.js';import'./chunk-FOFGEABN.js';import'./chunk-O5UYCGIN.js';import'./chunk-RKKSVOP2.js';import'./chunk-7QQFDYBM.js';import'./chunk-NNSBBO5R.js';import'./chunk-ZWVT24YW.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-35N7ONTH.js';import'./chunk-JMDHDY6M.js';import'./chunk-3KC6LBOG.js';import'./chunk-MNEOJWPS.js';import'./chunk-KBELAKIY.js';import'./chunk-Q3OTUDIE.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=board-live-cards-server-runtime.js.map
1
+ export{b as createMultiBoardServerRuntime,a as createSingleBoardServerRuntime}from'./chunk-EPCJYP4N.js';import'./chunk-3MMTBEAO.js';import'./chunk-NTICU4OK.js';import'./chunk-O7NOHKVR.js';import'./chunk-ABAVFLDP.js';import'./chunk-XYN5D3GL.js';import'./chunk-ZJ5M5COT.js';export{a as createHostedBoardQueueLaneRegistry}from'./chunk-6OPXQPSC.js';import'./chunk-FOFGEABN.js';import'./chunk-O5UYCGIN.js';import'./chunk-RKKSVOP2.js';import'./chunk-7QQFDYBM.js';import'./chunk-NNSBBO5R.js';import'./chunk-ZWVT24YW.js';import'./chunk-ANKA7HEJ.js';import'./chunk-44L64VQ2.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-35N7ONTH.js';import'./chunk-JMDHDY6M.js';import'./chunk-3KC6LBOG.js';import'./chunk-MNEOJWPS.js';import'./chunk-KBELAKIY.js';import'./chunk-Q3OTUDIE.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=board-live-cards-server-runtime.js.map
2
2
  //# sourceMappingURL=board-live-cards-server-runtime.js.map
@@ -0,0 +1,2 @@
1
+ import {a,c,d,e,b,f}from'./chunk-O7NOHKVR.js';import {a as a$1}from'./chunk-FOFGEABN.js';import {b as b$1}from'./chunk-44L64VQ2.js';import {a as a$2}from'./chunk-35N7ONTH.js';function W(){return {status:null,computedValues:{},dataObjects:{},cards:{}}}function V(s){if(!s||typeof s!="object")return false;let e=s.summary;return !e||typeof e!="object"?false:Number(e.card_count||0)>0}function H(s,e){if(!e||typeof e!="object")return;let n=e;if(n.kind==="notification-batch"&&Array.isArray(n.notifications)){for(let c of n.notifications)H(s,c);return}n.kind==="status"&&V(n.status)&&(s.status=n.status),n.kind==="computed_values"&&n.cardId&&(s.computedValues[n.cardId]=n.values),n.kind==="data_object"&&n.key&&(s.dataObjects[n.key]=n.payload),n.kind==="card_refreshed"&&n.cardId&&(s.cards[n.cardId]=n.card),n.kind==="card_removed"&&n.cardId&&(delete s.cards[n.cardId],delete s.computedValues[n.cardId]);}function j(s,e){if(s?.status==="success")return Object.prototype.hasOwnProperty.call(s,"data")?s.data:void 0;throw s?.status==="fail"||s?.status==="error"?Object.assign(new Error(s.error||`${e} failed`),{statusCode:400}):Object.assign(new Error(`${e} returned an unexpected response`),{statusCode:500})}async function B(s,e){return j(await s,e)}function q(s){let e=a(s,"key");if(!e)throw Object.assign(new Error("MCP tool requires key"),{statusCode:400});let n=e.split(".");if(!(n.length>=2&&n[0]==="chat"&&n.every(h=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(h))))throw Object.assign(new Error("MCP tool only supports card private keys under chat.*"),{statusCode:400});return e}function D(s,e){let n=s.__private;for(let c of e.split(".")){if(!n||typeof n!="object"||Array.isArray(n)||!Object.prototype.hasOwnProperty.call(n,c))return {exists:false,value:null};n=n[c];}return {exists:true,value:n}}function Q(s){let{boardId:e,bootstrapBoard:n,sseHub:c,onChannelSubscribed:h,onChannelUnsubscribed:v,getMcpFacade:I,getMcpCardStoreFacade:r}=s;function C(d){let l=a(d,"board_id");if(!l)throw Object.assign(new Error("MCP tool requires board_id"),{statusCode:400});if(l!==e)throw Object.assign(new Error(`Unknown board_id: ${l}`),{statusCode:400})}function w(d){let l=a(d,"client_id");if(!l)throw Object.assign(new Error("MCP tool requires client_id"),{statusCode:400});return l}function u(d){C(d);let l=w(d),a$1=a(d,"channel_name"),t=a(d,"card_id")||void 0;if(!a$1)throw Object.assign(new Error("MCP tool requires channel_name"),{statusCode:400});return {clientId:l,channelName:a$1,...t?{cardId:t}:{}}}function g(d){C(d);let l=a(d,"card_id");if(!l)throw Object.assign(new Error("MCP tool requires card_id"),{statusCode:400});return {cardId:l}}async function b(d){await n();let{cardId:l}=g(d),a=w(d);if(!await c.subscribeChat(a,l))throw Object.assign(new Error(`SSE client not connected: ${a}`),{statusCode:404});return {status:"success",data:{boardId:e,cardId:l,clientId:a,subscribed:true}}}async function y(d){await n();let{cardId:l}=g(d),a=w(d);if(!c.unsubscribeChat(a,l))throw Object.assign(new Error(`SSE client not connected: ${a}`),{statusCode:404});return {status:"success",data:{boardId:e,cardId:l,clientId:a,subscribed:false}}}async function k(d,l){await n();let{clientId:a,channelName:t,cardId:o}=u(d);if(!c.has(a))throw Object.assign(new Error(`SSE client not connected: ${a}`),{statusCode:404});return l?h?.(a,t,o?{cardId:o}:{}):v?.(a,t,o?{cardId:o}:{}),{status:"success",data:{boardId:e,clientId:a,channelName:t,subscribed:l,...o?{cardId:o}:{}}}}async function f(d,l){let{cardId:a}=g(d);return await I().setChatProcessing({cardId:a,active:l}),{status:"success",data:{boardId:e,cardId:a,active:l}}}async function i(d){let{cardId:l}=g(d),a=await I().getChatProcessing({cardId:l});return {status:"success",data:{boardId:e,cardId:l,active:a.active}}}async function m(d){let{cardId:l}=g(d),a=q(d);if(!Object.prototype.hasOwnProperty.call(d,"value"))throw Object.assign(new Error("MCP tool requires value"),{statusCode:400});if(a.split(".").includes("visible_controlplane_only")){let t=await B(r().get({params:{id:l}}),"cardStore.get"),o=Array.isArray(t.cards)&&t.cards.length>0&&typeof t.cards[0]=="object"&&!Array.isArray(t.cards[0])?t.cards[0]:null,R=o?D(o,"visible_controlplane_only").value:void 0;if(d.value!==R)throw Object.assign(new Error("MCP tool cannot change the reserved private flag visible_controlplane_only"),{statusCode:403});return {status:"success",data:{boardId:e,cardId:l,key:a}}}return j(await r().patch({params:{id:l,path:`__private.${a}`},body:{value:d.value}}),"cardStore.patch"),{status:"success",data:{boardId:e,cardId:l,key:a}}}async function _(d){let{cardId:l}=g(d),a=q(d),t=await B(r().get({params:{id:l}}),"cardStore.get"),o=Array.isArray(t.cards)&&t.cards.length>0&&t.cards[0]&&typeof t.cards[0]=="object"&&!Array.isArray(t.cards[0])?t.cards[0]:null;if(!o)throw Object.assign(new Error(`Card "${l}" not found`),{statusCode:404});let R=D(o,a);return {status:"success",data:{boardId:e,cardId:l,key:a,exists:R.exists,value:R.value}}}return {requireCardArgs:g,subscribeChat:b,unsubscribeChat:y,watchChannel:k,setChatProcessing:f,getChatProcessing:i,setCardMeta:m,getCardMeta:_}}function ee(s){let{boardId:e,boardContexts:n,readCardDefinitions:c,readChatRecords:h,getChatProcessing:v}=s;async function I(){let u=(await Promise.all(n.map(async f=>{try{let i=f.boardAdapter.kvStorageForRef(f.outputsStoreRef),m=await Promise.resolve(i.read("status"));if(m!=null)return m}catch{}return f.notification.status}))).filter(Boolean);if(u.length===0)return null;if(u.length===1)return u[0];let g=[],b=["completed","eligible","pending","blocked","unresolved","failed","in_progress","orphan_cards"],y={};for(let f of b)y[f]=0;for(let f of u){let i=f,m=Array.isArray(i.cards)?i.cards:[];g.push(...m);for(let _ of b)y[_]+=Number(i?.summary?.[_]||0);}let k=u[0];return {...k,cards:g,summary:{...k.summary||{},card_count:g.length,...y}}}async function r(){let u={},g=async b=>{try{let y=await b.boardOps.getAllOutputsComputedValues({});if(y.status==="success"&&y.data&&typeof y.data=="object"){for(let[k,f]of Object.entries(y.data)){let i=b.notification.cards[k];u[k]={schema_version:"v1",card_id:k,card_data:i?.card_data??{},computed_values:f??{}};}return}}catch{}for(let[y,k]of Object.entries(b.notification.computedValues)){let f=b.notification.cards[y];u[y]={schema_version:"v1",card_id:y,card_data:f?.card_data??{},computed_values:k??{}};}};for(let b of n)await g(b);return u}async function C(){let u={};for(let g of n){try{let b=await g.boardOps.getAllOutputsDataObjects({});if(b.status==="success"&&b.data&&typeof b.data=="object"){Object.assign(u,b.data);continue}}catch{}Object.assign(u,g.notification.dataObjects||{});}return u}async function w(){let u=await c(),g=await r(),b=await C(),y={};for(let f of u){if(!f?.id)continue;let i=f.id,m=g[i]||{},_={...m.card_data&&typeof m.card_data=="object"?m.card_data:f.card_data&&typeof f.card_data=="object"?f.card_data:{}};y[i]={schema_version:m.schema_version||"v1",card_id:m.card_id||i,card_data:_,computed_values:m.computed_values&&typeof m.computed_values=="object"?m.computed_values:{}};}let k={};for(let f of u){if(!f?.id)continue;let i=f.id;try{let m=await h(i),_=await v(i);(m.length>0||_)&&(k[i]={messages:m.map(d=>({role:String(d.role||"system"),text:String(d.text||""),files:Array.isArray(d.files)?d.files:[]})),receiving:!1,processing:_});}catch{}}return {boardId:e,cardDefinitions:u,statusSnapshot:await I(),dataObjectsByToken:b,cardRuntimeById:y,cardChatsByCardId:k}}return {readStatusSnapshot:I,readCardRuntimeArtifacts:r,readDataObjectsByToken:C,buildPublishedRuntimePayload:w}}function z(s){let e=String(s||"").trim();if(!e)return "upload.bin";let n=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return (n>=0?e.slice(n+1):e)||"upload.bin"}function re(s){let{safeCardId:e,artifactsStores:n,cardFileMetadataStore:c,readCardFromStore:h,updateCardLocalOnly:v,writeChatRecord:I}=s;async function r(u){let g=[];try{let b=await h(u);if(!b)return g;let y=c().read(b.card_data&&typeof b.card_data=="object"?b.card_data:null);for(let k of y)g.push(String(k.stored_name??""));}catch{}return g}async function C(u,g,b,y){let k=e(u),f=n(u),i=z(g),m=await r(u),d=`${String(m.length+1).padStart(3,"0")}-${i}`.slice(-36);if(!f.files)throw Object.assign(new Error(`artifactsStoreRef is not configured for card uploads: ${u}`),{statusCode:500});return await f.files.putBytes(`${k}/${d}`,new Uint8Array(y),b||"application/octet-stream"),{name:i,stored_name:d,size:y.length,mime_type:b||"application/octet-stream",uploaded_at:new Date().toISOString()}}async function w(u,g,b,y,k){if(!y.length)throw Object.assign(new Error("Empty upload body"),{statusCode:400});let f=k?.inChat===true,i=await C(u,g,b,y),m=null;if(await v(u,_=>{let d=new Date().toISOString(),l=_.card_data&&typeof _.card_data=="object"?_.card_data:{};_.card_data=l;let a=c().normalizeIncoming([{name:i.name,stored_name:i.stored_name,size:i.size,mime_type:i.mime_type,uploaded_at:i.uploaded_at||d,chat:f}],d);return m=c().merge(l,a).findIndex(o=>o.stored_name===i.stored_name),_}),f&&k?.suppressChatRecordWrite!==true){let _=typeof m=="number"&&m>=0?` #${m}`:"";await I(u,"system",`file uploaded: ${i.name} as ${i.stored_name}${_}`,[],k?.turnId??"");}return {ok:true,file:{...i,...typeof m=="number"&&m>=0?{file_idx:m}:{},chat:f},...typeof m=="number"&&m>=0?{file_idx:m}:{}}}return {uploadCardFile:w,readCardStoredFileNames:r}}function se(s){return {"discover.source-kinds":()=>s.discoverSourceKinds(),"inspect.board-runtime-status":()=>s.inspectBoardRuntimeStatus(),"inspect.card-definition-and-runtime":e=>s.inspectCardDefinitionAndRuntime({cardId:a(e,"card_id")}),"inspect.chat-messages-on-cards":e=>{let n=b(e,"tail_turns"),c=b(e,"tail"),h=a(e,"turn_id"),v=e.all_turns===true,I=a(e,"tail_turns_before_id");return s.inspectChatMessagesOnCards({cardId:a(e,"card_id"),...n!==void 0?{lastUserTurns:n}:{},...c!==void 0?{tail:c}:{},...h?{turnId:h}:{},...v?{allTurns:true}:{},...I?{tailTurnsBeforeId:I}:{}})},"inspect.file-contents":e=>s.inspectFileContents({cardId:a(e,"card_id"),fileIdx:Number(b(e,"file_idx"))}),"preflight.validate-candidate-card-definition":e=>s.preflightValidateCandidateCardDefinition({candidateCardContent:d(e,"candidate_card_content","candidate_card_content")}),"preflight.materialize-candidate-card":e=>s.preflightMaterializeCandidateCard({candidateCardContent:d(e,"candidate_card_content","candidate_card_content"),mockRequires:d(e,"mock_requires","mock_requires"),mockFetchedSources:d(e,"mock_fetched_sources","mock_fetched_sources")}),"preflight.probe-single-source-in-candidate-card":e$1=>s.preflightProbeSingleSourceInCandidateCard({candidateCardContent:d(e$1,"candidate_card_content","candidate_card_content"),mockProjections:c(e$1,"mock_projections"),sourceIdx:e(e$1,"source_idx","source_idx")}),"preflight.run-single-source-in-candidate-card":e$1=>s.preflightRunSingleSourceInCandidateCard({candidateCardContent:d(e$1,"candidate_card_content","candidate_card_content"),mockProjections:c(e$1,"mock_projections"),sourceIdx:e(e$1,"source_idx","source_idx")}),"preflight.run-single-source-in-live-card":e$1=>s.preflightRunSingleSourceInLiveCard({cardId:a(e$1,"card_id"),sourceIdx:e(e$1,"source_idx","source_idx"),mockRequires:d(e$1,"mock_requires","mock_requires")}),"preflight.run-one-cycle-with-candidate-card":e=>s.preflightRunOneCycleWithCandidateCard({candidateCardContent:d(e,"candidate_card_content","candidate_card_content"),mockRequires:c(e,"mock_requires")}),"manage.read-card":e=>s.manageReadCard({cardId:a(e,"card_id")}),"stage-ai-response-and-any-attachments":e=>{let n=a(e,"turn_id");if(!n)throw Object.assign(new Error("stage-ai-response-and-any-attachments requires a non-empty turn_id"),{statusCode:400});return s.manageAddChatEntryAndAnyAttachments({cardId:a(e,"card_id"),role:"assistant",...typeof e.text=="string"?{text:e.text}:{},...n?{turn:n}:{},...Array.isArray(e.files)?{files:e.files}:{}})},"stage-ai-failure-message":e=>{let n=a(e,"turn_id"),c=a(e,"failure");if(!n)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty turn_id"),{statusCode:400});if(!c)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty failure"),{statusCode:400});return s.manageAddChatEntryAndAnyAttachments({cardId:a(e,"card_id"),role:"system",text:c,turn:n})},"manage.upsert-card":e=>s.manageUpsertCard({cardId:a(e,"card_id"),candidateCardContent:c(e,"candidate_card_content")}),"manage.remove-card":e=>s.manageRemoveCard({cardId:a(e,"card_id")})}}function oe(s){return {"webhook.process-accumulated":()=>s.webhookProcessAccumulated(),"webhook.source-fetch-done":e=>s.webhookSourceFetchDone({token:a(e,"token"),ref:a(e,"ref")}),"webhook.source-fetch-failed":e=>s.webhookSourceFetchFailed({token:a(e,"token"),reason:a(e,"reason")})}}function de(s){let{boardId:e,uploadCardFile:n,getMcpFacade:c$1,controlplane:h}=s;function v(r,C){let w=a(r,"board_id");if(!w)throw Object.assign(new Error(`${C} requires board_id`),{statusCode:400});if(w!==e)throw Object.assign(new Error(`Unknown board_id: ${w}`),{statusCode:400})}function I(r,C){let{cardId:w}=h.requireCardArgs(r),u=a(r,"turn_id");return v(r,C),c$1().manageAddChatAttachment({cardId:w,role:a(r,"role")||"user",...u?{turn:u}:{},files:[{file_name:a(r,"file_name"),content_type:a(r,"content_type")||"application/octet-stream",...typeof r.text=="string"?{text:r.text}:{},...typeof r.base64=="string"?{base64:r.base64}:{},...Array.isArray(r.bytes)?{bytes:r.bytes}:{}}]})}return {"list-runtime-cards":r=>(v(r,"list-runtime-cards"),c$1().listRuntimeCards()),"sse.subscribe-chat":r=>h.subscribeChat(r),"sse.unsubscribe-chat":r=>h.unsubscribeChat(r),"sse.watch-channel":r=>h.watchChannel(r,true),"sse.unwatch-channel":r=>h.watchChannel(r,false),"getstate.is-chat-processing":r=>h.getChatProcessing(r),"setstate.chat-processing-started":r=>h.setChatProcessing(r,true),"setstate.chat-processing-done":r=>h.setChatProcessing(r,false),"getstate.card-private":r=>h.getCardMeta(r),"setstate.card-private":r=>h.setCardMeta(r),"manage.upload-card-file":r=>{let C=a(r,"card_id"),w=a(r,"file_name"),u=a(r,"content_type")||"application/octet-stream",g=f(r);if(v(r,"manage.upload-card-file"),!C)throw Object.assign(new Error("manage.upload-card-file requires card_id"),{statusCode:400});if(!w)throw Object.assign(new Error("manage.upload-card-file requires file_name"),{statusCode:400});if(!g)throw Object.assign(new Error("manage.upload-card-file requires args.bytes, args.text, or args.base64"),{statusCode:400});return n(C,w,u,g,{inChat:false})},"manage.add-chat-attachment":r=>I(r,"manage.add-chat-attachment"),"manage.add-chat-attachement":r=>I(r,"manage.add-chat-attachement"),"manage.add-chat-entry-and-any-attachments":r=>{let{cardId:C}=h.requireCardArgs(r),w=a(r,"role")||"user",u=a(r,"turn_id");return v(r,"manage.add-chat-entry-and-any-attachments"),c$1().manageAddChatEntryAndAnyAttachments({cardId:C,role:w,...typeof r.text=="string"?{text:r.text}:{},...u?{turn:u}:{},...Array.isArray(r.files)?{files:r.files}:{}})},"manage.patch-card":r=>{let{cardId:C}=h.requireCardArgs(r);return v(r,"manage.patch-card"),c$1().managePatchCard({cardId:C,patch:c(r,"patch")})},"manage.upsert-card":r=>{let{cardId:C}=h.requireCardArgs(r);return v(r,"manage.upsert-card"),c$1().manageUpsertCard({cardId:C,candidateCardContent:c(r,"candidate_card_content")})},"manage.remove-card":r=>{let{cardId:C}=h.requireCardArgs(r);return v(r,"manage.remove-card"),c$1().manageRemoveCard({cardId:C})},"manage.admin-read-card":async r=>{let{cardId:C}=h.requireCardArgs(r);return {status:"success",data:{cards:await c$1().adminReadCard({cardId:C})}}},"manage.admin-upsert-card":r=>{let C=a(r,"board_id"),w=a(r,"card_id");if(!C)throw Object.assign(new Error("manage.admin-upsert-card requires board_id"),{statusCode:400});if(!w)throw Object.assign(new Error("manage.admin-upsert-card requires card_id"),{statusCode:400});if(C!==e)throw Object.assign(new Error(`Unknown board_id: ${C}`),{statusCode:400});return c$1().adminUpsertCard({cardId:w,candidateCardContent:c(r,"candidate_card_content")})}}}function pe(s){let{boardContexts:e,cardOwnerIndex:n,cardContextForCard:c,readStatusSnapshot:h,readDataObjectsByToken:v,readCardRuntimeArtifacts:I,readCardFromStore:r,readCardDefinitions:C,processAccumulatedLaneInternal:w,reportSourceFetched:u,reportSourceFetchFailure:g,uploadCardFile:b,chatStorePublic:y,serverUrl:k,apiBasePath:f}=s;function i(){return e[0]??null}function m(){return {async status(){let a=await h();return a==null?{status:"fail",error:"Board status is unavailable"}:{status:"success",data:a}},async getOutputsDataObject(a){let t=a?.params?.key;return t?{status:"success",data:(await v())[t]}:{status:"fail",error:"getOutputsDataObject requires params.key"}},async getOutputsComputedValues(a){let t=a?.params?.key;return t?{status:"success",data:(await I())[t]?.computed_values}:{status:"fail",error:"getOutputsComputedValues requires params.key"}},async getOutputsFetchedSources(a){let t=a?.params?.key;if(!t)return {status:"fail",error:"getOutputsFetchedSources requires params.key"};let o=c(t)??i();return o?o.boardOps.getOutputsFetchedSources({params:{key:t}}):{status:"fail",error:"Board context is unavailable"}},async removeCard(a){let t=a?.params?.id;if(!t)return {status:"fail",error:"removeCard requires params.id"};let o=c(t)??i();return o?o.boardOps.removeCard({params:{id:t}}):{status:"fail",error:"Board context is unavailable"}},async cardRefreshedNotify(a){let t=a?.params?.cardId;if(!t)return {status:"fail",error:"cardRefreshedNotify requires params.cardId"};let o=c(t)??i();return o?o.boardOps.cardRefreshedNotify({params:{cardId:t}}):{status:"fail",error:"Board context is unavailable"}},async upsertCard(a){let t=a?.params?.cardId;if(!t)return {status:"fail",error:"upsertCard requires params.cardId"};let o=c(t)??i();if(!o)return {status:"fail",error:"Board context is unavailable"};let R=await o.boardOps.upsertCard({params:{cardId:t,restart:a.params.restart===true}});if(R.status!=="success")return R;if(a$1(o.boardAdapter)){let P=await w(true);if(P.status!=="success")return P}return R}}}function _(){let a=()=>{let t=i();if(!t?.nonCore)throw new Error("Board non-core adapter is not configured for MCP preflight/discovery tools");return t.nonCore};return {describeTaskExecutorCapabilities(t){return a().describeTaskExecutorCapabilities(t)},validateCardPreflight(t){return a().validateCardPreflight(t)},evalCardCompute(t){return a().evalCardCompute(t)},probeSourcePreflight(t){return a().probeSourcePreflight(t)},runSourcePreflight(t){return a().runSourcePreflight(t)},simulateCardCycle(t){return a().simulateCardCycle(t)}}}function d(){return {async get(a){let t=typeof a.params?.id=="string"?a.params.id:void 0;if(t){let o=await r(t);return o?{status:"success",data:{cards:[o]}}:{status:"success",data:{cards:[]}}}return {status:"success",data:{cards:await C()}}},async set(a){let t=a.body;if(t==null)return {status:"fail",error:"set requires a body (card object or array of cards)"};let o=Array.isArray(t)?t:[t];for(let R of o){let P=R,A=typeof P.id=="string"?P.id:"";if(!A)return {status:"fail",error:"each card must have a string `id` field"};let E=n.get(A)??0,N=e[E]??i();if(!N)return {status:"fail",error:"Board context is unavailable"};let T=await N.cardStoreOps.set({body:P});if(T.status!=="success")return T;n.set(A,E);}return {status:"success",data:{count:o.length}}},async del(a){let t=[a.params?.id,...a.body?.ids??[]].filter(o=>typeof o=="string"&&!!o);if(t.length===0)return {status:"fail",error:"del requires body.ids (string[]) or params.id"};for(let o of t){let R=c(o)??i();if(!R)return {status:"fail",error:"Board context is unavailable"};let P=await R.cardStoreOps.del({params:{id:o}});if(P.status!=="success")return P;n.delete(o);}return {status:"success",data:{count:t.length}}},async patch(a){let t=typeof a.params?.id=="string"?a.params.id:void 0,o=typeof a.params?.path=="string"?a.params.path:void 0;if(!t||!o)return {status:"fail",error:"patch requires params.id and params.path"};let R=c(t)??i();return R?R.cardStoreOps.patch(a):{status:"fail",error:"Board context is unavailable"}},async appendFiles(a){let t=typeof a.params?.id=="string"?a.params.id:void 0;if(!t)return {status:"fail",error:"appendFiles requires params.id"};let o=c(t)??i();return o?o.cardStoreOps.appendFiles(a):{status:"fail",error:"Board context is unavailable"}}}}function l(){return a$2({board:m(),nonCore:_(),cardStore:d(),chatStore:y,processAccumulated:()=>w(true),sourceFetchDone:({token:a,ref:t})=>u(a,t),sourceFetchFailed:({token:a,reason:t})=>g(a,t),uploadCardFile({cardId:a,fileName:t,contentType:o,bytes:R,suppressChatRecordWrite:P}){return b(a,t,o,R,{inChat:true,...P===true?{suppressChatRecordWrite:true}:{}})},buildFileDownloadUrl({cardId:a,fileIdx:t,storedName:o}){let R=`${k||""}${f}/cards/${encodeURIComponent(a)}/files/${t}`;return o?`${R}?sn=${encodeURIComponent(o)}`:R},readFetchedSourceJsonByRef({cardId:a,ref:t}){let o=c(a)??i();if(!o||a$1(o.boardAdapter))return null;let A=o.boardAdapter.resolveBlob(b$1(t)).trim();return A?JSON.parse(A):null}})}return {mcpBoardFacade:m,mcpNonCoreFacade:_,mcpCardStoreFacade:d,createMcpFacade:l}}export{W as a,V as b,H as c,j as d,B as e,q as f,D as g,Q as h,ee as i,re as j,se as k,oe as l,de as m,pe as n};//# sourceMappingURL=chunk-3MMTBEAO.js.map
2
+ //# sourceMappingURL=chunk-3MMTBEAO.js.map
@@ -1,3 +1,3 @@
1
- import {n,h,i,j,a as a$7,b as b$2,k,l as l$1,c as c$3,m}from'./chunk-NU5NO5NM.js';import {a as a$2}from'./chunk-NTICU4OK.js';import {a as a$8,c as c$4}from'./chunk-O7NOHKVR.js';import {a,b}from'./chunk-ABAVFLDP.js';import {a as a$3}from'./chunk-XYN5D3GL.js';import {a as a$9,b as b$4}from'./chunk-ZJ5M5COT.js';import {a as a$4,d as d$1,b as b$3,c as c$2}from'./chunk-FOFGEABN.js';import {a as a$6,c as c$1}from'./chunk-O5UYCGIN.js';import {a as a$b}from'./chunk-RKKSVOP2.js';import {g,d,c,b as b$1}from'./chunk-7QQFDYBM.js';import {a as a$a}from'./chunk-NNSBBO5R.js';import {y,z,l}from'./chunk-ZWVT24YW.js';import {a as a$5}from'./chunk-KBELAKIY.js';import {a as a$1}from'./chunk-Q3OTUDIE.js';function ne(A){let{apiBasePath:F,json:b,readJsonBody:z,initBoardAndSetup:I,bootstrapBoard:x,buildPublishedRuntimePayload:V,createMcpControlplaneToolRegistry:U,retriggerCard:G,applyCardAction:N,resolveChatHandlerTarget:K,sendCardFileDownloadResponse:W}=A;async function rt(J,B,L){let u=J.method||"GET",i=L,C=i.pathname;try{if(u==="POST"&&C===`${F}/mcp-actions`){await x();let R=Date.now(),w=new Date(R).toISOString(),y=await z(J),d=typeof y.tool=="string"?y.tool.trim():"",M=y.args&&typeof y.args=="object"&&!Array.isArray(y.args)?y.args:{};if(!d)return b(B,400,{error:"tool is required"}),!0;let P=a$8(M,"card_id");if(!P)return b(B,400,{error:"MCP action requires card_id"}),!0;if(d==="retrigger-card"||d==="retrigger"){await G(P);let O=Date.now();return b(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:d,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:200}}),!0}let p=c$4(M,"payload");if(d==="chat-send"&&!await K(P)){let O=Date.now();return b(B,409,{error:`chat handler is not configured for card: ${P}`,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:409}),!0}if(d==="chat-send"){let O=typeof p["turn-id"]=="string"?p["turn-id"]:typeof p.turnId=="string"?p.turnId:typeof p.turn=="string"?p.turn:"";if(!O||!String(O).trim()){let Q=Date.now();return b(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${P}`,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(Q).toISOString(),responseSentAtMs:Q,responseStatus:400}),!0}}await N(P,d,p);let H=Date.now();return b(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:d,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(H).toISOString(),responseSentAtMs:H,responseStatus:200}}),!0}if(u==="POST"&&C===`${F}/mcp-controlplane`){await x();let R=await z(J),w=typeof R.tool=="string"?R.tool.trim():"",y=R.args&&typeof R.args=="object"&&!Array.isArray(R.args)?R.args:{};if(!w)return b(B,400,{error:"tool is required"}),!0;try{let d=await a$9(w,y,U());if(d&&typeof d=="object"&&!Array.isArray(d)){let M=d;if(M.status==="fail")return b(B,400,{error:b$4(d,"Request failed")}),!0;if(M.status==="error")return b(B,500,{error:b$4(d,"Internal error")}),!0}b(B,200,d);}catch(d){let M=typeof d?.statusCode=="number"?Number(d.statusCode):500,P=d instanceof Error?d.message:String(d);b(B,M,{error:P});}return !0}let k=C.match(new RegExp(`^${c$2(F)}/cards/([^/]+)/retrigger$`));if(u==="POST"&&k){await x();let R=decodeURIComponent(k[1]);return await G(R),b(B,200,{ok:!0}),!0}let v=C.match(new RegExp(`^${c$2(F)}/cards/([^/]+)/actions$`));if(u==="POST"&&v){await x();let R=decodeURIComponent(v[1]),w=Date.now(),y=new Date(w).toISOString(),d=await z(J),M=d?.actionType;if(M==="chat-send"&&!await K(R)){let p=Date.now();return b(B,409,{error:`chat handler is not configured for card: ${R}`,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(p).toISOString(),responseSentAtMs:p,responseStatus:409}),!0}if(M==="chat-send"){let p=d?.payload??{},H=typeof p["turn-id"]=="string"?p["turn-id"]:typeof p.turnId=="string"?p.turnId:typeof p.turn=="string"?p.turn:"";if(!H||!String(H).trim()){let O=Date.now();return b(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${R}`,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:400}),!0}}await N(R,M,d?.payload);let P=Date.now();return b(B,200,{ok:!0,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(P).toISOString(),responseSentAtMs:P,responseStatus:200}),!0}let E=C.match(new RegExp(`^${c$2(F)}/cards/([^/]+)/files/(\\d+)$`));if(u==="GET"&&E){let R=decodeURIComponent(E[1]),w=parseInt(E[2],10),y=i.searchParams.get("sn");return await W(B,R,w,y),!0}return !1}catch(k){let v=k?.statusCode||500;return b(B,v,{error:String(k?.message||k)}),true}}return {handleRuntimeApi:rt}}var oe={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},ae="chat-handler-flow-queue",st="__probe__echo__probe__";function gr(A){let F=String(A.apiBasePath||"/api/board").replace(/\/$/,""),b$5={...oe,...A.corsHeaders||{}},z$1=A.queueLaneTuning??{},I=A.boardId||"",x=A.logger||{info:console.log,warn:console.warn,error:console.error},V=A.invocationAdapter,U=A.chatFlowRunner||null,G=A.notificationTransport||null,N=A.serverUrl||null,K=A.executionExtra||{},W=A.onSseClientConnected,rt=A.onSseClientDisconnected,J=A.onChannelSubscribed,B=A.onChannelUnsubscribed,L=a({readChatRecords:t=>bt(t),getChatProcessing:t=>Rt(t),readChatAfter:async(t,e)=>{let r=await ie(t,e);return {records:r.records,cursor:r.cursor}},onSseClientDisconnected:rt});function u(t){function e(o){if(Array.isArray(o))return o;if(o&&typeof o=="object"){let c=o;return Array.isArray(c.files)?c.files:[o]}return null}function r(o){return {async get(c){return o.get(c)},async set(c){return o.set(c)},async del(c){return o.del(c)},async patch(c){return o.patch(c)},async appendFiles(c){return o.appendFiles(c)}}}function a(o){function c(h){return {status:"success",data:h}}function m(h){return {status:"fail",error:h}}function l(h){return {status:"error",error:h instanceof Error?h.message:String(h)}}return {async get(h){try{let g=h.params?.id;if(g){let T=await o.readCard(g);return T?c({cards:[T]}):m(`card "${g}" not found`)}return c({cards:await o.readAllCards()})}catch(g){return l(g)}},async set(h){try{let g=h.body;if(g==null)return m("set requires a body (card object or array of cards)");let T=Array.isArray(g)?g:[g];for(let j of T){if(typeof j.id!="string")return m("each card must have a string `id` field");await o.writeCard(j.id,j);}return c({count:T.length})}catch(g){return l(g)}},async del(h){try{let g=h.body?.ids??[],T=h.params?.id,j=T?[...g,T]:g;if(j.length===0)return m("del requires body.ids (string[]) or params.id");for(let Y of j)await o.removeCard(Y);return c({count:j.length})}catch(g){return l(g)}},async patch(h){try{let g=h.params?.id,T=h.params?.path;if(!g)return m("patch requires params.id");if(!T)return m("patch requires params.path");let j=h.body,Y=j&&Object.prototype.hasOwnProperty.call(j,"value")?j.value:h.body;return await o.patchCard(g,T,Y),c({count:1})}catch(g){return l(g)}},async appendFiles(h){try{let g=h.params?.id;if(!g)return m("appendFiles requires params.id");let T=await o.readCard(g);if(!T)return m(`card "${g}" not found`);let j=e(h.body);if(!j||j.length===0)return m("appendFiles requires a file metadata object, array, or body.files array");let Y=T.card_data&&typeof T.card_data=="object"&&!Array.isArray(T.card_data)?T.card_data:{},Pt=Array.isArray(Y.files)?Y.files:[],_e=[...Pt,...j];return await o.patchCard(g,"card_data.files",_e),c({files_added:j.map((De,$e)=>({idx:Pt.length+$e,entry:De}))})}catch(g){return l(g)}}}}let n=a$4(t.boardAdapter)?g(t.baseRef,t.boardAdapter,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow}):y(t.baseRef,t.boardAdapter,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow}),s=t.nonCoreAdapter??(!a$4(t.boardAdapter)&&R(t.boardAdapter)?t.boardAdapter:null),f=t.nonCore??(s?z(t.baseRef,s,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),S=t.boardAdapter.chatStorageForRef(t.chatStoreRef),q,_=a$4(t.boardAdapter)?(()=>{let o=d(c(b$1(t.boardAdapter.kvStorageForRef(t.cardStoreRef)),t.boardAdapter.hashFn),x.warn),c$1=a(o);return q={get(m){return c$1.get(m)},set(m){return c$1.set(m)}},c$1})():(()=>{let o=t.boardAdapter.kvStorageForRef(t.cardStoreRef),m=a$5(l({readIndex:()=>o.read("_index"),writeIndex:l=>o.write("_index",l),readCard:l=>o.read(l),writeCard:(l,h)=>(o.write(l,h),l),removeCard:l=>{o.delete(l);},cardExists:l=>o.read(l)!==null,defaultCardKey:l=>l},x.warn));return q=m,r(m)})(),D;if(a$4(t.boardAdapter)){let o=t.boardAdapter.blobStorageForRef(t.artifactsStoreRef);D={async putBytes(c,m){if(o.writeBytes){await o.writeBytes(c,m);return}let l=JSON.stringify({__kind:"bytes-array",data:[...m]});await o.write(c,l);},async getBytes(c){if(o.readBytes){let l=await o.readBytes(c);if(l!==null)return l}let m=await o.read(c);if(m===null)return null;try{let l=JSON.parse(m);if(l&&l.__kind==="bytes-array"&&Array.isArray(l.data))return new Uint8Array(l.data)}catch{}return new TextEncoder().encode(m)},async listKeys(c){return await o.listKeys(c)}};}else {let o=t.boardAdapter.blobStorageForRef(t.artifactsStoreRef),c=a$6(o);D={putBytes(m,l,h){c.putBytes(m,l,h);},getBytes(m){return c.getBytes(m)},listKeys(m){return c.list(m).map(l=>l.key)}};}let Me={async init(o){return n.init(o)},async status(o){return n.status(o)},async getConfig(o){return n.getConfig(o)},async getAllOutputsDataObjects(o){return n.getAllOutputsDataObjects(o)},async getAllOutputsComputedValues(o){return n.getAllOutputsComputedValues(o)},async getOutputsFetchedSources(o){return n.getOutputsFetchedSources(o)},async upsertCard(o){return n.upsertCard(o)},async removeCard(o){return n.removeCard(o)},async cardRefreshedNotify(o){return n.cardRefreshedNotify(o)},async sourceDataFetched(o){return n.sourceDataFetched(o)},async sourceDataFetchFailure(o){return n.sourceDataFetchFailure(o)}};return {label:t.label,board:n,nonCore:f,publicCardStore:q,boardOps:Me,cardStoreOps:_,get filesArtifacts(){return D},get chatStorage(){return S},boardAdapter:t.boardAdapter,boardRuntimeStoreRef:t.boardRuntimeStoreRef,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,artifactsStoreRef:t.artifactsStoreRef,fetchedSourcesStoreRef:t.fetchedSourcesStoreRef,queueStoreRef:t.queueStoreRef,chatStoreRef:t.chatStoreRef,scratchStoreRef:t.scratchStoreRef,notifyRef:t.notifyRef,taskExecutorRef:t.taskExecutorRef,chatHandlerRef:t.chatHandlerRef,chatHandlerFlow:t.chatHandlerFlow,inferenceAdapterRef:t.inferenceAdapterRef,notification:a$7(),notificationTeardown:null,initialized:false,cardsBootstrapped:false}}let i$1=A.boards.map(u),C=new Map;function k$1(t){return C.get(t)??0}function v(t){return t.queueStoreRef}function E(t,e){if(a$4(t.boardAdapter)){let a=t.boardAdapter.queueStorageForRef(v(t),e);return a$a(a)}let r=t.boardAdapter.queueStorageForRef(v(t),e);return a$b(r)}function R(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function w(t){let e=i$1[k$1(t)];return {files:e?e.filesArtifacts:null}}function y$1(){return c$1()}function d$2(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}async function M(t){if(!t||t.notificationTeardown||!G||!t.notifyRef)return;let e=await G.subscribe(t.notifyRef,r=>{c$3(t.notification,r);let a=r.kind==="notification-batch"?r.notifications:[r];L.broadcastNotificationBatch(a);});t.notificationTeardown=e;}async function P(t){if(!t||t.initialized)return;let e={boardRuntimeStoreRef:t.boardRuntimeStoreRef,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,fetchedSourcesStoreRef:t.fetchedSourcesStoreRef,artifactsStoreRef:t.artifactsStoreRef,queueStoreRef:t.queueStoreRef,chatStoreRef:t.chatStoreRef,scratchStoreRef:t.scratchStoreRef},r={};t.taskExecutorRef&&(r["task-executor-ref"]=t.taskExecutorRef),t.chatHandlerFlow!==void 0&&(r["chat-handler-flow"]=t.chatHandlerFlow);let a=await t.boardOps.init({params:e,body:r});if(a.status!=="success")throw Object.assign(new Error(a.error||`init failed for ${t.label}`),{statusCode:500});if(await M(t),!t.chatHandlerFlow&&t.chatHandlerRef&&V.describe)try{let n=await V.describe(t.chatHandlerRef);n&&n.kind!=="chat-handler"?x.warn(`[init] chat-handler describe returned kind="${n.kind}", expected "chat-handler" for ${t.label}`):n&&x.info(`[init] chat-handler validated: ${n.name} (protocol ${n.protocolVersion}) for ${t.label}`);}catch(n){x.warn(`[init] chat-handler describe failed for ${t.label}: ${n?.message||String(n)}`);}t.initialized=true;}async function p(t){if(!t.boardAdapter.publishBoardChangeNotifications)return;let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&b$2(r.data)&&e.push({kind:"status",status:r.data});let a=await t.boardOps.getAllOutputsDataObjects({});if(a.status==="success"&&a.data!=null)for(let[s,f]of Object.entries(a.data))s&&e.push({kind:"data_object",key:s,payload:f});let n=await t.boardOps.getAllOutputsComputedValues({});if(n.status==="success"&&n.data!=null)for(let[s,f]of Object.entries(n.data))s&&e.push({kind:"computed_values",cardId:s,values:f});e.length>0&&t.boardAdapter.publishBoardChangeNotifications(e);}async function H(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),a=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let n of a)typeof n.id=="string"&&(C.set(n.id,e),await t.boardOps.upsertCard({params:{cardId:n.id}}));t.cardsBootstrapped=true;}async function O(){for(let t of i$1)await P(t);}async function Q(){await O();for(let t=0;t<i$1.length;t++)await p(i$1[t]),await H(i$1[t],t),await p(i$1[t]);}async function pt(t=false){t||await O();for(let e of i$1){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function Z(t){return i$1[k$1(t)]??null}async function nt(t){let e=Z(t);if(!e)return null;let r=await e.cardStoreOps.get({params:{id:t}});if(r.status!=="success")return null;let a=Array.isArray(r.data?.cards)?r.data.cards:[];return a.length>0?a[0]:null}async function mt(){let t=async r=>{if(!r)return [];let a=await r.cardStoreOps.get({});return a.status!=="success"||!Array.isArray(a.data?.cards)?[]:a.data.cards},e=[];for(let r of i$1)e.push(...await t(r));return e}function gt(){return i$1[0]??null}function se(t){return Z(t)??gt()}function $(t){let e=se(t);if(!e)throw Object.assign(new Error(`Board context is unavailable for chat operations: ${t}`),{statusCode:404});return e.chatStorage}async function ie(t,e){return await $(t).readAfter(t,e)}async function Rt(t){return await $(t).isProcessing(t)}async function at(t,e){await $(t).setProcessing(t,e),await L.broadcastCardChats(t,true);}let ce=a$1({append(t,e,r,a,n){return Promise.resolve($(t).append(t,e,r,a,n)).then(async s=>(await L.broadcastCardChats(t,true),s))},readAll(t){return $(t).readAll(t)},readAfter(t,e){return $(t).readAfter(t,e)},clear(t){return $(t).clear(t)},setProcessing(t,e){return Promise.resolve($(t).setProcessing(t,e)).then(async()=>{await L.broadcastCardChats(t,true);})},isProcessing(t){return $(t).isProcessing(t)},getConfig(t){return $(t).getConfig(t)},setConfig(t,e){return $(t).setConfig(t,e)}}),yt=n({boardContexts:i$1,cardOwnerIndex:C,cardContextForCard:t=>Z(t),readStatusSnapshot:()=>pe(),readDataObjectsByToken:()=>ge(),readCardRuntimeArtifacts:()=>me(),readCardFromStore:t=>nt(t),readCardDefinitions:()=>mt(),processAccumulatedLaneInternal:t=>pt(t),reportSourceFetched:(t,e)=>Bt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>kt(t,{reason:e}),uploadCardFile:(t,e,r,a,n)=>Ct(t,e,r,a,n),chatStorePublic:ce,serverUrl:N,apiBasePath:F}),ue=yt.mcpCardStoreFacade,it=yt.createMcpFacade,de=h({boardId:I,bootstrapBoard:()=>Q(),sseHub:L,onChannelSubscribed:J,onChannelUnsubscribed:B,getMcpFacade:()=>it(),getMcpCardStoreFacade:()=>ue()});function le(t){return k(t)}function fe(){return l$1(it())}function wt(){return m({boardId:I,uploadCardFile:Ct,getMcpFacade:()=>it(),controlplane:de})}let ct=i({boardId:I,boardContexts:i$1,readCardDefinitions:()=>mt(),readChatRecords:t=>bt(t),getChatProcessing:t=>Rt(t)}),pe=ct.readStatusSnapshot,me=ct.readCardRuntimeArtifacts,ge=ct.readDataObjectsByToken,lt=ct.buildPublishedRuntimePayload;async function ht(t,e,r){let a=r?.syncBoard!==false,n=r?.restartOnlyIfChanged===true,s=Z(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let f=await nt(t);if(!f)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let S=n?JSON.stringify(f):null,q=e(f)||f;if(n&&JSON.stringify(q)===S)return;let _=await s.cardStoreOps.set({body:q});if(_.status!=="success")throw Object.assign(new Error(_.error||`Failed to persist card: ${t}`),{statusCode:500});if(a){let D=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(D.status!=="success")throw Object.assign(new Error(D.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Re(t,e){await ht(t,e,{syncBoard:true});}async function ye(t,e){await ht(t,e,{syncBoard:false});}async function we(t){let e=Z(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await nt(t))throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let a=await e.boardOps.upsertCard({params:{cardId:t,restart:true}});if(a.status!=="success")throw Object.assign(new Error(a.error||`Failed to retrigger card: ${t}`),{statusCode:500})}async function he(t){await $(t).clear(t);try{await at(t,!1);}catch{}}async function be(t,e,r,a,n=""){let s=typeof r=="string"?r.trim():"",f=await $(t).append(t,e||"system",s,a,n);return await L.broadcastCardChats(t,true),f}async function bt(t){return await $(t).readAll(t)}let Ct=j({safeCardId:t=>d$2(t),artifactsStores:t=>w(t),cardFileMetadataStore:()=>y$1(),readCardFromStore:t=>nt(t),updateCardLocalOnly:(t,e)=>ye(t,e),writeChatRecord:(t,e,r,a,n)=>be(t,e,r,a,n)}).uploadCardFile;async function St(t){let e=Z(t);if(!e)return null;let r=await e.boardOps.getConfig({params:{key:"chat-handler-flow"}}),n=(r.status==="success"?r.data?.value:null)??e.chatHandlerFlow??null,s=e.chatHandlerRef;return n==null&&(!s||typeof s!="object")?null:{ctx:e,handlerFlow:n,handlerRef:s}}function Ce(t){let e=typeof t=="string"?t.trim():"";if(e.length<st.length*2||!e.startsWith(st)||!e.endsWith(st))return null;let r=e.slice(st.length,e.length-st.length).trim(),a=/^([A-Za-z0-9_-]+)__(.*)$/s.exec(r);return a?{assistant:a[1].trim().toLowerCase(),text:a[2].trim()}:{assistant:"echo",text:r}}async function Se(t,e,r=false,a="",n=""){try{let s=await St(t);if(!s){try{await at(t,!1);}catch{}return}let{ctx:f,handlerFlow:S,handlerRef:q}=s;if(!r)try{await at(t,!0);}catch{}let _={boardId:I,cardId:String(t),lastChatEntryId:e,...a?{turnId:a}:{},...typeof n=="string"&&n.trim()?{probe:n.trim()}:{},...K,...N?{serverUrl:N}:{}},D=S!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:ae}}:q;a$4(f.boardAdapter)?await E(f,"chat-agent").enqueueRequest({boardId:I,ref:D,args:S!=null?{..._,__chatHandlerFlow:S}:_}):E(f,"chat-agent").enqueueRequest({boardId:I,ref:D,args:S!=null?{..._,__chatHandlerFlow:S}:_}),await Promise.resolve(f.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await at(t,!1);}catch{}x.warn(`[chat-handler] queue failed for card "${t}": ${s instanceof Error?s.message:String(s)}`);}}async function Ae(t,e,r){if(e.howToRun==="built-in"&&b$3(e)===ae){let a=U,n=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,a?a.run(n,s,{boardId:I,cardId:String(s.cardId||""),label:t.label,logger:x,serverUrl:N,executionExtra:K}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return V.invoke(e,r)}async function Be(t,e=false){e||await O();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",a=r?Z(r):gt();if(!a)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let n=await Ae(a,t.ref,t.args);if(!n.dispatched){if(r)try{await at(r,!1);}catch{}throw new Error(n.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function ke(t,e,r){if(e==="chat-send"){let n=r&&typeof r["turn-id"]=="string"?r["turn-id"]:r&&typeof r.turnId=="string"?r.turnId:r&&typeof r.turn=="string"?r.turn:"";if(r&&"files"in r&&r.files!==void 0&&r.files!==null)throw Object.assign(new Error('chat-send does not accept a "files" parameter; upload attachments via manage.add-chat-attachment first'),{statusCode:400});let s=wt(),f=Ce(r?.text),S=f?f.text:r?.text,q=await a$9("manage.add-chat-entry-and-any-attachments",{board_id:I,card_id:t,role:"user",text:S,turn_id:n,files:[]},s);if(q?.status!=="success")throw new Error(b$4(q,`chat-send append failed for card ${t}`));let _=q?.data?.id;if(typeof _!="string"||!_)throw new Error(`chat-send did not return an append id for card ${t}`);let D=await a$9("setstate.chat-processing-started",{board_id:I,card_id:t},s);if(D?.status!=="success")throw new Error(b$4(D,`chat-send processing update failed for card ${t}`));Se(t,_,true,n,f?.assistant||"");return}await Re(t,n=>{let s=new Date().toISOString(),f=n.card_data&&typeof n.card_data=="object"?n.card_data:{};if(n.card_data=f,e==="file-upload"){let S=y$1().normalizeIncoming(r?.files,s);return S.length>0&&y$1().merge(f,S),n}if(e==="action"){let S=r&&typeof r.buttonId=="string"?r.buttonId:"";if(!S)return n;f.lastAction={buttonId:S,at:s},f.lastActionText=`${S} @ ${s}`;}return n});}function ut(t,e,r){let a=JSON.stringify(r),n=typeof Buffer<"u"?Buffer.byteLength(a):new TextEncoder().encode(a).length;t.writeHead(e,{...b$5,"Content-Type":"application/json; charset=utf-8","Content-Length":n}),t.end(a);}async function At(t,e,r){let a=await nt(t);if(!a)throw Object.assign(new Error("Card not found"),{statusCode:404});let n=y$1().resolve(a.card_data,e,r);if(!n.ok&&n.reason==="stale_reference")throw Object.assign(new Error("File reference is stale. Refresh and try again."),{statusCode:409});if(!n.ok)throw Object.assign(new Error("File not found"),{statusCode:404});let s=n.file,f=d$2(t),S=w(t),q=String(s.stored_name||""),_=`${f}/${q}`,D=S.files?await S.files.getBytes(_):null;if(!D)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:D}}async function Pe(t,e,r,a){let{fileRecord:n,bytes:s}=await At(e,r,a),f=String(n.name||n.stored_name||"download.bin"),S=String(n.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":S,"Content-Disposition":`attachment; filename="${f}"`,"Content-Length":s.length}),t.end(s);}function Fe(t){let e=String(t||"").toLowerCase();return e.startsWith("text/")||e.includes("json")||e.includes("xml")||e.includes("javascript")||e.includes("typescript")||e.includes("yaml")||e.includes("csv")}function Oe(t,e,r){let a=t.split(/\r?\n/);return (e==="head"?a.slice(0,r):a.slice(-r)).join(`
2
- `)}async function dt(t){let e=[];for await(let a of t)e.push(a);let r=typeof Buffer<"u"?Buffer.concat(e).toString("utf-8").trim():new TextDecoder().decode(d$1(e)).trim();return r?JSON.parse(r):{}}async function Bt(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let a=i$1[0];return a?a.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function kt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",a=i$1[0];return a?a.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let ve=b({sseHub:L,corsHeaders:b$5,json:ut,buildPublishedRuntimePayload:()=>lt(),onSseClientConnected:W,onChannelSubscribed:J,onChannelUnsubscribed:B,apiBasePath:F,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),bootstrapBoard:()=>Q(),boardContexts:i$1,publishPersistedStateSnapshot:t=>p(t),upsertCardsFromSource:(t,e)=>H(t,e)}).handleWatchersRoutes,Te=a$2({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),bootstrapBoard:()=>Q(),createMcpFacade:()=>it(),createMcpToolRegistry:t=>le(t),resolveCardFileDownloadPayload:(t,e,r)=>At(t,e,r),isLikelyTextMimeType:t=>Fe(t),sliceTextByLines:(t,e,r)=>Oe(t,e,r)}).handleAgentfaceApi,xe=a$3({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),createMcpWebhookToolRegistry:()=>fe()}).handleWebhooksApi,je=ne({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),bootstrapBoard:()=>Q(),buildPublishedRuntimePayload:()=>lt(),createMcpControlplaneToolRegistry:()=>wt(),retriggerCard:t=>we(t),applyCardAction:(t,e,r)=>ke(t,e,r),resolveChatHandlerTarget:t=>St(t),sendCardFileDownloadResponse:(t,e,r,a)=>Pe(t,e,r,a)}).handleRuntimeApi;async function Ee(t,e,r){return !!(await Te(t,e,r)||await xe(t,e,r)||await ve(t,e,r)||await je(t,e,r))}return {get apiBasePath(){return F},get corsHeaders(){return b$5},get queueLaneTuning(){return z$1},handleRuntimeApi:Ee,buildPublishedRuntimePayload:lt,__drainProcessAccumulatedLane:pt,handleChatAgentRequest:Be,clearChatRecords:he,reportSourceFetched(t,e){return Bt(t,{ref:e})},reportSourceFetchFailure(t,e){return kt(t,{reason:e})},get cardStore(){return i$1[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function Rr(A){let F=String(A.apiBasePath||"/api/boards").replace(/\/$/,""),b={...oe,...A.corsHeaders||{}},z=A.serverMetaStore,I=A.boardRuntimeFactory,x=new Map,V="boards-config.json";function U(){let u=z.getText(V);if(!u)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(u)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function G(u){z.putText(V,JSON.stringify(u,null,2));}function N(u){let i=String(u||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return i.length>0&&i.length<=64?i:null}function K(u){if(x.has(u))return x.get(u);let C=U().boards.find(v=>v.id===u)||{},k=I(u,C);return x.set(u,k),k}function W(u,i,C){let k=JSON.stringify(C),v=typeof Buffer<"u"?Buffer.byteLength(k):new TextEncoder().encode(k).length;u.writeHead(i,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":v}),u.end(k);}async function rt(u,i,C){let k=u.method||"GET",v=C.pathname;if(k==="GET"&&v===F)return W(i,200,{ok:true,boards:U().boards}),true;if(k==="POST"&&v===F){let E=[];for await(let p of u)E.push(p);let R=typeof Buffer<"u"?Buffer.concat(E).toString("utf-8").trim():new TextDecoder().decode(d$1(E)).trim(),w={};try{w=R?JSON.parse(R):{};}catch{w={};}let y=N(w.id);if(!y)return W(i,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let d=U();if(d.boards.some(p=>p.id===y))return W(i,409,{error:`Board "${y}" is already registered`}),true;let M=typeof w.label=="string"&&w.label.trim()?w.label.trim():y,P={id:y,label:M};for(let[p,H]of Object.entries(w))p==="id"||p==="label"||H!=null&&(P[p]=H);return d.boards.push(P),G(d),W(i,200,{ok:true,board:P}),true}return false}async function J(u,i,C){let v=C.pathname.match(new RegExp(`^${c$2(F)}/([^/]+)(/|$)`));if(!v)return false;let E=N(decodeURIComponent(v[1]));return E?U().boards.some(y=>y.id===E)?!!await K(E).handleRuntimeApi(u,i,C):(W(i,404,{error:`Board "${E}" not registered. POST ${F} with {id} to register it first.`}),true):(W(i,400,{error:"Invalid board id"}),true)}async function B(u,i,C){return !!(await rt(u,i,C)||await J(u,i,C))}function L(u){if(!U().boards.some(C=>C.id===u))throw Object.assign(new Error(`Board "${u}" not registered`),{statusCode:404});return {service:K(u)}}return {get apiBasePath(){return F},get corsHeaders(){return b},handleApi:B,requireBoardService:L}}export{gr as a,Rr as b};//# sourceMappingURL=chunk-O6II7S4M.js.map
3
- //# sourceMappingURL=chunk-O6II7S4M.js.map
1
+ import {n,h,i,j,a as a$7,b as b$2,k,l as l$1,c as c$3,m}from'./chunk-3MMTBEAO.js';import {a as a$2}from'./chunk-NTICU4OK.js';import {a as a$8,c as c$4}from'./chunk-O7NOHKVR.js';import {a,b}from'./chunk-ABAVFLDP.js';import {a as a$3}from'./chunk-XYN5D3GL.js';import {a as a$9,b as b$4}from'./chunk-ZJ5M5COT.js';import {a as a$4,d as d$1,b as b$3,c as c$2}from'./chunk-FOFGEABN.js';import {a as a$6,c as c$1}from'./chunk-O5UYCGIN.js';import {a as a$b}from'./chunk-RKKSVOP2.js';import {g,d,c,b as b$1}from'./chunk-7QQFDYBM.js';import {a as a$a}from'./chunk-NNSBBO5R.js';import {y,z,l}from'./chunk-ZWVT24YW.js';import {a as a$5}from'./chunk-KBELAKIY.js';import {a as a$1}from'./chunk-Q3OTUDIE.js';function ne(A){let{apiBasePath:F,json:b,readJsonBody:z,initBoardAndSetup:I,bootstrapBoard:x,buildPublishedRuntimePayload:V,createMcpControlplaneToolRegistry:U,retriggerCard:G,applyCardAction:N,resolveChatHandlerTarget:K,sendCardFileDownloadResponse:W}=A;async function rt(J,B,L){let u=J.method||"GET",i=L,C=i.pathname;try{if(u==="POST"&&C===`${F}/mcp-actions`){await x();let R=Date.now(),w=new Date(R).toISOString(),y=await z(J),d=typeof y.tool=="string"?y.tool.trim():"",M=y.args&&typeof y.args=="object"&&!Array.isArray(y.args)?y.args:{};if(!d)return b(B,400,{error:"tool is required"}),!0;let P=a$8(M,"card_id");if(!P)return b(B,400,{error:"MCP action requires card_id"}),!0;if(d==="retrigger-card"||d==="retrigger"){await G(P);let O=Date.now();return b(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:d,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:200}}),!0}let p=c$4(M,"payload");if(d==="chat-send"&&!await K(P)){let O=Date.now();return b(B,409,{error:`chat handler is not configured for card: ${P}`,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:409}),!0}if(d==="chat-send"){let O=typeof p["turn-id"]=="string"?p["turn-id"]:typeof p.turnId=="string"?p.turnId:typeof p.turn=="string"?p.turn:"";if(!O||!String(O).trim()){let Q=Date.now();return b(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${P}`,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(Q).toISOString(),responseSentAtMs:Q,responseStatus:400}),!0}}await N(P,d,p);let H=Date.now();return b(B,200,{status:"success",data:{ok:!0,cardId:P,actionType:d,requestReceivedAt:w,requestReceivedAtMs:R,responseSentAt:new Date(H).toISOString(),responseSentAtMs:H,responseStatus:200}}),!0}if(u==="POST"&&C===`${F}/mcp-controlplane`){await x();let R=await z(J),w=typeof R.tool=="string"?R.tool.trim():"",y=R.args&&typeof R.args=="object"&&!Array.isArray(R.args)?R.args:{};if(!w)return b(B,400,{error:"tool is required"}),!0;try{let d=await a$9(w,y,U());if(d&&typeof d=="object"&&!Array.isArray(d)){let M=d;if(M.status==="fail")return b(B,400,{error:b$4(d,"Request failed")}),!0;if(M.status==="error")return b(B,500,{error:b$4(d,"Internal error")}),!0}b(B,200,d);}catch(d){let M=typeof d?.statusCode=="number"?Number(d.statusCode):500,P=d instanceof Error?d.message:String(d);b(B,M,{error:P});}return !0}let k=C.match(new RegExp(`^${c$2(F)}/cards/([^/]+)/retrigger$`));if(u==="POST"&&k){await x();let R=decodeURIComponent(k[1]);return await G(R),b(B,200,{ok:!0}),!0}let v=C.match(new RegExp(`^${c$2(F)}/cards/([^/]+)/actions$`));if(u==="POST"&&v){await x();let R=decodeURIComponent(v[1]),w=Date.now(),y=new Date(w).toISOString(),d=await z(J),M=d?.actionType;if(M==="chat-send"&&!await K(R)){let p=Date.now();return b(B,409,{error:`chat handler is not configured for card: ${R}`,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(p).toISOString(),responseSentAtMs:p,responseStatus:409}),!0}if(M==="chat-send"){let p=d?.payload??{},H=typeof p["turn-id"]=="string"?p["turn-id"]:typeof p.turnId=="string"?p.turnId:typeof p.turn=="string"?p.turn:"";if(!H||!String(H).trim()){let O=Date.now();return b(B,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${R}`,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(O).toISOString(),responseSentAtMs:O,responseStatus:400}),!0}}await N(R,M,d?.payload);let P=Date.now();return b(B,200,{ok:!0,requestReceivedAt:y,requestReceivedAtMs:w,responseSentAt:new Date(P).toISOString(),responseSentAtMs:P,responseStatus:200}),!0}let E=C.match(new RegExp(`^${c$2(F)}/cards/([^/]+)/files/(\\d+)$`));if(u==="GET"&&E){let R=decodeURIComponent(E[1]),w=parseInt(E[2],10),y=i.searchParams.get("sn");return await W(B,R,w,y),!0}return !1}catch(k){let v=k?.statusCode||500;return b(B,v,{error:String(k?.message||k)}),true}}return {handleRuntimeApi:rt}}var oe={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},ae="chat-handler-flow-queue",st="__probe__echo__probe__";function gr(A){let F=String(A.apiBasePath||"/api/board").replace(/\/$/,""),b$5={...oe,...A.corsHeaders||{}},z$1=A.queueLaneTuning??{},I=A.boardId||"",x=A.logger||{info:console.log,warn:console.warn,error:console.error},V=A.invocationAdapter,U=A.chatFlowRunner||null,G=A.notificationTransport||null,N=A.serverUrl||null,K=A.executionExtra||{},W=A.onSseClientConnected,rt=A.onSseClientDisconnected,J=A.onChannelSubscribed,B=A.onChannelUnsubscribed,L=a({readChatRecords:t=>bt(t),getChatProcessing:t=>Rt(t),readChatAfter:async(t,e)=>{let r=await ie(t,e);return {records:r.records,cursor:r.cursor}},onSseClientDisconnected:rt});function u(t){function e(o){if(Array.isArray(o))return o;if(o&&typeof o=="object"){let c=o;return Array.isArray(c.files)?c.files:[o]}return null}function r(o){return {async get(c){return o.get(c)},async set(c){return o.set(c)},async del(c){return o.del(c)},async patch(c){return o.patch(c)},async appendFiles(c){return o.appendFiles(c)}}}function a(o){function c(h){return {status:"success",data:h}}function m(h){return {status:"fail",error:h}}function l(h){return {status:"error",error:h instanceof Error?h.message:String(h)}}return {async get(h){try{let g=h.params?.id;if(g){let T=await o.readCard(g);return T?c({cards:[T]}):m(`card "${g}" not found`)}return c({cards:await o.readAllCards()})}catch(g){return l(g)}},async set(h){try{let g=h.body;if(g==null)return m("set requires a body (card object or array of cards)");let T=Array.isArray(g)?g:[g];for(let j of T){if(typeof j.id!="string")return m("each card must have a string `id` field");await o.writeCard(j.id,j);}return c({count:T.length})}catch(g){return l(g)}},async del(h){try{let g=h.body?.ids??[],T=h.params?.id,j=T?[...g,T]:g;if(j.length===0)return m("del requires body.ids (string[]) or params.id");for(let Y of j)await o.removeCard(Y);return c({count:j.length})}catch(g){return l(g)}},async patch(h){try{let g=h.params?.id,T=h.params?.path;if(!g)return m("patch requires params.id");if(!T)return m("patch requires params.path");let j=h.body,Y=j&&Object.prototype.hasOwnProperty.call(j,"value")?j.value:h.body;return await o.patchCard(g,T,Y),c({count:1})}catch(g){return l(g)}},async appendFiles(h){try{let g=h.params?.id;if(!g)return m("appendFiles requires params.id");let T=await o.readCard(g);if(!T)return m(`card "${g}" not found`);let j=e(h.body);if(!j||j.length===0)return m("appendFiles requires a file metadata object, array, or body.files array");let Y=T.card_data&&typeof T.card_data=="object"&&!Array.isArray(T.card_data)?T.card_data:{},Pt=Array.isArray(Y.files)?Y.files:[],_e=[...Pt,...j];return await o.patchCard(g,"card_data.files",_e),c({files_added:j.map((De,$e)=>({idx:Pt.length+$e,entry:De}))})}catch(g){return l(g)}}}}let n=a$4(t.boardAdapter)?g(t.baseRef,t.boardAdapter,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow}):y(t.baseRef,t.boardAdapter,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,scratchStoreRef:t.scratchStoreRef,taskExecutorRef:t.taskExecutorRef,chatHandlerFlow:t.chatHandlerFlow}),s=t.nonCoreAdapter??(!a$4(t.boardAdapter)&&R(t.boardAdapter)?t.boardAdapter:null),f=t.nonCore??(s?z(t.baseRef,s,{boardRuntimeStoreRef:t.boardRuntimeStoreRef,taskExecutorRef:t.taskExecutorRef}):null),S=t.boardAdapter.chatStorageForRef(t.chatStoreRef),q,_=a$4(t.boardAdapter)?(()=>{let o=d(c(b$1(t.boardAdapter.kvStorageForRef(t.cardStoreRef)),t.boardAdapter.hashFn),x.warn),c$1=a(o);return q={get(m){return c$1.get(m)},set(m){return c$1.set(m)}},c$1})():(()=>{let o=t.boardAdapter.kvStorageForRef(t.cardStoreRef),m=a$5(l({readIndex:()=>o.read("_index"),writeIndex:l=>o.write("_index",l),readCard:l=>o.read(l),writeCard:(l,h)=>(o.write(l,h),l),removeCard:l=>{o.delete(l);},cardExists:l=>o.read(l)!==null,defaultCardKey:l=>l},x.warn));return q=m,r(m)})(),D;if(a$4(t.boardAdapter)){let o=t.boardAdapter.blobStorageForRef(t.artifactsStoreRef);D={async putBytes(c,m){if(o.writeBytes){await o.writeBytes(c,m);return}let l=JSON.stringify({__kind:"bytes-array",data:[...m]});await o.write(c,l);},async getBytes(c){if(o.readBytes){let l=await o.readBytes(c);if(l!==null)return l}let m=await o.read(c);if(m===null)return null;try{let l=JSON.parse(m);if(l&&l.__kind==="bytes-array"&&Array.isArray(l.data))return new Uint8Array(l.data)}catch{}return new TextEncoder().encode(m)},async listKeys(c){return await o.listKeys(c)}};}else {let o=t.boardAdapter.blobStorageForRef(t.artifactsStoreRef),c=a$6(o);D={putBytes(m,l,h){c.putBytes(m,l,h);},getBytes(m){return c.getBytes(m)},listKeys(m){return c.list(m).map(l=>l.key)}};}let Me={async init(o){return n.init(o)},async status(o){return n.status(o)},async getConfig(o){return n.getConfig(o)},async getAllOutputsDataObjects(o){return n.getAllOutputsDataObjects(o)},async getAllOutputsComputedValues(o){return n.getAllOutputsComputedValues(o)},async getOutputsFetchedSources(o){return n.getOutputsFetchedSources(o)},async upsertCard(o){return n.upsertCard(o)},async removeCard(o){return n.removeCard(o)},async cardRefreshedNotify(o){return n.cardRefreshedNotify(o)},async sourceDataFetched(o){return n.sourceDataFetched(o)},async sourceDataFetchFailure(o){return n.sourceDataFetchFailure(o)}};return {label:t.label,board:n,nonCore:f,publicCardStore:q,boardOps:Me,cardStoreOps:_,get filesArtifacts(){return D},get chatStorage(){return S},boardAdapter:t.boardAdapter,boardRuntimeStoreRef:t.boardRuntimeStoreRef,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,artifactsStoreRef:t.artifactsStoreRef,fetchedSourcesStoreRef:t.fetchedSourcesStoreRef,queueStoreRef:t.queueStoreRef,chatStoreRef:t.chatStoreRef,scratchStoreRef:t.scratchStoreRef,notifyRef:t.notifyRef,taskExecutorRef:t.taskExecutorRef,chatHandlerRef:t.chatHandlerRef,chatHandlerFlow:t.chatHandlerFlow,inferenceAdapterRef:t.inferenceAdapterRef,notification:a$7(),notificationTeardown:null,initialized:false,cardsBootstrapped:false}}let i$1=A.boards.map(u),C=new Map;function k$1(t){return C.get(t)??0}function v(t){return t.queueStoreRef}function E(t,e){if(a$4(t.boardAdapter)){let a=t.boardAdapter.queueStorageForRef(v(t),e);return a$a(a)}let r=t.boardAdapter.queueStorageForRef(v(t),e);return a$b(r)}function R(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function w(t){let e=i$1[k$1(t)];return {files:e?e.filesArtifacts:null}}function y$1(){return c$1()}function d$2(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}async function M(t){if(!t||t.notificationTeardown||!G||!t.notifyRef)return;let e=await G.subscribe(t.notifyRef,r=>{c$3(t.notification,r);let a=r.kind==="notification-batch"?r.notifications:[r];L.broadcastNotificationBatch(a);});t.notificationTeardown=e;}async function P(t){if(!t||t.initialized)return;let e={boardRuntimeStoreRef:t.boardRuntimeStoreRef,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,fetchedSourcesStoreRef:t.fetchedSourcesStoreRef,artifactsStoreRef:t.artifactsStoreRef,queueStoreRef:t.queueStoreRef,chatStoreRef:t.chatStoreRef,scratchStoreRef:t.scratchStoreRef},r={};t.taskExecutorRef&&(r["task-executor-ref"]=t.taskExecutorRef),t.chatHandlerFlow!==void 0&&(r["chat-handler-flow"]=t.chatHandlerFlow);let a=await t.boardOps.init({params:e,body:r});if(a.status!=="success")throw Object.assign(new Error(a.error||`init failed for ${t.label}`),{statusCode:500});if(await M(t),!t.chatHandlerFlow&&t.chatHandlerRef&&V.describe)try{let n=await V.describe(t.chatHandlerRef);n&&n.kind!=="chat-handler"?x.warn(`[init] chat-handler describe returned kind="${n.kind}", expected "chat-handler" for ${t.label}`):n&&x.info(`[init] chat-handler validated: ${n.name} (protocol ${n.protocolVersion}) for ${t.label}`);}catch(n){x.warn(`[init] chat-handler describe failed for ${t.label}: ${n?.message||String(n)}`);}t.initialized=true;}async function p(t){if(!t.boardAdapter.publishBoardChangeNotifications)return;let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&b$2(r.data)&&e.push({kind:"status",status:r.data});let a=await t.boardOps.getAllOutputsDataObjects({});if(a.status==="success"&&a.data!=null)for(let[s,f]of Object.entries(a.data))s&&e.push({kind:"data_object",key:s,payload:f});let n=await t.boardOps.getAllOutputsComputedValues({});if(n.status==="success"&&n.data!=null)for(let[s,f]of Object.entries(n.data))s&&e.push({kind:"computed_values",cardId:s,values:f});e.length>0&&t.boardAdapter.publishBoardChangeNotifications(e);}async function H(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),a=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let n of a)typeof n.id=="string"&&(C.set(n.id,e),await t.boardOps.upsertCard({params:{cardId:n.id}}));t.cardsBootstrapped=true;}async function O(){for(let t of i$1)await P(t);}async function Q(){await O();for(let t=0;t<i$1.length;t++)await p(i$1[t]),await H(i$1[t],t),await p(i$1[t]);}async function pt(t=false){t||await O();for(let e of i$1){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}function Z(t){return i$1[k$1(t)]??null}async function nt(t){let e=Z(t);if(!e)return null;let r=await e.cardStoreOps.get({params:{id:t}});if(r.status!=="success")return null;let a=Array.isArray(r.data?.cards)?r.data.cards:[];return a.length>0?a[0]:null}async function mt(){let t=async r=>{if(!r)return [];let a=await r.cardStoreOps.get({});return a.status!=="success"||!Array.isArray(a.data?.cards)?[]:a.data.cards},e=[];for(let r of i$1)e.push(...await t(r));return e}function gt(){return i$1[0]??null}function se(t){return Z(t)??gt()}function $(t){let e=se(t);if(!e)throw Object.assign(new Error(`Board context is unavailable for chat operations: ${t}`),{statusCode:404});return e.chatStorage}async function ie(t,e){return await $(t).readAfter(t,e)}async function Rt(t){return await $(t).isProcessing(t)}async function at(t,e){await $(t).setProcessing(t,e),await L.broadcastCardChats(t,true);}let ce=a$1({append(t,e,r,a,n){return Promise.resolve($(t).append(t,e,r,a,n)).then(async s=>(await L.broadcastCardChats(t,true),s))},readAll(t){return $(t).readAll(t)},readAfter(t,e){return $(t).readAfter(t,e)},clear(t){return $(t).clear(t)},setProcessing(t,e){return Promise.resolve($(t).setProcessing(t,e)).then(async()=>{await L.broadcastCardChats(t,true);})},isProcessing(t){return $(t).isProcessing(t)},getConfig(t){return $(t).getConfig(t)},setConfig(t,e){return $(t).setConfig(t,e)}}),yt=n({boardContexts:i$1,cardOwnerIndex:C,cardContextForCard:t=>Z(t),readStatusSnapshot:()=>pe(),readDataObjectsByToken:()=>ge(),readCardRuntimeArtifacts:()=>me(),readCardFromStore:t=>nt(t),readCardDefinitions:()=>mt(),processAccumulatedLaneInternal:t=>pt(t),reportSourceFetched:(t,e)=>Bt(t,{ref:e}),reportSourceFetchFailure:(t,e)=>kt(t,{reason:e}),uploadCardFile:(t,e,r,a,n)=>Ct(t,e,r,a,n),chatStorePublic:ce,serverUrl:N,apiBasePath:F}),ue=yt.mcpCardStoreFacade,it=yt.createMcpFacade,de=h({boardId:I,bootstrapBoard:()=>Q(),sseHub:L,onChannelSubscribed:J,onChannelUnsubscribed:B,getMcpFacade:()=>it(),getMcpCardStoreFacade:()=>ue()});function le(t){return k(t)}function fe(){return l$1(it())}function wt(){return m({boardId:I,uploadCardFile:Ct,getMcpFacade:()=>it(),controlplane:de})}let ct=i({boardId:I,boardContexts:i$1,readCardDefinitions:()=>mt(),readChatRecords:t=>bt(t),getChatProcessing:t=>Rt(t)}),pe=ct.readStatusSnapshot,me=ct.readCardRuntimeArtifacts,ge=ct.readDataObjectsByToken,lt=ct.buildPublishedRuntimePayload;async function ht(t,e,r){let a=r?.syncBoard!==false,n=r?.restartOnlyIfChanged===true,s=Z(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let f=await nt(t);if(!f)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let S=n?JSON.stringify(f):null,q=e(f)||f;if(n&&JSON.stringify(q)===S)return;let _=await s.cardStoreOps.set({body:q});if(_.status!=="success")throw Object.assign(new Error(_.error||`Failed to persist card: ${t}`),{statusCode:500});if(a){let D=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(D.status!=="success")throw Object.assign(new Error(D.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function Re(t,e){await ht(t,e,{syncBoard:true});}async function ye(t,e){await ht(t,e,{syncBoard:false});}async function we(t){let e=Z(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await nt(t))throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let a=await e.boardOps.upsertCard({params:{cardId:t,restart:true}});if(a.status!=="success")throw Object.assign(new Error(a.error||`Failed to retrigger card: ${t}`),{statusCode:500})}async function he(t){await $(t).clear(t);try{await at(t,!1);}catch{}}async function be(t,e,r,a,n=""){let s=typeof r=="string"?r.trim():"",f=await $(t).append(t,e||"system",s,a,n);return await L.broadcastCardChats(t,true),f}async function bt(t){return await $(t).readAll(t)}let Ct=j({safeCardId:t=>d$2(t),artifactsStores:t=>w(t),cardFileMetadataStore:()=>y$1(),readCardFromStore:t=>nt(t),updateCardLocalOnly:(t,e)=>ye(t,e),writeChatRecord:(t,e,r,a,n)=>be(t,e,r,a,n)}).uploadCardFile;async function St(t){let e=Z(t);if(!e)return null;let r=await e.boardOps.getConfig({params:{key:"chat-handler-flow"}}),n=(r.status==="success"?r.data?.value:null)??e.chatHandlerFlow??null,s=e.chatHandlerRef;return n==null&&(!s||typeof s!="object")?null:{ctx:e,handlerFlow:n,handlerRef:s}}function Ce(t){let e=typeof t=="string"?t.trim():"";if(e.length<st.length*2||!e.startsWith(st)||!e.endsWith(st))return null;let r=e.slice(st.length,e.length-st.length).trim(),a=/^([A-Za-z0-9_-]+)__(.*)$/s.exec(r);return a?{assistant:a[1].trim().toLowerCase(),text:a[2].trim()}:{assistant:"echo",text:r}}async function Se(t,e,r=false,a="",n=""){try{let s=await St(t);if(!s){try{await at(t,!1);}catch{}return}let{ctx:f,handlerFlow:S,handlerRef:q}=s;if(!r)try{await at(t,!0);}catch{}let _={boardId:I,cardId:String(t),lastChatEntryId:e,...a?{turnId:a}:{},...typeof n=="string"&&n.trim()?{probe:n.trim()}:{},...K,...N?{serverUrl:N}:{}},D=S!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:ae}}:q;a$4(f.boardAdapter)?await E(f,"chat-agent").enqueueRequest({boardId:I,ref:D,args:S!=null?{..._,__chatHandlerFlow:S}:_}):E(f,"chat-agent").enqueueRequest({boardId:I,ref:D,args:S!=null?{..._,__chatHandlerFlow:S}:_}),await Promise.resolve(f.boardAdapter.requestProcessAccumulated?.());}catch(s){try{await at(t,!1);}catch{}x.warn(`[chat-handler] queue failed for card "${t}": ${s instanceof Error?s.message:String(s)}`);}}async function Ae(t,e,r){if(e.howToRun==="built-in"&&b$3(e)===ae){let a=U,n=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,a?a.run(n,s,{boardId:I,cardId:String(s.cardId||""),label:t.label,logger:x,serverUrl:N,executionExtra:K}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return V.invoke(e,r)}async function Be(t,e=false){e||await O();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",a=r?Z(r):gt();if(!a)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let n=await Ae(a,t.ref,t.args);if(!n.dispatched){if(r)try{await at(r,!1);}catch{}throw new Error(n.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function ke(t,e,r){if(e==="chat-send"){let n=r&&typeof r["turn-id"]=="string"?r["turn-id"]:r&&typeof r.turnId=="string"?r.turnId:r&&typeof r.turn=="string"?r.turn:"";if(r&&"files"in r&&r.files!==void 0&&r.files!==null)throw Object.assign(new Error('chat-send does not accept a "files" parameter; upload attachments via manage.add-chat-attachment first'),{statusCode:400});let s=wt(),f=Ce(r?.text),S=f?f.text:r?.text,q=await a$9("manage.add-chat-entry-and-any-attachments",{board_id:I,card_id:t,role:"user",text:S,turn_id:n,files:[]},s);if(q?.status!=="success")throw new Error(b$4(q,`chat-send append failed for card ${t}`));let _=q?.data?.id;if(typeof _!="string"||!_)throw new Error(`chat-send did not return an append id for card ${t}`);let D=await a$9("setstate.chat-processing-started",{board_id:I,card_id:t},s);if(D?.status!=="success")throw new Error(b$4(D,`chat-send processing update failed for card ${t}`));Se(t,_,true,n,f?.assistant||"");return}await Re(t,n=>{let s=new Date().toISOString(),f=n.card_data&&typeof n.card_data=="object"?n.card_data:{};if(n.card_data=f,e==="file-upload"){let S=y$1().normalizeIncoming(r?.files,s);return S.length>0&&y$1().merge(f,S),n}if(e==="action"){let S=r&&typeof r.buttonId=="string"?r.buttonId:"";if(!S)return n;f.lastAction={buttonId:S,at:s},f.lastActionText=`${S} @ ${s}`;}return n});}function ut(t,e,r){let a=JSON.stringify(r),n=typeof Buffer<"u"?Buffer.byteLength(a):new TextEncoder().encode(a).length;t.writeHead(e,{...b$5,"Content-Type":"application/json; charset=utf-8","Content-Length":n}),t.end(a);}async function At(t,e,r){let a=await nt(t);if(!a)throw Object.assign(new Error("Card not found"),{statusCode:404});let n=y$1().resolve(a.card_data,e,r);if(!n.ok&&n.reason==="stale_reference")throw Object.assign(new Error("File reference is stale. Refresh and try again."),{statusCode:409});if(!n.ok)throw Object.assign(new Error("File not found"),{statusCode:404});let s=n.file,f=d$2(t),S=w(t),q=String(s.stored_name||""),_=`${f}/${q}`,D=S.files?await S.files.getBytes(_):null;if(!D)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:D}}async function Pe(t,e,r,a){let{fileRecord:n,bytes:s}=await At(e,r,a),f=String(n.name||n.stored_name||"download.bin"),S=String(n.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":S,"Content-Disposition":`attachment; filename="${f}"`,"Content-Length":s.length}),t.end(s);}function Fe(t){let e=String(t||"").toLowerCase();return e.startsWith("text/")||e.includes("json")||e.includes("xml")||e.includes("javascript")||e.includes("typescript")||e.includes("yaml")||e.includes("csv")}function Oe(t,e,r){let a=t.split(/\r?\n/);return (e==="head"?a.slice(0,r):a.slice(-r)).join(`
2
+ `)}async function dt(t){let e=[];for await(let a of t)e.push(a);let r=typeof Buffer<"u"?Buffer.concat(e).toString("utf-8").trim():new TextDecoder().decode(d$1(e)).trim();return r?JSON.parse(r):{}}async function Bt(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let a=i$1[0];return a?a.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function kt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",a=i$1[0];return a?a.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let ve=b({sseHub:L,corsHeaders:b$5,json:ut,buildPublishedRuntimePayload:()=>lt(),onSseClientConnected:W,onChannelSubscribed:J,onChannelUnsubscribed:B,apiBasePath:F,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),bootstrapBoard:()=>Q(),boardContexts:i$1,publishPersistedStateSnapshot:t=>p(t),upsertCardsFromSource:(t,e)=>H(t,e)}).handleWatchersRoutes,Te=a$2({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),bootstrapBoard:()=>Q(),createMcpFacade:()=>it(),createMcpToolRegistry:t=>le(t),resolveCardFileDownloadPayload:(t,e,r)=>At(t,e,r),isLikelyTextMimeType:t=>Fe(t),sliceTextByLines:(t,e,r)=>Oe(t,e,r)}).handleAgentfaceApi,xe=a$3({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),createMcpWebhookToolRegistry:()=>fe()}).handleWebhooksApi,je=ne({apiBasePath:F,json:ut,readJsonBody:t=>dt(t),initBoardAndSetup:()=>O(),bootstrapBoard:()=>Q(),buildPublishedRuntimePayload:()=>lt(),createMcpControlplaneToolRegistry:()=>wt(),retriggerCard:t=>we(t),applyCardAction:(t,e,r)=>ke(t,e,r),resolveChatHandlerTarget:t=>St(t),sendCardFileDownloadResponse:(t,e,r,a)=>Pe(t,e,r,a)}).handleRuntimeApi;async function Ee(t,e,r){return !!(await Te(t,e,r)||await xe(t,e,r)||await ve(t,e,r)||await je(t,e,r))}return {get apiBasePath(){return F},get corsHeaders(){return b$5},get queueLaneTuning(){return z$1},handleRuntimeApi:Ee,buildPublishedRuntimePayload:lt,__drainProcessAccumulatedLane:pt,handleChatAgentRequest:Be,clearChatRecords:he,reportSourceFetched(t,e){return Bt(t,{ref:e})},reportSourceFetchFailure(t,e){return kt(t,{reason:e})},get cardStore(){return i$1[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function Rr(A){let F=String(A.apiBasePath||"/api/boards").replace(/\/$/,""),b={...oe,...A.corsHeaders||{}},z=A.serverMetaStore,I=A.boardRuntimeFactory,x=new Map,V="boards-config.json";function U(){let u=z.getText(V);if(!u)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(u)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function G(u){z.putText(V,JSON.stringify(u,null,2));}function N(u){let i=String(u||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return i.length>0&&i.length<=64?i:null}function K(u){if(x.has(u))return x.get(u);let C=U().boards.find(v=>v.id===u)||{},k=I(u,C);return x.set(u,k),k}function W(u,i,C){let k=JSON.stringify(C),v=typeof Buffer<"u"?Buffer.byteLength(k):new TextEncoder().encode(k).length;u.writeHead(i,{...b,"Content-Type":"application/json; charset=utf-8","Content-Length":v}),u.end(k);}async function rt(u,i,C){let k=u.method||"GET",v=C.pathname;if(k==="GET"&&v===F)return W(i,200,{ok:true,boards:U().boards}),true;if(k==="POST"&&v===F){let E=[];for await(let p of u)E.push(p);let R=typeof Buffer<"u"?Buffer.concat(E).toString("utf-8").trim():new TextDecoder().decode(d$1(E)).trim(),w={};try{w=R?JSON.parse(R):{};}catch{w={};}let y=N(w.id);if(!y)return W(i,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let d=U();if(d.boards.some(p=>p.id===y))return W(i,409,{error:`Board "${y}" is already registered`}),true;let M=typeof w.label=="string"&&w.label.trim()?w.label.trim():y,P={id:y,label:M};for(let[p,H]of Object.entries(w))p==="id"||p==="label"||H!=null&&(P[p]=H);return d.boards.push(P),G(d),W(i,200,{ok:true,board:P}),true}return false}async function J(u,i,C){let v=C.pathname.match(new RegExp(`^${c$2(F)}/([^/]+)(/|$)`));if(!v)return false;let E=N(decodeURIComponent(v[1]));return E?U().boards.some(y=>y.id===E)?!!await K(E).handleRuntimeApi(u,i,C):(W(i,404,{error:`Board "${E}" not registered. POST ${F} with {id} to register it first.`}),true):(W(i,400,{error:"Invalid board id"}),true)}async function B(u,i,C){return !!(await rt(u,i,C)||await J(u,i,C))}function L(u){if(!U().boards.some(C=>C.id===u))throw Object.assign(new Error(`Board "${u}" not registered`),{statusCode:404});return {service:K(u)}}return {get apiBasePath(){return F},get corsHeaders(){return b},handleApi:B,requireBoardService:L}}export{gr as a,Rr as b};//# sourceMappingURL=chunk-EPCJYP4N.js.map
3
+ //# sourceMappingURL=chunk-EPCJYP4N.js.map
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkLPXVVMQT_cjs=require('./chunk-LPXVVMQT.cjs'),chunkBQUQTOPB_cjs=require('./chunk-BQUQTOPB.cjs'),chunkVQCIOKJV_cjs=require('./chunk-VQCIOKJV.cjs'),chunk7QZ267XP_cjs=require('./chunk-7QZ267XP.cjs');function W(){return {status:null,computedValues:{},dataObjects:{},cards:{}}}function V(s){if(!s||typeof s!="object")return false;let e=s.summary;return !e||typeof e!="object"?false:Number(e.card_count||0)>0}function H(s,e){if(!e||typeof e!="object")return;let n=e;if(n.kind==="notification-batch"&&Array.isArray(n.notifications)){for(let c of n.notifications)H(s,c);return}n.kind==="status"&&V(n.status)&&(s.status=n.status),n.kind==="computed_values"&&n.cardId&&(s.computedValues[n.cardId]=n.values),n.kind==="data_object"&&n.key&&(s.dataObjects[n.key]=n.payload),n.kind==="card_refreshed"&&n.cardId&&(s.cards[n.cardId]=n.card),n.kind==="card_removed"&&n.cardId&&(delete s.cards[n.cardId],delete s.computedValues[n.cardId]);}function j(s,e){if(s?.status==="success")return Object.prototype.hasOwnProperty.call(s,"data")?s.data:void 0;throw s?.status==="fail"||s?.status==="error"?Object.assign(new Error(s.error||`${e} failed`),{statusCode:400}):Object.assign(new Error(`${e} returned an unexpected response`),{statusCode:500})}async function B(s,e){return j(await s,e)}function q(s){let e=chunkLPXVVMQT_cjs.a(s,"key");if(!e)throw Object.assign(new Error("MCP tool requires key"),{statusCode:400});let n=e.split(".");if(!(n.length>=2&&n[0]==="chat"&&n.every(h=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(h))))throw Object.assign(new Error("MCP tool only supports card private keys under chat.*"),{statusCode:400});return e}function D(s,e){let n=s.__private;for(let c of e.split(".")){if(!n||typeof n!="object"||Array.isArray(n)||!Object.prototype.hasOwnProperty.call(n,c))return {exists:false,value:null};n=n[c];}return {exists:true,value:n}}function Q(s){let{boardId:e,bootstrapBoard:n,sseHub:c,onChannelSubscribed:h,onChannelUnsubscribed:v,getMcpFacade:I,getMcpCardStoreFacade:r}=s;function C(d){let l=chunkLPXVVMQT_cjs.a(d,"board_id");if(!l)throw Object.assign(new Error("MCP tool requires board_id"),{statusCode:400});if(l!==e)throw Object.assign(new Error(`Unknown board_id: ${l}`),{statusCode:400})}function w(d){let l=chunkLPXVVMQT_cjs.a(d,"client_id");if(!l)throw Object.assign(new Error("MCP tool requires client_id"),{statusCode:400});return l}function u(d){C(d);let l=w(d),a=chunkLPXVVMQT_cjs.a(d,"channel_name"),t=chunkLPXVVMQT_cjs.a(d,"card_id")||void 0;if(!a)throw Object.assign(new Error("MCP tool requires channel_name"),{statusCode:400});return {clientId:l,channelName:a,...t?{cardId:t}:{}}}function g(d){C(d);let l=chunkLPXVVMQT_cjs.a(d,"card_id");if(!l)throw Object.assign(new Error("MCP tool requires card_id"),{statusCode:400});return {cardId:l}}async function b(d){await n();let{cardId:l}=g(d),a=w(d);if(!await c.subscribeChat(a,l))throw Object.assign(new Error(`SSE client not connected: ${a}`),{statusCode:404});return {status:"success",data:{boardId:e,cardId:l,clientId:a,subscribed:true}}}async function y(d){await n();let{cardId:l}=g(d),a=w(d);if(!c.unsubscribeChat(a,l))throw Object.assign(new Error(`SSE client not connected: ${a}`),{statusCode:404});return {status:"success",data:{boardId:e,cardId:l,clientId:a,subscribed:false}}}async function k(d,l){await n();let{clientId:a,channelName:t,cardId:o}=u(d);if(!c.has(a))throw Object.assign(new Error(`SSE client not connected: ${a}`),{statusCode:404});return l?h?.(a,t,o?{cardId:o}:{}):v?.(a,t,o?{cardId:o}:{}),{status:"success",data:{boardId:e,clientId:a,channelName:t,subscribed:l,...o?{cardId:o}:{}}}}async function f(d,l){let{cardId:a}=g(d);return await I().setChatProcessing({cardId:a,active:l}),{status:"success",data:{boardId:e,cardId:a,active:l}}}async function i(d){let{cardId:l}=g(d),a=await I().getChatProcessing({cardId:l});return {status:"success",data:{boardId:e,cardId:l,active:a.active}}}async function m(d){let{cardId:l}=g(d),a=q(d);if(!Object.prototype.hasOwnProperty.call(d,"value"))throw Object.assign(new Error("MCP tool requires value"),{statusCode:400});if(a.split(".").includes("visible_controlplane_only")){let t=await B(r().get({params:{id:l}}),"cardStore.get"),o=Array.isArray(t.cards)&&t.cards.length>0&&typeof t.cards[0]=="object"&&!Array.isArray(t.cards[0])?t.cards[0]:null,R=o?D(o,"visible_controlplane_only").value:void 0;if(d.value!==R)throw Object.assign(new Error("MCP tool cannot change the reserved private flag visible_controlplane_only"),{statusCode:403});return {status:"success",data:{boardId:e,cardId:l,key:a}}}return j(await r().patch({params:{id:l,path:`__private.${a}`},body:{value:d.value}}),"cardStore.patch"),{status:"success",data:{boardId:e,cardId:l,key:a}}}async function _(d){let{cardId:l}=g(d),a=q(d),t=await B(r().get({params:{id:l}}),"cardStore.get"),o=Array.isArray(t.cards)&&t.cards.length>0&&t.cards[0]&&typeof t.cards[0]=="object"&&!Array.isArray(t.cards[0])?t.cards[0]:null;if(!o)throw Object.assign(new Error(`Card "${l}" not found`),{statusCode:404});let R=D(o,a);return {status:"success",data:{boardId:e,cardId:l,key:a,exists:R.exists,value:R.value}}}return {requireCardArgs:g,subscribeChat:b,unsubscribeChat:y,watchChannel:k,setChatProcessing:f,getChatProcessing:i,setCardMeta:m,getCardMeta:_}}function ee(s){let{boardId:e,boardContexts:n,readCardDefinitions:c,readChatRecords:h,getChatProcessing:v}=s;async function I(){let u=(await Promise.all(n.map(async f=>{try{let i=f.boardAdapter.kvStorageForRef(f.outputsStoreRef),m=await Promise.resolve(i.read("status"));if(m!=null)return m}catch{}return f.notification.status}))).filter(Boolean);if(u.length===0)return null;if(u.length===1)return u[0];let g=[],b=["completed","eligible","pending","blocked","unresolved","failed","in_progress","orphan_cards"],y={};for(let f of b)y[f]=0;for(let f of u){let i=f,m=Array.isArray(i.cards)?i.cards:[];g.push(...m);for(let _ of b)y[_]+=Number(i?.summary?.[_]||0);}let k=u[0];return {...k,cards:g,summary:{...k.summary||{},card_count:g.length,...y}}}async function r(){let u={},g=async b=>{try{let y=await b.boardOps.getAllOutputsComputedValues({});if(y.status==="success"&&y.data&&typeof y.data=="object"){for(let[k,f]of Object.entries(y.data)){let i=b.notification.cards[k];u[k]={schema_version:"v1",card_id:k,card_data:i?.card_data??{},computed_values:f??{}};}return}}catch{}for(let[y,k]of Object.entries(b.notification.computedValues)){let f=b.notification.cards[y];u[y]={schema_version:"v1",card_id:y,card_data:f?.card_data??{},computed_values:k??{}};}};for(let b of n)await g(b);return u}async function C(){let u={};for(let g of n){try{let b=await g.boardOps.getAllOutputsDataObjects({});if(b.status==="success"&&b.data&&typeof b.data=="object"){Object.assign(u,b.data);continue}}catch{}Object.assign(u,g.notification.dataObjects||{});}return u}async function w(){let u=await c(),g=await r(),b=await C(),y={};for(let f of u){if(!f?.id)continue;let i=f.id,m=g[i]||{},_={...m.card_data&&typeof m.card_data=="object"?m.card_data:f.card_data&&typeof f.card_data=="object"?f.card_data:{}};y[i]={schema_version:m.schema_version||"v1",card_id:m.card_id||i,card_data:_,computed_values:m.computed_values&&typeof m.computed_values=="object"?m.computed_values:{}};}let k={};for(let f of u){if(!f?.id)continue;let i=f.id;try{let m=await h(i),_=await v(i);(m.length>0||_)&&(k[i]={messages:m.map(d=>({role:String(d.role||"system"),text:String(d.text||""),files:Array.isArray(d.files)?d.files:[]})),receiving:!1,processing:_});}catch{}}return {boardId:e,cardDefinitions:u,statusSnapshot:await I(),dataObjectsByToken:b,cardRuntimeById:y,cardChatsByCardId:k}}return {readStatusSnapshot:I,readCardRuntimeArtifacts:r,readDataObjectsByToken:C,buildPublishedRuntimePayload:w}}function z(s){let e=String(s||"").trim();if(!e)return "upload.bin";let n=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return (n>=0?e.slice(n+1):e)||"upload.bin"}function re(s){let{safeCardId:e,artifactsStores:n,cardFileMetadataStore:c,readCardFromStore:h,updateCardLocalOnly:v,writeChatRecord:I}=s;async function r(u){let g=[];try{let b=await h(u);if(!b)return g;let y=c().read(b.card_data&&typeof b.card_data=="object"?b.card_data:null);for(let k of y)g.push(String(k.stored_name??""));}catch{}return g}async function C(u,g,b,y){let k=e(u),f=n(u),i=z(g),m=await r(u),d=`${String(m.length+1).padStart(3,"0")}-${i}`.slice(-36);if(!f.files)throw Object.assign(new Error(`artifactsStoreRef is not configured for card uploads: ${u}`),{statusCode:500});return await f.files.putBytes(`${k}/${d}`,new Uint8Array(y),b||"application/octet-stream"),{name:i,stored_name:d,size:y.length,mime_type:b||"application/octet-stream",uploaded_at:new Date().toISOString()}}async function w(u,g,b,y,k){if(!y.length)throw Object.assign(new Error("Empty upload body"),{statusCode:400});let f=k?.inChat===true,i=await C(u,g,b,y),m=null;if(await v(u,_=>{let d=new Date().toISOString(),l=_.card_data&&typeof _.card_data=="object"?_.card_data:{};_.card_data=l;let a=c().normalizeIncoming([{name:i.name,stored_name:i.stored_name,size:i.size,mime_type:i.mime_type,uploaded_at:i.uploaded_at||d,chat:f}],d);return m=c().merge(l,a).findIndex(o=>o.stored_name===i.stored_name),_}),f&&k?.suppressChatRecordWrite!==true){let _=typeof m=="number"&&m>=0?` #${m}`:"";await I(u,"system",`file uploaded: ${i.name} as ${i.stored_name}${_}`,[],k?.turnId??"");}return {ok:true,file:{...i,...typeof m=="number"&&m>=0?{file_idx:m}:{},chat:f},...typeof m=="number"&&m>=0?{file_idx:m}:{}}}return {uploadCardFile:w,readCardStoredFileNames:r}}function se(s){return {"discover.source-kinds":()=>s.discoverSourceKinds(),"inspect.board-runtime-status":()=>s.inspectBoardRuntimeStatus(),"inspect.card-definition-and-runtime":e=>s.inspectCardDefinitionAndRuntime({cardId:chunkLPXVVMQT_cjs.a(e,"card_id")}),"inspect.chat-messages-on-cards":e=>{let n=chunkLPXVVMQT_cjs.b(e,"tail_turns"),c=chunkLPXVVMQT_cjs.b(e,"tail"),h=chunkLPXVVMQT_cjs.a(e,"turn_id"),v=e.all_turns===true,I=chunkLPXVVMQT_cjs.a(e,"tail_turns_before_id");return s.inspectChatMessagesOnCards({cardId:chunkLPXVVMQT_cjs.a(e,"card_id"),...n!==void 0?{lastUserTurns:n}:{},...c!==void 0?{tail:c}:{},...h?{turnId:h}:{},...v?{allTurns:true}:{},...I?{tailTurnsBeforeId:I}:{}})},"inspect.file-contents":e=>s.inspectFileContents({cardId:chunkLPXVVMQT_cjs.a(e,"card_id"),fileIdx:Number(chunkLPXVVMQT_cjs.b(e,"file_idx"))}),"preflight.validate-candidate-card-definition":e=>s.preflightValidateCandidateCardDefinition({candidateCardContent:chunkLPXVVMQT_cjs.d(e,"candidate_card_content","candidate_card_content")}),"preflight.materialize-candidate-card":e=>s.preflightMaterializeCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(e,"candidate_card_content","candidate_card_content"),mockRequires:chunkLPXVVMQT_cjs.d(e,"mock_requires","mock_requires"),mockFetchedSources:chunkLPXVVMQT_cjs.d(e,"mock_fetched_sources","mock_fetched_sources")}),"preflight.probe-single-source-in-candidate-card":e=>s.preflightProbeSingleSourceInCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(e,"candidate_card_content","candidate_card_content"),mockProjections:chunkLPXVVMQT_cjs.c(e,"mock_projections"),sourceIdx:chunkLPXVVMQT_cjs.e(e,"source_idx","source_idx")}),"preflight.run-single-source-in-candidate-card":e=>s.preflightRunSingleSourceInCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(e,"candidate_card_content","candidate_card_content"),mockProjections:chunkLPXVVMQT_cjs.c(e,"mock_projections"),sourceIdx:chunkLPXVVMQT_cjs.e(e,"source_idx","source_idx")}),"preflight.run-single-source-in-live-card":e=>s.preflightRunSingleSourceInLiveCard({cardId:chunkLPXVVMQT_cjs.a(e,"card_id"),sourceIdx:chunkLPXVVMQT_cjs.e(e,"source_idx","source_idx"),mockRequires:chunkLPXVVMQT_cjs.d(e,"mock_requires","mock_requires")}),"preflight.run-one-cycle-with-candidate-card":e=>s.preflightRunOneCycleWithCandidateCard({candidateCardContent:chunkLPXVVMQT_cjs.d(e,"candidate_card_content","candidate_card_content"),mockRequires:chunkLPXVVMQT_cjs.c(e,"mock_requires")}),"manage.read-card":e=>s.manageReadCard({cardId:chunkLPXVVMQT_cjs.a(e,"card_id")}),"stage-ai-response-and-any-attachments":e=>{let n=chunkLPXVVMQT_cjs.a(e,"turn_id");if(!n)throw Object.assign(new Error("stage-ai-response-and-any-attachments requires a non-empty turn_id"),{statusCode:400});return s.manageAddChatEntryAndAnyAttachments({cardId:chunkLPXVVMQT_cjs.a(e,"card_id"),role:"assistant",...typeof e.text=="string"?{text:e.text}:{},...n?{turn:n}:{},...Array.isArray(e.files)?{files:e.files}:{}})},"stage-ai-failure-message":e=>{let n=chunkLPXVVMQT_cjs.a(e,"turn_id"),c=chunkLPXVVMQT_cjs.a(e,"failure");if(!n)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty turn_id"),{statusCode:400});if(!c)throw Object.assign(new Error("stage-ai-failure-message requires a non-empty failure"),{statusCode:400});return s.manageAddChatEntryAndAnyAttachments({cardId:chunkLPXVVMQT_cjs.a(e,"card_id"),role:"system",text:c,turn:n})},"manage.upsert-card":e=>s.manageUpsertCard({cardId:chunkLPXVVMQT_cjs.a(e,"card_id"),candidateCardContent:chunkLPXVVMQT_cjs.c(e,"candidate_card_content")}),"manage.remove-card":e=>s.manageRemoveCard({cardId:chunkLPXVVMQT_cjs.a(e,"card_id")})}}function oe(s){return {"webhook.process-accumulated":()=>s.webhookProcessAccumulated(),"webhook.source-fetch-done":e=>s.webhookSourceFetchDone({token:chunkLPXVVMQT_cjs.a(e,"token"),ref:chunkLPXVVMQT_cjs.a(e,"ref")}),"webhook.source-fetch-failed":e=>s.webhookSourceFetchFailed({token:chunkLPXVVMQT_cjs.a(e,"token"),reason:chunkLPXVVMQT_cjs.a(e,"reason")})}}function de(s){let{boardId:e,uploadCardFile:n,getMcpFacade:c,controlplane:h}=s;function v(r,C){let w=chunkLPXVVMQT_cjs.a(r,"board_id");if(!w)throw Object.assign(new Error(`${C} requires board_id`),{statusCode:400});if(w!==e)throw Object.assign(new Error(`Unknown board_id: ${w}`),{statusCode:400})}function I(r,C){let{cardId:w}=h.requireCardArgs(r),u=chunkLPXVVMQT_cjs.a(r,"turn_id");return v(r,C),c().manageAddChatAttachment({cardId:w,role:chunkLPXVVMQT_cjs.a(r,"role")||"user",...u?{turn:u}:{},files:[{file_name:chunkLPXVVMQT_cjs.a(r,"file_name"),content_type:chunkLPXVVMQT_cjs.a(r,"content_type")||"application/octet-stream",...typeof r.text=="string"?{text:r.text}:{},...typeof r.base64=="string"?{base64:r.base64}:{},...Array.isArray(r.bytes)?{bytes:r.bytes}:{}}]})}return {"list-runtime-cards":r=>(v(r,"list-runtime-cards"),c().listRuntimeCards()),"sse.subscribe-chat":r=>h.subscribeChat(r),"sse.unsubscribe-chat":r=>h.unsubscribeChat(r),"sse.watch-channel":r=>h.watchChannel(r,true),"sse.unwatch-channel":r=>h.watchChannel(r,false),"getstate.is-chat-processing":r=>h.getChatProcessing(r),"setstate.chat-processing-started":r=>h.setChatProcessing(r,true),"setstate.chat-processing-done":r=>h.setChatProcessing(r,false),"getstate.card-private":r=>h.getCardMeta(r),"setstate.card-private":r=>h.setCardMeta(r),"manage.upload-card-file":r=>{let C=chunkLPXVVMQT_cjs.a(r,"card_id"),w=chunkLPXVVMQT_cjs.a(r,"file_name"),u=chunkLPXVVMQT_cjs.a(r,"content_type")||"application/octet-stream",g=chunkLPXVVMQT_cjs.f(r);if(v(r,"manage.upload-card-file"),!C)throw Object.assign(new Error("manage.upload-card-file requires card_id"),{statusCode:400});if(!w)throw Object.assign(new Error("manage.upload-card-file requires file_name"),{statusCode:400});if(!g)throw Object.assign(new Error("manage.upload-card-file requires args.bytes, args.text, or args.base64"),{statusCode:400});return n(C,w,u,g,{inChat:false})},"manage.add-chat-attachment":r=>I(r,"manage.add-chat-attachment"),"manage.add-chat-attachement":r=>I(r,"manage.add-chat-attachement"),"manage.add-chat-entry-and-any-attachments":r=>{let{cardId:C}=h.requireCardArgs(r),w=chunkLPXVVMQT_cjs.a(r,"role")||"user",u=chunkLPXVVMQT_cjs.a(r,"turn_id");return v(r,"manage.add-chat-entry-and-any-attachments"),c().manageAddChatEntryAndAnyAttachments({cardId:C,role:w,...typeof r.text=="string"?{text:r.text}:{},...u?{turn:u}:{},...Array.isArray(r.files)?{files:r.files}:{}})},"manage.patch-card":r=>{let{cardId:C}=h.requireCardArgs(r);return v(r,"manage.patch-card"),c().managePatchCard({cardId:C,patch:chunkLPXVVMQT_cjs.c(r,"patch")})},"manage.upsert-card":r=>{let{cardId:C}=h.requireCardArgs(r);return v(r,"manage.upsert-card"),c().manageUpsertCard({cardId:C,candidateCardContent:chunkLPXVVMQT_cjs.c(r,"candidate_card_content")})},"manage.remove-card":r=>{let{cardId:C}=h.requireCardArgs(r);return v(r,"manage.remove-card"),c().manageRemoveCard({cardId:C})},"manage.admin-read-card":async r=>{let{cardId:C}=h.requireCardArgs(r);return {status:"success",data:{cards:await c().adminReadCard({cardId:C})}}},"manage.admin-upsert-card":r=>{let C=chunkLPXVVMQT_cjs.a(r,"board_id"),w=chunkLPXVVMQT_cjs.a(r,"card_id");if(!C)throw Object.assign(new Error("manage.admin-upsert-card requires board_id"),{statusCode:400});if(!w)throw Object.assign(new Error("manage.admin-upsert-card requires card_id"),{statusCode:400});if(C!==e)throw Object.assign(new Error(`Unknown board_id: ${C}`),{statusCode:400});return c().adminUpsertCard({cardId:w,candidateCardContent:chunkLPXVVMQT_cjs.c(r,"candidate_card_content")})}}}function pe(s){let{boardContexts:e,cardOwnerIndex:n,cardContextForCard:c,readStatusSnapshot:h,readDataObjectsByToken:v,readCardRuntimeArtifacts:I,readCardFromStore:r,readCardDefinitions:C,processAccumulatedLaneInternal:w,reportSourceFetched:u,reportSourceFetchFailure:g,uploadCardFile:b,chatStorePublic:y,serverUrl:k,apiBasePath:f}=s;function i(){return e[0]??null}function m(){return {async status(){let a=await h();return a==null?{status:"fail",error:"Board status is unavailable"}:{status:"success",data:a}},async getOutputsDataObject(a){let t=a?.params?.key;return t?{status:"success",data:(await v())[t]}:{status:"fail",error:"getOutputsDataObject requires params.key"}},async getOutputsComputedValues(a){let t=a?.params?.key;return t?{status:"success",data:(await I())[t]?.computed_values}:{status:"fail",error:"getOutputsComputedValues requires params.key"}},async getOutputsFetchedSources(a){let t=a?.params?.key;if(!t)return {status:"fail",error:"getOutputsFetchedSources requires params.key"};let o=c(t)??i();return o?o.boardOps.getOutputsFetchedSources({params:{key:t}}):{status:"fail",error:"Board context is unavailable"}},async removeCard(a){let t=a?.params?.id;if(!t)return {status:"fail",error:"removeCard requires params.id"};let o=c(t)??i();return o?o.boardOps.removeCard({params:{id:t}}):{status:"fail",error:"Board context is unavailable"}},async cardRefreshedNotify(a){let t=a?.params?.cardId;if(!t)return {status:"fail",error:"cardRefreshedNotify requires params.cardId"};let o=c(t)??i();return o?o.boardOps.cardRefreshedNotify({params:{cardId:t}}):{status:"fail",error:"Board context is unavailable"}},async upsertCard(a){let t=a?.params?.cardId;if(!t)return {status:"fail",error:"upsertCard requires params.cardId"};let o=c(t)??i();if(!o)return {status:"fail",error:"Board context is unavailable"};let R=await o.boardOps.upsertCard({params:{cardId:t,restart:a.params.restart===true}});if(R.status!=="success")return R;if(chunkBQUQTOPB_cjs.a(o.boardAdapter)){let P=await w(true);if(P.status!=="success")return P}return R}}}function _(){let a=()=>{let t=i();if(!t?.nonCore)throw new Error("Board non-core adapter is not configured for MCP preflight/discovery tools");return t.nonCore};return {describeTaskExecutorCapabilities(t){return a().describeTaskExecutorCapabilities(t)},validateCardPreflight(t){return a().validateCardPreflight(t)},evalCardCompute(t){return a().evalCardCompute(t)},probeSourcePreflight(t){return a().probeSourcePreflight(t)},runSourcePreflight(t){return a().runSourcePreflight(t)},simulateCardCycle(t){return a().simulateCardCycle(t)}}}function d(){return {async get(a){let t=typeof a.params?.id=="string"?a.params.id:void 0;if(t){let o=await r(t);return o?{status:"success",data:{cards:[o]}}:{status:"success",data:{cards:[]}}}return {status:"success",data:{cards:await C()}}},async set(a){let t=a.body;if(t==null)return {status:"fail",error:"set requires a body (card object or array of cards)"};let o=Array.isArray(t)?t:[t];for(let R of o){let P=R,A=typeof P.id=="string"?P.id:"";if(!A)return {status:"fail",error:"each card must have a string `id` field"};let E=n.get(A)??0,N=e[E]??i();if(!N)return {status:"fail",error:"Board context is unavailable"};let T=await N.cardStoreOps.set({body:P});if(T.status!=="success")return T;n.set(A,E);}return {status:"success",data:{count:o.length}}},async del(a){let t=[a.params?.id,...a.body?.ids??[]].filter(o=>typeof o=="string"&&!!o);if(t.length===0)return {status:"fail",error:"del requires body.ids (string[]) or params.id"};for(let o of t){let R=c(o)??i();if(!R)return {status:"fail",error:"Board context is unavailable"};let P=await R.cardStoreOps.del({params:{id:o}});if(P.status!=="success")return P;n.delete(o);}return {status:"success",data:{count:t.length}}},async patch(a){let t=typeof a.params?.id=="string"?a.params.id:void 0,o=typeof a.params?.path=="string"?a.params.path:void 0;if(!t||!o)return {status:"fail",error:"patch requires params.id and params.path"};let R=c(t)??i();return R?R.cardStoreOps.patch(a):{status:"fail",error:"Board context is unavailable"}},async appendFiles(a){let t=typeof a.params?.id=="string"?a.params.id:void 0;if(!t)return {status:"fail",error:"appendFiles requires params.id"};let o=c(t)??i();return o?o.cardStoreOps.appendFiles(a):{status:"fail",error:"Board context is unavailable"}}}}function l(){return chunk7QZ267XP_cjs.a({board:m(),nonCore:_(),cardStore:d(),chatStore:y,processAccumulated:()=>w(true),sourceFetchDone:({token:a,ref:t})=>u(a,t),sourceFetchFailed:({token:a,reason:t})=>g(a,t),uploadCardFile({cardId:a,fileName:t,contentType:o,bytes:R,suppressChatRecordWrite:P}){return b(a,t,o,R,{inChat:true,...P===true?{suppressChatRecordWrite:true}:{}})},buildFileDownloadUrl({cardId:a,fileIdx:t,storedName:o}){let R=`${k||""}${f}/cards/${encodeURIComponent(a)}/files/${t}`;return o?`${R}?sn=${encodeURIComponent(o)}`:R},readFetchedSourceJsonByRef({cardId:a,ref:t}){let o=c(a)??i();if(!o||chunkBQUQTOPB_cjs.a(o.boardAdapter))return null;let A=o.boardAdapter.resolveBlob(chunkVQCIOKJV_cjs.b(t)).trim();return A?JSON.parse(A):null}})}return {mcpBoardFacade:m,mcpNonCoreFacade:_,mcpCardStoreFacade:d,createMcpFacade:l}}exports.a=W;exports.b=V;exports.c=H;exports.d=j;exports.e=B;exports.f=q;exports.g=D;exports.h=Q;exports.i=ee;exports.j=re;exports.k=se;exports.l=oe;exports.m=de;exports.n=pe;//# sourceMappingURL=chunk-OJ2CAQ4C.cjs.map
2
+ //# sourceMappingURL=chunk-OJ2CAQ4C.cjs.map