yaml-flow 8.6.1 → 8.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/browser/asset-integrity.json +3 -3
  2. package/examples/board/demo-shell-with-server.html +2 -2
  3. package/examples/board/doc.html +2 -2
  4. package/examples/board/server/board-server.js +544 -45
  5. package/examples/board/server-config.json +2 -1
  6. package/examples/board/test/server-http-test.js +12 -4
  7. package/examples/board-local/demo-shell-localstorage.html +3 -3
  8. package/lib/{artifacts-store-lib-CLOtsiav.d.cts → artifacts-store-lib-BR-Samty.d.cts} +1 -1
  9. package/lib/{artifacts-store-lib-C1rtrkxm.d.ts → artifacts-store-lib-DT7XlWUL.d.ts} +1 -1
  10. package/lib/artifacts-store-public.d.cts +3 -3
  11. package/lib/artifacts-store-public.d.ts +3 -3
  12. package/lib/board-live-cards-mcp.cjs +1 -1
  13. package/lib/board-live-cards-mcp.d.cts +56 -23
  14. package/lib/board-live-cards-mcp.d.ts +56 -23
  15. package/lib/board-live-cards-mcp.js +1 -1
  16. package/lib/board-live-cards-node.cjs +8 -8
  17. package/lib/board-live-cards-node.d.cts +39 -21
  18. package/lib/board-live-cards-node.d.ts +39 -21
  19. package/lib/board-live-cards-node.js +8 -8
  20. package/lib/{board-live-cards-public-CBVjm327.d.ts → board-live-cards-public-BMUIPOrc.d.ts} +67 -42
  21. package/lib/board-live-cards-public-async-DKZqbJVU.d.ts +256 -0
  22. package/lib/board-live-cards-public-async-dMWNbWq6.d.cts +256 -0
  23. package/lib/{board-live-cards-public-CPJy-aGW.d.cts → board-live-cards-public-wkNmBIRC.d.cts} +67 -42
  24. package/lib/board-live-cards-public.cjs +1 -1
  25. package/lib/board-live-cards-public.d.cts +2 -2
  26. package/lib/board-live-cards-public.d.ts +2 -2
  27. package/lib/board-live-cards-public.js +1 -1
  28. package/lib/board-live-cards-server-runtime.cjs +1 -1
  29. package/lib/board-live-cards-server-runtime.d.cts +7 -6
  30. package/lib/board-live-cards-server-runtime.d.ts +7 -6
  31. package/lib/board-live-cards-server-runtime.js +1 -1
  32. package/lib/board-worker-adapter.cjs +4 -3
  33. package/lib/board-worker-adapter.d.cts +24 -14
  34. package/lib/board-worker-adapter.d.ts +24 -14
  35. package/lib/board-worker-adapter.js +4 -3
  36. package/lib/card-store-public.d.cts +2 -2
  37. package/lib/card-store-public.d.ts +2 -2
  38. package/lib/{chat-storage-lib-CKylihjm.d.cts → chat-storage-lib-BIUbE-fM.d.cts} +1 -1
  39. package/lib/{chat-storage-lib-Bce-xx6l.d.ts → chat-storage-lib-BlG-sobS.d.ts} +1 -1
  40. package/lib/chat-store-public.d.cts +3 -3
  41. package/lib/chat-store-public.d.ts +3 -3
  42. package/lib/{chunk-CWREBRXS.js → chunk-BQS3EIEK.js} +3 -3
  43. package/lib/{chunk-LDAP75GN.js → chunk-CIAJNUR4.js} +2 -2
  44. package/lib/chunk-GJJMEAVN.cjs +2 -0
  45. package/lib/chunk-GLIX37VG.cjs +8 -0
  46. package/lib/chunk-H5HBXPOI.cjs +3 -0
  47. package/lib/chunk-HEEDJEKM.js +2 -0
  48. package/lib/chunk-LRVAVWAG.js +8 -0
  49. package/lib/chunk-MLVTJASJ.js +2 -0
  50. package/lib/chunk-N6P2JW4W.js +3 -0
  51. package/lib/chunk-OEFTOO47.cjs +3 -0
  52. package/lib/chunk-PBCDDO4V.cjs +2 -0
  53. package/lib/{chunk-I4WH5U5D.cjs → chunk-PMUSJQSR.cjs} +2 -2
  54. package/lib/chunk-SCWHDI3I.js +2 -0
  55. package/lib/{chunk-UVE65IPR.cjs → chunk-SFVO2LB2.cjs} +3 -3
  56. package/lib/{chunk-5DB54ZX2.cjs → chunk-U2N6MCD5.cjs} +2 -2
  57. package/lib/chunk-VMW4Z6EF.js +3 -0
  58. package/lib/chunk-WOALA3V5.cjs +2 -0
  59. package/lib/{chunk-LBMEVV4U.js → chunk-XQRNDX4Q.js} +2 -2
  60. package/lib/cloud-storage.cjs +2 -0
  61. package/lib/cloud-storage.d.cts +177 -0
  62. package/lib/cloud-storage.d.ts +177 -0
  63. package/lib/cloud-storage.js +2 -0
  64. package/lib/execution-refs.cjs +1 -1
  65. package/lib/execution-refs.js +1 -1
  66. package/lib/index.cjs +2 -2
  67. package/lib/index.d.cts +1 -1
  68. package/lib/index.d.ts +1 -1
  69. package/lib/index.js +1 -1
  70. package/lib/{types-DRl0Hy_p.d.cts → queue-lane-registry-BPKWWgd4.d.cts} +66 -14
  71. package/lib/{types-BuK2UMxk.d.ts → queue-lane-registry-Be6c0ftj.d.ts} +66 -14
  72. package/lib/server-runtime/index.cjs +1 -1
  73. package/lib/server-runtime/index.d.cts +18 -7
  74. package/lib/server-runtime/index.d.ts +18 -7
  75. package/lib/server-runtime/index.js +1 -1
  76. package/lib/step-machine-public/index.cjs +1 -1
  77. package/lib/step-machine-public/index.d.cts +1 -1
  78. package/lib/step-machine-public/index.d.ts +1 -1
  79. package/lib/step-machine-public/index.js +1 -1
  80. package/lib/{storage-interface-Ct-C4tlz.d.cts → storage-interface-BFiD3kyB.d.cts} +11 -1
  81. package/lib/{storage-interface-Ct-C4tlz.d.ts → storage-interface-BFiD3kyB.d.ts} +11 -1
  82. package/lib/stores/index.cjs +1 -1
  83. package/lib/stores/index.d.cts +1 -1
  84. package/lib/stores/index.d.ts +1 -1
  85. package/lib/stores/index.js +1 -1
  86. package/lib/stores/kv.d.cts +1 -1
  87. package/lib/stores/kv.d.ts +1 -1
  88. package/package.json +6 -1
  89. package/lib/chunk-6APH25VI.js +0 -2
  90. package/lib/chunk-KNFFDVLD.cjs +0 -2
  91. package/lib/chunk-LVNQCE5X.cjs +0 -3
  92. package/lib/chunk-M7EQRS6W.js +0 -3
  93. package/lib/chunk-NJJ7WEDT.cjs +0 -2
  94. package/lib/chunk-P64UKI3L.cjs +0 -8
  95. package/lib/chunk-Q6VSL327.js +0 -8
  96. package/lib/chunk-VCCTAUIG.js +0 -2
@@ -1,12 +1,12 @@
1
- import {a as a$3,c}from'./chunk-6APH25VI.js';export{c as createArtifactsStore,e as createCardFileMetadataStore,a as createChatStorage,d as createFileArtifactsStore,b as createInMemoryChatStorage}from'./chunk-6APH25VI.js';import {a as a$1}from'./chunk-LDAP75GN.js';export{c as BOARD_GRAPH_KEY,d as EMPTY_CONFIG,b as SNAPSHOT_SCHEMA_VERSION_V1,f as createBoardLiveCardsNonCorePublic,e as createBoardLiveCardsPublic,a as createCardStore}from'./chunk-M7EQRS6W.js';export{a as executionRefFromScriptPath,c as parseExecutionRef,b as serializeExecutionRef}from'./chunk-LBMEVV4U.js';import {a as a$2,b}from'./chunk-CWREBRXS.js';export{b as parseRef,a as serializeRef}from'./chunk-CWREBRXS.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';export{a as createBoardLiveCardsMcp}from'./chunk-VCCTAUIG.js';import'./chunk-JMDHDY6M.js';import {d}from'./chunk-VLBB3D6B.js';export{a as createCardStorePublic}from'./chunk-KBELAKIY.js';export{a as createArtifactsStorePublic}from'./chunk-X3LC4LII.js';import'./chunk-MNEOJWPS.js';import'./chunk-FW4363Y4.js';import {spawnSync,spawn,execFile,execFileSync}from'child_process';import*as a from'fs';import*as se from'os';import*as h from'path';import*as ve from'net';import {fileURLToPath}from'url';import {randomUUID,createHash}from'crypto';import {createRequire}from'module';import {lockSync}from'proper-lockfile';function k(...e){return h.join(...e)}function be(e){return h.isAbsolute(e)}function Q(){return randomUUID()}function Ae(e){return createHash("sha256").update(e).digest("hex")}function Ee(e){return h.dirname(fileURLToPath(e))}function pt(e){if(typeof e=="object"&&e!==null){let{command:r,args:s=[],...o}=e,u=ke(r,s);return {...o,command:u.command,args:u.args}}let t=Te(e);if(t.length===0)throw new Error(`Empty command spec: ${JSON.stringify(e)}`);return ke(t[0],t.slice(1))}function ke(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 Te(e){let t=[],r="",s=null;for(let o of e.trim()){if(s){o===s?s=null:r+=o;continue}if(o==='"'||o==="'"){s=o;continue}if(/\s/.test(o)){r&&(t.push(r),r="");continue}r+=o;}if(s)throw new Error(`Unterminated quote in command: ${e}`);return r&&t.push(r),t}function ie(e){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(e)}function Be(e,t){let{command:r,args:s=[],cwd:o,env:u,timeoutMs:i}=e;return execFileSync(r,s,{shell:ie(r),timeout:i,encoding:t?.encoding??"utf-8",cwd:o,windowsHide:true,env:u?{...process.env,...u}:void 0,input:t?.input})}function gt(e,t){let{command:r,args:s=[],cwd:o,env:u,timeoutMs:i=3e4}=e;execFile(r,s,{shell:ie(r),encoding:"utf8",windowsHide:true,timeout:i,maxBuffer:10*1024*1024,cwd:o,env:u?{...process.env,...u}:void 0},(l,g,c)=>t(l??null,g,c));}h.join(se.tmpdir(),".board-live-cards-git-bash-cache.json");function H(e){let{command:t,args:r=[]}=e;if(process.platform==="win32"){spawn(t,r,{stdio:"ignore",windowsHide:true,shell:ie(t)}).unref();return}spawn(t,r,{detached:true,stdio:"ignore"}).unref();}function ae(e,t,r){let s=h.join(e,"board-live-cards-cli.js");if(a.existsSync(s))return {cmd:process.execPath,args:[s,t,...r]};let o=h.join(e,"board-live-cards-cli.ts"),i=[h.join(e,"..","..","..","node_modules","tsx","dist","cli.mjs"),h.join(e,"..","..","node_modules","tsx","dist","cli.mjs"),h.join(e,"..","..","..","node_modules",".bin","tsx"),h.join(e,"..","..","node_modules",".bin","tsx")].find(g=>a.existsSync(g));return a.existsSync(o)&&i?{cmd:process.execPath,args:[i,o,t,...r]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",o,t,...r]}}function ce(e){let t=h.join(e,"board-live-cards-cli.mjs");if(a.existsSync(t))return t;let r=h.join(e,"..","..","..","dev","board-live-cards-cli.js");if(a.existsSync(r))return r;let s=h.join(e,"..","..","dev","board-live-cards-cli.js");if(a.existsSync(s))return s;let o=h.join(e,"board-live-cards-cli.js");if(a.existsSync(o))return o;throw new Error(`resolveBoardCliCallbackTarget: cannot find callback target in ${e} (expected dev/board-live-cards-cli.js wrapper, ${o}, or ${t})`)}function Ie(e,t,r){let s=["--base-ref",a$2(t)];r&&s.push("--notify-channel",r);let{cmd:o,args:u}=ae(e,"process-accumulated-events",s);H({command:o,args:u});}function mt(e){return process.platform==="win32"?`\\\\.\\pipe\\${e}`:h.join(se.tmpdir(),`${e}.sock`)}var D=new Map;function Ce(e,t,r){if(t.length===0)return;let s=t.map(l=>JSON.stringify(l)).join(`
1
+ import {a as a$3,c}from'./chunk-MLVTJASJ.js';export{c as createArtifactsStore,e as createCardFileMetadataStore,a as createChatStorage,d as createFileArtifactsStore,b as createInMemoryChatStorage,f as createQueueLaneRegistry}from'./chunk-MLVTJASJ.js';import {a as a$1}from'./chunk-CIAJNUR4.js';import'./chunk-HEEDJEKM.js';import {g,y as y$1}from'./chunk-N6P2JW4W.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-N6P2JW4W.js';export{a as executionRefFromScriptPath,c as parseExecutionRef,b as serializeExecutionRef}from'./chunk-XQRNDX4Q.js';import {a as a$2,b as b$1}from'./chunk-BQS3EIEK.js';export{b as parseRef,a as serializeRef}from'./chunk-BQS3EIEK.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';export{a as createBoardLiveCardsMcp}from'./chunk-SCWHDI3I.js';import'./chunk-JMDHDY6M.js';import {d}from'./chunk-VLBB3D6B.js';import'./chunk-MNEOJWPS.js';export{a as createCardStorePublic}from'./chunk-KBELAKIY.js';export{a as createArtifactsStorePublic}from'./chunk-X3LC4LII.js';import'./chunk-FW4363Y4.js';import {spawnSync,spawn,execFile,execFileSync}from'child_process';import*as a from'fs';import*as Ee from'os';import*as y from'path';import*as Te from'net';import {fileURLToPath}from'url';import {randomUUID,createHash}from'crypto';import {createRequire}from'module';import {lockSync}from'proper-lockfile';function b(...e){return y.join(...e)}function Be(e){return y.isAbsolute(e)}function X(){return randomUUID()}function Ie(e){return createHash("sha256").update(e).digest("hex")}function Ce(e){return y.dirname(fileURLToPath(e))}function wt(e){if(typeof e=="object"&&e!==null){let{command:r,args:n=[],...o}=e,s=Ae(r,n);return {...o,command:s.command,args:s.args}}let t=Fe(e);if(t.length===0)throw new Error(`Empty command spec: ${JSON.stringify(e)}`);return Ae(t[0],t.slice(1))}function Ae(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 Fe(e){let t=[],r="",n=null;for(let o of e.trim()){if(n){o===n?n=null:r+=o;continue}if(o==='"'||o==="'"){n=o;continue}if(/\s/.test(o)){r&&(t.push(r),r="");continue}r+=o;}if(n)throw new Error(`Unterminated quote in command: ${e}`);return r&&t.push(r),t}function Me(e){return process.platform==="win32"&&/\.(cmd|bat)$/i.test(e)}function je(e,t){let{command:r,args:n=[],cwd:o,env:s,timeoutMs:u}=e;return execFileSync(r,n,{shell:Me(r),timeout:u,encoding:t?.encoding??"utf-8",cwd:o,windowsHide:true,env:s?{...process.env,...s}:void 0,input:t?.input})}function kt(e,t){let{command:r,args:n=[],cwd:o,env:s,timeoutMs:u=3e4}=e;execFile(r,n,{shell:Me(r),encoding:"utf8",windowsHide:true,timeout:u,maxBuffer:10*1024*1024,cwd:o,env:s?{...process.env,...s}:void 0},(l,g,i)=>t(l??null,g,i));}function $e(e,t,r){let n=y.join(e,"board-live-cards-cli.js");if(a.existsSync(n))return {cmd:process.execPath,args:[n,t,...r]};let o=y.join(e,"board-live-cards-cli.ts"),u=[y.join(e,"..","..","..","node_modules","tsx","dist","cli.mjs"),y.join(e,"..","..","node_modules","tsx","dist","cli.mjs"),y.join(e,"..","..","..","node_modules",".bin","tsx"),y.join(e,"..","..","node_modules",".bin","tsx")].find(g=>a.existsSync(g));return a.existsSync(o)&&u?{cmd:process.execPath,args:[u,o,t,...r]}:{cmd:process.platform==="win32"?"npx.cmd":"npx",args:["tsx",o,t,...r]}}function Pe(e){let t=y.join(e,"board-live-cards-cli.mjs");if(a.existsSync(t))return t;let r=y.join(e,"..","..","..","dev","board-live-cards-cli.js");if(a.existsSync(r))return r;let n=y.join(e,"..","..","dev","board-live-cards-cli.js");if(a.existsSync(n))return n;let o=y.join(e,"board-live-cards-cli.js");if(a.existsSync(o))return o;throw new Error(`resolveBoardCliCallbackTarget: cannot find callback target in ${e} (expected dev/board-live-cards-cli.js wrapper, ${o}, or ${t})`)}function vt(e){return process.platform==="win32"?`\\\\.\\pipe\\${e}`:y.join(Ee.tmpdir(),`${e}.sock`)}var Z=new Map;function Le(e,t,r){if(t.length===0)return;let n=t.map(l=>JSON.stringify(l)).join(`
2
2
  `)+`
3
- `,o=D.get(e);if(o&&!o.socket.destroyed){o.ready?o.socket.write(s):o.queue.push(s);return}let u=mt(e),i=ve.createConnection(u);o={socket:i,ready:false,queue:[s]},D.set(e,o),i.on("connect",()=>{o.ready=true;for(let l of o.queue)i.write(l);o.queue.length=0;}),i.on("error",l=>{r?.(`[named-pipe publish] ${u}: ${l instanceof Error?l.message:String(l)}`),D.delete(e);}),i.on("close",()=>{D.delete(e);});}function je(){return {executeSync(e,t,r){return Be({command:e,args:t,cwd:r?.cwd,timeoutMs:r?.timeout,env:r?.env},{encoding:r?.encoding,input:r?.input})},executeAsync(e,t,r){gt({command:e,args:t},r);},resolveInvocation(e,t){let r=pt({command:e,args:t});return {cmd:r.command,args:r.args??[]}},splitCommand:Te,spawnDetached(e,t){H({command:e,args:t});}}}var yt=createRequire(import.meta.url);function Rt(e){return typeof e=="object"?e:b(e)}function $e(e){let t=h.basename(String(e||"").trim());if(!t)throw new Error(`resolveYamlFlowCliPath: expected non-empty cli file name, got ${JSON.stringify(e)}`);let r=h.dirname(yt.resolve("yaml-flow/package.json")),s=t.replace(/\.[^.]+$/,""),o=h.join(r,"cli","bundled",`${s}.mjs`);if(a.existsSync(o))return o;let u=h.join(r,"cli","node",t);if(a.existsSync(u))return u;throw new Error(`resolveYamlFlowCliPath: could not find ${t} under cli/bundled or cli/node in ${r}`)}function C(e){let t=Rt(e);return t.kind==="yaml-flow-cli"?$e(t.value):t.value}function St(e,t){let r=C(e);switch(r){case "source-cli-task-executor":{let s=h.join(t,"source-cli-task-executor.js");if(a.existsSync(s))return {command:process.execPath,args:[s]};let o=h.join(t,"source-cli-task-executor.ts"),u=h.join(t,"..","..","node_modules","tsx","dist","cli.mjs"),i=h.join(t,"..","..","node_modules",".bin","tsx"),l=a.existsSync(u)?u:i;return a.existsSync(o)&&a.existsSync(l)?{command:process.execPath,args:[l,o]}:{command:process.execPath,args:[s]}}case "board-live-cards":{let{cmd:s,args:o}=ae(t,"_",[]);return {command:s,args:o}}default:throw new Error(`resolveBuiltIn: unknown built-in name "${r}". Supported: source-cli-task-executor, board-live-cards`)}}function Pe(e,t){if(e.howToRun==="built-in"){let{command:s,args:o}=St(e.whatToRun,t);return {command:s,baseArgs:o}}let r=(typeof e.whatToRun=="object",C(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 xt(e,t){let r=[e.subcommand];return e.inRef&&r.push("--in-ref",e.inRef),e.outRef&&r.push("--out-ref",e.outRef),e.errRef&&r.push("--err-ref",e.errRef),t&&r.push("--extra",Buffer.from(JSON.stringify(t)).toString("base64")),r}function K(e,t){return Pe(e,t)}var ue=new Map;function wt(e,t){let r=String(e||"").trim();if(!r)throw new Error("registerInProcessExecutionHandler: key is required");ue.set(r,t);}function kt(e){let t=String(e||"").trim();t&&ue.delete(t);}function Me(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),s=r[r.length-1];return JSON.parse(s)}}function qe(e,t){return {...t,whatToRun:C(e.whatToRun),...e.extra?{extra:e.extra}:{}}}function de(e,t,r="invokeExecutionRef"){return a$1(e,t,r)}function Oe(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 s=e,o=s.status==="success"?"success":s.status==="fail"?"failure":s.status,u=s.data&&typeof s.data=="object"&&!Array.isArray(s.data)?s.data:s.data===void 0?{}:{stdout:s.data};return {result:o,data:u,...typeof s.error=="string"?{error:s.error}:{},...t||{}}}return {result:"success",data:e&&typeof e=="object"&&!Array.isArray(e)?e:{stdout:e},...t||{}}}function I(e){return {result:"failure",data:{error:e}}}function $(e,t,r){let s=r?.label??"invokeExecutionRefSync",o=r?.cliDir??r?.cwd??process.cwd(),u;try{u=de(e.argsMassaging,qe(e,t),s);}catch(d){let f=d instanceof Error?d.message:String(d);return I(f)}let i;try{i=K(e,o);}catch(d){let f=d instanceof Error?d.message:String(d);return I(`[${s}] ref resolution failed: ${f}`)}let l=[...i.baseArgs,...u.cmdArgs??[]],g=JSON.stringify(u.stdin??t),c=je(),n;try{n=c.executeSync(i.command,l,{timeout:r?.timeoutMs??3e4,encoding:"utf-8",cwd:r?.cwd,input:g});}catch(d){let f=d,m=(f.stderr?String(f.stderr):"").trim(),p=typeof f.status=="number"?f.status:"unknown",y=m||f.message;return I(`[${s}] ref exited with status ${p}${y?`: ${y}`:""}`)}try{return Oe(Me(n))}catch{return {result:"success",data:{stdout:n.trim()}}}}async function Fe(e,t,r){let s=r?.label??"invokeExecutionRef",o;try{o=de(e.argsMassaging,qe(e,t),s);}catch(d){let f=d instanceof Error?d.message:String(d);return I(f)}let u=C(e.whatToRun),i=o.headers?{"Content-Type":"application/json",...o.headers}:{"Content-Type":"application/json"},l=o.url??u,g;if(e.howToRun==="http:get"){let d=o.body&&typeof o.body=="object"&&!Array.isArray(o.body)?o.body:t,f=new URLSearchParams(Object.entries(d).filter(([,m])=>m!=null).map(([m,p])=>[m,String(p)]));f.size>0&&(l=`${l}${l.includes("?")?"&":"?"}${f.toString()}`);}else g=JSON.stringify(o.body??t);let c={method:e.howToRun==="http:get"?"GET":"POST",headers:i,body:g},n=0;for(;;)try{let d=await fetch(l,c);if(!d.ok){let y=await d.text().catch(()=>"");return I(`[${s}] HTTP ${d.status}${y?`: ${y}`:""}`)}let f={};d.headers.forEach((y,R)=>{f[R]=y;});let m=new Uint8Array(await d.arrayBuffer());if(m.byteLength===0)return {result:"success",data:{},headers:f};let p=new TextDecoder().decode(m);try{return Oe(Me(p),{headers:f})}catch{return {result:"success",data:{stdout:p},headers:f}}}catch(d){let f=d?.cause,m=f&&typeof f=="object"&&"code"in f?String(f.code||""):"";if((m==="ECONNRESET"||m==="UND_ERR_SOCKET")&&n===0){n+=1;continue}let y=d instanceof Error?d.message:String(d),R=f instanceof Error?`${f.name}: ${f.message}${m?` [${m}]`:""}`:f?String(f):"",S=o.url??u??"",v=`${y}${R?` (cause: ${R})`:""}${S?` url=${S}`:""}`;return I(`[${s}] ${v}`)}}async function vt(e,t,r){let s=r?.label??"invokeExecutionRef",o=C(e.whatToRun).trim();if(!o)return I(`[${s}] in-process-loop requires a non-empty handler key`);let u=ue.get(o);if(!u)return I(`[${s}] no in-process handler registered for: ${o}`);try{return await u(e,t,r)}catch(i){let l=i instanceof Error?i.message:String(i);return I(`[${s}] ${l}`)}}var bt={"local-node":async(e,t,r)=>$(e,t,r),"local-python":async(e,t,r)=>$(e,t,r),"local-process":async(e,t,r)=>$(e,t,r),"built-in":async(e,t,r)=>$(e,t,r),"http:post":Fe,"http:get":Fe,"in-process-loop":vt},At={"local-node":$,"local-python":$,"local-process":$,"built-in":$};async function L(e,t,r){let s=r?.transports?.[e.howToRun]??bt[e.howToRun];return s?s(e,t,r):I(`[${r?.label??"invokeExecutionRef"}] unsupported howToRun: ${e.howToRun}`)}function le(e,t,r){let s=r?.syncTransports?.[e.howToRun]??At[e.howToRun];return s?s(e,t,r):I(`[${r?.label??"invokeExecutionRefSync"}] unsupported sync howToRun: ${e.howToRun}`)}function Et(e){return {invoke(t,r){return L(t,r,e)},invokeSync(t,r){return le(t,r,e)}}}function Tt(e,t,r){return le(e,t,r)}function Le(e,t,r){if(e.howToRun==="http:post"||e.howToRun==="http:get"||e.howToRun==="in-process-loop"){L(e,t,{cliDir:r,cwd:process.cwd(),label:"dispatchTaskExecutorDetached"}).then(l=>{if(l.result!=="success"){let g=typeof l.data?.error=="string"?l.data.error:l.error;console.error(`[dispatchTaskExecutorDetached] dispatch failed: ${g||l.result}`);}}).catch(l=>{console.error(`[dispatchTaskExecutorDetached] async dispatch failed: ${l.message}`);});return}let{command:o,baseArgs:u}=Pe(e,r),i=xt(t,e.extra);H({command:o,args:[...u,...i]});}function fe(e){return {messageId:e.id,enqueuedAt:e.enqueuedAt,attempt:e.attempt,request:e.body}}function Bt(e){return {...fe(e),leaseToken:e.leaseToken,leaseExpiresAt:e.leaseExpiresAt}}function It(e){return {...fe(e),reason:e.reason}}function U(e){return {enqueueRequest(t){return e.enqueue(t).id},leaseRequests(t){return e.lease(t).map(Bt)},ackRequest(t,r){return e.ack(t,r)},nackRequest(t,r,s){return e.nack(t,r,s)},peekActive(){return e.peekActive().map(fe)},peekDeadLetter(){return e.peekDeadLetter().map(It)}}}function E(e,t){if(process.platform!=="win32"){a.renameSync(e,t);return}let r=[10,20,40,80,160];for(let s=0;s<=r.length;s++)try{a.renameSync(e,t);return}catch(o){let u=o.code;if((u==="EPERM"||u==="EBUSY")&&s<r.length){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,r[s]);continue}throw o}}function W(e){function t(o){return h.join(e,...o.split("/"))}function r(o){return h.relative(e,o).replace(/\\/g,"/")}function s(o,u){if(a.existsSync(o))for(let i of a.readdirSync(o,{withFileTypes:true})){let l=h.join(o,i.name);if(i.isDirectory()){s(l,u);continue}i.isFile()&&u.push(r(l));}}return {read(o){let u=t(o);if(!a.existsSync(u))return null;try{return a.readFileSync(u,"utf-8")}catch{return null}},write(o,u){let i=t(o),l=`${i}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(h.dirname(i),{recursive:true}),a.writeFileSync(l,u,"utf-8"),E(l,i);},exists(o){return a.existsSync(t(o))},remove(o){let u=t(o);try{a.existsSync(u)&&a.unlinkSync(u);}catch{}},readBytes(o){let u=t(o);if(!a.existsSync(u))return null;try{return new Uint8Array(a.readFileSync(u))}catch{return null}},writeBytes(o,u){let i=t(o),l=`${i}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(h.dirname(i),{recursive:true}),a.writeFileSync(l,Buffer.from(u)),E(l,i);},listKeys(o){let u=[];s(e,u);let i=u.sort();return o?i.filter(l=>l.startsWith(o)):i},stat(o){let u=t(o);if(!a.existsSync(u))return null;try{let i=a.statSync(u);return {key:o,size:Number(i.size||0),updatedAt:new Date(i.mtimeMs).toISOString()}}catch{return null}},keyRef(o){return {kind:"fs-path",value:t(o)}}}}function he(){return {read(e){if(!a.existsSync(e))return null;try{return a.readFileSync(e,"utf-8")}catch{return null}},write(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(h.dirname(e),{recursive:true}),a.writeFileSync(r,t,"utf-8"),E(r,e);},exists(e){return a.existsSync(e)},remove(e){try{a.existsSync(e)&&a.unlinkSync(e);}catch{}},readBytes(e){if(!a.existsSync(e))return null;try{return new Uint8Array(a.readFileSync(e))}catch{return null}},writeBytes(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(h.dirname(e),{recursive:true}),a.writeFileSync(r,Buffer.from(t)),E(r,e);},stat(e){if(!a.existsSync(e))return null;try{let t=a.statSync(e);return {key:e,size:Number(t.size||0),updatedAt:new Date(t.mtimeMs).toISOString()}}catch{return null}},listKeys(e){return []}}}function N(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(h.dirname(e),{recursive:true}),a.writeFileSync(r,JSON.stringify(t,null,2),"utf-8"),E(r,e);}function _(e){if(!a.existsSync(e))return null;try{return JSON.parse(a.readFileSync(e,"utf-8"))}catch{return null}}function V(e){return a.existsSync(e)?a.readdirSync(e).filter(t=>t.endsWith(".json")).sort().map(t=>h.join(e,t)):[]}function Y(e){return {id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}}function Ft(e){return {...Y(e),leaseToken:String(e.leaseToken||""),leaseExpiresAt:String(e.leaseExpiresAt||"")}}function $t(e){return {...Y(e),reason:e.reason}}function X(e){let t=h.join(e,"active"),r=h.join(e,"leased"),s=h.join(e,"done"),o=h.join(e,"dead");for(let n of [t,r,s,o])a.mkdirSync(n,{recursive:true});function u(n){let d=String(n.enqueuedAt||new Date().toISOString()).replace(/[:.]/g,"-");return h.join(t,`${d}-${n.id}.json`)}function i(n){return h.join(r,`${n}.json`)}function l(n){return h.join(s,`${n}.json`)}function g(n){return h.join(o,`${n}.json`)}function c(){let n=Date.now();for(let d of V(r)){let f=_(d);if(!f?.leaseExpiresAt)continue;let m=Date.parse(f.leaseExpiresAt);if(Number.isNaN(m)||m>n)continue;let p={id:f.id,body:f.body,enqueuedAt:f.enqueuedAt,attempt:f.attempt};N(u(p),p);try{a.unlinkSync(d);}catch{}}}return {enqueue(n){let d={id:randomUUID(),body:n,enqueuedAt:new Date().toISOString(),attempt:0};return N(u(d),d),Y(d)},lease(n){c();let d=Math.max(1,Math.floor(n?.max??1)),f=Math.max(1,Math.floor(n?.visibilityMs??6e4)),m=[];for(let p of V(t)){if(m.length>=d)break;let y=_(p);if(!y)continue;let R=i(y.id);try{E(p,R);}catch{continue}let S={...y,attempt:(Number(y.attempt)||0)+1,leaseToken:randomUUID(),leaseExpiresAt:new Date(Date.now()+f).toISOString()};N(R,S),m.push(Ft(S));}return m},ack(n,d){let f=i(n),m=_(f);if(!m||m.leaseToken!==d)return false;try{E(f,l(n));}catch{return false}return true},nack(n,d,f){let m=i(n),p=_(m);if(!p||p.leaseToken!==d)return false;let y={id:p.id,body:p.body,enqueuedAt:p.enqueuedAt,attempt:p.attempt};f?.dead?(y.reason=f.reason,N(g(n),y)):N(u(y),y);try{a.unlinkSync(m);}catch{}return true},peekActive(n){return c(),V(t).map(d=>_(d)).filter(d=>!!d).map(Y)},peekDeadLetter(n){return V(o).map(d=>_(d)).filter(d=>!!d).map($t)}}}var pe="__scratch-marker",ge="__scratch-config.json",Pt=1440*60*1e3,Mt=720*60*1e3,qt=500;function _e(e,t){if(!e)return t;let r=e.replace(/[^A-Za-z0-9._-]/g,"_");return r.length>0?r:t}function J(e){a.mkdirSync(e,{recursive:true});let t=h.join(e,pe),r=h.join(e,ge),s=!a.existsSync(t);if(s)try{a.writeFileSync(t,`scratch-store
3
+ `,o=Z.get(e);if(o&&!o.socket.destroyed){o.ready?o.socket.write(n):o.queue.push(n);return}let s=vt(e),u=Te.createConnection(s);o={socket:u,ready:false,queue:[n]},Z.set(e,o),u.on("connect",()=>{o.ready=true;for(let l of o.queue)u.write(l);o.queue.length=0;}),u.on("error",l=>{r?.(`[named-pipe publish] ${s}: ${l instanceof Error?l.message:String(l)}`),Z.delete(e);}),u.on("close",()=>{Z.delete(e);});}function qe(){return {executeSync(e,t,r){return je({command:e,args:t,cwd:r?.cwd,timeoutMs:r?.timeout,env:r?.env},{encoding:r?.encoding,input:r?.input})},executeAsync(e,t,r){kt({command:e,args:t},r);},resolveInvocation(e,t){let r=wt({command:e,args:t});return {cmd:r.command,args:r.args??[]}},splitCommand:Fe}}function fe(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:n=>e.workerStore.nackRequest(r.messageId,r.leaseToken,n)}))},async handle(t){await e.handleRequest(t.args,t);},onError:e.onError}}function pe(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:n=>e.queueStorage.nack(r.id,r.leaseToken,n)}))},handle:e.handleMessage,onError:e.onError}}async function Oe(e,t){try{await e.handle(t.message,t),await t.ack();}catch(r){let n=t.attempt>=Math.max(1,Math.floor(e.maxAttempts??5));await t.nack({dead:n,reason:r instanceof Error?r.message:String(r)}),e.onError?.(r,t);}}function Qe(e){let t=Math.max(1,Math.floor(e.pollIntervalMs??250)),r=Math.max(1,Math.floor(e.visibilityMs??6e4)),n=Math.max(1,Math.floor(e.concurrency??1)),o=false,s=false;async function u(){if(!(o||s)){s=true;try{let g=await e.lease({max:n,visibilityMs:r});for(let i of g)await Oe(e,i);}finally{s=false;}}}let l=setInterval(()=>{u();},t);return typeof l.unref=="function"&&l.unref(),u(),()=>{o=true,clearInterval(l);}}async function bt(e){let t=Math.max(1,Math.floor(e.visibilityMs??6e4)),r=Math.max(1,Math.floor(e.concurrency??1)),n=await e.lease({max:r,visibilityMs:t});for(let o of n)await Oe(e,o);return n.length}async function ee(e,t){let r=Math.max(1,Math.floor(t?.maxPasses??256)),n=0;for(let o=0;o<r;o+=1){let s=await bt(e);if(n+=s,s<=0)return n}throw new Error(`drainQueueLaneToIdle exceeded ${r} passes for lane "${e.id}"`)}function At(e){let r=(Array.isArray(e)?e:e.lanes).map(n=>Qe(n));return ()=>{for(let n of r)n();}}var Tt=createRequire(import.meta.url);function Bt(e){return typeof e=="object"?e:b$1(e)}function Ne(e){let t=y.basename(String(e||"").trim());if(!t)throw new Error(`resolveYamlFlowCliPath: expected non-empty cli file name, got ${JSON.stringify(e)}`);let r=y.dirname(Tt.resolve("yaml-flow/package.json")),n=t.replace(/\.[^.]+$/,""),o=y.join(r,"cli","bundled",`${n}.mjs`);if(a.existsSync(o))return o;let s=y.join(r,"cli","node",t);if(a.existsSync(s))return s;throw new Error(`resolveYamlFlowCliPath: could not find ${t} under cli/bundled or cli/node in ${r}`)}function $(e){let t=Bt(e);return t.kind==="yaml-flow-cli"?Ne(t.value):t.value}function It(e,t){let r=$(e);switch(r){case "source-cli-task-executor":{let n=y.join(t,"source-cli-task-executor.js");if(a.existsSync(n))return {command:process.execPath,args:[n]};let o=y.join(t,"source-cli-task-executor.ts"),s=y.join(t,"..","..","node_modules","tsx","dist","cli.mjs"),u=y.join(t,"..","..","node_modules",".bin","tsx"),l=a.existsSync(s)?s:u;return a.existsSync(o)&&a.existsSync(l)?{command:process.execPath,args:[l,o]}:{command:process.execPath,args:[n]}}case "board-live-cards":{let{cmd:n,args:o}=$e(t,"_",[]);return {command:n,args:o}}default:throw new Error(`resolveBuiltIn: unknown built-in name "${r}". Supported: source-cli-task-executor, board-live-cards`)}}function Ct(e,t){if(e.howToRun==="built-in"){let{command:n,args:o}=It(e.whatToRun,t);return {command:n,baseArgs:o}}let r=(typeof e.whatToRun=="object",$(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 te(e,t){return Ct(e,t)}var ge=new Map;function Ft(e,t){let r=String(e||"").trim();if(!r)throw new Error("registerInProcessExecutionHandler: key is required");ge.set(r,t);}function Mt(e){let t=String(e||"").trim();t&&ge.delete(t);}function _e(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),n=r[r.length-1];return JSON.parse(n)}}function Je(e,t){return {...t,whatToRun:$(e.whatToRun),...e.extra?{extra:e.extra}:{}}}function me(e,t,r="invokeExecutionRef"){return a$1(e,t,r)}function De(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 n=e,o=n.status==="success"?"success":n.status==="fail"?"failure":n.status,s=n.data&&typeof n.data=="object"&&!Array.isArray(n.data)?n.data:n.data===void 0?{}:{stdout:n.data};return {result:o,data:s,...typeof n.error=="string"?{error:n.error}:{},...t||{}}}return {result:"success",data:e&&typeof e=="object"&&!Array.isArray(e)?e:{stdout:e},...t||{}}}function j(e){return {result:"failure",data:{error:e}}}function q(e,t,r){let n=r?.label??"invokeExecutionRefSync",o=r?.cliDir??r?.cwd??process.cwd(),s;try{s=me(e.argsMassaging,Je(e,t),n);}catch(d){let f=d instanceof Error?d.message:String(d);return j(f)}let u;try{u=te(e,o);}catch(d){let f=d instanceof Error?d.message:String(d);return j(`[${n}] ref resolution failed: ${f}`)}let l=[...u.baseArgs,...s.cmdArgs??[]],g=JSON.stringify(s.stdin??t),i=qe(),c;try{c=i.executeSync(u.command,l,{timeout:r?.timeoutMs??3e4,encoding:"utf-8",cwd:r?.cwd,input:g});}catch(d){let f=d,m=(f.stderr?String(f.stderr):"").trim(),S=typeof f.status=="number"?f.status:"unknown",h=m||f.message;return j(`[${n}] ref exited with status ${S}${h?`: ${h}`:""}`)}try{return De(_e(c))}catch{return {result:"success",data:{stdout:c.trim()}}}}async function We(e,t,r){let n=r?.label??"invokeExecutionRef",o;try{o=me(e.argsMassaging,Je(e,t),n);}catch(d){let f=d instanceof Error?d.message:String(d);return j(f)}let s=$(e.whatToRun),u=o.headers?{"Content-Type":"application/json",...o.headers}:{"Content-Type":"application/json"},l=o.url??s,g;if(e.howToRun==="http:get"){let d=o.body&&typeof o.body=="object"&&!Array.isArray(o.body)?o.body:t,f=new URLSearchParams(Object.entries(d).filter(([,m])=>m!=null).map(([m,S])=>[m,String(S)]));f.size>0&&(l=`${l}${l.includes("?")?"&":"?"}${f.toString()}`);}else g=JSON.stringify(o.body??t);let i={method:e.howToRun==="http:get"?"GET":"POST",headers:u,body:g},c=0;for(;;)try{let d=await fetch(l,i);if(!d.ok){let h=await d.text().catch(()=>"");return j(`[${n}] HTTP ${d.status}${h?`: ${h}`:""}`)}let f={};d.headers.forEach((h,k)=>{f[k]=h;});let m=new Uint8Array(await d.arrayBuffer());if(m.byteLength===0)return {result:"success",data:{},headers:f};let S=new TextDecoder().decode(m);try{return De(_e(S),{headers:f})}catch{return {result:"success",data:{stdout:S},headers:f}}}catch(d){let f=d?.cause,m=f&&typeof f=="object"&&"code"in f?String(f.code||""):"";if((m==="ECONNRESET"||m==="UND_ERR_SOCKET")&&c===0){c+=1;continue}let h=d instanceof Error?d.message:String(d),k=f instanceof Error?`${f.name}: ${f.message}${m?` [${m}]`:""}`:f?String(f):"",p=o.url??s??"",x=`${h}${k?` (cause: ${k})`:""}${p?` url=${p}`:""}`;return j(`[${n}] ${x}`)}}async function jt(e,t,r){let n=r?.label??"invokeExecutionRef",o=$(e.whatToRun).trim();if(!o)return j(`[${n}] in-process-loop requires a non-empty handler key`);let s=ge.get(o);if(!s)return j(`[${n}] no in-process handler registered for: ${o}`);try{return await s(e,t,r)}catch(u){let l=u instanceof Error?u.message:String(u);return j(`[${n}] ${l}`)}}var $t={"local-node":async(e,t,r)=>q(e,t,r),"local-python":async(e,t,r)=>q(e,t,r),"local-process":async(e,t,r)=>q(e,t,r),"built-in":async(e,t,r)=>q(e,t,r),"http:post":We,"http:get":We,"in-process-loop":jt},Pt={"local-node":q,"local-python":q,"local-process":q,"built-in":q};async function D(e,t,r){let n=r?.transports?.[e.howToRun]??$t[e.howToRun];return n?n(e,t,r):j(`[${r?.label??"invokeExecutionRef"}] unsupported howToRun: ${e.howToRun}`)}function ye(e,t,r){let n=r?.syncTransports?.[e.howToRun]??Pt[e.howToRun];return n?n(e,t,r):j(`[${r?.label??"invokeExecutionRefSync"}] unsupported sync howToRun: ${e.howToRun}`)}function Lt(e){return {invoke(t,r){return D(t,r,e)},invokeSync(t,r){return ye(t,r,e)}}}function qt(e,t,r){return ye(e,t,r)}function he(e){return {messageId:e.id,enqueuedAt:e.enqueuedAt,attempt:e.attempt,request:e.body}}function Ot(e){return {...he(e),leaseToken:e.leaseToken,leaseExpiresAt:e.leaseExpiresAt}}function Qt(e){return {...he(e),reason:e.reason}}function H(e){return {enqueueRequest(t){return e.enqueue(t).id},enqueueRequestIfAbsent:e.enqueueIfAbsent?(t,r)=>{let n=e.enqueueIfAbsent(t,r);return n?n.id:null}:void 0,leaseRequests(t){return e.lease(t).map(Ot)},ackRequest(t,r){return e.ack(t,r)},nackRequest(t,r,n){return e.nack(t,r,n)},peekActive(){return e.peekActive().map(he)},peekDeadLetter(){return e.peekDeadLetter().map(Qt)}}}function C(e,t){if(process.platform!=="win32"){a.renameSync(e,t);return}let r=[10,20,40,80,160];for(let n=0;n<=r.length;n++)try{a.renameSync(e,t);return}catch(o){let s=o.code;if((s==="EPERM"||s==="EBUSY")&&n<r.length){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,r[n]);continue}throw o}}function U(e){function t(o){return y.join(e,...o.split("/"))}function r(o){return y.relative(e,o).replace(/\\/g,"/")}function n(o,s){if(a.existsSync(o))for(let u of a.readdirSync(o,{withFileTypes:true})){let l=y.join(o,u.name);if(u.isDirectory()){n(l,s);continue}u.isFile()&&s.push(r(l));}}return {read(o){let s=t(o);if(!a.existsSync(s))return null;try{return a.readFileSync(s,"utf-8")}catch{return null}},write(o,s){let u=t(o),l=`${u}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(y.dirname(u),{recursive:true}),a.writeFileSync(l,s,"utf-8"),C(l,u);},exists(o){return a.existsSync(t(o))},remove(o){let s=t(o);try{a.existsSync(s)&&a.unlinkSync(s);}catch{}},readBytes(o){let s=t(o);if(!a.existsSync(s))return null;try{return new Uint8Array(a.readFileSync(s))}catch{return null}},writeBytes(o,s){let u=t(o),l=`${u}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(y.dirname(u),{recursive:true}),a.writeFileSync(l,Buffer.from(s)),C(l,u);},listKeys(o){let s=[];n(e,s);let u=s.sort();return o?u.filter(l=>l.startsWith(o)):u},stat(o){let s=t(o);if(!a.existsSync(s))return null;try{let u=a.statSync(s);return {key:o,size:Number(u.size||0),updatedAt:new Date(u.mtimeMs).toISOString()}}catch{return null}},keyRef(o){return {kind:"fs-path",value:t(o)}}}}function we(){return {read(e){if(!a.existsSync(e))return null;try{return a.readFileSync(e,"utf-8")}catch{return null}},write(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(y.dirname(e),{recursive:true}),a.writeFileSync(r,t,"utf-8"),C(r,e);},exists(e){return a.existsSync(e)},remove(e){try{a.existsSync(e)&&a.unlinkSync(e);}catch{}},readBytes(e){if(!a.existsSync(e))return null;try{return new Uint8Array(a.readFileSync(e))}catch{return null}},writeBytes(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(y.dirname(e),{recursive:true}),a.writeFileSync(r,Buffer.from(t)),C(r,e);},stat(e){if(!a.existsSync(e))return null;try{let t=a.statSync(e);return {key:e,size:Number(t.size||0),updatedAt:new Date(t.mtimeMs).toISOString()}}catch{return null}},listKeys(e){return []}}}function K(e,t){let r=`${e}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(y.dirname(e),{recursive:true}),a.writeFileSync(r,JSON.stringify(t,null,2),"utf-8"),C(r,e);}function N(e){if(!a.existsSync(e))return null;try{return JSON.parse(a.readFileSync(e,"utf-8"))}catch{return null}}function V(e){return a.existsSync(e)?a.readdirSync(e).filter(t=>t.endsWith(".json")).sort().map(t=>y.join(e,t)):[]}function z(e){return {id:e.id,body:e.body,enqueuedAt:e.enqueuedAt,attempt:e.attempt}}function _t(e){return {...z(e),leaseToken:String(e.leaseToken||""),leaseExpiresAt:String(e.leaseExpiresAt||"")}}function Jt(e){return {...z(e),reason:e.reason}}function _(e){let t=y.join(e,"active"),r=y.join(e,"leased"),n=y.join(e,"done"),o=y.join(e,"dead");for(let c of [t,r,n,o])a.mkdirSync(c,{recursive:true});function s(c){let d=String(c.enqueuedAt||new Date().toISOString()).replace(/[:.]/g,"-");return y.join(t,`${d}-${c.id}.json`)}function u(c){return y.join(r,`${c}.json`)}function l(c){return y.join(n,`${c}.json`)}function g(c){return y.join(o,`${c}.json`)}function i(){let c=Date.now();for(let d of V(r)){let f=N(d);if(!f?.leaseExpiresAt)continue;let m=Date.parse(f.leaseExpiresAt);if(Number.isNaN(m)||m>c)continue;let S={id:f.id,body:f.body,enqueuedAt:f.enqueuedAt,attempt:f.attempt};K(s(S),S);try{a.unlinkSync(d);}catch{}}}return {enqueue(c){let d={id:randomUUID(),body:c,enqueuedAt:new Date().toISOString(),attempt:0};return K(s(d),d),z(d)},enqueueIfAbsent(c,d){i();for(let m of [t,r])for(let S of V(m))if(N(S)?.dedupKey===d)return null;let f={id:randomUUID(),body:c,enqueuedAt:new Date().toISOString(),attempt:0,dedupKey:d};return K(s(f),f),z(f)},lease(c){i();let d=Math.max(1,Math.floor(c?.max??1)),f=Math.max(1,Math.floor(c?.visibilityMs??6e4)),m=[];for(let S of V(t)){if(m.length>=d)break;let h=N(S);if(!h)continue;let k=u(h.id);try{C(S,k);}catch{continue}let p={...h,attempt:(Number(h.attempt)||0)+1,leaseToken:randomUUID(),leaseExpiresAt:new Date(Date.now()+f).toISOString()};K(k,p),m.push(_t(p));}return m},ack(c,d){let f=u(c),m=N(f);if(!m||m.leaseToken!==d)return false;try{C(f,l(c));}catch{return false}return true},nack(c,d,f){let m=u(c),S=N(m);if(!S||S.leaseToken!==d)return false;let h={id:S.id,body:S.body,enqueuedAt:S.enqueuedAt,attempt:S.attempt};f?.dead?(h.reason=f.reason,K(g(c),h)):K(s(h),h);try{a.unlinkSync(m);}catch{}return true},peekActive(c){return i(),V(t).map(d=>N(d)).filter(d=>!!d).map(z)},peekDeadLetter(c){return V(o).map(d=>N(d)).filter(d=>!!d).map(Jt)}}}var Se="__scratch-marker",Re="__scratch-config.json",Dt=1440*60*1e3,Ht=720*60*1e3,Kt=500;function He(e,t){if(!e)return t;let r=e.replace(/[^A-Za-z0-9._-]/g,"_");return r.length>0?r:t}function G(e){a.mkdirSync(e,{recursive:true});let t=y.join(e,Se),r=y.join(e,Re),n=!a.existsSync(t);if(n)try{a.writeFileSync(t,`scratch-store
4
4
  ${new Date().toISOString()}
5
- `,"utf-8");}catch{}function o(){if(!a.existsSync(r))return {};try{let c=a.readFileSync(r,"utf-8"),n=JSON.parse(c);return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}catch{return {}}}function u(c){let n=`${r}.${process.pid}.${randomUUID()}.tmp`;try{a.writeFileSync(n,JSON.stringify(c,null,2),"utf-8"),E(n,r);}catch{}}if(s){let c=o();typeof c["retention.lastSweepAt"]!="number"&&(c["retention.lastSweepAt"]=Date.now(),u(c));}function i(){if(!a.existsSync(t))return;let c=o(),n=typeof c["retention.maxAgeMs"]=="number"?c["retention.maxAgeMs"]:Pt,d=typeof c["retention.sweepIntervalMs"]=="number"?c["retention.sweepIntervalMs"]:Mt;if(n<=0||d<=0)return;let f=typeof c["retention.lastSweepAt"]=="number"?c["retention.lastSweepAt"]:0,m=Date.now();if(m-f<d)return;c["retention.lastSweepAt"]=m,u(c);let p=m;try{let y=a.readdirSync(e,{withFileTypes:!0});for(let R of y){if(Date.now()-p>qt)break;if(!R.isFile()||R.name===pe||R.name===ge)continue;let S=h.join(e,R.name);try{let v=a.statSync(S);if(m-v.mtimeMs>n)try{a.unlinkSync(S);}catch{}}catch{}}}catch{}}function l(c,n){let d=_e(c,"scratch"),f=_e(n,".json"),m=f.startsWith(".")?f:`.${f}`,p=`${d}-${Date.now()}-${randomUUID().slice(0,8)}${m}`;return h.join(e,p)}function g(c,n){let d=`${c}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(h.dirname(c),{recursive:true}),a.writeFileSync(d,n,"utf-8"),E(d,c);}return {read(c){if(!a.existsSync(c))return null;try{return a.readFileSync(c,"utf-8")}catch{return null}},write(c,n){g(c,n);try{i();}catch{}},exists(c){return a.existsSync(c)},remove(c){try{a.existsSync(c)&&a.unlinkSync(c);}catch{}},readBytes(c){if(!a.existsSync(c))return null;try{return new Uint8Array(a.readFileSync(c))}catch{return null}},writeBytes(c,n){let d=`${c}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(h.dirname(c),{recursive:true}),a.writeFileSync(d,Buffer.from(n)),E(d,c);try{i();}catch{}},stat(c){if(!a.existsSync(c))return null;try{let n=a.statSync(c);return {key:c,size:Number(n.size||0),updatedAt:new Date(n.mtimeMs).toISOString()}}catch{return null}},listKeys(c){try{let n=a.readdirSync(e,{withFileTypes:!0}),d=[];for(let f of n){if(!f.isFile()||f.name===pe||f.name===ge)continue;let m=h.join(e,f.name);(!c||m.startsWith(c))&&d.push(m);}return d.sort()}catch{return []}},getUniqueKey(c,n){return l(c,n)},create(c,n,d){let f=l(n,d);g(f,c);try{i();}catch{}return f},keyRef(c){return {kind:"fs-path",value:c}},config:{get(c){return o()[c]??null},set(c,n){let d=o();n==null?delete d[c]:d[c]=n,u(d);}}}}var Ot="__archive-marker",Lt="__archive-config.json",G="streams",z="blobs",_t=500;function We(e){let t=e.replace(/[^A-Za-z0-9._-]/g,"_");if(!t)throw new Error("Archive segment name cannot be empty after sanitization");return t}function Z(e){a.mkdirSync(e,{recursive:true}),a.mkdirSync(h.join(e,G),{recursive:true}),a.mkdirSync(h.join(e,z),{recursive:true});let t=h.join(e,Ot),r=h.join(e,Lt);if(!a.existsSync(t))try{a.writeFileSync(t,`archive-store
5
+ `,"utf-8");}catch{}function o(){if(!a.existsSync(r))return {};try{let i=a.readFileSync(r,"utf-8"),c=JSON.parse(i);return c&&typeof c=="object"&&!Array.isArray(c)?c:{}}catch{return {}}}function s(i){let c=`${r}.${process.pid}.${randomUUID()}.tmp`;try{a.writeFileSync(c,JSON.stringify(i,null,2),"utf-8"),C(c,r);}catch{}}if(n){let i=o();typeof i["retention.lastSweepAt"]!="number"&&(i["retention.lastSweepAt"]=Date.now(),s(i));}function u(){if(!a.existsSync(t))return;let i=o(),c=typeof i["retention.maxAgeMs"]=="number"?i["retention.maxAgeMs"]:Dt,d=typeof i["retention.sweepIntervalMs"]=="number"?i["retention.sweepIntervalMs"]:Ht;if(c<=0||d<=0)return;let f=typeof i["retention.lastSweepAt"]=="number"?i["retention.lastSweepAt"]:0,m=Date.now();if(m-f<d)return;i["retention.lastSweepAt"]=m,s(i);let S=m;try{let h=a.readdirSync(e,{withFileTypes:!0});for(let k of h){if(Date.now()-S>Kt)break;if(!k.isFile()||k.name===Se||k.name===Re)continue;let p=y.join(e,k.name);try{let x=a.statSync(p);if(m-x.mtimeMs>c)try{a.unlinkSync(p);}catch{}}catch{}}}catch{}}function l(i,c){let d=He(i,"scratch"),f=He(c,".json"),m=f.startsWith(".")?f:`.${f}`,S=`${d}-${Date.now()}-${randomUUID().slice(0,8)}${m}`;return y.join(e,S)}function g(i,c){let d=`${i}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(y.dirname(i),{recursive:true}),a.writeFileSync(d,c,"utf-8"),C(d,i);}return {read(i){if(!a.existsSync(i))return null;try{return a.readFileSync(i,"utf-8")}catch{return null}},write(i,c){g(i,c);try{u();}catch{}},exists(i){return a.existsSync(i)},remove(i){try{a.existsSync(i)&&a.unlinkSync(i);}catch{}},readBytes(i){if(!a.existsSync(i))return null;try{return new Uint8Array(a.readFileSync(i))}catch{return null}},writeBytes(i,c){let d=`${i}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(y.dirname(i),{recursive:true}),a.writeFileSync(d,Buffer.from(c)),C(d,i);try{u();}catch{}},stat(i){if(!a.existsSync(i))return null;try{let c=a.statSync(i);return {key:i,size:Number(c.size||0),updatedAt:new Date(c.mtimeMs).toISOString()}}catch{return null}},listKeys(i){try{let c=a.readdirSync(e,{withFileTypes:!0}),d=[];for(let f of c){if(!f.isFile()||f.name===Se||f.name===Re)continue;let m=y.join(e,f.name);(!i||m.startsWith(i))&&d.push(m);}return d.sort()}catch{return []}},getUniqueKey(i,c){return l(i,c)},create(i,c,d){let f=l(c,d);g(f,i);try{u();}catch{}return f},keyRef(i){return {kind:"fs-path",value:i}},config:{get(i){return o()[i]??null},set(i,c){let d=o();c==null?delete d[i]:d[i]=c,s(d);}}}}var Ut="__archive-marker",Vt="__archive-config.json",re="streams",ne="blobs",zt=500;function Ke(e){let t=e.replace(/[^A-Za-z0-9._-]/g,"_");if(!t)throw new Error("Archive segment name cannot be empty after sanitization");return t}function oe(e){a.mkdirSync(e,{recursive:true}),a.mkdirSync(y.join(e,re),{recursive:true}),a.mkdirSync(y.join(e,ne),{recursive:true});let t=y.join(e,Ut),r=y.join(e,Vt);if(!a.existsSync(t))try{a.writeFileSync(t,`archive-store
6
6
  ${new Date().toISOString()}
7
- `,"utf-8");}catch{}function s(){if(!a.existsSync(r))return {};try{let i=a.readFileSync(r,"utf-8"),l=JSON.parse(i);return l&&typeof l=="object"&&!Array.isArray(l)?l:{}}catch{return {}}}function o(i){let l=`${r}.${process.pid}.${randomUUID()}.tmp`;try{a.writeFileSync(l,JSON.stringify(i,null,2),"utf-8"),E(l,r);}catch{}}function u(){if(!a.existsSync(t))return;let i=s(),l=typeof i["retention.maxAgeMs"]=="number"?i["retention.maxAgeMs"]:0,g=typeof i["retention.sweepIntervalMs"]=="number"?i["retention.sweepIntervalMs"]:0;if(l<=0||g<=0)return;let c=typeof i["retention.lastSweepAt"]=="number"?i["retention.lastSweepAt"]:0,n=Date.now();if(n-c<g)return;i["retention.lastSweepAt"]=n,o(i);let d=n,f=m=>{let p;try{p=a.readdirSync(m,{withFileTypes:!0});}catch{return}for(let y of p){if(Date.now()-d>_t)return;let R=h.join(m,y.name);if(y.isDirectory()){f(R);continue}if(y.isFile())try{let S=a.statSync(R);if(n-S.mtimeMs>l)try{a.unlinkSync(R);}catch{}}catch{}}};f(h.join(e,G)),f(h.join(e,z));}return {stream(i){let l=We(i),g=h.join(e,G,`${l}.jsonl`),c=ye(g);return {append(n){let d=c.append(n);try{u();}catch{}return d},readAll:()=>c.readAll(),readAfter:n=>c.readAfter(n),clear:()=>{c.clear&&c.clear();}}},blob(i){let l=We(i),g=h.join(e,z,l);a.mkdirSync(g,{recursive:true});let c=W(g);return {read:n=>c.read(n),write:(n,d)=>{c.write(n,d);try{u();}catch{}},exists:n=>c.exists(n),remove:n=>c.remove(n),readBytes:c.readBytes?n=>c.readBytes(n):void 0,writeBytes:c.writeBytes?(n,d)=>{c.writeBytes(n,d);try{u();}catch{}}:void 0,listKeys:n=>c.listKeys(n),stat:c.stat?n=>c.stat(n):void 0}},listStreams(i){let l=h.join(e,G);try{return a.readdirSync(l,{withFileTypes:!0}).filter(g=>g.isFile()&&g.name.endsWith(".jsonl")).map(g=>g.name.slice(0,-6)).filter(g=>!i||g.startsWith(i)).sort()}catch{return []}},listBlobs(i){let l=h.join(e,z);try{return a.readdirSync(l,{withFileTypes:!0}).filter(g=>g.isDirectory()).map(g=>g.name).filter(g=>!i||g.startsWith(i)).sort()}catch{return []}},config:{get(i){return s()[i]??null},set(i,l){let g=s();l==null?delete g[i]:g[i]=l,o(g);}}}}function ee(e){function t(s){return h.join(e,...s.split("/"))+".json"}function r(s,o,u,i){if(a.existsSync(s))for(let l of a.readdirSync(s,{withFileTypes:true})){let g=o?`${o}/${l.name}`:l.name;if(l.isDirectory()){r(h.join(s,l.name),g,u,i);continue}if(!l.isFile()||!l.name.endsWith(".json"))continue;let c=g.replace(/\.json$/,"");(!u||c.startsWith(u))&&i.push(c);}}return {read(s){let o=t(s);if(!a.existsSync(o))return null;try{return JSON.parse(a.readFileSync(o,"utf-8"))}catch{return null}},write(s,o){let u=t(s),i=`${u}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(h.dirname(u),{recursive:true}),a.writeFileSync(i,JSON.stringify(o,null,2),"utf-8"),E(i,u);},delete(s){let o=t(s);try{a.existsSync(o)&&a.unlinkSync(o);}catch{}},listKeys(s){let o=[];return r(e,"",s,o),o.sort()}}}function ye(e){function t(){if(!a.existsSync(e))return [];let r=a.readFileSync(e,"utf-8").trim();return r?r.split(`
8
- `).filter(Boolean).map(s=>JSON.parse(s)):[]}return {append(r){let s={id:randomUUID(),payload:r};return a.mkdirSync(h.dirname(e),{recursive:true}),a.appendFileSync(e,JSON.stringify(s)+`
9
- `,"utf-8"),s},readAll(){return t()},readAfter(r){let s=t();if(!r)return {entries:s,newCursor:s.length>0?s[s.length-1].id:null};let o=s.findIndex(i=>i.id===r),u=o===-1?s:s.slice(o+1);return {entries:u,newCursor:u.length>0?u[u.length-1].id:r}},clear(){a.existsSync(e)&&a.truncateSync(e,0);}}}function me(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return `[${e.map(me).join(",")}]`;let t=e;return `{${Object.keys(t).sort().map(s=>`${JSON.stringify(s)}:${me(t[s])}`).join(",")}}`}function Ne(e){return createHash("sha256").update(me(e)).digest("hex")}function Je(e){let t=h.join(e,"board-journal.jsonl");return {readAllEntries(){if(!a.existsSync(t))return [];let r=a.readFileSync(t,"utf-8").trim();return r?r.split(`
10
- `).filter(Boolean).map(s=>JSON.parse(s)):[]},appendEntry(r){a.appendFileSync(t,JSON.stringify(r)+`
11
- `,"utf-8");},generateId(){return randomUUID()}}}function De(e){return {tryAcquire(){try{if(!a.existsSync(e)){a.mkdirSync(h.dirname(e),{recursive:!0});try{a.writeFileSync(e,"{}",{flag:"wx"});}catch{}}return lockSync(e,{retries:0})}catch{return null}}}}function Wt(e){let t=Math.max(1,Math.floor(e.pollIntervalMs??250)),r=Math.max(1,Math.floor(e.visibilityMs??6e4)),s=Math.max(1,Math.floor(e.concurrency??1)),o=Math.max(1,Math.floor(e.maxAttempts??5)),u=false,i=false;async function l(n){try{await e.executeBoardWorkerRequest(n.request.args,n.request),e.workerStore.ackRequest(n.messageId,n.leaseToken);}catch(d){let f=n.attempt>=o;e.workerStore.nackRequest(n.messageId,n.leaseToken,{dead:f,reason:d instanceof Error?d.message:String(d)}),e.onError?.(d,n);}}async function g(){if(!(u||i)){i=true;try{let n=e.workerStore.leaseRequests({max:s,visibilityMs:r});for(let d of n)await l(d);}finally{i=false;}}}let c=setInterval(()=>{g();},t);return typeof c.unref=="function"&&c.unref(),g(),()=>{u=true,clearInterval(c);}}function kr(){return {async invoke(e,t){if(e.howToRun!=="local-node")return {dispatched:false,error:`createNodeSpawnInvocationAdapter: unsupported howToRun "${e.howToRun}"`};let r="";try{let u=e.whatToRun;r=C(u);}catch{r="";}if(!r)return {dispatched:false,error:"createNodeSpawnInvocationAdapter: could not resolve executable path from whatToRun"};let s={...t},o=Buffer.from(JSON.stringify(s)).toString("base64");try{return spawn(process.execPath,[r,"--boardId",String(t.boardId??""),"--cardId",String(t.cardId??""),"--extraEncJson",o],{stdio:"ignore",windowsHide:!0}).unref(),{dispatched:!0}}catch(u){return {dispatched:false,error:u instanceof Error?u.message:String(u)}}},async describe(e){if(e.howToRun!=="local-node")return null;let t="";try{let r=e.whatToRun;t=C(r);}catch{t="";}if(!t)return null;try{let r=spawnSync(process.execPath,[t,"describe"],{timeout:5e3,encoding:"utf-8",windowsHide:!0});return r.status!==0?null:JSON.parse(String(r.stdout).trim())}catch{return null}}}}var Jt=".board.lock";function He(e,t){if(!e||!t)return false;let r=String(e).replace(/[\\/]+$/,"").split(/[\\/]+/).filter(Boolean);return r.length>0&&r[r.length-1]===t}function Dt(e,t){return typeof e=="string"?{cliDir:e,opts:t}:{cliDir:void 0,opts:e}}function Qt(e,t){return typeof e=="string"?{cliDir:e,opts:t}:{cliDir:void 0,opts:e}}function Ke(e){if(e)return e;let t=Ee(import.meta.url),r=[t,k(t,"..","cli","node"),k(t,"..","..","cli","node")];for(let s of r)try{return ce(s),s}catch{}throw new Error(`createFsBoardPlatformAdapter: could not resolve a public CLI directory from module dir ${t}`)}function Ht(e,t,r){let{cliDir:s,opts:o}=Dt(t,r),u=Ke(s),i=e.value,l,g=o?.suppressSpawn?"":ce(u),c=o?.selfRef??{meta:"board-live-cards",howToRun:"local-node",whatToRun:g?a$2({kind:"yaml-flow-cli",value:"board-live-cards-cli.js"}):"",...o?.notifyChannel?{extra:{notifyChannel:o.notifyChannel}}:{}};return {kvStorage:n=>ee(k(i,`.${n}`)),blobStorage:n=>n?W(k(i,n)):W(i),scratchStorage:()=>J(k(i,".tmp")),scratchStorageForRef:n=>J(b(n).value),archiveFactory:()=>Z(k(i,"archive")),archiveFactoryForRef:n=>Z(b(n).value),journalAdapter:()=>Je(i),boardWorkerStore:()=>(l||(l=U(X(k(i,".board-worker-queue")))),l),lock:De(k(i,Jt)),selfRef:c,async dispatchExecution(n,d){let f=!!d.output?.ref;if(n.howToRun==="queue-storage")try{let p=l??U(X(k(i,".board-worker-queue")));l||(l=p);let y=typeof n.extra?.boardId=="string"?n.extra.boardId:void 0;if(f)return p.enqueueRequest({boardId:y,ref:n,args:d}),{dispatched:!0};let R=d.source_def?.bindTo??Q().slice(0,8),S=J(k(i,".tmp")),v=S.create(JSON.stringify(d,null,2),`exec-in-${R}`,".json"),F=S.getUniqueKey(`exec-out-${R}`,".json"),j=S.getUniqueKey(`exec-err-${R}`,".txt"),P=a$2(S.keyRef(v)),te=a$2(S.keyRef(F)),w=a$2(S.keyRef(j));return p.enqueueRequest({boardId:y,ref:n,args:{subcommand:"run-source-fetch",inRef:P,outRef:te,errRef:w}}),{dispatched:!0}}catch(p){return {dispatched:false,error:p instanceof Error?p.message:String(p)}}if(f&&(n.howToRun==="http:post"||n.howToRun==="in-process-loop"))try{if(n.howToRun==="http:post"){let R=C(n.whatToRun),S=await fetch(R,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...d,...n.extra?{extra:n.extra}:{}})});if(!S.ok){let v=await S.text().catch(()=>"");return {dispatched:!1,error:`HTTP ${S.status}: ${v}`}}return {dispatched:!0}}let p=await L(n,d,{cliDir:u,cwd:process.cwd(),label:"dispatchExecution.directHostedWorker"});return p.result==="success"?{dispatched:!0}:{dispatched:!1,error:(typeof p.data?.error=="string"?p.data.error:p.error)||p.result}}catch(p){return {dispatched:false,error:p instanceof Error?p.message:String(p)}}let m=n.howToRun==="local-node"||n.howToRun==="local-process"||n.howToRun==="local-python"||n.howToRun==="built-in";if(o?.suppressSpawn&&m)return {dispatched:false};try{let p=d.source_def?.bindTo??Q().slice(0,8),y=J(k(i,".tmp")),R=y.create(JSON.stringify(d,null,2),`exec-in-${p}`,".json"),S=y.getUniqueKey(`exec-out-${p}`,".json"),v=y.getUniqueKey(`exec-err-${p}`,".txt"),F=a$2(y.keyRef(R)),j=a$2(y.keyRef(S)),P=a$2(y.keyRef(v));return Le(n,{subcommand:"run-source-fetch",inRef:F,outRef:j,errRef:P},u),{dispatched:!0}}catch(p){let y=p instanceof Error?p.message:String(p);try{let R=Z(k(i,"archive")),S=new Date().toISOString().replace(/[:.]/g,"-"),v=d.source_def?.bindTo??"unknown";R.blob("exec-failures").write(`${S}-${v}.json`,JSON.stringify({error:y,args:d,ref:n,at:new Date().toISOString()},null,2));}catch{}return {dispatched:false,error:y}}},supportsDirectSourceOutput(n){return n.howToRun==="queue-storage"||n.howToRun==="http:post"||n.howToRun==="in-process-loop"},resolveBlob(n){let d=be(n.value)?he().read(n.value):W(i).read(n.value);if(d===null)throw new Error(`resolveBlob: blob not found: ::${n.kind}::${n.value}`);return d},hashFn:Ne,genId:()=>Ae(`${Date.now()}-${Math.random()}`).slice(0,32),kvStorageForRef:n=>ee(b(n).value),requestProcessAccumulated(){o?.suppressSpawn||Ie(u,e,o?.notifyChannel);},publishBoardChangeNotifications(n){if(!o?.notifyChannel||n.length===0)return;let d=n.map(f=>({id:Q(),ts:new Date().toISOString(),boardRef:a$2(e),notification:f}));Ce(o.notifyChannel,d,o.onWarn);},onWarn:o?.onWarn}}function vr(e,t,r){let{cliDir:s,opts:o}=Qt(t,r),u=Ke(s);return {...Ht(e,u,o),async invokeExecutor(l,g,c){if(l.howToRun==="queue-storage")throw new Error("queue-storage does not support inline executor request/response");if(l.howToRun==="http:post"||l.howToRun==="http:get"||l.howToRun==="in-process-loop"){let p=await L(l,{subcommand:g,...c?.input!==void 0?{input:c.input}:{},...l.extra?{extra:l.extra}:{}},{cliDir:u,cwd:process.cwd(),timeoutMs:c?.timeout??3e4,label:`invokeExecutor:${g}`});if(p.result!=="success"){let y=typeof p.data?.error=="string"?p.data.error:p.error;throw new Error(y||`executor request failed: ${p.result}`)}return typeof p.data?.stdout=="string"?p.data.stdout:JSON.stringify(p.data??{})}let{command:n,baseArgs:d}=K(l,u),f=l.extra?["--extra",Buffer.from(JSON.stringify(l.extra)).toString("base64")]:[],m=[...d,g,...f];return await new Promise((p,y)=>{let R=spawn(n,m,{cwd:process.cwd(),stdio:"pipe",windowsHide:true,shell:process.platform==="win32"&&/\.(cmd|bat)$/i.test(n)}),S=[],v=[],F=false,j=null,P=w=>{F||(F=true,j&&clearTimeout(j),y(w));},te=w=>{F||(F=true,j&&clearTimeout(j),p(w));};R.stdout.on("data",w=>{S.push(Buffer.from(w));}),R.stderr.on("data",w=>{v.push(Buffer.from(w));}),R.on("error",w=>{let O=w;O.stdout=Buffer.concat(S).toString("utf-8"),O.stderr=Buffer.concat(v).toString("utf-8"),P(O);}),R.on("close",w=>{let O=Buffer.concat(S).toString("utf-8"),Re=Buffer.concat(v).toString("utf-8");if(w===0){te(O);return}let re=new Error(Re.trim()||`executor exited with status ${w}`);re.stdout=O,re.stderr=Re,P(re);}),c?.timeout&&c.timeout>0&&(j=setTimeout(()=>{R.kill();let w=new Error(`executor timed out after ${c.timeout}ms`);w.stdout=Buffer.concat(S).toString("utf-8"),w.stderr=Buffer.concat(v).toString("utf-8"),P(w);},c.timeout)),c?.input!==void 0?R.stdin.end(c.input):R.stdin.end();})},validateSchema(l){let g=d(l);return {ok:g.errors.length===0,errors:g.errors}},absoluteBlob:he()}}function br(e,t={}){let r=t.chatsSubdir??"chats",s=t.kvSubdir??".kv",o=s?[s,"chat"]:["chat"],u=r&&!He(e,r)?k(e,r):e,i=ee(k(e,...o));return a$3(l=>{let c=`${String(l).replace(/[^a-zA-Z0-9_-]/g,"_")}.jsonl`,n=k(u,c);return ye(n)},i)}function Ar(e,t={}){let r=t.filesSubdir??"files",s=r&&!He(e,r)?k(e,r):e;return c(W(s))}function Er(e){try{let t=JSON.parse(Buffer.from(e,"base64url").toString());return typeof t.br=="string"?t.br:null}catch{return null}}export{K as buildLocalBaseSpec,U as createBoardWorkerStore,Et as createExecutionRefInvoker,br as createFsBoardChatStorage,Ar as createFsBoardFileArtifactsStore,vr as createFsBoardNonCorePlatformAdapter,Ht as createFsBoardPlatformAdapter,X as createFsQueueStorage,kr as createNodeSpawnInvocationAdapter,Er as decodeBoardRefFromToken,de as evaluateArgsMassaging,L as invokeExecutionRef,le as invokeExecutionRefSync,Tt as invokeRefSync,wt as registerInProcessExecutionHandler,C as resolveWhatToRunValue,$e as resolveYamlFlowCliPath,Wt as startBoardWorkerQueueRunner,kt as unregisterInProcessExecutionHandler};//# sourceMappingURL=board-live-cards-node.js.map
7
+ `,"utf-8");}catch{}function n(){if(!a.existsSync(r))return {};try{let u=a.readFileSync(r,"utf-8"),l=JSON.parse(u);return l&&typeof l=="object"&&!Array.isArray(l)?l:{}}catch{return {}}}function o(u){let l=`${r}.${process.pid}.${randomUUID()}.tmp`;try{a.writeFileSync(l,JSON.stringify(u,null,2),"utf-8"),C(l,r);}catch{}}function s(){if(!a.existsSync(t))return;let u=n(),l=typeof u["retention.maxAgeMs"]=="number"?u["retention.maxAgeMs"]:0,g=typeof u["retention.sweepIntervalMs"]=="number"?u["retention.sweepIntervalMs"]:0;if(l<=0||g<=0)return;let i=typeof u["retention.lastSweepAt"]=="number"?u["retention.lastSweepAt"]:0,c=Date.now();if(c-i<g)return;u["retention.lastSweepAt"]=c,o(u);let d=c,f=m=>{let S;try{S=a.readdirSync(m,{withFileTypes:!0});}catch{return}for(let h of S){if(Date.now()-d>zt)return;let k=y.join(m,h.name);if(h.isDirectory()){f(k);continue}if(h.isFile())try{let p=a.statSync(k);if(c-p.mtimeMs>l)try{a.unlinkSync(k);}catch{}}catch{}}};f(y.join(e,re)),f(y.join(e,ne));}return {stream(u){let l=Ke(u),g=y.join(e,re,`${l}.jsonl`),i=ke(g);return {append(c){let d=i.append(c);try{s();}catch{}return d},readAll:()=>i.readAll(),readAfter:c=>i.readAfter(c),clear:()=>{i.clear&&i.clear();}}},blob(u){let l=Ke(u),g=y.join(e,ne,l);a.mkdirSync(g,{recursive:true});let i=U(g);return {read:c=>i.read(c),write:(c,d)=>{i.write(c,d);try{s();}catch{}},exists:c=>i.exists(c),remove:c=>i.remove(c),readBytes:i.readBytes?c=>i.readBytes(c):void 0,writeBytes:i.writeBytes?(c,d)=>{i.writeBytes(c,d);try{s();}catch{}}:void 0,listKeys:c=>i.listKeys(c),stat:i.stat?c=>i.stat(c):void 0}},listStreams(u){let l=y.join(e,re);try{return a.readdirSync(l,{withFileTypes:!0}).filter(g=>g.isFile()&&g.name.endsWith(".jsonl")).map(g=>g.name.slice(0,-6)).filter(g=>!u||g.startsWith(u)).sort()}catch{return []}},listBlobs(u){let l=y.join(e,ne);try{return a.readdirSync(l,{withFileTypes:!0}).filter(g=>g.isDirectory()).map(g=>g.name).filter(g=>!u||g.startsWith(u)).sort()}catch{return []}},config:{get(u){return n()[u]??null},set(u,l){let g=n();l==null?delete g[u]:g[u]=l,o(g);}}}}function se(e){function t(n){return y.join(e,...n.split("/"))+".json"}function r(n,o,s,u){if(a.existsSync(n))for(let l of a.readdirSync(n,{withFileTypes:true})){let g=o?`${o}/${l.name}`:l.name;if(l.isDirectory()){r(y.join(n,l.name),g,s,u);continue}if(!l.isFile()||!l.name.endsWith(".json"))continue;let i=g.replace(/\.json$/,"");(!s||i.startsWith(s))&&u.push(i);}}return {read(n){let o=t(n);if(!a.existsSync(o))return null;try{return JSON.parse(a.readFileSync(o,"utf-8"))}catch{return null}},write(n,o){let s=t(n),u=`${s}.${process.pid}.${randomUUID()}.tmp`;a.mkdirSync(y.dirname(s),{recursive:true}),a.writeFileSync(u,JSON.stringify(o,null,2),"utf-8"),C(u,s);},delete(n){let o=t(n);try{a.existsSync(o)&&a.unlinkSync(o);}catch{}},listKeys(n){let o=[];return r(e,"",n,o),o.sort()}}}function ke(e){function t(){if(!a.existsSync(e))return [];let r=a.readFileSync(e,"utf-8").trim();return r?r.split(`
8
+ `).filter(Boolean).map(n=>JSON.parse(n)):[]}return {append(r){let n={id:randomUUID(),payload:r};return a.mkdirSync(y.dirname(e),{recursive:true}),a.appendFileSync(e,JSON.stringify(n)+`
9
+ `,"utf-8"),n},readAll(){return t()},readAfter(r){let n=t();if(!r)return {entries:n,newCursor:n.length>0?n[n.length-1].id:null};let o=n.findIndex(u=>u.id===r),s=o===-1?n:n.slice(o+1);return {entries:s,newCursor:s.length>0?s[s.length-1].id:r}},clear(){a.existsSync(e)&&a.truncateSync(e,0);}}}function xe(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return `[${e.map(xe).join(",")}]`;let t=e;return `{${Object.keys(t).sort().map(n=>`${JSON.stringify(n)}:${xe(t[n])}`).join(",")}}`}function Ue(e){return createHash("sha256").update(xe(e)).digest("hex")}function Ve(e){let t=y.join(e,"board-journal.jsonl");return {readAllEntries(){if(!a.existsSync(t))return [];let r=a.readFileSync(t,"utf-8").trim();return r?r.split(`
10
+ `).filter(Boolean).map(n=>JSON.parse(n)):[]},appendEntry(r){a.appendFileSync(t,JSON.stringify(r)+`
11
+ `,"utf-8");},generateId(){return randomUUID()}}}function ze(e){return {tryAcquire(){try{if(!a.existsSync(e)){a.mkdirSync(y.dirname(e),{recursive:!0});try{a.writeFileSync(e,"{}",{flag:"wx"});}catch{}}return lockSync(e,{retries:0})}catch{return null}}}}function _r(){return {async invoke(e,t){if(e.howToRun!=="local-node")return {dispatched:false,error:`createNodeSpawnInvocationAdapter: unsupported howToRun "${e.howToRun}"`};let r="";try{let s=e.whatToRun;r=$(s);}catch{r="";}if(!r)return {dispatched:false,error:"createNodeSpawnInvocationAdapter: could not resolve executable path from whatToRun"};let n={...t},o=Buffer.from(JSON.stringify(n)).toString("base64");try{return spawn(process.execPath,[r,"--boardId",String(t.boardId??""),"--cardId",String(t.cardId??""),"--extraEncJson",o],{stdio:"ignore",windowsHide:!0}).unref(),{dispatched:!0}}catch(s){return {dispatched:false,error:s instanceof Error?s.message:String(s)}}},async describe(e){if(e.howToRun!=="local-node")return null;let t="";try{let r=e.whatToRun;t=$(r);}catch{t="";}if(!t)return null;try{let r=spawnSync(process.execPath,[t,"describe"],{timeout:5e3,encoding:"utf-8",windowsHide:!0});return r.status!==0?null:JSON.parse(String(r.stdout).trim())}catch{return null}}}}var Yt=".board.lock";function Ye(e,t){if(!e||!t)return false;let r=String(e).replace(/[\\/]+$/,"").split(/[\\/]+/).filter(Boolean);return r.length>0&&r[r.length-1]===t}function Zt(e,t){return typeof e=="string"?{cliDir:e,opts:t}:{cliDir:void 0,opts:e}}function Xt(e,t){return typeof e=="string"?{cliDir:e,opts:t}:{cliDir:void 0,opts:e}}function Ze(e){if(e)return e;let t=Ce(import.meta.url),r=[t,b(t,"..","cli","node"),b(t,"..","..","cli","node")];for(let n of r)try{return Pe(n),n}catch{}throw new Error(`createFsBoardPlatformAdapter: could not resolve a public CLI directory from module dir ${t}`)}function er(e,t,r){let{cliDir:n,opts:o}=Zt(t,r),s=e.value,u,l=null,g$1,i,c,d=null,f;function m(){return f||(f=Ze(n)),f}let S=o?.callbackTransport??g(o?.notifyChannel),h;function k(){if(o?.suppressSpawn||l)return;let p=fe({id:"task-executor",workerStore:h.boardWorkerStore(),handleRequest:async(x,B)=>{let v=await D(B.ref,B.args,{cliDir:m(),cwd:process.cwd(),label:"fsBoardAdapter.boardWorker"});if(v.result!=="success"){let R=typeof v.data?.error=="string"?v.data.error:v.error;throw new Error(R||v.result)}}});l=ee(p).catch(x=>{o?.onWarn?.(`[board-worker] in-process queue drain failed: ${x instanceof Error?x.message:String(x)}`);}).finally(()=>{l=null,h.boardWorkerStore().peekActive().length>0&&k();});}return h={kvStorage:p=>se(b(s,`.${p}`)),blobStorage:p=>p?U(b(s,p)):U(s),scratchStorage:()=>G(b(s,".tmp")),scratchStorageForRef:p=>G(b$1(p).value),archiveFactory:()=>oe(b(s,"archive")),archiveFactoryForRef:p=>oe(b$1(p).value),journalAdapter:()=>Ve(s),boardWorkerStore:()=>(u||(u=H(_(b(s,".board-worker-queue")))),u),chatAgentStore:()=>(g$1||(g$1=H(_(b(s,".chat-agent-queue")))),g$1),processAccumulatedStore:()=>(i||(i=_(b(s,".process-accumulated-queue"))),i),lock:ze(b(s,Yt)),callbackTransport:S,async dispatchExecution(p,x){let B=!!x.output?.ref;if(p.howToRun==="queue-storage")try{let R=u??H(_(b(s,".board-worker-queue")));u||(u=R);let E=typeof p.extra?.boardId=="string"?p.extra.boardId:void 0;if(B)return R.enqueueRequest({boardId:E,ref:p,args:x}),{dispatched:!0};let F=x.source_def?.bindTo??X().slice(0,8),w=G(b(s,".tmp")),I=w.create(JSON.stringify(x,null,2),`exec-in-${F}`,".json"),J=w.getUniqueKey(`exec-out-${F}`,".json"),O=w.getUniqueKey(`exec-err-${F}`,".txt"),ae=a$2(w.keyRef(I)),Y=a$2(w.keyRef(J)),ie=a$2(w.keyRef(O));return R.enqueueRequest({boardId:E,ref:p,args:{subcommand:"run-source-fetch",inRef:ae,outRef:Y,errRef:ie}}),{dispatched:!0}}catch(R){return {dispatched:false,error:R instanceof Error?R.message:String(R)}}if(B&&(p.howToRun==="http:post"||p.howToRun==="in-process-loop"))try{if(p.howToRun==="http:post"){let F=$(p.whatToRun),w=await fetch(F,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...x,...p.extra?{extra:p.extra}:{}})});if(!w.ok){let I=await w.text().catch(()=>"");return {dispatched:!1,error:`HTTP ${w.status}: ${I}`}}return {dispatched:!0}}let R=await D(p,x,{cwd:process.cwd(),label:"dispatchExecution.directHostedWorker"});return R.result==="success"?{dispatched:!0}:{dispatched:!1,error:(typeof R.data?.error=="string"?R.data.error:R.error)||R.result}}catch(R){return {dispatched:false,error:R instanceof Error?R.message:String(R)}}let v=p.howToRun==="local-node"||p.howToRun==="local-process"||p.howToRun==="local-python"||p.howToRun==="built-in";if(o?.suppressSpawn&&v)return {dispatched:false};try{let R=x.source_def?.bindTo??X().slice(0,8),E=G(b(s,".tmp")),F=E.create(JSON.stringify(x,null,2),`exec-in-${R}`,".json"),w=E.getUniqueKey(`exec-out-${R}`,".json"),I=E.getUniqueKey(`exec-err-${R}`,".txt"),J=a$2(E.keyRef(F)),O=a$2(E.keyRef(w)),ae=a$2(E.keyRef(I)),Y=u??H(_(b(s,".board-worker-queue")));u||(u=Y);let ie=typeof p.extra?.boardId=="string"?p.extra.boardId:void 0;return Y.enqueueRequest({boardId:ie,ref:p,args:{subcommand:"run-source-fetch",inRef:J,outRef:O,errRef:ae}}),k(),{dispatched:!0}}catch(R){let E=R instanceof Error?R.message:String(R);try{let F=oe(b(s,"archive")),w=new Date().toISOString().replace(/[:.]/g,"-"),I=x.source_def?.bindTo??"unknown";F.blob("exec-failures").write(`${w}-${I}.json`,JSON.stringify({error:E,args:x,ref:p,at:new Date().toISOString()},null,2));}catch{}return {dispatched:false,error:E}}},supportsDirectSourceOutput(p){return p.howToRun==="queue-storage"||p.howToRun==="http:post"||p.howToRun==="in-process-loop"},resolveBlob(p){let x=Be(p.value)?we().read(p.value):U(s).read(p.value);if(x===null)throw new Error(`resolveBlob: blob not found: ::${p.kind}::${p.value}`);return x},hashFn:Ue,genId:()=>Ie(`${Date.now()}-${Math.random()}`).slice(0,32),kvStorageForRef:p=>se(b$1(p).value),requestProcessAccumulated(){if(o?.suppressSpawn||d)return;let p=this,x=c??=y$1(e,p),B=pe({id:"process-accumulated",queueStorage:p.processAccumulatedStore(),handleMessage:async()=>{let v=await x.processAccumulatedEvents({});if(v.status!=="success")throw new Error(v.error||`processAccumulatedEvents returned ${v.status}`)}});d=ee(B).catch(v=>{o?.onWarn?.(`[process-accumulated] in-process queue drain failed: ${v instanceof Error?v.message:String(v)}`);}).finally(()=>{d=null,p.processAccumulatedStore().peekActive().length>0&&p.requestProcessAccumulated?.();});},publishBoardChangeNotifications(p){if(!o?.notifyChannel||p.length===0)return;let x=p.map(B=>({id:X(),ts:new Date().toISOString(),boardRef:a$2(e),notification:B}));Le(o.notifyChannel,x,o.onWarn);},onWarn:o?.onWarn},h}function Jr(e,t,r){let{cliDir:n,opts:o}=Xt(t,r),s,u=()=>(s||(s=Ze(n)),s);return {...er(e,n,o),async invokeExecutor(g,i,c){if(g.howToRun==="queue-storage")throw new Error("queue-storage does not support inline executor request/response");if(g.howToRun==="http:post"||g.howToRun==="http:get"||g.howToRun==="in-process-loop"){let h=await D(g,{subcommand:i,...c?.input!==void 0?{input:c.input}:{},...g.extra?{extra:g.extra}:{}},{cwd:process.cwd(),timeoutMs:c?.timeout??3e4,label:`invokeExecutor:${i}`});if(h.result!=="success"){let k=typeof h.data?.error=="string"?h.data.error:h.error;throw new Error(k||`executor request failed: ${h.result}`)}return typeof h.data?.stdout=="string"?h.data.stdout:JSON.stringify(h.data??{})}let{command:d,baseArgs:f}=te(g,u()),m=g.extra?["--extra",Buffer.from(JSON.stringify(g.extra)).toString("base64")]:[],S=[...f,i,...m];return await new Promise((h,k)=>{let p=spawn(d,S,{cwd:process.cwd(),stdio:"pipe",windowsHide:true,shell:process.platform==="win32"&&/\.(cmd|bat)$/i.test(d)}),x=[],B=[],v=false,R=null,E=w=>{v||(v=true,R&&clearTimeout(R),k(w));},F=w=>{v||(v=true,R&&clearTimeout(R),h(w));};p.stdout.on("data",w=>{x.push(Buffer.from(w));}),p.stderr.on("data",w=>{B.push(Buffer.from(w));}),p.on("error",w=>{let I=w;I.stdout=Buffer.concat(x).toString("utf-8"),I.stderr=Buffer.concat(B).toString("utf-8"),E(I);}),p.on("close",w=>{let I=Buffer.concat(x).toString("utf-8"),J=Buffer.concat(B).toString("utf-8");if(w===0){F(I);return}let O=new Error(J.trim()||`executor exited with status ${w}`);O.stdout=I,O.stderr=J,E(O);}),c?.timeout&&c.timeout>0&&(R=setTimeout(()=>{p.kill();let w=new Error(`executor timed out after ${c.timeout}ms`);w.stdout=Buffer.concat(x).toString("utf-8"),w.stderr=Buffer.concat(B).toString("utf-8"),E(w);},c.timeout)),c?.input!==void 0?p.stdin.end(c.input):p.stdin.end();})},validateSchema(g){let i=d(g);return {ok:i.errors.length===0,errors:i.errors}},absoluteBlob:we()}}function Dr(e,t={}){let r=t.chatsSubdir??"chats",n=t.kvSubdir??".kv",o=n?[n,"chat"]:["chat"],s=r&&!Ye(e,r)?b(e,r):e,u=se(b(e,...o));return a$3(l=>{let i=`${String(l).replace(/[^a-zA-Z0-9_-]/g,"_")}.jsonl`,c=b(s,i);return ke(c)},u)}function Hr(e,t={}){let r=t.filesSubdir??"files",n=r&&!Ye(e,r)?b(e,r):e;return c(U(n))}function Kr(e){try{let t=JSON.parse(Buffer.from(e,"base64url").toString());return typeof t.br=="string"?t.br:null}catch{return null}}export{te as buildLocalBaseSpec,fe as createBoardWorkerQueueLane,H as createBoardWorkerStore,Lt as createExecutionRefInvoker,Dr as createFsBoardChatStorage,Hr as createFsBoardFileArtifactsStore,Jr as createFsBoardNonCorePlatformAdapter,er as createFsBoardPlatformAdapter,_ as createFsQueueStorage,_r as createNodeSpawnInvocationAdapter,pe as createQueueStorageLane,Kr as decodeBoardRefFromToken,ee as drainQueueLaneToIdle,me as evaluateArgsMassaging,D as invokeExecutionRef,ye as invokeExecutionRefSync,qt as invokeRefSync,Ft as registerInProcessExecutionHandler,$ as resolveWhatToRunValue,Ne as resolveYamlFlowCliPath,Qe as startQueueLaneRunner,At as startQueueLaneRunners,Mt as unregisterInProcessExecutionHandler};//# sourceMappingURL=board-live-cards-node.js.map
12
12
  //# sourceMappingURL=board-live-cards-node.js.map
@@ -1,41 +1,7 @@
1
- import { Q as QueueStorage, K as KVStorage, B as BlobStorage, S as ScratchStorage, A as ArchiveFactory, b as AtomicRelayLock, a as KindValueRef } from './storage-interface-Ct-C4tlz.js';
1
+ import { g as QueueStorage, K as KVStorage, B as BlobStorage, S as ScratchStorage, A as ArchiveFactory, h as AtomicRelayLock, a as KindValueRef } from './storage-interface-BFiD3kyB.js';
2
2
  import { ExecutionRef } from './execution-refs.js';
3
3
  import { f as GraphEvent, G as GraphConfig } from './types-BBhqYGhE.js';
4
4
 
5
- interface BoardWorkerRequest {
6
- boardId?: string;
7
- ref: ExecutionRef;
8
- args: Record<string, unknown>;
9
- }
10
- interface BoardWorkerQueuedRequest {
11
- messageId: string;
12
- enqueuedAt: string;
13
- attempt: number;
14
- request: BoardWorkerRequest;
15
- }
16
- interface BoardWorkerLeasedRequest extends BoardWorkerQueuedRequest {
17
- leaseToken: string;
18
- leaseExpiresAt: string;
19
- }
20
- interface BoardWorkerDeadLetterRequest extends BoardWorkerQueuedRequest {
21
- reason?: string;
22
- }
23
- interface BoardWorkerStore {
24
- enqueueRequest(request: BoardWorkerRequest): string;
25
- leaseRequests(opts?: {
26
- max?: number;
27
- visibilityMs?: number;
28
- }): BoardWorkerLeasedRequest[];
29
- ackRequest(messageId: string, leaseToken: string): boolean;
30
- nackRequest(messageId: string, leaseToken: string, opts?: {
31
- dead?: boolean;
32
- reason?: string;
33
- }): boolean;
34
- peekActive(): BoardWorkerQueuedRequest[];
35
- peekDeadLetter(): BoardWorkerDeadLetterRequest[];
36
- }
37
- declare function createBoardWorkerStore(queue: QueueStorage): BoardWorkerStore;
38
-
39
5
  /**
40
6
  * board-live-cards-lib — Pure logic library for the board-live-cards CLI.
41
7
  *
@@ -105,6 +71,10 @@ interface JournalStorageAdapter {
105
71
  }
106
72
  declare const SNAPSHOT_SCHEMA_VERSION_V1 = "v1";
107
73
  declare const BOARD_GRAPH_KEY = "board/graph";
74
+ interface StateSnapshotReadView {
75
+ version: string | null;
76
+ values: Record<string, unknown>;
77
+ }
108
78
  type OutputStoreEvent = {
109
79
  kind: 'computed_values';
110
80
  cardId: string;
@@ -170,6 +140,52 @@ interface BoardStatusObject {
170
140
  }
171
141
  declare const EMPTY_CONFIG: GraphConfig;
172
142
 
143
+ interface BoardTaskCallback {
144
+ token: string;
145
+ via: ExecutionRef;
146
+ }
147
+ interface BoardCallbackTransport {
148
+ createCallback(token: string): BoardTaskCallback;
149
+ }
150
+ declare function createHttpBoardCallbackTransport(baseUrl: string): BoardCallbackTransport;
151
+ declare function createInProcessBoardCallbackTransport(handlerKey: string): BoardCallbackTransport;
152
+ declare function createLocalNodeBoardCallbackTransport(notifyChannel?: string): BoardCallbackTransport;
153
+
154
+ interface BoardWorkerRequest {
155
+ boardId?: string;
156
+ ref: ExecutionRef;
157
+ args: Record<string, unknown>;
158
+ }
159
+ interface BoardWorkerQueuedRequest {
160
+ messageId: string;
161
+ enqueuedAt: string;
162
+ attempt: number;
163
+ request: BoardWorkerRequest;
164
+ }
165
+ interface BoardWorkerLeasedRequest extends BoardWorkerQueuedRequest {
166
+ leaseToken: string;
167
+ leaseExpiresAt: string;
168
+ }
169
+ interface BoardWorkerDeadLetterRequest extends BoardWorkerQueuedRequest {
170
+ reason?: string;
171
+ }
172
+ interface BoardWorkerStore {
173
+ enqueueRequest(request: BoardWorkerRequest): string;
174
+ enqueueRequestIfAbsent?(request: BoardWorkerRequest, dedupKey: string): string | null;
175
+ leaseRequests(opts?: {
176
+ max?: number;
177
+ visibilityMs?: number;
178
+ }): BoardWorkerLeasedRequest[];
179
+ ackRequest(messageId: string, leaseToken: string): boolean;
180
+ nackRequest(messageId: string, leaseToken: string, opts?: {
181
+ dead?: boolean;
182
+ reason?: string;
183
+ }): boolean;
184
+ peekActive(): BoardWorkerQueuedRequest[];
185
+ peekDeadLetter(): BoardWorkerDeadLetterRequest[];
186
+ }
187
+ declare function createBoardWorkerStore(queue: QueueStorage): BoardWorkerStore;
188
+
173
189
  /**
174
190
  * board-live-cards-public.ts
175
191
  *
@@ -272,6 +288,17 @@ interface BoardPlatformAdapter {
272
288
  * Implementations may back this with QueueStorage, Service Bus, Pub/Sub, etc.
273
289
  */
274
290
  boardWorkerStore(): BoardWorkerStore;
291
+ /**
292
+ * Semantic queue for chat-agent dispatch requests.
293
+ * Kept separate from task execution so chat work can be drained independently.
294
+ */
295
+ chatAgentStore(): BoardWorkerStore;
296
+ /**
297
+ * Queue of board wake-up requests for processAccumulatedEvents scheduling.
298
+ * Implementations should use enqueueIfAbsent when they want single-pending
299
+ * drain semantics.
300
+ */
301
+ processAccumulatedStore(): QueueStorage;
275
302
  /**
276
303
  * AtomicRelayLock — non-blocking try-acquire with relay-on-busy semantics.
277
304
  * Guards processAccumulatedEvents drain cycle.
@@ -281,17 +308,15 @@ interface BoardPlatformAdapter {
281
308
  */
282
309
  lock: AtomicRelayLock;
283
310
  /**
284
- * Self-identity ExecutionRef how to invoke THIS board instance.
285
- * Embedded in source callback tokens so executors know where to report back.
286
- * Node/FS: { howToRun: 'local-node', whatToRun: 'b64:<base64url({"kind":"yaml-flow-cli","value":"board-live-cards-cli.js"})>' }
287
- * Azure Fn: { howToRun: 'http:post', whatToRun: 'b64:<base64url({"kind":"http-url","value":"https://…/api/board"})>' }
311
+ * Adapter-owned callback transport used to build worker callback payloads.
312
+ * The board core treats callback delivery as a platform concern.
288
313
  */
289
- selfRef: ExecutionRef;
314
+ callbackTransport?: BoardCallbackTransport;
290
315
  /**
291
316
  * Generic execution dispatch — platform adapts ExecutionRef → actual transport.
292
317
  * Public layer constructs fully-formed semantic args (source def, base_ref,
293
318
  * callback token with selfRef baked in). Platform handles transport:
294
- * Node: writes args to temp file, spawns detached process
319
+ * Node host adapter: may write args to temp file and may spawn a detached process
295
320
  * Azure: HTTP POST args as JSON body
296
321
  * Firebase: publishes args as pubsub message
297
322
  */
@@ -478,4 +503,4 @@ interface BoardLiveCardsNonCorePublic {
478
503
  }
479
504
  declare function createBoardLiveCardsNonCorePublic(baseRef: KindValueRef, adapter: BoardNonCorePlatformAdapter): BoardLiveCardsNonCorePublic;
480
505
 
481
- export { type BoardChangeNotification as B, type CommandResult as C, EMPTY_CONFIG as E, type LiveCard as L, SNAPSHOT_SCHEMA_VERSION_V1 as S, type CommandInput as a, type CardAdminStore as b, type BoardLiveCardsPublic as c, type BoardNonCorePlatformAdapter as d, type BoardPlatformAdapter as e, type BoardWorkerStore as f, type BoardWorkerRequest as g, type BoardWorkerLeasedRequest as h, BOARD_GRAPH_KEY as i, type BoardLiveCardsNonCorePublic as j, type BoardWorkerDeadLetterRequest as k, type BoardWorkerQueuedRequest as l, createBoardLiveCardsNonCorePublic as m, createBoardLiveCardsPublic as n, createBoardWorkerStore as o, createCardStore as p };
506
+ export { type BoardWorkerRequest as B, type CommandResult as C, EMPTY_CONFIG as E, type LiveCard as L, type StateSnapshotReadView as S, type CommandInput as a, type CardAdminStore as b, type BoardChangeNotification as c, type BoardLiveCardsPublic as d, type BoardNonCorePlatformAdapter as e, type BoardPlatformAdapter as f, type BoardCallbackTransport as g, type BoardStatusObject as h, type CardChecksumIndex as i, type CardUpsertValidation as j, type CardIndex as k, type BoardWorkerStore as l, BOARD_GRAPH_KEY as m, type BoardLiveCardsNonCorePublic as n, type BoardWorkerDeadLetterRequest as o, type BoardWorkerLeasedRequest as p, type BoardWorkerQueuedRequest as q, SNAPSHOT_SCHEMA_VERSION_V1 as r, createBoardLiveCardsNonCorePublic as s, createBoardLiveCardsPublic as t, createBoardWorkerStore as u, createCardStore as v, createHttpBoardCallbackTransport as w, createInProcessBoardCallbackTransport as x, createLocalNodeBoardCallbackTransport as y };