yaml-flow 8.5.3 → 8.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/asset-integrity.json +3 -3
- package/examples/board/demo-shell-with-server.html +2 -2
- package/examples/board/doc.html +2 -2
- package/examples/board/server/board-server.js +773 -13
- package/examples/board/server/board-worker/task-executor.js +166 -51
- package/examples/board/server/chat-flow/copilot-chat/assistant.js +25 -12
- package/examples/board/server/chat-flow/copilot-chat/probe.js +7 -0
- package/examples/board/server/chat-flow/copilot-chat/shared.js +97 -0
- package/examples/board/server/chat-flow/flow-steps.json +109 -51
- package/examples/board/server-config.json +2 -0
- package/examples/board/test/server-http-test.js +878 -67
- package/examples/board-local/demo-shell-localstorage.html +3 -3
- package/lib/{artifacts-store-lib-CVgtQrNZ.d.cts → artifacts-store-lib-BR-Samty.d.cts} +1 -1
- package/lib/{artifacts-store-lib-D-k-E8Vy.d.ts → artifacts-store-lib-DT7XlWUL.d.ts} +1 -1
- package/lib/artifacts-store-public.cjs +1 -1
- package/lib/artifacts-store-public.d.cts +3 -3
- package/lib/artifacts-store-public.d.ts +3 -3
- package/lib/artifacts-store-public.js +1 -1
- package/lib/batch/index.cjs +1 -1
- package/lib/batch/index.js +1 -1
- package/lib/board-live-cards-mcp.cjs +1 -1
- package/lib/board-live-cards-mcp.d.cts +87 -34
- package/lib/board-live-cards-mcp.d.ts +87 -34
- package/lib/board-live-cards-mcp.js +1 -1
- package/lib/board-live-cards-node.cjs +8 -16
- package/lib/board-live-cards-node.d.cts +52 -14
- package/lib/board-live-cards-node.d.ts +52 -14
- package/lib/board-live-cards-node.js +8 -16
- package/lib/{board-live-cards-public-BGS22cMb.d.ts → board-live-cards-public-BMUIPOrc.d.ts} +90 -30
- package/lib/board-live-cards-public-async-DKZqbJVU.d.ts +256 -0
- package/lib/board-live-cards-public-async-dMWNbWq6.d.cts +256 -0
- package/lib/{board-live-cards-public-B13InXhC.d.cts → board-live-cards-public-wkNmBIRC.d.cts} +90 -30
- package/lib/board-live-cards-public.cjs +1 -2
- package/lib/board-live-cards-public.d.cts +2 -2
- package/lib/board-live-cards-public.d.ts +2 -2
- package/lib/board-live-cards-public.js +1 -2
- package/lib/board-live-cards-server-runtime.cjs +1 -7
- package/lib/board-live-cards-server-runtime.d.cts +7 -6
- package/lib/board-live-cards-server-runtime.d.ts +7 -6
- package/lib/board-live-cards-server-runtime.js +1 -7
- package/lib/board-livegraph-runtime/index.cjs +1 -2
- package/lib/board-livegraph-runtime/index.js +1 -2
- package/lib/board-worker-adapter.cjs +22 -7
- package/lib/board-worker-adapter.d.cts +28 -3
- package/lib/board-worker-adapter.d.ts +28 -3
- package/lib/board-worker-adapter.js +22 -7
- package/lib/card-compute/index.cjs +1 -9
- package/lib/card-compute/index.js +1 -9
- package/lib/card-store-public.cjs +1 -1
- package/lib/card-store-public.d.cts +2 -2
- package/lib/card-store-public.d.ts +2 -2
- package/lib/card-store-public.js +1 -1
- package/lib/card-validation.cjs +1 -9
- package/lib/card-validation.js +1 -9
- package/lib/{chat-storage-lib-0imhRX3l.d.cts → chat-storage-lib-BIUbE-fM.d.cts} +1 -1
- package/lib/{chat-storage-lib-CJn7a6OH.d.ts → chat-storage-lib-BlG-sobS.d.ts} +1 -1
- package/lib/chat-store-public.cjs +1 -1
- package/lib/chat-store-public.d.cts +3 -3
- package/lib/chat-store-public.d.ts +3 -3
- package/lib/chat-store-public.js +1 -1
- package/lib/chunk-2MZUYY65.cjs +2 -0
- package/lib/chunk-5EA2ESS4.cjs +16 -0
- package/lib/chunk-76ON3V7R.js +2 -0
- package/lib/chunk-7BKNHFNH.js +2 -0
- package/lib/chunk-BQS3EIEK.js +3 -0
- package/lib/chunk-CIAJNUR4.js +2 -0
- package/lib/chunk-DAXACY63.js +2 -0
- package/lib/chunk-FW4363Y4.js +2 -0
- package/lib/chunk-FZ2SBU5M.js +3 -0
- package/lib/chunk-G4XXRHL2.cjs +3 -0
- package/lib/chunk-GJJMEAVN.cjs +2 -0
- package/lib/chunk-GNFE24S7.cjs +2 -0
- package/lib/chunk-GYQXDNNI.cjs +2 -0
- package/lib/chunk-H5HBXPOI.cjs +3 -0
- package/lib/chunk-H5KD3JPY.cjs +2 -0
- package/lib/chunk-HEEDJEKM.js +2 -0
- package/lib/chunk-HLJH7LGW.js +16 -0
- package/lib/chunk-IXZG74EW.cjs +2 -0
- package/lib/chunk-JAL25FGA.cjs +2 -0
- package/lib/chunk-JM5EKT57.js +2 -0
- package/lib/chunk-JMDHDY6M.js +2 -0
- package/lib/chunk-KBELAKIY.js +2 -0
- package/lib/chunk-KHJABJ45.cjs +3 -0
- package/lib/chunk-KLRUISRY.cjs +2 -0
- package/lib/chunk-KQX6R4PV.cjs +8 -0
- package/lib/chunk-LODXIALE.cjs +2 -0
- package/lib/chunk-MLVTJASJ.js +2 -0
- package/lib/chunk-MNEOJWPS.js +10 -0
- package/lib/chunk-N6P2JW4W.js +3 -0
- package/lib/chunk-NMZ6XNLB.cjs +3 -0
- package/lib/chunk-OEFTOO47.cjs +3 -0
- package/lib/chunk-OPNGCSXJ.js +2 -0
- package/lib/chunk-OSWJKJLB.js +8 -0
- package/lib/chunk-P7ZCDICS.cjs +2 -0
- package/lib/chunk-PBCDDO4V.cjs +2 -0
- package/lib/chunk-PMUSJQSR.cjs +2 -0
- package/lib/chunk-Q6H7NINN.cjs +5 -0
- package/lib/chunk-QWBNDVUA.js +5 -0
- package/lib/chunk-S6DRP2HX.cjs +2 -0
- package/lib/chunk-SCWHDI3I.js +2 -0
- package/lib/chunk-SFVO2LB2.cjs +3 -0
- package/lib/chunk-U2N6MCD5.cjs +2 -0
- package/lib/chunk-UJ7ZTV4J.cjs +10 -0
- package/lib/chunk-VGT3TRQG.js +3 -0
- package/lib/chunk-VLBB3D6B.js +3 -0
- package/lib/chunk-VMW4Z6EF.js +3 -0
- package/lib/chunk-WDPOGXTY.js +2 -0
- package/lib/chunk-WOALA3V5.cjs +2 -0
- package/lib/chunk-X3LC4LII.js +2 -0
- package/lib/chunk-XQRNDX4Q.js +2 -0
- package/lib/chunk-YGKDQLYP.js +2 -0
- package/lib/chunk-YMEIPKLW.cjs +2 -0
- package/lib/cloud-storage.cjs +2 -0
- package/lib/cloud-storage.d.cts +177 -0
- package/lib/cloud-storage.d.ts +177 -0
- package/lib/cloud-storage.js +2 -0
- package/lib/config/index.cjs +1 -1
- package/lib/config/index.js +1 -1
- package/lib/continuous-event-graph/index.cjs +1 -2
- package/lib/continuous-event-graph/index.js +1 -2
- package/lib/event-graph/index.cjs +1 -22
- package/lib/event-graph/index.js +1 -22
- package/lib/execution-refs.cjs +1 -2
- package/lib/execution-refs.d.cts +3 -2
- package/lib/execution-refs.d.ts +3 -2
- package/lib/execution-refs.js +1 -2
- package/lib/index.cjs +2 -24
- package/lib/index.d.cts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -24
- package/lib/{types-CIgsh56O.d.cts → queue-lane-registry-BPKWWgd4.d.cts} +66 -14
- package/lib/{types-30R357js.d.ts → queue-lane-registry-Be6c0ftj.d.ts} +66 -14
- package/lib/server-runtime/index.cjs +1 -7
- package/lib/server-runtime/index.d.cts +18 -7
- package/lib/server-runtime/index.d.ts +18 -7
- package/lib/server-runtime/index.js +1 -7
- package/lib/step-machine/index.cjs +1 -11
- package/lib/step-machine/index.js +1 -11
- package/lib/step-machine-public/index.cjs +1 -4
- package/lib/step-machine-public/index.d.cts +1 -1
- package/lib/step-machine-public/index.d.ts +1 -1
- package/lib/step-machine-public/index.js +1 -4
- package/lib/{storage-interface-B2WD9D5n.d.cts → storage-interface-BFiD3kyB.d.cts} +38 -1
- package/lib/{storage-interface-B2WD9D5n.d.ts → storage-interface-BFiD3kyB.d.ts} +38 -1
- package/lib/stores/index.cjs +1 -2
- package/lib/stores/index.d.cts +1 -1
- package/lib/stores/index.d.ts +1 -1
- package/lib/stores/index.js +1 -2
- package/lib/stores/kv.cjs +1 -2
- package/lib/stores/kv.d.cts +1 -1
- package/lib/stores/kv.d.ts +1 -1
- package/lib/stores/kv.js +1 -2
- package/lib/stores/memory.cjs +1 -1
- package/lib/stores/memory.js +1 -1
- package/package.json +7 -16
- package/cli/board-live-cards-lib-COi4bSpk.d.ts +0 -322
- package/cli/browser-api/board-live-cards-browser-adapter.d.ts +0 -36
- package/cli/browser-api/board-live-cards-browser-adapter.js +0 -4
- package/cli/browser-api/card-store-browser-api.d.ts +0 -25
- package/cli/browser-api/card-store-browser-api.js +0 -2
- package/cli/browser-api/jsonata-sync.cjs +0 -7623
- package/cli/bundled/artifacts-store-cli.mjs +0 -12
- package/cli/bundled/batch-runner-cli.mjs +0 -3
- package/cli/bundled/board-live-cards-cli.mjs +0 -29
- package/cli/bundled/card-store-cli.mjs +0 -154
- package/cli/bundled/chat-store-cli.mjs +0 -16
- package/cli/bundled/jsonata-sync.cjs +0 -7623
- package/cli/bundled/step-machine-cli.mjs +0 -150
- package/cli/execution-interface-BCIhu1gO.d.ts +0 -442
- package/cli/types-H3EMBPY2.d.ts +0 -398
- package/examples/board/server/README-mcp-api.md +0 -690
- package/examples/board/test/server-http-mcp-test.js +0 -1280
- package/lib/board-livegraph-runtime/jsonata-sync.cjs +0 -7623
- package/lib/card-compute/jsonata-sync.cjs +0 -7623
- package/lib/continuous-event-graph/jsonata-sync.cjs +0 -7623
- package/lib/server-runtime/jsonata-sync.cjs +0 -7623
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var chunkLODXIALE_cjs=require('./chunk-LODXIALE.cjs');function W(t,e){let n=e??`live-${Date.now()}`,s={};for(let d of Object.keys(t.tasks))s[d]=H();let a={status:"running",tasks:s,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:n,executionConfig:{executionMode:t.settings.execution_mode??"eligibility-mode",conflictStrategy:t.settings.conflict_strategy??"alphabetical",completionStrategy:t.settings.completion}};return {config:t,state:a}}function X(t,e){let{config:n,state:s}=t;if("executionId"in e&&e.executionId&&e.executionId!==s.executionId)return t;switch(e.type){case "task-started":return {config:n,state:chunkLODXIALE_cjs.B(s,e.taskName,n)};case "task-completed":return {config:n,state:chunkLODXIALE_cjs.C(s,n,e.taskName,e.result,e.dataHash,e.data)};case "task-failed":return {config:n,state:chunkLODXIALE_cjs.D(s,n,e.taskName,e.error)};case "task-progress":return {config:n,state:chunkLODXIALE_cjs.E(s,e.taskName,e.message,e.progress)};case "task-restart":return {config:n,state:chunkLODXIALE_cjs.F(s,e.taskName)};case "inject-tokens":return {config:n,state:{...s,availableOutputs:[...new Set([...s.availableOutputs,...e.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:n,state:it(s,e.action)};case "task-upsert":return et(t,e.taskName,e.taskConfig);case "task-removal":return nt(t,e.taskName);case "node-requires-add":return st(t,e.nodeName,e.tokens);case "node-requires-remove":return rt(t,e.nodeName,e.tokens);case "node-provides-add":return at(t,e.nodeName,e.tokens);case "node-provides-remove":return ot(t,e.nodeName,e.tokens);default:return t}}function Y(t,e){return e.reduce((n,s)=>X(n,s),t)}function et(t,e,n){let s=!!t.config.tasks[e];return {config:{...t.config,tasks:{...t.config.tasks,[e]:n}},state:{...t.state,tasks:{...t.state.tasks,[e]:s?t.state.tasks[e]:H()},lastUpdated:new Date().toISOString()}}}function nt(t,e){if(!t.config.tasks[e])return t;let{[e]:n,...s}=t.config.tasks,{[e]:a,...d}=t.state.tasks;return {config:{...t.config,tasks:s},state:{...t.state,tasks:d,lastUpdated:new Date().toISOString()}}}function st(t,e,n){let s=t.config.tasks[e];if(!s)return t;let a=chunkLODXIALE_cjs.h(s),d=n.filter(u=>!a.includes(u));return d.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...s,requires:[...a,...d]}}},state:t.state}}function rt(t,e,n){let s=t.config.tasks[e];if(!s)return t;let a=chunkLODXIALE_cjs.h(s),d=a.filter(u=>!n.includes(u));return d.length===a.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...s,requires:d}}},state:t.state}}function at(t,e,n){let s=t.config.tasks[e];if(!s)return t;let a=chunkLODXIALE_cjs.g(s),d=n.filter(u=>!a.includes(u));return d.length===0?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...s,provides:[...a,...d]}}},state:t.state}}function ot(t,e,n){let s=t.config.tasks[e];if(!s)return t;let a=chunkLODXIALE_cjs.g(s),d=a.filter(u=>!n.includes(u));return d.length===a.length?t:{config:{...t.config,tasks:{...t.config.tasks,[e]:{...s,provides:d}}},state:t.state}}function ht(t,e){return X(t,{type:"inject-tokens",tokens:e,timestamp:new Date().toISOString()})}function kt(t,e){let n=new Set(e),s=t.state.availableOutputs.filter(a=>!n.has(a));return s.length===t.state.availableOutputs.length?t:{config:t.config,state:{...t.state,availableOutputs:s,lastUpdated:new Date().toISOString()}}}function mt(t,e){return !t.config.tasks[e]||!t.state.tasks[e]?t:{config:t.config,state:{...t.state,tasks:{...t.state.tasks,[e]:H()},lastUpdated:new Date().toISOString()}}}function St(t,e){let n=t.state.tasks[e];return !n||n.status==="inactivated"?t:{config:t.config,state:{...t.state,tasks:{...t.state.tasks,[e]:{...n,status:"inactivated",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function vt(t,e){let n=t.state.tasks[e];return !n||n.status!=="inactivated"?t:{config:t.config,state:{...t.state,tasks:{...t.state.tasks,[e]:{...n,status:"not-started",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function yt(t,e){let n=t.config.tasks[e];if(!n)return;let s=t.state.tasks[e]??H();return {name:e,config:n,state:s}}function Z(t){return {version:1,config:t.config,state:t.state,snapshotAt:new Date().toISOString()}}function bt(t){if(!t||typeof t!="object")throw new Error("Invalid snapshot: expected an object");let e=t;if(!e.config||typeof e.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!e.state||typeof e.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let n=e.config,s=e.state;if(!n.settings||typeof n.settings!="object")throw new Error("Invalid snapshot: config.settings missing");if(!n.tasks||typeof n.tasks!="object")throw new Error("Invalid snapshot: config.tasks missing");if(!s.tasks||typeof s.tasks!="object")throw new Error("Invalid snapshot: state.tasks missing");if(!Array.isArray(s.availableOutputs))throw new Error("Invalid snapshot: state.availableOutputs must be an array");return {config:n,state:s}}function H(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function it(t,e){let n=new Date().toISOString();switch(e){case "stop":return {...t,status:"stopped",lastUpdated:n};case "pause":return {...t,status:"paused",lastUpdated:n};case "resume":return {...t,status:"running",lastUpdated:n};default:return t}}function A(t){let{config:e,state:n}=t,s=chunkLODXIALE_cjs.i(e);if(Object.keys(s).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let d=ct(s),u=chunkLODXIALE_cjs.r(e,n.tasks),l=new Set([...u,...n.availableOutputs]),f=[],y=[],O=[],G=[];for(let[v,p]of Object.entries(s)){let k=n.tasks[v],N=chunkLODXIALE_cjs.o(p,e.settings),I=N!=="once";if(k?.status===chunkLODXIALE_cjs.a.RUNNING||chunkLODXIALE_cjs.l(k))continue;let D=chunkLODXIALE_cjs.q(p);if(D!==void 0&&k&&k.executionCount>=D||p.circuit_breaker&&k&&k.executionCount>=p.circuit_breaker.max_executions||!I&&k?.status===chunkLODXIALE_cjs.a.COMPLETED)continue;if(I&&k?.status===chunkLODXIALE_cjs.a.COMPLETED){let c=chunkLODXIALE_cjs.h(p),i=false;switch(N){case "data-changed":{c.length>0&&c.some(S=>{for(let[w,T]of Object.entries(s))if(chunkLODXIALE_cjs.g(T).includes(S)){let b=n.tasks[w];if(!b)continue;let L=k.lastConsumedHashes?.[S];return b.lastDataHash==null?b.executionCount>k.lastEpoch:b.lastDataHash!==L}return false})||(i=true);break}case "epoch-changed":{c.length>0&&c.some(S=>{for(let[w,T]of Object.entries(s))if(chunkLODXIALE_cjs.g(T).includes(S)){let b=n.tasks[w];if(b&&b.executionCount>k.lastEpoch)return true}return false})||(i=true);break}case "time-based":{let m=p.refreshInterval??0;if(m<=0){i=true;break}let S=k.completedAt;if(!S){i=true;break}(Date.now()-Date.parse(S))/1e3<m&&(i=true);break}case "manual":i=true;break}if(i)continue}let r=chunkLODXIALE_cjs.h(p);if(r.length===0){f.push(v);continue}let o=[],g=[],h=[];for(let c of r){if(l.has(c))continue;let i=d[c]||[];i.length===0?o.push(c):i.every(S=>chunkLODXIALE_cjs.l(n.tasks[S]))?h.push({token:c,failedProducer:i[0]}):g.push(c);}o.length>0?O.push({taskName:v,missingTokens:o}):h.length>0?G.push({taskName:v,failedTokens:h.map(c=>c.token),failedProducers:[...new Set(h.map(c=>c.failedProducer))]}):g.length>0?y.push({taskName:v,waitingOn:g}):f.push(v);}let E={};if(f.length>1){let v=chunkLODXIALE_cjs.s(f,s);for(let[p,k]of Object.entries(v))k.length>1&&(E[p]=k);}return {eligible:f,pending:y,unresolved:O,blocked:G,conflicts:E}}function ct(t){let e={};for(let[n,s]of Object.entries(t)){for(let a of chunkLODXIALE_cjs.g(s))e[a]||(e[a]=[]),e[a].push(n);if(s.on)for(let a of Object.values(s.on))for(let d of a)e[d]||(e[d]=[]),e[d].includes(n)||e[d].push(n);if(s.on_failure)for(let a of s.on_failure)e[a]||(e[a]=[]),e[a].includes(n)||e[a].push(n);}return e}var C=class{buffer=[];append(e){this.buffer.push(e);}drain(){let e=this.buffer;return this.buffer=[],e}get size(){return this.buffer.length}};function U(t){let e=q(t);return dt(e)}function q(t){if(t==null||typeof t!="object")return JSON.stringify(t);if(Array.isArray(t))return "["+t.map(q).join(",")+"]";let e=t;return "{"+Object.keys(e).sort().map(s=>JSON.stringify(s)+":"+q(e[s])).join(",")+"}"}function dt(t){let e=0xcbf29ce484222325n,n=0x100000001b3n,s=0xffffffffffffffffn;for(let a=0;a<t.length;a++)e^=BigInt(t.charCodeAt(a)),e=e*n&s;return e.toString(16).padStart(16,"0")}function ut(t){if(typeof Buffer<"u")return Buffer.from(t,"utf8").toString("base64url");if(typeof btoa=="function"){let e=new TextEncoder().encode(t),n="";for(let s of e)n+=String.fromCharCode(s);return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function pt(t){if(typeof Buffer<"u")return Buffer.from(t,"base64url").toString("utf8");if(typeof atob=="function"){let e=t.replace(/-/g,"+").replace(/_/g,"/"),n=e+"=".repeat((4-e.length%4)%4),s=atob(n),a=new Uint8Array(s.length);for(let d=0;d<s.length;d++)a[d]=s.charCodeAt(d);return new TextDecoder().decode(a)}throw new Error("No base64 decoder available in this runtime")}function tt(t){let e=JSON.stringify({t,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return ut(e)}function ft(t){try{let e=JSON.parse(pt(t));return typeof e?.t=="string"?{taskName:e.t}:null}catch{return null}}function Ct(t,e,n){let{handlers:s,onNodeRemoved:a,onDrain:d}=e,u=new C,l="state"in t&&"config"in t?t:W(t,n),f=false,y=new Set,O=new Map(Object.entries(s)),G=new C,E=false,v=false;function p(){if(!f){if(E){v=true;return}E=true;try{do v=!1,k();while(v)}finally{E=false;}}}function k(){let r=G.drain(),o=u.drain(),g=[...r,...o];if(g.length>0&&(l=Y(l,g),a)){for(let c of g)if(c.type==="task-removal")try{a(c.taskName);}catch(i){console.warn("[reactive] onNodeRemoved failed:",i instanceof Error?i.message:String(i));}}let h=A(l);g.length>0&&d?.(g,l,h);for(let c of h.eligible)D(c);for(let c of g)if(c.type==="task-progress"){let{taskName:i,update:m}=c;if(!l.config.tasks[i])continue;let w=l.state.tasks[i];if(!w||w.status!=="running")continue;let T=tt(i),b=I(i,T,m).catch(L=>{f||(G.append({type:"task-failed",taskName:i,error:L.message??String(L),timestamp:new Date().toISOString()}),p());}).finally(()=>{y.delete(b);});y.add(b);}}function N(r){let g=l.config.tasks[r].requires??[],h=new Map;for(let[i,m]of Object.entries(l.config.tasks))for(let S of m.provides??[])h.set(S,i);let c={};for(let i of g){let m=h.get(i);m?c[i]=l.state.tasks[m]?.data:c[i]=void 0;}return c}async function I(r,o,g){let h=l.config.tasks[r],c=h.taskHandlers??[],i=N(r);for(let m of c){let S=O.get(m);if(!S)throw new Error(`Handler '${m}' not found in registry (task '${r}')`);let w={nodeId:r,state:i,taskState:l.state.tasks[r],config:h,callbackToken:o,update:g};if(await S(w)==="task-initiate-failure")throw new Error(`Handler '${m}' returned task-initiate-failure (task '${r}')`)}}function D(r){let g=l.config.tasks[r]?.taskHandlers;if(!g||g.length===0)return;G.append({type:"task-started",taskName:r,timestamp:new Date().toISOString()}),p();let h=tt(r),c=I(r,h).catch(i=>{f||(G.append({type:"task-failed",taskName:r,error:i.message??String(i),timestamp:new Date().toISOString()}),p());}).finally(()=>{y.delete(c);});y.add(c);}return {push(r){f||(r.type==="task-completed"&&r.data&&!r.dataHash&&(r={...r,dataHash:U(r.data)}),u.append(r),p());},pushAll(r){if(!f){for(let o of r)o.type==="task-completed"&&o.data&&!o.dataHash?u.append({...o,dataHash:U(o.data)}):u.append(o);p();}},resolveCallback(r,o,g){if(f)return;let h=ft(r);if(!h)return;let{taskName:c}=h;if(l.config.tasks[c]){if(g&&g.length>0)u.append({type:"task-failed",taskName:c,error:g.join("; "),timestamp:new Date().toISOString()});else {let i=o&&Object.keys(o).length>0?U(o):void 0;u.append({type:"task-completed",taskName:c,data:o,dataHash:i,timestamp:new Date().toISOString()});}p();}},addNode(r,o){f||(u.append({type:"task-upsert",taskName:r,taskConfig:o,timestamp:new Date().toISOString()}),p());},removeNode(r){f||(u.append({type:"task-removal",taskName:r,timestamp:new Date().toISOString()}),p());},addRequires(r,o){f||(u.append({type:"node-requires-add",nodeName:r,tokens:o,timestamp:new Date().toISOString()}),p());},removeRequires(r,o){f||(u.append({type:"node-requires-remove",nodeName:r,tokens:o,timestamp:new Date().toISOString()}),p());},addProvides(r,o){f||(u.append({type:"node-provides-add",nodeName:r,tokens:o,timestamp:new Date().toISOString()}),p());},removeProvides(r,o){f||(u.append({type:"node-provides-remove",nodeName:r,tokens:o,timestamp:new Date().toISOString()}),p());},registerHandler(r,o){O.set(r,o);},unregisterHandler(r){O.delete(r);},retrigger(r){f||l.config.tasks[r]&&(u.append({type:"task-restart",taskName:r,timestamp:new Date().toISOString()}),p());},retriggerAll(r){if(!f){for(let o of r)l.config.tasks[o]&&u.append({type:"task-restart",taskName:o,timestamp:new Date().toISOString()});p();}},snapshot(){return Z(l)},getState(){return l},getSchedule(){return A(l)},async waitForHandlers(){y.size>0&&await Promise.allSettled([...y]);},async dispose(r){r?.wait&&y.size>0&&await Promise.allSettled([...y]),f=true;}}}
|
|
2
|
+
exports.a=W;exports.b=X;exports.c=Y;exports.d=et;exports.e=nt;exports.f=st;exports.g=rt;exports.h=at;exports.i=ot;exports.j=ht;exports.k=kt;exports.l=mt;exports.m=St;exports.n=vt;exports.o=yt;exports.p=Z;exports.q=bt;exports.r=A;exports.s=C;exports.t=U;exports.u=Ct;//# sourceMappingURL=chunk-G4XXRHL2.cjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-G4XXRHL2.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkIXZG74EW_cjs=require('./chunk-IXZG74EW.cjs');function h(a,i){if(a?.status==="success")return Object.prototype.hasOwnProperty.call(a,"data")?a.data:void 0;throw a?.status==="fail"||a?.status==="error"?new Error(a.error||`${i} failed`):new Error(`${i} returned an unexpected response`)}function K(a,i){if(a?.status==="success"&&Object.prototype.hasOwnProperty.call(a,"data"))return a.data;throw a?.status==="success"?new Error(`${i} returned success without data`):a?.status==="fail"||a?.status==="error"?new Error(a.error||`${i} failed`):new Error(`${i} returned an unexpected response`)}function t(a){return a&&typeof a=="object"&&!Array.isArray(a)?a:{}}function y(a){return Array.isArray(a)?a:[]}function V(a,i){if(typeof i!="string"||i.length===0)return;let u=a,m=i;m.startsWith("fetched_sources.")&&(u=t(a).fetched_sources,m=m.slice(16));for(let k of m.split(".")){if(u==null||typeof u!="object")return;u=u[k];}return u}function N(a,i){let u=t(a.view),m=y(u.elements);return {layout:u.layout,features:u.features,elements:m.map((k,x)=>{let v=t(k),I=t(v.data),B=typeof v.visible=="string"?!!V(i,v.visible):true,U=typeof I.bind=="string"?I.bind:void 0,M=typeof I.maxRows=="number"?I.maxRows:void 0,L=U?V(i,U):void 0,E={id:typeof v.id=="string"&&v.id?v.id:`element-${x}`,kind:v.kind,label:v.label,visible:B};return L!==void 0&&(E.resolved=Array.isArray(L)&&typeof M=="number"?L.slice(0,M):L),E})}}function W(a,i){let u=typeof a.id=="string"&&a.id?a.id:"card",m=y(a.provides),k=m.length>0?m:[{bindTo:u,ref:"card_data"}],x={};for(let v of k){let I=t(v),B=typeof I.bindTo=="string"?I.bindTo:"",U=typeof I.ref=="string"?I.ref:"";if(!B||!U)continue;let M=V(i,U);M!==void 0&&(x[B]=M);}return x}function ie(a){if(typeof a!="string"||!a.trim())return null;let i=/^(file uploaded|AI generated|AI geneterated):\s*.*?#(\d+)\s*$/i.exec(a.trim());if(!i)return null;let u=Number.parseInt(i[2],10);return !Number.isInteger(u)||u<0?null:u}function ce(a){return {"card-content":a}}function F(a){let{meta:i,...u}=a;return u}function ue(a,i){return Object.prototype.hasOwnProperty.call(a,i)}function J(a){return t(a.meta).__visible_controlplane_only===true}async function T(a,i){let u=await S(a.get({params:{id:i}}),"cardStore.get"),m=Array.isArray(u?.cards)?u.cards:[];if(m.length===0)throw new Error(`Card "${i}" not found`);return m[0]}function me(a){let{board:i,nonCore:u,cardStore:m,chatStore:k,uploadCardFile:x,buildFileDownloadUrl:v,readFetchedSourceJsonByRef:I}=a;function B(r){if(Array.isArray(r.bytes))return new Uint8Array(r.bytes.map(e=>Math.max(0,Math.min(255,Number(e)||0))));if(typeof r.text=="string")return new TextEncoder().encode(r.text);if(typeof r.base64=="string"){let e=String(r.base64).replace(/-/g,"+").replace(/_/g,"/"),n=e+"=".repeat((4-e.length%4)%4),s=atob(n);return Uint8Array.from(s,o=>o.charCodeAt(0))}throw new Error("file entry requires bytes, text, or base64")}async function U(){let r=t(await S(u.describeTaskExecutorCapabilities({}),"describeTaskExecutorCapabilities"));return {version:r.version,commonSourceFields:t(r.commonSourceDefFields),sourceKinds:t(r.sourceKinds)}}async function M(){let r=t(await S(i.status({}),"status")),e=t(r.summary),n=y(r.cards);return {meta:t(r.meta),summary:{card_count:typeof e.card_count=="number"?e.card_count:0,completed:typeof e.completed=="number"?e.completed:0,eligible:typeof e.eligible=="number"?e.eligible:0,pending:typeof e.pending=="number"?e.pending:0,blocked:typeof e.blocked=="number"?e.blocked:0,in_progress:typeof e.in_progress=="number"?e.in_progress:0,failed:typeof e.failed=="number"?e.failed:0,unresolved:typeof e.unresolved=="number"?e.unresolved:0},cards:n.map(s=>{let o=t(s);return {"card-id":typeof o.name=="string"?o.name:null,status:o.status??null,error:o.error??null,requires:y(o.requires),requires_satisfied:y(o.requires_satisfied),requires_missing:y(o.requires_missing),provides_declared:y(o.provides_declared),provides_runtime:y(o.provides_runtime)}})}}async function L(r){let e=String(r.cardId||"").trim();if(!e)throw new Error("inspectCardDefinitionAndRuntime requires cardId");let n=t(await S(i.status({}),"status")),o=y(n.cards).map(t).find(p=>p.name===e);if(!o)throw new Error(`card "${e}" not found in board status`);let d=t(await T(m,e));if(J(d))throw Object.assign(new Error(`card "${e}" not found`),{statusCode:404});let f=F(d),c=y(o.requires_satisfied).filter(p=>typeof p=="string"&&!!p),g=y(o.provides_runtime).filter(p=>typeof p=="string"&&!!p),b=Object.fromEntries(await Promise.all(c.map(async p=>[p,await S(i.getOutputsDataObject({params:{key:p}}),`getOutputsDataObject(${p})`)]))),R=Object.fromEntries(await Promise.all(g.map(async p=>[p,await S(i.getOutputsDataObject({params:{key:p}}),`getOutputsDataObject(${p})`)]))),C=t(await S(i.getOutputsComputedValues({params:{key:e}}),"getOutputsComputedValues")),l=await S(i.getOutputsFetchedSources({params:{key:e}}),"getOutputsFetchedSources"),_=y(d.source_defs).map(t),w={};for(let p of _)typeof p.bindTo=="string"&&typeof p.outputFile=="string"&&(w[p.outputFile]=p.bindTo);let A={};for(let[p,j]of Object.entries(l)){let q=w[p]??p;if(!I||typeof j!="string"){A[q]=null;continue}try{A[q]=I({cardId:e,ref:j});}catch{A[q]=null;}}let P={card_data:t(d.card_data),requires:b,fetched_sources:A,computed_values:C};return {cardId:e,card_status_in_board:o,card_definition_and_static_data:f,refs_for_fetched_source_files:l,runtime_data:{requires:b,provides:R,computed_values:C,rendered_view:N(d,P)}}}async function E(r){let e=String(r.cardId||"").trim();if(!e)throw new Error("inspectChatMessagesOnCards requires cardId");let n=typeof r.turnId=="string"?r.turnId:"",s=r.allTurns===true,o=typeof r.tailTurnsBeforeId=="string"?r.tailTurnsBeforeId:"",d=s?void 0:r.lastUserTurns??(n?void 0:1),f=r.tail,c={...d===void 0?{}:{tailTurns:d},...n?{turnId:n}:{},...s?{allTurns:true}:{},...o?{tailTurnsBeforeId:o}:{}},g=Object.keys(c).length>0?{params:{cardId:e},body:c}:{params:{cardId:e}},b=h(k.readAll(g),"chatStore.readAll"),R=t(await T(m,e)),C=y(t(R.card_data).files).map((w,A)=>({idx:A,stored_name:t(w).stored_name})).filter(w=>typeof w.stored_name=="string"&&w.stored_name.length>0),_=(Array.isArray(b.records)?b.records:[]).map(w=>{let P=t(w.payload),p={...w},j=typeof w?.role=="string"?w.role:typeof P.role=="string"?String(P.role):"",q=typeof w?.text=="string"?w.text:typeof P.text=="string"?String(P.text):"";if(j==="system"){let $=ie(q);if($!==null&&C.some(O=>O.idx===$)){let O=`Retrieve using inspect-file-contents --card-id ${e} --file-idx ${$}`;p.retrieval_hint=O,Object.keys(P).length>0&&typeof w.role!="string"&&(p.payload={...P,retrieval_hint:O});}}return p});return {cardId:e,messages:typeof f=="number"&&f>=0?_.slice(-f):_}}async function H(r){let e=String(r.cardId||"").trim(),n=Number(r.fileIdx);if(!e)throw new Error("inspectFileContents requires cardId");if(!Number.isInteger(n)||n<0)throw new Error("inspectFileContents requires fileIdx to be a non-negative integer");let s=t(await T(m,e)),o=y(t(s.card_data).files).map(t);if(n>=o.length)throw new Error(`attachment index ${n} is out of range for card "${e}"`);let d=o[n],f=typeof d.stored_name=="string"?d.stored_name:null;return {cardId:e,fileIdx:n,downloadUrl:v({cardId:e,fileIdx:n,storedName:f}),...typeof d.name=="string"?{name:d.name}:{},...typeof d.stored_name=="string"?{stored_name:d.stored_name}:{},...typeof d.mime_type=="string"?{mime_type:d.mime_type}:{},...typeof d.size=="number"?{size:d.size}:{},...typeof d.uploaded_at=="string"?{uploaded_at:d.uploaded_at}:{}}}async function D(r){return await u.validateCardPreflight({body:ce(r.candidateCardContent)})}function G(r){if(!r.mockRequires||typeof r.mockRequires!="object"||Array.isArray(r.mockRequires))throw new Error("preflightMaterializeCandidateCard requires mockRequires");if(!r.mockFetchedSources||typeof r.mockFetchedSources!="object"||Array.isArray(r.mockFetchedSources))throw new Error("preflightMaterializeCandidateCard requires mockFetchedSources");let e=u.evalCardCompute({body:{"card-content":r.candidateCardContent,"mock-requires":r.mockRequires,"mock-fetched-sources":r.mockFetchedSources}});if(e.status!=="success")return e;let n=t(K(e,"evalCardCompute")),s=t(r.candidateCardContent),o={card_data:t(s.card_data),requires:t(r.mockRequires),fetched_sources:t(r.mockFetchedSources),computed_values:t(n.computed_values)};return {status:"success",data:{cardId:typeof n.cardId=="string"?n.cardId:typeof s.id=="string"?s.id:"(unknown)",ok:n.ok===true,computed_values:t(n.computed_values),errors:y(n.errors).map(d=>{let f=t(d);return {bindTo:typeof f.bindTo=="string"?f.bindTo:"",error:typeof f.error=="string"?f.error:""}}),provides_outputs:W(s,o),rendered_view:N(s,o)}}}async function Q(r){return await u.probeSourcePreflight({params:{sourceIdx:r.sourceIdx},body:{"card-content":r.candidateCardContent,"mock-projections":r.mockProjections}})}async function X(r){return await u.runSourcePreflight({params:{sourceIdx:r.sourceIdx},body:{"card-content":r.candidateCardContent,"mock-projections":r.mockProjections}})}async function Y(r){let e=String(r.cardId||"").trim();if(!e)throw new Error("preflightRunSingleSourceInLiveCard requires cardId");if(!r.mockRequires||typeof r.mockRequires!="object"||Array.isArray(r.mockRequires))throw new Error("preflightRunSingleSourceInLiveCard requires mockRequires");let n=t(await T(m,e)),s=y(n.source_defs).filter(d=>!!d&&typeof d=="object"&&!Array.isArray(d)),o={};if(r.sourceIdx>=0&&r.sourceIdx<s.length){let d=s[r.sourceIdx],f=chunkIXZG74EW_cjs.a.enrichSourcesSync([d],{card_data:t(n.card_data),requires:r.mockRequires});Array.isArray(f)&&f.length>0&&(o=t(f[0]._projections));}return await u.runSourcePreflight({params:{sourceIdx:r.sourceIdx},body:{"card-content":n,"mock-requires":r.mockRequires,"mock-projections":o}})}async function Z(r){let e=t(await S(u.simulateCardCycle({body:{"card-content":r.candidateCardContent,"mock-requires":r.mockRequires}}),"simulateCardCycle")),n=t(r.candidateCardContent),s=t(e.validation),o=y(e.source_probes),d=y(e.projection_errors),f=t(e.fetched_sources),c=y(e.compute_errors),g=t(e.computed_values),b={card_data:t(n.card_data),requires:r.mockRequires,fetched_sources:f,computed_values:g},R=[];for(let C of y(s.issues))typeof C=="string"&&C&&R.push(C);for(let C of o){let l=t(C),_=typeof l.bindTo=="string"?l.bindTo:"source",w=typeof l.error=="string"?l.error:"";w&&R.push(`${_}: ${w}`);}for(let C of d){let l=t(C),_=typeof l.bindTo=="string"?l.bindTo:"source",w=typeof l.key=="string"?l.key:"projection",A=typeof l.error=="string"?l.error:"projection failed";R.push(`${_}.${w}: ${A}`);}for(let C of c){let l=t(C),_=typeof l.bindTo=="string"?l.bindTo:"compute",w=typeof l.error=="string"?l.error:"compute failed";R.push(`${_}: ${w}`);}return {status:"success",data:{cardId:typeof e.cardId=="string"?e.cardId:"(unknown)",ok:e.ok===true,issues:R,provides_outputs:W(n,b),rendered_view:N(n,b)}}}async function ee(r){let e=String(r.cardId||"").trim();if(!e)throw new Error("manageReadCard requires cardId");let n=await S(m.get({params:{id:e}}),"cardStore.get"),s=Array.isArray(n.cards)?n.cards.map(t):[];if(s.some(J))throw Object.assign(new Error(`Card "${e}" not found`),{statusCode:404});return s.map(o=>F(o))}async function re(r){let e=String(r.cardId||"").trim(),n=String(r.role||"").trim(),s=typeof r.text=="string"?r.text:"",o=typeof r.turn=="string"?r.turn:"";if(!e)throw new Error("manageAddChatEntryAndAnyAttachments requires cardId");if(!n)throw new Error("manageAddChatEntryAndAnyAttachments requires role");if(n==="assistant"&&o){let c=h(k.readAll({params:{cardId:e},body:{turnId:o}}),"chatStore.readAll(existing turn messages)"),g=Array.isArray(c.records)?c.records.find(b=>b.role==="assistant"&&String(b.turn||"")===o):void 0;if(g)return {status:"success",data:{cardId:e,id:String(g.id),role:n,turn:o,files:Array.isArray(g.files)?g.files:[]}}}let d=await Promise.all(y(r.files).map(async c=>{let g=t(c),b=String(g.file_name??g.fileName??g.name??"").trim(),R=String(g.content_type??g.contentType??"application/octet-stream");if(!b)throw new Error("file entry requires file_name");return (await x({cardId:e,fileName:b,contentType:R,bytes:B(g)})).file}));d.forEach((c,g)=>{let b=n==="assistant"?`AI generated: ${String(c.name||"")} as ${String(c.stored_name||"")} #${g}`:`file uploaded: ${String(c.name||"")} as ${String(c.stored_name||"")} #${g}`;h(k.append({params:{cardId:e},body:{role:"system",text:b,files:[],turn:o}}),"chatStore.append(system attachment message)");});let f=h(k.append({params:{cardId:e},body:{role:n,text:s,files:d,turn:o}}),"chatStore.append");return {status:"success",data:{cardId:e,id:String(f.id),role:n,turn:o,files:d}}}async function te(r){let e=String(r.cardId||"").trim(),n=t(r.candidateCardContent),s=F(n);if(!e)throw new Error("manageUpsertCard requires cardId");if(typeof s.id!="string"||!s.id.trim())throw new Error("candidateCardContent.id must be a non-empty string");if(s.id!==e)throw new Error(`candidateCardContent.id must match cardId (${e})`);let o=await D({candidateCardContent:s}),d=t(o),f=t(d.data);if(d.status!=="success"||f.isValid!==true)return {status:"fail",step:"validate",validation:o};let c=null;try{c=await T(m,e);}catch{c=null;}let g=c&&ue(t(c),"meta")?{...s,meta:t(c).meta}:s,b=await m.set({body:g});h(b,"cardStore.set");let R;try{R=await i.upsertCard({params:{cardId:e,restart:!0}}),h(R,"upsertCard");}catch(l){try{c&&await m.set({body:c});}catch{}throw l}let C=null;try{C=await i.cardRefreshedNotify({params:{cardId:e}}),h(C,"cardRefreshedNotify");}catch{C=null;}return {status:"success",data:{validation:o,card_saved:null,board_result:R,refresh_notify:C}}}async function ne(r){let e=String(r.cardId||"").trim();if(!e)throw new Error("manageRemoveCard requires cardId");let n=await i.removeCard({params:{id:e}});h(n,"removeCard");let s=await m.del({params:{id:e}});return h(s,"cardStore.del"),{status:"success",data:{board_result:n,store_result:s}}}async function ae(r){let e=String(r.cardId||"").trim();if(!e)throw new Error("adminReadCard requires cardId");let n=await S(m.get({params:{id:e}}),"cardStore.get");return Array.isArray(n.cards)?n.cards.map(s=>t(s)):[]}async function oe(r){let e=String(r.cardId||"").trim(),n=t(r.candidateCardContent),s=F(n);if(!e)throw new Error("adminUpsertCard requires cardId");if(typeof s.id!="string"||!s.id.trim())throw new Error("candidateCardContent.id must be a non-empty string");if(s.id!==e)throw new Error(`candidateCardContent.id must match cardId (${e})`);let o=await D({candidateCardContent:s}),d=t(o),f=t(d.data);if(d.status!=="success"||f.isValid!==true)return {status:"fail",step:"validate",validation:o};let c=null;try{c=await T(m,e);}catch{c=null;}let g=c?t(t(c).meta):{},b={...s,meta:{...g,__visible_controlplane_only:true}},R=await m.set({body:b});h(R,"cardStore.set");let C;try{C=await i.upsertCard({params:{cardId:e,restart:!0}}),h(C,"upsertCard");}catch(_){try{c&&await m.set({body:c});}catch{}throw _}let l=null;try{l=await i.cardRefreshedNotify({params:{cardId:e}}),h(l,"cardRefreshedNotify");}catch{l=null;}return {status:"success",data:{validation:o,card_saved:null,board_result:C,refresh_notify:l}}}function se(r){let e=String(r.cardId||"").trim();if(!e)throw new Error("getChatProcessing requires cardId");let n=K(k.isProcessing({params:{cardId:e}}),"chatStore.isProcessing");return {cardId:e,active:!!n.active}}function de(r){let e=String(r.cardId||"").trim();if(!e)throw new Error("setChatProcessing requires cardId");if(typeof r.active!="boolean")throw new Error("setChatProcessing requires boolean active");return h(k.setProcessing({params:{cardId:e},body:{active:r.active}}),"chatStore.setProcessing"),{cardId:e,active:r.active}}return {discoverSourceKinds:U,inspectBoardRuntimeStatus:M,inspectCardDefinitionAndRuntime:L,inspectChatMessagesOnCards:E,inspectFileContents:H,preflightValidateCandidateCardDefinition:D,preflightMaterializeCandidateCard:G,preflightProbeSingleSourceInCandidateCard:Q,preflightRunSingleSourceInCandidateCard:X,preflightRunSingleSourceInLiveCard:Y,preflightRunOneCycleWithCandidateCard:Z,manageReadCard:ee,manageAddChatEntryAndAnyAttachments:re,manageUpsertCard:te,manageRemoveCard:ne,adminReadCard:ae,adminUpsertCard:oe,getChatProcessing:se,setChatProcessing:de}}async function S(a,i){return h(await a,i)}exports.a=me;//# sourceMappingURL=chunk-GJJMEAVN.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-GJJMEAVN.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var g=Object.create;var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var m=(b,a)=>()=>(a||b((a={exports:{}}).exports,a),a.exports);var l=(b,a,c,e)=>{if(a&&typeof a=="object"||typeof a=="function")for(let d of i(a))!k.call(b,d)&&d!==c&&f(b,d,{get:()=>a[d],enumerable:!(e=h(a,d))||e.enumerable});return b};var n=(b,a,c)=>(c=b!=null?g(j(b)):{},l(a||!b||!b.__esModule?f(c,"default",{value:b,enumerable:true}):c,b));exports.a=m;exports.b=n;//# sourceMappingURL=chunk-GNFE24S7.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-GNFE24S7.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';function P(c){function T(n){let r=typeof n=="number"?n:Number(n);return Number.isInteger(r)&&r>0?r:null}function k(n,r){let t=r;for(let e=n.length-1;e>=0;e-=1)if(n[e]?.role==="user"&&(t-=1,t===0))return n.slice(e);return n}function S(n){return n.some(r=>typeof r?.turn=="string"&&r.turn!=="")}function w(n,r){if(r<=0)return [];if(!S(n))return k(n,r);let t=new Map,e=[];for(let s of n){let u=typeof s?.turn=="string"?s.turn:"";t.has(u)||(t.set(u,[]),e.push(u)),t.get(u).push(s);}return e.slice(Math.max(0,e.length-r)).flatMap(s=>t.get(s)??[])}function o(n){return {status:"success",data:n}}function a(n){return {status:"fail",error:n}}function i(n){return {status:"error",error:n instanceof Error?n.message:String(n)}}function R(n,r="command envelope"){let t=typeof n.cardId=="string"?n.cardId:void 0;if(!n.command)return a(`chat-store: ${r} missing "command"`);if(!t)return a(`chat-store: ${r} missing "cardId"`);if(n.command==="append")return d.append({params:{cardId:t},body:{role:n.role,text:n.text,files:n.files,turn:n.turn}});if(n.command==="read-all")return d.readAll({params:{cardId:t},body:{lastUserTurns:n.lastUserTurns,tailTurns:n.tailTurns,turnId:n.turnId,allTurns:n.allTurns,tailTurnsBeforeId:n.tailTurnsBeforeId}});if(n.command==="read-after")return d.readAfter({params:{cardId:t},body:{cursor:n.cursor??null}});if(n.command==="clear")return d.clear({params:{cardId:t}});if(n.command==="set-processing")return d.setProcessing({params:{cardId:t},body:{active:n.active}});if(n.command==="is-processing")return d.isProcessing({params:{cardId:t}});if(n.command==="get-config")return d.getConfig({params:{cardId:t}});if(n.command==="set-config"){let{command:e,cardId:m,...s}=n;return d.setConfig({params:{cardId:t},body:s})}return a(`chat-store: unknown command "${String(n.command)}"`)}function A(n){if(!Array.isArray(n.commands)||n.commands.length===0)return a('chat-store: command envelope must include a non-empty "commands" array');let r=[];for(let t=0;t<n.commands.length;t+=1){let e=n.commands[t];if(!e||typeof e!="object"||Array.isArray(e))return a(`chat-store: command envelope entry ${t} must be an object`);let m={cardId:n.cardId,...e},s=R(m,`command envelope entry ${t}`);if(s.status!=="success")return s;r.push({index:t,command:String(m.command),data:s.data});}return o({results:r})}let d={append(n){try{let r=n.params?.cardId;if(!r)return a("append requires params.cardId");let t=n.body??{},e=typeof t.role=="string"?t.role:"",m=typeof t.text=="string"?t.text:"",s=Array.isArray(t.files)?t.files:[],u=typeof t.turn=="string"?t.turn:"";if(!e)return a("append requires body.role");let l=c.append(r,e,m,s,u);return o({id:l})}catch(r){return i(r)}},readAll(n){try{let r=n.params?.cardId;if(!r)return a("readAll requires params.cardId");let t=n.body??{},e=typeof t.turnId=="string"?t.turnId:"",m=t.allTurns===!0,s=typeof t.tailTurnsBeforeId=="string"?t.tailTurnsBeforeId:"",u=t.tailTurns===void 0?t.lastUserTurns:t.tailTurns,l=u===void 0?m||e?void 0:1:T(u);if(u!==void 0&&l===null)return a("readAll requires body.tailTurns (positive integer)");let b=c.readAll(r),g=b.filter(f=>!e||String(f.turn||"")===e);if(s){let f=l;if(typeof f!="number"||!Number.isInteger(f)||f<=0)return a("readAll requires body.tailTurns (positive integer) when body.tailTurnsBeforeId is provided");let p=new Map,I=[];for(let C of b){let h=String(C.turn||"");p.has(h)||(p.set(h,[]),I.push(h)),p.get(h).push(C);}let y=I.findIndex(C=>C===s),x=Math.max(0,y-f);return g=(y===-1?[]:I.slice(x,y)).flatMap(C=>p.get(C)??[]),o({records:g})}return o(typeof l=="number"?{records:w(g,l)}:{records:g})}catch(r){return i(r)}},readAfter(n){try{let r=n.params?.cardId;if(!r)return a("readAfter requires params.cardId");let e=(n.body??{}).cursor??null;return o(c.readAfter(r,e))}catch(r){return i(r)}},clear(n){try{let r=n.params?.cardId;return r?(c.clear(r),o({ok:!0})):a("clear requires params.cardId")}catch(r){return i(r)}},setProcessing(n){try{let r=n.params?.cardId;if(!r)return a("setProcessing requires params.cardId");let t=n.body??{};return typeof t.active!="boolean"?a("setProcessing requires body.active (boolean)"):(c.setProcessing(r,t.active),o({ok:!0}))}catch(r){return i(r)}},isProcessing(n){try{let r=n.params?.cardId;return r?o({active:c.isProcessing(r)}):a("isProcessing requires params.cardId")}catch(r){return i(r)}},getConfig(n){try{let r=n.params?.cardId;return r?o({config:c.getConfig(r)}):a("getConfig requires params.cardId")}catch(r){return i(r)}},setConfig(n){try{let r=n.params?.cardId;if(!r)return a("setConfig requires params.cardId");let t=n.body??{};return c.setConfig(r,t),o({ok:!0})}catch(r){return i(r)}},run:R,runBatch:A};return d}exports.a=P;//# sourceMappingURL=chunk-GYQXDNNI.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-GYQXDNNI.cjs.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var chunkPBCDDO4V_cjs=require('./chunk-PBCDDO4V.cjs'),chunkOEFTOO47_cjs=require('./chunk-OEFTOO47.cjs'),chunkU2N6MCD5_cjs=require('./chunk-U2N6MCD5.cjs'),chunkSFVO2LB2_cjs=require('./chunk-SFVO2LB2.cjs'),chunkG4XXRHL2_cjs=require('./chunk-G4XXRHL2.cjs'),chunkIXZG74EW_cjs=require('./chunk-IXZG74EW.cjs');async function $e(e,t,a){let u=await e.tryAcquire();if(!u)return false;try{await t();}finally{await u();}return await a?.(),true}function We(e){return chunkPBCDDO4V_cjs.b(e)}function Le(e,t){return {async readIndex(){return await e.read("_index")},writeIndex(a){return e.write("_index",a)},async readCard(a){return await e.read(a)},async writeCard(a,u){return await e.write(a,u),t(u)},removeCard(a){return e.delete(a)},async cardExists(a){return await e.read(a)!==null},defaultCardKey(a){return a}}}function Je(e,t){async function a(){return await e.readIndex()??{}}return {async readCard(u){let p=(await a())[u];return !p||!await e.cardExists(p.key)?null:await e.readCard(p.key)},async readCardKey(u){return (await a())[u]?.key??null},async readAllCards(){let u=[];for(let[p,S]of Object.entries(await a())){if(!await e.cardExists(S.key))continue;let f=await e.readCard(S.key);f?u.push(f):t?.(`[card-store] could not read card "${p}" at key "${S.key}"`);}return u},async readChecksumIndex(){let u={};for(let[p,S]of Object.entries(await a()))u[p]=S.checksum;return u},async changedSince(u){let p=await a(),S=[];for(let[f,l]of Object.entries(p))u[f]!==l.checksum&&S.push(f);for(let f of Object.keys(u))p[f]||S.push(f);return S},async validateUpsert(u,p){let S=await a(),f=S[u],l=Object.entries(S).find(([,k])=>k.key===p);return f&&f.key!==p?{ok:false,error:`Card id "${u}" is already mapped to key "${f.key}", cannot remap to "${p}"`}:l&&l[0]!==u?{ok:false,error:`Key "${p}" is already mapped to card id "${l[0]}", cannot remap to "${u}"`}:{ok:true}},async writeCard(u,p,S){let f=await a(),l=S??f[u]?.key??e.defaultCardKey(u),k=await e.writeCard(l,p);f[u]={key:l,checksum:k,updatedAt:new Date().toISOString()},await e.writeIndex(f);},async patchCard(u,p,S){let f=await a(),l=f[u];if(!l||!await e.cardExists(l.key))throw new Error(`card "${u}" not found`);let k=await e.readCard(l.key);if(!k||typeof k!="object"||Array.isArray(k))throw new Error(`card "${u}" is not patchable`);let v=String(p||"").split(".").filter(Boolean),q=chunkPBCDDO4V_cjs.a(k,v,S),P=await e.writeCard(l.key,q);f[u]={key:l.key,checksum:P,updatedAt:new Date().toISOString()},await e.writeIndex(f);},async removeCard(u){let p=await a(),S=p[u];S&&(await e.removeCard(S.key),delete p[u],await e.writeIndex(p));},readIndex(){return a()}}}function cr(e,t){return chunkOEFTOO47_cjs.a(e,t)}function dr(e,t,a){return {blob:e,kv:t,journal:a}}function Se(e){return {messageId:e.id,enqueuedAt:e.enqueuedAt,attempt:e.attempt,request:e.body}}function Xe(e){return typeof e=="string"?e.startsWith("b64:")?chunkSFVO2LB2_cjs.b(e).value:e:e.value}function ie(e){return {async enqueueRequest(t){return (await e.enqueue(t)).id},async leaseRequests(t){return (await e.lease(t)).map(a=>({...Se(a),leaseToken:a.leaseToken,leaseExpiresAt:a.leaseExpiresAt}))},ackRequest(t,a){return e.ack(t,a)},nackRequest(t,a,u){return e.nack(t,a,u)},async peekActive(){return (await e.peekActive()).map(Se)},async peekDeadLetter(){return (await e.peekDeadLetter()).map(t=>({...Se(t),reason:t.reason}))}}}function Qe(e){async function t(a){let u=await e.read(a);return u==null?null:typeof u=="string"?u:JSON.stringify(u)}return {async readTaskExecutorRef(){let a=await t("task-executor");if(a?.trim())return chunkU2N6MCD5_cjs.c(a.trim())},writeTaskExecutorRef(a){return e.write("task-executor",chunkU2N6MCD5_cjs.b(a))},readChatHandlerFlow(){return e.read("chat-handler-flow")},writeChatHandlerFlow(a){return e.write("chat-handler-flow",a)},readCardStoreRef(){return t("card-store-ref")},writeCardStoreRef(a){return e.write("card-store-ref",a)},readOutputsStoreRef(){return t("outputs-store-ref")},writeOutputsStoreRef(a){return e.write("outputs-store-ref",a)},readScratchStoreRef(){return t("scratch-store-ref")},writeScratchStoreRef(a){return e.write("scratch-store-ref",a)},readArchiveStoreRef(){return t("archive-store-ref")},writeArchiveStoreRef(a){return e.write("archive-store-ref",a)},readChatStoreRef(){return t("chat-store-ref")},writeChatStoreRef(a){return e.write("chat-store-ref",a)},readArtifactsStoreRef(){return t("artifacts-store-ref")},writeArtifactsStoreRef(a){return e.write("artifacts-store-ref",a)}}}function gr(e){let t,a,u,p=e.callbackTransport,S=e.resolveBlob??(async l=>{let k=await e.blobStorage("").read(l.value);if(k==null)throw new Error(`Blob not found for ref ${l.kind}:${l.value}`);return k});async function f(l,k){if(l.howToRun==="queue-storage"){let v=e.boardWorkerStore??t??(e.queueStorage?ie(e.queueStorage):void 0);return v?(t||(t=v),await v.enqueueRequest({boardId:typeof l.extra?.boardId=="string"?l.extra.boardId:e.boardId,ref:l,args:k}),{dispatched:true}):{dispatched:false,error:"queue-storage dispatch requires queueStorage or boardWorkerStore"}}if(l.howToRun==="http:post"){let v=e.fetch??globalThis.fetch;if(!v)return {dispatched:false,error:"http:post dispatch requires fetch support"};let q=await v(Xe(l.whatToRun),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...k,...l.extra?{extra:l.extra}:{}})});if(!q.ok){let P=await q.text().catch(()=>"");return {dispatched:false,error:`HTTP ${q.status}: ${P}`}}return {dispatched:true}}return {dispatched:false,error:`Unsupported hosted async transport "${l.howToRun}"`}}return {kvStorage:e.kvStorage,kvStorageForRef:e.kvStorageForRef,blobStorage:e.blobStorage,scratchStorage:e.scratchStorage,scratchStorageForRef:e.scratchStorageForRef,archiveFactory:e.archiveFactory,archiveFactoryForRef:e.archiveFactoryForRef,journalStorage:e.journalStorage,boardWorkerStore:()=>{if(!t)if(e.boardWorkerStore)t=e.boardWorkerStore;else if(e.queueStorage)t=ie(e.queueStorage);else throw new Error("Hosted async board adapter requires queueStorage or boardWorkerStore");return t},chatAgentStore:()=>{if(!a)if(e.chatAgentStore)a=e.chatAgentStore;else if(e.chatAgentQueueStorage)a=ie(e.chatAgentQueueStorage);else if(e.boardWorkerStore)a=e.boardWorkerStore;else if(e.queueStorage)a=ie(e.queueStorage);else throw new Error("Hosted async board adapter requires chatAgentStore, chatAgentQueueStorage, queueStorage, or boardWorkerStore");return a},processAccumulatedStore:()=>{if(u||(u=e.processAccumulatedStore??e.processAccumulatedQueueStorage??e.queueStorage),!u)throw new Error("Hosted async board adapter requires processAccumulatedStore, processAccumulatedQueueStorage, or queueStorage");return u},lock:e.lock,get callbackTransport(){return p},set callbackTransport(l){p=l;},dispatchExecution:(l,k)=>e.dispatchExecution?.(l,k)??f(l,k),supportsDirectSourceOutput:e.supportsDirectSourceOutput,resolveBlob:S,hashFn:e.hashFn,genId:e.genId,requestProcessAccumulated:e.requestProcessAccumulated,publishBoardChangeNotifications:e.publishBoardChangeNotifications,warn:e.onWarn}}function C(e){return e!==void 0?{status:"success",data:e}:{status:"success"}}function R(e){return {status:"fail",error:e}}function w(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}function I(){return new Date().toISOString()}function Ze(e){let t=new TextEncoder().encode(e),a=Array.from(t,u=>String.fromCharCode(u)).join("");return btoa(a).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Me(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),a=t+"=".repeat((4-t.length%4)%4),u=atob(a),p=Uint8Array.from(u,S=>S.charCodeAt(0));return new TextDecoder().decode(p)}function ue(e){try{let t=JSON.parse(Me(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function er(e){return Ze(JSON.stringify(e))}function He(e){try{let t=JSON.parse(Me(e));return typeof t?.cbk=="string"&&typeof t?.cid=="string"&&typeof t?.b=="string"&&typeof t?.d=="string"?t:null}catch{return null}}function rr(e){return chunkOEFTOO47_cjs.j(e,chunkOEFTOO47_cjs.o,()=>({_sources:{}}))}function tr(e,t){return chunkOEFTOO47_cjs.h(e,t)}function nr(e){return chunkOEFTOO47_cjs.k(e)}function ar(e,t){return chunkOEFTOO47_cjs.i(e,t)}function or(e,t,a,u,p,S){return async f=>{let l=[],k=await a.cardStore.readCard(f.nodeId);if(!k)return "task-initiate-failure";let v=k.id,q=k.card_data??{},P=k.source_defs??[],N=P.filter(s=>s.optionalForCompletionGating!==true),V=await a.cardRuntimeStore.readRuntime(v),K=false,L=async()=>{K&&(await a.cardRuntimeStore.writeRuntime(v,V),K=false);},j=s=>chunkOEFTOO47_cjs.p(V._sources[s]),b=(s,i)=>{V._sources[s]=chunkOEFTOO47_cjs.p(i),K=true;},$=f.taskState?.executionCount??0;if(V._lastExecutionCount!==$&&(V._sources={},V._lastExecutionCount=$,K=true),f.update){let s=f.update.outputFile;if(s){let i=j(s);if(f.update.failure){let m=f.update.rqt??i.lastRequestedToken??i.queueRequestedToken;m&&b(s,chunkOEFTOO47_cjs.s(i,m));}else {let m=f.update.rqt;if(!i.lastCompletedToken||m>i.lastCompletedToken){let h=typeof f.update.deliveryToken=="string"?f.update.deliveryToken:void 0,x=h?await a.fetchedSourcesStore.commitSourceData(v,s,h):false;b(s,x?chunkOEFTOO47_cjs.r(i,m):chunkOEFTOO47_cjs.s(i,m));}}await L();}}let J={};for(let s of P){if(!s.outputFile)continue;let i=await a.fetchedSourcesStore.readSourceData(v,s.outputFile);i!==null&&(J[s.bindTo]=i);}let Q={};for(let[s,i]of Object.entries(f.state??{}))if(i!==null&&typeof i=="object"&&!Array.isArray(i)){let m=i[s];Q[s]=m!==void 0?m:i;}else Q[s]=i;let H={id:v,card_data:{...q},requires:Q,source_defs:P,compute:k.compute};H._sourcesData=J,k.compute&&chunkIXZG74EW_cjs.a.runSync(H,{sourcesData:J}),(p??(()=>{}))(v,H.computed_values??{});let G=chunkIXZG74EW_cjs.a.enrichSourcesSync(Array.isArray(k.source_defs)?k.source_defs:void 0,{card_data:k.card_data,requires:Q}),z={...k,source_defs:Array.isArray(G)?G.map(s=>({...s,boardDir:typeof s.boardDir=="string"&&s.boardDir?s.boardDir:e.value})):G},_=I(),O=f.update?void 0:_,n=N.filter(s=>{let i=s.outputFile;if(typeof i!="string"||!i)return true;let m=j(i);O&&(m={...m,queueRequestedToken:O},b(i,m));let h=m.queueRequestedToken??m.lastRequestedToken??_;return chunkOEFTOO47_cjs.q(m,h)==="dispatch"});if(await L(),n.length>0){let s=false,i=_;for(let m of n){let h=m.outputFile;if(typeof h!="string"||!h)continue;let x=j(h),F=x.queueRequestedToken??_;b(h,{...x,lastRequestedToken:F}),i=F,s=true;}return s&&await L(),s&&(l.push({taskKind:"source-fetch",payload:{boardRef:chunkSFVO2LB2_cjs.a(e),enrichedCard:z,callbackToken:f.callbackToken,rqt:i}}),await a.executionRequestStore.appendEntries(t,l)),"task-initiated"}if(N.some(s=>{let i=s.outputFile;if(typeof i!="string"||!i)return false;let m=j(i),h=m.queueRequestedToken??m.lastRequestedToken??_;return chunkOEFTOO47_cjs.q(m,h)==="in-flight"}))return "task-initiated";let d=k.provides??[],o={};for(let{bindTo:s,ref:i}of d)o[s]=chunkIXZG74EW_cjs.a.resolve(H,i);return (S??(()=>{}))(o),P.filter(s=>{if(s.optionalForCompletionGating!==true)return false;let i=j(s.outputFile);return !i.lastRequestedToken||!i.lastCompletedToken?true:i.lastCompletedToken<=i.lastRequestedToken}).length>0&&l.push({taskKind:"source-fetch",payload:{boardRef:chunkSFVO2LB2_cjs.a(e),enrichedCard:z,callbackToken:f.callbackToken,rqt:_}}),u(f.nodeId,o),l.length>0&&await a.executionRequestStore.appendEntries(t,l),"task-initiated"}}function Ir(e,t){chunkOEFTOO47_cjs.d(t.callbackTransport,"createAsyncBoardLiveCardsPublic");let a=t.callbackTransport,u=t.warn??(()=>{}),p=chunkSFVO2LB2_cjs.a(e),S=null;function f(n){if(n.length!==0)try{return Promise.resolve(t.publishBoardChangeNotifications?.(n)).catch(r=>{u(`[async-board-live-cards-public] publishBoardChangeNotifications failed: ${r instanceof Error?r.message:String(r)}`);})}catch(r){u(`[async-board-live-cards-public] publishBoardChangeNotifications failed: ${r instanceof Error?r.message:String(r)}`);return}}let l=()=>Qe(t.kvStorage("config")),k=()=>t.kvStorage("state-snapshot"),v=e.value,q=()=>chunkOEFTOO47_cjs.b(chunkOEFTOO47_cjs.a(()=>k(),t.hashFn),"v1"),P=async()=>{let n=await l().readOutputsStoreRef();if(!n)throw new Error(`Board at ${e.value} has no outputs store configured.`);return nr(t.kvStorageForRef(n))},N=async()=>{let n=await l().readCardStoreRef();if(!n)throw new Error(`Board at ${e.value} has no card store configured.`);let r=t.kvStorageForRef(n);return Je(Le(We(r),t.hashFn),u)};async function V(){return !!(await q().readSnapshot(v)).values[chunkOEFTOO47_cjs.n]}async function K(){let n=await q().readSnapshot(v);if(!n.values[chunkOEFTOO47_cjs.n])throw new Error(`Board not initialized at ${e.value}`);return chunkOEFTOO47_cjs.w(n.values)}async function L(n,r){let d=await q().commitSnapshot(v,{schemaVersion:"v1",expectedVersion:r,deleteKeys:[],shallowMerge:chunkOEFTOO47_cjs.v(n)});if(!d.ok)throw new Error(`Snapshot commit failed (version mismatch): expected=${r??"null"} current=${d.currentVersion??"null"}`)}let j=()=>chunkOEFTOO47_cjs.c(t.journalStorage());async function b(n){await j().appendEvent(n);}function $(){return tr(t.blobStorage("sources"),n=>t.resolveBlob(n))}async function J(n){let r=await Promise.resolve(t.blobStorage("sources").keyRef?.(n));return r?chunkSFVO2LB2_cjs.a(r):n}async function Q(){let n=ar(t.kvStorage("execution-requests"),async(c,g)=>{let A=c.payload,T=(A.enrichedCard??{}).id??A.cardId??"unknown";await b({type:"task-failed",taskName:T,error:g,timestamp:I()});}),r=rr(t.kvStorage("card-runtime")),d=$(),o=await N(),y=await P(),s=new Map,i=new Map,m=[],h=[],x=[],F=new Map,W=new Set,M={async readRuntime(c){return s.get(c)??await r.readRuntime(c)},async writeRuntime(c,g){s.set(c,g);}},ce={async readSourceData(c,g){let A=`${c}/${g}`;return i.has(A)?i.get(A):await d.readSourceData(c,g)},ingestSourceDataStaged(c,g,A,B){return d.ingestSourceDataStaged(c,g,A,B)},async commitSourceData(c,g,A){let B=`${c}/.staged/${A}/${g}`,T=t.blobStorage("sources"),D=await T.read(B);if(D==null){let X=await T.keyRef?.(B);X&&(D=await t.resolveBlob(X));}if(D==null)return false;let re=`${c}/${g}`,Y=D.trim();try{i.set(re,JSON.parse(Y));}catch{i.set(re,Y);}return m.push({cardId:c,outputFile:g,deliveryToken:A}),true},async hasSource(c,g){let A=`${c}/${g}`;return i.has(A)||await d.hasSource(c,g)},async listSources(c){let g=await d.listSources(c),A=[...i.keys()].filter(B=>B.startsWith(`${c}/`)).map(B=>B.slice(`${c}/`.length));return [...new Set([...g,...A])]}},ke=await K(),Ue=chunkG4XXRHL2_cjs.q(ke.graph),{events:Ge,newCursor:de}=await j().readEntriesAfterCursor(ke.lastDrainedJournalId),Z=Ge,ee=chunkG4XXRHL2_cjs.u(Ue,{handlers:{"card-handler":or(e,de,{cardStore:o,cardRuntimeStore:M,fetchedSourcesStore:ce,executionRequestStore:n},(c,g)=>{Z.push({type:"task-completed",taskName:c,data:g,timestamp:I()});},(c,g)=>{h.push({cardId:c,values:g});},c=>{x.push(c);})},onNodeRemoved:c=>{F.delete(c),s.delete(c),W.add(c);}});for(;Z.length>0;){let c=Z;Z=[];for(let g of c)if(g.type==="task-restart"){let A=await o.readCard(g.taskName);A&&F.set(g.taskName,A);}ee.pushAll(c),await ee.waitForHandlers();}let Re=ee.getState();await ee.dispose({wait:true}),await L({lastDrainedJournalId:de,graph:chunkG4XXRHL2_cjs.p(Re)},(await q().readSnapshot(v)).version);for(let{cardId:c,values:g}of h)await y.writeComputedValues(c,g);for(let c of x)await y.writeDataObjects(c);for(let[c,g]of s)await r.writeRuntime(c,g);for(let c of m)await d.commitSourceData(c.cardId,c.outputFile,c.deliveryToken);let he=chunkOEFTOO47_cjs.t(p,Re);await y.writeStatusSnapshot(he);let U=[];for(let{cardId:c,values:g}of h)U.push({kind:"computed_values",cardId:c,values:g});for(let c of x)for(let[g,A]of Object.entries(c))U.push({kind:"data_object",key:g,payload:A});for(let[c,g]of F)U.push({kind:"card_refreshed",cardId:c,card:g});for(let c of W)U.push({kind:"card_removed",cardId:c});U.push({kind:"status",status:he}),await f(U);let le=await l().readTaskExecutorRef();if(!le)return;let ze=t.supportsDirectSourceOutput?.(le)===true;await n.dispatchEntriesForJournalId(de,async c=>{if(c.taskKind!=="source-fetch"){u(`[async-process-accumulated-events] unknown taskKind "${c.taskKind}" \u2014 skipping`);return}let g=c.payload,A=g.enrichedCard?.id??"unknown",B=g.enrichedCard?.source_defs??[];for(let T of B){if(!T.outputFile)continue;let D;if(ze){let X=t.genId(),Ye=`${A}/.staged/${X}/${T.outputFile}`,Ce=await Promise.resolve(t.blobStorage("sources").keyRef?.(Ye));Ce&&(D={ref:chunkSFVO2LB2_cjs.a(Ce),deliveryToken:X,outputFile:T.outputFile,cardId:A});}let re=er({cbk:g.callbackToken,rg:e.value,br:chunkSFVO2LB2_cjs.a(e),cid:A,b:T.bindTo,d:T.outputFile,cs:void 0,rqt:g.rqt,...D?{dt:D.deliveryToken}:{}}),Y=await t.dispatchExecution(le,{source_def:T,base_ref:chunkSFVO2LB2_cjs.a(e),callback:a.createCallback(re),...D?{output:D}:{}});Y.dispatched||await b({type:"task-failed",taskName:A,error:Y.error??"dispatch failed",timestamp:I()});}});}async function H(){try{let n=async()=>{let d=await K(),{events:o}=await j().readEntriesAfterCursor(d.lastDrainedJournalId);o.length>0&&await z();},r=await $e(t.lock,Q,n);return C({ran:r!==!1})}catch(n){return w(n)}}async function G(){return S||(S=H().finally(()=>{S=null;}),S)}async function z(){let n=t.processAccumulatedStore();n.enqueueIfAbsent?await n.enqueueIfAbsent({boardRef:chunkSFVO2LB2_cjs.a(e)},`process-accumulated:${chunkSFVO2LB2_cjs.a(e)}`):await n.enqueue({boardRef:chunkSFVO2LB2_cjs.a(e)}),await t.requestProcessAccumulated?.();}async function _(){let n=t.processAccumulatedStore();for(;;){let r=await n.lease({max:64,visibilityMs:1e3});if(r.length<=0)return;for(let d of r)await n.ack(d.id,d.leaseToken);if(r.length<64)return}}function O(){z();}return {async init(n){try{let r=n.params?.cardStoreRef;if(!r)return R("init requires params.cardStoreRef");let d=n.params?.outputsStoreRef;if(!d)return R("init requires params.outputsStoreRef");await V()||await L({lastDrainedJournalId:"",graph:chunkG4XXRHL2_cjs.p(chunkG4XXRHL2_cjs.a(chunkOEFTOO47_cjs.u))},null);let o=l();await o.writeCardStoreRef(r),await o.writeOutputsStoreRef(d);let y=n.params?.scratchStoreRef,s=n.params?.archiveStoreRef,i=n.params?.chatStoreRef,m=n.params?.artifactsStoreRef;y&&await o.writeScratchStoreRef(y),s&&await o.writeArchiveStoreRef(s),i&&await o.writeChatStoreRef(i),m&&await o.writeArtifactsStoreRef(m);let h=n.body??{};return h["task-executor-ref"]&&await o.writeTaskExecutorRef(h["task-executor-ref"]),Object.prototype.hasOwnProperty.call(h,"chat-handler-flow")&&await o.writeChatHandlerFlow(h["chat-handler-flow"]),await(await P()).writeStatusSnapshot(chunkOEFTOO47_cjs.t(p,chunkG4XXRHL2_cjs.q((await K()).graph))),C()}catch(r){return w(r)}},async status(n){try{let r=await P(),d=await r.readStatusSnapshot();return d||(d=chunkOEFTOO47_cjs.t(p,chunkG4XXRHL2_cjs.q((await K()).graph)),await r.writeStatusSnapshot(d)),C(d)}catch(r){return w(r)}},async getCardStoreRef(n){try{let r=await l().readCardStoreRef();return r?C({storeRef:r}):R(`Board at ${e.value} has no card store configured`)}catch(r){return w(r)}},async getOutputsStoreRef(n){try{let r=await l().readOutputsStoreRef();return r?C({storeRef:r}):R(`Board at ${e.value} has no outputs store configured`)}catch(r){return w(r)}},async getScratchStoreRef(n){try{return C({storeRef:await l().readScratchStoreRef()})}catch(r){return w(r)}},async getArchiveStoreRef(n){try{return C({storeRef:await l().readArchiveStoreRef()})}catch(r){return w(r)}},async getChatStoreRef(n){try{return C({storeRef:await l().readChatStoreRef()})}catch(r){return w(r)}},async getArtifactsStoreRef(n){try{return C({storeRef:await l().readArtifactsStoreRef()})}catch(r){return w(r)}},async getConfig(n){try{let r=n.params?.key;if(!r)return R("getConfig requires params.key");let d=l(),o;switch(r){case "task-executor":o=await d.readTaskExecutorRef()??null;break;case "chat-handler-flow":o=await d.readChatHandlerFlow()??null;break;case "card-store-ref":o=await d.readCardStoreRef();break;case "outputs-store-ref":o=await d.readOutputsStoreRef();break;case "scratch-store-ref":o=await d.readScratchStoreRef();break;case "archive-store-ref":o=await d.readArchiveStoreRef();break;case "chat-store-ref":o=await d.readChatStoreRef();break;case "artifacts-store-ref":o=await d.readArtifactsStoreRef();break;default:return R(`getConfig: unknown key "${r}"`)}return C({value:o})}catch(r){return w(r)}},async getOutputsDataObject(n){try{let r=n.params?.key;return r?C(await(await P()).readDataObject(r)):R("getOutputsDataObject requires params.key")}catch(r){return w(r)}},async getAllOutputsDataObjects(n){try{return C(await(await P()).readAllDataObjects())}catch(r){return w(r)}},async getOutputsComputedValues(n){try{let r=n.params?.key;return r?C(await(await P()).readComputedValues(r)):R("getOutputsComputedValues requires params.key")}catch(r){return w(r)}},async getAllOutputsComputedValues(n){try{return C(await(await P()).readAllComputedValues())}catch(r){return w(r)}},async getOutputsFetchedSources(n){try{let r=n.params?.key;if(!r)return R("getOutputsFetchedSources requires params.key");let d=await $().listSources(r),o={};for(let y of d)o[y]=await J(`${r}/${y}`);return C(o)}catch(r){return w(r)}},async getAllOutputsFetchedSources(n){try{let r=$(),d=await t.blobStorage("sources").listKeys(),o=new Set;for(let s of d){let i=s.indexOf("/");i>0&&!s.includes("/.staged/")&&o.add(s.slice(0,i));}let y={};for(let s of o){let i=await r.listSources(s);if(i.length!==0){y[s]={};for(let m of i)y[s][m]=await J(`${s}/${m}`);}}return C(y)}catch(r){return w(r)}},async addCardFiles(n){try{let r=n.params?.cardId;if(!r)return R("addCardFiles requires params.cardId");let d=await N(),o=await d.readCard(r);if(!o)return R(`card "${r}" not found`);let y=n.body,s=Array.isArray(y)?y:y&&typeof y=="object"&&Array.isArray(y.files)?y.files:y!=null?[y]:null;if(!s||s.length===0)return R("addCardFiles requires a file metadata object, array, or body.files array");let i=o.card_data&&typeof o.card_data=="object"&&!Array.isArray(o.card_data)?o.card_data:{},m=Array.isArray(i.files)?i.files:[],h=[...m,...s],x=s.map((W,M)=>({idx:m.length+M,entry:W}));await d.writeCard(r,{...o,card_data:{...i,files:h}});let F=await this.cardRefreshedNotify({params:{cardId:r}});return F.status!=="success"?F:C({cardId:r,files_added:x,notified:!0})}catch(r){return w(r)}},async cardRefreshedNotify(n){try{let r=n.params?.cardId;if(!r)return R("cardRefreshedNotify requires params.cardId");let d=await(await N()).readCard(r);return d?(await f([{kind:"card_refreshed",cardId:r,card:d}]),C({cardId:r,notified:!0})):R(`Card "${r}" not found in board at ${e.value}`)}catch(r){return w(r)}},async removeCard(n){try{let r=n.params?.id;if(!r)return R("removeCard requires params.id");try{await t.kvStorage("card-upsert").delete(r);}catch{}return await b({type:"task-removal",taskName:r,timestamp:I()}),O(),C()}catch(r){return w(r)}},async retrigger(n){try{let r=n.params?.id;return r?(await b({type:"task-restart",taskName:r,timestamp:I()}),O(),C()):R("retrigger requires params.id")}catch(r){return w(r)}},async processAccumulatedEvents(n){return await _(),G()},async upsertCard(n){try{let r=n.params?.cardId,d=n.params?.all,o=!!n.params?.restart;if(!r&&!d)return R("upsertCard requires --card-id <id> or --all");let y=await N(),s=d?(await y.readAllCards()).map(m=>m.id):[r];for(let m of s)if(!await y.readCard(m))return R(`Card "${m}" not found in board at ${e.value}`);let i=t.kvStorage("card-upsert");for(let m of s){let h=await y.readCard(m);if(!h)continue;let x=chunkOEFTOO47_cjs.x(h),F=t.hashFn(x),W=await i.read(m),M=W?.taskConfigHash!==F;if(!(!M&&!o)){if(M){let ce=W?.blobRef??await y.readCardKey(m)??m;await b({type:"task-upsert",taskName:m,taskConfig:x,timestamp:I()}),await i.write(m,{blobRef:ce,taskConfigHash:F,updatedAt:I()});}o&&await b({type:"task-restart",taskName:m,timestamp:I()});}}return O(),C()}catch(r){return w(r)}},async taskFailed(n){try{let r=n.params?.token;if(!r)return R("taskFailed requires params.token");let d=n.params?.error??"unknown error",o=ue(r);return o?(await b({type:"task-failed",taskName:o.taskName,error:d,timestamp:I()}),O(),C()):R("Invalid callback token")}catch(r){return w(r)}},async taskProgress(n){try{let r=n.params?.token;if(!r)return R("taskProgress requires params.token");let d=(n.body??{}).update??{},o=ue(r);return o?(await b({type:"task-progress",taskName:o.taskName,update:d,timestamp:I()}),O(),C()):R("Invalid callback token")}catch(r){return w(r)}},async sourceDataFetched(n){try{let r=n.params?.token,d=n.params?.ref;if(!r)return R("sourceDataFetched requires params.token");if(!d)return R("sourceDataFetched requires params.ref");let o=He(r);if(!o)return R("Invalid source token");let y=$(),s=o.dt||t.genId();o.dt||await y.ingestSourceDataStaged(o.cid,o.d,chunkSFVO2LB2_cjs.b(d),s);let i=ue(o.cbk);return i?(await b({type:"task-progress",taskName:i.taskName,update:{bindTo:o.b,outputFile:o.d,fetchedAt:I(),deliveryToken:s,sourceChecksum:o.cs,rqt:o.rqt},timestamp:I()}),O(),C()):R("Invalid callback token embedded in source token")}catch(r){return w(r)}},async sourceDataFetchFailure(n){try{let r=n.params?.token,d=n.params?.reason??"unknown";if(!r)return R("sourceDataFetchFailure requires params.token");let o=He(r);if(!o)return R("Invalid source token");let y=ue(o.cbk);return y?(await b({type:"task-progress",taskName:y.taskName,update:{bindTo:o.b,outputFile:o.d,failure:!0,reason:d,sourceChecksum:o.cs,rqt:o.rqt},timestamp:I()}),O(),C()):R("Invalid callback token embedded in source token")}catch(r){return w(r)}}}}
|
|
2
|
+
exports.a=$e;exports.b=We;exports.c=Le;exports.d=Je;exports.e=cr;exports.f=dr;exports.g=ie;exports.h=Qe;exports.i=gr;exports.j=Ir;//# sourceMappingURL=chunk-H5HBXPOI.cjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-H5HBXPOI.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var a=class{runs=new Map;data=new Map;async saveRunState(t,e){this.runs.set(t,{...e});}async loadRunState(t){let e=this.runs.get(t);return e?{...e}:null}async deleteRunState(t){this.runs.delete(t),this.data.delete(t);}async setData(t,e,s){this.data.has(t)||this.data.set(t,{});let n=this.data.get(t);n[e]=s;}async getData(t,e){return this.data.get(t)?.[e]}async getAllData(t){return {...this.data.get(t)??{}}}async clearData(t){this.data.delete(t);}async listRuns(){return Array.from(this.runs.keys())}clear(){this.runs.clear(),this.data.clear();}};exports.a=a;//# sourceMappingURL=chunk-H5KD3JPY.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-H5KD3JPY.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function g(n){return typeof n=="object"&&n!==null&&"then"in n&&typeof n.then=="function"}function i(n,s){return g(n)?n.then(s):s(n)}function u(n,s){let r={...n};for(let[e,t]of Object.entries(s))t!==null&&typeof t=="object"&&!Array.isArray(t)&&r[e]!==null&&typeof r[e]=="object"&&!Array.isArray(r[e])?r[e]=u(r[e],t):r[e]=t;return r}function c(n,s,r){if(s.length===0)return n;let[e,...t]=s;if(t.length===0)return {...n,[e]:r};let o=n[e]!==null&&typeof n[e]=="object"&&!Array.isArray(n[e])?n[e]:{};return {...n,[e]:c(o,t,r)}}function l(n){return {read:r=>n.read(r),get(r,e){return i(n.read(r),t=>{if(t===null)return null;let o=t;for(let a of e.split(".").filter(Boolean)){if(o===null||typeof o!="object"||Array.isArray(o))return null;o=o[a]??null;}return o??null})},write:(r,e)=>n.write(r,e),delete:r=>n.delete(r),listKeys:r=>n.listKeys(r),shallowMerge(r,e){return i(n.read(r),t=>n.write(r,{...t??{},...e}))},deepMerge(r,e){return i(n.read(r),t=>n.write(r,u(t??{},e)))},patch(r,e,t){return i(n.read(r),o=>{let a=e.split(".").filter(Boolean);return n.write(r,c(o??{},a,t))})}}}export{c as a,l as b};//# sourceMappingURL=chunk-HEEDJEKM.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-HEEDJEKM.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {g,t,s,i,a,l,r,h,o,q as q$1,F as F$1,E,D,C,B,A as A$1,z}from'./chunk-WDPOGXTY.js';import {q}from'./chunk-MNEOJWPS.js';import {b}from'./chunk-FW4363Y4.js';import Pe from'ajv-formats';function F(t,e,n,s){switch(s){case "alphabetical":return Y(t);case "priority-first":return ie(t,e);case "duration-first":return ae(t,e);case "cost-optimized":return ce(t,e);case "resource-aware":return ue(t,e);case "round-robin":return le(t,n);default:return Y(t)}}function Y(t){return [...t].sort((e,n)=>e.localeCompare(n))[0]}function ie(t,e){return [...t].sort((n,s)=>{let o=e[n]?.priority??0,r=e[s]?.priority??0;if(o!==r)return r-o;let i=A(e[n]),a=A(e[s]);return i!==a?i-a:n.localeCompare(s)})[0]}function ae(t,e){return [...t].sort((n,s)=>{let o=A(e[n]),r=A(e[s]);if(o!==r)return o-r;let i=e[n]?.priority??0,a=e[s]?.priority??0;return i!==a?a-i:n.localeCompare(s)})[0]}function ce(t,e){return [...t].sort((n,s)=>{let o=e[n]?.estimatedCost??0,r=e[s]?.estimatedCost??0;if(o!==r)return o-r;let i=e[n]?.priority??0,a=e[s]?.priority??0;return i!==a?a-i:n.localeCompare(s)})[0]}function ue(t,e){return [...t].sort((n,s)=>{let o=e[n]?.estimatedResources?.cpu??1,r=e[s]?.estimatedResources?.cpu??1;if(o!==r)return o-r;let i=e[n]?.priority??0,a=e[s]?.priority??0;return i!==a?a-i:n.localeCompare(s)})[0]}function le(t,e){let n=Object.values(e.tasks).reduce((o,r)=>o+r.executionCount,0),s=[...t].sort();return s[n%s.length]}function A(t){return t?.estimatedDuration??1/0}function j(t$1,e){return t$1.filter(n=>{let s=g(e[n]);return !t(n,s,t$1,e)})}function U(t,e){let n=s(t,e),s$1=[];for(let r of Object.values(n))if(r.length===1)s$1.push(...r);else {let i=Math.floor(Math.random()*r.length);s$1.push(r[i]);}return j(t,e).forEach(r=>{s$1.includes(r)||s$1.push(r);}),s$1}function W(t,e){switch(e.executionConfig.completionStrategy){case "all-tasks-done":return pe(t,e);case "all-outputs-done":return K(t,e);case "only-resolved":return fe(t,e);case "goal-reached":return de(t,e);case "manual":return {isComplete:false,expectedCompletion:{taskNames:[],outputs:[]}};default:return K(t,e)}}function pe(t,e){let n=i(t),s=Object.keys(n);return s.length===0?{isComplete:true,expectedCompletion:{taskNames:[],outputs:[]}}:{isComplete:s.every(r=>{let i=e.tasks[r];return i?.status===a.COMPLETED||l(i)}),expectedCompletion:{taskNames:s,outputs:[]}}}function K(t,e){let n=i(t),s=new Set;for(let i of Object.values(n))g(i).forEach(a=>s.add(a));let o=r(t,e.tasks);return {isComplete:[...s].every(i=>o.includes(i)),expectedCompletion:{taskNames:[],outputs:[...s]}}}function fe(t,e){let n=i(t),s=r(t,e.tasks),o=new Set,r$1={};for(let[c,u]of Object.entries(n))g(u).forEach(p=>{o.add(p),r$1[p]||(r$1[p]=[]),r$1[p].push(c);});for(let c of o){if(s.includes(c))continue;if((r$1[c]??[]).some(p=>{let g=e.tasks[p];if(g?.status===a.COMPLETED||l(g))return false;let l$1=n[p];return h(l$1).every(m=>s.includes(m))}))return {isComplete:false,expectedCompletion:{taskNames:[],outputs:[]}}}let i$1=ge(t,e);return i$1.length>0?{isComplete:false,expectedCompletion:{taskNames:i$1,outputs:[]}}:{isComplete:Object.values(e.tasks).filter(c=>c.status===a.COMPLETED).length>0||s.length>0,expectedCompletion:{taskNames:[],outputs:[]}}}function de(t,e){let n=t.settings.goal??[];if(n.length===0)return K(t,e);let s=r(t,e.tasks);return {isComplete:n.every(r=>s.includes(r)),expectedCompletion:{taskNames:[],outputs:n}}}function ge(t,e){let n=i(t),s=r(t,e.tasks),o=[];for(let[r,i]of Object.entries(n)){let a$1=e.tasks[r];if(a$1?.status===a.COMPLETED||a$1?.status===a.RUNNING||l(a$1))continue;if(h(i).every(u=>s.includes(u))){let u=g(i);u.length>0&&u.every(p=>s.includes(p))||o.push(r);}}return o}function H(t){let{graph:e,state:n,eligibleTasks:s,completionResult:o}=t,r$1=n.tasks,i$1=i(e),a$1=r(e,r$1);if(s.length>0)return {is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]};if(Object.values(r$1).some(p=>p.status===a.RUNNING))return {is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]};if(o?.expectedCompletion){let{taskNames:p=[],outputs:g$1=[]}=o.expectedCompletion;if(p.length>0){let l$1=p.filter(f=>l(r$1[f]));if(l$1.length>0&&l$1.length===p.length)return {is_stuck:true,stuck_description:`Completion expects tasks ${p.join(", ")} but all are failed`,tasks_blocked:l$1,outputs_unresolvable:g$1}}if(g$1.length>0&&n.executionConfig.completionStrategy!=="only-resolved"){let l$1=g$1.filter(f=>!a$1.includes(f));if(l$1.length>0){let f=[];for(let m of l$1)Object.entries(i$1).filter(([,C])=>g(C).includes(m)).map(([C])=>C).filter(C=>!l(r$1[C])).length===0&&f.push(m);if(f.length>0)return {is_stuck:true,stuck_description:`Completion expects outputs '${f.join("', '")}' but no viable tasks can provide them`,tasks_blocked:[],outputs_unresolvable:f}}}}let u=[],d=new Set;for(let[p,g$1]of Object.entries(i$1)){let l$1=r$1[p];if(l$1?.status===a.COMPLETED||l(l$1)||l$1?.status===a.RUNNING)continue;let m=h(g$1).filter(k=>!a$1.includes(k));m.length>0&&(m.every(x=>Object.entries(i$1).filter(([,v])=>g(v).includes(x)).map(([v])=>v).some(v=>!l(r$1[v])&&r$1[v]?.status!==a.COMPLETED))||(u.push(p),m.forEach(x=>d.add(x))));}return u.length>0?{is_stuck:true,stuck_description:`Tasks [${u.join(", ")}] blocked by unresolvable dependencies: ${[...d].join(", ")}`,tasks_blocked:u,outputs_unresolvable:[...d]}:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]}}function me(t,e){let n=[],s=i(t);if(Object.keys(s).length===0)return {eligibleTasks:[],isComplete:true,stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},hasConflicts:false,conflicts:{},strategy:e.executionConfig.conflictStrategy,processingLog:["No tasks defined"]};let o=e.executionConfig.executionMode,r=e.executionConfig.conflictStrategy,i$1=J(t,e);n.push(`Found ${i$1.length} candidate tasks: ${i$1.join(", ")||"none"}`);let a,c=false,u={};if(o==="dependency-mode")a=i$1;else {let g=he(i$1,t,e,r);a=g.eligibleTasks,c=g.hasConflicts,u=g.conflicts;}n.push(`Eligible after conflict resolution: ${a.join(", ")||"none"}`);let d=W(t,e);n.push(`Execution complete: ${d.isComplete}`);let p=H({graph:t,state:e,eligibleTasks:a,completionResult:d});return p.is_stuck&&n.push(`STUCK: ${p.stuck_description}`),{eligibleTasks:a,isComplete:d.isComplete,stuckDetection:p,hasConflicts:c,conflicts:u,strategy:r,processingLog:n}}function J(t,e){let n=i(t),s=r(t,e.tasks),o$1=[...new Set([...s,...e.availableOutputs])],r$1=[];for(let[i,a$1]of Object.entries(n)){let c=e.tasks[i],u=o(a$1,t.settings),d=u!=="once";if(c?.status===a.RUNNING||l(c))continue;let p=q$1(a$1);if(p!==void 0&&c&&c.executionCount>=p||a$1.circuit_breaker&&c&&c.executionCount>=a$1.circuit_breaker.max_executions||!d&&c?.status===a.COMPLETED)continue;if(d&&c?.status===a.COMPLETED){let l=h(a$1);switch(u){case "data-changed":{if(l.length>0){if(!l.some(m=>{for(let[k,x]of Object.entries(n))if(g(x).includes(m)){let C=e.tasks[k];if(!C)continue;let v=c.lastConsumedHashes?.[m];return C.lastDataHash==null?C.executionCount>c.lastEpoch:C.lastDataHash!==v}return false}))continue}else continue;break}case "epoch-changed":{if(l.length>0){if(!l.some(m=>{for(let[k,x]of Object.entries(n))if(g(x).includes(m)){let C=e.tasks[k];if(C&&C.executionCount>c.lastEpoch)return true}return false}))continue}else continue;break}case "time-based":{let f=a$1.refreshInterval??0;if(f<=0)continue;let m=c.completedAt;if(!m||(Date.now()-Date.parse(m))/1e3<f)continue;break}case "manual":continue;default:continue}}if(h(a$1).every(l=>o$1.includes(l))){if(!d){let l=g(a$1);if(l.length>0&&l.every(m=>o$1.includes(m)))continue}r$1.push(i);}}return r$1}function he(t,e,n,s$1){let o={eligibleTasks:[],hasConflicts:false,conflicts:{}};if(t.length===0)return o;let r=i(e);switch(s$1){case "parallel-all":return o.eligibleTasks=t,o;case "user-choice":{if(o.eligibleTasks=t,t.length>1){let p=s(t,r);for(let[g,l]of Object.entries(p))l.length>1&&(o.conflicts[g]=l,o.hasConflicts=true);}return o}case "skip-conflicts":return o.eligibleTasks=j(t,r),o;case "random-select":return o.eligibleTasks=U(t,r),o}let i$1=s(t,r),a$1=new Set;for(let[p,g$1]of Object.entries(n.tasks))if(g$1.status===a.RUNNING){let l=e.tasks[p];l&&g(l).forEach(f=>a$1.add(f));}let c=[],u=new Set;for(let[p,g]of Object.entries(i$1))if(!a$1.has(p)){if(g.length===1)c.push(g[0]);else {let l=F(g,r,n,s$1);c.push(l);}g.forEach(l=>u.add(l));}return t.filter(p=>!u.has(p)).forEach(p=>{c.includes(p)||c.push(p);}),o.eligibleTasks=c,o}function X(t,e,n){if("executionId"in e&&e.executionId&&e.executionId!==t.executionId)return t;switch(e.type){case "task-started":return B(t,e.taskName,n);case "task-completed":return C(t,n,e.taskName,e.result,e.dataHash,e.data);case "task-failed":return D(t,n,e.taskName,e.error);case "task-progress":return E(t,e.taskName,e.message,e.progress);case "task-restart":return F$1(t,e.taskName);case "inject-tokens":return ye(t,e.tokens);case "agent-action":return Ce(t,e.action,n,e.config);case "task-upsert":return be(t,e.taskName,e.taskConfig);default:return t}}function ke(t,e,n){return e.reduce((s,o)=>X(s,o,n),t)}function ye(t,e){return {...t,availableOutputs:[...new Set([...t.availableOutputs,...e])],lastUpdated:new Date().toISOString()}}function Ce(t,e,n,s){let o=new Date().toISOString();switch(e){case "start":{let r=`exec-${Date.now()}`,i=A$1(n,r);return s&&(s.executionMode&&(i.executionConfig.executionMode=s.executionMode),s.conflictStrategy&&(i.executionConfig.conflictStrategy=s.conflictStrategy),s.completionStrategy&&(i.executionConfig.completionStrategy=s.completionStrategy)),i}case "stop":return {...t,status:"stopped",executionId:null,lastUpdated:o};case "pause":return {...t,status:"paused",lastUpdated:o};case "resume":return {...t,status:"running",lastUpdated:o};default:return t}}function be(t,e,n){return !e||!n||!Array.isArray(n.provides)?t:{...t,tasks:{...t.tasks,[e]:t.tasks[e]??z()},lastUpdated:new Date().toISOString()}}function Te(t){let e={};for(let[n,s]of Object.entries(t)){for(let o of g(s))e[o]||(e[o]=[]),e[o].push(n);if(s.on)for(let o of Object.values(s.on))for(let r of o)e[r]||(e[r]=[]),e[r].includes(n)||e[r].push(n);if(s.on_failure)for(let o of s.on_failure)e[o]||(e[o]=[]),e[o].includes(n)||e[o].push(n);}return e}function xe(t,e){let n={};for(let[s,o]of Object.entries(t)){let r=h(o),i=new Set;for(let a of r){let c=e[a]||[];for(let u of c)u!==s&&i.add(u);}n[s]=[...i];}return n}function Se(t,e){let n=new Set(t),s={},o={};for(let a of t)s[a]=0,o[a]=[];for(let a of t)for(let c of e[a]||[])n.has(c)&&(s[a]++,o[c].push(a));let r=[],i=new Set(t);for(;i.size>0;){let a=[];for(let c of i)s[c]===0&&a.push(c);if(a.length===0){r.push([...i]);break}a.sort(),r.push(a);for(let c of a){i.delete(c);for(let u of o[c]||[])i.has(u)&&s[u]--;}}return r}function ve(t){let e=i(t),n=Object.keys(e);if(n.length===0)return {phases:[],dependencies:{},conflicts:{},entryPoints:[],leafTasks:[],unreachableTokens:[],blockedTasks:[],depth:0,maxParallelism:0};let s=Te(e),o=xe(e,s),r={};for(let[f,m]of Object.entries(s))m.length>1&&(r[f]=m);let i$1=n.filter(f=>h(e[f]).length===0),a=new Set;for(let f of Object.values(o))for(let m of f)a.add(m);let c=n.filter(f=>!a.has(f)),u=new Set;for(let f of Object.values(e))for(let m of h(f))u.add(m);let d=[...u].filter(f=>!s[f]),p=new Set(d),g=n.filter(f=>h(e[f]).some(m=>p.has(m))),l=Se(n,o);return {phases:l,dependencies:o,conflicts:r,entryPoints:i$1,leafTasks:c.sort(),unreachableTokens:d.sort(),blockedTasks:g.sort(),depth:l.length,maxParallelism:Math.max(0,...l.map(f=>f.length))}}function R(t){return t.replace(/[^a-zA-Z0-9_]/g,"_")}function Ee(t,e={}){let{direction:n="TD",showTokens:s=true,title:o}=e,r=i(t),i$1=Object.keys(r);if(i$1.length===0)return `graph ${n}
|
|
2
|
+
empty[No tasks defined]`;let a={};for(let[l,f]of Object.entries(r)){for(let m of g(f))a[m]||(a[m]=[]),a[m].push(l);if(f.on)for(let m of Object.values(f.on))for(let k of m)a[k]||(a[k]=[]),a[k].includes(l)||a[k].push(l);}let c=[],u=o||t.id||"Event Graph";c.push(`%% ${u}`),c.push(`graph ${n}`);let d=new Set;for(let l of Object.values(r))for(let f of h(l))d.add(f);let p=new Set(i$1.filter(l=>{let f=g(r[l]);return f.length===0||f.every(m=>!d.has(m))}));for(let l of i$1){let f=R(l);h(r[l]).length===0?c.push(` ${f}([${l}])`):p.has(l)?c.push(` ${f}[[${l}]]`):c.push(` ${f}[${l}]`);}let g$1=new Set;for(let[l,f]of Object.entries(r)){let m=h(f);for(let k of m){let x=a[k]||[];for(let C of x){if(C===l)continue;let v=`${C}->${l}:${k}`;if(g$1.has(v))continue;g$1.add(v);let V=R(C),z=R(l);s?c.push(` ${V} -->|${k}| ${z}`):c.push(` ${V} --> ${z}`);}}for(let k of m)if(!a[k]){let x=`warn_${R(k)}`,C=R(l);c.push(` ${x}{{\u26A0 ${k}}} -.->|missing| ${C}`);}}return c.join(`
|
|
3
|
+
`)}function Re(t,e={}){let{direction:n="TD",title:s}=e,o=t.steps,r=t.terminal_states,i=t.settings.start_step,a=[],c=s||t.id||"Step Machine";a.push(`%% ${c}`),a.push(`graph ${n}`),a.push(" START(( ))"),a.push(` START --> ${R(i)}`);for(let u of Object.keys(o)){let d=R(u);a.push(` ${d}[${u}]`);}for(let[u,d]of Object.entries(r)){let p=R(u);a.push(` ${p}([${u}: ${d.return_intent}])`);}for(let[u,d]of Object.entries(o)){let p=R(u);for(let[g,l]of Object.entries(d.transitions)){let f=R(l);a.push(` ${p} -->|${g}| ${f}`);}}return a.join(`
|
|
4
|
+
`)}function Z(t){let e=[];if(!t||typeof t!="object")return ["Graph config must be an object"];let n=t;if(!n.settings||typeof n.settings!="object")e.push('Graph config must have a "settings" object');else {let s=n.settings;(!s.completion||typeof s.completion!="string")&&e.push("settings.completion must be a string"),s.completion==="goal-reached"&&(!Array.isArray(s.goal)||s.goal.length===0)&&e.push('settings.goal must be a non-empty array when completion is "goal-reached"');}if(!n.tasks||typeof n.tasks!="object")e.push('Graph config must have a "tasks" object');else {let s=n.tasks;Object.keys(s).length===0&&e.push("Graph config must have at least one task");for(let[o,r]of Object.entries(s)){if(!r||typeof r!="object"){e.push(`Task "${o}" must be an object`);continue}let i=r;if(Array.isArray(i.provides)||e.push(`Task "${o}" must have a "provides" array`),i.requires!==void 0&&!Array.isArray(i.requires)&&e.push(`Task "${o}".requires must be an array if present`),i.on!==void 0)if(typeof i.on!="object"||Array.isArray(i.on))e.push(`Task "${o}".on must be an object mapping result keys to token arrays`);else for(let[a,c]of Object.entries(i.on))Array.isArray(c)||e.push(`Task "${o}".on.${a} must be an array of tokens`);}}return e}async function Q(t){return (await import('yaml')).parse(t)}async function Oe(t){let e;if(typeof t=="string")if(t.startsWith("http://")||t.startsWith("https://")){let s=await fetch(t);if(!s.ok)throw new Error(`Failed to load graph config from ${t}: ${s.statusText}`);let o=await s.text();(s.headers.get("content-type")??"").includes("json")||t.endsWith(".json")?e=JSON.parse(o):e=await Q(o);}else if(t.includes("{"))e=JSON.parse(t);else {let o=await(await import('fs/promises')).readFile(t,"utf-8");t.endsWith(".json")?e=JSON.parse(o):e=await Q(o);}else e=t;let n=Z(e);if(n.length>0)throw new Error(`Invalid graph configuration:
|
|
5
|
+
- ${n.join(`
|
|
6
|
+
- `)}`);return e}function ee(t,e={}){let{format:n="json",indent:s=2}=e;return n==="yaml"?G(t,s):JSON.stringify(t,null,s)}async function Ae(t,e,n={}){let s=n.format??(e.endsWith(".yaml")||e.endsWith(".yml")?"yaml":"json"),o=ee(t,{...n,format:s});await(await import('fs/promises')).writeFile(e,o,"utf-8");}function G(t,e,n=0){let s=" ".repeat(e*n);if(t==null)return "null";if(typeof t=="boolean"||typeof t=="number")return String(t);if(typeof t=="string")return t.includes(":")||t.includes("#")||t.includes(`
|
|
7
|
+
`)||t.includes('"')||t.includes("'")||t.startsWith(" ")||t.startsWith("{")||t.startsWith("[")||t===""?JSON.stringify(t):t;if(Array.isArray(t))return t.length===0?"[]":t.every(o=>typeof o=="string"||typeof o=="number"||typeof o=="boolean")?`[${t.map(o=>typeof o=="string"?G(o,e,0):String(o)).join(", ")}]`:t.map(o=>{let r=G(o,e,n+1);if(typeof o=="object"&&o!==null&&!Array.isArray(o)){let i=r.trimStart().split(`
|
|
8
|
+
`);return `${s}- ${i[0]}
|
|
9
|
+
${i.slice(1).map(a=>`${s} ${a.trimStart()?a:""}`).filter(Boolean).join(`
|
|
10
|
+
`)}`}return `${s}- ${r}`}).join(`
|
|
11
|
+
`);if(typeof t=="object"){let o=Object.entries(t);return o.length===0?"{}":o.map(([r,i])=>{if(i===void 0)return "";let a=G(i,e,n+1);return typeof i=="object"&&i!==null&&!Array.isArray(i)&&Object.keys(i).length>0?`${s}${r}:
|
|
12
|
+
${a}`:Array.isArray(i)&&i.length>0&&!i.every(c=>typeof c=="string"||typeof c=="number"||typeof c=="boolean")?`${s}${r}:
|
|
13
|
+
${a}`:`${s}${r}: ${a}`}).filter(Boolean).join(`
|
|
14
|
+
`)}return String(t)}function je(t){let e={};for(let[n,s]of Object.entries(t)){for(let o of g(s))e[o]||(e[o]=[]),e[o].push(n);if(s.on)for(let o of Object.values(s.on))for(let r of o)e[r]||(e[r]=[]),e[r].includes(n)||e[r].push(n);if(s.on_failure)for(let o of s.on_failure)e[o]||(e[o]=[]),e[o].includes(n)||e[o].push(n);}return e}function Ge(t,e){let n={};for(let[s,o]of Object.entries(t)){n[s]=new Set;for(let r of h(o))for(let i of e[r]||[])i!==s&&n[s].add(i);}return n}function _e(t,e){let r={},i={},a=[];for(let u of t)r[u]=0,i[u]=null;function c(u){r[u]=1;for(let d of e[u]||[])if(r[d]===1){let p=[d],g=u;for(;g!==d;)p.push(g),g=i[g];p.push(d),p.reverse(),a.push(p);}else r[d]===0&&(i[d]=u,c(d));r[u]=2;}for(let u of t)r[u]===0&&c(u);return a}function $e(t){let e=[],n=i(t),s=Object.keys(n);if(s.length===0)return e.push({severity:"error",code:"EMPTY_GRAPH",message:"Graph has no tasks"}),te(e);let o=je(n),r=Ge(n,o);for(let[c,u]of Object.entries(n))for(let d of h(u))o[d]||e.push({severity:"error",code:"DANGLING_REQUIRES",message:`Task "${c}" requires token "${d}" but no task produces it`,tasks:[c],tokens:[d]});let i$1=_e(s,r);for(let c of i$1)e.push({severity:"error",code:"CIRCULAR_DEPENDENCY",message:`Circular dependency: ${c.join(" \u2192 ")}`,tasks:c.filter((u,d)=>d<c.length-1)});for(let[c,u]of Object.entries(n)){let d=h(u),p=g(u),g$1=d.filter(l=>p.includes(l));g$1.length>0&&e.push({severity:"error",code:"SELF_DEPENDENCY",message:`Task "${c}" requires tokens it provides itself: [${g$1.join(", ")}]`,tasks:[c],tokens:g$1});}for(let[c,u]of Object.entries(o))u.length>1&&e.push({severity:"warning",code:"PROVIDE_CONFLICT",message:`Token "${c}" is produced by multiple tasks: [${u.join(", ")}]. This requires a conflict strategy.`,tasks:u,tokens:[c]});if(t.settings.completion==="goal-reached"&&t.settings.goal)for(let c of t.settings.goal)o[c]||e.push({severity:"error",code:"UNREACHABLE_GOAL",message:`Goal token "${c}" cannot be produced by any task`,tokens:[c]});if(s.length>1)for(let[c,u]of Object.entries(n)){let d=g(u),p=u.on?Object.values(u.on).flat():[],g$1=u.on_failure||[];d.length===0&&p.length===0&&g$1.length===0&&e.push({severity:"warning",code:"DEAD_END_TASK",message:`Task "${c}" has no provides \u2014 it cannot unblock any downstream task`,tasks:[c]});}let a=new Set;for(let c of Object.values(n))for(let u of h(c))a.add(u);for(let[c,u]of Object.entries(n)){let d=h(u),p=g(u),g$1=u.on?Object.values(u.on).flat():[],l=[...p,...g$1],f=d.length===0,m=l.some(k=>a.has(k));f&&!m&&s.length>1&&(t.settings.completion==="goal-reached"&&t.settings.goal?.some(x=>l.includes(x))||e.push({severity:"info",code:"ISOLATED_TASK",message:`Task "${c}" is disconnected \u2014 it has no requires and nothing depends on its provides`,tasks:[c]}));}return t.settings.completion==="goal-reached"&&!t.settings.goal&&e.push({severity:"error",code:"MISSING_GOAL",message:'Completion strategy is "goal-reached" but no goal tokens are defined'}),te(e)}function te(t){let e=t.filter(s=>s.severity==="error"),n=t.filter(s=>s.severity==="warning");return {valid:e.length===0,issues:t,errors:e,warnings:n}}var se={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://github.com/yaml-flow/schema/event-graph.json",title:"Event Graph Configuration",description:"Schema for stateless event-graph (DAG) workflow definitions in yaml-flow",type:"object",required:["settings","tasks"],additionalProperties:false,properties:{id:{type:"string",description:"Optional graph identifier"},settings:{$ref:"#/definitions/settings"},tasks:{type:"object",description:"Task definitions keyed by name",minProperties:1,additionalProperties:{$ref:"#/definitions/task"}}},definitions:{settings:{type:"object",required:["completion"],properties:{completion:{type:"string",enum:["all-tasks-done","all-outputs-done","only-resolved","goal-reached","manual"],description:"Completion strategy"},conflict_strategy:{type:"string",enum:["alphabetical","priority-first","duration-first","cost-optimized","resource-aware","random-select","user-choice","parallel-all","skip-conflicts","round-robin"],description:"Conflict resolution strategy"},execution_mode:{type:"string",enum:["dependency-mode","eligibility-mode"],description:"Execution mode"},goal:{type:"array",items:{type:"string"},minItems:1,description:"Goal outputs \u2014 required when completion is 'goal-reached'"},max_iterations:{type:"integer",minimum:1,description:"Max scheduler iterations (safety limit, default: 1000)"},timeout_ms:{type:"integer",minimum:0,description:"Timeout in ms (declared for drivers, not enforced by pure engine)"},refreshStrategy:{$ref:"#/definitions/refresh_strategy",description:"Default refresh strategy for all tasks (default: 'data-changed')"}},additionalProperties:false,if:{properties:{completion:{const:"goal-reached"}}},then:{required:["completion","goal"]}},task:{type:"object",required:["provides"],properties:{requires:{type:"array",items:{type:"string"},description:"Tokens this task needs to become eligible"},provides:{type:"array",items:{type:"string"},description:"Tokens this task produces on successful completion"},on:{type:"object",description:"Conditional provides based on handler result key",additionalProperties:{type:"array",items:{type:"string"}}},on_failure:{type:"array",items:{type:"string"},description:"Tokens to inject when this task fails"},method:{type:"string",description:"Task execution method (informational \u2014 driver concern)"},config:{type:"object",description:"Arbitrary task configuration (driver concern)"},priority:{type:"number",description:"Higher = preferred in conflict resolution"},estimatedDuration:{type:"number",minimum:0,description:"Estimated duration in ms (used by duration-first strategy)"},estimatedCost:{type:"number",minimum:0,description:"Estimated cost (used by cost-optimized strategy)"},estimatedResources:{type:"object",additionalProperties:{type:"number"},description:"Resource requirements (used by resource-aware strategy)"},retry:{$ref:"#/definitions/task_retry"},refreshStrategy:{$ref:"#/definitions/refresh_strategy",description:"Task-level refresh strategy (overrides settings default)"},refreshInterval:{type:"number",minimum:0,description:"Interval in seconds for time-based refresh strategy"},maxExecutions:{type:"integer",minimum:1,description:"Maximum number of times this task can execute"},circuit_breaker:{$ref:"#/definitions/task_circuit_breaker"},description:{type:"string",description:"Human-readable description"},inference:{$ref:"#/definitions/inference_hints"}},additionalProperties:false},task_retry:{type:"object",required:["max_attempts"],properties:{max_attempts:{type:"integer",minimum:1,description:"Maximum retry attempts"},delay_ms:{type:"integer",minimum:0,description:"Delay between retries in ms"},backoff_multiplier:{type:"number",minimum:1,description:"Backoff multiplier (e.g., 2 for exponential)"}},additionalProperties:false},refresh_strategy:{type:"string",enum:["data-changed","epoch-changed","time-based","manual","once"],description:"Strategy for determining when a completed task should re-run"},task_circuit_breaker:{type:"object",required:["max_executions","on_break"],properties:{max_executions:{type:"integer",minimum:1,description:"Max executions before breaker trips"},on_break:{type:"array",items:{type:"string"},minItems:1,description:"Tokens to inject when breaker trips"}},additionalProperties:false},inference_hints:{type:"object",description:"LLM inference hints \u2014 opt-in metadata for AI-assisted completion detection",properties:{criteria:{type:"string",description:"Human-readable completion criteria"},keywords:{type:"array",items:{type:"string"},description:"Keywords to help the LLM understand the domain"},suggestedChecks:{type:"array",items:{type:"string"},description:"Suggested checks for verification"},autoDetectable:{type:"boolean",description:"Whether the LLM should attempt to auto-detect completion (default: false)"}},additionalProperties:false}}};var ne=b(q(),1);var _=null;function Ie(){if(_)return _;let t=new ne.default({allErrors:true});return Pe(t),_=t.compile(se),_}function Ne(t){let e=Ie();return e(t)?{ok:true,errors:[]}:{ok:false,errors:(e.errors??[]).map(o=>`${o.instancePath||"/"}: ${o.message??"unknown error"}`)}}
|
|
15
|
+
export{F as a,j as b,U as c,W as d,H as e,me as f,J as g,X as h,ke as i,ve as j,Ee as k,Re as l,Z as m,Oe as n,ee as o,Ae as p,$e as q,Ne as r};//# sourceMappingURL=chunk-HLJH7LGW.js.map
|
|
16
|
+
//# sourceMappingURL=chunk-HLJH7LGW.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var module$1=require('module');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var y=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-IXZG74EW.cjs', document.baseURI).href))),u=y("./jsonata-sync.cjs"),p=u;function c(r,t){if(!t||!r)return;let s=t.split("."),e=r;for(let n=0;n<s.length;n++){if(e==null)return;e=e[s[n]];}return e}function l(r,t,s){let e=t.split("."),n=r;for(let o=0;o<e.length-1;o++)(n[e[o]]==null||typeof n[e[o]]!="object")&&(n[e[o]]={}),n=n[e[o]];n[e[e.length-1]]=s;}async function m(r,t){if(!r?.compute?.length)return r;r.card_data||(r.card_data={}),r.computed_values={},r._sourcesData=t?.sourcesData??{};let s=r.requires??{},e={card_data:r.card_data,requires:s,expects_data:s,fetched_sources:r._sourcesData,data:r.computed_values,computed_values:r.computed_values};for(let n of r.compute)try{let o=await u(n.expr).evaluate(e);l(r.computed_values,n.bindTo,o),e.computed_values=r.computed_values;}catch{}return r}function g(r,t){if(!r?.compute?.length)return {ok:true,node:r};r.card_data||(r.card_data={}),r.computed_values={},r._sourcesData=t?.sourcesData??{};let s=r.requires??{},e={card_data:r.card_data,requires:s,expects_data:s,fetched_sources:r._sourcesData,data:r.computed_values,computed_values:r.computed_values},n=[];for(let o of r.compute)try{let a=p(o.expr).evaluate(e);l(r.computed_values,o.bindTo,a),e.computed_values=r.computed_values;}catch(a){let i=a instanceof Error?a.message:String(a);n.push({bindTo:o.bindTo,error:i});}return n.length>0?{ok:true,node:r,errors:n}:{ok:true,node:r}}async function b(r,t,s){let e={...s??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return u(r).evaluate(e)}function _(r,t){return t.startsWith("fetched_sources.")?c(r._sourcesData??{},t.slice(16)):c(r,t)}var d=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),v=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function h(r){let t=[];if(!r||typeof r!="object"||Array.isArray(r))return {ok:false,errors:["Node must be a non-null object"]};let s=r;(typeof s.id!="string"||!s.id)&&t.push("id: required, must be a non-empty string");for(let e of Object.keys(s))v.has(e)||t.push(`Unknown top-level key: "${e}"`);if((s.card_data==null||typeof s.card_data!="object"||Array.isArray(s.card_data))&&t.push("card_data: required, must be an object"),s.meta!=null)if(typeof s.meta!="object"||Array.isArray(s.meta))t.push("meta: must be an object");else {let e=s.meta;e.title!=null&&typeof e.title!="string"&&t.push("meta.title: must be a string"),e.tags!=null&&!Array.isArray(e.tags)&&t.push("meta.tags: must be an array");}if(s.requires!=null&&!Array.isArray(s.requires)&&t.push("requires: must be an array of strings"),s.provides!=null&&(Array.isArray(s.provides)?s.provides.forEach((e,n)=>{if(!e||typeof e!="object"||Array.isArray(e))t.push(`provides[${n}]: must be an object with bindTo and ref`);else {let o=e;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`provides[${n}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&t.push(`provides[${n}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),s.compute!=null&&(Array.isArray(s.compute)?s.compute.forEach((e,n)=>{if(!e||typeof e!="object"||Array.isArray(e))t.push(`compute[${n}]: must be a compute step object`);else {let o=e;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`compute[${n}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&t.push(`compute[${n}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),s.source_defs!=null)if(!Array.isArray(s.source_defs))t.push("source_defs: must be an array");else {let e=new Set,n=new Set;s.source_defs.forEach((o,a)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${a}]: must be an object`);else {let i=o;typeof i.bindTo!="string"||!i.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(e.has(i.bindTo)&&t.push(`source_defs[${a}]: bindTo "${i.bindTo}" is not unique across source_defs`),e.add(i.bindTo)),typeof i.outputFile!="string"||!i.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(n.has(i.outputFile)&&t.push(`source_defs[${a}]: outputFile "${i.outputFile}" is not unique across source_defs`),n.add(i.outputFile)),i.optionalForCompletionGating!=null&&typeof i.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${a}]: optionalForCompletionGating must be a boolean`);}});}if(s.view!=null)if(typeof s.view!="object"||Array.isArray(s.view))t.push("view: must be an object");else {let e=s.view;!Array.isArray(e.elements)||e.elements.length===0?t.push("view.elements: required, must be a non-empty array"):e.elements.forEach((n,o)=>{if(!n||typeof n!="object"){t.push(`view.elements[${o}]: must be an object`);return}!n.kind||typeof n.kind!="string"?t.push(`view.elements[${o}].kind: required, must be a string`):d.has(n.kind)||t.push(`view.elements[${o}].kind: unknown kind "${n.kind}". Valid: ${[...d].join(", ")}`),n.data!=null&&(typeof n.data!="object"||Array.isArray(n.data))&&t.push(`view.elements[${o}].data: must be an object`);}),e.layout!=null&&(typeof e.layout!="object"||Array.isArray(e.layout))&&t.push("view.layout: must be an object"),e.features!=null&&(typeof e.features!="object"||Array.isArray(e.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function k(r,t){if(!r||r.length===0)return [];let s={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(r.map(async e=>{let n={};if(e.projections&&typeof e.projections=="object"&&!Array.isArray(e.projections)){for(let[o,a]of Object.entries(e.projections))if(typeof a=="string"&&a.trim().length>0)try{n[o]=await u(a).evaluate(s);}catch{n[o]=void 0;}}return {...e,_projections:n}}))}function w(r,t){if(!r||r.length===0)return [];let s={card_data:t.card_data??{},requires:t.requires??{}};return r.map(e=>{let n={};if(e.projections&&typeof e.projections=="object"&&!Array.isArray(e.projections)){for(let[o,a]of Object.entries(e.projections))if(typeof a=="string"&&a.trim().length>0)try{n[o]=p(a).evaluate(s);}catch{n[o]=void 0;}}return {...e,_projections:n}})}var j={run:m,runSync:g,eval:b,resolve:_,validate:h,enrichSources:k,enrichSourcesSync:w},C=j;exports.a=j;exports.b=C;//# sourceMappingURL=chunk-IXZG74EW.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-IXZG74EW.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkG4XXRHL2_cjs=require('./chunk-G4XXRHL2.cjs'),chunkLODXIALE_cjs=require('./chunk-LODXIALE.cjs'),chunkIXZG74EW_cjs=require('./chunk-IXZG74EW.cjs'),child_process=require('child_process');function z(s){let{config:e,state:o}=s,a=chunkLODXIALE_cjs.i(e),i=Object.keys(a),d=0,c=0,l=0,f=0,t=0,r=0;for(let h of i){let T=o.tasks[h];if(!T||T.status===chunkLODXIALE_cjs.a.NOT_STARTED)t++;else switch(T.status){case chunkLODXIALE_cjs.a.RUNNING:d++;break;case chunkLODXIALE_cjs.a.COMPLETED:c++;break;case chunkLODXIALE_cjs.a.FAILED:l++;break;case "inactivated":r++;break;default:f++;}}let n={};for(let[h,T]of Object.entries(a)){for(let R of chunkLODXIALE_cjs.g(T))n[R]||(n[R]=[]),n[R].push(h);if(T.on)for(let R of Object.values(T.on))for(let g of R)n[g]||(n[g]=[]),n[g].includes(h)||n[g].push(h);if(T.on_failure)for(let R of T.on_failure)n[R]||(n[R]=[]),n[R].includes(h)||n[R].push(h);}let u=new Set,p=0,k=0;for(let[h,T]of Object.entries(a)){let R=o.tasks[h];if(R?.status===chunkLODXIALE_cjs.a.COMPLETED||R?.status===chunkLODXIALE_cjs.a.RUNNING)continue;let g=false,H=false;for(let x of chunkLODXIALE_cjs.h(T)){let q=n[x]||[];q.length===0?(u.add(x),g=true):q.every(Y=>{let W=o.tasks[Y];return W?.status===chunkLODXIALE_cjs.a.FAILED||W?.status==="inactivated"})&&(H=true);}g&&p++,H&&!g&&k++;}let m=[];for(let[h,T]of Object.entries(n))T.length>1&&m.push(h);let v=Q(a,n),b=Z(i,v);return {totalNodes:i.length,running:d,completed:c,failed:l,waiting:f,notStarted:t,disabled:r,unresolvedCount:p,blockedCount:k,openDependencies:[...u],cycles:b,conflictTokens:m}}function Q(s,e){let o={};for(let[a,i]of Object.entries(s)){o[a]=new Set;for(let d of chunkLODXIALE_cjs.h(i))for(let c of e[d]||[])c!==a&&o[a].add(c);}return o}function Z(s,e){let d={},c={},l=[];for(let t of s)d[t]=0,c[t]=null;function f(t){d[t]=1;for(let r of e[t]||[])if(d[r]===1){let n=[r],u=t;for(;u!==r;)n.push(u),u=c[u];n.push(r),n.reverse(),l.push(n);}else d[r]===0&&(c[r]=t,f(r));d[t]=2;}for(let t of s)d[t]===0&&f(t);return l}function B(s){let e={};for(let[o,a]of Object.entries(s)){for(let i of chunkLODXIALE_cjs.g(a))e[i]||(e[i]=[]),e[i].push(o);if(a.on)for(let i of Object.values(a.on))for(let d of i)e[d]||(e[d]=[]),e[d].includes(o)||e[d].push(o);if(a.on_failure)for(let i of a.on_failure)e[i]||(e[i]=[]),e[i].includes(o)||e[i].push(o);}return e}function V(s){let{config:e,state:o}=s,a=chunkLODXIALE_cjs.i(e),i=B(a),d=new Set([...o.availableOutputs]);for(let[n,u]of Object.entries(o.tasks))if(u.status==="completed"){let p=a[n];p&&chunkLODXIALE_cjs.g(p).forEach(k=>d.add(k));}let c=new Set;for(let n of Object.values(a))for(let u of chunkLODXIALE_cjs.h(n))c.add(u);let l=new Set,f=new Set;for(let n of c){if(d.has(n))continue;(i[n]||[]).length===0&&l.add(n);}let t=true;for(;t;){t=false;for(let[n,u]of Object.entries(a)){if(f.has(n))continue;let p=o.tasks[n];if(p?.status==="completed")continue;let k=chunkLODXIALE_cjs.l(p),v=chunkLODXIALE_cjs.h(u).some(b=>l.has(b));(k||v)&&(f.has(n)||(f.add(n),t=true));}for(let n of c){if(l.has(n)||d.has(n))continue;let u=i[n]||[],p=u.length>0&&u.every(k=>f.has(k)||chunkLODXIALE_cjs.l(o.tasks[k]));(u.length===0||p)&&(l.has(n)||(l.add(n),t=true));}}let r=[];for(let n of l){let u=i[n]||[],p;u.length===0?p="no-producer":p=u.every(m=>chunkLODXIALE_cjs.l(o.tasks[m]))?"all-producers-failed":"transitive",r.push({token:n,reason:p,producers:u});}return {tokens:r}}function ee(s){let{config:e,state:o}=s,a=chunkLODXIALE_cjs.i(e),{tokens:i}=V(s),d=new Set(i.map(l=>l.token)),c=[];for(let[l,f]of Object.entries(a)){let t=o.tasks[l];if(t?.status==="completed")continue;let n=chunkLODXIALE_cjs.h(f).filter(u=>d.has(u));n.length>0?c.push({nodeName:l,missingTokens:n}):chunkLODXIALE_cjs.l(t)&&c.push({nodeName:l,missingTokens:[]});}return {nodes:c}}function te(s,e){let o=chunkLODXIALE_cjs.i(s.config);if(!o[e])return {nodeName:e,nodes:[],tokens:[]};let a=B(o),i=new Set,d=new Set,c=new Map;function l(t){let r=o[t];if(r)for(let n of chunkLODXIALE_cjs.h(r)){let u=a[n]||[];for(let p of u)p!==e&&(d.add(n),c.has(p)||c.set(p,new Set),c.get(p).add(n),i.has(p)||(i.add(p),l(p)));}}l(e);let f=[...c.entries()].map(([t,r])=>({nodeName:t,providesTokens:[...r]}));return {nodeName:e,nodes:f,tokens:[...d]}}function ne(s,e){let o=chunkLODXIALE_cjs.i(s.config);if(!o[e])return {nodeName:e,nodes:[],tokens:[]};let a={};for(let[t,r]of Object.entries(o))for(let n of chunkLODXIALE_cjs.h(r))a[n]||(a[n]=[]),a[n].push(t);let i=new Set,d=new Set,c=new Map;function l(t){let r=o[t];if(r)for(let n of chunkLODXIALE_cjs.g(r)){let u=a[n]||[];for(let p of u)p!==e&&(d.add(n),c.has(p)||c.set(p,new Set),c.get(p).add(n),i.has(p)||(i.add(p),l(p)));}}l(e);let f=[...c.entries()].map(([t,r])=>({nodeName:t,requiresTokens:[...r]}));return {nodeName:e,nodes:f,tokens:[...d]}}function K(s){let e=[],{config:o,state:a}=s,i=chunkLODXIALE_cjs.i(o),d=Object.keys(i);for(let t of d)a.tasks[t]||e.push({severity:"error",code:"MISSING_STATE",message:`Task "${t}" exists in config but has no state entry`,tasks:[t]});for(let t of Object.keys(a.tasks))i[t]||e.push({severity:"warning",code:"ORPHAN_STATE",message:`State entry "${t}" has no corresponding task config`,tasks:[t]});for(let t of d){let r=a.tasks[t];r&&(r.status===chunkLODXIALE_cjs.a.RUNNING&&!r.startedAt&&e.push({severity:"warning",code:"RUNNING_WITHOUT_START",message:`Task "${t}" is running but has no startedAt timestamp`,tasks:[t]}),r.status===chunkLODXIALE_cjs.a.COMPLETED&&!r.completedAt&&e.push({severity:"warning",code:"COMPLETED_WITHOUT_TIMESTAMP",message:`Task "${t}" is completed but has no completedAt timestamp`,tasks:[t]}),r.status===chunkLODXIALE_cjs.a.FAILED&&(r.failedAt||e.push({severity:"warning",code:"FAILED_WITHOUT_INFO",message:`Task "${t}" is failed but has no failedAt timestamp`,tasks:[t]}),r.error||e.push({severity:"info",code:"FAILED_WITHOUT_INFO",message:`Task "${t}" is failed but has no error message`,tasks:[t]})));}let c=new Set;for(let t of d)if(a.tasks[t]?.status===chunkLODXIALE_cjs.a.COMPLETED)for(let n of chunkLODXIALE_cjs.g(i[t]))c.add(n);let l=new Set(a.availableOutputs),f=new Set;for(let t of Object.values(i)){for(let r of chunkLODXIALE_cjs.g(t))f.add(r);if(t.on)for(let r of Object.values(t.on))for(let n of r)f.add(n);if(t.on_failure)for(let r of t.on_failure)f.add(r);}for(let t of l)!c.has(t)&&!f.has(t)&&e.push({severity:"info",code:"INJECTED_TOKEN",message:`Token "${t}" is available but no task in the graph can produce it (likely injected)`,tokens:[t]});for(let t of c)l.has(t)||e.push({severity:"warning",code:"MISSING_OUTPUT",message:`Token "${t}" should be available (its producer completed) but is not in availableOutputs`,tokens:[t]});for(let t of d){let r=a.tasks[t];if(!r)continue;r.executionCount<0&&e.push({severity:"error",code:"INVALID_EXECUTION_COUNT",message:`Task "${t}" has negative execution count: ${r.executionCount}`,tasks:[t]});let n=i[t].maxExecutions;n!==void 0&&r.executionCount>n&&e.push({severity:"error",code:"EXCEEDED_MAX_EXECUTIONS",message:`Task "${t}" executed ${r.executionCount} times, exceeding maxExecutions of ${n}`,tasks:[t]});}return J(e)}function se(s){let{graph:e,handlers:o}=s,a=e.getState(),i=[],d=chunkLODXIALE_cjs.i(a.config),c=Object.keys(d),l=new Set(Object.keys(o)),f=new Set;for(let r of c){let n=d[r].taskHandlers;if(n)for(let u of n)f.add(u);}for(let r of c){let n=d[r].taskHandlers;if(n)for(let u of n)o[u]||i.push({severity:"error",code:"MISSING_HANDLER",message:`Task "${r}" references handler "${u}" but it is not in the registry`,tasks:[r]});}for(let r of l)f.has(r)||i.push({severity:"warning",code:"ORPHAN_HANDLER",message:`Handler "${r}" is registered but not referenced by any task's taskHandlers`,tasks:[r]});let t=K(a);return i.push(...t.issues),J(i)}function J(s){let e=s.filter(a=>a.severity==="error"),o=s.filter(a=>a.severity==="warning");return {valid:e.length===0,issues:s,errors:e,warnings:o}}function re(s,e){let o=s;for(let a of e)o=oe(o,a);return o}function oe(s,e){switch(e.type){case "add-node":return chunkG4XXRHL2_cjs.d(s,e.name,e.config);case "remove-node":return chunkG4XXRHL2_cjs.e(s,e.name);case "add-requires":return chunkG4XXRHL2_cjs.f(s,e.taskName,e.tokens);case "remove-requires":return chunkG4XXRHL2_cjs.g(s,e.taskName,e.tokens);case "add-provides":return chunkG4XXRHL2_cjs.h(s,e.taskName,e.tokens);case "remove-provides":return chunkG4XXRHL2_cjs.i(s,e.taskName,e.tokens);case "inject-tokens":return chunkG4XXRHL2_cjs.j(s,e.tokens);case "drain-tokens":return chunkG4XXRHL2_cjs.k(s,e.tokens);case "reset-node":return chunkG4XXRHL2_cjs.l(s,e.name);case "disable-node":return chunkG4XXRHL2_cjs.m(s,e.name);case "enable-node":return chunkG4XXRHL2_cjs.n(s,e.name);case "apply-events":return chunkG4XXRHL2_cjs.c(s,e.events);default:throw new Error(`Unknown mutation type: ${e.type}`)}}function ce(s,e){return async o=>{let{callbackToken:a}=o;return Promise.resolve(s(o)).then(i=>e()(a,i)).catch(i=>e()(a,{},[i instanceof Error?i.message:String(i)])),"task-initiated"}}function de(s,e){return async o=>{let{callbackToken:a}=o;return Promise.resolve(s(o)).then(()=>e()(a,{})).catch(()=>e()(a,{})),"task-initiated"}}function ue(s){let{command:e,cwd:o,env:a,timeoutMs:i=3e4,exitCodeMap:d,captureOutput:c=false,getResolve:l}=s;return async f=>{let{callbackToken:t,nodeId:r}=f,n=e.replace(/\$\{taskName\}/g,r);return child_process.exec(n,{cwd:o,env:a?{...process.env,...a}:void 0,timeout:i,maxBuffer:10*1024*1024},(u,p,k)=>{let m=u?.code??(u?1:0);if(m!==0&&!d?.[m]){l()(t,{},[`Command exited with code ${m}: ${k||u?.message}`]);return}let v={};c&&(v.stdout=p,v.stderr=k,v.exitCode=m),l()(t,v);}),"task-initiated"}}function X(s){let{command:e,args:o=[],cwd:a,env:i,timeoutMs:d=3e4,exitCodeMap:c,captureOutput:l=false,getResolve:f}=s;return async t=>{let{callbackToken:r,nodeId:n}=t,u=e.replace(/\$\{taskName\}/g,n),p=o.map(k=>k.replace(/\$\{taskName\}/g,n));return child_process.execFile(u,p,{cwd:a,env:i?{...process.env,...i}:void 0,timeout:d,maxBuffer:10*1024*1024,encoding:"utf8",windowsHide:true},(k,m,v)=>{let b=k?.code??(k?1:0);if(b!==0&&!c?.[b]){f()(r,{},[`Process exited with code ${b}: ${v||k?.message}`]);return}let h={};l&&(h.stdout=m,h.stderr=v,h.exitCode=b),f()(r,h);}),"task-initiated"}}function le(s){return s.endsWith(".js")||s.endsWith(".mjs")||s.endsWith(".ts")?"node":s.endsWith(".py")?"python3":(s.endsWith(".sh"),"bash")}function pe(s){let{scriptPath:e,runtime:o,args:a=[],cwd:i,timeoutMs:d=6e4,captureOutput:c=false,getResolve:l}=s,f=o??le(e),t=f==="node"?process.execPath:f;return X({command:t,args:[e,"${taskName}",...a],cwd:i,timeoutMs:d,captureOutput:c,getResolve:l})}function fe(s){let{url:e,method:o="POST",headers:a={},timeoutMs:i=3e4,failOnNon2xx:d=true,getResolve:c}=s;return async l=>{let{callbackToken:f,nodeId:t,config:r}=l,n=e.replace(/\$\{taskName\}/g,t),u=JSON.stringify({taskName:t,callbackToken:f,config:r}),p=new AbortController,k=setTimeout(()=>p.abort(),i);return fetch(n,{method:o,headers:{"Content-Type":"application/json",...a},body:u,signal:p.signal}).then(async m=>{if(clearTimeout(k),d&&!m.ok){let b=await m.text().catch(()=>"");c()(f,{},[`HTTP ${m.status}: ${b}`]);return}let v=await m.json().catch(()=>({}));c()(f,v);}).catch(m=>{clearTimeout(k),c()(f,{},[m instanceof Error?m.message:String(m)]);}),"task-initiated"}}function ge(s,e){return async o=>(s()(o.callbackToken,e??{}),"task-initiated")}function ke(s,e={}){let o,a={},i;if(!Array.isArray(s)&&"nodes"in s){let g=s;o=g.nodes,i=g.id,a=g.settings??{};}else o=s;let{sourceHandlers:d={},defaultSourceHandler:c,cardHandlers:l={},reactiveOptions:f={},graphSettings:t={},executionId:r}=e,n=new Map;for(let g of o){if(n.has(g.id))throw new Error(`Duplicate card ID: "${g.id}"`);n.set(g.id,g);}let u=e.sharedState??new Map,p={},k=new Set,m=new Map;for(let g of o)for(let H of g.provides??[{bindTo:g.id,ref:"card_data"}])k.add(H.bindTo),m.set(H.bindTo,g.id);for(let g of o){let H=g.requires??[];for(let x of H)if(!k.has(x))throw new Error(`Card "${g.id}" requires "${x}" but no card provides that token`);p[g.id]={requires:H.length>0?H:void 0,provides:(g.provides??[{bindTo:g.id,ref:"card_data"}]).map(x=>x.bindTo),taskHandlers:[g.id],description:g.meta?.title??g.id};}let v={id:i??`live-cards-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...a,...t},tasks:p},b={},h=null,T=()=>(g,H,x)=>{h.resolveCallback(g,H,x);};for(let g of o)g.source_defs&&g.source_defs.length>0?b[g.id]=me(g,d,c,u,T):b[g.id]=he(g,l,u,n,m,T);let R=chunkG4XXRHL2_cjs.u(v,{...f,handlers:b},r);return h=R,{graph:R,config:v,handlers:b,cards:n,sharedState:u}}function me(s,e,o,a,i){if(e[s.id]){let d=e[s.id];return async c=>d(c)}if(o){let d=o(s);return async c=>d(c)}return async d=>{let c={...s.card_data};return a.set(s.id,c),i()(d.callbackToken,c),"task-initiated"}}function he(s,e,o,a,i,d){if(e[s.id]){let c=e[s.id];return async l=>c(l)}return async c=>{let l={},f=s.requires??[];for(let u of f){let p=i.get(u)??u,k=o.get(p);k&&(l[u]=k[u]??k);}let t={id:s.id,card_data:{...s.card_data},requires:l,compute:s.compute};await chunkIXZG74EW_cjs.a.run(t);let r;if(s.provides&&s.provides.length>0){r={};for(let{bindTo:u,ref:p}of s.provides)r[u]=chunkIXZG74EW_cjs.a.resolve(t,p);}else r={...t.card_data,...t.computed_values};let n={...t.card_data,...t.computed_values};return o.set(s.id,n),d()(c.callbackToken,r),"task-initiated"}}exports.a=z;exports.b=V;exports.c=ee;exports.d=te;exports.e=ne;exports.f=K;exports.g=se;exports.h=re;exports.i=ce;exports.j=de;exports.k=ue;exports.l=X;exports.m=pe;exports.n=fe;exports.o=ge;exports.p=ke;//# sourceMappingURL=chunk-JAL25FGA.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-JAL25FGA.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var a=class{runs=new Map;data=new Map;async saveRunState(t,e){this.runs.set(t,{...e});}async loadRunState(t){let e=this.runs.get(t);return e?{...e}:null}async deleteRunState(t){this.runs.delete(t),this.data.delete(t);}async setData(t,e,s){this.data.has(t)||this.data.set(t,{});let n=this.data.get(t);n[e]=s;}async getData(t,e){return this.data.get(t)?.[e]}async getAllData(t){return {...this.data.get(t)??{}}}async clearData(t){this.data.delete(t);}async listRuns(){return Array.from(this.runs.keys())}clear(){this.runs.clear(),this.data.clear();}};export{a};//# sourceMappingURL=chunk-JM5EKT57.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-JM5EKT57.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {createRequire}from'module';var y=createRequire(import.meta.url),u=y("./jsonata-sync.cjs"),p=u;function c(r,t){if(!t||!r)return;let s=t.split("."),e=r;for(let n=0;n<s.length;n++){if(e==null)return;e=e[s[n]];}return e}function l(r,t,s){let e=t.split("."),n=r;for(let o=0;o<e.length-1;o++)(n[e[o]]==null||typeof n[e[o]]!="object")&&(n[e[o]]={}),n=n[e[o]];n[e[e.length-1]]=s;}async function m(r,t){if(!r?.compute?.length)return r;r.card_data||(r.card_data={}),r.computed_values={},r._sourcesData=t?.sourcesData??{};let s=r.requires??{},e={card_data:r.card_data,requires:s,expects_data:s,fetched_sources:r._sourcesData,data:r.computed_values,computed_values:r.computed_values};for(let n of r.compute)try{let o=await u(n.expr).evaluate(e);l(r.computed_values,n.bindTo,o),e.computed_values=r.computed_values;}catch{}return r}function g(r,t){if(!r?.compute?.length)return {ok:true,node:r};r.card_data||(r.card_data={}),r.computed_values={},r._sourcesData=t?.sourcesData??{};let s=r.requires??{},e={card_data:r.card_data,requires:s,expects_data:s,fetched_sources:r._sourcesData,data:r.computed_values,computed_values:r.computed_values},n=[];for(let o of r.compute)try{let a=p(o.expr).evaluate(e);l(r.computed_values,o.bindTo,a),e.computed_values=r.computed_values;}catch(a){let i=a instanceof Error?a.message:String(a);n.push({bindTo:o.bindTo,error:i});}return n.length>0?{ok:true,node:r,errors:n}:{ok:true,node:r}}async function b(r,t,s){let e={...s??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return u(r).evaluate(e)}function _(r,t){return t.startsWith("fetched_sources.")?c(r._sourcesData??{},t.slice(16)):c(r,t)}var d=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),v=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function h(r){let t=[];if(!r||typeof r!="object"||Array.isArray(r))return {ok:false,errors:["Node must be a non-null object"]};let s=r;(typeof s.id!="string"||!s.id)&&t.push("id: required, must be a non-empty string");for(let e of Object.keys(s))v.has(e)||t.push(`Unknown top-level key: "${e}"`);if((s.card_data==null||typeof s.card_data!="object"||Array.isArray(s.card_data))&&t.push("card_data: required, must be an object"),s.meta!=null)if(typeof s.meta!="object"||Array.isArray(s.meta))t.push("meta: must be an object");else {let e=s.meta;e.title!=null&&typeof e.title!="string"&&t.push("meta.title: must be a string"),e.tags!=null&&!Array.isArray(e.tags)&&t.push("meta.tags: must be an array");}if(s.requires!=null&&!Array.isArray(s.requires)&&t.push("requires: must be an array of strings"),s.provides!=null&&(Array.isArray(s.provides)?s.provides.forEach((e,n)=>{if(!e||typeof e!="object"||Array.isArray(e))t.push(`provides[${n}]: must be an object with bindTo and ref`);else {let o=e;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`provides[${n}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&t.push(`provides[${n}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),s.compute!=null&&(Array.isArray(s.compute)?s.compute.forEach((e,n)=>{if(!e||typeof e!="object"||Array.isArray(e))t.push(`compute[${n}]: must be a compute step object`);else {let o=e;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`compute[${n}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&t.push(`compute[${n}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),s.source_defs!=null)if(!Array.isArray(s.source_defs))t.push("source_defs: must be an array");else {let e=new Set,n=new Set;s.source_defs.forEach((o,a)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${a}]: must be an object`);else {let i=o;typeof i.bindTo!="string"||!i.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(e.has(i.bindTo)&&t.push(`source_defs[${a}]: bindTo "${i.bindTo}" is not unique across source_defs`),e.add(i.bindTo)),typeof i.outputFile!="string"||!i.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(n.has(i.outputFile)&&t.push(`source_defs[${a}]: outputFile "${i.outputFile}" is not unique across source_defs`),n.add(i.outputFile)),i.optionalForCompletionGating!=null&&typeof i.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${a}]: optionalForCompletionGating must be a boolean`);}});}if(s.view!=null)if(typeof s.view!="object"||Array.isArray(s.view))t.push("view: must be an object");else {let e=s.view;!Array.isArray(e.elements)||e.elements.length===0?t.push("view.elements: required, must be a non-empty array"):e.elements.forEach((n,o)=>{if(!n||typeof n!="object"){t.push(`view.elements[${o}]: must be an object`);return}!n.kind||typeof n.kind!="string"?t.push(`view.elements[${o}].kind: required, must be a string`):d.has(n.kind)||t.push(`view.elements[${o}].kind: unknown kind "${n.kind}". Valid: ${[...d].join(", ")}`),n.data!=null&&(typeof n.data!="object"||Array.isArray(n.data))&&t.push(`view.elements[${o}].data: must be an object`);}),e.layout!=null&&(typeof e.layout!="object"||Array.isArray(e.layout))&&t.push("view.layout: must be an object"),e.features!=null&&(typeof e.features!="object"||Array.isArray(e.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function k(r,t){if(!r||r.length===0)return [];let s={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(r.map(async e=>{let n={};if(e.projections&&typeof e.projections=="object"&&!Array.isArray(e.projections)){for(let[o,a]of Object.entries(e.projections))if(typeof a=="string"&&a.trim().length>0)try{n[o]=await u(a).evaluate(s);}catch{n[o]=void 0;}}return {...e,_projections:n}}))}function w(r,t){if(!r||r.length===0)return [];let s={card_data:t.card_data??{},requires:t.requires??{}};return r.map(e=>{let n={};if(e.projections&&typeof e.projections=="object"&&!Array.isArray(e.projections)){for(let[o,a]of Object.entries(e.projections))if(typeof a=="string"&&a.trim().length>0)try{n[o]=p(a).evaluate(s);}catch{n[o]=void 0;}}return {...e,_projections:n}})}var j={run:m,runSync:g,eval:b,resolve:_,validate:h,enrichSources:k,enrichSourcesSync:w},C=j;export{j as a,C as b};//# sourceMappingURL=chunk-JMDHDY6M.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-JMDHDY6M.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function y(d){function s(a){return {status:"success",data:a}}function t(a){return {status:"fail",error:a}}function o(a){return {status:"error",error:a instanceof Error?a.message:String(a)}}function m(a){if(Array.isArray(a))return a;if(a&&typeof a=="object"){let r=a;return Array.isArray(r.files)?r.files:[a]}return null}return {get(a){try{let r=a.params?.id;if(r){let n=d.readCard(r);return n?s({cards:[n]}):t(`card "${r}" not found`)}return s({cards:d.readAllCards()})}catch(r){return o(r)}},set(a){try{let r=a.body;if(r==null)return t("set requires a body (card object or array of cards)");let n=Array.isArray(r)?r:[r];for(let e of n){if(typeof e.id!="string")return t("each card must have a string `id` field");d.writeCard(e.id,e);}return s({count:n.length})}catch(r){return o(r)}},del(a){try{let r=a.body?.ids??[],n=a.params?.id,e=n?[...r,n]:r;if(e.length===0)return t("del requires body.ids (string[]) or params.id");for(let i of e)d.removeCard(i);return s({count:e.length})}catch(r){return o(r)}},patch(a){try{let r=a.params?.id,n=a.params?.path;if(!r)return t("patch requires params.id");if(!n)return t("patch requires params.path");let e=a.body,i=e&&Object.prototype.hasOwnProperty.call(e,"value")?e.value:a.body;return d.patchCard(r,n,i),s({count:1})}catch(r){return o(r)}},appendFiles(a){try{let r=a.params?.id;if(!r)return t("appendFiles requires params.id");let n=d.readCard(r);if(!n)return t(`card "${r}" not found`);let e=m(a.body);if(!e||e.length===0)return t("appendFiles requires a file metadata object, array, or body.files array");let i=n.card_data&&typeof n.card_data=="object"&&!Array.isArray(n.card_data)?n.card_data:{},u=Array.isArray(i.files)?i.files:[],l=[...u,...e],f=e.map((p,C)=>({idx:u.length+C,entry:p})),c=this.patch({params:{id:r,path:"card_data.files"},body:{value:l}});return c.status!=="success"?c:s({files_added:f})}catch(r){return o(r)}}}}export{y as a};//# sourceMappingURL=chunk-KBELAKIY.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-KBELAKIY.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';function i(s){return btoa(s).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function a(s){return atob(s.replace(/-/g,"+").replace(/_/g,"/"))}var o=class{constructor(t){this.kv=t;}kv;stateKey(t){return `state_${i(t)}`}dataPrefix(t){return `data_${i(t)}_`}dataKey(t,e){return `${this.dataPrefix(t)}${i(e)}`}async saveRunState(t,e){this.kv.write(this.stateKey(t),e);}async loadRunState(t){let e=this.kv.read(this.stateKey(t));return e!=null&&typeof e=="object"?e:null}async deleteRunState(t){this.kv.delete(this.stateKey(t));for(let e of this.kv.listKeys(this.dataPrefix(t)))this.kv.delete(e);}async setData(t,e,r){this.kv.write(this.dataKey(t,e),r);}async getData(t,e){return this.kv.read(this.dataKey(t,e))}async getAllData(t){let e=this.dataPrefix(t),r={};for(let n of this.kv.listKeys(e))r[a(n.slice(e.length))]=this.kv.read(n);return r}async clearData(t){for(let e of this.kv.listKeys(this.dataPrefix(t)))this.kv.delete(e);}async listRuns(){return this.kv.listKeys("state_").map(t=>a(t.slice(6)))}};
|
|
2
|
+
exports.a=o;//# sourceMappingURL=chunk-KHJABJ45.cjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-KHJABJ45.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';async function y(u,f){let{concurrency:B=5,processor:w,onItemComplete:I,onItemError:R,onProgress:x,signal:T}=f,t=u.length,a=new Array(t),m=Date.now(),r=0,o=0,l=0;function g(c){let n=r+o;return {completed:r,failed:o,active:c,pending:t-n-c,total:t,percent:t===0?100:Math.round(n/t*100),elapsedMs:Date.now()-m}}return t===0?{items:[],completed:0,failed:0,total:0,durationMs:0}:new Promise(c=>{let n=0;function d(){for(;n<B&&l<t;){if(T?.aborted){for(;l<t;){let e=l++;a[e]={item:u[e],index:e,status:"failed",error:new Error("Batch aborted"),durationMs:0},o++;}n===0&&r+o===t&&c({items:a,completed:r,failed:o,total:t,durationMs:Date.now()-m});break}let s=l++,i=u[s];n++;let h=Date.now();w(i,s).then(e=>{a[s]={item:i,index:s,status:"completed",result:e,durationMs:Date.now()-h},r++,I?.(i,e,s);}).catch(e=>{let p=e instanceof Error?e:new Error(String(e));a[s]={item:i,index:s,status:"failed",error:p,durationMs:Date.now()-h},o++,R?.(i,p,s);}).finally(()=>{n--,x?.(g(n)),r+o===t?c({items:a,completed:r,failed:o,total:t,durationMs:Date.now()-m}):d();});}}d();})}exports.a=y;//# sourceMappingURL=chunk-KLRUISRY.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-KLRUISRY.cjs.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use strict';var chunkWOALA3V5_cjs=require('./chunk-WOALA3V5.cjs'),chunkH5HBXPOI_cjs=require('./chunk-H5HBXPOI.cjs'),chunkOEFTOO47_cjs=require('./chunk-OEFTOO47.cjs'),chunkSFVO2LB2_cjs=require('./chunk-SFVO2LB2.cjs'),chunkGJJMEAVN_cjs=require('./chunk-GJJMEAVN.cjs'),chunkYMEIPKLW_cjs=require('./chunk-YMEIPKLW.cjs'),chunkGYQXDNNI_cjs=require('./chunk-GYQXDNNI.cjs');function Ie(){return {status:null,computedValues:{},dataObjects:{},cards:{}}}function Nt(c){if(!c||typeof c!="object")return false;let l=c.summary;return !l||typeof l!="object"?false:Number(l.card_count||0)>0}function Dt(c,l){if(!l||typeof l!="object")return;let y=l;if(y.kind==="notification-batch"&&Array.isArray(y.notifications)){for(let _ of y.notifications)Dt(c,_);return}y.kind==="status"&&Nt(y.status)&&(c.status=y.status),y.kind==="computed_values"&&y.cardId&&(c.computedValues[y.cardId]=y.values),y.kind==="data_object"&&y.key&&(c.dataObjects[y.key]=y.payload),y.kind==="card_refreshed"&&y.cardId&&(c.cards[y.cardId]=y.card),y.kind==="card_removed"&&y.cardId&&(delete c.cards[y.cardId],delete c.computedValues[y.cardId]);}function nt(c){return typeof c.journalStorage=="function"}function Oe(c){return typeof c.whatToRun=="string"?c.whatToRun.startsWith("b64:")?chunkSFVO2LB2_cjs.b(c.whatToRun).value:c.whatToRun:c.whatToRun.value}function V(c){return c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function vt(c){let l=c.reduce((h,x)=>h+x.length,0),y=new Uint8Array(l),_=0;for(let h of c)y.set(h,_),_+=h.length;return y}function E(c,...l){for(let y of l)if(typeof c[y]=="string")return String(c[y]);return ""}function at(c,...l){for(let y of l)if(c[y]!==void 0)return Number(c[y])}function lt(c,...l){for(let y of l){let _=c[y];if(_&&typeof _=="object"&&!Array.isArray(_))return _}return {}}function st(c,l,...y){for(let _ of y){let h=c[_];if(h&&typeof h=="object"&&!Array.isArray(h))return h}throw Object.assign(new Error(`MCP tool requires ${l}`),{statusCode:400})}function _t(c,l,...y){for(let _ of y){let h=c[_];if(h!==void 0){let x=Number(h);if(Number.isFinite(x))return x}}throw Object.assign(new Error(`MCP tool requires ${l}`),{statusCode:400})}function xe(c){if(Array.isArray(c.bytes))return new Uint8Array(c.bytes.map(l=>Math.max(0,Math.min(255,Number(l)||0))));if(typeof c.text=="string")return new TextEncoder().encode(c.text);if(typeof c.base64=="string"){let l=String(c.base64).replace(/-/g,"+").replace(/_/g,"/"),y=l+"=".repeat((4-l.length%4)%4),_=atob(y);return Uint8Array.from(_,h=>h.charCodeAt(0))}return null}function Ut(c,l){return l?{...c,...l.pollIntervalMs!=null?{pollIntervalMs:l.pollIntervalMs}:{},...l.visibilityMs!=null?{visibilityMs:l.visibilityMs}:{},...l.concurrency!=null?{concurrency:l.concurrency}:{},...l.maxAttempts!=null?{maxAttempts:l.maxAttempts}:{}}:c}function Pe(c,l,y,_){return {id:c,async lease(h){return (await Promise.resolve(l.leaseRequests(h))).map(I=>({id:I.messageId,attempt:I.attempt,message:I.request,ack:()=>Promise.resolve(l.ackRequest(I.messageId,I.leaseToken)),nack:O=>Promise.resolve(l.nackRequest(I.messageId,I.leaseToken,O))}))},async handle(h){await y(h.args,h);},onError:_?(h,x)=>_(h,x.attempt,x.message):void 0}}function gr(c,l,y,_){return {id:c,async lease(h){return (await Promise.resolve(l.lease(h))).map(I=>({id:I.id,attempt:I.attempt,message:I.body,ack:()=>Promise.resolve(l.ack(I.id,I.leaseToken)),nack:O=>Promise.resolve(l.nack(I.id,I.leaseToken,O))}))},async handle(){await y();},onError:_?(h,x)=>_(h,x.attempt):void 0}}function kr(c){let l=c.logger??{info(){},warn(){},error(){}},y=c.boardAdapter,_=c.runtime.queueLaneTuning??{},h=y.processAccumulatedStore(),x=y.chatAgentStore(),I=[];if(I.push(Ut(gr("process-accumulated",h,async()=>{let O=await c.runtime.processAccumulatedLane();if(O.status!=="success")throw new Error(O.error||`processAccumulatedLane returned ${O.status}`)},(O,P)=>{l.error(`[board-server] queued process-accumulated failed for ${c.boardId} (attempt ${P}): ${String(O&&O.message||O)}`);}),_.processAccumulated)),I.push(Ut(Pe("chat-agent",x,async(O,P)=>{await c.runtime.handleChatAgentRequest(P);},(O,P,W)=>{let ot=typeof W.args?.cardId=="string"?W.args.cardId:"";l.error(`[board-server] queued chat-agent failed for ${c.boardId}${ot?`/${ot}`:""} (attempt ${P}): ${String(O&&O.message||O)}`);}),_.chatAgent)),c.executeTaskExecutorRequest){let O=y.boardWorkerStore();I.push(Ut(Pe("task-executor",O,c.executeTaskExecutorRequest,(P,W)=>{l.error(`[board-server] queued board-worker failed for ${c.boardId} (attempt ${W}): ${String(P&&P.message||P)}`);}),_.taskExecutor));}return chunkWOALA3V5_cjs.f(I)}var Te={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},je="chat-handler-flow-queue";function qr(c){let l=String(c.apiBasePath||"/api/board").replace(/\/$/,""),y={...Te,...c.corsHeaders||{}},_=c.queueLaneTuning??{},h=c.boardId||"",x=c.logger||{info:console.log,warn:console.warn,error:console.error},I=c.invocationAdapter,O=c.chatFlowRunner||null,P=c.chatStorage??chunkWOALA3V5_cjs.b(),W=chunkGYQXDNNI_cjs.a(P),ot=c.notificationTransport||null,z=c.serverUrl||null,mt=c.executionExtra||{},Bt=c.onSseClientConnected,It=c.onSseClientDisconnected,Ot=c.onChannelSubscribed,B=c.onChannelUnsubscribed,v=new Map,F=new Map,M=new Map,D=null;function Z(t){function e(u){if(Array.isArray(u))return u;if(u&&typeof u=="object"){let b=u;return Array.isArray(b.files)?b.files:[u]}return null}function r(u){return {async get(b){return u.get(b)},async set(b){return u.set(b)},async del(b){return u.del(b)},async patch(b){return u.patch(b)},async appendFiles(b){return u.appendFiles(b)}}}function n(u){function b(i){return {status:"success",data:i}}function A(i){return {status:"fail",error:i}}function R(i){return {status:"error",error:i instanceof Error?i.message:String(i)}}return {async get(i){try{let o=i.params?.id;if(o){let g=await u.readCard(o);return g?b({cards:[g]}):A(`card "${o}" not found`)}return b({cards:await u.readAllCards()})}catch(o){return R(o)}},async set(i){try{let o=i.body;if(o==null)return A("set requires a body (card object or array of cards)");let g=Array.isArray(o)?o:[o];for(let f of g){if(typeof f.id!="string")return A("each card must have a string `id` field");await u.writeCard(f.id,f);}return b({count:g.length})}catch(o){return R(o)}},async del(i){try{let o=i.body?.ids??[],g=i.params?.id,f=g?[...o,g]:o;if(f.length===0)return A("del requires body.ids (string[]) or params.id");for(let k of f)await u.removeCard(k);return b({count:f.length})}catch(o){return R(o)}},async patch(i){try{let o=i.params?.id,g=i.params?.path;if(!o)return A("patch requires params.id");if(!g)return A("patch requires params.path");let f=i.body,k=f&&Object.prototype.hasOwnProperty.call(f,"value")?f.value:i.body;return await u.patchCard(o,g,k),b({count:1})}catch(o){return R(o)}},async appendFiles(i){try{let o=i.params?.id;if(!o)return A("appendFiles requires params.id");let g=await u.readCard(o);if(!g)return A(`card "${o}" not found`);let f=e(i.body);if(!f||f.length===0)return A("appendFiles requires a file metadata object, array, or body.files array");let k=g.card_data&&typeof g.card_data=="object"&&!Array.isArray(g.card_data)?g.card_data:{},$=Array.isArray(k.files)?k.files:[],T=[...$,...f];return await u.patchCard(o,"card_data.files",T),b({files_added:f.map((N,rt)=>({idx:$.length+rt,entry:N}))})}catch(o){return R(o)}}}}let a=nt(t.boardAdapter)?chunkH5HBXPOI_cjs.j(t.baseRef,t.boardAdapter):chunkOEFTOO47_cjs.y(t.baseRef,t.boardAdapter),s=t.nonCoreAdapter??(!nt(t.boardAdapter)&&ft(t.boardAdapter)?t.boardAdapter:null),d=s?chunkOEFTOO47_cjs.z(t.baseRef,s):null,p,m=nt(t.boardAdapter)?(()=>{let u=chunkH5HBXPOI_cjs.d(chunkH5HBXPOI_cjs.c(chunkH5HBXPOI_cjs.b(t.boardAdapter.kvStorageForRef(t.cardStoreRef)),t.boardAdapter.hashFn),x.warn),b=n(u);return p={get(A){return b.get(A)},set(A){return b.set(A)}},b})():(()=>{let u=t.boardAdapter.kvStorageForRef(t.cardStoreRef),A=chunkYMEIPKLW_cjs.a(chunkOEFTOO47_cjs.l({readIndex:()=>u.read("_index"),writeIndex:R=>u.write("_index",R),readCard:R=>u.read(R),writeCard:(R,i)=>(u.write(R,i),R),removeCard:R=>{u.delete(R);},cardExists:R=>u.read(R)!==null,defaultCardKey:R=>R},x.warn));return p=A,r(A)})(),C=t.artifactsAdapter||t.boardAdapter,S=t.filesArtifactsStore??null,q=S?{putBytes(u,b,A){S.putBytes(u,b,A);},getBytes(u){return S.getBytes(u)},listKeys(u){return S.list(u).map(b=>b.key)}}:null;if(!q&&!nt(C)){let u=t.artifactsAdapter?C.blobStorage(""):C.blobStorage("files"),b=chunkWOALA3V5_cjs.c(u);q={putBytes(A,R,i){b.putBytes(A,R,i);},getBytes(A){return b.getBytes(A)},listKeys(A){return b.list(A).map(R=>R.key)}};}else if(!q&&nt(C)){let u=t.artifactsAdapter?C.blobStorage(""):C.blobStorage("files");q={async putBytes(b,A){if(u.writeBytes){await u.writeBytes(b,A);return}let R=JSON.stringify({__kind:"bytes-array",data:[...A]});await u.write(b,R);},async getBytes(b){if(u.readBytes){let R=await u.readBytes(b);if(R!==null)return R}let A=await u.read(b);if(A===null)return null;try{let R=JSON.parse(A);if(R&&R.__kind==="bytes-array"&&Array.isArray(R.data))return new Uint8Array(R.data)}catch{}return new TextEncoder().encode(A)},async listKeys(b){return await u.listKeys(b)}};}let L={async init(u){return a.init(u)},async status(u){return a.status(u)},async getConfig(u){return a.getConfig(u)},async getAllOutputsDataObjects(u){return a.getAllOutputsDataObjects(u)},async getAllOutputsComputedValues(u){return a.getAllOutputsComputedValues(u)},async getOutputsFetchedSources(u){return a.getOutputsFetchedSources(u)},async upsertCard(u){return a.upsertCard(u)},async removeCard(u){return a.removeCard(u)},async cardRefreshedNotify(u){return a.cardRefreshedNotify(u)},async sourceDataFetched(u){return a.sourceDataFetched(u)},async sourceDataFetchFailure(u){return a.sourceDataFetchFailure(u)}};return {label:t.label,board:a,nonCore:d,publicCardStore:p,boardOps:L,cardStoreOps:m,get filesArtifacts(){return q},boardAdapter:t.boardAdapter,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,artifactsStoreRef:t.artifactsStoreRef,scratchStoreRef:t.scratchStoreRef,archiveStoreRef:t.archiveStoreRef,notifyRef:t.notifyRef,taskExecutorRef:t.taskExecutorRef,chatHandlerRef:t.chatHandlerRef,chatHandlerFlow:t.chatHandlerFlow,inferenceAdapterRef:t.inferenceAdapterRef,notification:Ie(),notificationTeardown:null,initialized:false,cardsBootstrapped:false}}let j=c.boards.map(Z),U=new Map;function X(t){return U.get(t)??0}function ft(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function yt(t){let e=j[X(t)];return {files:e?e.filesArtifacts:null}}function Y(){return chunkWOALA3V5_cjs.e()}function tt(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}async function pt(t){if(!t||t.notificationTeardown||!ot||!t.notifyRef)return;let e=await ot.subscribe(t.notifyRef,r=>{Dt(t.notification,r);let n=r.kind==="notification-batch"?r.notifications:[r];le(n);});t.notificationTeardown=e;}async function Ee(t){if(!t||t.initialized)return;let e={cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef};t.artifactsStoreRef&&(e.artifactsStoreRef=t.artifactsStoreRef),t.scratchStoreRef&&(e.scratchStoreRef=t.scratchStoreRef),t.archiveStoreRef&&(e.archiveStoreRef=t.archiveStoreRef);let r={};t.taskExecutorRef&&(r["task-executor-ref"]=t.taskExecutorRef),t.chatHandlerFlow!==void 0&&(r["chat-handler-flow"]=t.chatHandlerFlow),t.inferenceAdapterRef&&(r["inference-adapter-ref"]=t.inferenceAdapterRef);let n=await t.boardOps.init({params:e,body:r});if(n.status!=="success")throw Object.assign(new Error(n.error||`init failed for ${t.label}`),{statusCode:500});if(await pt(t),!t.chatHandlerFlow&&t.chatHandlerRef&&I.describe)try{let a=await I.describe(t.chatHandlerRef);a&&a.kind!=="chat-handler"?x.warn(`[init] chat-handler describe returned kind="${a.kind}", expected "chat-handler" for ${t.label}`):a&&x.info(`[init] chat-handler validated: ${a.name} (protocol ${a.protocolVersion}) for ${t.label}`);}catch(a){x.warn(`[init] chat-handler describe failed for ${t.label}: ${a?.message||String(a)}`);}t.initialized=true;}async function wt(t){if(!t.boardAdapter.publishBoardChangeNotifications)return;let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&Nt(r.data)&&e.push({kind:"status",status:r.data});let n=await t.boardOps.getAllOutputsDataObjects({});if(n.status==="success"&&n.data!=null)for(let[s,d]of Object.entries(n.data))s&&e.push({kind:"data_object",key:s,payload:d});let a=await t.boardOps.getAllOutputsComputedValues({});if(a.status==="success"&&a.data!=null)for(let[s,d]of Object.entries(a.data))s&&e.push({kind:"computed_values",cardId:s,values:d});e.length>0&&t.boardAdapter.publishBoardChangeNotifications(e);}async function Ht(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),n=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let a of n)typeof a.id=="string"&&(U.set(a.id,e),await t.boardOps.upsertCard({params:{cardId:a.id}}));t.cardsBootstrapped=true;}async function ct(){for(let t of j)await Ee(t);}async function H(){await ct();for(let t=0;t<j.length;t++)await wt(j[t]),await Ht(j[t],t),await wt(j[t]);}async function xt(t=false){t||await ct();for(let e of j){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}async function $e(){return await ct(),xt(true)}function Q(t){return j[X(t)]??null}async function dt(t){let e=Q(t);if(!e)return null;let r=await e.cardStoreOps.get({params:{id:t}});if(r.status!=="success")return null;let n=Array.isArray(r.data?.cards)?r.data.cards:[];return n.length>0?n[0]:null}async function Qt(){let t=async r=>{if(!r)return [];let n=await r.cardStoreOps.get({});return n.status!=="success"||!Array.isArray(n.data?.cards)?[]:n.data.cards},e=[];for(let r of j)e.push(...await t(r));return e}function J(){return j[0]??null}function Fe(){return {async status(){let t=await Zt();return t==null?{status:"fail",error:"Board status is unavailable"}:{status:"success",data:t}},async getOutputsDataObject(t){let e=t?.params?.key;return e?{status:"success",data:(await Yt())[e]}:{status:"fail",error:"getOutputsDataObject requires params.key"}},async getOutputsComputedValues(t){let e=t?.params?.key;return e?{status:"success",data:(await Xt())[e]?.computed_values}:{status:"fail",error:"getOutputsComputedValues requires params.key"}},async getOutputsFetchedSources(t){let e=t?.params?.key;if(!e)return {status:"fail",error:"getOutputsFetchedSources requires params.key"};let r=Q(e)??J();return r?r.boardOps.getOutputsFetchedSources({params:{key:e}}):{status:"fail",error:"Board context is unavailable"}},async removeCard(t){let e=t?.params?.id;if(!e)return {status:"fail",error:"removeCard requires params.id"};let r=Q(e)??J();return r?r.boardOps.removeCard({params:{id:e}}):{status:"fail",error:"Board context is unavailable"}},async cardRefreshedNotify(t){let e=t?.params?.cardId;if(!e)return {status:"fail",error:"cardRefreshedNotify requires params.cardId"};let r=Q(e)??J();return r?r.boardOps.cardRefreshedNotify({params:{cardId:e}}):{status:"fail",error:"Board context is unavailable"}},async upsertCard(t){let e=t?.params?.cardId;if(!e)return {status:"fail",error:"upsertCard requires params.cardId"};let r=Q(e)??J();if(!r)return {status:"fail",error:"Board context is unavailable"};let n=await r.boardOps.upsertCard({params:{cardId:e,restart:t.params.restart===true}});if(n.status!=="success")return n;if(nt(r.boardAdapter)){let a=await xt(true);if(a.status!=="success")return a}return n}}}function qe(){let t=()=>{let e=J();if(!e?.nonCore)throw new Error("Board non-core adapter is not configured for MCP preflight/discovery tools");return e.nonCore};return {describeTaskExecutorCapabilities(e){return t().describeTaskExecutorCapabilities(e)},validateCardPreflight(e){return t().validateCardPreflight(e)},evalCardCompute(e){return t().evalCardCompute(e)},probeSourcePreflight(e){return t().probeSourcePreflight(e)},runSourcePreflight(e){return t().runSourcePreflight(e)},simulateCardCycle(e){return t().simulateCardCycle(e)}}}function bt(){return {async get(t){let e=typeof t.params?.id=="string"?t.params.id:void 0;if(e){let r=await dt(e);return r?{status:"success",data:{cards:[r]}}:{status:"success",data:{cards:[]}}}return {status:"success",data:{cards:await Qt()}}},async set(t){let e=t.body;if(e==null)return {status:"fail",error:"set requires a body (card object or array of cards)"};let r=Array.isArray(e)?e:[e];for(let n of r){let a=n,s=typeof a.id=="string"?a.id:"";if(!s)return {status:"fail",error:"each card must have a string `id` field"};let d=U.get(s)??0,p=j[d]??J();if(!p)return {status:"fail",error:"Board context is unavailable"};let m=await p.cardStoreOps.set({body:a});if(m.status!=="success")return m;U.set(s,d);}return {status:"success",data:{count:r.length}}},async del(t){let e=[t.params?.id,...t.body?.ids??[]].filter(r=>typeof r=="string"&&!!r);if(e.length===0)return {status:"fail",error:"del requires body.ids (string[]) or params.id"};for(let r of e){let n=Q(r)??J();if(!n)return {status:"fail",error:"Board context is unavailable"};let a=await n.cardStoreOps.del({params:{id:r}});if(a.status!=="success")return a;U.delete(r);}return {status:"success",data:{count:e.length}}},async patch(t){let e=typeof t.params?.id=="string"?t.params.id:void 0,r=typeof t.params?.path=="string"?t.params.path:void 0;if(!e||!r)return {status:"fail",error:"patch requires params.id and params.path"};let n=Q(e)??J();return n?n.cardStoreOps.patch(t):{status:"fail",error:"Board context is unavailable"}},async appendFiles(t){let e=typeof t.params?.id=="string"?t.params.id:void 0;if(!e)return {status:"fail",error:"appendFiles requires params.id"};let r=Q(e)??J();return r?r.cardStoreOps.appendFiles(t):{status:"fail",error:"Board context is unavailable"}}}}function et(){return chunkGJJMEAVN_cjs.a({board:Fe(),nonCore:qe(),cardStore:bt(),chatStore:W,uploadCardFile({cardId:t,fileName:e,contentType:r,bytes:n}){return Tt(t,e,r,n,{inChat:false})},buildFileDownloadUrl({cardId:t,fileIdx:e,storedName:r}){let n=`${z||""}${l}/cards/${encodeURIComponent(t)}/files/${e}`;return r?`${n}?sn=${encodeURIComponent(r)}`:n},readFetchedSourceJsonByRef({cardId:t,ref:e}){let r=Q(t)??J();if(!r||nt(r.boardAdapter))return null;let a=r.boardAdapter.resolveBlob(chunkSFVO2LB2_cjs.b(e)).trim();return a?JSON.parse(a):null}})}function Vt(t,e){let r=E(t,"board_id"),n=E(t,"card_id");if(!r)throw Object.assign(new Error("MCP tool requires board_id"),{statusCode:400});if(!n)throw Object.assign(new Error("MCP tool requires card_id"),{statusCode:400});if(r!==h)throw Object.assign(new Error(`Unknown board_id: ${r}`),{statusCode:400});return et().setChatProcessing({cardId:n,active:e}),{status:"success",data:{boardId:h,cardId:n,active:e}}}function ht(t){let e=E(t,"board_id"),r=E(t,"card_id");if(!e)throw Object.assign(new Error("MCP tool requires board_id"),{statusCode:400});if(!r)throw Object.assign(new Error("MCP tool requires card_id"),{statusCode:400});if(e!==h)throw Object.assign(new Error(`Unknown board_id: ${e}`),{statusCode:400});return {cardId:r}}function Wt(t,e){if(t?.status==="success")return Object.prototype.hasOwnProperty.call(t,"data")?t.data:void 0;throw t?.status==="fail"||t?.status==="error"?Object.assign(new Error(t.error||`${e} failed`),{statusCode:400}):Object.assign(new Error(`${e} returned an unexpected response`),{statusCode:500})}async function zt(t,e){return Wt(await t,e)}function Jt(t){let e=E(t,"key");if(!e)throw Object.assign(new Error("MCP tool requires key"),{statusCode:400});let r=e.split(".");if(!(r.length>=2&&r[0]==="chat"&&r.every(a=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(a))))throw Object.assign(new Error("MCP tool only supports card meta keys under chat.*"),{statusCode:400});return e}function Kt(t,e){let r=t.meta;for(let n of e.split(".")){if(!r||typeof r!="object"||Array.isArray(r)||!Object.prototype.hasOwnProperty.call(r,n))return {exists:false,value:null};r=r[n];}return {exists:true,value:r}}function Me(t){let{cardId:e}=ht(t),r=et().getChatProcessing({cardId:e});return {status:"success",data:{boardId:h,cardId:e,active:r.active}}}async function Le(t){let{cardId:e}=ht(t),r=Jt(t);if(!Object.prototype.hasOwnProperty.call(t,"value"))throw Object.assign(new Error("MCP tool requires value"),{statusCode:400});if(r.split(".").includes("__visible_controlplane_only")){let n=await zt(bt().get({params:{id:e}}),"cardStore.get"),a=Array.isArray(n.cards)&&n.cards.length>0&&typeof n.cards[0]=="object"&&!Array.isArray(n.cards[0])?n.cards[0]:null,s=a?Kt(a,"__visible_controlplane_only").value:void 0;if(t.value!==s)throw Object.assign(new Error("MCP tool cannot change the reserved meta flag __visible_controlplane_only"),{statusCode:403});return {status:"success",data:{boardId:h,cardId:e,key:r}}}return Wt(await bt().patch({params:{id:e,path:`meta.${r}`},body:{value:t.value}}),"cardStore.patch"),{status:"success",data:{boardId:h,cardId:e,key:r}}}async function Ne(t){let{cardId:e}=ht(t),r=Jt(t),n=await zt(bt().get({params:{id:e}}),"cardStore.get"),a=Array.isArray(n.cards)&&n.cards.length>0&&n.cards[0]&&typeof n.cards[0]=="object"&&!Array.isArray(n.cards[0])?n.cards[0]:null;if(!a)throw Object.assign(new Error(`Card "${e}" not found`),{statusCode:404});let s=Kt(a,r);return {status:"success",data:{boardId:h,cardId:e,key:r,exists:s.exists,value:s.value}}}function De(t){return {"discover.source-kinds":()=>t.discoverSourceKinds(),"inspect.board-runtime-status":()=>t.inspectBoardRuntimeStatus(),"inspect.card-definition-and-runtime":e=>t.inspectCardDefinitionAndRuntime({cardId:E(e,"card_id")}),"inspect.chat-messages-on-cards":e=>{let r=at(e,"tail_turns"),n=at(e,"tail"),a=E(e,"turn_id"),s=e.all_turns===true,d=E(e,"tail_turns_before_id");return t.inspectChatMessagesOnCards({cardId:E(e,"card_id"),...r!==void 0?{lastUserTurns:r}:{},...n!==void 0?{tail:n}:{},...a?{turnId:a}:{},...s?{allTurns:true}:{},...d?{tailTurnsBeforeId:d}:{}})},"inspect.file-contents":e=>t.inspectFileContents({cardId:E(e,"card_id"),fileIdx:Number(at(e,"file_idx"))}),"preflight.validate-candidate-card-definition":e=>t.preflightValidateCandidateCardDefinition({candidateCardContent:st(e,"candidate_card_content","candidate_card_content")}),"preflight.materialize-candidate-card":e=>t.preflightMaterializeCandidateCard({candidateCardContent:st(e,"candidate_card_content","candidate_card_content"),mockRequires:st(e,"mock_requires","mock_requires"),mockFetchedSources:st(e,"mock_fetched_sources","mock_fetched_sources")}),"preflight.probe-single-source-in-candidate-card":e=>t.preflightProbeSingleSourceInCandidateCard({candidateCardContent:st(e,"candidate_card_content","candidate_card_content"),mockProjections:lt(e,"mock_projections"),sourceIdx:_t(e,"source_idx","source_idx")}),"preflight.run-single-source-in-candidate-card":e=>t.preflightRunSingleSourceInCandidateCard({candidateCardContent:st(e,"candidate_card_content","candidate_card_content"),mockProjections:lt(e,"mock_projections"),sourceIdx:_t(e,"source_idx","source_idx")}),"preflight.run-single-source-in-live-card":e=>t.preflightRunSingleSourceInLiveCard({cardId:E(e,"card_id"),sourceIdx:_t(e,"source_idx","source_idx"),mockRequires:st(e,"mock_requires","mock_requires")}),"preflight.run-one-cycle-with-candidate-card":e=>t.preflightRunOneCycleWithCandidateCard({candidateCardContent:st(e,"candidate_card_content","candidate_card_content"),mockRequires:lt(e,"mock_requires")}),"manage.read-card":e=>t.manageReadCard({cardId:E(e,"card_id")}),"stage-ai-response-and-any-attachments":e=>{let r=E(e,"turn_id");if(!r)throw Object.assign(new Error("stage-ai-response-and-any-attachments requires a non-empty turn_id"),{statusCode:400});return t.manageAddChatEntryAndAnyAttachments({cardId:E(e,"card_id"),role:"assistant",...typeof e.text=="string"?{text:e.text}:{},...r?{turn:r}:{},...Array.isArray(e.files)?{files:e.files}:{}})},"manage.upsert-card":e=>t.manageUpsertCard({cardId:E(e,"card_id"),candidateCardContent:lt(e,"candidate_card_content")}),"manage.remove-card":e=>t.manageRemoveCard({cardId:E(e,"card_id")})}}function Ue(){return {"getstate.is-chat-processing":t=>Me(t),"setstate.chat-processing-started":t=>Vt(t,true),"setstate.chat-processing-done":t=>Vt(t,false),"getstate.card-meta":t=>Ne(t),"setstate.card-meta":t=>Le(t),"manage.upload-card-file":t=>{let e=E(t,"board_id"),r=E(t,"card_id"),n=E(t,"file_name"),a=E(t,"content_type")||"application/octet-stream",s=xe(t);if(!e)throw Object.assign(new Error("manage.upload-card-file requires board_id"),{statusCode:400});if(e!==h)throw Object.assign(new Error(`Unknown board_id: ${e}`),{statusCode:400});if(!r)throw Object.assign(new Error("manage.upload-card-file requires card_id"),{statusCode:400});if(!n)throw Object.assign(new Error("manage.upload-card-file requires file_name"),{statusCode:400});if(!s)throw Object.assign(new Error("manage.upload-card-file requires args.bytes, args.text, or args.base64"),{statusCode:400});return Tt(r,n,a,s,{inChat:false})},"manage.admin-read-card":async t=>{let{cardId:e}=ht(t);return {status:"success",data:{cards:await et().adminReadCard({cardId:e})}}},"manage.admin-upsert-card":t=>{let e=E(t,"board_id"),r=E(t,"card_id");if(!e)throw Object.assign(new Error("manage.admin-upsert-card requires board_id"),{statusCode:400});if(!r)throw Object.assign(new Error("manage.admin-upsert-card requires card_id"),{statusCode:400});if(e!==h)throw Object.assign(new Error(`Unknown board_id: ${e}`),{statusCode:400});return et().adminUpsertCard({cardId:r,candidateCardContent:lt(t,"candidate_card_content")})}}}async function Gt(t,e,r){let n=r[t];if(!n)throw Object.assign(new Error(`Unknown MCP tool: ${t}`),{statusCode:400});let a=await n(e);if(a&&typeof a=="object"&&!Array.isArray(a)){let s=a,d=s.status;if(d==="success")return Object.prototype.hasOwnProperty.call(s,"data")?a:{status:"success",data:{}};if(d==="fail"||d==="error")return a}return {status:"success",data:a}}function Rt(t,e){if(!t||typeof t!="object"||Array.isArray(t))return e;let r=t;if(typeof r.error=="string"&&r.error.trim())return r.error;if(r.step==="validate"){let n=r.validation;if(n&&typeof n=="object"&&!Array.isArray(n)){let s=n.data;if(s&&typeof s=="object"&&!Array.isArray(s)){let d=s.issues;if(Array.isArray(d)){let m=d.find(C=>typeof C=="string"&&C.trim());if(typeof m=="string")return `Validation failed: ${m}`}let p=s.errors;if(Array.isArray(p)&&p.length>0)return "Validation failed"}}return "Validation failed"}return e}async function Zt(){let t=(await Promise.all(j.map(async s=>{try{let d=s.boardAdapter.kvStorageForRef(s.outputsStoreRef),p=await Promise.resolve(d.read("status"));if(p!=null)return p}catch{}return s.notification.status}))).filter(Boolean);if(t.length===0)return null;if(t.length===1)return t[0];let e=[],r=["completed","eligible","pending","blocked","unresolved","failed","in_progress","orphan_cards"],n={};for(let s of r)n[s]=0;for(let s of t){let d=s,p=Array.isArray(d.cards)?d.cards:[];e.push(...p);for(let m of r)n[m]+=Number(d?.summary?.[m]||0);}let a=t[0];return {...a,cards:e,summary:{...a.summary||{},card_count:e.length,...n}}}async function Xt(){let t={},e=async r=>{try{let n=await r.boardOps.getAllOutputsComputedValues({});if(n.status==="success"&&n.data&&typeof n.data=="object"){for(let[a,s]of Object.entries(n.data)){let d=r.notification.cards[a];t[a]={schema_version:"v1",card_id:a,card_data:d?.card_data??{},computed_values:s??{}};}return}}catch{}for(let[n,a]of Object.entries(r.notification.computedValues)){let s=r.notification.cards[n];t[n]={schema_version:"v1",card_id:n,card_data:s?.card_data??{},computed_values:a??{}};}};for(let r of j)await e(r);return t}async function Yt(){let t={};for(let e of j){try{let r=await e.boardOps.getAllOutputsDataObjects({});if(r.status==="success"&&r.data&&typeof r.data=="object"){Object.assign(t,r.data);continue}}catch{}Object.assign(t,e.notification.dataObjects||{});}return t}async function Ct(){let t=await Qt(),e=await Xt(),r=await Yt(),n={};for(let s of t){if(!s?.id)continue;let d=s.id,p=e[d]||{},m={...p.card_data&&typeof p.card_data=="object"?p.card_data:s.card_data&&typeof s.card_data=="object"?s.card_data:{}};n[d]={schema_version:p.schema_version||"v1",card_id:p.card_id||d,card_data:m,computed_values:p.computed_values&&typeof p.computed_values=="object"?p.computed_values:{}};}let a={};for(let s of t){if(!s?.id)continue;let d=s.id;try{let p=jt(d),m=et().getChatProcessing({cardId:d}).active;(p.length>0||m)&&(a[d]={messages:p.map(C=>({role:String(C.role||"system"),text:String(C.text||""),files:Array.isArray(C.files)?C.files:[]})),receiving:!1,processing:m});}catch{}}return {boardId:h,cardDefinitions:t,statusSnapshot:await Zt(),dataObjectsByToken:r,cardRuntimeById:n,cardChatsByCardId:a}}async function Pt(t,e,r){let n=r?.syncBoard!==false,a=r?.restartOnlyIfChanged===true,s=Q(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let d=await dt(t);if(!d)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let p=a?JSON.stringify(d):null,m=e(d)||d;if(a&&JSON.stringify(m)===p)return;let C=await s.cardStoreOps.set({body:m});if(C.status!=="success")throw Object.assign(new Error(C.error||`Failed to persist card: ${t}`),{statusCode:500});if(n){let S=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(S.status!=="success")throw Object.assign(new Error(S.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function He(t,e){await Pt(t,e,{syncBoard:true});}async function te(t,e){await Pt(t,e,{syncBoard:false});}async function Qe(t){let e=Q(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await dt(t))throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let n=await e.boardOps.upsertCard({params:{cardId:t,restart:true}});if(n.status!=="success")throw Object.assign(new Error(n.error||`Failed to retrigger card: ${t}`),{statusCode:500})}async function Ve(t,e){await Pt(t,r=>{if(!e||typeof e!="object"||Object.keys(e).length===0)return r;function n(a,s,d){let p=String(s||"").split(".").filter(Boolean);if(!p.length)return;let m=a;for(let C=0;C<p.length-1;C++){let S=p[C];(!m[S]||typeof m[S]!="object")&&(m[S]={}),m=m[S];}m[p[p.length-1]]=d;}if(e.fieldValues!==void 0&&e.fieldValues!==null){let a=null,s=r.view;if(s&&Array.isArray(s.elements)){for(let d of s.elements)if(d?.data&&d.data.writeTo){a=d.data.writeTo;break}}a?n(r,a,e.fieldValues):typeof e.fieldValues=="object"&&!Array.isArray(e.fieldValues)&&(r.card_data={...r.card_data||{},...e.fieldValues});}else {if(Array.isArray(e._stagedFiles)&&e._stagedFiles.length>0)return r;for(let[a,s]of Object.entries(e))a!=="_stagedFiles"&&(s!==null&&typeof s=="object"&&!Array.isArray(s)&&r[a]!==null&&typeof r[a]=="object"&&!Array.isArray(r[a])?r[a]={...r[a],...s}:r[a]=s);}return r},{syncBoard:true,restartOnlyIfChanged:true});}function We(t){let e=String(t||"").trim();if(!e)return "upload.bin";let r=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return (r>=0?e.slice(r+1):e)||"upload.bin"}function ze(t){P.clear(t);try{et().setChatProcessing({cardId:t,active:!1});}catch{}}function Je(t,e,r,n,a=""){let s=typeof r=="string"?r.trim():"";return P.append(t,e,s,n,a)}function jt(t){return P.readAll(t)}async function Ke(t){let e=[];try{let r=await dt(t);if(!r)return e;let n=Y().read(r.card_data&&typeof r.card_data=="object"?r.card_data:null);for(let a of n)e.push(a.stored_name);}catch{}return e}async function Ge(t,e,r,n){let a=tt(t),s=yt(t),d=We(e),p=await Ke(t),C=`${String(p.length+1).padStart(3,"0")}-${d}`.slice(-36);return s.files&&await s.files.putBytes(`${a}/${C}`,new Uint8Array(n),r||"application/octet-stream"),{name:d,stored_name:C,size:n.length,mime_type:r||"application/octet-stream",uploaded_at:new Date().toISOString()}}async function Tt(t,e,r,n,a){if(!n.length)throw Object.assign(new Error("Empty upload body"),{statusCode:400});let s=a?.inChat===true,d=await Ge(t,e,r,n),p=null;if(await te(t,m=>{let C=new Date().toISOString(),S=m.card_data&&typeof m.card_data=="object"?m.card_data:{};m.card_data=S;let q=Y().normalizeIncoming([{name:d.name,stored_name:d.stored_name,size:d.size,mime_type:d.mime_type,uploaded_at:d.uploaded_at||C,chat:s}],C);return p=Y().merge(S,q).findIndex(u=>u.stored_name===d.stored_name),m}),s){let m=typeof p=="number"&&p>=0?` #${p}`:"";Je(t,"system",`file uploaded: ${d.name} as ${d.stored_name}${m}`,[],a?.turnId??"");}return {ok:true,file:d}}async function ee(t){let e=Q(t);if(!e)return null;let r=await e.boardOps.getConfig({params:{key:"chat-handler-flow"}}),n=r.status==="success"?r.data?.value:null,a=e.chatHandlerRef;return n==null&&(!a||typeof a!="object")?null:{ctx:e,handlerFlow:n,handlerRef:a}}async function Ze(t,e,r=false,n=""){let a=await ee(t);if(!a)return;let{ctx:s,handlerFlow:d,handlerRef:p}=a;if(!r)try{et().setChatProcessing({cardId:t,active:!0});}catch{}let m={boardId:h,cardId:String(t),lastChatEntryId:e,...n?{turnId:n}:{},...mt,...z?{serverUrl:z}:{}},C=d!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:je}}:p;try{nt(s.boardAdapter)?await s.boardAdapter.chatAgentStore().enqueueRequest({boardId:h,ref:C,args:d!=null?{...m,__chatHandlerFlow:d}:m}):s.boardAdapter.chatAgentStore().enqueueRequest({boardId:h,ref:C,args:d!=null?{...m,__chatHandlerFlow:d}:m}),await Promise.resolve(s.boardAdapter.requestProcessAccumulated?.());}catch(S){try{et().setChatProcessing({cardId:t,active:!1});}catch{}x.warn(`[chat-handler] queue failed for card "${t}": ${S instanceof Error?S.message:String(S)}`);}}async function Xe(t,e,r){if(e.howToRun==="built-in"&&Oe(e)===je){let n=O,a=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,n?n.run(a,s,{boardId:h,cardId:String(s.cardId||""),label:t.label,logger:x,serverUrl:z,executionExtra:mt}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return I.invoke(e,r)}async function Ye(t,e=false){e||await ct();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",n=r?Q(r):J();if(!n)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let a=await Xe(n,t.ref,t.args);if(!a.dispatched){if(r)try{P.setProcessing(r,!1);}catch{}throw new Error(a.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function tr(t,e,r){let n=e==="chat-send"?te:He,a;await n(t,s=>{let d=new Date().toISOString(),p=s.card_data&&typeof s.card_data=="object"?s.card_data:{};if(s.card_data=p,e==="chat-send"){let m=r&&typeof r.text=="string"?r.text.trim():"",C=r&&typeof r["turn-id"]=="string"?r["turn-id"]:r&&typeof r.turnId=="string"?r.turnId:r&&typeof r.turn=="string"?r.turn:"",S=[];if(Array.isArray(r?.files)){for(let q of r.files)if(q){if(typeof q=="string"){S.push({name:q});continue}if(typeof q=="object"){let L=q;typeof L.name=="string"&&S.push({name:L.name,size:L.size,mime_type:L.mime_type,uploaded_at:L.uploaded_at,stored_name:L.stored_name,chat:L.chat===true});}}}if(m||S.length>0){let q=W.runBatch({cardId:t,commands:[{command:"append",role:"user",text:m,files:S,turn:C},{command:"set-processing",active:true}]});if(q.status!=="success")throw new Error(q.error);let L=q.data.results[0]?.data?.id;if(typeof L!="string"||!L)throw new Error(`chat-send did not return an append id for card ${t}`);a={cardId:t,lastEntryId:L,processingAlreadySet:true,turnId:C};try{let A=jt(t);le([{kind:"card_chats",cardId:t,messages:A.map(R=>({role:String(R.role||"system"),text:String(R.text||""),files:Array.isArray(R.files)?R.files:[]})),receiving:!0,processing:P.isProcessing(t)}]);}catch{}}return s}if(e==="file-upload"){let m=Y().normalizeIncoming(r?.files,d);return m.length>0&&Y().merge(p,m),s}if(e==="action"){let m=r&&typeof r.buttonId=="string"?r.buttonId:"";if(!m)return s;p.lastAction={buttonId:m,at:d},p.lastActionText=`${m} @ ${d}`;}return s}),a&&Ze(a.cardId,a.lastEntryId,a.processingAlreadySet,a.turnId??"");}function w(t,e,r){let n=JSON.stringify(r),a=typeof Buffer<"u"?Buffer.byteLength(n):new TextEncoder().encode(n).length;t.writeHead(e,{...y,"Content-Type":"application/json; charset=utf-8","Content-Length":a}),t.end(n);}async function re(t,e,r){let n=await dt(t);if(!n)throw Object.assign(new Error("Card not found"),{statusCode:404});let a=Y().resolve(n.card_data,e,r);if(!a.ok&&a.reason==="stale_reference")throw Object.assign(new Error("File reference is stale. Refresh and try again."),{statusCode:409});if(!a.ok)throw Object.assign(new Error("File not found"),{statusCode:404});let s=a.file,d=tt(t),p=yt(t),m=String(s.stored_name||""),C=`${d}/${m}`,S=p.files?await p.files.getBytes(C):null;if(!S)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:S}}async function er(t,e,r,n){let{fileRecord:a,bytes:s}=await re(e,r,n),d=String(a.name||a.stored_name||"download.bin"),p=String(a.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":p,"Content-Disposition":`attachment; filename="${d}"`,"Content-Length":s.length}),t.end(s);}function rr(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 ne(t,e,r){let n=t.split(/\r?\n/);return (e==="head"?n.slice(0,r):n.slice(-r)).join(`
|
|
2
|
+
`)}async function K(t){let e=[];for await(let n of t)e.push(n);let r=typeof Buffer<"u"?Buffer.concat(e).toString("utf-8").trim():new TextDecoder().decode(vt(e)).trim();return r?JSON.parse(r):{}}async function nr(t){let e=[];for await(let r of t)e.push(r);return typeof Buffer<"u"?Buffer.concat(e):vt(e)}async function ae(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let n=j[0];return n?n.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function se(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",n=j[0];return n?n.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}async function ar(t,e,r){let n=String(t||"").trim();if(!n)return {statusCode:400,body:{error:"callback token is required"}};let a=e==="success"?await ae(n,r):await se(n,r);return a.status==="success"?{statusCode:200,body:a}:a.status==="fail"?{statusCode:400,body:{error:a.error}}:{statusCode:500,body:{error:a.error}}}let oe=0;function ie(t){let e=JSON.stringify(t);return oe++,`id: ${oe}
|
|
3
|
+
data: ${e}
|
|
4
|
+
|
|
5
|
+
`}function ce(t){let e=t;try{e.flushHeaders?.();}catch{}try{e.flush?.();}catch{}try{e.socket?.setNoDelay?.(!0);}catch{}try{e.socket?.uncork?.();}catch{}}function Et(t,e){let r=v.get(t);if(r&&!(e&&r.res!==e)){v.delete(t),qt();try{It?.(t);}catch{}try{r.res.end();}catch{}}}function kt(t,e){let r=v.get(t);if(!r)return;let n=ie(e);try{r.res.write(n),ce(r.res);}catch{Et(t,r.res);}}function de(t,e,r,n,a){if(!v.has(e)){w(t,404,{error:`SSE client not connected: ${e}`});return}a?Ot?.(e,r,n):B?.(e,r,n),w(t,200,{ok:true,clientId:e,channelName:r,...n.cardId?{cardId:n.cardId}:{},subscribed:a});}function $t(){let t=new Set;for(let e of v.values())for(let r of e.subscribedChatCardIds)t.add(r);return Array.from(t)}function sr(t){let e=F.has(t)?F.get(t):null,{cursor:r}=P.readAfter(t,e),n=P.isProcessing(t),a=n!==(M.get(t)??false),s=r!==e;return s&&F.set(t,r),M.set(t,n),s||a}function ue(t,e=true){let r=jt(t),n=Date.now();return {kind:"card_chats",cardId:t,sentAt:new Date(n).toISOString(),sentAtMs:n,messages:r.map(a=>({role:String(a.role||"system"),text:String(a.text||""),files:Array.isArray(a.files)?a.files:[]})),receiving:e,processing:P.isProcessing(t)}}function Ft(t,e=true){let r={kind:"notification-batch",notifications:[ue(t,e)]};for(let[n,a]of v.entries())a.subscribedChatCardIds.has(t)&&kt(n,r);}function qt(){$t().length>0||(D&&(clearInterval(D),D=null),F.clear(),M.clear());}function or(){if(D)return;let t=()=>{let e=$t();if(e.length===0){qt();return}let r=new Set(e);for(let n of Array.from(F.keys()))r.has(n)||F.delete(n);for(let n of Array.from(M.keys()))r.has(n)||M.delete(n);for(let n of e)sr(n)&&Ft(n,true);};t(),D=setInterval(t,1e3);}function ir(t,e){let r=v.get(t);if(!r)return false;r.subscribedChatCardIds.add(e);let{cursor:n}=P.readAfter(e,null);return F.set(e,n),M.set(e,P.isProcessing(e)),or(),kt(t,{kind:"notification-batch",notifications:[ue(e,true)]}),true}function cr(t,e){let r=v.get(t);return r?(r.subscribedChatCardIds.delete(e),$t().includes(e)||(F.delete(e),M.delete(e)),qt(),true):false}function dr(t){if(!t||typeof t!="object")return false;let e=t.kind;return e==="card_chats"||e==="chat_messages"}function le(t){if(!t||t.length===0)return;let e=[],r=new Set;for(let n of t)dr(n)&&typeof n.cardId=="string"?r.add(String(n.cardId)):e.push(n);if(e.length>0){let n={kind:"notification-batch",notifications:e};for(let a of v.keys())kt(a,n);}for(let n of r)Ft(n,true);}async function ur(t,e,r){let n=v.get(r),a=n?new Set(n.subscribedChatCardIds):new Set;n&&Et(r,n.res),e.writeHead(200,{...y,"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),ce(e),v.set(r,{res:e,subscribedChatCardIds:a});let s=await Ct(),d=ie(s);e.write(d);try{Bt?.(r,m=>{kt(r,m);});}catch{}let p=setInterval(()=>{try{e.write(`: keepalive
|
|
6
|
+
|
|
7
|
+
`);}catch{}},15e3);t.on("close",()=>{clearInterval(p),Et(r,e);});}async function lr(t,e,r){let n=t.method||"GET",a=r,s=a.pathname;try{if(n==="GET"&&s===`${l}/init-board`)return await ct(),w(e,200,await Ct()),!0;if(n==="GET"&&s===`${l}/sse`){await ct();let i=String(a.searchParams.get("clientId")||"").trim();if(!i)return w(e,400,{error:"clientId query param is required for SSE"}),!0;await ur(t,e,i);for(let o=0;o<j.length;o++)await wt(j[o]),await Ht(j[o],o),await wt(j[o]);return !0}if(n==="GET"&&s===`${l}/board-status`)return w(e,200,await Ct()),!0;let d=s.match(new RegExp(`^${V(l)}/callback/board-worker/([^/]+)/(success|failure)$`));if(n==="POST"&&d){await ct();let i=decodeURIComponent(d[1]),o=d[2],g=await K(t),f=await ar(i,o,g);return w(e,f.statusCode,f.body),!0}if(n==="POST"&&s===`${l}/mcp`){await H();let i=await K(t),o=typeof i.tool=="string"?i.tool.trim():"",g=i.args&&typeof i.args=="object"&&!Array.isArray(i.args)?i.args:{};if(!o)return w(e,400,{error:"tool is required"}),!0;if(o==="inspect.file-contents")return w(e,400,{error:"inspect.file-contents is only available on /mcp-raw"}),!0;try{let f=await Gt(o,g,De(et()));if(f&&typeof f=="object"&&!Array.isArray(f)){let k=f;if(k.status==="fail")return w(e,400,{error:Rt(f,"Request failed")}),!0;if(k.status==="error")return w(e,500,{error:Rt(f,"Internal error")}),!0}w(e,200,f);}catch(f){let k=typeof f?.statusCode=="number"?Number(f.statusCode):500,$=f instanceof Error?f.message:String(f);w(e,k,{error:$});}return !0}if(n==="POST"&&s===`${l}/mcp-controlplane`){await H();let i=await K(t),o=typeof i.tool=="string"?i.tool.trim():"",g=i.args&&typeof i.args=="object"&&!Array.isArray(i.args)?i.args:{};if(!o)return w(e,400,{error:"tool is required"}),!0;try{let f=await Gt(o,g,Ue());if(f&&typeof f=="object"&&!Array.isArray(f)){let k=f;if(k.status==="fail")return w(e,400,{error:Rt(f,"Request failed")}),!0;if(k.status==="error")return w(e,500,{error:Rt(f,"Internal error")}),!0}w(e,200,f);}catch(f){let k=typeof f?.statusCode=="number"?Number(f.statusCode):500,$=f instanceof Error?f.message:String(f);w(e,k,{error:$});}return !0}if(n==="POST"&&s===`${l}/mcp-raw`){await H();let i=await K(t),o=typeof i.tool=="string"?i.tool.trim():"",g=i.args&&typeof i.args=="object"&&!Array.isArray(i.args)?i.args:{};if(!o)return w(e,400,{error:"tool is required"}),!0;if(o!=="inspect.file-contents")return w(e,400,{error:`Tool does not support raw response: ${o}`}),!0;let f=E(g,"card_id","cardId"),k=at(g,"file_idx","fileIdx"),$=at(g,"head-lines","headLines"),T=at(g,"tail-lines","tailLines"),N=at(g,"head-bytes","headBytes"),rt=at(g,"tail-bytes","tailBytes");if(!f)return w(e,400,{error:"inspect.file-contents requires card_id"}),!0;if(k===void 0||!Number.isInteger(k)||k<0)return w(e,400,{error:"inspect.file-contents requires file_idx to be a non-negative integer"}),!0;if([$,T,N,rt].filter(G=>G!==void 0).length>1)return w(e,400,{error:"inspect.file-contents accepts at most one of head-lines, tail-lines, head-bytes, tail-bytes"}),!0;for(let[G,ut]of [["head-lines",$],["tail-lines",T],["head-bytes",N],["tail-bytes",rt]])if(ut!==void 0&&(!Number.isInteger(ut)||ut<0))return w(e,400,{error:`inspect.file-contents requires ${G} to be a non-negative integer`}),!0;let fe=await et().inspectFileContents({cardId:f,fileIdx:k}),fr=typeof fe?.stored_name=="string"?fe.stored_name:null,{fileRecord:Mt,bytes:gt}=await re(f,k,fr),pe=String(Mt.name||Mt.stored_name||"download.bin"),Lt=String(Mt.mime_type||"application/octet-stream"),At=(a.searchParams.get("resp")||"").trim().toLowerCase();if(At&&At!=="json-b64")return w(e,400,{error:`unsupported resp mode: ${At}`}),!0;let pr=At==="json-b64",it;if($!==void 0||T!==void 0){if(!rr(Lt))return w(e,400,{error:"head-lines/tail-lines are only supported for text-like files; use head-bytes/tail-bytes for binary content"}),!0;let G=new TextDecoder().decode(gt),ut=$!==void 0?ne(G,"head",$):ne(G,"tail",T);it=typeof Buffer<"u"?Buffer.from(ut,"utf8"):new TextEncoder().encode(ut);}else if(N!==void 0||rt!==void 0){let G=N??rt;it=N!==void 0?gt.slice(0,G):gt.slice(Math.max(0,gt.length-G));}else it=gt;if(pr){let G=typeof Buffer<"u"?Buffer.from(it).toString("base64"):btoa(String.fromCharCode(...it));return w(e,200,{bodyBase64:G,mimeType:Lt,filename:pe,byteLength:it.length}),!0}return e.writeHead(200,{"Content-Type":Lt,"Content-Disposition":`attachment; filename="${pe}"`,"Content-Length":it.length}),e.end(it),!0}let p=s.match(new RegExp(`^${V(l)}/cards/([^/]+)$`));if(n==="GET"&&p){await H();let i=decodeURIComponent(p[1]),o=await dt(i);return o?(w(e,200,o),!0):(w(e,404,{error:`card not found: ${i}`}),!0)}if(n==="PATCH"&&p){await H();let i=decodeURIComponent(p[1]),o=await K(t);return await Ve(i,o),w(e,200,{ok:!0}),!0}let m=s.match(new RegExp(`^${V(l)}/cards/([^/]+)/retrigger$`));if(n==="POST"&&m){await H();let i=decodeURIComponent(m[1]);return await Qe(i),w(e,200,{ok:!0}),!0}let C=s.match(new RegExp(`^${V(l)}/cards/([^/]+)/actions$`));if(n==="POST"&&C){await H();let i=decodeURIComponent(C[1]),o=Date.now(),g=new Date(o).toISOString(),f=await K(t),k=f?.actionType;if(k==="chat-send"&&!await ee(i)){let T=Date.now();return w(e,409,{error:`chat handler is not configured for card: ${i}`,requestReceivedAt:g,requestReceivedAtMs:o,responseSentAt:new Date(T).toISOString(),responseSentAtMs:T,responseStatus:409}),!0}if(k==="chat-send"){let T=f?.payload??{},N=typeof T["turn-id"]=="string"?T["turn-id"]:typeof T.turnId=="string"?T.turnId:typeof T.turn=="string"?T.turn:"";if(!N||!String(N).trim()){let rt=Date.now();return w(e,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${i}`,requestReceivedAt:g,requestReceivedAtMs:o,responseSentAt:new Date(rt).toISOString(),responseSentAtMs:rt,responseStatus:400}),!0}}await tr(i,k,f?.payload);let $=Date.now();return w(e,200,{ok:!0,requestReceivedAt:g,requestReceivedAtMs:o,responseSentAt:new Date($).toISOString(),responseSentAtMs:$,responseStatus:200}),!0}let S=s.match(new RegExp(`^${V(l)}/cards/([^/]+)/chats$`));if(n==="GET"&&S){await H();let i=decodeURIComponent(S[1]),o=String(a.searchParams.get("turn-id")||""),g=String(a.searchParams.get("all-turns")||"").toLowerCase()==="true",f=String(a.searchParams.get("tail-turns-before-id")||""),k=a.searchParams.get("tail-turns"),$=k==null||k===""?g||o?void 0:1:Number.parseInt(k,10),T=W.readAll({params:{cardId:i},body:{...$===void 0?{}:{tailTurns:$},...o?{turnId:o}:{},...g?{allTurns:!0}:{},...f?{tailTurnsBeforeId:f}:{}}});if(T.status!=="success")return w(e,400,{error:T.error||"Failed to read chats"}),!0;let N=T.data.records;return w(e,200,{ok:!0,messages:N}),!0}if(n==="POST"&&S){await H();let i=decodeURIComponent(S[1]),o=await K(t),g=typeof o?.role=="string"?o.role:"assistant",f=typeof o?.text=="string"?o.text:"",k=Array.isArray(o?.files)?o.files:[],$=typeof o?.turn=="string"?o.turn:typeof o?.["turn-id"]=="string"?o["turn-id"]:typeof o?.turnId=="string"?o.turnId:"",T=o?.done===!0,N=P.append(i,g,f,k,$);return T&&P.setProcessing(i,!1),Ft(i,!T),w(e,200,{ok:!0,id:N}),!0}let q=s.match(new RegExp(`^${V(l)}/cards/([^/]+)/chats/subscribe-sse$`));if(n==="POST"&&q){await H();let i=decodeURIComponent(q[1]),o=await K(t),g=typeof o?.clientId=="string"?o.clientId.trim():"";return g?ir(g,i)?(w(e,200,{ok:!0,clientId:g,cardId:i,subscribed:!0}),!0):(w(e,404,{error:`SSE client not connected: ${g}`}),!0):(w(e,400,{error:"clientId is required"}),!0)}let L=s.match(new RegExp(`^${V(l)}/cards/([^/]+)/chats/unsubscribe-sse$`));if(n==="POST"&&L){await H();let i=decodeURIComponent(L[1]),o=await K(t),g=typeof o?.clientId=="string"?o.clientId.trim():"";return g?cr(g,i)?(w(e,200,{ok:!0,clientId:g,cardId:i,subscribed:!1}),!0):(w(e,404,{error:`SSE client not connected: ${g}`}),!0):(w(e,400,{error:"clientId is required"}),!0)}let u=s.match(new RegExp(`^${V(l)}/watch-channel/([^/]+)/(subscribe|unsubscribe)-sse$`));if(n==="POST"&&u){await H();let i=decodeURIComponent(u[1]),o=u[2]==="subscribe",g=await K(t),f=typeof g?.clientId=="string"?g.clientId.trim():"";return f?(de(e,f,i,{},o),!0):(w(e,400,{error:"clientId is required"}),!0)}let b=s.match(new RegExp(`^${V(l)}/cards/([^/]+)/watch-channel/([^/]+)/(subscribe|unsubscribe)-sse$`));if(n==="POST"&&b){await H();let i=decodeURIComponent(b[1]),o=decodeURIComponent(b[2]),g=b[3]==="subscribe",f=await K(t),k=typeof f?.clientId=="string"?f.clientId.trim():"";return k?(de(e,k,o,{cardId:i},g),!0):(w(e,400,{error:"clientId is required"}),!0)}let A=s.match(new RegExp(`^${V(l)}/cards/([^/]+)/files$`));if(n==="POST"&&A){await H();let i=decodeURIComponent(A[1]),o=String(a.searchParams.get("inChat")||"").toLowerCase()==="true",g=String(a.searchParams.get("turn-id")||"").trim();if(o&&!g)return w(e,400,{error:`file upload with inChat=true requires a non-empty 'turn-id' query parameter for card: ${i}`}),!0;let f=t.headers["x-file-name"],k=String(t.headers["content-type"]||"application/octet-stream"),$=Array.isArray(f)?f[0]:f,T=$?decodeURIComponent(String($)):"upload.bin",N=await nr(t);return w(e,200,await Tt(i,T,k,N,{inChat:o,turnId:g})),!0}let R=s.match(new RegExp(`^${V(l)}/cards/([^/]+)/files/(\\d+)$`));if(n==="GET"&&R){let i=decodeURIComponent(R[1]),o=parseInt(R[2],10),g=a.searchParams.get("sn");return await er(e,i,o,g),!0}return !1}catch(d){let p=d?.statusCode||500;return w(e,p,{error:String(d?.message||d)}),true}}return {get apiBasePath(){return l},get corsHeaders(){return y},get queueLaneTuning(){return _},handleRuntimeApi:lr,buildPublishedRuntimePayload:Ct,processAccumulatedEvents:$e,processAccumulatedLane:xt,handleChatAgentRequest:Ye,clearChatRecords:ze,reportSourceFetched(t,e){return ae(t,{ref:e})},reportSourceFetchFailure(t,e){return se(t,{reason:e})},get cardStore(){return j[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function Mr(c){let l=String(c.apiBasePath||"/api/boards").replace(/\/$/,""),y={...Te,...c.corsHeaders||{}},_=c.serverMetaStore,h=c.boardRuntimeFactory,x=new Map,I="boards-config.json";function O(){let B=_.getText(I);if(!B)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(B)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function P(B){_.putText(I,JSON.stringify(B,null,2));}function W(B){let v=String(B||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return v.length>0&&v.length<=64?v:null}function ot(B){if(x.has(B))return x.get(B);let F=O().boards.find(D=>D.id===B)||{},M=h(B,F);return x.set(B,M),M}function z(B,v,F){let M=JSON.stringify(F),D=typeof Buffer<"u"?Buffer.byteLength(M):new TextEncoder().encode(M).length;B.writeHead(v,{...y,"Content-Type":"application/json; charset=utf-8","Content-Length":D}),B.end(M);}async function mt(B,v,F){let M=B.method||"GET",D=F.pathname;if(M==="GET"&&D===l)return z(v,200,{ok:true,boards:O().boards}),true;if(M==="POST"&&D===l){let Z=[];for await(let tt of B)Z.push(tt);let j=typeof Buffer<"u"?Buffer.concat(Z).toString("utf-8").trim():new TextDecoder().decode(vt(Z)).trim(),U={};try{U=j?JSON.parse(j):{};}catch{U={};}let X=W(U.id);if(!X)return z(v,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let ft=O();if(ft.boards.some(tt=>tt.id===X))return z(v,409,{error:`Board "${X}" is already registered`}),true;let yt=typeof U.label=="string"&&U.label.trim()?U.label.trim():X,Y={id:X,label:yt};for(let[tt,pt]of Object.entries(U))tt==="id"||tt==="label"||pt!=null&&(Y[tt]=pt);return ft.boards.push(Y),P(ft),z(v,200,{ok:true,board:Y}),true}return false}async function Bt(B,v,F){let D=F.pathname.match(new RegExp(`^${V(l)}/([^/]+)(/|$)`));if(!D)return false;let Z=W(decodeURIComponent(D[1]));return Z?O().boards.some(X=>X.id===Z)?!!await ot(Z).handleRuntimeApi(B,v,F):(z(v,404,{error:`Board "${Z}" not registered. POST ${l} with {id} to register it first.`}),true):(z(v,400,{error:"Invalid board id"}),true)}async function It(B,v,F){return !!(await mt(B,v,F)||await Bt(B,v,F))}function Ot(B){if(!O().boards.some(F=>F.id===B))throw Object.assign(new Error(`Board "${B}" not registered`),{statusCode:404});return {service:ot(B)}}return {get apiBasePath(){return l},get corsHeaders(){return y},handleApi:It,requireBoardService:Ot}}exports.a=kr;exports.b=qr;exports.c=Mr;//# sourceMappingURL=chunk-KQX6R4PV.cjs.map
|
|
8
|
+
//# sourceMappingURL=chunk-KQX6R4PV.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var f={NOT_STARTED:"not-started",RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"},I={CREATED:"created",RUNNING:"running",PAUSED:"paused",STOPPED:"stopped",COMPLETED:"completed",FAILED:"failed"},D={ALL_TASKS_DONE:"all-tasks-done",ALL_OUTPUTS_DONE:"all-outputs-done",ONLY_RESOLVED:"only-resolved",GOAL_REACHED:"goal-reached",MANUAL:"manual"},A={DEPENDENCY_MODE:"dependency-mode",ELIGIBILITY_MODE:"eligibility-mode"},y={ALPHABETICAL:"alphabetical",PRIORITY_FIRST:"priority-first",DURATION_FIRST:"duration-first",COST_OPTIMIZED:"cost-optimized",RESOURCE_AWARE:"resource-aware",RANDOM_SELECT:"random-select",USER_CHOICE:"user-choice",PARALLEL_ALL:"parallel-all",SKIP_CONFLICTS:"skip-conflicts",ROUND_ROBIN:"round-robin"},R={EXECUTION_MODE:"eligibility-mode",CONFLICT_STRATEGY:"alphabetical",COMPLETION_STRATEGY:"all-outputs-done",MAX_ITERATIONS:1e3};function c(t){return t?Array.isArray(t.provides)?t.provides:[]:[]}function p(t){return t?Array.isArray(t.requires)?t.requires:[]:[]}function G(t){return t.tasks??{}}function b(t,n){return t.tasks[n]}function L(t,n){return n in t.tasks}function U(t){return t?t.status===f.FAILED||t.status===f.INACTIVATED:false}function v(t){return t?.status===f.COMPLETED}function w(t){return t?.status===f.RUNNING}function h(t,n){return t.refreshStrategy??n?.refreshStrategy??"data-changed"}function N(t,n){return h(t,n)!=="once"}function P(t){return t.maxExecutions}function M(t,n){let e=new Set;for(let[r,o]of Object.entries(n))if(o.status===f.COMPLETED){let s=t.tasks[r];s&&c(s).forEach(a=>e.add(a));}return Array.from(e)}function H(t,n){let e={};return t.forEach(r=>{let o=n[r];if(!o)return;c(o).forEach(i=>{e[i]||(e[i]=[]),e[i].push(r);});}),e}function F(t,n,e,r){for(let o of e){if(o===t)continue;let s=c(r[o]);if(n.some(a=>s.includes(a)))return true}return false}function q(t,n){let e=c(t);return e.includes(n)?t:{...t,provides:[...e,n]}}function K(t,n){let e=c(t);return {...t,provides:e.filter(r=>r!==n)}}function j(t,n){let e=p(t);return e.includes(n)?t:{...t,requires:[...e,n]}}function Y(t,n){let e=p(t);return {...t,requires:e.filter(r=>r!==n)}}function B(t,n,e){return {...t,tasks:{...t.tasks,[n]:e}}}function O(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function X(t,n){let e={};for(let r of Object.keys(t.tasks))e[r]=O();return {status:"running",tasks:e,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:n,executionConfig:{executionMode:t.settings.execution_mode??"eligibility-mode",conflictStrategy:t.settings.conflict_strategy??"alphabetical",completionStrategy:t.settings.completion}}}function W(t,n,e){let r=t.tasks[n]??l(),o={};if(e){let i=e.tasks[n],a=p(i);for(let u of a)for(let[g,S]of Object.entries(e.tasks))if(c(S).includes(u)){let d=t.tasks[g];d?.lastDataHash&&(o[u]=d.lastDataHash);break}}let s={...r,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:o};return {...t,tasks:{...t.tasks,[n]:s},lastUpdated:new Date().toISOString()}}function Z(t,n,e,r,o,s){let i=t.tasks[e]??l(),a=n.tasks[e];if(!a)throw new Error(`Task "${e}" not found in graph`);let u;r&&a.on&&a.on[r]?u=a.on[r]:u=c(a);let g=i.startConsumedHashes?{...i.startConsumedHashes}:{...i.lastConsumedHashes};if(!i.startConsumedHashes){let C=a.requires??[];for(let E of C)for(let[k,x]of Object.entries(n.tasks))if(c(x).includes(E)){let T=t.tasks[k];T?.lastDataHash&&(g[E]=T.lastDataHash);break}}let S={...i,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:i.executionCount+1,lastEpoch:i.executionCount+1,lastDataHash:o,data:s,lastConsumedHashes:g,error:void 0},d=[...new Set([...t.availableOutputs,...u])];return {...t,tasks:{...t.tasks,[e]:S},availableOutputs:d,lastUpdated:new Date().toISOString()}}function $(t,n,e,r){let o=t.tasks[e]??l(),s=n.tasks[e];if(s?.retry){let u=o.retryCount+1;if(u<=s.retry.max_attempts){let g={...o,status:"not-started",retryCount:u,lastUpdated:new Date().toISOString(),error:r};return {...t,tasks:{...t.tasks,[e]:g},lastUpdated:new Date().toISOString()}}}let i={...o,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:r,executionCount:o.executionCount+1},a=t.availableOutputs;if(s?.on_failure&&s.on_failure.length>0&&(a=[...new Set([...t.availableOutputs,...s.on_failure])]),s?.circuit_breaker&&i.executionCount>=s.circuit_breaker.max_executions){let u=s.circuit_breaker.on_break;a=[...new Set([...a,...u])];}return {...t,tasks:{...t.tasks,[e]:i},availableOutputs:a,lastUpdated:new Date().toISOString()}}function J(t,n,e,r){let o=t.tasks[n]??l(),s={...o,progress:typeof r=="number"?r:o.progress,messages:[...o.messages??[],...e?[{message:e,timestamp:new Date().toISOString(),status:o.status}]:[]],lastUpdated:new Date().toISOString()};return {...t,tasks:{...t.tasks,[n]:s},lastUpdated:new Date().toISOString()}}function Q(t,n){let e=t.tasks[n];if(!e)return t;let r={...e,status:"not-started",startedAt:void 0,completedAt:void 0,failedAt:void 0,error:void 0,data:void 0,progress:null,lastUpdated:new Date().toISOString()};return {...t,tasks:{...t.tasks,[n]:r},lastUpdated:new Date().toISOString()}}function l(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}exports.A=X;exports.B=W;exports.C=Z;exports.D=$;exports.E=J;exports.F=Q;exports.a=f;exports.b=I;exports.c=D;exports.d=A;exports.e=y;exports.f=R;exports.g=c;exports.h=p;exports.i=G;exports.j=b;exports.k=L;exports.l=U;exports.m=v;exports.n=w;exports.o=h;exports.p=N;exports.q=P;exports.r=M;exports.s=H;exports.t=F;exports.u=q;exports.v=K;exports.w=j;exports.x=Y;exports.y=B;exports.z=O;//# sourceMappingURL=chunk-LODXIALE.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-LODXIALE.cjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function p(t){return String(t).replace(/[^a-zA-Z0-9_-]/g,"_")}function m(t){let n=t.payload??{};return {id:t.id,role:typeof n.role=="string"?n.role:"system",text:typeof n.text=="string"?n.text:"",files:Array.isArray(n.files)?n.files:[],turn:typeof n.turn=="string"?n.turn:"",updated_at:typeof n.updated_at=="string"?n.updated_at:""}}function T(t,n){let i=e=>`chats/${p(e)}/processing`,r=e=>`chats/${p(e)}/config`;return {append(e,a,o,u=[],s=""){return t(e).append({role:a,text:o,files:u,turn:s,updated_at:new Date().toISOString()}).id},readAll(e){return t(e).readAll().map(m)},readAfter(e,a){let o=t(e).readAfter(a);return {records:o.entries.map(m),cursor:o.newCursor}},clear(e){t(e).clear?.();},setProcessing(e,a){a?n.write(i(e),true):n.delete(i(e));},isProcessing(e){return n.read(i(e))===true},getConfig(e){return n.read(r(e))??{}},setConfig(e,a){let o=n.read(r(e))??{};n.write(r(e),{...o,...a});}}}function _(){let t=globalThis.crypto;return typeof t?.randomUUID=="function"?String(t.randomUUID()):`id-${Date.now()}-${Math.random().toString(36).slice(2)}`}function z(){let t=new Map,n=new Map;function i(r){return t.has(r)||t.set(r,[]),t.get(r)}return {append(r,e,a,o=[],u=""){let s={id:_(),role:e,text:a,files:o,turn:u,updated_at:new Date().toISOString()};return i(r).push(s),s.id},readAll(r){return i(r).slice()},readAfter(r,e){let a=i(r);if(!e)return {records:a.slice(),cursor:a.length>0?a[a.length-1].id:null};let o=a.findIndex(s=>s.id===e),u=o===-1?a.slice():a.slice(o+1);return {records:u,cursor:u.length>0?u[u.length-1].id:e}},clear(r){t.set(r,[]);},setProcessing(r,e){e?n.set(`p:${r}`,true):n.delete(`p:${r}`);},isProcessing(r){return n.get(`p:${r}`)===true},getConfig(r){return n.get(`c:${r}`)??{}},setConfig(r,e){let a=n.get(`c:${r}`)??{};n.set(`c:${r}`,{...a,...e});}}}function y(){return new Date().toISOString()}function x(t){return new TextEncoder().encode(t).byteLength}function S(t){return t?{key:t.key,size:t.size,updatedAt:t.updatedAt,contentType:t.contentType}:null}function w(t){let n=String(t||"").match(/^(\d+)[-_]/);return n?parseInt(n[1],10):0}function L(t){let n=String(t||"").trim();if(!n)return "upload.bin";let i=Math.max(n.lastIndexOf("/"),n.lastIndexOf("\\"));return (i>=0?n.slice(i+1):n)||"upload.bin"}function b(t){return String(t||"").toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"")||"file"}function I(t){if(!t||t===".")return "";let n=String(t).replace(/^\./,"").toLowerCase().replace(/[^a-z0-9]/g,"");return n?`.${n}`:""}function k(t){let n=L(t),i=n.lastIndexOf(".");return i<=0||i===n.length-1?{stem:n,ext:""}:{stem:n.slice(0,i),ext:n.slice(i)}}function M(t){let n=t.lastIndexOf("/");return n>=0?t.slice(n+1):t}function F(t){function n(i){let r=t.stat?S(t.stat(i)):null;if(r)return r;if(!t.exists(i))return null;let e=t.read(i);return e===null?{key:i}:{key:i,size:x(e)}}return {exists(i){return t.exists(i)},putText(i,r,e="text/plain; charset=utf-8"){t.write(i,r);let a=n(i)??{key:i};return a.contentType=e,a.updatedAt=a.updatedAt??y(),a.size=a.size??x(r),a},putBytes(i,r,e="application/octet-stream"){if(t.writeBytes)t.writeBytes(i,r);else {let o=JSON.stringify({__kind:"bytes-array",data:[...r]});t.write(i,o);}let a=n(i)??{key:i};return a.contentType=e,a.updatedAt=a.updatedAt??y(),a.size=a.size??r.byteLength,a},getText(i){let r=t.read(i);if(r===null){if(!t.readBytes)return null;let e=t.readBytes(i);return e===null?null:Buffer.from(e).toString("utf-8")}try{let e=JSON.parse(r);if(e&&e.__kind==="bytes-array"&&Array.isArray(e.data))return new TextDecoder("utf-8").decode(new Uint8Array(e.data))}catch{}return r},getBytes(i){if(t.readBytes){let e=t.readBytes(i);if(e!==null)return e}let r=t.read(i);if(r===null)return null;try{let e=JSON.parse(r);if(e&&e.__kind==="bytes-array"&&Array.isArray(e.data))return new Uint8Array(e.data)}catch{}return new TextEncoder().encode(r)},head:n,list(i=""){return t.listKeys(i).map(r=>n(r)??{key:r}).sort((r,e)=>r.key.localeCompare(e.key))},remove(i){t.remove(i);}}}function $(t){function n(e,a){let o=0,u=[];Array.isArray(a)&&u.push(...a);for(let s of t.list(`${e}/`))u.push(M(s.key));for(let s of u){let l=w(s);Number.isFinite(l)&&l>o&&(o=l);}return o+1}function i(e,a,o){let u=Number(o?.maxLen||32),{stem:s,ext:l}=k(e),h=I(l),A=b(s),g=`${String(a).padStart(3,"0")}-`,d=h,f=u-g.length-d.length;f<1&&(d="",f=u-g.length);let C=A.slice(0,Math.max(1,f)),c=`${g}${C}${d}`;return c.length>u&&(c=c.slice(0,u).replace(/\.$/,"")),c}function r(e,a,o){let u=n(e,o?.seedNames),s=i(a,u,{maxLen:o?.maxLen});for(;t.exists(`${e}/${s}`);)u+=1,s=i(a,u,{maxLen:o?.maxLen});return s}return {nextSerial:n,buildStoredName:i,allocateStoredName:r}}function B(){function t(e,a){if(!Array.isArray(e))return [];let o=[];for(let u of e){if(!u||typeof u!="object")continue;let s=u;typeof s.stored_name=="string"&&o.push({name:typeof s.name=="string"?s.name:s.stored_name,stored_name:s.stored_name,size:typeof s.size=="number"&&Number.isFinite(s.size)?s.size:null,mime_type:typeof s.mime_type=="string"?s.mime_type:null,uploaded_at:typeof s.uploaded_at=="string"?s.uploaded_at:a||null,chat:s.chat===true});}return o}function n(e){return !e||typeof e!="object"?[]:t(e.files,void 0)}function i(e,a){let o=n(e);if(a.length===0)return e.files=o,o;let u=new Set(o.map(s=>s.stored_name));for(let s of a)u.has(s.stored_name)||(o.push(s),u.add(s.stored_name));return e.files=o,o}function r(e,a,o){let u=n(e);if(!Number.isInteger(a)||a<0||a>=u.length)return {ok:false,reason:"index_out_of_range"};let s=u[a];return !s||!s.stored_name?{ok:false,reason:"missing_stored_name"}:o&&o!==s.stored_name?{ok:false,reason:"stale_reference"}:{ok:true,file:s}}return {read:n,normalizeIncoming:t,merge:i,resolve:r}}function Q(t){return {lanes:t}}export{T as a,z as b,F as c,$ as d,B as e,Q as f};//# sourceMappingURL=chunk-MLVTJASJ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-MLVTJASJ.js.map
|