yaml-flow 8.5.3 → 8.6.1
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 +266 -5
- 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 +1 -0
- package/examples/board/test/server-http-test.js +870 -67
- package/examples/board-local/demo-shell-localstorage.html +3 -3
- package/lib/{artifacts-store-lib-D-k-E8Vy.d.ts → artifacts-store-lib-C1rtrkxm.d.ts} +1 -1
- package/lib/{artifacts-store-lib-CVgtQrNZ.d.cts → artifacts-store-lib-CLOtsiav.d.cts} +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 +35 -15
- package/lib/board-live-cards-mcp.d.ts +35 -15
- 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 +32 -12
- package/lib/board-live-cards-node.d.ts +32 -12
- package/lib/board-live-cards-node.js +8 -16
- package/lib/{board-live-cards-public-BGS22cMb.d.ts → board-live-cards-public-CBVjm327.d.ts} +59 -24
- package/lib/{board-live-cards-public-B13InXhC.d.cts → board-live-cards-public-CPJy-aGW.d.cts} +59 -24
- 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 +5 -5
- package/lib/board-live-cards-server-runtime.d.ts +5 -5
- 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 +21 -7
- package/lib/board-worker-adapter.d.cts +17 -2
- package/lib/board-worker-adapter.d.ts +17 -2
- package/lib/board-worker-adapter.js +21 -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-CJn7a6OH.d.ts → chat-storage-lib-Bce-xx6l.d.ts} +1 -1
- package/lib/{chat-storage-lib-0imhRX3l.d.cts → chat-storage-lib-CKylihjm.d.cts} +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-5DB54ZX2.cjs +2 -0
- package/lib/chunk-5EA2ESS4.cjs +16 -0
- package/lib/chunk-6APH25VI.js +2 -0
- package/lib/chunk-76ON3V7R.js +2 -0
- package/lib/chunk-7BKNHFNH.js +2 -0
- package/lib/chunk-CWREBRXS.js +3 -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-GNFE24S7.cjs +2 -0
- package/lib/chunk-GYQXDNNI.cjs +2 -0
- package/lib/chunk-H5KD3JPY.cjs +2 -0
- package/lib/chunk-HLJH7LGW.js +16 -0
- package/lib/chunk-I4WH5U5D.cjs +2 -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-KNFFDVLD.cjs +2 -0
- package/lib/chunk-LBMEVV4U.js +2 -0
- package/lib/chunk-LDAP75GN.js +2 -0
- package/lib/chunk-LODXIALE.cjs +2 -0
- package/lib/chunk-LVNQCE5X.cjs +3 -0
- package/lib/chunk-M7EQRS6W.js +3 -0
- package/lib/chunk-MNEOJWPS.js +10 -0
- package/lib/chunk-NJJ7WEDT.cjs +2 -0
- package/lib/chunk-NMZ6XNLB.cjs +3 -0
- package/lib/chunk-OPNGCSXJ.js +2 -0
- package/lib/chunk-P64UKI3L.cjs +8 -0
- package/lib/chunk-P7ZCDICS.cjs +2 -0
- package/lib/chunk-Q6H7NINN.cjs +5 -0
- package/lib/chunk-Q6VSL327.js +8 -0
- package/lib/chunk-QWBNDVUA.js +5 -0
- package/lib/chunk-S6DRP2HX.cjs +2 -0
- package/lib/chunk-UJ7ZTV4J.cjs +10 -0
- package/lib/chunk-UVE65IPR.cjs +3 -0
- package/lib/chunk-VCCTAUIG.js +2 -0
- package/lib/chunk-VGT3TRQG.js +3 -0
- package/lib/chunk-VLBB3D6B.js +3 -0
- package/lib/chunk-WDPOGXTY.js +2 -0
- package/lib/chunk-X3LC4LII.js +2 -0
- package/lib/chunk-YGKDQLYP.js +2 -0
- package/lib/chunk-YMEIPKLW.cjs +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/server-runtime/index.cjs +1 -7
- package/lib/server-runtime/index.d.cts +6 -6
- package/lib/server-runtime/index.d.ts +6 -6
- 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-Ct-C4tlz.d.cts} +28 -1
- package/lib/{storage-interface-B2WD9D5n.d.ts → storage-interface-Ct-C4tlz.d.ts} +28 -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/lib/{types-30R357js.d.ts → types-BuK2UMxk.d.ts} +4 -4
- package/lib/{types-CIgsh56O.d.cts → types-DRl0Hy_p.d.cts} +4 -4
- package/package.json +2 -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
|
+
import {F,E,D,C as C$1,B,h,g,i,r,o,a,l,q as q$1,s}from'./chunk-WDPOGXTY.js';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:B(s,e.taskName,n)};case "task-completed":return {config:n,state:C$1(s,n,e.taskName,e.result,e.dataHash,e.data)};case "task-failed":return {config:n,state:D(s,n,e.taskName,e.error)};case "task-progress":return {config:n,state:E(s,e.taskName,e.message,e.progress)};case "task-restart":return {config:n,state: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=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=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=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=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$1=i(e);if(Object.keys(s$1).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let d=ct(s$1),u=r(e,n.tasks),l$1=new Set([...u,...n.availableOutputs]),f=[],y=[],O=[],G=[];for(let[v,p]of Object.entries(s$1)){let k=n.tasks[v],N=o(p,e.settings),I=N!=="once";if(k?.status===a.RUNNING||l(k))continue;let D=q$1(p);if(D!==void 0&&k&&k.executionCount>=D||p.circuit_breaker&&k&&k.executionCount>=p.circuit_breaker.max_executions||!I&&k?.status===a.COMPLETED)continue;if(I&&k?.status===a.COMPLETED){let c=h(p),i=false;switch(N){case "data-changed":{c.length>0&&c.some(S=>{for(let[w,T]of Object.entries(s$1))if(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$1))if(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=h(p);if(r.length===0){f.push(v);continue}let o$1=[],g$1=[],h$1=[];for(let c of r){if(l$1.has(c))continue;let i=d[c]||[];i.length===0?o$1.push(c):i.every(S=>l(n.tasks[S]))?h$1.push({token:c,failedProducer:i[0]}):g$1.push(c);}o$1.length>0?O.push({taskName:v,missingTokens:o$1}):h$1.length>0?G.push({taskName:v,failedTokens:h$1.map(c=>c.token),failedProducers:[...new Set(h$1.map(c=>c.failedProducer))]}):g$1.length>0?y.push({taskName:v,waitingOn:g$1}):f.push(v);}let E={};if(f.length>1){let v=s(f,s$1);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 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
|
+
export{W as a,X as b,Y as c,et as d,nt as e,st as f,rt as g,at as h,ot as i,ht as j,kt as k,mt as l,St as m,vt as n,yt as o,Z as p,bt as q,A as r,C as s,U as t,Ct as u};//# sourceMappingURL=chunk-VGT3TRQG.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-VGT3TRQG.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {q as q$1}from'./chunk-MNEOJWPS.js';import {b as b$1}from'./chunk-FW4363Y4.js';import A from'ajv-formats';import {createRequire}from'module';var h={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://nsreehari.github.io/boards/live-cards.schema.json",definitions:{bind_ref:{description:"A card data path reference, e.g. 'card_data.raw_quotes' or 'requires.upstream'",type:"string",pattern:"^(card_data|requires|fetched_sources|computed_values)(\\.|$)"},bind_or_literal:{description:"A literal value or a bind reference object",oneOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"array"},{type:"object",properties:{bind:{$ref:"#/definitions/bind_ref"}},required:["bind"]}]},compute_expr:{description:"A declarative JSON compute expression",type:"object",required:["fn"],properties:{fn:{type:"string",description:"Function name from the built-in vocabulary",enum:["sum","avg","min","max","count","first","last","add","sub","mul","div","round","abs","mod","gt","gte","lt","lte","eq","neq","if","and","or","not","concat","upper","lower","template","filter","pluck","map","sort","slice","flat","unique","group","get","default","now","diff_days","format_date"]},input:{description:"card_data.path, literal, array of inputs, or nested compute_expr",oneOf:[{type:"string"},{type:"number"},{type:"boolean"},{type:"array"},{$ref:"#/definitions/compute_expr"}]},field:{type:"string",description:"For pluck/sum/group \u2014 the object key to extract"},where:{$ref:"#/definitions/compute_expr",description:"For filter \u2014 predicate expression ($ = current item)"},cond:{$ref:"#/definitions/compute_expr",description:"For if \u2014 condition expression"},then:{description:"For if \u2014 value when cond is truthy"},else:{description:"For if \u2014 value when cond is falsy"},format:{type:"string",description:"For format_date \u2014 date format string"}}},meta:{type:"object",properties:{title:{type:"string"},tags:{type:"array",items:{type:"string"}}}},requires:{type:"array",items:{type:"string"},description:"IDs of upstream nodes this node depends on"},provides:{type:"array",items:{type:"object",required:["bindTo","ref"],properties:{bindTo:{type:"string",description:"Token name published downstream"},ref:{type:"string",description:"Path to read value from (card_data.*, requires.*, fetched_sources.*, computed_values.*)"}}},description:"Explicit bindings exposing computed or card_data values downstream as named tokens"},compute_step:{description:"A single ordered compute step: reads card_data.*/requires.*/computed_values.*, writes to computed_values[bindTo]",type:"object",required:["bindTo","expr"],properties:{bindTo:{type:"string",description:"Key in computed_values to write result"},expr:{type:"string",description:"JSONata expression evaluated against { card_data, requires, fetched_sources, computed_values }"}}},source_def:{description:"One source entry. The engine requires 'bindTo' (compute namespace key) and 'outputFile' (delivery signal path). bindTo and outputFile must be unique across all source_defs in a card. Every other property is yours \u2014 add whatever your task-executor needs: kind, url, headers, mailbox, channel, model, query, etc. The full object is passed verbatim as the --in JSON to the executor.",type:"object",required:["bindTo","outputFile"],additionalProperties:true,properties:{bindTo:{type:"string",description:"Key under fetched_sources.* available in compute expressions"},outputFile:{type:"string",description:"Board-relative path the executor writes its JSON result to. Presence of this file signals delivery."},projections:{type:"object",description:"Named data projections from card_data or requires, evaluated before the executor is called. Each key is a ref name; each value is a JSONata expression rooted at card_data or requires. The resolved values are passed to the executor as _projections. fetched_sources, computed_values, and source_defs are not accessible here \u2014 sources run before those exist.",additionalProperties:{type:"string"}},optionalForCompletionGating:{type:"boolean",default:false,description:"When true this source does not gate card completion. Default false when absent, so source_defs are completion-gating by default."},timeout:{type:"integer",minimum:0,default:12e4,description:"Executor/script timeout in ms. Default: 120 000 (2 min)."},script:{type:"string",description:"Legacy direct-run: shell command executed when no .task-executor is registered. stdout is captured as the result."}}},render_element:{type:"object",required:["kind"],properties:{id:{type:"string",description:"Optional element ID for targeted updates"},kind:{enum:["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]},label:{type:"string",description:"Heading above this element"},className:{type:"string",description:"Bootstrap grid class, e.g. 'col-12 col-md-6'"},visible:{type:"string",description:"card_data/requires/fetched_sources/computed_values path \u2014 element shown only if truthy"},data:{type:"object",properties:{bind:{$ref:"#/definitions/bind_ref",description:"card_data/requires/fetched_sources/computed_values path to read data from"},writeTo:{$ref:"#/definitions/bind_ref",description:"card_data path for user input (form, filter, todo, notes)"},columns:{type:"array",items:{type:"string"},description:"table: visible columns"},maxRows:{type:"integer",description:"table/list: max rows to display"},sortable:{type:"boolean",default:true,description:"table: enable click-to-sort"},placeholder:{type:"string",description:"Empty-state message"},chartType:{enum:["bar","line","pie","doughnut"]},chartOptions:{type:"object",description:"Chart.js options passthrough"},fields:{type:"object",description:"JSON Schema for form/filter fields"},thresholds:{type:"object",properties:{green:{type:"string"},amber:{type:"string"}}},colorMap:{type:"object",description:"badge: value \u2192 Bootstrap color"},style:{enum:["heading","muted","default"],description:"text: display style"},upload:{type:"boolean",default:true,description:"file-upload: show drop zone (false = read-only file list)"},accept:{type:"array",items:{type:"string"},description:"file-upload: allowed extensions"},multiple:{type:"boolean",default:true,description:"file-upload: allow multiple files"},fileAttach:{type:"boolean",default:false,description:"chat: enable inline file attachments"},fileAccept:{type:"array",items:{type:"string"},description:"chat: allowed attachment extensions"},buttons:{type:"array",description:"actions: button definitions",items:{type:"object",required:["id","label"],properties:{id:{type:"string"},label:{type:"string"},style:{type:"string",description:"Bootstrap button variant, e.g. 'success', 'outline-danger'"},size:{type:"string",default:"sm"},disabled:{oneOf:[{type:"boolean"},{type:"string",description:"card_data/requires/fetched_sources/computed_values path \u2014 truthy = disabled"}]}}}}}}}},view:{type:"object",required:["elements"],properties:{elements:{type:"array",minItems:1,items:{$ref:"#/definitions/render_element"}},layout:{type:"object",properties:{board:{type:"object",properties:{col:{type:"integer",minimum:1,maximum:12},order:{type:"integer"}}},canvas:{type:"object",properties:{x:{type:"number"},y:{type:"number"},w:{type:"number"},h:{type:"number"}}}}},features:{type:"object",properties:{chat:{type:"boolean",default:false},notes:{type:"boolean",default:false},refresh:{type:"boolean",default:true}}}}}},title:"LiveCard",description:"A unified card node. Behavior depends on which sections are present (source_defs, compute, view, etc.)",type:"object",required:["id"],additionalProperties:false,properties:{id:{type:"string"},requires:{$ref:"#/definitions/requires"},provides:{$ref:"#/definitions/provides"},meta:{$ref:"#/definitions/meta"},view:{$ref:"#/definitions/view"},card_data:{type:"object",description:"Authored card data and runtime metadata. Includes uploaded-file metadata maintained by host handlers and inference evaluation results.",properties:{files:{type:"array",description:"Optional uploaded-file metadata maintained by host handlers. Stored name is normalized and serial-prefixed (for example 001-my_file.pdf).",items:{type:"object",required:["name","stored_name"],properties:{name:{type:"string",minLength:1},stored_name:{type:"string",minLength:5,maxLength:32,pattern:"^[0-9]{3,}-[a-z0-9._-]+$"},size:{oneOf:[{type:"integer",minimum:0},{type:"null"}]},mime_type:{type:"string"},path:{type:"string",pattern:"^[^\\s]+/files/[0-9]{3,}-[a-z0-9._-]+$"},uploaded_at:{type:"string",format:"date-time"},chat:{type:"boolean",description:"Whether this file entry is associated with a chat interaction"}},additionalProperties:false}}},additionalProperties:true},source_defs:{type:"array",description:"Source entries. Each entry is passed verbatim to the board's .task-executor (registered via init --task-executor) as the --in JSON file. The executor fetches/generates the data and writes JSON to --out. If no executor is registered, the built-in executor runs the entry's 'cli' command directly. Sources gate completion by default. Set optionalForCompletionGating: true for enrichment-only source_defs that should not block task-completed.",items:{$ref:"#/definitions/source_def"}},compute:{type:"array",description:"Ordered array of compute steps. Each reads card_data.*/requires.*/fetched_sources.*/computed_values.* and writes to ephemeral computed_values[bindTo].",items:{$ref:"#/definitions/compute_step"}}}};var _=b$1(q$1(),1);var $=createRequire(import.meta.url),q=$("./jsonata-sync.cjs"),f=null;var b=/\b(card_data|requires|fetched_sources|computed_values|source_defs)\b/g,N=/^\s*(card_data|requires|fetched_sources|computed_values|source_defs)(\.|$)/;function E(e){let t=new Set,o;for(b.lastIndex=0;(o=b.exec(e))!==null;)t.add(o[1]);return t}function v(e){let t=N.exec(e);return t?t[1]:null}function g(e,t,o,a){try{q(e);}catch(s){let d=s instanceof Error?s.message:String(s);a.push(`${t}: invalid JSONata expression (${d})`);return}let i=E(e);for(let s of i)o.has(s)||a.push(`${t}: disallowed namespace "${s}" in expression`);}function y(e,t,o){if(Array.isArray(e)){e.forEach((i,s)=>{y(i,`${t}/${s}`,o);});return}if(typeof e=="string"){let i=v(e);if(!i)return;new Set(["card_data","requires","computed_values"]).has(i)||o.push(`${t}: disallowed namespace "${i}" in view reference`);return}if(!e||typeof e!="object")return;let a=e;for(let[i,s]of Object.entries(a))y(s,`${t}/${i}`,o);}function S(){if(f)return f;let e=new _.default({allErrors:true});return A(e),f=e.compile(h),f}function R(e){let t=S(),o=t(e),a=(t.errors??[]).map(i=>`${i.instancePath||"/"}: ${i.message??"unknown error"}`);if(e&&typeof e=="object"&&!Array.isArray(e)){let i=e.source_defs;if(Array.isArray(i)){let s=new Set,d=new Set;i.forEach((c,u)=>{if(!c||typeof c!="object"||Array.isArray(c))return;let r=c;typeof r.bindTo=="string"&&r.bindTo&&(s.has(r.bindTo)&&a.push(`/source_defs/${u}/bindTo: bindTo "${r.bindTo}" must be unique across all source_defs`),s.add(r.bindTo)),typeof r.outputFile=="string"&&r.outputFile&&(d.has(r.outputFile)&&a.push(`/source_defs/${u}/outputFile: outputFile "${r.outputFile}" must be unique across all source_defs`),d.add(r.outputFile));});}}return !o||a.length>0?{ok:false,errors:a}:{ok:true,errors:[]}}function T(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:true,errors:[]};let o=e,a=o.compute;Array.isArray(a)&&a.forEach((r,p)=>{if(!r||typeof r!="object"||Array.isArray(r))return;let n=r.expr;typeof n!="string"||n.trim().length===0||g(n,`/compute/${p}/expr`,new Set(["card_data","requires","fetched_sources","computed_values"]),t);});let i=new Set(["card_data","requires","fetched_sources","computed_values"]),s=o.provides;Array.isArray(s)&&s.forEach((r,p)=>{if(!r||typeof r!="object"||Array.isArray(r))return;let n=r.ref;if(typeof n!="string"||n.trim().length===0)return;let l=v(n);l===null?t.push(`/provides/${p}/ref: path "${n}" must start with a valid namespace (${[...i].join(", ")})`):i.has(l)||t.push(`/provides/${p}/ref: disallowed namespace "${l}" in path "${n}" (valid: ${[...i].join(", ")})`);});let d=o.view;d&&typeof d=="object"&&!Array.isArray(d)&&y(d,"/view",t);let c=new Set(["card_data","requires"]),u=o.source_defs;return Array.isArray(u)&&u.forEach((r,p)=>{if(!r||typeof r!="object"||Array.isArray(r))return;let n=r.projections;if(!(!n||typeof n!="object"||Array.isArray(n)))for(let[l,m]of Object.entries(n))typeof m!="string"||m.trim().length===0||g(m,`/source_defs/${p}/projections/${l}`,c,t);}),{ok:t.length===0,errors:t}}function V(e){return O(e)}function O(e){let t=R(e);if(!t.ok)return t;let o=T(e);return o.ok?{ok:true,errors:[]}:{ok:false,errors:o.errors}}
|
|
2
|
+
export{R as a,T as b,V as c,O as d};//# sourceMappingURL=chunk-VLBB3D6B.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-VLBB3D6B.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
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}}export{X as A,W as B,Z as C,$ as D,J as E,Q as F,f as a,I as b,D as c,A as d,y as e,R as f,c as g,p as h,G as i,b as j,L as k,U as l,v as m,w as n,h as o,N as p,P as q,M as r,H as s,F as t,q as u,K as v,j as w,Y as x,B as y,O as z};//# sourceMappingURL=chunk-WDPOGXTY.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-WDPOGXTY.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function f(r){function a(e){return {status:"success",data:e}}function s(e){return {status:"fail",error:e}}function u(e){return {status:"error",error:e instanceof Error?e.message:String(e)}}return {list(e){try{let t=e.params?.prefix??"";return a({artifacts:r.list(t)})}catch(t){return u(t)}},head(e){try{let t=e.params?.key;return t?a({artifact:r.head(t)}):s("head requires params.key")}catch(t){return u(t)}},put(e){try{let t=e.params?.key,i=e.params?.contentType;if(!t)return s("put requires params.key");let n=e.body;if(typeof n=="string")return a({artifact:r.putText(t,n,i)});if(n&&typeof n=="object"&&typeof n.text=="string")return a({artifact:r.putText(t,n.text,i)});if(n&&typeof n=="object"&&Array.isArray(n.bytes)){let o=n.bytes,m=new Uint8Array(o.map(c=>Math.max(0,Math.min(255,Number(c)||0))));return a({artifact:r.putBytes(t,m,i)})}return s("put requires body as string, {text}, or {bytes:number[]}")}catch(t){return u(t)}},get(e){try{let t=e.params?.key,i=e.params?.as??"base64";if(!t)return s("get requires params.key");let n=r.head(t);if(!n)return s(`artifact "${t}" not found`);if(i==="text"){let m=r.getText(t);return m===null?s(`artifact "${t}" not found`):a({key:t,contentType:n.contentType,size:n.size,text:m})}let o=r.getBytes(t);return o===null?s(`artifact "${t}" not found`):a({key:t,contentType:n.contentType,size:n.size,bytes:[...o]})}catch(t){return u(t)}},del(e){try{let t=e.params?.key;return t?(r.remove(t),a({ok:!0})):s("del requires params.key")}catch(t){return u(t)}}}}export{f as a};//# sourceMappingURL=chunk-X3LC4LII.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-X3LC4LII.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {u}from'./chunk-VGT3TRQG.js';import {a}from'./chunk-JMDHDY6M.js';function b(e){return JSON.parse(JSON.stringify(e))}function E(e){let r=e.provides&&e.provides.length>0?e.provides.map(n=>n.bindTo):[e.id];return {requires:e.requires&&e.requires.length>0?[...e.requires]:void 0,provides:r,taskHandlers:[e.id],description:e.meta?.title??e.id}}function I(e){let r=new Map;for(let[n,u]of e.entries()){let o=u.provides&&u.provides.length>0?u.provides:[{bindTo:n,ref:"card_data"}];for(let h of o)r.set(h.bindTo,n);}return r}function O(e,r){let n=I(e),u=e.get(r);if(u){for(let o of u.requires??[])if(!n.has(o))throw new Error(`Card "${r}" requires token "${o}" but no card provides it`)}}var F={CARD_PREFIX:"yf:cards:",RUNTIME_OUT_PREFIX:"yf:runtime-out:cards:",STATUS_KEY:"yf:runtime-out:status",writeCard(e,r){try{localStorage.setItem(this.CARD_PREFIX+e,JSON.stringify(r));}catch(n){console.warn(`Failed to write card ${e} to localStorage:`,n);}},readCard(e){try{let r=localStorage.getItem(this.CARD_PREFIX+e);return r?JSON.parse(r):null}catch(r){return console.warn(`Failed to read card ${e} from localStorage:`,r),null}},readAllCards(e){let r={};for(let n of e){let u=this.readCard(n);u&&(r[n]=u);}return r},writeComputedArtifact(e){if(!(!e||!e.card_id))try{localStorage.setItem(this.RUNTIME_OUT_PREFIX+String(e.card_id),JSON.stringify(e));}catch(r){console.warn(`Failed to write computed artifact ${e.card_id}:`,r);}},readComputedArtifact(e){try{let r=localStorage.getItem(this.RUNTIME_OUT_PREFIX+e);return r?JSON.parse(r):null}catch(r){return console.warn(`Failed to read computed artifact ${e}:`,r),null}},readAllComputedArtifacts(e){let r={};for(let n of e){let u=this.readComputedArtifact(n);u&&(r[n]=u);}return r},writeStatusSnapshot(e){try{localStorage.setItem(this.STATUS_KEY,JSON.stringify(e));}catch(r){console.warn("Failed to write status snapshot to localStorage:",r);}},readStatusSnapshot(){try{let e=localStorage.getItem(this.STATUS_KEY);return e?JSON.parse(e):null}catch(e){return console.warn("Failed to read status snapshot from localStorage:",e),null}},clear(){let e=[];for(let r=0;r<localStorage.length;r++){let n=localStorage.key(r);n&&(n.startsWith(this.CARD_PREFIX)||n.startsWith(this.RUNTIME_OUT_PREFIX)||n===this.STATUS_KEY)&&e.push(n);}for(let r of e)localStorage.removeItem(r);}};function H(e,r={}){let n=Array.isArray(e)?{}:{id:e.id,title:e.title,mode:e.mode,positions:e.positions,settings:e.settings},u$1=Array.isArray(e)?e:e.nodes,o=new Map;for(let t of u$1){if(o.has(t.id))throw new Error(`Duplicate card ID: "${t.id}"`);o.set(t.id,b(t));}let h=new Set,S=r.taskExecutor,L=r.sourceAdapters??{},d=r.defaultSourceAdapter,m=null,A=(t,g)=>{let a={events:t,graph:g,nodes:v()};for(let w of h)w(a);},_=t=>async g=>{let a$1=o.get(t);if(!a$1)return "task-initiate-failure";let w={};for(let R of a$1.requires??[]){let y=g.state[R];if(!y||typeof y!="object")continue;let k=y.provides_data;!k||typeof k!="object"||Object.prototype.hasOwnProperty.call(k,R)&&(w[R]=k[R]);}let p={};if(a$1.source_defs&&a$1.source_defs.length>0){let R=L[t]??d,y=S?await S({card:a$1,input:g}):R?await R({card:a$1,input:g}):void 0;if(y&&typeof y=="object")for(let k of a$1.source_defs)Object.prototype.hasOwnProperty.call(y,k.bindTo)?p[k.bindTo]=y[k.bindTo]:a$1.source_defs.length===1&&(p[k.bindTo]=y);}let c={id:a$1.id,card_data:b(a$1.card_data??{}),requires:w,source_defs:a$1.source_defs,compute:a$1.compute};c._sourcesData=p,c.compute&&c.compute.length>0&&await a.run(c,{sourcesData:p});let T={};if(a$1.provides&&a$1.provides.length>0)for(let{bindTo:R,ref:y}of a$1.provides)T[R]=a.resolve(c,y);else T[a$1.id]={...c.card_data??{},...c.computed_values??{},...c._sourcesData??{}};let B={provides_data:T,card_data:c.card_data??{},computed_values:c.computed_values??{},fetched_sources:p,requires:w};return m?.resolveCallback(g.callbackToken,B),"task-initiated"},s={},f={};for(let[t,g]of o.entries())O(o,t),s[t]=E(g),f[t]=_(t);let l={id:n.id??`browser-board-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n.settings??{},...r.graphSettings??{}},tasks:s},C=r.reactiveOptions?.onDrain,i=u(l,{...r.reactiveOptions??{},handlers:f,onDrain:(t,g,a)=>{C?.(t,g,a),A(t,g);}},r.executionId);m=i;function v(){let t=i.getState(),g=[];for(let[a,w]of o.entries()){let p=t.state.tasks[a]?.data,c=t.state.tasks[a],T={...w.card_data??{},...p&&typeof p.card_data=="object"?p.card_data:{}},B=c?.status==="running"?"loading":c?.status,R={...T,...B?{status:B}:{},...c?.lastUpdated?{lastRun:c.lastUpdated}:{},...c?.status==="failed"&&c.error?{error:c.error}:{}};g.push({id:a,card:b(w),card_data:R,requires:p&&typeof p.requires=="object"?b(p.requires):{},computed_values:p&&typeof p.computed_values=="object"?b(p.computed_values):{},runtime_state:c?b(c):{}});}return g}return {getGraph:()=>i,getState:()=>i.getState(),getSchedule:()=>i.getSchedule(),getNodes:()=>v(),getBoard:()=>({...n,nodes:v()}),subscribe(t){return h.add(t),t({events:[],graph:i.getState(),nodes:v()}),()=>h.delete(t)},addCard(t){if(o.has(t.id))throw new Error(`Card "${t.id}" already exists`);o.set(t.id,b(t)),O(o,t.id),i.registerHandler(t.id,_(t.id)),i.addNode(t.id,E(t));},upsertCard(t){o.set(t.id,b(t)),O(o,t.id),i.registerHandler(t.id,_(t.id)),i.addNode(t.id,E(t));},removeCard(t){o.delete(t),i.unregisterHandler(t),i.removeNode(t);},patchCardState(t,g){let a=o.get(t);if(!a)throw new Error(`Card "${t}" not found`);a.card_data={...a.card_data??{},...g},i.retrigger(t);},retrigger(t){i.retrigger(t);},retriggerAll(){i.retriggerAll(Array.from(o.keys()));},push(t){i.push(t);},pushAll(t){i.pushAll(t);},dispose(){h.clear(),i.dispose();}}}function G(e){return e==="running"||e==="in-progress"?"loading":e==="failed"?"error":"fresh"}function D(e){return e==="loading"?"in-progress":e==="error"?"failed":e==="stale"?"pending":e==="fresh"?"completed":"pending"}function M(e,r){let n=r&&typeof r=="object"&&!Array.isArray(r)?r:{};return {schema_version:n.schema_version||"v1",card_id:typeof n.card_id=="string"?n.card_id:e,card_data:n.card_data&&typeof n.card_data=="object"&&!Array.isArray(n.card_data)?structuredClone(n.card_data):{},computed_values:n.computed_values&&typeof n.computed_values=="object"&&!Array.isArray(n.computed_values)?structuredClone(n.computed_values):{}}}function P(e,r){if(!e||typeof e!="object")throw new Error("payload must be an object");if(!r)throw new Error("cardId is required");let u=(Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).find(t=>t.id===r);if(!u)throw new Error(`cardDefinitions has no entry with id ${r}`);let o=e.statusSnapshot&&typeof e.statusSnapshot=="object"?e.statusSnapshot:{},h=e.cardRuntimeById&&typeof e.cardRuntimeById=="object"?e.cardRuntimeById:{},S=e.dataObjectsByToken&&typeof e.dataObjectsByToken=="object"?e.dataObjectsByToken:{},d=(Array.isArray(o.cards)?o.cards:[]).find(t=>t.name===r),m=structuredClone(u),A=M(r,h[r]),s={...m.card_data&&typeof m.card_data=="object"&&!Array.isArray(m.card_data)?m.card_data:{},...A.card_data||{},status:G(d?.status),lastRun:d?.runtime?.last_transition_at??null};d?.error?.message&&(s.error=d.error.message);let f=d?{task_status:d.status??null,card_status:G(d.status),runtime:structuredClone(d.runtime??{}),error:d.error?structuredClone(d.error):null,blocked_by:Array.isArray(d.blocked_by)?structuredClone(d.blocked_by):[],requires_missing:Array.isArray(d.requires_missing)?structuredClone(d.requires_missing):[]}:{task_status:null,card_status:s.status??"fresh",runtime:{last_transition_at:s.lastRun??null},error:s.error?{message:s.error}:null,blocked_by:[],requires_missing:[]},l=Array.isArray(m.requires)?m.requires:[],C={};for(let[t,g]of Object.entries(S))C[t]=structuredClone(g);for(let t of l)Object.prototype.hasOwnProperty.call(C,t)||(C[t]=null);let v=(e.cardChatsByCardId&&typeof e.cardChatsByCardId=="object"?e.cardChatsByCardId:{})[r],q=v?{messages:Array.isArray(v.messages)?v.messages:[],receiving:!!v.receiving,processing:!!v.processing}:null;return {id:r,card:m,card_data:s,requires:C,computed_values:A.computed_values,runtime_state:f,card_chats:q}}function $(e){if(!e||typeof e!="object")throw new Error("payload must be an object");return (Array.isArray(e.cardDefinitions)?e.cardDefinitions:[]).map(n=>P(e,n.id))}function J({boardPath:e,cardDefinitions:r,runtimeModels:n,graphState:u}){let o=Array.isArray(r)?r:[],h=Array.isArray(n)?n:[],S=new Map(h.map(s=>[s.id,s])),d=u.state?.tasks??{},m={};for(let s of h)s?.id&&(m[s.id]={schema_version:"v1",card_id:s.id,card_data:structuredClone(s.card_data??{}),computed_values:structuredClone(s.computed_values??{})});let A={};for(let s of Object.keys(d)){let f=d[s]?.data?.provides_data;if(f&&typeof f=="object")for(let l of Object.keys(f))A[l]=structuredClone(f[l]);}let _=o.map(s=>{let f=S.get(s.id)??{},l=d[s.id],C=typeof l?.status=="string"?l.status:D(f.card_data?.status),i=typeof l?.error=="string"?l.error:typeof f.card_data?.error=="string"?f.card_data.error:null;return {name:s.id,status:C,...i?{error:{message:i,code:"TASK_FAILED",at:l?.failedAt??null,source:"browser-runtime"}}:{},requires:Array.isArray(s.requires)?s.requires:[],requires_satisfied:[],requires_missing:[],provides_declared:Array.isArray(s.provides)?s.provides.map(v=>v.bindTo):[s.id],provides_runtime:Object.keys(l?.data?.provides_data??{}).sort(),blocked_by:[],unblocks:[],runtime:{attempt_count:l?.executionCount??0,restart_count:l?.retryCount??0,in_progress_since:C==="in-progress"?l?.startedAt??null:null,last_transition_at:l?.lastUpdated??f.card_data?.lastRun??null,last_completed_at:l?.completedAt??null,last_restarted_at:l?.startedAt??null,status_age_ms:null}}});return {cardDefinitions:structuredClone(o),cardRuntimeById:m,dataObjectsByToken:A,statusSnapshot:{schema_version:"v1",meta:{board:{path:e??"browser-runtime"}},summary:{card_count:_.length,completed:_.filter(s=>s.status==="completed").length,eligible:0,pending:_.filter(s=>s.status==="pending").length,blocked:0,unresolved:0,failed:_.filter(s=>s.status==="failed").length,in_progress:_.filter(s=>s.status==="in-progress").length,orphan_cards:0,topology:{edge_count:0,max_fan_out_card:null,max_fan_out:0}},cards:_}}}export{F as a,H as b,P as c,$ as d,J as e};//# sourceMappingURL=chunk-YGKDQLYP.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-YGKDQLYP.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';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)}}}}exports.a=y;//# sourceMappingURL=chunk-YMEIPKLW.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-YMEIPKLW.cjs.map
|
package/lib/config/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';
|
|
1
|
+
'use strict';var chunk2MZUYY65_cjs=require('../chunk-2MZUYY65.cjs');require('../chunk-GNFE24S7.cjs');Object.defineProperty(exports,"resolveConfigTemplates",{enumerable:true,get:function(){return chunk2MZUYY65_cjs.b}});Object.defineProperty(exports,"resolveVariables",{enumerable:true,get:function(){return chunk2MZUYY65_cjs.a}});//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/lib/config/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export{b as resolveConfigTemplates,a as resolveVariables}from'../chunk-DAXACY63.js';import'../chunk-FW4363Y4.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
'use strict';var child_process=require('child_process'),module$1=require('module');require('ajv-formats');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var x={NOT_STARTED:"not-started",RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function C(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function O(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function G(e){return e.tasks??{}}function I(e){return e?e.status===x.FAILED||e.status===x.INACTIVATED:false}function ae(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ie(e){return e.maxExecutions}function ce(e,t){let r=new Set;for(let[n,s]of Object.entries(t))if(s.status===x.COMPLETED){let o=e.tasks[n];o&&C(o).forEach(c=>r.add(c));}return Array.from(r)}function ue(e,t){let r={};return e.forEach(n=>{let s=t[n];if(!s)return;C(s).forEach(a=>{r[a]||(r[a]=[]),r[a].push(n);});}),r}function de(e,t,r){let n=e.tasks[t]??P(),s={};if(r){let a=r.tasks[t],c=O(a);for(let p of c)for(let[i,d]of Object.entries(r.tasks))if(C(d).includes(p)){let u=e.tasks[i];u?.lastDataHash&&(s[p]=u.lastDataHash);break}}let o={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function pe(e,t,r,n,s,o){let a=e.tasks[r]??P(),c=t.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let p;n&&c.on&&c.on[n]?p=c.on[n]:p=C(c);let i=a.startConsumedHashes?{...a.startConsumedHashes}:{...a.lastConsumedHashes};if(!a.startConsumedHashes){let l=c.requires??[];for(let k of l)for(let[m,y]of Object.entries(t.tasks))if(C(y).includes(k)){let S=e.tasks[m];S?.lastDataHash&&(i[k]=S.lastDataHash);break}}let d={...a,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:a.executionCount+1,lastEpoch:a.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:i,error:void 0},u=[...new Set([...e.availableOutputs,...p])];return {...e,tasks:{...e.tasks,[r]:d},availableOutputs:u,lastUpdated:new Date().toISOString()}}function fe(e,t,r,n){let s=e.tasks[r]??P(),o=t.tasks[r];if(o?.retry){let p=s.retryCount+1;if(p<=o.retry.max_attempts){let i={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:i},lastUpdated:new Date().toISOString()}}}let a={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},c=e.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(c=[...new Set([...e.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&a.executionCount>=o.circuit_breaker.max_executions){let p=o.circuit_breaker.on_break;c=[...new Set([...c,...p])];}return {...e,tasks:{...e.tasks,[r]:a},availableOutputs:c,lastUpdated:new Date().toISOString()}}function le(e,t,r,n){let s=e.tasks[t]??P(),o={...s,progress:typeof n=="number"?n:s.progress,messages:[...s.messages??[],...r?[{message:r,timestamp:new Date().toISOString(),status:s.status}]:[]],lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function ge(e,t){let r=e.tasks[t];if(!r)return e;let n={...r,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 {...e,tasks:{...e.tasks,[t]:n},lastUpdated:new Date().toISOString()}}function P(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Y(e,t){let r=t??`live-${Date.now()}`,n={};for(let o of Object.keys(e.tasks))n[o]=V();let s={status:"running",tasks:n,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:r,executionConfig:{executionMode:e.settings.execution_mode??"eligibility-mode",conflictStrategy:e.settings.conflict_strategy??"alphabetical",completionStrategy:e.settings.completion}};return {config:e,state:s}}function X(e,t){let{config:r,state:n}=e;if("executionId"in t&&t.executionId&&t.executionId!==n.executionId)return e;switch(t.type){case "task-started":return {config:r,state:de(n,t.taskName,r)};case "task-completed":return {config:r,state:pe(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:fe(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:le(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:ge(n,t.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...t.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Ee(n,t.action)};case "task-upsert":return M(e,t.taskName,t.taskConfig);case "task-removal":return q(e,t.taskName);case "node-requires-add":return F(e,t.nodeName,t.tokens);case "node-requires-remove":return U(e,t.nodeName,t.tokens);case "node-provides-add":return $(e,t.nodeName,t.tokens);case "node-provides-remove":return K(e,t.nodeName,t.tokens);default:return e}}function L(e,t){return t.reduce((r,n)=>X(r,n),e)}function M(e,t,r){let n=!!e.config.tasks[t];return {config:{...e.config,tasks:{...e.config.tasks,[t]:r}},state:{...e.state,tasks:{...e.state.tasks,[t]:n?e.state.tasks[t]:V()},lastUpdated:new Date().toISOString()}}}function q(e,t){if(!e.config.tasks[t])return e;let{[t]:r,...n}=e.config.tasks,{[t]:s,...o}=e.state.tasks;return {config:{...e.config,tasks:n},state:{...e.state,tasks:o,lastUpdated:new Date().toISOString()}}}function F(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:[...s,...o]}}},state:e.state}}function U(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:o}}},state:e.state}}function $(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=C(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:[...s,...o]}}},state:e.state}}function K(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=C(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:o}}},state:e.state}}function z(e,t){return X(e,{type:"inject-tokens",tokens:t,timestamp:new Date().toISOString()})}function Q(e,t){let r=new Set(t),n=e.state.availableOutputs.filter(s=>!r.has(s));return n.length===e.state.availableOutputs.length?e:{config:e.config,state:{...e.state,availableOutputs:n,lastUpdated:new Date().toISOString()}}}function Z(e,t){return !e.config.tasks[t]||!e.state.tasks[t]?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:V()},lastUpdated:new Date().toISOString()}}}function ee(e,t){let r=e.state.tasks[t];return !r||r.status==="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"inactivated",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function te(e,t){let r=e.state.tasks[t];return !r||r.status!=="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"not-started",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function xe(e,t){let r=e.config.tasks[t];if(!r)return;let n=e.state.tasks[t]??V();return {name:t,config:r,state:n}}function ne(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function Ce(e){if(!e||typeof e!="object")throw new Error("Invalid snapshot: expected an object");let t=e;if(!t.config||typeof t.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!t.state||typeof t.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=t.config,n=t.state;if(!r.settings||typeof r.settings!="object")throw new Error("Invalid snapshot: config.settings missing");if(!r.tasks||typeof r.tasks!="object")throw new Error("Invalid snapshot: config.tasks missing");if(!n.tasks||typeof n.tasks!="object")throw new Error("Invalid snapshot: state.tasks missing");if(!Array.isArray(n.availableOutputs))throw new Error("Invalid snapshot: state.availableOutputs must be an array");return {config:r,state:n}}function V(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Ee(e,t){let r=new Date().toISOString();switch(t){case "stop":return {...e,status:"stopped",lastUpdated:r};case "pause":return {...e,status:"paused",lastUpdated:r};case "resume":return {...e,status:"running",lastUpdated:r};default:return e}}function B(e){let{config:t,state:r}=e,n=G(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=_e(n),a=ce(t,r.tasks),c=new Set([...a,...r.availableOutputs]),p=[],i=[],d=[],u=[];for(let[k,m]of Object.entries(n)){let y=r.tasks[k],S=ae(m,t.settings),w=S!=="once";if(y?.status===x.RUNNING||I(y))continue;let R=ie(m);if(R!==void 0&&y&&y.executionCount>=R||m.circuit_breaker&&y&&y.executionCount>=m.circuit_breaker.max_executions||!w&&y?.status===x.COMPLETED)continue;if(w&&y?.status===x.COMPLETED){let v=O(m),b=false;switch(S){case "data-changed":{v.length>0&&v.some(_=>{for(let[A,j]of Object.entries(n))if(C(j).includes(_)){let N=r.tasks[A];if(!N)continue;let D=y.lastConsumedHashes?.[_];return N.lastDataHash==null?N.executionCount>y.lastEpoch:N.lastDataHash!==D}return false})||(b=true);break}case "epoch-changed":{v.length>0&&v.some(_=>{for(let[A,j]of Object.entries(n))if(C(j).includes(_)){let N=r.tasks[A];if(N&&N.executionCount>y.lastEpoch)return true}return false})||(b=true);break}case "time-based":{let E=m.refreshInterval??0;if(E<=0){b=true;break}let _=y.completedAt;if(!_){b=true;break}(Date.now()-Date.parse(_))/1e3<E&&(b=true);break}case "manual":b=true;break}if(b)continue}let f=O(m);if(f.length===0){p.push(k);continue}let h=[],g=[],T=[];for(let v of f){if(c.has(v))continue;let b=o[v]||[];b.length===0?h.push(v):b.every(_=>I(r.tasks[_]))?T.push({token:v,failedProducer:b[0]}):g.push(v);}h.length>0?d.push({taskName:k,missingTokens:h}):T.length>0?u.push({taskName:k,failedTokens:T.map(v=>v.token),failedProducers:[...new Set(T.map(v=>v.failedProducer))]}):g.length>0?i.push({taskName:k,waitingOn:g}):p.push(k);}let l={};if(p.length>1){let k=ue(p,n);for(let[m,y]of Object.entries(k))y.length>1&&(l[m]=y);}return {eligible:p,pending:i,unresolved:d,blocked:u,conflicts:l}}function _e(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of C(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function Oe(e){let{config:t,state:r}=e,n=G(t),s=Object.keys(n),o=0,a=0,c=0,p=0,i=0,d=0;for(let R of s){let f=r.tasks[R];if(!f||f.status===x.NOT_STARTED)i++;else switch(f.status){case x.RUNNING:o++;break;case x.COMPLETED:a++;break;case x.FAILED:c++;break;case "inactivated":d++;break;default:p++;}}let u={};for(let[R,f]of Object.entries(n)){for(let h of C(f))u[h]||(u[h]=[]),u[h].push(R);if(f.on)for(let h of Object.values(f.on))for(let g of h)u[g]||(u[g]=[]),u[g].includes(R)||u[g].push(R);if(f.on_failure)for(let h of f.on_failure)u[h]||(u[h]=[]),u[h].includes(R)||u[h].push(R);}let l=new Set,k=0,m=0;for(let[R,f]of Object.entries(n)){let h=r.tasks[R];if(h?.status===x.COMPLETED||h?.status===x.RUNNING)continue;let g=false,T=false;for(let v of O(f)){let b=u[v]||[];b.length===0?(l.add(v),g=true):b.every(_=>{let A=r.tasks[_];return A?.status===x.FAILED||A?.status==="inactivated"})&&(T=true);}g&&k++,T&&!g&&m++;}let y=[];for(let[R,f]of Object.entries(u))f.length>1&&y.push(R);let S=Ae(n,u),w=Ge(s,S);return {totalNodes:s.length,running:o,completed:a,failed:c,waiting:p,notStarted:i,disabled:d,unresolvedCount:k,blockedCount:m,openDependencies:[...l],cycles:w,conflictTokens:y}}function Ae(e,t){let r={};for(let[n,s]of Object.entries(e)){r[n]=new Set;for(let o of O(s))for(let a of t[o]||[])a!==n&&r[n].add(a);}return r}function Ge(e,t){let o={},a={},c=[];for(let i of e)o[i]=0,a[i]=null;function p(i){o[i]=1;for(let d of t[i]||[])if(o[d]===1){let u=[d],l=i;for(;l!==d;)u.push(l),l=a[l];u.push(d),u.reverse(),c.push(u);}else o[d]===0&&(a[d]=i,p(d));o[i]=2;}for(let i of e)o[i]===0&&p(i);return c}function ke(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of C(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function me(e){let{config:t,state:r}=e,n=G(t),s=ke(n),o=new Set([...r.availableOutputs]);for(let[u,l]of Object.entries(r.tasks))if(l.status==="completed"){let k=n[u];k&&C(k).forEach(m=>o.add(m));}let a=new Set;for(let u of Object.values(n))for(let l of O(u))a.add(l);let c=new Set,p=new Set;for(let u of a){if(o.has(u))continue;(s[u]||[]).length===0&&c.add(u);}let i=true;for(;i;){i=false;for(let[u,l]of Object.entries(n)){if(p.has(u))continue;let k=r.tasks[u];if(k?.status==="completed")continue;let m=I(k),S=O(l).some(w=>c.has(w));(m||S)&&(p.has(u)||(p.add(u),i=true));}for(let u of a){if(c.has(u)||o.has(u))continue;let l=s[u]||[],k=l.length>0&&l.every(m=>p.has(m)||I(r.tasks[m]));(l.length===0||k)&&(c.has(u)||(c.add(u),i=true));}}let d=[];for(let u of c){let l=s[u]||[],k;l.length===0?k="no-producer":k=l.every(y=>I(r.tasks[y]))?"all-producers-failed":"transitive",d.push({token:u,reason:k,producers:l});}return {tokens:d}}function Ne(e){let{config:t,state:r}=e,n=G(t),{tokens:s}=me(e),o=new Set(s.map(c=>c.token)),a=[];for(let[c,p]of Object.entries(n)){let i=r.tasks[c];if(i?.status==="completed")continue;let u=O(p).filter(l=>o.has(l));u.length>0?a.push({nodeName:c,missingTokens:u}):I(i)&&a.push({nodeName:c,missingTokens:[]});}return {nodes:a}}function Ie(e,t){let r=G(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n=ke(r),s=new Set,o=new Set,a=new Map;function c(i){let d=r[i];if(d)for(let u of O(d)){let l=n[u]||[];for(let k of l)k!==t&&(o.add(u),a.has(k)||a.set(k,new Set),a.get(k).add(u),s.has(k)||(s.add(k),c(k)));}}c(t);let p=[...a.entries()].map(([i,d])=>({nodeName:i,providesTokens:[...d]}));return {nodeName:t,nodes:p,tokens:[...o]}}function je(e,t){let r=G(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n={};for(let[i,d]of Object.entries(r))for(let u of O(d))n[u]||(n[u]=[]),n[u].push(i);let s=new Set,o=new Set,a=new Map;function c(i){let d=r[i];if(d)for(let u of C(d)){let l=n[u]||[];for(let k of l)k!==t&&(o.add(u),a.has(k)||a.set(k,new Set),a.get(k).add(u),s.has(k)||(s.add(k),c(k)));}}c(t);let p=[...a.entries()].map(([i,d])=>({nodeName:i,requiresTokens:[...d]}));return {nodeName:t,nodes:p,tokens:[...o]}}var H=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function W(e){let t=re(e);return He(t)}function re(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(re).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+re(t[n])).join(",")+"}"}function He(e){let t=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<e.length;s++)t^=BigInt(e.charCodeAt(s)),t=t*r&n;return t.toString(16).padStart(16,"0")}function Le(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),r="";for(let n of t)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function De(e){if(typeof Buffer<"u")return Buffer.from(e,"base64url").toString("utf8");if(typeof atob=="function"){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),s=new Uint8Array(n.length);for(let o=0;o<n.length;o++)s[o]=n.charCodeAt(o);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function he(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Le(t)}function Pe(e){try{let t=JSON.parse(De(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function se(e,t,r){let{handlers:n,onNodeRemoved:s,onDrain:o}=t,a=new H,c="state"in e&&"config"in e?e:Y(e,r),p=false,i=new Set,d=new Map(Object.entries(n)),u=new H,l=false,k=false;function m(){if(!p){if(l){k=true;return}l=true;try{do k=!1,y();while(k)}finally{l=false;}}}function y(){let f=u.drain(),h=a.drain(),g=[...f,...h];if(g.length>0&&(c=L(c,g),s)){for(let v of g)if(v.type==="task-removal")try{s(v.taskName);}catch(b){console.warn("[reactive] onNodeRemoved failed:",b instanceof Error?b.message:String(b));}}let T=B(c);g.length>0&&o?.(g,c,T);for(let v of T.eligible)R(v);for(let v of g)if(v.type==="task-progress"){let{taskName:b,update:E}=v;if(!c.config.tasks[b])continue;let A=c.state.tasks[b];if(!A||A.status!=="running")continue;let j=he(b),N=w(b,j,E).catch(D=>{p||(u.append({type:"task-failed",taskName:b,error:D.message??String(D),timestamp:new Date().toISOString()}),m());}).finally(()=>{i.delete(N);});i.add(N);}}function S(f){let g=c.config.tasks[f].requires??[],T=new Map;for(let[b,E]of Object.entries(c.config.tasks))for(let _ of E.provides??[])T.set(_,b);let v={};for(let b of g){let E=T.get(b);E?v[b]=c.state.tasks[E]?.data:v[b]=void 0;}return v}async function w(f,h,g){let T=c.config.tasks[f],v=T.taskHandlers??[],b=S(f);for(let E of v){let _=d.get(E);if(!_)throw new Error(`Handler '${E}' not found in registry (task '${f}')`);let A={nodeId:f,state:b,taskState:c.state.tasks[f],config:T,callbackToken:h,update:g};if(await _(A)==="task-initiate-failure")throw new Error(`Handler '${E}' returned task-initiate-failure (task '${f}')`)}}function R(f){let g=c.config.tasks[f]?.taskHandlers;if(!g||g.length===0)return;u.append({type:"task-started",taskName:f,timestamp:new Date().toISOString()}),m();let T=he(f),v=w(f,T).catch(b=>{p||(u.append({type:"task-failed",taskName:f,error:b.message??String(b),timestamp:new Date().toISOString()}),m());}).finally(()=>{i.delete(v);});i.add(v);}return {push(f){p||(f.type==="task-completed"&&f.data&&!f.dataHash&&(f={...f,dataHash:W(f.data)}),a.append(f),m());},pushAll(f){if(!p){for(let h of f)h.type==="task-completed"&&h.data&&!h.dataHash?a.append({...h,dataHash:W(h.data)}):a.append(h);m();}},resolveCallback(f,h,g){if(p)return;let T=Pe(f);if(!T)return;let{taskName:v}=T;if(c.config.tasks[v]){if(g&&g.length>0)a.append({type:"task-failed",taskName:v,error:g.join("; "),timestamp:new Date().toISOString()});else {let b=h&&Object.keys(h).length>0?W(h):void 0;a.append({type:"task-completed",taskName:v,data:h,dataHash:b,timestamp:new Date().toISOString()});}m();}},addNode(f,h){p||(a.append({type:"task-upsert",taskName:f,taskConfig:h,timestamp:new Date().toISOString()}),m());},removeNode(f){p||(a.append({type:"task-removal",taskName:f,timestamp:new Date().toISOString()}),m());},addRequires(f,h){p||(a.append({type:"node-requires-add",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},removeRequires(f,h){p||(a.append({type:"node-requires-remove",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},addProvides(f,h){p||(a.append({type:"node-provides-add",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},removeProvides(f,h){p||(a.append({type:"node-provides-remove",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},registerHandler(f,h){d.set(f,h);},unregisterHandler(f){d.delete(f);},retrigger(f){p||c.config.tasks[f]&&(a.append({type:"task-restart",taskName:f,timestamp:new Date().toISOString()}),m());},retriggerAll(f){if(!p){for(let h of f)c.config.tasks[h]&&a.append({type:"task-restart",taskName:h,timestamp:new Date().toISOString()});m();}},snapshot(){return ne(c)},getState(){return c},getSchedule(){return B(c)},async waitForHandlers(){i.size>0&&await Promise.allSettled([...i]);},async dispose(f){f?.wait&&i.size>0&&await Promise.allSettled([...i]),p=true;}}}function ve(e){let t=[],{config:r,state:n}=e,s=G(r),o=Object.keys(s);for(let i of o)n.tasks[i]||t.push({severity:"error",code:"MISSING_STATE",message:`Task "${i}" exists in config but has no state entry`,tasks:[i]});for(let i of Object.keys(n.tasks))s[i]||t.push({severity:"warning",code:"ORPHAN_STATE",message:`State entry "${i}" has no corresponding task config`,tasks:[i]});for(let i of o){let d=n.tasks[i];d&&(d.status===x.RUNNING&&!d.startedAt&&t.push({severity:"warning",code:"RUNNING_WITHOUT_START",message:`Task "${i}" is running but has no startedAt timestamp`,tasks:[i]}),d.status===x.COMPLETED&&!d.completedAt&&t.push({severity:"warning",code:"COMPLETED_WITHOUT_TIMESTAMP",message:`Task "${i}" is completed but has no completedAt timestamp`,tasks:[i]}),d.status===x.FAILED&&(d.failedAt||t.push({severity:"warning",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no failedAt timestamp`,tasks:[i]}),d.error||t.push({severity:"info",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no error message`,tasks:[i]})));}let a=new Set;for(let i of o)if(n.tasks[i]?.status===x.COMPLETED)for(let u of C(s[i]))a.add(u);let c=new Set(n.availableOutputs),p=new Set;for(let i of Object.values(s)){for(let d of C(i))p.add(d);if(i.on)for(let d of Object.values(i.on))for(let u of d)p.add(u);if(i.on_failure)for(let d of i.on_failure)p.add(d);}for(let i of c)!a.has(i)&&!p.has(i)&&t.push({severity:"info",code:"INJECTED_TOKEN",message:`Token "${i}" is available but no task in the graph can produce it (likely injected)`,tokens:[i]});for(let i of a)c.has(i)||t.push({severity:"warning",code:"MISSING_OUTPUT",message:`Token "${i}" should be available (its producer completed) but is not in availableOutputs`,tokens:[i]});for(let i of o){let d=n.tasks[i];if(!d)continue;d.executionCount<0&&t.push({severity:"error",code:"INVALID_EXECUTION_COUNT",message:`Task "${i}" has negative execution count: ${d.executionCount}`,tasks:[i]});let u=s[i].maxExecutions;u!==void 0&&d.executionCount>u&&t.push({severity:"error",code:"EXCEEDED_MAX_EXECUTIONS",message:`Task "${i}" executed ${d.executionCount} times, exceeding maxExecutions of ${u}`,tasks:[i]});}return ye(t)}function Me(e){let{graph:t,handlers:r}=e,n=t.getState(),s=[],o=G(n.config),a=Object.keys(o),c=new Set(Object.keys(r)),p=new Set;for(let d of a){let u=o[d].taskHandlers;if(u)for(let l of u)p.add(l);}for(let d of a){let u=o[d].taskHandlers;if(u)for(let l of u)r[l]||s.push({severity:"error",code:"MISSING_HANDLER",message:`Task "${d}" references handler "${l}" but it is not in the registry`,tasks:[d]});}for(let d of c)p.has(d)||s.push({severity:"warning",code:"ORPHAN_HANDLER",message:`Handler "${d}" is registered but not referenced by any task's taskHandlers`,tasks:[d]});let i=ve(n);return s.push(...i.issues),ye(s)}function ye(e){let t=e.filter(n=>n.severity==="error"),r=e.filter(n=>n.severity==="warning");return {valid:t.length===0,issues:e,errors:t,warnings:r}}function qe(e,t){let r=e;for(let n of t)r=Fe(r,n);return r}function Fe(e,t){switch(t.type){case "add-node":return M(e,t.name,t.config);case "remove-node":return q(e,t.name);case "add-requires":return F(e,t.taskName,t.tokens);case "remove-requires":return U(e,t.taskName,t.tokens);case "add-provides":return $(e,t.taskName,t.tokens);case "remove-provides":return K(e,t.taskName,t.tokens);case "inject-tokens":return z(e,t.tokens);case "drain-tokens":return Q(e,t.tokens);case "reset-node":return Z(e,t.name);case "disable-node":return ee(e,t.name);case "enable-node":return te(e,t.name);case "apply-events":return L(e,t.events);default:throw new Error(`Unknown mutation type: ${t.type}`)}}function Ke(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(s=>t()(n,s)).catch(s=>t()(n,{},[s instanceof Error?s.message:String(s)])),"task-initiated"}}function Ve(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(()=>t()(n,{})).catch(()=>t()(n,{})),"task-initiated"}}function Be(e){let{command:t,cwd:r,env:n,timeoutMs:s=3e4,exitCodeMap:o,captureOutput:a=false,getResolve:c}=e;return async p=>{let{callbackToken:i,nodeId:d}=p,u=t.replace(/\$\{taskName\}/g,d);return child_process.exec(u,{cwd:r,env:n?{...process.env,...n}:void 0,timeout:s,maxBuffer:10*1024*1024},(l,k,m)=>{let y=l?.code??(l?1:0);if(y!==0&&!o?.[y]){c()(i,{},[`Command exited with code ${y}: ${m||l?.message}`]);return}let S={};a&&(S.stdout=k,S.stderr=m,S.exitCode=y),c()(i,S);}),"task-initiated"}}function be(e){let{command:t,args:r=[],cwd:n,env:s,timeoutMs:o=3e4,exitCodeMap:a,captureOutput:c=false,getResolve:p}=e;return async i=>{let{callbackToken:d,nodeId:u}=i,l=t.replace(/\$\{taskName\}/g,u),k=r.map(m=>m.replace(/\$\{taskName\}/g,u));return child_process.execFile(l,k,{cwd:n,env:s?{...process.env,...s}:void 0,timeout:o,maxBuffer:10*1024*1024,encoding:"utf8",windowsHide:true},(m,y,S)=>{let w=m?.code??(m?1:0);if(w!==0&&!a?.[w]){p()(d,{},[`Process exited with code ${w}: ${S||m?.message}`]);return}let R={};c&&(R.stdout=y,R.stderr=S,R.exitCode=w),p()(d,R);}),"task-initiated"}}function We(e){return e.endsWith(".js")||e.endsWith(".mjs")||e.endsWith(".ts")?"node":e.endsWith(".py")?"python3":(e.endsWith(".sh"),"bash")}function Je(e){let{scriptPath:t,runtime:r,args:n=[],cwd:s,timeoutMs:o=6e4,captureOutput:a=false,getResolve:c}=e,p=r??We(t),i=p==="node"?process.execPath:p;return be({command:i,args:[t,"${taskName}",...n],cwd:s,timeoutMs:o,captureOutput:a,getResolve:c})}function Ye(e){let{url:t,method:r="POST",headers:n={},timeoutMs:s=3e4,failOnNon2xx:o=true,getResolve:a}=e;return async c=>{let{callbackToken:p,nodeId:i,config:d}=c,u=t.replace(/\$\{taskName\}/g,i),l=JSON.stringify({taskName:i,callbackToken:p,config:d}),k=new AbortController,m=setTimeout(()=>k.abort(),s);return fetch(u,{method:r,headers:{"Content-Type":"application/json",...n},body:l,signal:k.signal}).then(async y=>{if(clearTimeout(m),o&&!y.ok){let w=await y.text().catch(()=>"");a()(p,{},[`HTTP ${y.status}: ${w}`]);return}let S=await y.json().catch(()=>({}));a()(p,S);}).catch(y=>{clearTimeout(m),a()(p,{},[y instanceof Error?y.message:String(y)]);}),"task-initiated"}}function Xe(e,t){return async r=>(e()(r.callbackToken,t??{}),"task-initiated")}var Qe=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));Qe("./jsonata-sync.cjs");var et=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))),J=et("./jsonata-sync.cjs"),Re=J;function Te(e,t){if(!t||!e)return;let r=t.split("."),n=e;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function we(e,t,r){let n=t.split("."),s=e;for(let o=0;o<n.length-1;o++)(s[n[o]]==null||typeof s[n[o]]!="object")&&(s[n[o]]={}),s=s[n[o]];s[n[n.length-1]]=r;}async function tt(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let s of e.compute)try{let o=await J(s.expr).evaluate(n);we(e.computed_values,s.bindTo,o),n.computed_values=e.computed_values;}catch{}return e}function nt(e,t){if(!e?.compute?.length)return {ok:true,node:e};e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values},s=[];for(let o of e.compute)try{let a=Re(o.expr).evaluate(n);we(e.computed_values,o.bindTo,a),n.computed_values=e.computed_values;}catch(a){let c=a instanceof Error?a.message:String(a);s.push({bindTo:o.bindTo,error:c});}return s.length>0?{ok:true,node:e,errors:s}:{ok:true,node:e}}async function rt(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return J(e).evaluate(n)}function st(e,t){return t.startsWith("fetched_sources.")?Te(e._sourcesData??{},t.slice(16)):Te(e,t)}var Se=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),ot=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function at(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:false,errors:["Node must be a non-null object"]};let r=e;(typeof r.id!="string"||!r.id)&&t.push("id: required, must be a non-empty string");for(let n of Object.keys(r))ot.has(n)||t.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&t.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))t.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&t.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&t.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&t.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`provides[${s}]: must be an object with bindTo and ref`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`provides[${s}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&t.push(`provides[${s}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`compute[${s}]: must be a compute step object`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`compute[${s}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&t.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))t.push("source_defs: must be an array");else {let n=new Set,s=new Set;r.source_defs.forEach((o,a)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${a}]: must be an object`);else {let c=o;typeof c.bindTo!="string"||!c.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(n.has(c.bindTo)&&t.push(`source_defs[${a}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(s.has(c.outputFile)&&t.push(`source_defs[${a}]: outputFile "${c.outputFile}" is not unique across source_defs`),s.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${a}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))t.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?t.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,o)=>{if(!s||typeof s!="object"){t.push(`view.elements[${o}]: must be an object`);return}!s.kind||typeof s.kind!="string"?t.push(`view.elements[${o}].kind: required, must be a string`):Se.has(s.kind)||t.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...Se].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&t.push(`view.elements[${o}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&t.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function it(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(e.map(async n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=await J(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function ct(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return e.map(n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=Re(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var oe={run:tt,runSync:nt,eval:rt,resolve:st,validate:at,enrichSources:it,enrichSourcesSync:ct};function ut(e,t={}){let r,n={},s;if(!Array.isArray(e)&&"nodes"in e){let g=e;r=g.nodes,s=g.id,n=g.settings??{};}else r=e;let{sourceHandlers:o={},defaultSourceHandler:a,cardHandlers:c={},reactiveOptions:p={},graphSettings:i={},executionId:d}=t,u=new Map;for(let g of r){if(u.has(g.id))throw new Error(`Duplicate card ID: "${g.id}"`);u.set(g.id,g);}let l=t.sharedState??new Map,k={},m=new Set,y=new Map;for(let g of r)for(let T of g.provides??[{bindTo:g.id,ref:"card_data"}])m.add(T.bindTo),y.set(T.bindTo,g.id);for(let g of r){let T=g.requires??[];for(let v of T)if(!m.has(v))throw new Error(`Card "${g.id}" requires "${v}" but no card provides that token`);k[g.id]={requires:T.length>0?T:void 0,provides:(g.provides??[{bindTo:g.id,ref:"card_data"}]).map(v=>v.bindTo),taskHandlers:[g.id],description:g.meta?.title??g.id};}let S={id:s??`live-cards-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n,...i},tasks:k},w={},R=null,f=()=>(g,T,v)=>{R.resolveCallback(g,T,v);};for(let g of r)g.source_defs&&g.source_defs.length>0?w[g.id]=dt(g,o,a,l,f):w[g.id]=pt(g,c,l,u,y,f);let h=se(S,{...p,handlers:w},d);return R=h,{graph:h,config:S,handlers:w,cards:u,sharedState:l}}function dt(e,t,r,n,s){if(t[e.id]){let o=t[e.id];return async a=>o(a)}if(r){let o=r(e);return async a=>o(a)}return async o=>{let a={...e.card_data};return n.set(e.id,a),s()(o.callbackToken,a),"task-initiated"}}function pt(e,t,r,n,s,o){if(t[e.id]){let a=t[e.id];return async c=>a(c)}return async a=>{let c={},p=e.requires??[];for(let l of p){let k=s.get(l)??l,m=r.get(k);m&&(c[l]=m[l]??m);}let i={id:e.id,card_data:{...e.card_data},requires:c,compute:e.compute};await oe.run(i);let d;if(e.provides&&e.provides.length>0){d={};for(let{bindTo:l,ref:k}of e.provides)d[l]=oe.resolve(i,k);}else d={...i.card_data,...i.computed_values};let u={...i.card_data,...i.computed_values};return r.set(e.id,u),o()(a.callbackToken,d),"task-initiated"}}
|
|
2
|
-
exports.MemoryJournal=H;exports.addNode=M;exports.addProvides=$;exports.addRequires=F;exports.applyEvent=X;exports.applyEvents=L;exports.computeDataHash=W;exports.createCallbackHandler=Ke;exports.createFireAndForgetHandler=Ve;exports.createLiveGraph=Y;exports.createNoopHandler=Xe;exports.createProcessHandler=be;exports.createReactiveGraph=se;exports.createScriptHandler=Je;exports.createShellHandler=Be;exports.createWebhookHandler=Ye;exports.disableNode=ee;exports.drainTokens=Q;exports.enableNode=te;exports.getDownstream=je;exports.getNode=xe;exports.getUnreachableNodes=Ne;exports.getUnreachableTokens=me;exports.getUpstream=Ie;exports.injectTokens=z;exports.inspect=Oe;exports.liveCardsToReactiveGraph=ut;exports.mutateGraph=qe;exports.removeNode=q;exports.removeProvides=K;exports.removeRequires=U;exports.resetNode=Z;exports.restore=Ce;exports.schedule=B;exports.snapshot=ne;exports.validateLiveGraph=ve;exports.validateReactiveGraph=Me;//# sourceMappingURL=index.cjs.map
|
|
1
|
+
'use strict';var chunkJAL25FGA_cjs=require('../chunk-JAL25FGA.cjs'),chunkG4XXRHL2_cjs=require('../chunk-G4XXRHL2.cjs');require('../chunk-LODXIALE.cjs'),require('../chunk-IXZG74EW.cjs'),require('../chunk-NMZ6XNLB.cjs'),require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createCallbackHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.i}});Object.defineProperty(exports,"createFireAndForgetHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.j}});Object.defineProperty(exports,"createNoopHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.o}});Object.defineProperty(exports,"createProcessHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.l}});Object.defineProperty(exports,"createScriptHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.m}});Object.defineProperty(exports,"createShellHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.k}});Object.defineProperty(exports,"createWebhookHandler",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.n}});Object.defineProperty(exports,"getDownstream",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.e}});Object.defineProperty(exports,"getUnreachableNodes",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.c}});Object.defineProperty(exports,"getUnreachableTokens",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.b}});Object.defineProperty(exports,"getUpstream",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.d}});Object.defineProperty(exports,"inspect",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.a}});Object.defineProperty(exports,"liveCardsToReactiveGraph",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.p}});Object.defineProperty(exports,"mutateGraph",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.h}});Object.defineProperty(exports,"validateLiveGraph",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.f}});Object.defineProperty(exports,"validateReactiveGraph",{enumerable:true,get:function(){return chunkJAL25FGA_cjs.g}});Object.defineProperty(exports,"MemoryJournal",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.s}});Object.defineProperty(exports,"addNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.d}});Object.defineProperty(exports,"addProvides",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.h}});Object.defineProperty(exports,"addRequires",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.f}});Object.defineProperty(exports,"applyEvent",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.b}});Object.defineProperty(exports,"applyEvents",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.c}});Object.defineProperty(exports,"computeDataHash",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.t}});Object.defineProperty(exports,"createLiveGraph",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.a}});Object.defineProperty(exports,"createReactiveGraph",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.u}});Object.defineProperty(exports,"disableNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.m}});Object.defineProperty(exports,"drainTokens",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.k}});Object.defineProperty(exports,"enableNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.n}});Object.defineProperty(exports,"getNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.o}});Object.defineProperty(exports,"injectTokens",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.j}});Object.defineProperty(exports,"removeNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.e}});Object.defineProperty(exports,"removeProvides",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.i}});Object.defineProperty(exports,"removeRequires",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.g}});Object.defineProperty(exports,"resetNode",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.l}});Object.defineProperty(exports,"restore",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.q}});Object.defineProperty(exports,"schedule",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.r}});Object.defineProperty(exports,"snapshot",{enumerable:true,get:function(){return chunkG4XXRHL2_cjs.p}});//# sourceMappingURL=index.cjs.map
|
|
3
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import {exec,execFile}from'child_process';import {createRequire}from'module';import'ajv-formats';var x={NOT_STARTED:"not-started",RUNNING:"running",COMPLETED:"completed",FAILED:"failed",INACTIVATED:"inactivated"};function C(e){return e?Array.isArray(e.provides)?e.provides:[]:[]}function O(e){return e?Array.isArray(e.requires)?e.requires:[]:[]}function G(e){return e.tasks??{}}function I(e){return e?e.status===x.FAILED||e.status===x.INACTIVATED:false}function ae(e,t){return e.refreshStrategy??t?.refreshStrategy??"data-changed"}function ie(e){return e.maxExecutions}function ce(e,t){let r=new Set;for(let[n,s]of Object.entries(t))if(s.status===x.COMPLETED){let o=e.tasks[n];o&&C(o).forEach(c=>r.add(c));}return Array.from(r)}function ue(e,t){let r={};return e.forEach(n=>{let s=t[n];if(!s)return;C(s).forEach(a=>{r[a]||(r[a]=[]),r[a].push(n);});}),r}function de(e,t,r){let n=e.tasks[t]??P(),s={};if(r){let a=r.tasks[t],c=O(a);for(let p of c)for(let[i,d]of Object.entries(r.tasks))if(C(d).includes(p)){let u=e.tasks[i];u?.lastDataHash&&(s[p]=u.lastDataHash);break}}let o={...n,status:"running",startedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),progress:0,error:void 0,startConsumedHashes:s};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function pe(e,t,r,n,s,o){let a=e.tasks[r]??P(),c=t.tasks[r];if(!c)throw new Error(`Task "${r}" not found in graph`);let p;n&&c.on&&c.on[n]?p=c.on[n]:p=C(c);let i=a.startConsumedHashes?{...a.startConsumedHashes}:{...a.lastConsumedHashes};if(!a.startConsumedHashes){let l=c.requires??[];for(let k of l)for(let[m,y]of Object.entries(t.tasks))if(C(y).includes(k)){let S=e.tasks[m];S?.lastDataHash&&(i[k]=S.lastDataHash);break}}let d={...a,status:"completed",completedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),executionCount:a.executionCount+1,lastEpoch:a.executionCount+1,lastDataHash:s,data:o,lastConsumedHashes:i,error:void 0},u=[...new Set([...e.availableOutputs,...p])];return {...e,tasks:{...e.tasks,[r]:d},availableOutputs:u,lastUpdated:new Date().toISOString()}}function fe(e,t,r,n){let s=e.tasks[r]??P(),o=t.tasks[r];if(o?.retry){let p=s.retryCount+1;if(p<=o.retry.max_attempts){let i={...s,status:"not-started",retryCount:p,lastUpdated:new Date().toISOString(),error:n};return {...e,tasks:{...e.tasks,[r]:i},lastUpdated:new Date().toISOString()}}}let a={...s,status:"failed",failedAt:new Date().toISOString(),lastUpdated:new Date().toISOString(),error:n,executionCount:s.executionCount+1},c=e.availableOutputs;if(o?.on_failure&&o.on_failure.length>0&&(c=[...new Set([...e.availableOutputs,...o.on_failure])]),o?.circuit_breaker&&a.executionCount>=o.circuit_breaker.max_executions){let p=o.circuit_breaker.on_break;c=[...new Set([...c,...p])];}return {...e,tasks:{...e.tasks,[r]:a},availableOutputs:c,lastUpdated:new Date().toISOString()}}function le(e,t,r,n){let s=e.tasks[t]??P(),o={...s,progress:typeof n=="number"?n:s.progress,messages:[...s.messages??[],...r?[{message:r,timestamp:new Date().toISOString(),status:s.status}]:[]],lastUpdated:new Date().toISOString()};return {...e,tasks:{...e.tasks,[t]:o},lastUpdated:new Date().toISOString()}}function ge(e,t){let r=e.tasks[t];if(!r)return e;let n={...r,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 {...e,tasks:{...e.tasks,[t]:n},lastUpdated:new Date().toISOString()}}function P(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Y(e,t){let r=t??`live-${Date.now()}`,n={};for(let o of Object.keys(e.tasks))n[o]=V();let s={status:"running",tasks:n,availableOutputs:[],stuckDetection:{is_stuck:false,stuck_description:null,outputs_unresolvable:[],tasks_blocked:[]},lastUpdated:new Date().toISOString(),executionId:r,executionConfig:{executionMode:e.settings.execution_mode??"eligibility-mode",conflictStrategy:e.settings.conflict_strategy??"alphabetical",completionStrategy:e.settings.completion}};return {config:e,state:s}}function X(e,t){let{config:r,state:n}=e;if("executionId"in t&&t.executionId&&t.executionId!==n.executionId)return e;switch(t.type){case "task-started":return {config:r,state:de(n,t.taskName,r)};case "task-completed":return {config:r,state:pe(n,r,t.taskName,t.result,t.dataHash,t.data)};case "task-failed":return {config:r,state:fe(n,r,t.taskName,t.error)};case "task-progress":return {config:r,state:le(n,t.taskName,t.message,t.progress)};case "task-restart":return {config:r,state:ge(n,t.taskName)};case "inject-tokens":return {config:r,state:{...n,availableOutputs:[...new Set([...n.availableOutputs,...t.tokens])],lastUpdated:new Date().toISOString()}};case "agent-action":return {config:r,state:Ee(n,t.action)};case "task-upsert":return M(e,t.taskName,t.taskConfig);case "task-removal":return q(e,t.taskName);case "node-requires-add":return F(e,t.nodeName,t.tokens);case "node-requires-remove":return U(e,t.nodeName,t.tokens);case "node-provides-add":return $(e,t.nodeName,t.tokens);case "node-provides-remove":return K(e,t.nodeName,t.tokens);default:return e}}function L(e,t){return t.reduce((r,n)=>X(r,n),e)}function M(e,t,r){let n=!!e.config.tasks[t];return {config:{...e.config,tasks:{...e.config.tasks,[t]:r}},state:{...e.state,tasks:{...e.state.tasks,[t]:n?e.state.tasks[t]:V()},lastUpdated:new Date().toISOString()}}}function q(e,t){if(!e.config.tasks[t])return e;let{[t]:r,...n}=e.config.tasks,{[t]:s,...o}=e.state.tasks;return {config:{...e.config,tasks:n},state:{...e.state,tasks:o,lastUpdated:new Date().toISOString()}}}function F(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:[...s,...o]}}},state:e.state}}function U(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=O(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,requires:o}}},state:e.state}}function $(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=C(n),o=r.filter(a=>!s.includes(a));return o.length===0?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:[...s,...o]}}},state:e.state}}function K(e,t,r){let n=e.config.tasks[t];if(!n)return e;let s=C(n),o=s.filter(a=>!r.includes(a));return o.length===s.length?e:{config:{...e.config,tasks:{...e.config.tasks,[t]:{...n,provides:o}}},state:e.state}}function z(e,t){return X(e,{type:"inject-tokens",tokens:t,timestamp:new Date().toISOString()})}function Q(e,t){let r=new Set(t),n=e.state.availableOutputs.filter(s=>!r.has(s));return n.length===e.state.availableOutputs.length?e:{config:e.config,state:{...e.state,availableOutputs:n,lastUpdated:new Date().toISOString()}}}function Z(e,t){return !e.config.tasks[t]||!e.state.tasks[t]?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:V()},lastUpdated:new Date().toISOString()}}}function ee(e,t){let r=e.state.tasks[t];return !r||r.status==="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"inactivated",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function te(e,t){let r=e.state.tasks[t];return !r||r.status!=="inactivated"?e:{config:e.config,state:{...e.state,tasks:{...e.state.tasks,[t]:{...r,status:"not-started",lastUpdated:new Date().toISOString()}},lastUpdated:new Date().toISOString()}}}function xe(e,t){let r=e.config.tasks[t];if(!r)return;let n=e.state.tasks[t]??V();return {name:t,config:r,state:n}}function ne(e){return {version:1,config:e.config,state:e.state,snapshotAt:new Date().toISOString()}}function Ce(e){if(!e||typeof e!="object")throw new Error("Invalid snapshot: expected an object");let t=e;if(!t.config||typeof t.config!="object")throw new Error('Invalid snapshot: missing or invalid "config"');if(!t.state||typeof t.state!="object")throw new Error('Invalid snapshot: missing or invalid "state"');let r=t.config,n=t.state;if(!r.settings||typeof r.settings!="object")throw new Error("Invalid snapshot: config.settings missing");if(!r.tasks||typeof r.tasks!="object")throw new Error("Invalid snapshot: config.tasks missing");if(!n.tasks||typeof n.tasks!="object")throw new Error("Invalid snapshot: state.tasks missing");if(!Array.isArray(n.availableOutputs))throw new Error("Invalid snapshot: state.availableOutputs must be an array");return {config:r,state:n}}function V(){return {status:"not-started",executionCount:0,retryCount:0,lastEpoch:0,messages:[],progress:null}}function Ee(e,t){let r=new Date().toISOString();switch(t){case "stop":return {...e,status:"stopped",lastUpdated:r};case "pause":return {...e,status:"paused",lastUpdated:r};case "resume":return {...e,status:"running",lastUpdated:r};default:return e}}function B(e){let{config:t,state:r}=e,n=G(t);if(Object.keys(n).length===0)return {eligible:[],pending:[],unresolved:[],blocked:[],conflicts:{}};let o=_e(n),a=ce(t,r.tasks),c=new Set([...a,...r.availableOutputs]),p=[],i=[],d=[],u=[];for(let[k,m]of Object.entries(n)){let y=r.tasks[k],S=ae(m,t.settings),w=S!=="once";if(y?.status===x.RUNNING||I(y))continue;let R=ie(m);if(R!==void 0&&y&&y.executionCount>=R||m.circuit_breaker&&y&&y.executionCount>=m.circuit_breaker.max_executions||!w&&y?.status===x.COMPLETED)continue;if(w&&y?.status===x.COMPLETED){let v=O(m),b=false;switch(S){case "data-changed":{v.length>0&&v.some(_=>{for(let[A,j]of Object.entries(n))if(C(j).includes(_)){let N=r.tasks[A];if(!N)continue;let D=y.lastConsumedHashes?.[_];return N.lastDataHash==null?N.executionCount>y.lastEpoch:N.lastDataHash!==D}return false})||(b=true);break}case "epoch-changed":{v.length>0&&v.some(_=>{for(let[A,j]of Object.entries(n))if(C(j).includes(_)){let N=r.tasks[A];if(N&&N.executionCount>y.lastEpoch)return true}return false})||(b=true);break}case "time-based":{let E=m.refreshInterval??0;if(E<=0){b=true;break}let _=y.completedAt;if(!_){b=true;break}(Date.now()-Date.parse(_))/1e3<E&&(b=true);break}case "manual":b=true;break}if(b)continue}let f=O(m);if(f.length===0){p.push(k);continue}let h=[],g=[],T=[];for(let v of f){if(c.has(v))continue;let b=o[v]||[];b.length===0?h.push(v):b.every(_=>I(r.tasks[_]))?T.push({token:v,failedProducer:b[0]}):g.push(v);}h.length>0?d.push({taskName:k,missingTokens:h}):T.length>0?u.push({taskName:k,failedTokens:T.map(v=>v.token),failedProducers:[...new Set(T.map(v=>v.failedProducer))]}):g.length>0?i.push({taskName:k,waitingOn:g}):p.push(k);}let l={};if(p.length>1){let k=ue(p,n);for(let[m,y]of Object.entries(k))y.length>1&&(l[m]=y);}return {eligible:p,pending:i,unresolved:d,blocked:u,conflicts:l}}function _e(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of C(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function Oe(e){let{config:t,state:r}=e,n=G(t),s=Object.keys(n),o=0,a=0,c=0,p=0,i=0,d=0;for(let R of s){let f=r.tasks[R];if(!f||f.status===x.NOT_STARTED)i++;else switch(f.status){case x.RUNNING:o++;break;case x.COMPLETED:a++;break;case x.FAILED:c++;break;case "inactivated":d++;break;default:p++;}}let u={};for(let[R,f]of Object.entries(n)){for(let h of C(f))u[h]||(u[h]=[]),u[h].push(R);if(f.on)for(let h of Object.values(f.on))for(let g of h)u[g]||(u[g]=[]),u[g].includes(R)||u[g].push(R);if(f.on_failure)for(let h of f.on_failure)u[h]||(u[h]=[]),u[h].includes(R)||u[h].push(R);}let l=new Set,k=0,m=0;for(let[R,f]of Object.entries(n)){let h=r.tasks[R];if(h?.status===x.COMPLETED||h?.status===x.RUNNING)continue;let g=false,T=false;for(let v of O(f)){let b=u[v]||[];b.length===0?(l.add(v),g=true):b.every(_=>{let A=r.tasks[_];return A?.status===x.FAILED||A?.status==="inactivated"})&&(T=true);}g&&k++,T&&!g&&m++;}let y=[];for(let[R,f]of Object.entries(u))f.length>1&&y.push(R);let S=Ae(n,u),w=Ge(s,S);return {totalNodes:s.length,running:o,completed:a,failed:c,waiting:p,notStarted:i,disabled:d,unresolvedCount:k,blockedCount:m,openDependencies:[...l],cycles:w,conflictTokens:y}}function Ae(e,t){let r={};for(let[n,s]of Object.entries(e)){r[n]=new Set;for(let o of O(s))for(let a of t[o]||[])a!==n&&r[n].add(a);}return r}function Ge(e,t){let o={},a={},c=[];for(let i of e)o[i]=0,a[i]=null;function p(i){o[i]=1;for(let d of t[i]||[])if(o[d]===1){let u=[d],l=i;for(;l!==d;)u.push(l),l=a[l];u.push(d),u.reverse(),c.push(u);}else o[d]===0&&(a[d]=i,p(d));o[i]=2;}for(let i of e)o[i]===0&&p(i);return c}function ke(e){let t={};for(let[r,n]of Object.entries(e)){for(let s of C(n))t[s]||(t[s]=[]),t[s].push(r);if(n.on)for(let s of Object.values(n.on))for(let o of s)t[o]||(t[o]=[]),t[o].includes(r)||t[o].push(r);if(n.on_failure)for(let s of n.on_failure)t[s]||(t[s]=[]),t[s].includes(r)||t[s].push(r);}return t}function me(e){let{config:t,state:r}=e,n=G(t),s=ke(n),o=new Set([...r.availableOutputs]);for(let[u,l]of Object.entries(r.tasks))if(l.status==="completed"){let k=n[u];k&&C(k).forEach(m=>o.add(m));}let a=new Set;for(let u of Object.values(n))for(let l of O(u))a.add(l);let c=new Set,p=new Set;for(let u of a){if(o.has(u))continue;(s[u]||[]).length===0&&c.add(u);}let i=true;for(;i;){i=false;for(let[u,l]of Object.entries(n)){if(p.has(u))continue;let k=r.tasks[u];if(k?.status==="completed")continue;let m=I(k),S=O(l).some(w=>c.has(w));(m||S)&&(p.has(u)||(p.add(u),i=true));}for(let u of a){if(c.has(u)||o.has(u))continue;let l=s[u]||[],k=l.length>0&&l.every(m=>p.has(m)||I(r.tasks[m]));(l.length===0||k)&&(c.has(u)||(c.add(u),i=true));}}let d=[];for(let u of c){let l=s[u]||[],k;l.length===0?k="no-producer":k=l.every(y=>I(r.tasks[y]))?"all-producers-failed":"transitive",d.push({token:u,reason:k,producers:l});}return {tokens:d}}function Ne(e){let{config:t,state:r}=e,n=G(t),{tokens:s}=me(e),o=new Set(s.map(c=>c.token)),a=[];for(let[c,p]of Object.entries(n)){let i=r.tasks[c];if(i?.status==="completed")continue;let u=O(p).filter(l=>o.has(l));u.length>0?a.push({nodeName:c,missingTokens:u}):I(i)&&a.push({nodeName:c,missingTokens:[]});}return {nodes:a}}function Ie(e,t){let r=G(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n=ke(r),s=new Set,o=new Set,a=new Map;function c(i){let d=r[i];if(d)for(let u of O(d)){let l=n[u]||[];for(let k of l)k!==t&&(o.add(u),a.has(k)||a.set(k,new Set),a.get(k).add(u),s.has(k)||(s.add(k),c(k)));}}c(t);let p=[...a.entries()].map(([i,d])=>({nodeName:i,providesTokens:[...d]}));return {nodeName:t,nodes:p,tokens:[...o]}}function je(e,t){let r=G(e.config);if(!r[t])return {nodeName:t,nodes:[],tokens:[]};let n={};for(let[i,d]of Object.entries(r))for(let u of O(d))n[u]||(n[u]=[]),n[u].push(i);let s=new Set,o=new Set,a=new Map;function c(i){let d=r[i];if(d)for(let u of C(d)){let l=n[u]||[];for(let k of l)k!==t&&(o.add(u),a.has(k)||a.set(k,new Set),a.get(k).add(u),s.has(k)||(s.add(k),c(k)));}}c(t);let p=[...a.entries()].map(([i,d])=>({nodeName:i,requiresTokens:[...d]}));return {nodeName:t,nodes:p,tokens:[...o]}}var H=class{buffer=[];append(t){this.buffer.push(t);}drain(){let t=this.buffer;return this.buffer=[],t}get size(){return this.buffer.length}};function W(e){let t=re(e);return He(t)}function re(e){if(e==null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return "["+e.map(re).join(",")+"]";let t=e;return "{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+re(t[n])).join(",")+"}"}function He(e){let t=0xcbf29ce484222325n,r=0x100000001b3n,n=0xffffffffffffffffn;for(let s=0;s<e.length;s++)t^=BigInt(e.charCodeAt(s)),t=t*r&n;return t.toString(16).padStart(16,"0")}function Le(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64url");if(typeof btoa=="function"){let t=new TextEncoder().encode(e),r="";for(let n of t)r+=String.fromCharCode(n);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}throw new Error("No base64 encoder available in this runtime")}function De(e){if(typeof Buffer<"u")return Buffer.from(e,"base64url").toString("utf8");if(typeof atob=="function"){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t+"=".repeat((4-t.length%4)%4),n=atob(r),s=new Uint8Array(n.length);for(let o=0;o<n.length;o++)s[o]=n.charCodeAt(o);return new TextDecoder().decode(s)}throw new Error("No base64 decoder available in this runtime")}function he(e){let t=JSON.stringify({t:e,n:Date.now().toString(36)+Math.random().toString(36).slice(2,6)});return Le(t)}function Pe(e){try{let t=JSON.parse(De(e));return typeof t?.t=="string"?{taskName:t.t}:null}catch{return null}}function se(e,t,r){let{handlers:n,onNodeRemoved:s,onDrain:o}=t,a=new H,c="state"in e&&"config"in e?e:Y(e,r),p=false,i=new Set,d=new Map(Object.entries(n)),u=new H,l=false,k=false;function m(){if(!p){if(l){k=true;return}l=true;try{do k=!1,y();while(k)}finally{l=false;}}}function y(){let f=u.drain(),h=a.drain(),g=[...f,...h];if(g.length>0&&(c=L(c,g),s)){for(let v of g)if(v.type==="task-removal")try{s(v.taskName);}catch(b){console.warn("[reactive] onNodeRemoved failed:",b instanceof Error?b.message:String(b));}}let T=B(c);g.length>0&&o?.(g,c,T);for(let v of T.eligible)R(v);for(let v of g)if(v.type==="task-progress"){let{taskName:b,update:E}=v;if(!c.config.tasks[b])continue;let A=c.state.tasks[b];if(!A||A.status!=="running")continue;let j=he(b),N=w(b,j,E).catch(D=>{p||(u.append({type:"task-failed",taskName:b,error:D.message??String(D),timestamp:new Date().toISOString()}),m());}).finally(()=>{i.delete(N);});i.add(N);}}function S(f){let g=c.config.tasks[f].requires??[],T=new Map;for(let[b,E]of Object.entries(c.config.tasks))for(let _ of E.provides??[])T.set(_,b);let v={};for(let b of g){let E=T.get(b);E?v[b]=c.state.tasks[E]?.data:v[b]=void 0;}return v}async function w(f,h,g){let T=c.config.tasks[f],v=T.taskHandlers??[],b=S(f);for(let E of v){let _=d.get(E);if(!_)throw new Error(`Handler '${E}' not found in registry (task '${f}')`);let A={nodeId:f,state:b,taskState:c.state.tasks[f],config:T,callbackToken:h,update:g};if(await _(A)==="task-initiate-failure")throw new Error(`Handler '${E}' returned task-initiate-failure (task '${f}')`)}}function R(f){let g=c.config.tasks[f]?.taskHandlers;if(!g||g.length===0)return;u.append({type:"task-started",taskName:f,timestamp:new Date().toISOString()}),m();let T=he(f),v=w(f,T).catch(b=>{p||(u.append({type:"task-failed",taskName:f,error:b.message??String(b),timestamp:new Date().toISOString()}),m());}).finally(()=>{i.delete(v);});i.add(v);}return {push(f){p||(f.type==="task-completed"&&f.data&&!f.dataHash&&(f={...f,dataHash:W(f.data)}),a.append(f),m());},pushAll(f){if(!p){for(let h of f)h.type==="task-completed"&&h.data&&!h.dataHash?a.append({...h,dataHash:W(h.data)}):a.append(h);m();}},resolveCallback(f,h,g){if(p)return;let T=Pe(f);if(!T)return;let{taskName:v}=T;if(c.config.tasks[v]){if(g&&g.length>0)a.append({type:"task-failed",taskName:v,error:g.join("; "),timestamp:new Date().toISOString()});else {let b=h&&Object.keys(h).length>0?W(h):void 0;a.append({type:"task-completed",taskName:v,data:h,dataHash:b,timestamp:new Date().toISOString()});}m();}},addNode(f,h){p||(a.append({type:"task-upsert",taskName:f,taskConfig:h,timestamp:new Date().toISOString()}),m());},removeNode(f){p||(a.append({type:"task-removal",taskName:f,timestamp:new Date().toISOString()}),m());},addRequires(f,h){p||(a.append({type:"node-requires-add",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},removeRequires(f,h){p||(a.append({type:"node-requires-remove",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},addProvides(f,h){p||(a.append({type:"node-provides-add",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},removeProvides(f,h){p||(a.append({type:"node-provides-remove",nodeName:f,tokens:h,timestamp:new Date().toISOString()}),m());},registerHandler(f,h){d.set(f,h);},unregisterHandler(f){d.delete(f);},retrigger(f){p||c.config.tasks[f]&&(a.append({type:"task-restart",taskName:f,timestamp:new Date().toISOString()}),m());},retriggerAll(f){if(!p){for(let h of f)c.config.tasks[h]&&a.append({type:"task-restart",taskName:h,timestamp:new Date().toISOString()});m();}},snapshot(){return ne(c)},getState(){return c},getSchedule(){return B(c)},async waitForHandlers(){i.size>0&&await Promise.allSettled([...i]);},async dispose(f){f?.wait&&i.size>0&&await Promise.allSettled([...i]),p=true;}}}function ve(e){let t=[],{config:r,state:n}=e,s=G(r),o=Object.keys(s);for(let i of o)n.tasks[i]||t.push({severity:"error",code:"MISSING_STATE",message:`Task "${i}" exists in config but has no state entry`,tasks:[i]});for(let i of Object.keys(n.tasks))s[i]||t.push({severity:"warning",code:"ORPHAN_STATE",message:`State entry "${i}" has no corresponding task config`,tasks:[i]});for(let i of o){let d=n.tasks[i];d&&(d.status===x.RUNNING&&!d.startedAt&&t.push({severity:"warning",code:"RUNNING_WITHOUT_START",message:`Task "${i}" is running but has no startedAt timestamp`,tasks:[i]}),d.status===x.COMPLETED&&!d.completedAt&&t.push({severity:"warning",code:"COMPLETED_WITHOUT_TIMESTAMP",message:`Task "${i}" is completed but has no completedAt timestamp`,tasks:[i]}),d.status===x.FAILED&&(d.failedAt||t.push({severity:"warning",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no failedAt timestamp`,tasks:[i]}),d.error||t.push({severity:"info",code:"FAILED_WITHOUT_INFO",message:`Task "${i}" is failed but has no error message`,tasks:[i]})));}let a=new Set;for(let i of o)if(n.tasks[i]?.status===x.COMPLETED)for(let u of C(s[i]))a.add(u);let c=new Set(n.availableOutputs),p=new Set;for(let i of Object.values(s)){for(let d of C(i))p.add(d);if(i.on)for(let d of Object.values(i.on))for(let u of d)p.add(u);if(i.on_failure)for(let d of i.on_failure)p.add(d);}for(let i of c)!a.has(i)&&!p.has(i)&&t.push({severity:"info",code:"INJECTED_TOKEN",message:`Token "${i}" is available but no task in the graph can produce it (likely injected)`,tokens:[i]});for(let i of a)c.has(i)||t.push({severity:"warning",code:"MISSING_OUTPUT",message:`Token "${i}" should be available (its producer completed) but is not in availableOutputs`,tokens:[i]});for(let i of o){let d=n.tasks[i];if(!d)continue;d.executionCount<0&&t.push({severity:"error",code:"INVALID_EXECUTION_COUNT",message:`Task "${i}" has negative execution count: ${d.executionCount}`,tasks:[i]});let u=s[i].maxExecutions;u!==void 0&&d.executionCount>u&&t.push({severity:"error",code:"EXCEEDED_MAX_EXECUTIONS",message:`Task "${i}" executed ${d.executionCount} times, exceeding maxExecutions of ${u}`,tasks:[i]});}return ye(t)}function Me(e){let{graph:t,handlers:r}=e,n=t.getState(),s=[],o=G(n.config),a=Object.keys(o),c=new Set(Object.keys(r)),p=new Set;for(let d of a){let u=o[d].taskHandlers;if(u)for(let l of u)p.add(l);}for(let d of a){let u=o[d].taskHandlers;if(u)for(let l of u)r[l]||s.push({severity:"error",code:"MISSING_HANDLER",message:`Task "${d}" references handler "${l}" but it is not in the registry`,tasks:[d]});}for(let d of c)p.has(d)||s.push({severity:"warning",code:"ORPHAN_HANDLER",message:`Handler "${d}" is registered but not referenced by any task's taskHandlers`,tasks:[d]});let i=ve(n);return s.push(...i.issues),ye(s)}function ye(e){let t=e.filter(n=>n.severity==="error"),r=e.filter(n=>n.severity==="warning");return {valid:t.length===0,issues:e,errors:t,warnings:r}}function qe(e,t){let r=e;for(let n of t)r=Fe(r,n);return r}function Fe(e,t){switch(t.type){case "add-node":return M(e,t.name,t.config);case "remove-node":return q(e,t.name);case "add-requires":return F(e,t.taskName,t.tokens);case "remove-requires":return U(e,t.taskName,t.tokens);case "add-provides":return $(e,t.taskName,t.tokens);case "remove-provides":return K(e,t.taskName,t.tokens);case "inject-tokens":return z(e,t.tokens);case "drain-tokens":return Q(e,t.tokens);case "reset-node":return Z(e,t.name);case "disable-node":return ee(e,t.name);case "enable-node":return te(e,t.name);case "apply-events":return L(e,t.events);default:throw new Error(`Unknown mutation type: ${t.type}`)}}function Ke(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(s=>t()(n,s)).catch(s=>t()(n,{},[s instanceof Error?s.message:String(s)])),"task-initiated"}}function Ve(e,t){return async r=>{let{callbackToken:n}=r;return Promise.resolve(e(r)).then(()=>t()(n,{})).catch(()=>t()(n,{})),"task-initiated"}}function Be(e){let{command:t,cwd:r,env:n,timeoutMs:s=3e4,exitCodeMap:o,captureOutput:a=false,getResolve:c}=e;return async p=>{let{callbackToken:i,nodeId:d}=p,u=t.replace(/\$\{taskName\}/g,d);return exec(u,{cwd:r,env:n?{...process.env,...n}:void 0,timeout:s,maxBuffer:10*1024*1024},(l,k,m)=>{let y=l?.code??(l?1:0);if(y!==0&&!o?.[y]){c()(i,{},[`Command exited with code ${y}: ${m||l?.message}`]);return}let S={};a&&(S.stdout=k,S.stderr=m,S.exitCode=y),c()(i,S);}),"task-initiated"}}function be(e){let{command:t,args:r=[],cwd:n,env:s,timeoutMs:o=3e4,exitCodeMap:a,captureOutput:c=false,getResolve:p}=e;return async i=>{let{callbackToken:d,nodeId:u}=i,l=t.replace(/\$\{taskName\}/g,u),k=r.map(m=>m.replace(/\$\{taskName\}/g,u));return execFile(l,k,{cwd:n,env:s?{...process.env,...s}:void 0,timeout:o,maxBuffer:10*1024*1024,encoding:"utf8",windowsHide:true},(m,y,S)=>{let w=m?.code??(m?1:0);if(w!==0&&!a?.[w]){p()(d,{},[`Process exited with code ${w}: ${S||m?.message}`]);return}let R={};c&&(R.stdout=y,R.stderr=S,R.exitCode=w),p()(d,R);}),"task-initiated"}}function We(e){return e.endsWith(".js")||e.endsWith(".mjs")||e.endsWith(".ts")?"node":e.endsWith(".py")?"python3":(e.endsWith(".sh"),"bash")}function Je(e){let{scriptPath:t,runtime:r,args:n=[],cwd:s,timeoutMs:o=6e4,captureOutput:a=false,getResolve:c}=e,p=r??We(t),i=p==="node"?process.execPath:p;return be({command:i,args:[t,"${taskName}",...n],cwd:s,timeoutMs:o,captureOutput:a,getResolve:c})}function Ye(e){let{url:t,method:r="POST",headers:n={},timeoutMs:s=3e4,failOnNon2xx:o=true,getResolve:a}=e;return async c=>{let{callbackToken:p,nodeId:i,config:d}=c,u=t.replace(/\$\{taskName\}/g,i),l=JSON.stringify({taskName:i,callbackToken:p,config:d}),k=new AbortController,m=setTimeout(()=>k.abort(),s);return fetch(u,{method:r,headers:{"Content-Type":"application/json",...n},body:l,signal:k.signal}).then(async y=>{if(clearTimeout(m),o&&!y.ok){let w=await y.text().catch(()=>"");a()(p,{},[`HTTP ${y.status}: ${w}`]);return}let S=await y.json().catch(()=>({}));a()(p,S);}).catch(y=>{clearTimeout(m),a()(p,{},[y instanceof Error?y.message:String(y)]);}),"task-initiated"}}function Xe(e,t){return async r=>(e()(r.callbackToken,t??{}),"task-initiated")}var Qe=createRequire(import.meta.url);Qe("./jsonata-sync.cjs");var et=createRequire(import.meta.url),J=et("./jsonata-sync.cjs"),Re=J;function Te(e,t){if(!t||!e)return;let r=t.split("."),n=e;for(let s=0;s<r.length;s++){if(n==null)return;n=n[r[s]];}return n}function we(e,t,r){let n=t.split("."),s=e;for(let o=0;o<n.length-1;o++)(s[n[o]]==null||typeof s[n[o]]!="object")&&(s[n[o]]={}),s=s[n[o]];s[n[n.length-1]]=r;}async function tt(e,t){if(!e?.compute?.length)return e;e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values};for(let s of e.compute)try{let o=await J(s.expr).evaluate(n);we(e.computed_values,s.bindTo,o),n.computed_values=e.computed_values;}catch{}return e}function nt(e,t){if(!e?.compute?.length)return {ok:true,node:e};e.card_data||(e.card_data={}),e.computed_values={},e._sourcesData=t?.sourcesData??{};let r=e.requires??{},n={card_data:e.card_data,requires:r,expects_data:r,fetched_sources:e._sourcesData,data:e.computed_values,computed_values:e.computed_values},s=[];for(let o of e.compute)try{let a=Re(o.expr).evaluate(n);we(e.computed_values,o.bindTo,a),n.computed_values=e.computed_values;}catch(a){let c=a instanceof Error?a.message:String(a);s.push({bindTo:o.bindTo,error:c});}return s.length>0?{ok:true,node:e,errors:s}:{ok:true,node:e}}async function rt(e,t,r){let n={...r??{},card_data:t.card_data??{},requires:t.requires??{},fetched_sources:t._sourcesData??{},computed_values:t.computed_values??{}};return J(e).evaluate(n)}function st(e,t){return t.startsWith("fetched_sources.")?Te(e._sourcesData??{},t.slice(16)):Te(e,t)}var Se=new Set(["metric","table","editable-table","chart","form","filter","list","notes","todo","alert","narrative","badge","text","markdown","ref","custom","actions"]),ot=new Set(["id","meta","requires","provides","view","card_data","compute","source_defs"]);function at(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return {ok:false,errors:["Node must be a non-null object"]};let r=e;(typeof r.id!="string"||!r.id)&&t.push("id: required, must be a non-empty string");for(let n of Object.keys(r))ot.has(n)||t.push(`Unknown top-level key: "${n}"`);if((r.card_data==null||typeof r.card_data!="object"||Array.isArray(r.card_data))&&t.push("card_data: required, must be an object"),r.meta!=null)if(typeof r.meta!="object"||Array.isArray(r.meta))t.push("meta: must be an object");else {let n=r.meta;n.title!=null&&typeof n.title!="string"&&t.push("meta.title: must be a string"),n.tags!=null&&!Array.isArray(n.tags)&&t.push("meta.tags: must be an array");}if(r.requires!=null&&!Array.isArray(r.requires)&&t.push("requires: must be an array of strings"),r.provides!=null&&(Array.isArray(r.provides)?r.provides.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`provides[${s}]: must be an object with bindTo and ref`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`provides[${s}]: missing required "bindTo" string`),(typeof o.ref!="string"||!o.ref)&&t.push(`provides[${s}]: missing required "ref" string`);}}):t.push("provides: must be an array of { bindTo, ref } bindings")),r.compute!=null&&(Array.isArray(r.compute)?r.compute.forEach((n,s)=>{if(!n||typeof n!="object"||Array.isArray(n))t.push(`compute[${s}]: must be a compute step object`);else {let o=n;(typeof o.bindTo!="string"||!o.bindTo)&&t.push(`compute[${s}]: missing required "bindTo" property`),(typeof o.expr!="string"||!o.expr)&&t.push(`compute[${s}]: missing required "expr" string (JSONata expression)`);}}):t.push("compute: must be an array of compute steps")),r.source_defs!=null)if(!Array.isArray(r.source_defs))t.push("source_defs: must be an array");else {let n=new Set,s=new Set;r.source_defs.forEach((o,a)=>{if(!o||typeof o!="object"||Array.isArray(o))t.push(`source_defs[${a}]: must be an object`);else {let c=o;typeof c.bindTo!="string"||!c.bindTo?t.push(`source_defs[${a}]: missing required "bindTo" property`):(n.has(c.bindTo)&&t.push(`source_defs[${a}]: bindTo "${c.bindTo}" is not unique across source_defs`),n.add(c.bindTo)),typeof c.outputFile!="string"||!c.outputFile?t.push(`source_defs[${a}]: missing required "outputFile" property`):(s.has(c.outputFile)&&t.push(`source_defs[${a}]: outputFile "${c.outputFile}" is not unique across source_defs`),s.add(c.outputFile)),c.optionalForCompletionGating!=null&&typeof c.optionalForCompletionGating!="boolean"&&t.push(`source_defs[${a}]: optionalForCompletionGating must be a boolean`);}});}if(r.view!=null)if(typeof r.view!="object"||Array.isArray(r.view))t.push("view: must be an object");else {let n=r.view;!Array.isArray(n.elements)||n.elements.length===0?t.push("view.elements: required, must be a non-empty array"):n.elements.forEach((s,o)=>{if(!s||typeof s!="object"){t.push(`view.elements[${o}]: must be an object`);return}!s.kind||typeof s.kind!="string"?t.push(`view.elements[${o}].kind: required, must be a string`):Se.has(s.kind)||t.push(`view.elements[${o}].kind: unknown kind "${s.kind}". Valid: ${[...Se].join(", ")}`),s.data!=null&&(typeof s.data!="object"||Array.isArray(s.data))&&t.push(`view.elements[${o}].data: must be an object`);}),n.layout!=null&&(typeof n.layout!="object"||Array.isArray(n.layout))&&t.push("view.layout: must be an object"),n.features!=null&&(typeof n.features!="object"||Array.isArray(n.features))&&t.push("view.features: must be an object");}return {ok:t.length===0,errors:t}}async function it(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return Promise.all(e.map(async n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=await J(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}}))}function ct(e,t){if(!e||e.length===0)return [];let r={card_data:t.card_data??{},requires:t.requires??{}};return e.map(n=>{let s={};if(n.projections&&typeof n.projections=="object"&&!Array.isArray(n.projections)){for(let[o,a]of Object.entries(n.projections))if(typeof a=="string"&&a.trim().length>0)try{s[o]=Re(a).evaluate(r);}catch{s[o]=void 0;}}return {...n,_projections:s}})}var oe={run:tt,runSync:nt,eval:rt,resolve:st,validate:at,enrichSources:it,enrichSourcesSync:ct};function ut(e,t={}){let r,n={},s;if(!Array.isArray(e)&&"nodes"in e){let g=e;r=g.nodes,s=g.id,n=g.settings??{};}else r=e;let{sourceHandlers:o={},defaultSourceHandler:a,cardHandlers:c={},reactiveOptions:p={},graphSettings:i={},executionId:d}=t,u=new Map;for(let g of r){if(u.has(g.id))throw new Error(`Duplicate card ID: "${g.id}"`);u.set(g.id,g);}let l=t.sharedState??new Map,k={},m=new Set,y=new Map;for(let g of r)for(let T of g.provides??[{bindTo:g.id,ref:"card_data"}])m.add(T.bindTo),y.set(T.bindTo,g.id);for(let g of r){let T=g.requires??[];for(let v of T)if(!m.has(v))throw new Error(`Card "${g.id}" requires "${v}" but no card provides that token`);k[g.id]={requires:T.length>0?T:void 0,provides:(g.provides??[{bindTo:g.id,ref:"card_data"}]).map(v=>v.bindTo),taskHandlers:[g.id],description:g.meta?.title??g.id};}let S={id:s??`live-cards-${Date.now()}`,settings:{completion:"manual",execution_mode:"eligibility-mode",...n,...i},tasks:k},w={},R=null,f=()=>(g,T,v)=>{R.resolveCallback(g,T,v);};for(let g of r)g.source_defs&&g.source_defs.length>0?w[g.id]=dt(g,o,a,l,f):w[g.id]=pt(g,c,l,u,y,f);let h=se(S,{...p,handlers:w},d);return R=h,{graph:h,config:S,handlers:w,cards:u,sharedState:l}}function dt(e,t,r,n,s){if(t[e.id]){let o=t[e.id];return async a=>o(a)}if(r){let o=r(e);return async a=>o(a)}return async o=>{let a={...e.card_data};return n.set(e.id,a),s()(o.callbackToken,a),"task-initiated"}}function pt(e,t,r,n,s,o){if(t[e.id]){let a=t[e.id];return async c=>a(c)}return async a=>{let c={},p=e.requires??[];for(let l of p){let k=s.get(l)??l,m=r.get(k);m&&(c[l]=m[l]??m);}let i={id:e.id,card_data:{...e.card_data},requires:c,compute:e.compute};await oe.run(i);let d;if(e.provides&&e.provides.length>0){d={};for(let{bindTo:l,ref:k}of e.provides)d[l]=oe.resolve(i,k);}else d={...i.card_data,...i.computed_values};let u={...i.card_data,...i.computed_values};return r.set(e.id,u),o()(a.callbackToken,d),"task-initiated"}}
|
|
2
|
-
export{H as MemoryJournal,M as addNode,$ as addProvides,F as addRequires,X as applyEvent,L as applyEvents,W as computeDataHash,Ke as createCallbackHandler,Ve as createFireAndForgetHandler,Y as createLiveGraph,Xe as createNoopHandler,be as createProcessHandler,se as createReactiveGraph,Je as createScriptHandler,Be as createShellHandler,Ye as createWebhookHandler,ee as disableNode,Q as drainTokens,te as enableNode,je as getDownstream,xe as getNode,Ne as getUnreachableNodes,me as getUnreachableTokens,Ie as getUpstream,z as injectTokens,Oe as inspect,ut as liveCardsToReactiveGraph,qe as mutateGraph,q as removeNode,K as removeProvides,U as removeRequires,Z as resetNode,Ce as restore,B as schedule,ne as snapshot,ve as validateLiveGraph,Me as validateReactiveGraph};//# sourceMappingURL=index.js.map
|
|
1
|
+
export{i as createCallbackHandler,j as createFireAndForgetHandler,o as createNoopHandler,l as createProcessHandler,m as createScriptHandler,k as createShellHandler,n as createWebhookHandler,e as getDownstream,c as getUnreachableNodes,b as getUnreachableTokens,d as getUpstream,a as inspect,p as liveCardsToReactiveGraph,h as mutateGraph,f as validateLiveGraph,g as validateReactiveGraph}from'../chunk-OPNGCSXJ.js';export{s as MemoryJournal,d as addNode,h as addProvides,f as addRequires,b as applyEvent,c as applyEvents,t as computeDataHash,a as createLiveGraph,u as createReactiveGraph,m as disableNode,k as drainTokens,n as enableNode,o as getNode,j as injectTokens,e as removeNode,i as removeProvides,g as removeRequires,l as resetNode,q as restore,r as schedule,p as snapshot}from'../chunk-VGT3TRQG.js';import'../chunk-WDPOGXTY.js';import'../chunk-JMDHDY6M.js';import'../chunk-VLBB3D6B.js';import'../chunk-MNEOJWPS.js';import'../chunk-FW4363Y4.js';//# sourceMappingURL=index.js.map
|
|
3
2
|
//# sourceMappingURL=index.js.map
|