@hugex/ai 3.4.1 → 3.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import{a as k,b as Cr,c as De,d as $e,e as ss,f as je,g as os,h as Ke,i as as}from"./chunk-V43Y4KSA.js";import"./chunk-3D77ZXDC.js";import{c as Pr}from"./chunk-Z4CYLB7J.js";import"./chunk-AKJFVR6J.js";import"./chunk-EHOK5FW2.js";import"./chunk-3K4IMMLP.js";import{a as is,b as cs,c as ls,d as us}from"./chunk-J67BCWE3.js";import{$ as kr,A as lr,Aa as es,B as ur,Ba as ts,C as dr,Ca as ns,D as _e,Da as rs,E as L,Ea as Le,F as pr,Fa as He,G as Ue,H as be,I as Oe,J as ve,K as Ce,L as Pe,M as J,N as Ne,O as Me,P as fr,Q as mr,R as gr,S as yr,T as hr,U as wr,V as Rr,W as Sr,X as Er,Y as Ir,Z as xr,_ as Tr,a as I,aa as Ar,b as ke,ba as _r,c as wn,ca as Ur,d as P,da as Or,e as Ae,ea as vr,f as Rn,fa as Nr,g as Sn,ga as Mr,h as En,ha as Dr,i as In,ia as $r,j as xn,ja as Fr,k as Tn,ka as Lr,l as kn,la as Hr,m as An,ma as jr,n as _n,na as Kr,o as Un,oa as qr,p as bn,pa as Gr,q as On,qa as Wr,r as vn,ra as Xr,s as Cn,sa as zr,t as Pn,ta as Vr,u as Nn,ua as Fe,v as Ln,va as Jr,w as Hn,wa as Yr,x as jn,xa as Br,y as ir,ya as Zr,z as cr,za as Qr}from"./chunk-YXG3ZEUP.js";import{A as or,B as ar,a as F,b as yn,c as xe,d as hn,e as Te,f as Mn,g as Dn,h as $n,i as Fn,j as Kn,k as qn,l as Gn,m as Wn,n as Xn,o as zn,p as Vn,q as Jn,r as Yn,s as Bn,t as Zn,u as Qn,v as er,w as tr,x as nr,y as rr,z as sr}from"./chunk-KKJW6HJA.js";import{a as br}from"./chunk-HJPR76HF.js";import{a as cn}from"./chunk-RYHQGPX5.js";import{a as ln}from"./chunk-R6EKV3WR.js";import{a as pn}from"./chunk-6HY7QUMP.js";import{a as un,b as dn}from"./chunk-V6JSMX5A.js";import{a as gn}from"./chunk-Q7QHJJGR.js";import{a as b,b as C,c as fn,d as mn}from"./chunk-YLDLDEUP.js";import{a as Ie}from"./chunk-U56YWPSI.js";import"./chunk-YHXUBVN2.js";import"./chunk-3TXHFKDN.js";import{Agent as nt}from"agents";import{nanoid as qt}from"nanoid";async function St(t){t.sql`CREATE TABLE IF NOT EXISTS messages (id TEXT PRIMARY KEY, role TEXT NOT NULL, type TEXT NOT NULL, content TEXT NOT NULL, ts INTEGER NOT NULL)`}async function qe(t,e){t.sql`INSERT INTO messages (id, role, type, content, ts) VALUES (${e.id}, ${e.role}, ${e.type}, ${e.content}, ${e.ts})`}async function O(t){return t.sql`SELECT id, role, type, content, ts FROM messages ORDER BY ts ASC`}async function H(t){t.sql`DELETE FROM messages`}async function Ge(t){await St(t)}function Y(t){return{"Content-Type":"application/json",Authorization:t.HX_API_KEY}}function j(t){return!!(t!=null&&t.HX_ORA_URL)&&!!(t!=null&&t.HX_API_KEY)}var Et="anonymous:";function We(t,e){return(t==null?void 0:t.trim())||`${Et}${e}`}async function B(t,e){if(!j(t))return null;let r=await fetch(`${t.HX_ORA_URL}/internal/runs`,{method:"POST",headers:Y(t),body:JSON.stringify(e)});return r.ok?await r.json():(console.error("[oraTriggers] createRun failed",r.status,await r.text().catch(()=>"")),null)}async function N(t,e){if(!j(t))return{claimed:!0};let r=await fetch(`${t.HX_ORA_URL}/internal/runs/${encodeURIComponent(e)}/claim`,{method:"POST",headers:Y(t)});if(!r.ok){let n=await r.text().catch(()=>"");throw new Error(`claimRun ${e} failed with ${r.status}: ${n}`)}return await r.json()}async function K(t,e,r,n=3){if(!j(t))return!0;for(let s=1;s<=n;s++){try{let a=await fetch(`${t.HX_ORA_URL}/internal/runs/${encodeURIComponent(e)}/complete`,{method:"POST",headers:Y(t),body:JSON.stringify(r)});if(a.ok||a.status===409)return!0;if(a.status===404)return console.error(`[oraTriggers] completeRun ${e} rejected with 404`),!1;console.warn(`[oraTriggers] completeRun ${e} attempt ${s} failed with ${a.status}`)}catch(a){console.warn(`[oraTriggers] completeRun ${e} attempt ${s} threw`,a)}s<n&&await new Promise(a=>setTimeout(a,250*s))}return console.error(`[oraTriggers] completeRun ${e} exhausted ${n} attempts; hx-ora will time the run out`),!1}async function Xe(t,e){if(!j(t))return Promise.resolve();try{return await B(t,e)}catch(r){return console.error("[oraTriggers] recordRun failed",r),null}}var Z=Object.freeze({}),It="__SYSTEM_";function Q(t){return t.startsWith(It)}function xt(t){let e={};for(let[r,n]of Object.entries(t))Q(r)||(e[r]=n);return Object.freeze(e)}function q(t){return(typeof t=="string"?t.trim():"")||"default"}async function ze(t,e,r){if(!e)return Z;let n=q(r);if(t.HX_ORA_URL&&t.HX_API_KEY)try{let a=new URL(`${t.HX_ORA_URL.replace(/\/$/,"")}/internal/secrets`);a.searchParams.set("org",n);let o=await fetch(a,{headers:{Authorization:t.HX_API_KEY}});if(o.ok){let i=await o.json();if(i.secrets)return xt(i.secrets)}else console.warn(`[secrets] API failed with status ${o.status}, falling back to KV`)}catch(a){console.error("[secrets] API request failed, falling back to KV",a)}let s=t.ORA_SECRETS;if(!s)return Z;try{let a={};return await Tt(s,`${e}:${n}:`,a),n==="default"&&await kt(s,e,a),Object.freeze(a)}catch(a){return console.error("[secrets] failed to load tenant secrets from KV",{tenant:e,org:n,err:a}),Z}}async function Tt(t,e,r){let n=await t.list({prefix:e,limit:1e3});n.list_complete===!1&&console.warn(`[secrets] prefix=${e} exceeded list page; truncating to first 1000 keys`);let s=n.keys.filter(o=>{let i=o.name.slice(e.length);return i.length>0&&!i.includes(":")&&!Q(i)}),a=await Promise.all(s.map(async o=>{let i=await t.get(o.name);return i!==null?[o.name.slice(e.length),i]:null}));for(let o of a){if(!o)continue;let[i,c]=o;i&&(r[i]=c)}}async function kt(t,e,r){let n=`${e}:`,s=await t.list({prefix:n,limit:1e3});s.list_complete===!1&&console.warn(`[secrets] tenant=${e} legacy secrets exceeded list page; truncating to first 1000 keys`);let a=s.keys.filter(i=>{let c=i.name.slice(n.length);return c.length>0&&!c.includes(":")&&!Q(c)}),o=await Promise.all(a.map(async i=>{let c=i.name.slice(n.length);if(c in r)return null;let l=await t.get(i.name);return l!==null?[c,l]:null}));for(let i of o){if(!i)continue;let[c,l]=i;c&&(r[c]=l)}}function G(t){var s;let e=((s=t==null?void 0:t.flowData)==null?void 0:s.state)??(t==null?void 0:t.flowData),n=((e==null?void 0:e.nodes)??[]).find(a=>a.type==="startNode");return n==null?void 0:n.data}import{nanoid as Lt}from"nanoid";import{streamText as At}from"ai";var _t={short:`Up to ${L("short")} markdown lines (one fact or bullet per line). Keep constraints, working agreements, and the outline of anything already settled.`,medium:`Up to ${L("medium")} markdown lines. Group bullets by whatever this session is about (actors, constraints, decisions, current plan/state, open work). Under-remembering is worse than a few extra lines.`,long:`Up to ${L("long")} markdown lines. Same as medium, with one-line context on a decision or plan block when later turns will need it.`},Ut=12,bt=400,Ve=700;function Ot(t,e=Ut){let r=t.filter(s=>s.role==="user"||s.role==="assistant").slice(-e),n=[];for(let s of r){let a=typeof s.content=="string"?s.content:JSON.stringify(s.content??""),o=s.role==="assistant"?Ve:bt,i=a.trim().replace(/\s+/g," ").slice(0,o);i&&n.push(`${s.role==="user"?"U":"A"}: ${i}`)}return n.join(`
2
- `)}function vt(t){let e=t??{},r=e.promptTokens??e.inputTokens??0,n=e.completionTokens??e.outputTokens??0,s=e.totalTokens??r+n;return{promptTokens:r,completionTokens:n,totalTokens:s}}function Ct(t){var e;for(let r=t.length-1;r>=0;r--)if(((e=t[r])==null?void 0:e.role)==="assistant"&&typeof t[r].content=="string")return t[r].content;return""}function Pt(t){var s,a;let e=((s=t.flowData)==null?void 0:s.state)??t.flowData,r=(e==null?void 0:e.nodes)??[],n=[];for(let o of r){if(o.type!=="answerNode")continue;let i=(a=t.results)==null?void 0:a[o.id];i!=null&&n.push(typeof i=="string"?i:JSON.stringify(i))}return n.join(`
3
- `)}function Nt(t){var n;let e=["You maintain a KEYPOINT memory for one agent session so later turns can continue without re-asking.",`Hard limit: ${t.maxTokens} tokens.`,_t[t.length],"The session domain is unknown: personal, operational, technical, or mixed. Do not assume a personal-coaching frame.","Store facts that will still matter: who/what is in play, constraints and invariants, preferences, decisions, current state of the work, and the outline of anything the user accepted or asked to keep.","When something was confirmed (a plan, a process, a design, a sequence), keep a compact outline \u2014 enough to resume the next part \u2014 not the assistant\u2019s full wording.","Keep earlier facts unless the user superseded them. Merge, update, dedupe. Do not collapse memory to a single identity line plus one decision.","Never copy the conversation. Never write User:/Assistant:/U:/A: lines. Drop greetings, filler, and unanswered assistant questions.","If this turn added nothing durable, return the current memory unchanged.","If memory is empty and nothing durable happened, return exactly: (none)","Use the same language as the user. Return only the bullet list \u2014 no preamble."].join(" "),r=["Current keypoint memory:",'"""',t.previous.trim()||"(empty)",'"""',"","Recent session (for extraction only; do not transcribe):",'"""',((n=t.recentTurns)==null?void 0:n.trim())||"(none)",'"""',"","This turn:",`User said: ${t.userText.trim()||"(empty)"}`,t.assistantText.trim()?`Latest assistant reply (extract accepted plan/facts only): ${t.assistantText.trim().slice(0,Ve)}`:"",t.answers.trim()?`Answer outputs:
1
+ import{a as k,b as Wn,c as De,d as $e,e as $s,f as He,g as Ls,h as je,i as Fs}from"./chunk-BMZU5UOO.js";import"./chunk-3D77ZXDC.js";import{c as Gn}from"./chunk-62G7NURX.js";import"./chunk-AKJFVR6J.js";import"./chunk-EHOK5FW2.js";import"./chunk-3K4IMMLP.js";import{a as Ks,b as Hs,c as js,d as Ws,e as Gs}from"./chunk-GHMAKIZO.js";import{$ as _n,$a as vs,A as Xr,Aa as ss,B as zr,Ba as os,C as Vr,Ca as as,D as Jr,Da as is,E as Yr,Ea as cs,F as Br,Fa as ls,G as wn,Ga as us,H as Sn,Ha as ds,I as Rn,Ia as ps,J as En,Ja as fs,K as In,Ka as ms,L as be,La as gs,M as F,Ma as ys,N as xn,Na as hs,O as _e,Oa as ws,P as Ue,Pa as Ss,Q as ve,Qa as Rs,R as Oe,Ra as Es,S as Ce,Sa as Is,T as Pe,Ta as xs,U as J,Ua as Ts,V as Ne,Va as ks,W as Me,Wa as As,X as Tn,Xa as bs,Y as kn,Ya as Le,Z as An,Za as _s,_ as bn,_a as Us,a as I,aa as Un,ab as Os,b as ke,ba as vn,bb as Cs,c as Rr,ca as On,cb as Ps,d as P,da as Cn,db as Ns,e as Ae,ea as Pn,eb as Ms,f as Er,fa as Nn,fb as Ds,g as Ir,ga as Mn,gb as Fe,h as xr,ha as Dn,hb as Ke,i as Tr,ia as $n,j as kr,ja as Ln,k as Ar,ka as Fn,l as br,la as Hn,m as _r,ma as jn,n as Ur,na as qn,o as vr,oa as Xn,p as Or,pa as zn,q as Cr,qa as Vn,r as Pr,ra as Jn,s as Nr,sa as Yn,t as Mr,ta as Bn,u as Dr,ua as Zn,v as Hr,va as Qn,w as jr,wa as es,x as Wr,xa as ts,y as Gr,ya as rs,z as qr,za as ns}from"./chunk-G73VSMK7.js";import{A as yn,B as hn,a as L,b as wr,c as xe,d as Sr,e as Te,f as $r,g as Lr,h as Fr,i as Kr,j as Zr,k as Qr,l as en,m as tn,n as rn,o as nn,p as sn,q as on,r as an,s as cn,t as ln,u as un,v as dn,w as pn,x as fn,y as mn,z as gn}from"./chunk-LUS5CJY2.js";import{a as Kn}from"./chunk-HJPR76HF.js";import{a as ur}from"./chunk-RYHQGPX5.js";import{a as dr}from"./chunk-R6EKV3WR.js";import{a as mr}from"./chunk-6HY7QUMP.js";import{a as pr,b as fr}from"./chunk-V6JSMX5A.js";import{a as hr}from"./chunk-Q7QHJJGR.js";import{a as U,b as C,c as gr,d as yr}from"./chunk-YLDLDEUP.js";import{a as Ie}from"./chunk-U56YWPSI.js";import"./chunk-YHXUBVN2.js";import"./chunk-3TXHFKDN.js";import{Agent as rt}from"agents";import{nanoid as Gt}from"nanoid";async function Et(t){t.sql`CREATE TABLE IF NOT EXISTS messages (id TEXT PRIMARY KEY, role TEXT NOT NULL, type TEXT NOT NULL, content TEXT NOT NULL, ts INTEGER NOT NULL)`}async function We(t,e){t.sql`INSERT INTO messages (id, role, type, content, ts) VALUES (${e.id}, ${e.role}, ${e.type}, ${e.content}, ${e.ts})`}async function v(t){return t.sql`SELECT id, role, type, content, ts FROM messages ORDER BY ts ASC`}async function K(t){t.sql`DELETE FROM messages`}async function Ge(t){await Et(t)}function Y(t){return{"Content-Type":"application/json",Authorization:t.HX_API_KEY}}function H(t){return!!(t!=null&&t.HX_ORA_URL)&&!!(t!=null&&t.HX_API_KEY)}var It="anonymous:";function qe(t,e){return(t==null?void 0:t.trim())||`${It}${e}`}async function B(t,e){if(!H(t))return null;let n=await fetch(`${t.HX_ORA_URL}/internal/runs`,{method:"POST",headers:Y(t),body:JSON.stringify(e)});return n.ok?await n.json():(console.error("[oraTriggers] createRun failed",n.status,await n.text().catch(()=>"")),null)}async function N(t,e){if(!H(t))return{claimed:!0};let n=await fetch(`${t.HX_ORA_URL}/internal/runs/${encodeURIComponent(e)}/claim`,{method:"POST",headers:Y(t)});if(!n.ok){let r=await n.text().catch(()=>"");throw new Error(`claimRun ${e} failed with ${n.status}: ${r}`)}return await n.json()}async function j(t,e,n,r=3){if(!H(t))return!0;for(let s=1;s<=r;s++){try{let a=await fetch(`${t.HX_ORA_URL}/internal/runs/${encodeURIComponent(e)}/complete`,{method:"POST",headers:Y(t),body:JSON.stringify(n)});if(a.ok||a.status===409)return!0;if(a.status===404)return console.error(`[oraTriggers] completeRun ${e} rejected with 404`),!1;console.warn(`[oraTriggers] completeRun ${e} attempt ${s} failed with ${a.status}`)}catch(a){console.warn(`[oraTriggers] completeRun ${e} attempt ${s} threw`,a)}s<r&&await new Promise(a=>setTimeout(a,250*s))}return console.error(`[oraTriggers] completeRun ${e} exhausted ${r} attempts; hx-ora will time the run out`),!1}async function Xe(t,e){if(!H(t))return Promise.resolve();try{return await B(t,e)}catch(n){return console.error("[oraTriggers] recordRun failed",n),null}}var Z=Object.freeze({}),xt="__SYSTEM_";function Q(t){return t.startsWith(xt)}function Tt(t){let e={};for(let[n,r]of Object.entries(t))Q(n)||(e[n]=r);return Object.freeze(e)}function W(t){return(typeof t=="string"?t.trim():"")||"default"}async function ze(t,e,n){if(!e)return Z;let r=W(n);if(t.HX_ORA_URL&&t.HX_API_KEY)try{let a=new URL(`${t.HX_ORA_URL.replace(/\/$/,"")}/internal/secrets`);a.searchParams.set("org",r);let o=await fetch(a,{headers:{Authorization:t.HX_API_KEY}});if(o.ok){let i=await o.json();if(i.secrets)return Tt(i.secrets)}else console.warn(`[secrets] API failed with status ${o.status}, falling back to KV`)}catch(a){console.error("[secrets] API request failed, falling back to KV",a)}let s=t.ORA_SECRETS;if(!s)return Z;try{let a={};return await kt(s,`${e}:${r}:`,a),r==="default"&&await At(s,e,a),Object.freeze(a)}catch(a){return console.error("[secrets] failed to load tenant secrets from KV",{tenant:e,org:r,err:a}),Z}}async function kt(t,e,n){let r=await t.list({prefix:e,limit:1e3});r.list_complete===!1&&console.warn(`[secrets] prefix=${e} exceeded list page; truncating to first 1000 keys`);let s=r.keys.filter(o=>{let i=o.name.slice(e.length);return i.length>0&&!i.includes(":")&&!Q(i)}),a=await Promise.all(s.map(async o=>{let i=await t.get(o.name);return i!==null?[o.name.slice(e.length),i]:null}));for(let o of a){if(!o)continue;let[i,c]=o;i&&(n[i]=c)}}async function At(t,e,n){let r=`${e}:`,s=await t.list({prefix:r,limit:1e3});s.list_complete===!1&&console.warn(`[secrets] tenant=${e} legacy secrets exceeded list page; truncating to first 1000 keys`);let a=s.keys.filter(i=>{let c=i.name.slice(r.length);return c.length>0&&!c.includes(":")&&!Q(c)}),o=await Promise.all(a.map(async i=>{let c=i.name.slice(r.length);if(c in n)return null;let l=await t.get(i.name);return l!==null?[c,l]:null}));for(let i of o){if(!i)continue;let[c,l]=i;c&&(n[c]=l)}}function G(t){var s;let e=((s=t==null?void 0:t.flowData)==null?void 0:s.state)??(t==null?void 0:t.flowData),r=((e==null?void 0:e.nodes)??[]).find(a=>a.type==="startNode");return r==null?void 0:r.data}import{nanoid as Kt}from"nanoid";import{streamText as bt}from"ai";var _t={short:`Up to ${F("short")} markdown lines (one fact or bullet per line). Keep constraints, working agreements, and the outline of anything already settled.`,medium:`Up to ${F("medium")} markdown lines. Group bullets by whatever this session is about (actors, constraints, decisions, current plan/state, open work). Under-remembering is worse than a few extra lines.`,long:`Up to ${F("long")} markdown lines. Same as medium, with one-line context on a decision or plan block when later turns will need it.`},Ut=12,vt=400,Ve=700;function Ot(t,e=Ut){let n=t.filter(s=>s.role==="user"||s.role==="assistant").slice(-e),r=[];for(let s of n){let a=typeof s.content=="string"?s.content:JSON.stringify(s.content??""),o=s.role==="assistant"?Ve:vt,i=a.trim().replace(/\s+/g," ").slice(0,o);i&&r.push(`${s.role==="user"?"U":"A"}: ${i}`)}return r.join(`
2
+ `)}function Ct(t){let e=t??{},n=e.promptTokens??e.inputTokens??0,r=e.completionTokens??e.outputTokens??0,s=e.totalTokens??n+r;return{promptTokens:n,completionTokens:r,totalTokens:s}}function Pt(t){var e;for(let n=t.length-1;n>=0;n--)if(((e=t[n])==null?void 0:e.role)==="assistant"&&typeof t[n].content=="string")return t[n].content;return""}function Nt(t){var s,a;let e=((s=t.flowData)==null?void 0:s.state)??t.flowData,n=(e==null?void 0:e.nodes)??[],r=[];for(let o of n){if(o.type!=="answerNode")continue;let i=(a=t.results)==null?void 0:a[o.id];i!=null&&r.push(typeof i=="string"?i:JSON.stringify(i))}return r.join(`
3
+ `)}function Mt(t){var r;let e=["You maintain a KEYPOINT memory for one agent session so later turns can continue without re-asking.",`Hard limit: ${t.maxTokens} tokens.`,_t[t.length],"The session domain is unknown: personal, operational, technical, or mixed. Do not assume a personal-coaching frame.","Store facts that will still matter: who/what is in play, constraints and invariants, preferences, decisions, current state of the work, and the outline of anything the user accepted or asked to keep.","When something was confirmed (a plan, a process, a design, a sequence), keep a compact outline \u2014 enough to resume the next part \u2014 not the assistant\u2019s full wording.","Keep earlier facts unless the user superseded them. Merge, update, dedupe. Do not collapse memory to a single identity line plus one decision.","Never copy the conversation. Never write User:/Assistant:/U:/A: lines. Drop greetings, filler, and unanswered assistant questions.","If this turn added nothing durable, return the current memory unchanged.","If memory is empty and nothing durable happened, return exactly: (none)","Use the same language as the user. Return only the bullet list \u2014 no preamble."].join(" "),n=["Current keypoint memory:",'"""',t.previous.trim()||"(empty)",'"""',"","Recent session (for extraction only; do not transcribe):",'"""',((r=t.recentTurns)==null?void 0:r.trim())||"(none)",'"""',"","This turn:",`User said: ${t.userText.trim()||"(empty)"}`,t.assistantText.trim()?`Latest assistant reply (extract accepted plan/facts only): ${t.assistantText.trim().slice(0,Ve)}`:"",t.answers.trim()?`Answer outputs:
4
4
  ${t.answers.trim()}`:""].filter(Boolean).join(`
5
- `);return{system:e,user:r}}function Mt(t){return Me(t.previous,Ne(t.userText),t.maxTokens)}async function Dt(t){let e="",r;for await(let n of t.fullStream)n.type==="text-delta"&&(e+=n.text??n.delta??""),n.type==="error"&&(r=n.error instanceof Error?n.error.message:String(n.error??"stream error"));return{text:e.trim(),error:r}}async function $t(t){if(t.fullStream&&typeof t.fullStream[Symbol.asyncIterator]=="function")return Dt({fullStream:t.fullStream});try{return{text:((typeof t.text=="string"?t.text:await t.text)||"").trim()}}catch(e){return{text:"",error:e instanceof Error?e.message:String(e)}}}async function Je(t){var l;let e=G(t.engineState);if(!e)return{status:"skipped",reason:"start_node_missing"};if(!be(e))return{status:"skipped",reason:"memory_disabled"};let r=ve(e),n=_e(r),s=Oe(e),a=J(t.previousContent||""),o=Ct(t.messages),i=Pt(t.engineState),c=u=>{let m=Mt({previous:a,userText:t.userText,maxTokens:n});return{status:"written",content:m,truncated:!1,modelId:s,fallback:!0,error:m?void 0:u}};try{let u=await je(s,t.sessionEnv,{maxOutputTokens:n});if(!u)throw new Error(`Memory model '${s}' not found in registry`);let m=Ce(r,(l=u.reasoning)==null?void 0:l.kind),{system:f,user:p}=Nt({previous:a,userText:t.userText,assistantText:o,answers:i,length:r,maxTokens:n,recentTurns:Ot(t.messages)}),g=Le(u.reasoning),y=He(u.provider,{effort:g,exposeReasoning:!1,maxTokens:m}),w=At({model:u.modelHandle,system:f,messages:[{role:"user",content:p}],...Fe({...u.effectiveParams??{},maxOutputTokens:m}),...y?{providerOptions:y}:{}}),R=await $t(w),S=vt(await w.usage),_=J(R.text);if(Pe(_)&&(_=""),!_)return{...c(R.error||"Memory model returned empty text"),usage:S};let x=Ue(_,n);return{status:"written",content:x.content,truncated:x.truncated,usage:S,modelId:s}}catch(u){let m=u instanceof Error?u.message:"Memory update failed";return console.error("Memory update failed:",u),c(m)}}async function Ye(t,e){var n,s;let r=(n=e==null?void 0:e.flowData)==null?void 0:n.flowId;if(!(t!=null&&t.HX_CORE_URL)||!r)return{engineState:e,refreshed:!1};try{let a=await C(r,t),o={...e,flowData:{...a,tenant:e.flowData.tenant,flowId:r,chatId:e.flowData.chatId}},i=a==null?void 0:a.stateVersion,c=typeof i=="number"&&i!==((s=e.flowData)==null?void 0:s.stateVersion);return{engineState:o,refreshed:c}}catch(a){return console.error(`[flowRefresh] fetch failed for flow ${r}:`,a),{engineState:e,refreshed:!1}}}function Ft(t,e){let r=[],n=s=>{if(s)for(let[a,o]of Object.entries(s))typeof o=="string"&&o.length>=8&&r.push({name:a,value:o})};return n(t),n(e),r.sort((s,a)=>a.value.length-s.value.length),r}function Be(t,e){let r=t;for(let n of e)r.includes(n.value)&&(r=r.split(n.value).join(`[redacted:${n.name}]`));return r}function ee(t,e){if(typeof t=="string")return Be(t,e);if(Array.isArray(t))return t.map(r=>ee(r,e));if(t!==null&&typeof t=="object"){let r={};for(let[n,s]of Object.entries(t))r[Be(n,e)]=ee(s,e);return r}return t}function te(t,e,r){let n=Ft(e,r);return n.length===0?t:ee(t,n)}function Ze(t,e){return!t||!t.HX_ORA_URL||!t.HX_API_KEY?Promise.resolve():fetch(`${t.HX_ORA_URL}/internal/sessions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:t.HX_API_KEY},body:JSON.stringify(e)}).catch(r=>{console.error("[sessionIndex] failed to index session",r)})}var Qe=async(t,e)=>{fetch(`${e.DW_URL}/q/telemetry/event`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),`${JSON.stringify(t)}`};async function M(t,e){var a;let r=t.id||t.name||"",[n,s]=String(r).split("::");if(!n||!s)return null;try{let i=(a=(await b(n,e)).metadata)==null?void 0:a.tenant,l={flowData:{...await C(n,e),tenant:i,flowId:n,chatId:s},executedNodes:[],context:{}};return t.setState({...t.state,engineState:l}),l}catch(o){return console.error("Failed to initialize engine state:",o),null}}async function Ht(t,e,r){var n;if(e&&t.HX_CORE_URL&&t.HX_API_KEY)try{let s=await b(e,t),a=(n=s==null?void 0:s.metadata)==null?void 0:n.org;if(typeof a=="string"&&a.trim())return q(a)}catch(s){console.warn(`[secrets] could not read org for flow ${e}`,s)}return q(r)}async function D(t){var ae,ie,ce,le,ue,de,pe,fe,me,ge,ye;let{agent:e,env:r,ctx:n,payload:s,connection:a}=t,o=Date.now(),i=[],c=t.runId?De():void 0,l=async()=>await O(e),u=async d=>{await qe(e,d)},m=async d=>{if(e.state.modelsCache&&e.state.modelsCache[d])return e.state.modelsCache[d];try{let{fetchOraModel:h}=await import("./oraApi-YIJGMXX7.js"),T=await h(d,r);return e.setState({...e.state,modelsCache:{...e.state.modelsCache||{},[d]:T}}),T}catch(h){throw console.error(`Error fetching model ${d}:`,h),h}},f={id:Lt(),role:"user",type:"text",content:s.text,images:s.images,ts:Date.now()};await u(f);let p={onChangeState:d=>{e.setState({...e.state,engineState:d})},onServerEvent:async d=>{var h;await((h=t.onServerEvent)==null?void 0:h.call(t,d)),i.push(d)},onTelemetry:async d=>{var U,he,we,Re,Se,Ee;let h=t.user,T=typeof(h==null?void 0:h.org)=="string"&&h.org.trim()?h.org.trim():"default";await Qe({...d,userId:t.resolveUserId(),tenant:((he=(U=e.state.engineState)==null?void 0:U.flowData)==null?void 0:he.tenant)||"",org:T,flowId:((Re=(we=e.state.engineState)==null?void 0:we.flowData)==null?void 0:Re.flowId)||"",sessionId:((Ee=(Se=e.state.engineState)==null?void 0:Se.flowData)==null?void 0:Ee.chatId)||""},r)},onError:d=>{var h;(h=t.onError)==null||h.call(t,d),e.setState({...e.state,error:d})},shouldStop:t.shouldStop},g=e.state.engineState?{...e.state.engineState}:null;if(g){let{engineState:d,refreshed:h}=await Ye(r,g);g=d,h&&e.setState({...e.state,engineState:g,modelsCache:{}})}else if(g=await M(e,r),!g){let d="Failed to initialize agent";return p.onError(d),{status:"failed",error:d,path:[]}}let y=t.user??void 0,w=(ae=g.flowData)==null?void 0:ae.tenant,R=await Ht(r,(ie=g.flowData)==null?void 0:ie.flowId,y==null?void 0:y.org),S=w?await ze(r,w,R):{};(ce=t.onSecretsLoaded)==null||ce.call(t,S),g={...g,context:{...g.context||{},user:y}},e.setState({...e.state,user:y,engineState:g});let _={env:r,ctx:n,conn:a,getMessages:l,setMessages:u,getOraModel:m,secrets:S,userAuth:t.userAuth,user:y,composioSessions:t.composioSessions,publicOrigin:t.publicOrigin,skillRefCache:t.skillRefCache,runId:t.runId,outputCollector:c,agentMemory:typeof((le=e.state.memory)==null?void 0:le.content)=="string"?e.state.memory.content:"",shouldStop:t.shouldStop,workerStack:(ue=g.flowData)!=null&&ue.flowId?[g.flowData.flowId]:[],workerCalls:{count:0}},x=await Ke(_,g,p)(s),E=e.state.engineState??g;if(x.status==="completed")try{let d=await Je({sessionEnv:_,engineState:E,previousContent:typeof((de=e.state.memory)==null?void 0:de.content)=="string"?e.state.memory.content:"",userText:s.text||"",messages:await l()});if(d.status==="skipped")await p.onServerEvent({type:"agent:memory",content:{skipped:!0,reason:d.reason},timestamp:Date.now()});else if(!d.content.trim())await p.onServerEvent({type:"agent:memory",content:{updated:!1,empty:!0,error:d.error,fallback:d.fallback},timestamp:Date.now()});else{let h={promptTokens:((pe=E.tokenUsage)==null?void 0:pe.promptTokens)??0,completionTokens:((fe=E.tokenUsage)==null?void 0:fe.completionTokens)??0,totalTokens:((me=E.tokenUsage)==null?void 0:me.totalTokens)??0};d.usage&&(h.promptTokens+=d.usage.promptTokens,h.completionTokens+=d.usage.completionTokens,h.totalTokens+=d.usage.totalTokens),E={...E,tokenUsage:h},e.setState({...e.state,engineState:E,memory:{content:d.content,updatedTs:Date.now(),...d.error?{lastError:d.error}:{},...d.fallback?{fallback:!0}:{}}}),await p.onTelemetry({type:"memory_update",payload:{model:d.modelId,truncated:d.truncated,usage:d.usage,fallback:d.fallback,error:d.error}}),await p.onServerEvent({type:"agent:memory",content:{updated:!0,truncated:d.truncated,fallback:d.fallback,error:d.error},timestamp:Date.now()})}}catch(d){let h=d instanceof Error?d.message:"Memory update failed";console.error("Memory update failed:",d),await p.onServerEvent({type:"agent:memory",content:{error:h},timestamp:Date.now()})}if(x.status==="completed"&&t.runId&&(c!=null&&c.hasOutputs())){let{flowId:d,chatId:h}=E.flowData??{};if(!d||!h)x={status:"failed",error:"Structured output persistence requires flowId and sessionId"};else try{await $e(r,{flowId:d,sessionId:h,runId:t.runId,createdAt:new Date(o).toISOString(),data:c.snapshotData(),answerNodeIds:c.answerNodeIds()});let T={...E.results||{}};for(let U of c.answerNodeIds())T[U]={...T[U]||{},persisted:!0,runId:t.runId};E={...E,results:T},e.setState({...e.state,engineState:E})}catch(T){let U=T instanceof Error?T.message:"Structured output persistence failed";p.onError(U),await p.onServerEvent({type:"error:answer-output",content:{runId:t.runId,error:U},timestamp:Date.now()}),x={status:"failed",error:U}}}let{tenant:$,flowId:z,chatId:V}=E.flowData??{},ht=(ge=E.flowData)==null?void 0:ge.org;$&&z&&V&&n.waitUntil(Ze(r,{id:`${z}::${V}`,tenant:$,org:ht,flowId:z,sessionId:V,userId:t.resolveUserId(),title:(ye=s.text)==null?void 0:ye.slice(0,120),turnTs:o,events:i})),e.setState({...e.state,lastUpdated:new Date});let wt=(E.executedNodes??[]).flatMap(d=>typeof(d==null?void 0:d.id)=="string"?[d.id]:[]),Rt=typeof x.error=="string"?te(x.error,S,t.userAuth):x.error,oe=c!=null&&c.hasOutputs()?te(c.snapshotData(),S,t.userAuth):void 0;return{status:x.status,error:Rt,engineState:E,path:wt,...oe!==void 0?{outputs:oe}:{}}}import{nanoid as jt}from"nanoid";function Kt(t){let e=t.headers.get("X-User-Payload");if(!e)return null;try{let r=JSON.parse(e),n=typeof(r==null?void 0:r.email)=="string"?P(r.email):null;return n?{...r,email:n}:null}catch{return null}}async function et(t,e,r,n){var s;try{let a=await e.json(),o=a.message;if(!o||typeof o!="string")return new Response(JSON.stringify({error:"Invalid message"}),{status:400,headers:{"content-type":"application/json"}});let i=typeof a.userId=="string"?P(a.userId):null,c=Kt(e),l=c==null?void 0:c.email;c?t.setState({...t.state,user:c,injectedUserId:l}):i&&!((s=t.state.user)!=null&&s.email)&&t.setState({...t.state,injectedUserId:i});let u=()=>l??i??t.state.injectedUserId??void 0;t.skillRefCache||(t.skillRefCache=new Map);let m=a.inputs&&typeof a.inputs=="object"?a.inputs:void 0;if(!t.state.engineState&&!await M(t,r))return new Response(JSON.stringify({error:"Failed to initialize agent"}),{status:500,headers:{"content-type":"application/json"}});let f=`run-${jt(12)}`;await t.registerManualRun(f,o,u()),await N(r,f).catch(w=>{console.warn(`[AgentHTTP] could not mark manual run ${f} as running`,w)});let p;try{p=await D({agent:t,env:r,ctx:n,payload:{text:o,inputs:m},skillRefCache:t.skillRefCache,user:c??void 0,resolveUserId:u,runId:f,shouldStop:()=>t.isRunStopRequested(f)}),n.waitUntil(t.completeManualRun(f,p.status==="completed"?"succeeded":p.status==="stopped"?"skipped":"failed",p.error))}finally{await t.clearRunStopRequest(f)}if(p.status==="failed")return new Response(JSON.stringify({error:p.error||"Agent execution failed",runId:f,path:p.path??[]}),{status:500,headers:{"content-type":"application/json"}});if(p.status==="stopped")return new Response(JSON.stringify({error:p.error||"Stopped by user"}),{status:409,headers:{"content-type":"application/json"}});let y=(await O(t)).reverse().find(w=>w.role==="assistant");return new Response(JSON.stringify({answer:(y==null?void 0:y.content)||"",runId:f,path:p.path??[],...p.outputs!==void 0?{outputs:p.outputs}:{}}),{headers:{"content-type":"application/json"}})}catch(a){return new Response(JSON.stringify({error:a.message}),{status:500,headers:{"content-type":"application/json"}})}}async function tt(t){try{return await H(t),t.skillRefCache&&t.skillRefCache.clear(),t.setState({...t.state,error:"",engineState:void 0,modelsCache:{},lastUpdated:new Date}),new Response(JSON.stringify({success:!0,messages:[]}),{headers:{"content-type":"application/json"}})}catch(e){return new Response(JSON.stringify({error:e.message}),{status:500,headers:{"content-type":"application/json"}})}}var rt="trigger:nonce:",Gt=900*1e3,ne="run:stop:",st=class extends nt{initialState={user:void 0,injectedUserId:null,sessionId:null,lastUpdated:null,modelsCache:{},memory:void 0};constructor(e,r){super(e,r),this.requireStateValidation()}validateStateChange(e,r){if(r!=="server")throw new Error("Client state updates are forbidden")}requireStateValidation(){if(typeof nt.prototype.validateStateChange!="function")throw new Error("AgentDO requires agents >= 0.8.7 with validateStateChange; upgrade the tenant SDK")}resolveSessionUserId(){return this.state.injectedUserId??void 0}secrets=Object.freeze({});userAuth={};composioSessions={};skillRefCache=new Map;publicOrigin;async inspectPersistedSession(e){return e==="state"?{state:this.state}:e==="memory"?{memory:this.state.memory??null}:{messages:await O(this)}}async requestRunStop(e){return e!=null&&e.trim()?(await this.ctx.storage.put(`${ne}${e}`,Date.now()),{accepted:!0}):{accepted:!1}}async isRunStopRequested(e){return!!await this.ctx.storage.get(`${ne}${e}`)}async clearRunStopRequest(e){await this.ctx.storage.delete(`${ne}${e}`)}async onRequest(e){this.requireStateValidation();let r=new URL(e.url);if(r.pathname.endsWith("/state"))return new Response(JSON.stringify(this.state),{headers:{"content-type":"application/json"}});if(r.pathname.endsWith("/history")){let n=await O(this);return new Response(JSON.stringify(n),{headers:{"content-type":"application/json"}})}return e.method==="POST"&&r.pathname.endsWith("/message")?et(this,e,this.env,this.ctx):e.method==="DELETE"&&r.pathname.endsWith("/clear")?tt(this):new Response("Ready to assist.")}async onConnect(e,r){var f,p,g,y,w;this.requireStateValidation();let[n,s]=e.server.split("::"),o=(f=(await b(n,this.env)).metadata)==null?void 0:f.tenant;this.userAuth={},this.composioSessions={},this.publicOrigin=void 0;let i=null;if(r.request){try{this.publicOrigin=new URL(r.request.url).origin}catch{}let R=r.request.headers.get("X-User-Payload");if(R)try{i=JSON.parse(R)}catch(S){console.warn("Failed to parse X-User-Payload",S)}}e.setState({...e.state,authorizedUser:i});let c=await C(n,this.env);this.setState({...this.state,user:i||null,sessionId:s,engineState:{flowData:{...c,tenant:o,flowId:n,chatId:s},executedNodes:[],context:i?{user:i}:{}}}),i||console.warn("[AgentDO] WebSocket connected without authenticated user \u2014 Composio manual auth requires login (access_token on socket URL)");let l=await O(this);k(e,I.SERVER_HISTORY,JSON.stringify({messages:l}));let m=(((p=c==null?void 0:c.state)==null?void 0:p.nodes)??(c==null?void 0:c.nodes)??[]).find(R=>R.type==="startNode");if(m){let R={allow_images:((g=m.data)==null?void 0:g.allow_images)??!1,allow_documents:((y=m.data)==null?void 0:y.allow_documents)??!1,greeting:(w=m.data)==null?void 0:w.greeting};k(e,I.SERVER_CONFIG,JSON.stringify(R))}}async onMessage(e,r){if(typeof r!="string")return;let n=r.indexOf(":");if(n===-1)return;let s=r.substring(0,n),a=r.substring(n+1);if(!s||!a)return;let i={[I.USER_MESSAGE]:c=>this.onUserMessage(e,c),[I.USER_CLEAR_HISTORY]:()=>this.onClearHistory(e),[I.USER_AUTH]:c=>this.onUserAuth(e,c),[I.USER_IDENTITY]:c=>this.onUserIdentity(e,c)}[s];i&&await i(a)}async onUserMessage(e,r){var i;let n=ke(r),s=((i=e.state)==null?void 0:i.authorizedUser)??void 0,a=()=>(s==null?void 0:s.email)??this.resolveSessionUserId(),o=`run-${qt(12)}`;await this.registerManualRun(o,n.text,a()),await N(this.env,o).catch(c=>{console.warn(`[AgentDO] could not mark manual run ${o} as running`,c)});try{let c=await D({agent:this,env:this.env,ctx:this.ctx,payload:n,connection:e,userAuth:this.userAuth,composioSessions:this.composioSessions,publicOrigin:this.publicOrigin,skillRefCache:this.skillRefCache,user:s,resolveUserId:a,runId:o,shouldStop:()=>this.isRunStopRequested(o),onServerEvent:l=>{k(e,I.SERVER_EVENT,JSON.stringify(l))},onError:l=>{k(e,I.SERVER_ERROR,l)},onSecretsLoaded:l=>{this.secrets=l}});this.ctx.waitUntil(this.completeManualRun(o,c.status==="completed"?"succeeded":c.status==="stopped"?"skipped":"failed",c.error))}finally{await this.clearRunStopRequest(o)}}registerManualRun(e,r,n){var c;let{tenant:s,flowId:a,chatId:o}=((c=this.state.engineState)==null?void 0:c.flowData)??{};if(!s||!a||!o)return Promise.resolve();let i=We(n||this.resolveSessionUserId(),o);return Xe(this.env,{id:e,tenant:s,flowId:a,userId:i,sessionId:o,label:r==null?void 0:r.slice(0,120)})}completeManualRun(e,r,n){return K(this.env,e,{status:r,error:n})}async enqueueTrigger(e){var s;if(!(e!=null&&e.runId)||!(e!=null&&e.flowId))return{queued:!1};if(e.nonce&&!await this.claimTriggerNonce(e.nonce))return console.warn(`[AgentDO] rejected replayed trigger nonce ${e.nonce}`),{queued:!1,duplicate:!0};let r=e.runAsUserId;return r&&!((s=this.state.user)!=null&&s.email)&&this.state.injectedUserId!==r&&this.setState({...this.state,injectedUserId:r}),{queued:!0,taskId:await this.queue("processTrigger",e)}}async claimTriggerNonce(e){let r=`${rt}${e}`;if(await this.ctx.storage.get(r))return!1;let n=Date.now();await this.ctx.storage.put(r,n);let a=[...(await this.ctx.storage.list({prefix:rt})).entries()].filter(([,o])=>n-o>Gt).map(([o])=>o);return a.length>0&&await this.ctx.storage.delete(a),!0}async processTrigger(e){if(!(await N(this.env,e.runId)).claimed){console.warn(`[AgentDO] activation ${e.activationId} skipped \u2014 run ${e.runId} already claimed`);return}try{this.state.engineState||await M(this,this.env);let n=xe(G(this.state.engineState)),s=Te(n,e.inputs||{},e.label),a=await D({agent:this,env:this.env,ctx:this.ctx,payload:{text:s,inputs:e.inputs||{}},composioSessions:this.composioSessions,skillRefCache:this.skillRefCache,resolveUserId:()=>e.runAsUserId||this.resolveSessionUserId(),runId:e.runId,shouldStop:()=>this.isRunStopRequested(e.runId),onSecretsLoaded:o=>{this.secrets=o}});await K(this.env,e.runId,{status:a.status==="completed"?"succeeded":a.status==="stopped"?"skipped":"failed",error:a.error})}catch(n){let s=n instanceof Error?n.message:"Trigger execution failed";throw await K(this.env,e.runId,{status:"failed",error:s}),n}finally{await this.clearRunStopRequest(e.runId)}}async onUserIdentity(e,r){let n=P(r);if(!n){k(e,I.SERVER_ERROR,"Invalid identity payload");return}this.setState({...this.state,injectedUserId:n}),k(e,I.SERVER_EVENT,JSON.stringify({type:"info:identity",content:{set:!0}}))}async onUserAuth(e,r){let n=Ae(r);if(!n){k(e,I.SERVER_ERROR,"Invalid auth payload");return}let s=n.value.trim();s===""?delete this.userAuth[n.name]:this.userAuth[n.name]=n.value,k(e,I.SERVER_EVENT,JSON.stringify({type:"info:auth",content:{name:n.name,set:s!==""}}))}async onClearHistory(e){await H(this),this.userAuth={},this.composioSessions={},this.skillRefCache.clear(),this.setState({...this.state,error:"",engineState:this.state.engineState,memory:this.state.memory,modelsCache:{},lastUpdated:new Date}),e&&k(e,I.SERVER_HISTORY,JSON.stringify({messages:[]}))}async onStart(){`${JSON.stringify(this.state)}`,await Ge(this);let e=await O(this);`${JSON.stringify(e)}`}async onClose(e,r,n,s){console.log(`Session closed: ${this.state.sessionId} ${r} - ${n}`)}async onError(e){console.error("AgentDO encountered an error:",e)}};function po(t){let e=t.state;if(!e)return null;let r=["startNode","answerNode"];for(let n of r)if(!e.nodes.some(a=>a.type===n))return!1;return e.nodes.find(n=>n.type==="startNode")}import{importSPKI as Wt,jwtVerify as Xt}from"jose";function W(t){let e={};if(!t)return e;let r=t.split(";");for(let n of r){let s=n.indexOf("=");if(s>-1){let a=n.slice(0,s).trim(),o=n.slice(s+1).trim();a&&(e[a]=decodeURIComponent(o))}}return e}function zt(t){return(typeof t.email=="string"?t.email.trim():"")||null}async function v(t,e,r){let n=W(t.headers.get("cookie")),s=new URL(t.url),a=n.access_token||s.searchParams.get("access_token"),o=await Vt(e,a);if(o.ok){let i=o.payload,c=zt(i);return c?{id:i.sub,email:c,name:i.name,first_name:i.given_name,last_name:i.family_name,tenant:i.tenant,org:typeof i.org=="string"?i.org:null,roles:i["ora-roles"],db_name:i.db_name||null,user_id:i.user_id||null}:null}return null}async function Vt(t,e){if(!e||typeof e!="string")return{ok:!1,payload:null,protectedHeader:null};if(!t.KC_RS256_PK)throw new Error("PK is not defined");let r=`-----BEGIN PUBLIC KEY-----
5
+ `);return{system:e,user:n}}function Dt(t){return Me(t.previous,Ne(t.userText),t.maxTokens)}async function $t(t){let e="",n;for await(let r of t.fullStream)r.type==="text-delta"&&(e+=r.text??r.delta??""),r.type==="error"&&(n=r.error instanceof Error?r.error.message:String(r.error??"stream error"));return{text:e.trim(),error:n}}async function Lt(t){if(t.fullStream&&typeof t.fullStream[Symbol.asyncIterator]=="function")return $t({fullStream:t.fullStream});try{return{text:((typeof t.text=="string"?t.text:await t.text)||"").trim()}}catch(e){return{text:"",error:e instanceof Error?e.message:String(e)}}}async function Je(t){var l;let e=G(t.engineState);if(!e)return{status:"skipped",reason:"start_node_missing"};if(!Ue(e))return{status:"skipped",reason:"memory_disabled"};let n=Oe(e),r=be(n),s=ve(e),a=J(t.previousContent||""),o=Pt(t.messages),i=Nt(t.engineState),c=u=>{let m=Dt({previous:a,userText:t.userText,maxTokens:r});return{status:"written",content:m,truncated:!1,modelId:s,fallback:!0,error:m?void 0:u}};try{let u=await He(s,t.sessionEnv,{maxOutputTokens:r});if(!u)throw new Error(`Memory model '${s}' not found in registry`);let m=Ce(n,(l=u.reasoning)==null?void 0:l.kind),{system:f,user:p}=Mt({previous:a,userText:t.userText,assistantText:o,answers:i,length:n,maxTokens:r,recentTurns:Ot(t.messages)}),g=Fe(u.reasoning),y=Ke(u.provider,{effort:g,exposeReasoning:!1,maxTokens:m}),w=bt({model:u.modelHandle,system:f,messages:[{role:"user",content:p}],...Le({...u.effectiveParams??{},maxOutputTokens:m}),...y?{providerOptions:y}:{}}),S=await Lt(w),R=Ct(await w.usage),b=J(S.text);if(Pe(b)&&(b=""),!b)return{...c(S.error||"Memory model returned empty text"),usage:R};let x=_e(b,r);return{status:"written",content:x.content,truncated:x.truncated,usage:R,modelId:s}}catch(u){let m=u instanceof Error?u.message:"Memory update failed";return console.error("Memory update failed:",u),c(m)}}async function Ye(t,e){var r,s;let n=(r=e==null?void 0:e.flowData)==null?void 0:r.flowId;if(!(t!=null&&t.HX_CORE_URL)||!n)return{engineState:e,refreshed:!1};try{let a=await C(n,t),o={...e,flowData:{...a,tenant:e.flowData.tenant,flowId:n,chatId:e.flowData.chatId}},i=a==null?void 0:a.stateVersion,c=typeof i=="number"&&i!==((s=e.flowData)==null?void 0:s.stateVersion);return{engineState:o,refreshed:c}}catch(a){return console.error(`[flowRefresh] fetch failed for flow ${n}:`,a),{engineState:e,refreshed:!1}}}function Ft(t,e){let n=[],r=s=>{if(s)for(let[a,o]of Object.entries(s))typeof o=="string"&&o.length>=8&&n.push({name:a,value:o})};return r(t),r(e),n.sort((s,a)=>a.value.length-s.value.length),n}function Be(t,e){let n=t;for(let r of e)n.includes(r.value)&&(n=n.split(r.value).join(`[redacted:${r.name}]`));return n}function ee(t,e){if(typeof t=="string")return Be(t,e);if(Array.isArray(t))return t.map(n=>ee(n,e));if(t!==null&&typeof t=="object"){let n={};for(let[r,s]of Object.entries(t))n[Be(r,e)]=ee(s,e);return n}return t}function te(t,e,n){let r=Ft(e,n);return r.length===0?t:ee(t,r)}function Ze(t,e){return!t||!t.HX_ORA_URL||!t.HX_API_KEY?Promise.resolve():fetch(`${t.HX_ORA_URL}/internal/sessions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:t.HX_API_KEY},body:JSON.stringify(e)}).catch(n=>{console.error("[sessionIndex] failed to index session",n)})}var Qe=async(t,e)=>{fetch(`${e.DW_URL}/q/telemetry/event`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),`${JSON.stringify(t)}`};async function M(t,e){var a;let n=t.id||t.name||"",[r,s]=String(n).split("::");if(!r||!s)return null;try{let i=(a=(await U(r,e)).metadata)==null?void 0:a.tenant,l={flowData:{...await C(r,e),tenant:i,flowId:r,chatId:s},executedNodes:[],context:{}};return t.setState({...t.state,engineState:l}),l}catch(o){return console.error("Failed to initialize engine state:",o),null}}async function Ht(t,e,n){var r;if(e&&t.HX_CORE_URL&&t.HX_API_KEY)try{let s=await U(e,t),a=(r=s==null?void 0:s.metadata)==null?void 0:r.org;if(typeof a=="string"&&a.trim())return W(a)}catch(s){console.warn(`[secrets] could not read org for flow ${e}`,s)}return W(n)}async function D(t){var ae,ie,ce,le,ue,de,pe,fe,me,ge,ye;let{agent:e,env:n,ctx:r,payload:s,connection:a}=t,o=Date.now(),i=[],c=t.runId?De():void 0,l=async()=>await v(e),u=async d=>{await We(e,d)},m=async d=>{if(e.state.modelsCache&&e.state.modelsCache[d])return e.state.modelsCache[d];try{let{fetchOraModel:h}=await import("./oraApi-YIJGMXX7.js"),T=await h(d,n);return e.setState({...e.state,modelsCache:{...e.state.modelsCache||{},[d]:T}}),T}catch(h){throw console.error(`Error fetching model ${d}:`,h),h}},f={id:Kt(),role:"user",type:"text",content:s.text,images:s.images,ts:Date.now()};await u(f);let p={onChangeState:d=>{e.setState({...e.state,engineState:d})},onServerEvent:async d=>{var h;await((h=t.onServerEvent)==null?void 0:h.call(t,d)),i.push(d)},onTelemetry:async d=>{var _,he,we,Se,Re,Ee;let h=t.user,T=typeof(h==null?void 0:h.org)=="string"&&h.org.trim()?h.org.trim():"default";await Qe({...d,userId:t.resolveUserId(),tenant:((he=(_=e.state.engineState)==null?void 0:_.flowData)==null?void 0:he.tenant)||"",org:T,flowId:((Se=(we=e.state.engineState)==null?void 0:we.flowData)==null?void 0:Se.flowId)||"",sessionId:((Ee=(Re=e.state.engineState)==null?void 0:Re.flowData)==null?void 0:Ee.chatId)||""},n)},onError:d=>{var h;(h=t.onError)==null||h.call(t,d),e.setState({...e.state,error:d})},shouldStop:t.shouldStop},g=e.state.engineState?{...e.state.engineState}:null;if(g){let{engineState:d,refreshed:h}=await Ye(n,g);g=d,h&&e.setState({...e.state,engineState:g,modelsCache:{}})}else if(g=await M(e,n),!g){let d="Failed to initialize agent";return p.onError(d),{status:"failed",error:d,path:[]}}let y=t.user??void 0,w=(ae=g.flowData)==null?void 0:ae.tenant,S=await Ht(n,(ie=g.flowData)==null?void 0:ie.flowId,y==null?void 0:y.org),R=w?await ze(n,w,S):{};(ce=t.onSecretsLoaded)==null||ce.call(t,R),g={...g,context:{...g.context||{},user:y}},e.setState({...e.state,user:y,engineState:g});let b={env:n,ctx:r,conn:a,getMessages:l,setMessages:u,getOraModel:m,secrets:R,userAuth:t.userAuth,user:y,composioSessions:t.composioSessions,publicOrigin:t.publicOrigin,skillRefCache:t.skillRefCache,runId:t.runId,outputCollector:c,agentMemory:typeof((le=e.state.memory)==null?void 0:le.content)=="string"?e.state.memory.content:"",shouldStop:t.shouldStop,workerStack:(ue=g.flowData)!=null&&ue.flowId?[g.flowData.flowId]:[],workerCalls:{count:0}},x=await je(b,g,p)(s),E=e.state.engineState??g;if(x.status==="completed")try{let d=await Je({sessionEnv:b,engineState:E,previousContent:typeof((de=e.state.memory)==null?void 0:de.content)=="string"?e.state.memory.content:"",userText:s.text||"",messages:await l()});if(d.status==="skipped")await p.onServerEvent({type:"agent:memory",content:{skipped:!0,reason:d.reason},timestamp:Date.now()});else if(!d.content.trim())await p.onServerEvent({type:"agent:memory",content:{updated:!1,empty:!0,error:d.error,fallback:d.fallback},timestamp:Date.now()});else{let h={promptTokens:((pe=E.tokenUsage)==null?void 0:pe.promptTokens)??0,completionTokens:((fe=E.tokenUsage)==null?void 0:fe.completionTokens)??0,totalTokens:((me=E.tokenUsage)==null?void 0:me.totalTokens)??0};d.usage&&(h.promptTokens+=d.usage.promptTokens,h.completionTokens+=d.usage.completionTokens,h.totalTokens+=d.usage.totalTokens),E={...E,tokenUsage:h},e.setState({...e.state,engineState:E,memory:{content:d.content,updatedTs:Date.now(),...d.error?{lastError:d.error}:{},...d.fallback?{fallback:!0}:{}}}),await p.onTelemetry({type:"memory_update",payload:{model:d.modelId,truncated:d.truncated,usage:d.usage,fallback:d.fallback,error:d.error}}),await p.onServerEvent({type:"agent:memory",content:{updated:!0,truncated:d.truncated,fallback:d.fallback,error:d.error},timestamp:Date.now()})}}catch(d){let h=d instanceof Error?d.message:"Memory update failed";console.error("Memory update failed:",d),await p.onServerEvent({type:"agent:memory",content:{error:h},timestamp:Date.now()})}if(x.status==="completed"&&t.runId&&(c!=null&&c.hasOutputs())){let{flowId:d,chatId:h}=E.flowData??{};if(!d||!h)x={status:"failed",error:"Structured output persistence requires flowId and sessionId"};else try{await $e(n,{flowId:d,sessionId:h,runId:t.runId,createdAt:new Date(o).toISOString(),data:c.snapshotData(),answerNodeIds:c.answerNodeIds()});let T={...E.results||{}};for(let _ of c.answerNodeIds())T[_]={...T[_]||{},persisted:!0,runId:t.runId};E={...E,results:T},e.setState({...e.state,engineState:E})}catch(T){let _=T instanceof Error?T.message:"Structured output persistence failed";p.onError(_),await p.onServerEvent({type:"error:answer-output",content:{runId:t.runId,error:_},timestamp:Date.now()}),x={status:"failed",error:_}}}let{tenant:$,flowId:z,chatId:V}=E.flowData??{},wt=(ge=E.flowData)==null?void 0:ge.org;$&&z&&V&&r.waitUntil(Ze(n,{id:`${z}::${V}`,tenant:$,org:wt,flowId:z,sessionId:V,userId:t.resolveUserId(),title:(ye=s.text)==null?void 0:ye.slice(0,120),turnTs:o,events:i})),e.setState({...e.state,lastUpdated:new Date});let St=(E.executedNodes??[]).flatMap(d=>typeof(d==null?void 0:d.id)=="string"?[d.id]:[]),Rt=typeof x.error=="string"?te(x.error,R,t.userAuth):x.error,oe=c!=null&&c.hasOutputs()?te(c.snapshotData(),R,t.userAuth):void 0;return{status:x.status,error:Rt,engineState:E,path:St,...oe!==void 0?{outputs:oe}:{}}}import{nanoid as jt}from"nanoid";function Wt(t){let e=t.headers.get("X-User-Payload");if(!e)return null;try{let n=JSON.parse(e),r=typeof(n==null?void 0:n.email)=="string"?P(n.email):null;return r?{...n,email:r}:null}catch{return null}}async function et(t,e,n,r){var s;try{let a=await e.json(),o=a.message;if(!o||typeof o!="string")return new Response(JSON.stringify({error:"Invalid message"}),{status:400,headers:{"content-type":"application/json"}});let i=typeof a.userId=="string"?P(a.userId):null,c=Wt(e),l=c==null?void 0:c.email;c?t.setState({...t.state,user:c,injectedUserId:l}):i&&!((s=t.state.user)!=null&&s.email)&&t.setState({...t.state,injectedUserId:i});let u=()=>l??i??t.state.injectedUserId??void 0;t.skillRefCache||(t.skillRefCache=new Map);let m=a.inputs&&typeof a.inputs=="object"?a.inputs:void 0;if(!t.state.engineState&&!await M(t,n))return new Response(JSON.stringify({error:"Failed to initialize agent"}),{status:500,headers:{"content-type":"application/json"}});let f=`run-${jt(12)}`;await t.registerManualRun(f,o,u()),await N(n,f).catch(w=>{console.warn(`[AgentHTTP] could not mark manual run ${f} as running`,w)});let p;try{p=await D({agent:t,env:n,ctx:r,payload:{text:o,inputs:m},skillRefCache:t.skillRefCache,user:c??void 0,resolveUserId:u,runId:f,shouldStop:()=>t.isRunStopRequested(f)}),r.waitUntil(t.completeManualRun(f,p.status==="completed"?"succeeded":p.status==="stopped"?"skipped":"failed",p.error))}finally{await t.clearRunStopRequest(f)}if(p.status==="failed")return new Response(JSON.stringify({error:p.error||"Agent execution failed",runId:f,path:p.path??[]}),{status:500,headers:{"content-type":"application/json"}});if(p.status==="stopped")return new Response(JSON.stringify({error:p.error||"Stopped by user"}),{status:409,headers:{"content-type":"application/json"}});let y=(await v(t)).reverse().find(w=>w.role==="assistant");return new Response(JSON.stringify({answer:(y==null?void 0:y.content)||"",runId:f,path:p.path??[],...p.outputs!==void 0?{outputs:p.outputs}:{}}),{headers:{"content-type":"application/json"}})}catch(a){return new Response(JSON.stringify({error:a.message}),{status:500,headers:{"content-type":"application/json"}})}}async function tt(t){try{return await K(t),t.skillRefCache&&t.skillRefCache.clear(),t.setState({...t.state,error:"",engineState:void 0,modelsCache:{},lastUpdated:new Date}),new Response(JSON.stringify({success:!0,messages:[]}),{headers:{"content-type":"application/json"}})}catch(e){return new Response(JSON.stringify({error:e.message}),{status:500,headers:{"content-type":"application/json"}})}}var nt="trigger:nonce:",qt=900*1e3,re="run:stop:",st=class extends rt{initialState={user:void 0,injectedUserId:null,sessionId:null,lastUpdated:null,modelsCache:{},memory:void 0};constructor(e,n){super(e,n),this.requireStateValidation()}validateStateChange(e,n){if(n!=="server")throw new Error("Client state updates are forbidden")}requireStateValidation(){if(typeof rt.prototype.validateStateChange!="function")throw new Error("AgentDO requires agents >= 0.8.7 with validateStateChange; upgrade the tenant SDK")}resolveSessionUserId(){return this.state.injectedUserId??void 0}secrets=Object.freeze({});userAuth={};composioSessions={};skillRefCache=new Map;publicOrigin;async inspectPersistedSession(e){return e==="state"?{state:this.state}:e==="memory"?{memory:this.state.memory??null}:{messages:await v(this)}}async requestRunStop(e){return e!=null&&e.trim()?(await this.ctx.storage.put(`${re}${e}`,Date.now()),{accepted:!0}):{accepted:!1}}async isRunStopRequested(e){return!!await this.ctx.storage.get(`${re}${e}`)}async clearRunStopRequest(e){await this.ctx.storage.delete(`${re}${e}`)}async onRequest(e){this.requireStateValidation();let n=new URL(e.url);if(n.pathname.endsWith("/state"))return new Response(JSON.stringify(this.state),{headers:{"content-type":"application/json"}});if(n.pathname.endsWith("/history")){let r=await v(this);return new Response(JSON.stringify(r),{headers:{"content-type":"application/json"}})}return e.method==="POST"&&n.pathname.endsWith("/message")?et(this,e,this.env,this.ctx):e.method==="DELETE"&&n.pathname.endsWith("/clear")?tt(this):new Response("Ready to assist.")}async onConnect(e,n){var f,p,g,y,w;this.requireStateValidation();let[r,s]=e.server.split("::"),o=(f=(await U(r,this.env)).metadata)==null?void 0:f.tenant;this.userAuth={},this.composioSessions={},this.publicOrigin=void 0;let i=null;if(n.request){try{this.publicOrigin=new URL(n.request.url).origin}catch{}let S=n.request.headers.get("X-User-Payload");if(S)try{i=JSON.parse(S)}catch(R){console.warn("Failed to parse X-User-Payload",R)}}e.setState({...e.state,authorizedUser:i});let c=await C(r,this.env);this.setState({...this.state,user:i||null,sessionId:s,engineState:{flowData:{...c,tenant:o,flowId:r,chatId:s},executedNodes:[],context:i?{user:i}:{}}}),i||console.warn("[AgentDO] WebSocket connected without authenticated user \u2014 Composio manual auth requires login (access_token on socket URL)");let l=await v(this);k(e,I.SERVER_HISTORY,JSON.stringify({messages:l}));let m=(((p=c==null?void 0:c.state)==null?void 0:p.nodes)??(c==null?void 0:c.nodes)??[]).find(S=>S.type==="startNode");if(m){let S={allow_images:((g=m.data)==null?void 0:g.allow_images)??!1,allow_documents:((y=m.data)==null?void 0:y.allow_documents)??!1,greeting:(w=m.data)==null?void 0:w.greeting};k(e,I.SERVER_CONFIG,JSON.stringify(S))}}async onMessage(e,n){if(typeof n!="string")return;let r=n.indexOf(":");if(r===-1)return;let s=n.substring(0,r),a=n.substring(r+1);if(!s||!a)return;let i={[I.USER_MESSAGE]:c=>this.onUserMessage(e,c),[I.USER_CLEAR_HISTORY]:()=>this.onClearHistory(e),[I.USER_AUTH]:c=>this.onUserAuth(e,c),[I.USER_IDENTITY]:c=>this.onUserIdentity(e,c)}[s];i&&await i(a)}async onUserMessage(e,n){var i;let r=ke(n),s=((i=e.state)==null?void 0:i.authorizedUser)??void 0,a=()=>(s==null?void 0:s.email)??this.resolveSessionUserId(),o=`run-${Gt(12)}`;await this.registerManualRun(o,r.text,a()),await N(this.env,o).catch(c=>{console.warn(`[AgentDO] could not mark manual run ${o} as running`,c)});try{let c=await D({agent:this,env:this.env,ctx:this.ctx,payload:r,connection:e,userAuth:this.userAuth,composioSessions:this.composioSessions,publicOrigin:this.publicOrigin,skillRefCache:this.skillRefCache,user:s,resolveUserId:a,runId:o,shouldStop:()=>this.isRunStopRequested(o),onServerEvent:l=>{k(e,I.SERVER_EVENT,JSON.stringify(l))},onError:l=>{k(e,I.SERVER_ERROR,l)},onSecretsLoaded:l=>{this.secrets=l}});this.ctx.waitUntil(this.completeManualRun(o,c.status==="completed"?"succeeded":c.status==="stopped"?"skipped":"failed",c.error))}finally{await this.clearRunStopRequest(o)}}registerManualRun(e,n,r){var c;let{tenant:s,flowId:a,chatId:o}=((c=this.state.engineState)==null?void 0:c.flowData)??{};if(!s||!a||!o)return Promise.resolve();let i=qe(r||this.resolveSessionUserId(),o);return Xe(this.env,{id:e,tenant:s,flowId:a,userId:i,sessionId:o,label:n==null?void 0:n.slice(0,120)})}completeManualRun(e,n,r){return j(this.env,e,{status:n,error:r})}async enqueueTrigger(e){var s;if(!(e!=null&&e.runId)||!(e!=null&&e.flowId))return{queued:!1};if(e.nonce&&!await this.claimTriggerNonce(e.nonce))return console.warn(`[AgentDO] rejected replayed trigger nonce ${e.nonce}`),{queued:!1,duplicate:!0};let n=e.runAsUserId;return n&&!((s=this.state.user)!=null&&s.email)&&this.state.injectedUserId!==n&&this.setState({...this.state,injectedUserId:n}),{queued:!0,taskId:await this.queue("processTrigger",e)}}async claimTriggerNonce(e){let n=`${nt}${e}`;if(await this.ctx.storage.get(n))return!1;let r=Date.now();await this.ctx.storage.put(n,r);let a=[...(await this.ctx.storage.list({prefix:nt})).entries()].filter(([,o])=>r-o>qt).map(([o])=>o);return a.length>0&&await this.ctx.storage.delete(a),!0}async processTrigger(e){if(!(await N(this.env,e.runId)).claimed){console.warn(`[AgentDO] activation ${e.activationId} skipped \u2014 run ${e.runId} already claimed`);return}try{this.state.engineState||await M(this,this.env);let r=xe(G(this.state.engineState)),s=Te(r,e.inputs||{},e.label),a=await D({agent:this,env:this.env,ctx:this.ctx,payload:{text:s,inputs:e.inputs||{}},composioSessions:this.composioSessions,skillRefCache:this.skillRefCache,resolveUserId:()=>e.runAsUserId||this.resolveSessionUserId(),runId:e.runId,shouldStop:()=>this.isRunStopRequested(e.runId),onSecretsLoaded:o=>{this.secrets=o}});await j(this.env,e.runId,{status:a.status==="completed"?"succeeded":a.status==="stopped"?"skipped":"failed",error:a.error})}catch(r){let s=r instanceof Error?r.message:"Trigger execution failed";throw await j(this.env,e.runId,{status:"failed",error:s}),r}finally{await this.clearRunStopRequest(e.runId)}}async onUserIdentity(e,n){let r=P(n);if(!r){k(e,I.SERVER_ERROR,"Invalid identity payload");return}this.setState({...this.state,injectedUserId:r}),k(e,I.SERVER_EVENT,JSON.stringify({type:"info:identity",content:{set:!0}}))}async onUserAuth(e,n){let r=Ae(n);if(!r){k(e,I.SERVER_ERROR,"Invalid auth payload");return}let s=r.value.trim();s===""?delete this.userAuth[r.name]:this.userAuth[r.name]=r.value,k(e,I.SERVER_EVENT,JSON.stringify({type:"info:auth",content:{name:r.name,set:s!==""}}))}async onClearHistory(e){await K(this),this.userAuth={},this.composioSessions={},this.skillRefCache.clear(),this.setState({...this.state,error:"",engineState:this.state.engineState,memory:this.state.memory,modelsCache:{},lastUpdated:new Date}),e&&k(e,I.SERVER_HISTORY,JSON.stringify({messages:[]}))}async onStart(){`${JSON.stringify(this.state)}`,await Ge(this);let e=await v(this);`${JSON.stringify(e)}`}async onClose(e,n,r,s){console.log(`Session closed: ${this.state.sessionId} ${n} - ${r}`)}async onError(e){console.error("AgentDO encountered an error:",e)}};import{DurableObject as Xt}from"cloudflare:workers";var zt=720*60*60*1e3,ot=class extends Xt{cryptoKey;async load(){let e=await this.ctx.storage.get("state");if(!e)return null;await this.touch();try{let n=await crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},await this.key(),e.data);return{state:JSON.parse(new TextDecoder().decode(n)),updatedAt:e.updatedAt}}catch{return await this.ctx.storage.delete("state"),null}}async save(e,n){let r=await this.ctx.storage.get("state");if(r&&r.updatedAt>n)return;let s=crypto.getRandomValues(new Uint8Array(12)),a=await crypto.subtle.encrypt({name:"AES-GCM",iv:s},await this.key(),new TextEncoder().encode(JSON.stringify(e)));await this.ctx.storage.put("state",{iv:s.buffer,data:a,updatedAt:n}),await this.touch()}async invalidate(){await this.ctx.storage.delete("state")}async acquire(e,n){let r=await this.ctx.storage.get("lease");return r&&r.holder!==e&&r.until>Date.now()?!1:(await this.ctx.storage.put("lease",{holder:e,until:Date.now()+n}),!0)}async release(e){let n=await this.ctx.storage.get("lease");(n==null?void 0:n.holder)===e&&await this.ctx.storage.delete("lease")}async busy(){let e=await this.ctx.storage.get("lease");return!!e&&e.until>Date.now()}async alarm(){await this.ctx.storage.deleteAll()}async touch(){await this.ctx.storage.setAlarm(Date.now()+zt)}key(){return this.cryptoKey??=(async()=>{let e=Uint8Array.from(atob(this.env.WEB_SESSION_KEY??""),n=>n.charCodeAt(0));if(e.length!==32)throw new Error("WEB_SESSION_KEY must be 32 bytes in base64");return crypto.subtle.importKey("raw",e,"AES-GCM",!1,["encrypt","decrypt"])})(),this.cryptoKey}};function Vo(t){let e=t.state;if(!e)return null;let n=["startNode","answerNode"];for(let r of n)if(!e.nodes.some(a=>a.type===r))return!1;return e.nodes.find(r=>r.type==="startNode")}import{importSPKI as Vt,jwtVerify as Jt}from"jose";function q(t){let e={};if(!t)return e;let n=t.split(";");for(let r of n){let s=r.indexOf("=");if(s>-1){let a=r.slice(0,s).trim(),o=r.slice(s+1).trim();a&&(e[a]=decodeURIComponent(o))}}return e}function Yt(t){return(typeof t.email=="string"?t.email.trim():"")||null}async function O(t,e,n){let r=q(t.headers.get("cookie")),s=new URL(t.url),a=r.access_token||s.searchParams.get("access_token"),o=await Bt(e,a);if(o.ok){let i=o.payload,c=Yt(i);return c?{id:i.sub,email:c,name:i.name,first_name:i.given_name,last_name:i.family_name,tenant:i.tenant,org:typeof i.org=="string"?i.org:null,roles:i["ora-roles"],db_name:i.db_name||null,user_id:i.user_id||null}:null}return null}async function Bt(t,e){if(!e||typeof e!="string")return{ok:!1,payload:null,protectedHeader:null};if(!t.KC_RS256_PK)throw new Error("PK is not defined");let n=`-----BEGIN PUBLIC KEY-----
6
6
  ${t.KC_RS256_PK}
7
- -----END PUBLIC KEY-----`,n=await Wt(r,"RS256");try{let{payload:s,protectedHeader:a}=await Xt(e,n);return{ok:!0,payload:s,protectedHeader:a}}catch(s){return console.error("JWT verification failed:",s),{ok:!1,payload:null,protectedHeader:null}}}async function wo(t,e,r){let n=new URL(t.url);if(n.pathname==="/favicon.ico")return new Response(null,{status:204});if(n.pathname.startsWith("/.well-known/appspecific"))return new Response(null,{status:204})}import{getAgentByName as X}from"agents";import{getAgentByName as Jt}from"agents";async function ot(t,e){let r=e.sessionId||e.runAsUserId,n=e.inputs||{},s=e.runId;if(!s){let c=await B(t,{tenant:e.tenant,flowId:e.flowId,userId:e.runAsUserId,sessionId:r,triggerId:e.triggerId,triggerKind:e.triggerKind,invocationMode:e.invocationMode,activationId:e.activationId,deliveryId:void 0,externalDeliveryId:e.externalDeliveryId,correlationKey:e.correlationKey,inputs:n,label:e.label});if(!c)return{status:"error",error:"Failed to register run"};if(!c.created&&c.run.status!=="queued")return{status:"deduped",runId:c.run.id};s=c.run.id}let a={...e,sessionId:r,runId:s,inputs:n},i=await(await Jt(t.AGENT,`${e.flowId}::${r}`)).enqueueTrigger(a);return i.duplicate?{status:"deduped",runId:s}:i.queued?{status:"queued",runId:s,activation:a,taskId:i.taskId}:{status:"error",error:"Failed to queue trigger"}}var it="x-ora-signature",ct="x-ora-timestamp",lt="x-ora-nonce",ut="x-ora-tenant",xo=300,at=new TextEncoder;function Yt(t){return[...new Uint8Array(t)].map(e=>e.toString(16).padStart(2,"0")).join("")}function Bt(t){try{let e=new URL(t);return`${e.origin}${e.pathname.replace(/\/$/,"")}`}catch{return t.replace(/\/$/,"")}}function dt(t){return["v1",t.timestamp,t.nonce,t.tenant,Bt(t.destination),t.body].join(`
8
- `)}async function pt(t,e){let r=await crypto.subtle.importKey("raw",at.encode(t),{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return Yt(await crypto.subtle.sign("HMAC",r,at.encode(e)))}function Zt(t,e){if(t.length!==e.length)return!1;let r=0;for(let n=0;n<t.length;n++)r|=t.charCodeAt(n)^e.charCodeAt(n);return r===0}async function To(t){let e=String(t.timestamp??Math.floor(Date.now()/1e3)),r=await pt(t.secret,dt({timestamp:e,nonce:t.nonce,tenant:t.tenant,destination:t.destination,body:t.body}));return{"content-type":"application/json",[ut]:t.tenant,[ct]:e,[lt]:t.nonce,[it]:`v1=${r}`}}async function ft(t){var l,u,m,f,p;if(!((l=t.secret)!=null&&l.trim()))return{ok:!1,error:"HX_API_KEY is not configured"};let e=(u=t.headers.get(ut))==null?void 0:u.trim(),r=(m=t.headers.get(ct))==null?void 0:m.trim(),n=(f=t.headers.get(lt))==null?void 0:f.trim(),s=(p=t.headers.get(it))==null?void 0:p.trim();if(!e||!r||!n||!s)return{ok:!1,error:"missing signature headers"};if(!s.startsWith("v1="))return{ok:!1,error:"unsupported signature version"};let a=Number(r);if(!Number.isFinite(a))return{ok:!1,error:"invalid timestamp"};let o=Math.floor((t.now??Date.now())/1e3),i=t.toleranceSeconds??300;if(Math.abs(o-a)>i)return{ok:!1,error:"stale timestamp"};let c=await pt(t.secret.trim(),dt({timestamp:r,nonce:n,tenant:e,destination:t.url,body:t.body}));return Zt(s.slice(3),c)?{ok:!0,tenant:e,nonce:n,timestamp:a}:{ok:!1,error:"signature mismatch"}}var A=(t,e=200)=>new Response(JSON.stringify(t),{status:e,headers:{"content-type":"application/json"}});async function mt(t,e,r){var l;if(new URL(t.url).pathname!=="/api/triggers/dispatch")return;if(t.method!=="POST")return A({error:"Method not allowed"},405);let s=await t.text(),a=await ft({secret:e.HX_API_KEY,body:s,url:t.url,headers:t.headers});if(!a.ok)return console.warn(`[triggers] rejected dispatch: ${a.error}`),A({error:"Invalid signature"},401);let o;try{o=JSON.parse(s)}catch{return A({error:"Invalid payload"},400)}if(!(o!=null&&o.runId)||!(o!=null&&o.flowId)||!(o!=null&&o.runAsUserId)||!(o!=null&&o.tenant)||!(o!=null&&o.activationId)||!(o!=null&&o.triggerId)||!(o!=null&&o.triggerKind)||!(o!=null&&o.invocationMode))return A({error:"activationId, triggerId, triggerKind, invocationMode, runId, flowId, runAsUserId and tenant are required"},400);if(o.tenant!==a.tenant)return A({error:"Tenant mismatch"},403);let i;try{i=await b(o.flowId,e)}catch{return A({error:"Flow not found"},404)}if(!((l=i==null?void 0:i.metadata)!=null&&l.tenant)||i.metadata.tenant!==o.tenant)return console.warn(`[triggers] flow ${o.flowId} does not belong to tenant ${o.tenant}`),A({error:"Tenant mismatch"},403);let c=await ot(e,{...o,sessionId:o.sessionId||o.runAsUserId,nonce:a.nonce});return c.status==="error"?A({error:c.error},502):c.status==="deduped"?A({deduped:!0,runId:c.runId},200):A({accepted:!0,runId:c.runId,taskId:c.taskId},202)}var re=/^[A-Za-z0-9_-]{1,64}$/;async function se(t,e,r,n,s,a=!1){let o=(f,p)=>({response:new Response(f,{status:p})});if(!/^[A-Za-z0-9_-]+$/.test(n))return o("Invalid flowId",400);if((!a||s)&&(!s||!re.test(s)))return o("Invalid sessionId",400);let i;try{i=await b(n,e)}catch{return o("Flow not found",404)}let c=i==null?void 0:i.metadata;if(!c||!["active","activo"].includes(c.status))return o("Flow not found",404);if(!e.TENANT||c.tenant!==e.TENANT)return o("Forbidden",403);let l=await v(t,e,r),u=l&&typeof l=="object"?l:void 0;if(u&&u.tenant!==e.TENANT)return o("Forbidden",403);if(c.visibility==="public")return{user:u};if(!u){if(!a)return o("Unauthorized",401);let f=new URL(t.url),p=new URL("/login",f.origin);return p.searchParams.set("nextURL",`${f.pathname}${f.search}`),{response:Response.redirect(p.toString(),302)}}if((c.org||"default")!==(u.org||"default"))return o("Forbidden",403);let m=W(t.headers.get("cookie")).access_token||new URL(t.url).searchParams.get("access_token");if(!m)return o("Unauthorized",401);try{let f=await fetch(`${e.HX_CORE_URL}/flows/${encodeURIComponent(n)}`,{headers:{Authorization:m},cache:"no-store"});if(!f.ok||(await f.json()).id!==n)return o("Forbidden",403)}catch{return o("Forbidden",403)}return{user:u}}var Qt=/^[A-Za-z0-9_-]+$/,en=new Set(["state","messages","memory"]);async function tn(t,e){let r=new URL(t.url);if(!r.pathname.startsWith("/api/internal/sessions/"))return;let n=r.pathname.split("/");if(n[6]!=="runs"||n[8]!=="stop"||n.length!==9)return;if(t.method!=="POST")return new Response("Method not allowed",{status:405});if(!e.HX_API_KEY||t.headers.get("Authorization")!==e.HX_API_KEY)return new Response("Unauthorized",{status:401});let s=decodeURIComponent(n[4]||""),a=decodeURIComponent(n[5]||""),o=decodeURIComponent(n[7]||"");if(!s||!a||!o)return new Response("Not found",{status:404});try{let i=await X(e.AGENT,`${s}::${a}`);return Response.json(await i.requestRunStop(o))}catch(i){return console.error("[agents] failed to request run stop",i),Response.json({error:"Failed to stop run"},{status:502})}}async function nn(t,e){let r=new URL(t.url);if(!r.pathname.startsWith("/api/internal/sessions/"))return;if(t.method!=="GET")return new Response("Method not allowed",{status:405});let n=t.headers.get("Authorization")||"";if(!e.HX_API_KEY||n!==e.HX_API_KEY)return new Response("Unauthorized",{status:401});let s=r.pathname.split("/"),a=decodeURIComponent(s[4]||""),o=decodeURIComponent(s[5]||""),i=s[6];if(!a||!o||!i||!en.has(i))return new Response("Not found",{status:404});try{let l=await(await X(e.AGENT,`${a}::${o}`)).inspectPersistedSession(i);return Response.json(l)}catch(c){return console.error("[agents] failed to inspect persisted session",c),Response.json({error:"Failed to inspect persisted session"},{status:502})}}async function Fo(t,e,r){var i,c;let n=new URL(t.url),s=await mt(t,e,r);if(s instanceof Response)return s;let a=await tn(t,e);if(a instanceof Response)return a;let o=await nn(t,e);if(o instanceof Response)return o;if(n.pathname.startsWith("/a/")){let l=n.pathname.split("/"),u=l[2],m=l[3];try{if(!u)return Response.redirect(new URL("/",n.origin).toString(),302);let f=await se(t,e,r,u,m,!0);if(f.response)return f.response;if(!m){let p=crypto.randomUUID(),g=new URL(`/a/${u}/${p}`,n.origin);return Response.redirect(g.toString(),302)}}catch(f){return console.error("Error accessing flow KV:",f),new Response("Flow error",{status:500})}}if(n.pathname.startsWith("/api/agent/flow/")){let l=n.pathname.split("/"),u=l[4],m=l[5];return gt(t,e,r,u,m)}if(n.pathname.startsWith("/api/ora/connect")){let l=n.pathname.split("/"),u=l[4],m=l[5];if(!u||!m)return new Response("Missing flowId or sessionId",{status:400});let f=t.headers.get("Authorization")||n.searchParams.get("authorization");if(!f)return new Response("Missing Authorization header",{status:401});try{let p=`${e.HX_CORE_URL}/p/v1/validation/key/agent/${u}`,y=await(await fetch(p,{method:"GET",headers:{Authorization:f}})).json();if(((i=y.payload)==null?void 0:i.flowId)!==u)return console.error("FlowId mismatch:",(c=y.payload)==null?void 0:c.flowId,"!==",u),new Response("Validation error",{status:403});let w=`${u}::${m}`,R=await v(t,e,r);if(!R){let $=new URL(t.url).searchParams.has("access_token");console.warn(`[agents] Unauthenticated agent socket upgrade (access_token query=${$}) \u2014 Composio connections from tool editor will not apply`)}let S=new Headers(t.headers);S.delete("X-User-Payload"),R&&S.set("X-User-Payload",JSON.stringify(R));let _=new Request(t,{headers:S});return(await X(e.AGENT,w)).fetch(_)}catch(p){return console.error("Error in /api/ora/connect:",p),new Response("Internal error",{status:500})}}}async function gt(t,e,r,n,s){let a=`${n}::${s}`;try{let o=await se(t,e,r,n,s);if(o.response)return o.response;let i=o.user,c=new Headers(t.headers);c.delete("X-User-Payload"),i&&c.set("X-User-Payload",JSON.stringify(i));let l=new Request(t,{headers:c});return(await X(e.AGENT,a)).fetch(l)}catch(o){return console.error("Error accessing agent:",o),new Response("Agent error",{status:500})}}var Lo=async(t,e,r,n)=>{if(!(n!=null&&n.flowId)||!Qt.test(n.flowId)||!(n!=null&&n.sessionId)||!re.test(n.sessionId))return new Response("Not found",{status:404});let s=new URL(`/api/agent/flow/${n.flowId}/${n.sessionId}`,t.url),a=new Headers;for(let[c,l]of t.headers.entries())c.toLowerCase().startsWith("x-")||a.append(c,l);let o={method:t.method,headers:a};t.body&&t.method!=="GET"&&t.method!=="HEAD"&&(o.body=t.body,o.duplex="half");let i=new Request(s.toString(),o);return gt(i,e,r,n.flowId,n.sessionId)};async function Ko(t,e,r){let n=new URL(t.url),s=t.method;if(!n.pathname.startsWith("/api/instances"))return;let a=await v(t,e,r);if(!a)return new Response("Unauthorized",{status:401});let o=e.HX_CORE_URL,i=e.HX_API_KEY;if(!o||!i)return console.error("Missing configuration: HX_CORE_URL or HX_API_KEY"),new Response("Internal Server Error",{status:500});let l=n.pathname.slice("/api/instances".length);l.startsWith("/")&&(l=l.slice(1)),l.endsWith("/")&&(l=l.slice(0,-1));let u="/ora/instances";l&&(u+=`/${l}`);let m=o.endsWith("/")?o.slice(0,-1):o,f=new URL(`${m}${u}`);n.searchParams.forEach((y,w)=>{f.searchParams.set(w,y)}),s==="GET"&&!l&&f.searchParams.set("filter_user_id",a.email);let p=new Headers;p.set("Authorization",i),p.set("Content-Type","application/json"),p.set("X-User-Payload",JSON.stringify(a));let g={method:s,headers:p};if(["POST","PATCH","PUT"].includes(s))try{g.body=await t.text()}catch(y){console.error("Error reading request body:",y)}try{let y=await fetch(f.toString(),g),w=await y.text();return new Response(w,{status:y.status,headers:{"Content-Type":"application/json"}})}catch(y){return console.error("Error proxying to flow instance backend:",y),new Response("Internal Server Error",{status:500})}}async function Wo(t,e,r){let n=new URL(t.url);if(t.method==="POST"&&n.pathname==="/auth/login")try{let s=await t.formData(),a=s.get("username"),o=s.get("password"),i=s.get("nextURL")||"/";if(!a||!o)return new Response("Missing username or password",{status:400});let c=new URLSearchParams;c.append("username",a),c.append("password",o),c.append("grant_type","password"),c.append("client_id",e.KC_CLIENT_ID),c.append("client_secret",e.KC_CLIENT_SECRET);let l=await fetch(`${e.KC_BASE_URL}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Cookie:"hxsecure=1"},body:c});if(!l.ok)return new Response("Unauthorized",{status:401});let u=await l.json(),m=new Response(null,{status:302,headers:{Location:i}}),p=n.protocol==="https:"?"; Secure":"",g=(y,w,R)=>{m.headers.append("Set-Cookie",`${y}=${w}; Path=/; HttpOnly${p}; SameSite=Lax; Max-Age=${R}`)};return u.access_token&&g("access_token",u.access_token,u.expires_in),u.refresh_token&&g("refresh_token",u.refresh_token,u.refresh_expires_in||3600*24*30),u.id_token&&g("id_token",u.id_token,u.expires_in),m}catch(s){return console.error("Auth error:",s),new Response("Internal Server Error",{status:500})}if(n.pathname==="/auth/logout"){let s=new Response(null,{status:302,headers:{Location:"/login"}}),a=o=>{s.headers.append("Set-Cookie",`${o}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=0`)};return a("access_token"),a("refresh_token"),a("id_token"),s}if(n.pathname.startsWith("/s/")){let s=await v(t,e,r);if(!s){let a=new URL("/login",n.origin);return a.searchParams.set("nextURL",`${n.pathname}${n.search}`),Response.redirect(a.toString(),302)}return{user:s}}}import{WorkerEntrypoint as rn}from"cloudflare:workers";import{getAgentByName as sn}from"agents";var on=/^[A-Za-z0-9_-]+$/,an=/^art-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,yt=class extends rn{async ask(e,r){var n,s,a,o;try{if(!e||typeof e!="string"||!on.test(e))throw console.error("[ArtifactWorkerGateway] invalid flowId:",e),new Error("Artifact worker request failed");if(!r||typeof r.message!="string")throw console.error("[ArtifactWorkerGateway] invalid input: message is required"),new Error("Artifact worker request failed");let i;if(r.sessionId!==void 0){if(typeof r.sessionId!="string"||!an.test(r.sessionId))throw console.error("[ArtifactWorkerGateway] invalid sessionId:",r.sessionId),new Error("Artifact worker request failed");i=r.sessionId}else i=`art-${crypto.randomUUID()}`;let c=(s=(n=this.ctx)==null?void 0:n.props)==null?void 0:s.slug,l=(o=(a=this.ctx)==null?void 0:a.props)==null?void 0:o.artifactUuid;if(!c||!l)throw console.error("[ArtifactWorkerGateway] missing slug or artifactUuid in gateway context props"),new Error("Artifact worker request failed");let u=this.env.ARTIFACT;if(!u)throw console.error("[ArtifactWorkerGateway] ARTIFACT binding not configured"),new Error("Artifact worker request failed");let m=u.idFromName(c),p=await u.get(m).allowsWorker({flowId:e,mode:"server",artifactUuid:l});if(!(p!=null&&p.ok))throw console.error(`[ArtifactWorkerGateway] grant check failed for flow ${e} on artifact ${c}`),new Error("Artifact worker request failed");let g=await sn(this.env.AGENT,`${e}::${i}`),y={message:r.message};r.inputs&&typeof r.inputs=="object"&&(y.inputs=r.inputs);let w=new Request("http://localhost/message",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(y)}),R=await g.fetch(w);if(!R.ok)throw console.error(`[ArtifactWorkerGateway] agent returned status ${R.status}`),new Error("Artifact worker request failed");let S=await R.json();return{text:typeof(S==null?void 0:S.answer)=="string"?S.answer:"",sessionId:i}}catch(i){throw(i==null?void 0:i.message)==="Artifact worker request failed"?i:(console.error("[ArtifactWorkerGateway] unexpected error in ask:",i),new Error("Artifact worker request failed"))}}};export{Et as ANONYMOUS_RUN_USER_PREFIX,st as AgentDO,yt as ArtifactWorkerGateway,Sn as CLASSIFIER_DEFAULTS,En as CLASSIFIER_RESERVED_HANDLES,Rn as CLEF_MODELS,bn as CRAWL_DEFAULTS,On as CRAWL_LIMITS,lr as DEFAULT_MEMORY_LENGTH,ur as DEFAULT_MEMORY_MODEL,yn as FLOW_INPUT_NAME_RE,as as FlowExecutionStoppedError,jr as GENERATION_PARAM_KEYS,qr as GENERATION_PRESETS,hr as ISSUE_SEVERITY,wn as MAX_USER_IDENTITY_LENGTH,ir as MEMORY_LENGTH_MD_LINES,cr as MEMORY_LENGTH_TOKENS,is as MODEL_REGISTRY_SNAPSHOT,Ln as NODE_CATALOG,F as NodeType,Mn as OUT_VAR_NAME_RE,Kr as PRESET_PARAM_KEYS,es as REASONING_EFFORT_LEVELS,ls as TENANT_ONLY_NODES,vr as TOOL_REGISTRY_SNAPSHOT,lt as TRIGGER_NONCE_HEADER,it as TRIGGER_SIGNATURE_HEADER,xo as TRIGGER_SIGNATURE_TOLERANCE_SECONDS,ut as TRIGGER_TENANT_HEADER,ct as TRIGGER_TIMESTAMP_HEADER,Bn as VariableResolutionError,xn as WORKER_GRAPH_DEFS,Tn as WORKER_GRAPH_SCHEMA,kn as WORKER_OP_SCHEMA,Ur as WORKER_TEMPLATES,Xr as applyPresetToOverrides,Ar as applyWorkerOps,Lo as artifactAgentProxy,Nr as buildClefRequest,vn as buildCrawlRequestBody,He as buildReasoningProviderOptions,Gn as buildScope,To as buildSignedTriggerHeaders,Te as buildTriggerMessageText,dn as buildUrl,Tr as canonicalGraph,zt as canonicalUserEmail,Ue as capMemoryContent,N as claimRun,Lr as classifierErrorResult,In as classifierHandle,Or as classifierIdFromLabel,Er as classifyIssues,H as clearAllMessages,Dr as clefTruncationWarning,gr as collectExternalRefs,fr as collectNodeRefs,K as completeRun,cn as convertTempMessure,Cn as crawlRequestKey,B as createRun,Hn as defaultNodeData,Gr as deriveParamSupport,_r as detectInlineCredentials,kr as diffGraphs,ot as dispatchTrigger,Ir as edgeId,mn as embedText,br as enabledComposioSlugs,Ge as ensureAgentTables,St as ensureMessagesTable,Mr as estimateClefTokens,pr as estimateTokens,er as extractOutVarValues,sr as extractTemplateReferences,Ne as extractUserKeypoints,Wn as findScopedSourceNode,gt as forwardToAgentFlow,O as getAllMessages,Kn as getAncestorNodeIds,Dn as getDefaultOutVars,Fn as getEffectiveOutVars,xe as getFlowInputDefs,cs as getModelEntry,Xn as getRefTail,qn as getUpstreamOutVars,Fo as handleAgentsRoutes,Wo as handleAuthRoutes,wo as handleCommonRoutes,Ko as handleIntancesRoutes,nn as handlePersistedSessionInspection,tn as handleSessionRunControl,mt as handleTriggerRoutes,fn as hashText,M as initializeEngineState,zn as isBinaryOutVar,Vn as isJsonContentType,us as isNodeTypeAllowedForTenant,be as isStartMemoryEnabled,Sr as issueFingerprint,Pr as jsonSchemaToZod,Ie as logc,Pe as looksLikeTranscript,Ce as memoryGenerationMaxTokens,L as memoryMdLineLimit,_e as memoryTokenLimit,Me as mergeKeypointMemory,I as messageTypes,yr as newExternalRefs,xr as nextNodeId,Bt as normalizeDestination,Vr as normalizeEffectiveParams,hn as normalizeFlowInputs,ss as normalizeModelEntry,ts as normalizeReasoning,Yr as openAiReasoningParamSupport,Jr as openAiStandardParamSupport,Fr as parseClefResponse,W as parseCookies,dr as parseMemoryLength,Jn as parsePayloadText,rr as parseTemplateExpression,Ae as parseUserAuth,ke as parseUserMessage,_n as parseWorkerGraph,Un as parseWorkerOps,zr as pickNodeOverrides,Yn as readFetchPayload,ns as reasoningEffortLevels,rs as reasoningExposable,Xe as recordRun,os as registerProvider,Cr as resolveAnswerMappings,je as resolveModelById,nr as resolveOutVarRef,Qn as resolveOutVarValue,Wr as resolvePreset,Le as resolveReasoningEffort,tr as resolveReference,We as resolveRunUserId,ar as resolveTemplate,mr as rewriteNodeDataRefs,or as rewriteTemplateNodeRefs,D as runAgentTurn,$r as runClef,Nn as runCrawl,un as safeParseJSON,J as sanitizeMemoryDocument,P as sanitizeUserIdentity,An as schemaErrors,Hr as selectClefHistory,Qe as sendEvent,k as serverSend,qe as setMessage,Pn as shapeCrawlOutput,pt as signTriggerMaterial,Ke as startEngine,ve as startMemoryLength,Oe as startMemoryModel,Qr as stripUnsupportedFromNodeData,ln as tempTool,Zt as timingSafeEqualHex,Fe as toStreamTextSettings,dt as triggerSignatureMaterial,pn as twitter,Rr as validateAuthoring,jn as validateClassifierData,po as validateFlowStart,wr as validateFlowStructure,$n as validateOutVars,gn as vectorize,Vt as verifyToken,ft as verifyTriggerRequest,v as verifyUser,Zn as walkPath,Zr as workersAiParamSupport,Br as xaiParamSupport};
7
+ -----END PUBLIC KEY-----`,r=await Vt(n,"RS256");try{let{payload:s,protectedHeader:a}=await Jt(e,r);return{ok:!0,payload:s,protectedHeader:a}}catch(s){return console.error("JWT verification failed:",s),{ok:!1,payload:null,protectedHeader:null}}}async function ea(t,e,n){let r=new URL(t.url);if(r.pathname==="/favicon.ico")return new Response(null,{status:204});if(r.pathname.startsWith("/.well-known/appspecific"))return new Response(null,{status:204})}import{getAgentByName as X}from"agents";import{getAgentByName as Zt}from"agents";async function at(t,e){let n=e.sessionId||e.runAsUserId,r=e.inputs||{},s=e.runId;if(!s){let c=await B(t,{tenant:e.tenant,flowId:e.flowId,userId:e.runAsUserId,sessionId:n,triggerId:e.triggerId,triggerKind:e.triggerKind,invocationMode:e.invocationMode,activationId:e.activationId,deliveryId:void 0,externalDeliveryId:e.externalDeliveryId,correlationKey:e.correlationKey,inputs:r,label:e.label});if(!c)return{status:"error",error:"Failed to register run"};if(!c.created&&c.run.status!=="queued")return{status:"deduped",runId:c.run.id};s=c.run.id}let a={...e,sessionId:n,runId:s,inputs:r},i=await(await Zt(t.AGENT,`${e.flowId}::${n}`)).enqueueTrigger(a);return i.duplicate?{status:"deduped",runId:s}:i.queued?{status:"queued",runId:s,activation:a,taskId:i.taskId}:{status:"error",error:"Failed to queue trigger"}}var ct="x-ora-signature",lt="x-ora-timestamp",ut="x-ora-nonce",dt="x-ora-tenant",oa=300,it=new TextEncoder;function Qt(t){return[...new Uint8Array(t)].map(e=>e.toString(16).padStart(2,"0")).join("")}function er(t){try{let e=new URL(t);return`${e.origin}${e.pathname.replace(/\/$/,"")}`}catch{return t.replace(/\/$/,"")}}function pt(t){return["v1",t.timestamp,t.nonce,t.tenant,er(t.destination),t.body].join(`
8
+ `)}async function ft(t,e){let n=await crypto.subtle.importKey("raw",it.encode(t),{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return Qt(await crypto.subtle.sign("HMAC",n,it.encode(e)))}function tr(t,e){if(t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t.charCodeAt(r)^e.charCodeAt(r);return n===0}async function aa(t){let e=String(t.timestamp??Math.floor(Date.now()/1e3)),n=await ft(t.secret,pt({timestamp:e,nonce:t.nonce,tenant:t.tenant,destination:t.destination,body:t.body}));return{"content-type":"application/json",[dt]:t.tenant,[lt]:e,[ut]:t.nonce,[ct]:`v1=${n}`}}async function mt(t){var l,u,m,f,p;if(!((l=t.secret)!=null&&l.trim()))return{ok:!1,error:"HX_API_KEY is not configured"};let e=(u=t.headers.get(dt))==null?void 0:u.trim(),n=(m=t.headers.get(lt))==null?void 0:m.trim(),r=(f=t.headers.get(ut))==null?void 0:f.trim(),s=(p=t.headers.get(ct))==null?void 0:p.trim();if(!e||!n||!r||!s)return{ok:!1,error:"missing signature headers"};if(!s.startsWith("v1="))return{ok:!1,error:"unsupported signature version"};let a=Number(n);if(!Number.isFinite(a))return{ok:!1,error:"invalid timestamp"};let o=Math.floor((t.now??Date.now())/1e3),i=t.toleranceSeconds??300;if(Math.abs(o-a)>i)return{ok:!1,error:"stale timestamp"};let c=await ft(t.secret.trim(),pt({timestamp:n,nonce:r,tenant:e,destination:t.url,body:t.body}));return tr(s.slice(3),c)?{ok:!0,tenant:e,nonce:r,timestamp:a}:{ok:!1,error:"signature mismatch"}}var A=(t,e=200)=>new Response(JSON.stringify(t),{status:e,headers:{"content-type":"application/json"}});async function gt(t,e,n){var l;if(new URL(t.url).pathname!=="/api/triggers/dispatch")return;if(t.method!=="POST")return A({error:"Method not allowed"},405);let s=await t.text(),a=await mt({secret:e.HX_API_KEY,body:s,url:t.url,headers:t.headers});if(!a.ok)return console.warn(`[triggers] rejected dispatch: ${a.error}`),A({error:"Invalid signature"},401);let o;try{o=JSON.parse(s)}catch{return A({error:"Invalid payload"},400)}if(!(o!=null&&o.runId)||!(o!=null&&o.flowId)||!(o!=null&&o.runAsUserId)||!(o!=null&&o.tenant)||!(o!=null&&o.activationId)||!(o!=null&&o.triggerId)||!(o!=null&&o.triggerKind)||!(o!=null&&o.invocationMode))return A({error:"activationId, triggerId, triggerKind, invocationMode, runId, flowId, runAsUserId and tenant are required"},400);if(o.tenant!==a.tenant)return A({error:"Tenant mismatch"},403);let i;try{i=await U(o.flowId,e)}catch{return A({error:"Flow not found"},404)}if(!((l=i==null?void 0:i.metadata)!=null&&l.tenant)||i.metadata.tenant!==o.tenant)return console.warn(`[triggers] flow ${o.flowId} does not belong to tenant ${o.tenant}`),A({error:"Tenant mismatch"},403);let c=await at(e,{...o,sessionId:o.sessionId||o.runAsUserId,nonce:a.nonce});return c.status==="error"?A({error:c.error},502):c.status==="deduped"?A({deduped:!0,runId:c.runId},200):A({accepted:!0,runId:c.runId,taskId:c.taskId},202)}var ne=/^[A-Za-z0-9_-]{1,64}$/;async function se(t,e,n,r,s,a=!1){let o=(f,p)=>({response:new Response(f,{status:p})});if(!/^[A-Za-z0-9_-]+$/.test(r))return o("Invalid flowId",400);if((!a||s)&&(!s||!ne.test(s)))return o("Invalid sessionId",400);let i;try{i=await U(r,e)}catch{return o("Flow not found",404)}let c=i==null?void 0:i.metadata;if(!c||!["active","activo"].includes(c.status))return o("Flow not found",404);if(!e.TENANT||c.tenant!==e.TENANT)return o("Forbidden",403);let l=await O(t,e,n),u=l&&typeof l=="object"?l:void 0;if(u&&u.tenant!==e.TENANT)return o("Forbidden",403);if(c.visibility==="public")return{user:u};if(!u){if(!a)return o("Unauthorized",401);let f=new URL(t.url),p=new URL("/login",f.origin);return p.searchParams.set("nextURL",`${f.pathname}${f.search}`),{response:Response.redirect(p.toString(),302)}}if((c.org||"default")!==(u.org||"default"))return o("Forbidden",403);let m=q(t.headers.get("cookie")).access_token||new URL(t.url).searchParams.get("access_token");if(!m)return o("Unauthorized",401);try{let f=await fetch(`${e.HX_CORE_URL}/flows/${encodeURIComponent(r)}`,{headers:{Authorization:m},cache:"no-store"});if(!f.ok||(await f.json()).id!==r)return o("Forbidden",403)}catch{return o("Forbidden",403)}return{user:u}}var rr=/^[A-Za-z0-9_-]+$/,nr=new Set(["state","messages","memory"]);async function sr(t,e){let n=new URL(t.url);if(!n.pathname.startsWith("/api/internal/sessions/"))return;let r=n.pathname.split("/");if(r[6]!=="runs"||r[8]!=="stop"||r.length!==9)return;if(t.method!=="POST")return new Response("Method not allowed",{status:405});if(!e.HX_API_KEY||t.headers.get("Authorization")!==e.HX_API_KEY)return new Response("Unauthorized",{status:401});let s=decodeURIComponent(r[4]||""),a=decodeURIComponent(r[5]||""),o=decodeURIComponent(r[7]||"");if(!s||!a||!o)return new Response("Not found",{status:404});try{let i=await X(e.AGENT,`${s}::${a}`);return Response.json(await i.requestRunStop(o))}catch(i){return console.error("[agents] failed to request run stop",i),Response.json({error:"Failed to stop run"},{status:502})}}async function or(t,e){let n=new URL(t.url);if(!n.pathname.startsWith("/api/internal/sessions/"))return;if(t.method!=="GET")return new Response("Method not allowed",{status:405});let r=t.headers.get("Authorization")||"";if(!e.HX_API_KEY||r!==e.HX_API_KEY)return new Response("Unauthorized",{status:401});let s=n.pathname.split("/"),a=decodeURIComponent(s[4]||""),o=decodeURIComponent(s[5]||""),i=s[6];if(!a||!o||!i||!nr.has(i))return new Response("Not found",{status:404});try{let l=await(await X(e.AGENT,`${a}::${o}`)).inspectPersistedSession(i);return Response.json(l)}catch(c){return console.error("[agents] failed to inspect persisted session",c),Response.json({error:"Failed to inspect persisted session"},{status:502})}}async function Ra(t,e,n){var i,c;let r=new URL(t.url),s=await gt(t,e,n);if(s instanceof Response)return s;let a=await sr(t,e);if(a instanceof Response)return a;let o=await or(t,e);if(o instanceof Response)return o;if(r.pathname.startsWith("/a/")){let l=r.pathname.split("/"),u=l[2],m=l[3];try{if(!u)return Response.redirect(new URL("/",r.origin).toString(),302);let f=await se(t,e,n,u,m,!0);if(f.response)return f.response;if(!m){let p=crypto.randomUUID(),g=new URL(`/a/${u}/${p}`,r.origin);return Response.redirect(g.toString(),302)}}catch(f){return console.error("Error accessing flow KV:",f),new Response("Flow error",{status:500})}}if(r.pathname.startsWith("/api/agent/flow/")){let l=r.pathname.split("/"),u=l[4],m=l[5];return yt(t,e,n,u,m)}if(r.pathname.startsWith("/api/ora/connect")){let l=r.pathname.split("/"),u=l[4],m=l[5];if(!u||!m)return new Response("Missing flowId or sessionId",{status:400});let f=t.headers.get("Authorization")||r.searchParams.get("authorization");if(!f)return new Response("Missing Authorization header",{status:401});try{let p=`${e.HX_CORE_URL}/p/v1/validation/key/agent/${u}`,y=await(await fetch(p,{method:"GET",headers:{Authorization:f}})).json();if(((i=y.payload)==null?void 0:i.flowId)!==u)return console.error("FlowId mismatch:",(c=y.payload)==null?void 0:c.flowId,"!==",u),new Response("Validation error",{status:403});let w=`${u}::${m}`,S=await O(t,e,n);if(!S){let $=new URL(t.url).searchParams.has("access_token");console.warn(`[agents] Unauthenticated agent socket upgrade (access_token query=${$}) \u2014 Composio connections from tool editor will not apply`)}let R=new Headers(t.headers);R.delete("X-User-Payload"),S&&R.set("X-User-Payload",JSON.stringify(S));let b=new Request(t,{headers:R});return(await X(e.AGENT,w)).fetch(b)}catch(p){return console.error("Error in /api/ora/connect:",p),new Response("Internal error",{status:500})}}}async function yt(t,e,n,r,s){let a=`${r}::${s}`;try{let o=await se(t,e,n,r,s);if(o.response)return o.response;let i=o.user,c=new Headers(t.headers);c.delete("X-User-Payload"),i&&c.set("X-User-Payload",JSON.stringify(i));let l=new Request(t,{headers:c});return(await X(e.AGENT,a)).fetch(l)}catch(o){return console.error("Error accessing agent:",o),new Response("Agent error",{status:500})}}var Ea=async(t,e,n,r)=>{if(!(r!=null&&r.flowId)||!rr.test(r.flowId)||!(r!=null&&r.sessionId)||!ne.test(r.sessionId))return new Response("Not found",{status:404});let s=new URL(`/api/agent/flow/${r.flowId}/${r.sessionId}`,t.url),a=new Headers;for(let[c,l]of t.headers.entries())c.toLowerCase().startsWith("x-")||a.append(c,l);let o={method:t.method,headers:a};t.body&&t.method!=="GET"&&t.method!=="HEAD"&&(o.body=t.body,o.duplex="half");let i=new Request(s.toString(),o);return yt(i,e,n,r.flowId,r.sessionId)};async function Ta(t,e,n){let r=new URL(t.url),s=t.method;if(!r.pathname.startsWith("/api/instances"))return;let a=await O(t,e,n);if(!a)return new Response("Unauthorized",{status:401});let o=e.HX_CORE_URL,i=e.HX_API_KEY;if(!o||!i)return console.error("Missing configuration: HX_CORE_URL or HX_API_KEY"),new Response("Internal Server Error",{status:500});let l=r.pathname.slice("/api/instances".length);l.startsWith("/")&&(l=l.slice(1)),l.endsWith("/")&&(l=l.slice(0,-1));let u="/ora/instances";l&&(u+=`/${l}`);let m=o.endsWith("/")?o.slice(0,-1):o,f=new URL(`${m}${u}`);r.searchParams.forEach((y,w)=>{f.searchParams.set(w,y)}),s==="GET"&&!l&&f.searchParams.set("filter_user_id",a.email);let p=new Headers;p.set("Authorization",i),p.set("Content-Type","application/json"),p.set("X-User-Payload",JSON.stringify(a));let g={method:s,headers:p};if(["POST","PATCH","PUT"].includes(s))try{g.body=await t.text()}catch(y){console.error("Error reading request body:",y)}try{let y=await fetch(f.toString(),g),w=await y.text();return new Response(w,{status:y.status,headers:{"Content-Type":"application/json"}})}catch(y){return console.error("Error proxying to flow instance backend:",y),new Response("Internal Server Error",{status:500})}}async function ba(t,e,n){let r=new URL(t.url);if(t.method==="POST"&&r.pathname==="/auth/login")try{let s=await t.formData(),a=s.get("username"),o=s.get("password"),i=s.get("nextURL")||"/";if(!a||!o)return new Response("Missing username or password",{status:400});let c=new URLSearchParams;c.append("username",a),c.append("password",o),c.append("grant_type","password"),c.append("client_id",e.KC_CLIENT_ID),c.append("client_secret",e.KC_CLIENT_SECRET);let l=await fetch(`${e.KC_BASE_URL}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Cookie:"hxsecure=1"},body:c});if(!l.ok)return new Response("Unauthorized",{status:401});let u=await l.json(),m=new Response(null,{status:302,headers:{Location:i}}),p=r.protocol==="https:"?"; Secure":"",g=(y,w,S)=>{m.headers.append("Set-Cookie",`${y}=${w}; Path=/; HttpOnly${p}; SameSite=Lax; Max-Age=${S}`)};return u.access_token&&g("access_token",u.access_token,u.expires_in),u.refresh_token&&g("refresh_token",u.refresh_token,u.refresh_expires_in||3600*24*30),u.id_token&&g("id_token",u.id_token,u.expires_in),m}catch(s){return console.error("Auth error:",s),new Response("Internal Server Error",{status:500})}if(r.pathname==="/auth/logout"){let s=new Response(null,{status:302,headers:{Location:"/login"}}),a=o=>{s.headers.append("Set-Cookie",`${o}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=0`)};return a("access_token"),a("refresh_token"),a("id_token"),s}if(r.pathname.startsWith("/s/")){let s=await O(t,e,n);if(!s){let a=new URL("/login",r.origin);return a.searchParams.set("nextURL",`${r.pathname}${r.search}`),Response.redirect(a.toString(),302)}return{user:s}}}import{WorkerEntrypoint as ar}from"cloudflare:workers";import{getAgentByName as ir}from"agents";var cr=/^[A-Za-z0-9_-]+$/,lr=/^art-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,ht=class extends ar{async ask(e,n){var r,s,a,o;try{if(!e||typeof e!="string"||!cr.test(e))throw console.error("[ArtifactWorkerGateway] invalid flowId:",e),new Error("Artifact worker request failed");if(!n||typeof n.message!="string")throw console.error("[ArtifactWorkerGateway] invalid input: message is required"),new Error("Artifact worker request failed");let i;if(n.sessionId!==void 0){if(typeof n.sessionId!="string"||!lr.test(n.sessionId))throw console.error("[ArtifactWorkerGateway] invalid sessionId:",n.sessionId),new Error("Artifact worker request failed");i=n.sessionId}else i=`art-${crypto.randomUUID()}`;let c=(s=(r=this.ctx)==null?void 0:r.props)==null?void 0:s.slug,l=(o=(a=this.ctx)==null?void 0:a.props)==null?void 0:o.artifactUuid;if(!c||!l)throw console.error("[ArtifactWorkerGateway] missing slug or artifactUuid in gateway context props"),new Error("Artifact worker request failed");let u=this.env.ARTIFACT;if(!u)throw console.error("[ArtifactWorkerGateway] ARTIFACT binding not configured"),new Error("Artifact worker request failed");let m=u.idFromName(c),p=await u.get(m).allowsWorker({flowId:e,mode:"server",artifactUuid:l});if(!(p!=null&&p.ok))throw console.error(`[ArtifactWorkerGateway] grant check failed for flow ${e} on artifact ${c}`),new Error("Artifact worker request failed");let g=await ir(this.env.AGENT,`${e}::${i}`),y={message:n.message};n.inputs&&typeof n.inputs=="object"&&(y.inputs=n.inputs);let w=new Request("http://localhost/message",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(y)}),S=await g.fetch(w);if(!S.ok)throw console.error(`[ArtifactWorkerGateway] agent returned status ${S.status}`),new Error("Artifact worker request failed");let R=await S.json();return{text:typeof(R==null?void 0:R.answer)=="string"?R.answer:"",sessionId:i}}catch(i){throw(i==null?void 0:i.message)==="Artifact worker request failed"?i:(console.error("[ArtifactWorkerGateway] unexpected error in ask:",i),new Error("Artifact worker request failed"))}}};export{It as ANONYMOUS_RUN_USER_PREFIX,st as AgentDO,ht as ArtifactWorkerGateway,Ir as CLASSIFIER_DEFAULTS,xr as CLASSIFIER_RESERVED_HANDLES,Er as CLEF_MODELS,Or as CRAWL_DEFAULTS,Cr as CRAWL_LIMITS,Rn as DEFAULT_MEMORY_LENGTH,En as DEFAULT_MEMORY_MODEL,Xn as EVENT_PREVIEW_BYTES,qn as EXTRACT_MAX_CHARS,wr as FLOW_INPUT_NAME_RE,Fs as FlowExecutionStoppedError,Rs as GENERATION_PARAM_KEYS,Is as GENERATION_PRESETS,_n as ISSUE_SEVERITY,Rr as MAX_USER_IDENTITY_LENGTH,wn as MEMORY_LENGTH_MD_LINES,Sn as MEMORY_LENGTH_TOKENS,Ks as MODEL_REGISTRY_SNAPSHOT,Jr as NODE_CATALOG,L as NodeType,$r as OUT_VAR_NAME_RE,Es as PRESET_PARAM_KEYS,Ps as REASONING_EFFORT_LEVELS,js as TENANT_ONLY_NODES,jn as TOOL_REGISTRY_SNAPSHOT,ut as TRIGGER_NONCE_HEADER,ct as TRIGGER_SIGNATURE_HEADER,oa as TRIGGER_SIGNATURE_TOLERANCE_SECONDS,dt as TRIGGER_TENANT_HEADER,lt as TRIGGER_TIMESTAMP_HEADER,cn as VariableResolutionError,Hr as WEB_ACTIONS_DEFAULTS,jr as WEB_ACTIONS_LIMITS,qr as WEB_ACTION_EXTRACT_AS,Gr as WEB_ACTION_LOCATOR_KINDS,Wr as WEB_ACTION_OPS,Xr as WEB_ACTION_SELECT_MATCH,zt as WEB_SESSION_IDLE_TTL_MS,kr as WORKER_GRAPH_DEFS,Ar as WORKER_GRAPH_SCHEMA,br as WORKER_OP_SCHEMA,Fn as WORKER_TEMPLATES,ot as WebSessionDO,ks as applyPresetToOverrides,$n as applyWorkerOps,Ea as artifactAgentProxy,Jn as assertHttpUrl,Yn as assertPublicHttpUrl,Qn as budgetTimeout,fs as buildClefRequest,Pr as buildCrawlRequestBody,Ke as buildReasoningProviderOptions,en as buildScope,aa as buildSignedTriggerHeaders,Te as buildTriggerMessageText,fr as buildUrl,Mn as canonicalGraph,Yt as canonicalUserEmail,_e as capMemoryContent,N as claimRun,ws as classifierErrorResult,Tr as classifierHandle,Hn as classifierIdFromLabel,Cn as classifyIssues,is as classifySiteBlock,K as clearAllMessages,gs as clefTruncationWarning,ts as clipExtract,An as collectExternalRefs,Tn as collectNodeRefs,j as completeRun,ur as convertTempMessure,Nr as crawlRequestKey,B as createRun,Yr as defaultNodeData,xs as deriveParamSupport,Ln as detectInlineCredentials,as as detectSiteBlock,ps as detectWebSession,Dn as diffGraphs,at as dispatchTrigger,Pn as edgeId,yr as embedText,Kn as enabledComposioSlugs,Ge as ensureAgentTables,Et as ensureMessagesTable,ms as estimateClefTokens,xn as estimateTokens,dn as extractOutVarValues,gn as extractTemplateReferences,Ne as extractUserKeypoints,tn as findScopedSourceNode,Vr as firstTargetStep,yt as forwardToAgentFlow,v as getAllMessages,Zr as getAncestorNodeIds,Lr as getDefaultOutVars,Kr as getEffectiveOutVars,xe as getFlowInputDefs,Hs as getModelEntry,rn as getRefTail,Qr as getUpstreamOutVars,Ra as handleAgentsRoutes,ba as handleAuthRoutes,ea as handleCommonRoutes,Ta as handleIntancesRoutes,or as handlePersistedSessionInspection,sr as handleSessionRunControl,gt as handleTriggerRoutes,gr as hashText,M as initializeEngineState,Gs as inspectWebPage,Bn as installWebNavigationGuard,nn as isBinaryOutVar,sn as isJsonContentType,Ws as isNodeTypeAllowedForTenant,Ue as isStartMemoryEnabled,On as issueFingerprint,Gn as jsonSchemaToZod,Ie as logc,Pe as looksLikeTranscript,Ce as memoryGenerationMaxTokens,F as memoryMdLineLimit,be as memoryTokenLimit,Me as mergeKeypointMemory,I as messageTypes,bn as newExternalRefs,Nn as nextNodeId,es as normalizeActionError,er as normalizeDestination,bs as normalizeEffectiveParams,Sr as normalizeFlowInputs,$s as normalizeModelEntry,Ns as normalizeReasoning,Us as openAiReasoningParamSupport,_s as openAiStandardParamSupport,hs as parseClefResponse,q as parseCookies,In as parseMemoryLength,on as parsePayloadText,mn as parseTemplateExpression,Ae as parseUserAuth,ke as parseUserMessage,Ur as parseWorkerGraph,vr as parseWorkerOps,As as pickNodeOverrides,an as readFetchPayload,Ms as reasoningEffortLevels,Ds as reasoningExposable,Xe as recordRun,zn as redact,Zn as redactedHost,Ls as registerProvider,Wn as resolveAnswerMappings,He as resolveModelById,fn as resolveOutVarRef,un as resolveOutVarValue,Ts as resolvePreset,Fe as resolveReasoningEffort,pn as resolveReference,qe as resolveRunUserId,ns as resolveTarget,hn as resolveTemplate,kn as rewriteNodeDataRefs,yn as rewriteTemplateNodeRefs,D as runAgentTurn,ys as runClef,Dr as runCrawl,ls as runWebActionSteps,pr as safeParseJSON,J as sanitizeMemoryDocument,P as sanitizeUserIdentity,_r as schemaErrors,Ss as selectClefHistory,Qe as sendEvent,k as serverSend,We as setMessage,Mr as shapeCrawlOutput,ft as signTriggerMaterial,je as startEngine,Oe as startMemoryLength,ve as startMemoryModel,Cs as stripUnsupportedFromNodeData,ds as targetPresent,dr as tempTool,tr as timingSafeEqualHex,rs as toLocator,Le as toStreamTextSettings,os as trackWebActivity,pt as triggerSignatureMaterial,Vn as truncateForEvent,mr as twitter,vn as validateAuthoring,Br as validateClassifierData,Vo as validateFlowStart,Un as validateFlowStructure,Fr as validateOutVars,zr as validateWebActionsData,hr as vectorize,cs as vendorFromCookieNames,Bt as verifyToken,mt as verifyTriggerRequest,O as verifyUser,ln as walkPath,us as webSessionKey,ss as withinWebDeadline,Os as workersAiParamSupport,vs as xaiParamSupport};
@@ -0,0 +1,31 @@
1
+ import { DurableObject } from 'cloudflare:workers';
2
+ /** Saved sessions are dropped after this long without use. */
3
+ export declare const WEB_SESSION_IDLE_TTL_MS: number;
4
+ export interface WebSessionSnapshot {
5
+ /** Playwright `storageState`: cookies of every domain plus origin storage. */
6
+ state: unknown;
7
+ updatedAt: number;
8
+ }
9
+ type WebSessionEnv = {
10
+ WEB_SESSION_KEY?: string;
11
+ };
12
+ /**
13
+ * One instance per session key (`idFromName(webSessionKey(...))`): the saved browser state of one
14
+ * site + credentials, encrypted with `WEB_SESSION_KEY`, plus a login lease so only one run logs in at a time.
15
+ */
16
+ export declare class WebSessionDO extends DurableObject<WebSessionEnv> {
17
+ private cryptoKey?;
18
+ load(): Promise<WebSessionSnapshot | null>;
19
+ /** Last write wins, but an older run never overwrites a newer state. */
20
+ save(state: unknown, updatedAt: number): Promise<void>;
21
+ invalidate(): Promise<void>;
22
+ /** Takes the login lease if it is free or expired. */
23
+ acquire(holder: string, leaseMs: number): Promise<boolean>;
24
+ release(holder: string): Promise<void>;
25
+ /** True while another run holds an unexpired lease. */
26
+ busy(): Promise<boolean>;
27
+ alarm(): Promise<void>;
28
+ private touch;
29
+ private key;
30
+ }
31
+ export {};
@@ -0,0 +1,23 @@
1
+ import type { WebActionsNodeData, WebActionsNodeResult } from '../../common/types/web-actions-types';
2
+ import type { WebSessionSnapshot } from '../core/WebSessionDO';
3
+ import type { SessionEnv } from '../core/AgentDO';
4
+ import type { FlowEngineEvent, FlowEngineState } from '../logic/FlowEngine';
5
+ import type { TelemetryEvent } from '../utils/telemetry';
6
+ /** RPC surface of WebSessionDO used by the runner. */
7
+ export interface WebSessionStore {
8
+ load(): Promise<WebSessionSnapshot | null>;
9
+ save(state: unknown, updatedAt: number): Promise<void>;
10
+ invalidate(): Promise<void>;
11
+ acquire(holder: string, leaseMs: number): Promise<boolean>;
12
+ release(holder: string): Promise<void>;
13
+ busy(): Promise<boolean>;
14
+ }
15
+ /**
16
+ * Runs a WebActions node in a Cloudflare Browser Run session.
17
+ * Locators are used verbatim; only URL and typed values are template-resolved.
18
+ */
19
+ export default function webActionsNodeRunner(sessionEnv: SessionEnv, node: {
20
+ id: string;
21
+ type: string;
22
+ data: WebActionsNodeData;
23
+ }, engineState: FlowEngineState, onServerEvent?: (event: FlowEngineEvent) => void, onResult?: (key: string, result: WebActionsNodeResult) => void, _onChangeState?: (state: FlowEngineState) => void, onTelemetry?: (event: TelemetryEvent) => void): Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hugex/ai",
3
- "version": "3.4.1",
3
+ "version": "3.4.2",
4
4
  "description": "Ora AI Agent Framework",
5
5
  "author": "a@hugex.co",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -10,6 +10,7 @@
10
10
  "@ai-sdk/anthropic": "^4.0.12",
11
11
  "@ai-sdk/openai": "4.0.11",
12
12
  "@ai-sdk/xai": "^4.0.10",
13
+ "@cloudflare/playwright": "1.3.6",
13
14
  "@cloudflare/workers-oauth-provider": "1.2.3",
14
15
  "@composio/core": "^0.13.1",
15
16
  "@composio/vercel": "^0.11.0",
@@ -1 +0,0 @@
1
- var p={};function f(o){}var t={};function d(o,r){let e=Object.hasOwn(t,o)?t[o]:void 0;return e===void 0||!!r&&e.includes(r)}export{p as a,f as b,t as c,d};
@@ -1,3 +0,0 @@
1
- var g=(a=>(a.START_NODE="startNode",a.CLASSIFIER_NODE="classifierNode",a.MEMO_NODE="memoNode",a.LLM_NODE="llmNode",a.ANSWER_NODE="answerNode",a.API_NODE="apiNode",a.TOOL_NODE="toolNode",a.WORKER_NODE="workerNode",a.CRAWL_NODE="crawlNode",a))(g||{});var D=/^[a-zA-Z][a-zA-Z0-9_]*$/;function m(e){let t=e==null?void 0:e.inputs;if(!Array.isArray(t))return[];let n=[],r=new Set;for(let o of t){let s=typeof(o==null?void 0:o.name)=="string"?o.name.trim():"";if(!s||!D.test(s)||r.has(s))continue;r.add(s);let i=$.includes(o==null?void 0:o.type)?o.type:"string";n.push({name:s,type:i,required:(o==null?void 0:o.required)===!0,default:(o==null?void 0:o.default)??void 0})}return n}function P(e,t){let n=e.label||e.name;switch(e.type){case"number":{let r=typeof t=="number"?t:Number(String(t).trim());return Number.isFinite(r)?{value:r}:{error:`"${n}" must be a number`}}case"boolean":{if(typeof t=="boolean")return{value:t};let r=String(t).trim().toLowerCase();return["true","1","yes","si","s\xED"].includes(r)?{value:!0}:["false","0","no"].includes(r)?{value:!1}:{error:`"${n}" must be true or false`}}case"json":{if(typeof t=="object")return{value:t};try{return{value:JSON.parse(String(t))}}catch{return{error:`"${n}" must be valid JSON`}}}default:return{value:typeof t=="string"?t:String(t)}}}function S(e){return e==null||typeof e=="string"&&e.trim()===""}function Z(e,t){let n={},r=[],o=t??{};for(let s of e){let i=o[s.name],u=S(i)?s.default:i;if(S(u)){s.required&&r.push(`"${s.label||s.name}" is required`);continue}let{value:c,error:a}=P(s,u);a?r.push(a):n[s.name]=c}return{values:n,errors:r}}function k(e){return typeof e=="string"?e:e==null?"":typeof e=="object"?JSON.stringify(e):String(e)}function G(e,t,n){let r=t.user_input;if(typeof r=="string"&&r.trim())return r;let o=e.filter(i=>i.name!=="user_input"&&t[i.name]!==void 0).map(i=>`- ${i.label||i.name}: ${k(t[i.name])}`),s=(n==null?void 0:n.trim())||"Automated execution";return o.length>0?`${s}
2
- ${o.join(`
3
- `)}`:s}var $=["string","number","boolean","json"];var O=/^[A-Za-z][A-Za-z0-9_]*$/;function N(e){switch(e){case"startNode":return[{name:"user_input",path:"user_input",type:"string"},{name:"images",path:"images",type:"image"},{name:"files",path:"files",type:"file"},{name:"memory",path:"memory",type:"string"}];case"llmNode":return[{name:"output",path:"",type:"string"}];case"apiNode":return[{name:"ok",path:"ok",type:"boolean"},{name:"status",path:"status",type:"number"},{name:"data",path:"data",type:"object"}];case"toolNode":case"workerNode":case"crawlNode":return[{name:"ok",path:"ok",type:"boolean"},{name:"data",path:"data",type:"object"},{name:"error",path:"error",type:"string"}];case"classifierNode":return[{name:"classification",path:"classification",type:"string"},{name:"label",path:"label",type:"string"},{name:"confidence",path:"confidence",type:"number"},{name:"margin",path:"margin",type:"number"},{name:"probabilities",path:"probabilities",type:"object"},{name:"route",path:"route",type:"string"},{name:"checks",path:"checks",type:"object"}];case"memoNode":return[{name:"context",path:"",type:"string"}];default:return[]}}function T(e){return e.type!=="startNode"?[]:m(e.data).map(t=>({name:t.name,path:t.name,type:t.type==="json"?"object":t.type}))}function C(e){var o;let t=[...N(e.type),...T(e),...Array.isArray((o=e.data)==null?void 0:o.outVars)?e.data.outVars:[]],n=new Set,r=[];for(let s of t){let i=typeof(s==null?void 0:s.name)=="string"?s.name.trim():"";O.test(i)?n.has(i)?r.push(`Node ${e.id} has duplicate output name "${i}"`):n.add(i):r.push(`Node ${e.id} has an invalid output name`)}return r}function d(e){var r;let t=[...N(e.type),...T(e)];return[...(Array.isArray((r=e.data)==null?void 0:r.outVars)?e.data.outVars:[]).map(o=>({...o,name:typeof(o==null?void 0:o.name)=="string"?o.name.trim():""})).filter(o=>O.test(o.name)).map(o=>({...o,source:"user"})),...t.map(o=>({...o,source:"default"}))]}function x(e,t){let n=new Set,r=[t],o=new Set([t]);for(;r.length>0;){let s=r.shift();for(let i of e)i.target!==s||o.has(i.source)||(o.add(i.source),n.add(i.source),r.push(i.source))}return n}function L(e,t){var o,s;if(e.type!=="startNode")return t;let n=((o=e.data)==null?void 0:o.allow_images)===!0,r=((s=e.data)==null?void 0:s.allow_documents)===!0;return t.filter(i=>!(i.name==="images"&&!n||i.name==="files"&&!r))}function j(e,t,n){let r=x(t,n),o=[],s=new Set;for(let i of r){let u=e.find(c=>c.id===i);if(u)for(let c of L(u,d(u))){let a=u.type==="startNode"&&c.source==="default"?c.name:`${u.id}.${c.name}`;s.has(a)||(s.add(a),o.push({...c,ref:a,nodeId:u.id}))}}return o}function ae(e,t,n){return new Set(j(e,t,n).map(r=>r.ref))}function v(e,t){let n=x(t.edges,t.currentNodeId);return t.nodes.filter(r=>n.has(r.id)&&e.startsWith(`${r.id}.`)).sort((r,o)=>o.id.length-r.id.length)[0]}function I(e,t){return e.slice(t.length+1)}function ue(e){return e.type==="image"||e.type==="file"}function U(e){if(!e)return!1;let t=e.split(";")[0].trim().toLowerCase();return t==="application/json"||t.endsWith("+json")}function E(e,t){let n=e.trim();if(!n||!(U(t)||n.startsWith("{")||n.startsWith("[")))return e;try{return JSON.parse(n)}catch{return e}}async function le(e){let t=e.headers.get("content-type"),n=await e.text();return E(n,t)}var W=new Set(["__proto__","prototype","constructor"]),_="\0__ORA_OB__\0",h="\0__ORA_CB__\0",l=class extends Error{constructor(n,r){super(r);this.code=n;this.name="VariableResolutionError"}code};function M(e){for(let t of e.split("."))if(W.has(t))throw new l("UNSAFE_PATH",`Unsafe variable path segment "${t}"`)}function w(e,t){if(!t)return e;M(t);let n=e;for(let r of t.split(".")){if(n==null||!Object.prototype.hasOwnProperty.call(Object(n),r))return;n=n[r]}return n}var J=new Set(["apiNode","toolNode","workerNode"]);function X(e){if(e!==null&&typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"data")){let t=e.data;return typeof t=="string"?E(t):t}}function b(e,t,n){let r=t.path??"";if(t.source==="user"&&n&&J.has(n)){let o=w(X(e),r);if(o!==void 0)return o}return w(e,r)}function Ne(e,t){let n={};for(let r of d(e))n[r.name]=b(t,r,e.type);return n}function q(e,t){var r,o,s,i,u,c,a;if(Object.prototype.hasOwnProperty.call(t.refOverrides??{},e))return{value:t.refOverrides[e]};let n=t.nodes.find(f=>f.type==="startNode");if(e==="user_input")return{value:(r=t.context)==null?void 0:r.user_input};if(e==="memory")return{value:((o=t.context)==null?void 0:o.memory)??""};if(e==="images"&&((s=n==null?void 0:n.data)==null?void 0:s.allow_images)===!0)return{value:(i=t.context)==null?void 0:i.user_images};if(e==="files"&&((u=n==null?void 0:n.data)==null?void 0:u.allow_documents)===!0)return{value:(c=t.context)==null?void 0:c.files};if(n&&m(n.data).some(f=>f.name===e))return{value:(a=t.context)==null?void 0:a[e]}}function V(e,t){var R;let n=e.trim();if(!n)throw new l("INVALID_EXPRESSION","Variable reference is empty");let r=n.includes(".")?void 0:q(n,t);if(r)return r;if(!n.includes("."))throw new l("UNKNOWN_CONTEXT_REF",`Unknown run-context variable "${n}"`);let o=v(n,t);if(!o)throw new l("OUT_OF_SCOPE",`Variable "${n}" is not in this node's connection scope`);let s=I(n,o.id),[i,...u]=s.split("."),c=d(o).find(F=>F.name===i);if(!c)throw new l("UNKNOWN_OUTPUT",`Node "${o.id}" does not expose output "${i}"`);if(Object.prototype.hasOwnProperty.call(t.refOverrides??{},n))return{value:t.refOverrides[n]};let a=(R=t.results)==null?void 0:R[o.id];if(a==null)return{value:void 0,missing:"ancestor_not_executed"};let f=b(a,c,o.type),p=u.length>0?w(f,u.join(".")):f;return p==null?{value:void 0,missing:"path_not_found"}:{value:p}}function Ee(e,t){return V(e,t).value}function K(e){let t=null,n=!1;for(let r=0;r<e.length-1;r+=1){let o=e[r];if(n){n=!1;continue}if(o==="\\"){n=!0;continue}if(t){o===t&&(t=null);continue}if(o==='"'||o==="'"){t=o;continue}if(o==="?"&&e[r+1]==="?")return{ref:e.slice(0,r).trim(),rawDefault:e.slice(r+2).trim()}}return{ref:e.trim()}}function B(e){if(e.length<2||!['"',"'"].includes(e[0])||e.at(-1)!==e[0])throw new l("INVALID_EXPRESSION","Template defaults must be quoted string literals");if(e[0]==='"')try{return JSON.parse(e)}catch{throw new l("INVALID_EXPRESSION","Invalid double-quoted template default")}return e.slice(1,-1).replace(/\\'/g,"'").replace(/\\\\/g,"\\")}function A(e){let{ref:t,rawDefault:n}=K(e.trim());if(!t)throw new l("INVALID_EXPRESSION","Template expression is missing a variable reference");return{ref:t,...n===void 0?{}:{defaultValue:B(n)}}}function ye(e){let t=e.replace(/\\\{\{/g,_).replace(/\\\}\}/g,h),n=[],r=/\{\{\s*([^}]+?)\s*\}\}/g;for(let o of t.matchAll(r))n.push(A(o[1]).ref);return n}function z(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function _e(e,t,n){let r=z(t);return e.replace(new RegExp(`(\\{\\{\\s*)${r}(?=\\.)`,"g"),`$1${n}`)}function y(e,t){return typeof e=="string"?t?JSON.stringify(e).slice(1,-1):e:typeof e=="object"&&e!==null?t?JSON.stringify(e):JSON.stringify(e,null,2):e!=null?t?JSON.stringify(e):String(e):""}function H(e,t){var n;throw(n=t==null?void 0:t.onError)==null||n.call(t,e.message),e}function he(e,t,n,r){if(!e)return e;let o=(r==null?void 0:r.serializeNonStrings)??!1,s=e.replace(/\\\{\{/g,_).replace(/\\\}\}/g,h),i=/\{\{\s*([^}]+?)\s*\}\}/g;return s=s.replace(i,(u,c)=>{try{let a=A(c);if(a.ref.startsWith("secrets.")){let p=a.ref.slice(8);if(!Object.prototype.hasOwnProperty.call(n.secrets??{},p))throw new l("MISSING_SECRET",`Secret "${p}" is not defined for this tenant`);return y(n.secrets[p],o)}let f=V(a.ref,n);if(f.missing){if(a.defaultValue!==void 0)return y(a.defaultValue,o);let p=f.missing==="ancestor_not_executed"?`Ancestor for variable "${a.ref}" did not execute in this branch`:`Variable path "${a.ref}" did not produce a value`;throw new l(f.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",p)}return y(f.value,o)}catch(a){if(a instanceof l)return H(a,r);throw a}}),s.split(_).join("{{").split(h).join("}}")}export{g as a,D as b,m as c,Z as d,G as e,O as f,N as g,C as h,d as i,x as j,j as k,ae as l,v as m,I as n,ue as o,U as p,E as q,le as r,l as s,w as t,b as u,Ne as v,V as w,Ee as x,A as y,ye as z,_e as A,he as B};
@@ -1,12 +0,0 @@
1
- import{a as Kt}from"./chunk-3D77ZXDC.js";import{a as K,b as G,c as Bt,d as tt}from"./chunk-Z4CYLB7J.js";import{a as no}from"./chunk-AKJFVR6J.js";import{a as Ht,b as Jt,d as Xt,g as qt,i as rt}from"./chunk-EHOK5FW2.js";import{a as ao,b as lo}from"./chunk-3K4IMMLP.js";import{Ba as eo,D as Pt,Da as io,Ea as ro,Fa as so,G as jt,H as Ut,J as Vt,U as Lt,a as B,b as _t,ea as Wt,fa as zt,ga as Gt,ha as st,i as it,ia as Yt,ja as Zt,ka as Qt,la as Et,pa as St,r as It,s as kt,sa as vt,ta as to,u as Dt,ua as oo}from"./chunk-YXG3ZEUP.js";import{B as bt,c as S,d as Ft,i as Ct,k as Z,r as Mt,s as P,v as Q,w as H}from"./chunk-KKJW6HJA.js";import{a as $t,b as At,d as Ot}from"./chunk-YLDLDEUP.js";import{a as v}from"./chunk-YHXUBVN2.js";import{a as E}from"./chunk-3TXHFKDN.js";async function co(e,o){return e.length?!o||!o.HX_ORA_URL||!o.HX_API_KEY?(console.error("extractDocuments: missing HX_ORA_URL or HX_API_KEY"),e.map(t=>({name:t.name,text:""}))):await Promise.all(e.map(async t=>{try{let r=await fetch(`${o.HX_ORA_URL}/internal/files/extract`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:o.HX_API_KEY},body:JSON.stringify(t)});if(!r.ok)return console.error(`extractDocuments: ${t.name} failed ${r.status}`),{name:t.name,text:""};let w=await r.json();return{name:t.name,text:w.text||""}}catch(r){return console.error(`extractDocuments: ${t.name} threw`,r),{name:t.name,text:""}}})):[]}function Fo(e,o,i){var t,r,w,p;return Z(((r=(t=i.flowData)==null?void 0:t.state)==null?void 0:r.nodes)??[],((p=(w=i.flowData)==null?void 0:w.state)==null?void 0:p.edges)??[],o.id).some(n=>n.ref===e&&(n.type==="image"||n.type==="file"))}function _o(e,o){var p,n,f,a,c,g,d;let i=Array.isArray((p=e.data)==null?void 0:p.outputMapping)?e.data.outputMapping:[];if(i.length===0)return null;let t=((f=(n=o.flowData)==null?void 0:n.state)==null?void 0:f.nodes)||[],r={},w=new Set;for(let m of i){let s=(a=m.key)==null?void 0:a.trim(),h=(c=m.from)==null?void 0:c.trim();if(!s||!h)throw new Error(`Answer node ${e.id} has an incomplete variable mapping`);if(w.has(s))throw new Error(`Answer node ${e.id} has duplicate output key "${s}"`);if(Fo(h,e,o))throw new Error(`Answer node ${e.id} cannot persist binary source "${h}"`);let u=H(h,{context:o.context||{},results:o.results||{},nodes:t,edges:((d=(g=o.flowData)==null?void 0:g.state)==null?void 0:d.edges)??[],currentNodeId:e.id}),l=u.value;if(u.missing||l===void 0||l===null){if(m.default===void 0)throw new P(u.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Answer node ${e.id} could not resolve output "${h}"`);l=m.default}r[s]=l,w.add(s)}try{JSON.stringify(r)}catch{throw new Error(`Answer node ${e.id} produced a value that is not JSON serializable`)}return r}async function nt(e,o,i,t,r,w,p){var f,a,c;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n;try{n=_o(o,i)}catch(g){throw t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(g)}}),g}n&&e.outputCollector&&e.outputCollector.add(o.id,n);try{let g=await((f=e.getMessages)==null?void 0:f.call(e))??[],d=((a=g[g.length-1])==null?void 0:a.type)==="text"?g[g.length-1].content:"NO-TEXT";p==null||p({type:"answer_node",payload:{userMessage:(c=i==null?void 0:i.context)==null?void 0:c.user_input,answer:d}})}catch(g){console.error("answerNodeRunner: failed to emit answer telemetry:",g),t==null||t({type:"debug",content:"Warning: failed to emit answer telemetry"})}r==null||r(o.id,{type:"answerNode",message:"Answer response for: "+o.data.response,saved:!0,persistenceRequested:!!n&&!!e.outputCollector,persisted:!1,...e.runId?{runId:e.runId}:{}}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}function X(e,o,i,t,r){var n,f,a,c,g;let w=(r==null?void 0:r.callerTag)??"llmNodeRunner",p=(r==null?void 0:r.serializeNonStrings)??!1;return bt(e,o,{context:i.context??{},results:i.results??{},nodes:((f=(n=i.flowData)==null?void 0:n.state)==null?void 0:f.nodes)??[],edges:((c=(a=i.flowData)==null?void 0:a.state)==null?void 0:c.edges)??[],currentNodeId:o.id,secrets:(g=r==null?void 0:r.sessionEnv)==null?void 0:g.secrets},{callerTag:w,serializeNonStrings:p,onError:d=>{t==null||t({type:`error:${w}`,content:d})}})}var at="[redacted]",po=8*1024;function Io(e){if(e==null)return{value:e,truncated:!1};let o=typeof e=="string"?e:JSON.stringify(e),i=new TextEncoder().encode(o);if(i.byteLength<=po){if(typeof e=="string")return{value:e,truncated:!1};try{return{value:JSON.parse(o),truncated:!1}}catch{return{value:o,truncated:!1}}}let t=i.slice(0,po);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(t),truncated:!0}}function ko(e,o){return Q(e,o)}var lt=(e,o,i,t,r)=>X(e,o,i,r,{callerTag:"apiNodeRunner",serializeNonStrings:!0,sessionEnv:t});async function dt(e,o,i,t,r,w,p){var a,c,g,d,m,s;`${o.id}`,t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n=null,f=Date.now();try{console.log("[apiNodeRunner] context keys:",Object.keys(i.context||{})),console.log("[apiNodeRunner] results keys:",Object.keys(i.results||{}));let h=((a=o.data)==null?void 0:a.url)||"",u=lt(h,o,i,e,t);if(console.log("[apiNodeRunner] resolved url:",K(h)?G(u):u),!u){t==null||t({type:"error:apiNodeRunner",content:"Missing url"}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:"Missing url"}}),r==null||r(o.id,n);return}let l=(((c=o.data)==null?void 0:c.method)||"GET").toUpperCase();console.log("[apiNodeRunner] method:",l);let y=((g=o.data)==null?void 0:g.headers)||{},N={},R={};for(let V in y)if(Object.prototype.hasOwnProperty.call(y,V)){let U=String(y[V]??"");R[V]=K(U),N[V]=lt(U,o,i,e,t)}let A,D=!1;if(l!=="GET"&&l!=="HEAD"&&((d=o.data)==null?void 0:d.body)!==void 0){let V=typeof o.data.body=="string"?o.data.body:JSON.stringify(o.data.body);D=K(V),A=lt(V,o,i,e,t),!N["Content-Type"]&&!N["content-type"]&&(N["Content-Type"]="application/json")}let O={};for(let V in N)O[V]=R[V]?at:N[V];console.log("[apiNodeRunner] headers:",JSON.stringify(O)),console.log("[apiNodeRunner] body:",D?at:A),t==null||t({type:"info:apiNodeRunner:request",content:{nodeId:o.id,method:l,url:K(h)?G(u):u,headers:O,body:D?at:A}});let M=Number((m=o.data)==null?void 0:m.timeoutMs),b=new AbortController,T=Number.isFinite(M)&&M>0?setTimeout(()=>b.abort(),M):null,x;try{console.log("[apiNodeRunner] fetching..."),x=await fetch(u,{method:l,headers:N,body:A,signal:b.signal}),console.log("[apiNodeRunner] fetch returned status:",x.status)}finally{T&&clearTimeout(T)}let I=x.headers.get("content-type")||"";console.log("[apiNodeRunner] content-type:",I);let C=await Mt(x);console.log("[apiNodeRunner] payload preview:",typeof C=="string"?C.slice(0,200):JSON.stringify(C).slice(0,200)),n={ok:x.ok,status:x.status,data:C};let j=Date.now()-f;p==null||p({type:"api_call",payload:{nodeId:o.id,url:u,method:l,status:x.status,latencyMs:j}});let{value:F,truncated:L}=Io(C);t==null||t({type:"info:apiNodeRunner:response",content:{nodeId:o.id,ok:x.ok,status:x.status,latencyMs:j,data:F,truncated:L,outVars:ko(o,n)}}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}catch(h){console.error("Error processing ApiNode:",h),t==null||t({type:"error:apiNodeRunner",content:`API node execution failed: ${h}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(h)}})}finally{console.log("[apiNodeRunner] final result:",(s=JSON.stringify(n))==null?void 0:s.slice(0,300)),r==null||r(o.id,n)}}var Do="[redacted]",mo=8*1024;function ct(e,o){if(typeof e=="string")return K(e)?typeof o=="string"&&/^https?:\/\//i.test(o)?G(o):Do:o;if(e&&typeof e=="object"&&!Array.isArray(e)){let i={},t=o&&typeof o=="object"&&!Array.isArray(o)?o:{};for(let[r,w]of Object.entries(e))i[r]=ct(w,t[r]);return i}if(Array.isArray(e)){let i=Array.isArray(o)?o:[];return e.map((t,r)=>ct(t,i[r]))}return o}function Co(e){if(e==null)return{value:e,truncated:!1};let o=typeof e=="string"?e:JSON.stringify(e),i=new TextEncoder().encode(o);if(i.byteLength<=mo){if(typeof e=="string")return{value:e,truncated:!1};try{return{value:JSON.parse(o),truncated:!1}}catch{return{value:o,truncated:!1}}}let t=i.slice(0,mo);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(t),truncated:!0}}function Mo(e,o){return Q(e,o)}var bo=(e,o,i,t,r)=>X(e,o,i,r,{callerTag:"toolNodeRunner",serializeNonStrings:!0,sessionEnv:t});function ot(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Po(e){let o=ot(e);if(Array.isArray(o.enum)&&o.enum.length>0)return o.enum.every(r=>typeof r=="string"||typeof r=="number")?"enum":"unsupported";switch(Array.isArray(o.type)?o.type.find(t=>typeof t=="string"&&t!=="null"):o.type){case"string":return"string";case"number":return"number";case"integer":return"integer";case"boolean":return"boolean";case"object":return"object";case"array":return"array";default:return"unsupported"}}function jo(e,o){var p,n;let i={},t={},r=((p=e.data)==null?void 0:p.inputSchema)??o;if(r&&typeof r=="object"&&!Array.isArray(r)){t=ot(ot(r).properties);for(let[f,a]of Object.entries(t))i[f]=Po(a);return{types:i,properties:t}}let w=(n=e.data)==null?void 0:n.argTypes;if(w&&typeof w=="object"&&!Array.isArray(w))for(let[f,a]of Object.entries(w))typeof a=="string"&&(i[f]=a);return{types:i,properties:t}}function Uo(e,o,i){if(e.trim()!==""){if(e==="null"&&o&&o!=="string"&&o!=="enum")return null;switch(o){case"string":return e;case"enum":{let t=ot(i).enum;if(Array.isArray(t)){let r=t.find(w=>String(w)===e);if(r!==void 0)return r}return e}case"number":{let t=Number(e);return Number.isFinite(t)?t:e}case"integer":{let t=Number.parseInt(e,10);return Number.isFinite(t)?t:e}case"boolean":return e==="true"?!0:e==="false"?!1:e;case"object":case"array":case"unsupported":try{return JSON.parse(e)}catch{return e}default:return e}}}function Vo(e){return e===void 0||typeof e=="string"&&e.trim()===""}function ut(e,o,i,t,r,w,p){if(typeof e=="string"){let n=e.includes("{{")?bo(e,o,i,t,r):e;return Uo(n,w,p)}if(e&&typeof e=="object"&&!Array.isArray(e)){let n={};for(let[f,a]of Object.entries(e))n[f]=ut(a,o,i,t,r);return n}return Array.isArray(e)?e.map(n=>ut(n,o,i,t,r)):e}function Lo(e,o,i,t,r,w){let p={};for(let[n,f]of Object.entries(e)){let a=ut(f,o,i,t,r,w.types[n],w.properties[n]);Vo(a)||(p[n]=a)}return p}async function Wo(e){if(e.toolDefs)return e.toolDefs;if(!e.env)return e.toolDefs={},e.toolDefs;let o=await v(e.env),i={};for(let t of o)t!=null&&t.id&&(i[t.id]=t);return e.toolDefs=i,i}function Ho(e){var o,i,t;return((o=e.data)==null?void 0:o.source)==="catalog"?"catalog":((i=e.data)==null?void 0:i.source)==="composio"?"composio":(((t=e.data)==null?void 0:t.source)==="http","http")}function Jo(e,o,i){let t=rt(e.execution);if(t.authMode==="manual"){let r=Ht(t,e.id);if(!r)throw new Error(`Composio tool '${e.name}' is missing connection scope`);return Jt(r)}return qt(o,i,{allowChatIdFallback:!0})}async function pt(e,o,i,t,r,w,p){var c,g,d,m,s,h;`${o.id}`,t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n={ok:!1,data:null,error:null},f=Date.now(),a=Ho(o);try{if(a==="catalog")throw new Error("This Tool node still uses a curated catalog connector. Reconfigure it to a tenant HTTP or connector tool.");let u=(c=o.data)!=null&&c.args&&typeof o.data.args=="object"&&!Array.isArray(o.data.args)?o.data.args:{},l=typeof((g=o.data)==null?void 0:g.toolId)=="string"?o.data.toolId.trim():"";if(!l)throw new Error("Tool nodes require toolId");let N=(await Wo(e))[l];if(!N)throw new Error(`Tool ${l} not found`);let R="";if(a==="composio"){if(N.kind!=="composio")throw new Error(`Tool ${l} is not a connector tool`);if(R=typeof((d=o.data)==null?void 0:d.toolSlug)=="string"?o.data.toolSlug.trim():"",!R)throw new Error("Connector tool nodes require toolSlug");let T=rt(N.execution);if(!Xt(T.tools).includes(R))throw new Error(`Tool slug ${R} is not enabled on connector ${l}`)}else if(N.kind!=="http")throw new Error(`Tool ${l} is not an HTTP tool`);let A=jo(o,a==="http"?N.inputSchema:void 0),D=Lo(u,o,i,e,t,A);if(t==null||t({type:"info:toolNodeRunner:request",content:{nodeId:o.id,source:a,toolSlug:(m=o.data)==null?void 0:m.toolSlug,toolId:(s=o.data)==null?void 0:s.toolId,args:ct(u,D)}}),a==="composio"){let T=typeof((h=o.data)==null?void 0:h.toolVersion)=="string"?o.data.toolVersion.trim():"",x=await Kt(e,{toolSlug:R,connectionScope:Jo(N,e,i),toolVersion:T||null,arguments:D});n={ok:x.ok,data:x.ok?x.data:null,error:x.ok?null:x.error??"Tool execution failed"}}else{let T=tt(N,e,i,t);if(!T.execute)throw new Error(`Tool ${l} is missing an execute handler`);let x=await T.execute(D,{}),I=x&&typeof x=="object"&&"error"in x&&x.error?String(x.error):null;n={ok:!I,data:x,error:I}}let O=Date.now()-f;p==null||p({type:"tool_call",payload:{nodeId:o.id,url:a==="composio"?`composio:${R}`:`tool:${l}`,method:"EXECUTE",status:n.ok?200:502,latencyMs:O}});let{value:M,truncated:b}=Co(n.data);t==null||t({type:"info:toolNodeRunner:response",content:{nodeId:o.id,ok:n.ok,latencyMs:O,data:M,truncated:b,error:n.error,outVars:Mo(o,n)}}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:n.ok?"success":"error",error:n.error??void 0}})}catch(u){let l=u instanceof Error?u.message:String(u);n={ok:!1,data:null,error:l},t==null||t({type:"error:toolNodeRunner",content:`Tool node execution failed: ${l}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:l}})}finally{r==null||r(o.id,n)}}var Xo=1440*60*1e3,yo=8*1024;function go(e){if(e==null)return{value:e,truncated:!1};let o=new TextEncoder().encode(JSON.stringify(e));return o.byteLength<=yo?{value:e,truncated:!1}:{value:new TextDecoder().decode(o.slice(0,yo)),truncated:!0}}async function ft(e,o,i,t,r,w,p){var g,d;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n={ok:!1,data:null,error:null},f=Date.now(),a="crawl:unknown",c=m=>{let s=JSON.stringify(m);for(let h of Object.values(e.secrets??{}))h&&(s=s.split(JSON.stringify(h).slice(1,-1)).join("[redacted]"),s=s.split(encodeURIComponent(h)).join("[redacted]"));return JSON.parse(s)};try{let m=e.env;if(!(m!=null&&m.CF_ACCOUNT_ID)||!(m!=null&&m.CF_BROWSER_RUN_TOKEN))throw new Error("Crawl no configurado: faltan CF_ACCOUNT_ID / CF_BROWSER_RUN_TOKEN");let s=X(o.data.url,o,i,t,{callerTag:"crawlNodeRunner",serializeNonStrings:!0,sessionEnv:e}),h=It(o.data,s),u=K(o.data.url);a=`crawl:${c(new URL(s).host)}`;let l=`crawl:pending:${await kt(h)}`,y=(g=e.ctx)==null?void 0:g.storage,N=await(y==null?void 0:y.get(l)),R=N&&typeof N.jobId=="string"&&N.jobId&&Number.isFinite(N.createdAt)&&Date.now()-N.createdAt>=0&&Date.now()-N.createdAt<Xo;N&&!R&&await(y==null?void 0:y.delete(l)),t==null||t({type:"info:crawlNodeRunner:request",content:{nodeId:o.id,url:u?c(G(s)):s,resumeJobId:R?N.jobId:void 0}}),{result:n}=await Dt({accountId:m.CF_ACCOUNT_ID,apiToken:m.CF_BROWSER_RUN_TOKEN},o.data,{url:s,...R?{resumeJobId:N.jobId}:{}}),n.error==="timeout"&&((d=n.data)!=null&&d.jobId)?await(y==null?void 0:y.put(l,{jobId:n.data.jobId,createdAt:R?N.createdAt:Date.now()})):n.data&&n.data.status!=="running"&&await(y==null?void 0:y.delete(l))}catch(m){n={ok:!1,data:null,error:m instanceof Error?m.message:String(m)},t==null||t({type:"error:crawlNodeRunner",content:c(`Crawl node execution failed: ${n.error}`)})}finally{let m=Date.now()-f;p==null||p({type:"tool_call",payload:{nodeId:o.id,url:a,method:"EXECUTE",status:n.ok?200:502,latencyMs:m}});let s=go(c(n.data));t==null||t({type:"info:crawlNodeRunner:response",content:{nodeId:o.id,ok:n.ok,latencyMs:m,data:s.value,truncated:s.truncated,error:c(n.error),outVars:go(c(Q(o,n))).value}}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:n.ok?"success":"error",error:c(n.error)??void 0}}),r==null||r(o.id,n)}}function wo(){let e={};return{add(o,i){e[o]=i},hasOutputs(){return Object.keys(e).length>0},answerNodeIds(){return Object.keys(e)},snapshotData(){let o=Object.entries(e);return o.length===1?o[0][1]:Object.fromEntries(o)}}}function qo(e){return!!(e!=null&&e.HX_ORA_URL)&&!!(e!=null&&e.HX_API_KEY)}async function He(e,o){if(!qo(e))throw new Error("Structured outputs require HX_ORA_URL and HX_API_KEY");let i=await fetch(`${e.HX_ORA_URL}/internal/outputs/${encodeURIComponent(o.flowId)}/${encodeURIComponent(o.sessionId)}`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:e.HX_API_KEY},body:JSON.stringify({runId:o.runId,createdAt:o.createdAt,data:o.data,answerNodeIds:o.answerNodeIds})});if(!i.ok){let t=await i.text().catch(()=>"");throw new Error(`Structured output persistence failed with ${i.status}${t?`: ${t}`:""}`)}}var ho=3,No=10,Ko=new Set(["agent:start","agent:complete","agent:telemetry"]);function Bo(e){let o=e.executedNodes||[];return o.length===0?"(none)":o.map(i=>i.label?`${i.id} (${i.label})`:i.id).join(" \u2192 ")}function zo(e){let o=e.executedNodes||[];return o[o.length-1]}function q(e,o,i){throw e==null||e({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:i.message}}),i}function Go(e,o){var w,p,n,f,a,c,g;let i=Array.isArray((w=e.data)==null?void 0:w.inputs)?e.data.inputs:[],t=((n=(p=o.flowData)==null?void 0:p.state)==null?void 0:n.nodes)||[],r={};for(let d of i){let m=(f=d.key)==null?void 0:f.trim();if(!m)continue;let s=(a=d.from)==null?void 0:a.trim();if(!s){if(d.default===void 0)continue;r[m]=d.default;continue}let h=H(s,{context:o.context||{},results:o.results||{},nodes:t,edges:((g=(c=o.flowData)==null?void 0:c.state)==null?void 0:g.edges)??[],currentNodeId:e.id}),u=h.value;if(h.missing||u===void 0||u===null){if(d.default===void 0)throw new P(h.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Worker node ${e.id} could not resolve input "${s}"`);u=d.default}r[m]=u}return r}async function mt(e,o,i,t,r,w,p){var b,T,x,I,C,j;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n=typeof((b=o.data)==null?void 0:b.flowId)=="string"?o.data.flowId.trim():"";n||q(t,o,new Error(`Worker node ${o.id} is missing flowId`));let f=(T=i.flowData)==null?void 0:T.flowId,a=e.workerStack??(f?[f]:[]);a.includes(n)&&q(t,o,new Error(`Worker node ${o.id} cannot call ${n}: cycle detected (${[...a,n].join(" \u2192 ")})`)),a.length>=ho&&q(t,o,new Error(`Worker node ${o.id} exceeded max nesting depth (${ho})`));let c=e.workerCalls??{count:0};e.workerCalls=c,c.count>=No&&q(t,o,new Error(`Worker node ${o.id} exceeded max worker calls per run (${No})`)),c.count+=1;let g;try{g=Go(o,i)}catch(F){q(t,o,F instanceof Error?F:new Error(String(F)));return}let d=e.env;d||q(t,o,new Error(`Worker node ${o.id} is missing runtime env`));let m,s;try{let F=await $t(n,d);s=(x=F==null?void 0:F.metadata)==null?void 0:x.tenant,m=await At(n,d)}catch(F){q(t,o,new Error(`Worker node ${o.id} could not load worker ${n}: ${F instanceof Error?F.message:String(F)}`))}let h=(I=i.flowData)==null?void 0:I.tenant;(!s||s!==h)&&q(t,o,new Error(`Worker ${n} belongs to a different tenant`));let u=wo(),l={flowData:{...m,tenant:s,flowId:n,chatId:((C=i.flowData)==null?void 0:C.chatId)||""},executedNodes:[],context:{},results:{}},y={env:d,ctx:e.ctx,secrets:e.secrets,userAuth:e.userAuth,user:e.user,toolDefs:e.toolDefs,composioSessions:e.composioSessions,skillRefCache:e.skillRefCache,publicOrigin:e.publicOrigin,getOraModel:e.getOraModel,runId:e.runId,shouldStop:e.shouldStop,workerCalls:c,conn:void 0,getMessages:async()=>[],setMessages:async()=>{},agentMemory:"",outputCollector:u,workerStack:[...a,n]},N,R={onChangeState:()=>{},onServerEvent:F=>{var L;Ko.has(F.type)||t==null||t({type:"worker:node",content:{workerNodeId:o.id,childNodeId:(L=F.content)==null?void 0:L.nodeId,event:F}})},onTelemetry:F=>p==null?void 0:p(F),onError:F=>{N=F},shouldStop:e.shouldStop},{startEngine:A,FlowExecutionStoppedError:D}=await import("./FlowEngine-UNMMHMN6.js"),O=await A(y,l,R)({text:"",inputs:g});if((O.status==="stopped"||await((j=e.shouldStop)==null?void 0:j.call(e)))&&q(t,o,new D),O.status!=="completed"){let F=zo(l),L=Bo(l),V=O.error||N||"unknown error",U=F?` at node ${F.label?`${F.id} (${F.label})`:F.id}`:"";q(t,o,new Error(`Worker ${n} failed${U}: ${V}. Path: ${L}`))}u.hasOutputs()||q(t,o,new Error(`El worker ${n} complet\xF3 sin output estructurado. Agreg\xE1 un mapeo de salida en su nodo Answer.`));let M=(l.executedNodes||[]).map(F=>F.id);r==null||r(o.id,{ok:!0,data:u.snapshotData(),error:null,executed:M}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}async function yt(e,o,i,t,r,w,p){var a,c,g,d,m,s,h,u;let n=Date.now(),f=(l,y={})=>t==null?void 0:t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:l,...y}});f("start");try{let l=o.data,y={context:i.context??{},results:i.results??{},nodes:((c=(a=i.flowData)==null?void 0:a.state)==null?void 0:c.nodes)??[],edges:((d=(g=i.flowData)==null?void 0:g.state)==null?void 0:d.edges)??[],currentNodeId:o.id},N=I=>{let C=y.nodes.find(L=>I.startsWith(`${L.id}.`)),j=C&&Ct(C).find(L=>L.name===I.slice(C.id.length+1).split(".")[0]);if(I==="images"||(j==null?void 0:j.type)==="image")throw new Error("Classifier accepts text context only");let F=H(I,y);if(F.missing||F.value===void 0||F.value===null)throw new Error(`Classifier input "${I}" did not produce a value`);return F.value},R=N(l.input.message);if(typeof R!="string")throw new Error("Classifier message must be text");let A=l.input.historyTurns>0&&e.getMessages?Et(await e.getMessages(),l.input.historyTurns,(m=i.context)==null?void 0:m.user_input):[],D=Object.fromEntries(l.input.vars.map(I=>[I,N(I)])),O=zt(l,{message:R,history:A,vars:D});console.log(`[classifier] node ${o.id} model=${l.model} message=${R.length}ch history=${A.length} vars=${Object.keys(D).length} options=${l.options.length} checks=${l.checks.length} estTokens=${Gt(O)}`);let M=st(O);if(M&&console.warn(`[classifier] node ${o.id} ${M}`),M&&(t==null||t({type:"warning:classifier",content:{nodeId:o.id,message:M}})),!((s=e.env)!=null&&s.AI))throw new Error("Classifier requires AI binding");let b;try{b=await Yt(e.env.AI,l.model,O)}finally{let I=st(O);I&&I!==M&&console.warn(`[classifier] node ${o.id} ${I}`),I&&I!==M&&(t==null||t({type:"warning:classifier",content:{nodeId:o.id,message:I}}))}let{result:T,usage:x}=Zt(b,l);console.log(`[classifier] \u2713 node ${o.id} route=${T.route} class=${T.classification} confidence=${T.confidence} margin=${T.margin.toFixed(4)} tokens=${x.promptTokens} ${Date.now()-n}ms`),r==null||r(o.id,T),p==null||p({type:"decision_telemetry",payload:{nodeId:o.id,model:l.model,totalLatency:Date.now()-n,usage:x,route:T.route}}),f("success",{summary:{route:T.route,classification:T.classification,label:T.label,confidence:T.confidence,margin:T.margin,probabilities:Object.fromEntries(Object.entries(T.probabilities).sort((I,C)=>C[1]-I[1]).slice(0,5)),checks:T.checks}})}catch(l){console.error(`[classifier] \u2717 node ${o.id} model=${(h=o.data)==null?void 0:h.model} ${Date.now()-n}ms: ${l instanceof Error?`${l.name}: ${l.message}`:String(l)}`),r==null||r(o.id,Qt()),p==null||p({type:"decision_telemetry",payload:{nodeId:o.id,model:(u=o.data)==null?void 0:u.model,totalLatency:Date.now()-n,route:"error",usage:{promptTokens:0,completionTokens:0,totalTokens:0}}}),f("error",{error:l instanceof Error&&l.message==="Clef timeout"?"Clef timeout":"Classifier decision failed",route:"error"})}}import{stepCountIs as se,streamText as ne}from"ai";import{nanoid as ae}from"nanoid";import"zod";function Ro(e,o){var n,f,a,c,g;let i=((n=e.data)==null?void 0:n.attachments)??[];if(!Array.isArray(i))throw new P("INVALID_EXPRESSION",`Node ${e.id} attachments must be an array`);let t=((a=(f=o.flowData)==null?void 0:f.state)==null?void 0:a.nodes)??[],r=((g=(c=o.flowData)==null?void 0:c.state)==null?void 0:g.edges)??[],w=Z(t,r,e.id),p="";for(let d of i){if(typeof d!="string")throw new P("INVALID_EXPRESSION",`Node ${e.id} has an invalid attachment reference`);let m=w.find(h=>h.ref===d);if(!m)throw new P("OUT_OF_SCOPE",`Attachment "${d}" is not in this node's connection scope`);if(m.type!=="file"&&m.type!=="image")throw new P("UNKNOWN_OUTPUT",`Attachment "${d}" is not an image or file output`);if(m.type!=="file")continue;let s=H(d,{context:o.context??{},results:o.results??{},nodes:t,edges:r,currentNodeId:e.id});if(s.missing)throw new P(s.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Attachment "${d}" did not produce a value`);if(typeof s.value!="string")throw new P("PATH_NOT_FOUND",`Attachment "${d}" must resolve to file text`);s.value.trim()&&(p+=(p?`
2
-
3
- `:"")+s.value)}return p}function Yo(e,o){var r,w,p,n,f;let i=((r=e.data)==null?void 0:r.attachments)??[];if(!Array.isArray(i))throw new P("INVALID_EXPRESSION",`Node ${e.id} attachments must be an array`);let t=Z(((p=(w=o.flowData)==null?void 0:w.state)==null?void 0:p.nodes)??[],((f=(n=o.flowData)==null?void 0:n.state)==null?void 0:f.edges)??[],e.id);return i.map(a=>{if(typeof a!="string")throw new P("INVALID_EXPRESSION",`Node ${e.id} has an invalid attachment reference`);let c=t.find(g=>g.ref===a);if(!c)throw new P("OUT_OF_SCOPE",`Attachment "${a}" is not in this node's connection scope`);if(c.type!=="image"&&c.type!=="file")throw new P("UNKNOWN_OUTPUT",`Attachment "${a}" is not a binary output`);return c.type==="image"?a:null}).filter(a=>a!==null)}function xo(e,o){var r,w,p,n;let i=[],t={context:o.context??{},results:o.results??{},nodes:((w=(r=o.flowData)==null?void 0:r.state)==null?void 0:w.nodes)??[],edges:((n=(p=o.flowData)==null?void 0:p.state)==null?void 0:n.edges)??[],currentNodeId:e.id};for(let f of Yo(e,o)){let a=H(f,t);if(a.missing)throw new P(a.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Attachment "${f}" did not produce a value`);if(!Array.isArray(a.value))throw new P("PATH_NOT_FOUND",`Attachment "${f}" must resolve to an image array`);i.push(...a.value)}return i}var z=(e,o,i)=>{e.send(o+"::"+i)};import{openai as Zo}from"@ai-sdk/openai";import{extractReasoningMiddleware as Qo,wrapLanguageModel as Eo}from"ai";import{createWorkersAI as So}from"workers-ai-provider";import{xai as vo}from"@ai-sdk/xai";import{anthropic as te}from"@ai-sdk/anthropic";import{createOpenRouter as oe}from"@openrouter/ai-sdk-provider";var wt={};function gt(e){if(e!=null){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return}}}function ee(e){return{...e,defaultParams:gt(e.defaultParams)??e.defaultParams,capabilities:gt(e.capabilities)??e.capabilities,price:gt(e.price)??e.price}}async function To(e,o,i){var c,g;if(!(o!=null&&o.getOraModel))throw new Error("resolveModelById requires a sessionEnv with getOraModel capable of fetching models dynamically.");let t=await o.getOraModel(e);if(!t)return;let r=ee(t),w=((c=r.capabilities)==null?void 0:c.params)??St(r),{effectiveParams:p,adjustments:n}=to(r.defaultParams,i,w),f;if(wt[r.provider])f=await wt[r.provider](r,o,i);else if(r.provider==="openai")f=Zo(r.providerModel);else if(r.provider==="xai")f=vo(r.providerModel);else if(r.provider==="anthropic")f=te(r.providerModel);else if(r.provider==="openrouter")f=oe()(r.providerModel);else if(r.provider==="workersai"||r.provider==="cloudflare"){if(!((g=o==null?void 0:o.env)!=null&&g.AI))throw new Error("Workers AI provider requires sessionEnv.env.AI binding");f=So({binding:o.env.AI})(r.providerModel)}else f={provider:r.provider,providerModel:r.providerModel};let a=eo(r);return a.kind==="tag"&&f&&typeof f=="object"&&"specificationVersion"in f&&(f=Eo({model:f,middleware:Qo({tagName:a.tagName??"think",startWithReasoning:a.startWithReasoning??!1})})),{provider:r.provider,modelHandle:f,entry:r,effectiveParams:p,paramAdjustments:n.length>0?n:void 0,reasoning:a}}function fi(e,o){wt[e]=o}var ie=E({"../tools/composioDirectTool.ts":()=>import("./composioDirectTool-ZCZRW5WU.js"),"../tools/composioTool.ts":()=>import("./composioTool-RKVCX25U.js"),"../tools/convertTempMessure.ts":()=>import("./convertTempMessure-5CAGRLBY.js"),"../tools/httpTool.ts":()=>import("./httpTool-IW4W7CGE.js"),"../tools/skillTool.ts":()=>import("./skillTool-JEAL3G33.js"),"../tools/tempTool.ts":()=>import("./tempTool-2RXAF56M.js"),"../tools/twitter.ts":()=>import("./twitter-OMDEG7T2.js"),"../tools/vectorize.ts":()=>import("./vectorize-CDB26DMD.js")});var re=E({});async function le(e,o,i,t){var g;let r=Array.isArray((g=i==null?void 0:i.data)==null?void 0:g.tools)?i.data.tools:[];if(r.length===0)return{};let w={},p=d=>{var N,R;let m=typeof(d==null?void 0:d.description)=="string"?d.description:"",s=d==null?void 0:d.inputSchema,h;try{let A=(s==null?void 0:s.shape)??(typeof((N=s==null?void 0:s._def)==null?void 0:N.shape)=="function"?s._def.shape():(R=s==null?void 0:s._def)==null?void 0:R.shape);A&&typeof A=="object"&&(h=A)}catch{}let u=h?Object.keys(h):[],l=m?`description="${m.length>120?m.slice(0,120)+"\u2026":m}"`:"description=(none)",y=u.length?`inputSchema={${u.join(", ")}}`:"inputSchema=(none)";return`${l} ${y}`},n=(()=>{let d=[],m=[],s=[],h=[];for(let l=0;l<r.length;l++){let y=r[l];!y||typeof y!="object"||typeof y.id!="string"?h.push(l):y.kind==="builtin"?d.push(y.id):y.kind==="skill"?s.push(y.id):y.kind==="http"||y.kind==="mcp"||y.kind==="composio"?m.push(y.id):h.push(l)}let u=[];return d.length&&u.push(`builtin[${d.join(", ")}]`),m.length&&u.push(`custom[${m.join(", ")}]`),s.length&&u.push(`skill[${s.join(", ")}]`),h.length&&u.push(`invalid@[${h.join(", ")}]`),u.join(" ")||"(none)"})();console.log(`[tools] node ${i.id} requested (${r.length}): ${n}`);let f=!1,a=async()=>{if(f&&e.toolDefs)return e.toolDefs;if(!e.env)return e.toolDefs=e.toolDefs||{},f=!0,e.toolDefs;try{let d=await v(e.env),m={};for(let s of d)s&&s.id&&(m[s.id]=s);e.toolDefs=m}catch(d){t==null||t({type:"error:llmNodeRunner",content:`Failed to load custom tool defs: ${String(d)}`}),e.toolDefs=e.toolDefs||{}}return f=!0,e.toolDefs},c=[];for(let d=0;d<r.length;d++){let m=r[d];if(!m||typeof m!="object"||typeof m.id!="string"||m.kind!=="builtin"&&m.kind!=="http"&&m.kind!=="mcp"&&m.kind!=="composio"&&m.kind!=="skill"){t==null||t({type:"error:llmNodeRunner",content:`Invalid tool descriptor at index ${d}: expected { kind: 'http'|'mcp'|'composio'|'builtin'|'skill', id: string, params?: any }`});continue}let s=m;if(s.kind!=="builtin"){let u=(await a())[s.id];if(!u){console.error(`[tools] \u2717 custom '${s.id}': not found for tenant`),t==null||t({type:"error:llmNodeRunner",content:`custom tool '${s.id}' not found for this tenant`});continue}if(s.kind==="composio"){try{let y=await no(u,e,o,t),N=Object.keys(y);for(let[R,A]of Object.entries(y))w[R]=A;console.log(`[tools] \u2713 composio '${s.id}' \u2192 ${N.length} tool(s)`)}catch(y){console.error(`[tools] \u2717 composio '${s.id}': ${String(y)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading composio tool '${s.id}': ${String(y)}`})}continue}if(s.kind==="skill"){if(u.kind!=="skill"){console.error(`[tools] \u2717 skill '${s.id}': row is of kind '${u.kind}', not 'skill'`),t==null||t({type:"error:llmNodeRunner",content:`tool '${s.id}' is not a skill`});continue}let y=u.name;if(w[y]){t==null||t({type:"warn:llmNodeRunner",content:`tool name collision on '${y}' \u2014 builtin/other already registered, skipping skill '${s.id}'`});continue}try{w[y]=ao(u,e,o,t),c.push(u);let N=typeof u.execution=="string"?JSON.parse(u.execution):u.execution||{},R=Array.isArray(N.references)?N.references.map(A=>A==null?void 0:A.name):[];console.log(`[tools] \u2713 skill '${s.id}' \u2192 '${y}' (refs: ${R.join(", ")||"none"})`),t==null||t({type:"info:skill:registered",content:{skill:y,refCount:R.length,refs:R}})}catch(N){console.error(`[tools] \u2717 skill '${s.id}': ${String(N)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading skill tool '${s.id}': ${String(N)}`})}continue}let l=u.name;if(w[l]){t==null||t({type:"warn:llmNodeRunner",content:`tool name collision on '${l}' \u2014 builtin already registered, skipping custom tool '${s.id}'`});continue}try{let y=tt(u,e,o,t);w[l]=y,console.log(`[tools] \u2713 custom '${s.id}' \u2192 '${l}'`),console.log(`[tools] ${p(w[l])}`)}catch(y){console.error(`[tools] \u2717 custom '${s.id}': ${String(y)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading custom tool '${s.id}': ${String(y)}`})}continue}if(!Wt[s.id]){console.error(`[tools] \u2717 builtin '${s.id}': not in registry`),t==null||t({type:"error:llmNodeRunner",content:`Tool '${s.id}' not found in registry`});continue}try{let h;try{h=await ie(`../tools/${s.id}.ts`)}catch{h=await re(`../tools/${s.id}.js`)}let u;if(h[s.id])u=h[s.id];else if(h.default)u=h.default;else if(h.create)u=h.create;else{let O=Object.values(h);O.length>0&&(u=O[0])}if(!u){t==null||t({type:"error:llmNodeRunner",content:`No factory export found for tool '${s.id}'`});continue}let l,y,N={};if(s.params&&typeof s.params=="object"){if(typeof s.params.description=="string"?l=s.params.description:s.params.description!==void 0&&(t==null||t({type:"error:llmNodeRunner",content:`Invalid description for tool '${s.id}' \u2014 must be a string`})),s.params.inputSchema!==void 0){let O=s.params.inputSchema;typeof O=="object"&&(typeof O.safeParse=="function"||O._def)?y=O:typeof O=="object"&&O!==null&&O.type==="object"&&O.properties?(y=Bt(O),y||t==null||t({type:"error:llmNodeRunner",content:`Invalid inputSchema for tool '${s.id}' \u2014 must be a Zod schema or JSON Schema object`})):t==null||t({type:"error:llmNodeRunner",content:`Invalid inputSchema for tool '${s.id}' \u2014 must be a Zod schema or JSON Schema object`})}s.params.defaults!==void 0?typeof s.params.defaults=="object"&&s.params.defaults!==null&&!Array.isArray(s.params.defaults)?N=s.params.defaults:(t==null||t({type:"error:llmNodeRunner",content:`Invalid defaults for tool '${s.id}' \u2014 must be an object`}),N={}):s.params.source!==void 0||s.params.target!==void 0?(t==null||t({type:"error:llmNodeRunner",content:`Invalid params for tool '${s.id}' \u2014 legacy top-level source/target not supported; use params.defaults instead`}),N={}):N={}}let R=u(e,o,N,t);l&&R&&typeof R=="object"&&(R.description=l),y&&R&&typeof R=="object"&&(R.inputSchema=y),w[s.id]=R;let A=[];l&&A.push("description"),y&&A.push("inputSchema"),Object.keys(N).length&&A.push(`defaults(${Object.keys(N).join(",")})`);let D=A.length?` [overrides: ${A.join(", ")}]`:"";console.log(`[tools] \u2713 builtin '${s.id}'${D}`),console.log(`[tools] ${p(R)}`)}catch(h){console.error(`[tools] \u2717 builtin '${s.id}': ${String(h)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading tool '${s.id}': ${String(h)}`});continue}}if(c.length>0)if(w.readSkillRef)t==null||t({type:"warn:llmNodeRunner",content:"tool name collision on 'readSkillRef' \u2014 builtin/other already registered, skipping readSkillRef tool"});else try{w.readSkillRef=lo(e,c,o,t),console.log(`[tools] \u2713 registered readSkillRef tool for ${c.length} skill(s)`),t==null||t({type:"info:skill:readSkillRefRegistered",content:{skills:c.map(d=>d.name)}})}catch(d){console.error(`[tools] \u2717 failed to load readSkillRef tool: ${String(d)}`)}return w}async function ht(e,o,i,t,r,w,p){var O,M,b,T;`${o.id}`,t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n=!1;try{let x=(O=i.flowData)==null?void 0:O.state;if(x&&x.edges&&x.nodes){let I=x.edges.filter(C=>C.source===o.id);if(I.length>0){let C=x.nodes.find(j=>j.id===I[0].target);C&&C.type==="answerNode"&&(n=!0)}}}catch(x){console.error("Error determining next node for streaming:",x)}let f=X(o.data.template,o,i,t,{sessionEnv:e});(!f||!f.trim())&&(f="Answer straight forward to the user, dont offer any other option to continue");let a=f,c=X(o.data.user_template||"",o,i,t,{sessionEnv:e}),g=x=>x&&Object.fromEntries(Object.keys(x).map(I=>[I,"[redacted]"])),d=e!=null&&e.secrets||e!=null&&e.userAuth?{...e,secrets:g(e.secrets),userAuth:g(e.userAuth)}:e,m=X(o.data.template,o,i,void 0,{sessionEnv:d})||a,s=X(o.data.user_template||"",o,i,void 0,{sessionEnv:d});t==null||t({type:`info:llmNodeRunner:${o.id}`,content:m}),t==null||t({type:`info:llmNodeRunner:${o.id}`,content:s});let h=(M=o==null?void 0:o.data)==null?void 0:M.window_size,u=Number(h);(!Number.isInteger(u)||u<=0)&&(u=5);let l=xo(o,i),y=Ro(o,i);t==null||t({type:"info:llmNodeRunner:attachments",content:{nodeId:o.id,refs:Array.isArray((b=o.data)==null?void 0:b.attachments)?o.data.attachments:[],images:l.length,documents:y?1:0}});let R=(await((T=e.getMessages)==null?void 0:T.call(e))??[]).slice(-u),A=R.filter(x=>x&&typeof x.role=="string"&&typeof x.content=="string");A.length!==R.length&&console.warn(`Filtered ${R.length-A.length} invalid messages from history`);let D=ce(A,c,l,y);await de(f,D,e.conn,t,o,n,r,i,w,e,p)}async function de(e,o,i,t,r,w,p,n,f,a,c){var d;let g=Date.now();if(!((d=a.env)!=null&&d.AI))throw new Error("AI binding is required for LLM node");return new Promise(async(m,s)=>{var I,C,j,F,L,V;let h,u={},l,y="none",N=!1,R,A=!1,D=!1,O=0,M=0,b=(I=r==null?void 0:r.data)==null?void 0:I.sendReasoning,T=b!==!1;try{let U=(C=r==null?void 0:r.data)==null?void 0:C.model,Y=Array.isArray(U)?U[0]:U||"gpt_5_nano",$=vt(r==null?void 0:r.data),k=await To(Y,a,$);if(!k)throw new Error(`Model '${Y}' not found in registry`);h=k.modelHandle,u=k.effectiveParams||{},y=k.reasoning.kind;let _=ro(k.reasoning,(j=r==null?void 0:r.data)==null?void 0:j.reasoningEffort);N=T&&io(k.reasoning);let J=typeof((F=r==null?void 0:r.data)==null?void 0:F.reasoningMaxTokens)=="number"?r.data.reasoningMaxTokens:void 0;l=so(k.provider,{effort:_,exposeReasoning:N,maxTokens:J}),_&&(t==null||t({type:"info:llmNodeRunner:reasoningEffort",content:_})),console.log(`[reasoning] ${JSON.stringify({model:Y,provider:k.provider,capability:k.reasoning,requestedEffort:((L=r==null?void 0:r.data)==null?void 0:L.reasoningEffort)??null,resolvedEffort:_??null,sendReasoning:T,exposeReasoning:N,providerOptions:l??null},null,2)}`);for(let W of k.paramAdjustments??[])t==null||t({type:"warn:llmNodeRunner",content:W});t==null||t({type:"info:llmNodeRunner:model",content:Y}),t==null||t({type:"info:llmNodeRunner:generationParams",content:{...(V=r==null?void 0:r.data)!=null&&V.generationPreset?{preset:r.data.generationPreset}:{},...u,...y!=="none"?{reasoning:y,configuredSendReasoning:b,sendReasoning:T,exposeReasoning:N,..._?{effort:_}:{}}:{}}})}catch(U){throw t==null||t({type:"error:llmNodeRunner",content:`Model error: ${String(U)}`}),U}let x=await le(a,n,r,t);console.log(`[tools] node ${r.id} loaded ${Object.keys(x).length}: ${Object.keys(x).join(", ")||"(none)"}`),t==null||t({type:"info:llmNodeRunner:toolsLoaded",content:{nodeId:r.id,tools:Object.keys(x)}});try{let U=ne({model:h,system:e,messages:o,stopWhen:(()=>{var W;let k=!!x.readSkillRef?10:5,_=Number(((W=r.data)==null?void 0:W.max_steps)??k),J=Number.isFinite(_)?Math.max(1,Math.min(30,_)):k;return se(J)})(),...oo(u),...l?{providerOptions:l}:{},tools:x,onFinish:async $=>{var xt,Tt;let k=$.text||"",_=$.reasoningText??((xt=$.reasoning)==null?void 0:xt.text)??"";if(console.log(`[reasoning] done: deltas=${O} chars=${M} result.reasoningText=${_.length} finishReason=${$.finishReason??"n/a"} reasoningTokens=${((Tt=$.usage)==null?void 0:Tt.reasoningTokens)??"n/a"}`),T&&N&&!A&&_&&i){A=!0;try{z(i,B.SERVER_REASONING_STREAM,_)}catch(Oo){console.warn("Failed to send finished reasoning over connection",Oo)}}let J={id:ae(),role:"assistant",type:"text",content:k,ts:Date.now()};w&&(a.setMessages?await a.setMessages(J):t==null||t({type:"error:llmNodeRunner",content:"setMessages callback missing"})),i&&T&&A&&!D&&(D=!0,z(i,B.SERVER_REASONING_STREAM_COMPLETE,JSON.stringify({}))),w&&i&&z(i,B.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({})),p==null||p((r==null?void 0:r.id)||"llm_result",k),t==null||t({type:"info:llmNodeRunner:onFinish",content:JSON.stringify($)});let W=Date.now()-g,Ao=R?R-g:void 0;c==null||c({type:"llm_telemetry",payload:{nodeId:r.id,totalLatency:W,timeToFirstToken:Ao,model:$.response.modelId,usage:$.usage}}),c==null||c({type:"llm_result",payload:{result:$}})},onStepFinish:async $=>{let k=(_,J=200)=>{let W=typeof _=="string"?_:JSON.stringify(_);return W?W.length>J?`${W.slice(0,J)}\u2026(+${W.length-J})`:W:""};if($.toolCalls&&$.toolCalls.length>0){for(let _ of $.toolCalls)console.log(`[tools] \u2192 ${_.toolName}(${k(_.args??_.input)})`);t==null||t({type:`info:llmNodeRunner:toolCalls:${r.id}`,content:JSON.stringify($.toolCalls)})}if($.toolResults&&$.toolResults.length>0){for(let _ of $.toolResults)console.log(`[tools] \u2190 ${_.toolName} \u2192 ${k(_.result??_.output)}`);t==null||t({type:`info:llmNodeRunner:toolResults:${r.id}`,content:JSON.stringify($.toolResults)})}},experimental_onToolCallStart:$=>{var k;t==null||t({type:"tool:execution",content:{nodeId:r.id,toolName:(k=$==null?void 0:$.toolCall)==null?void 0:k.toolName,status:"start"}})},experimental_onToolCallFinish:$=>{var k,_;t==null||t({type:"tool:execution",content:{nodeId:r.id,toolName:(k=$==null?void 0:$.toolCall)==null?void 0:k.toolName,status:((_=$==null?void 0:$.toolOutput)==null?void 0:_.type)==="tool-error"?"error":"success"}})},onError:$=>{t==null||t({type:"error:llmNodeRunner",content:"Execution error"}),s($)},onChunk:$=>{if($.chunk.type==="reasoning-delta"){let _=$.chunk.text??$.chunk.delta??"";if(_&&(A=!0,O+=1,M+=_.length,O===1&&console.log("[reasoning] \u2713 first reasoning-delta received")),T&&i&&_)try{z(i,B.SERVER_REASONING_STREAM,_)}catch(J){console.warn("Failed to send reasoning chunk over connection",J)}return}if($.chunk.type==="text-delta"){if(R||(R=Date.now()),i&&T&&A&&!D){D=!0;try{z(i,B.SERVER_REASONING_STREAM_COMPLETE,JSON.stringify({}))}catch(_){console.warn("Failed to send reasoning complete over connection",_)}}return}c==null||c({type:$.chunk.type,payload:{nodeId:r.id,chunk:$.chunk}});let k=`llm_chunk:${$.chunk.type}`;t==null||t({type:k,content:{...$}})}}),Y=async()=>{let $="";for await(let k of U.fullStream)if(k.type==="text-delta"){if($+=k.text,w&&i)try{z(i,B.SERVER_TEXT_STREAM,k.text)}catch(_){console.warn("Failed to send chunk over connection",_)}}else if(k.type==="finish-step"&&k.finishReason==="tool-calls"){if(w&&i&&$.trim())try{z(i,B.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({}))}catch(_){console.warn("Failed to flush text segment over connection",_)}$=""}};await Promise.all([U,Y()]),m(),t==null||t({type:"node:execution",content:{nodeId:r.id,nodeType:r.type,status:"success"}})}catch(U){t==null||t({type:"node:execution",content:{nodeId:r.id,nodeType:r.type,status:"error",error:String(U)}}),s(U)}})}function ce(e,o,i,t){let r=!!(i&&i.length>0),w=!!t,p=r||w,f=e.length>0&&e[e.length-1].role==="user"?e[e.length-1]:void 0,a=c=>{let g=[],d="";if(w&&(d+=`[Attached files]
4
- ${t}
5
- [End of attached files]
6
-
7
- `),c&&(d+=c),d&&g.push({type:"text",text:d}),r)for(let m of i)g.push({type:"image",image:m.data,mimeType:m.mimeType});return g};return o&&f&&f.content===o?[...e.slice(0,-1).map(g=>({role:g.role,content:g.content})),{role:"user",content:a(o)}]:o?[...e.map(c=>({role:c.role,content:c.content})),{role:"user",content:a(o)}]:p&&f?[...e.slice(0,-1).map(g=>({role:g.role,content:g.content})),{role:"user",content:a(f.content)}]:e.map(c=>({role:c.role,content:c.content}))}async function Nt(e,o,i,t,r,w,p){var c,g,d,m,s,h,u;console.log(`**** MEMO Node id: ${o.id} ****`),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n="",f=!1,a=Date.now();try{t==null||t({type:"info:memoNodeRunner",content:"Starting memo node execution"});let l=String(((c=o.data)==null?void 0:c.query_key)||"user_input"),y=H(l,{context:i.context??{},results:i.results??{},nodes:((d=(g=i.flowData)==null?void 0:g.state)==null?void 0:d.nodes)??[],edges:((s=(m=i.flowData)==null?void 0:m.state)==null?void 0:s.edges)??[],currentNodeId:o.id});if(y.missing)throw new Error(`Memo query "${l}" did not produce a value`);if(!e.env||!e.ctx){t==null||t({type:"error:memoNodeRunner",content:"Missing env or ctx"}),r==null||r(o.id,n);return}if(!o.data.rag_id){t==null||t({type:"error:memoNodeRunner",content:"Missing rag_id"}),r==null||r(o.id,n);return}let N=String(y.value??"");t==null||t({type:"info:memoNodeRunner",content:`Query text: ${N}`}),t==null||t({type:"info:memoNodeRunner",content:"Generating embedding for query"});let R=await Ot(e,N,!0);t==null||t({type:"info:memoNodeRunner",content:`Embedding generated successfully, length: ${R.data[0].length}`});let A=Array.isArray(o.data.rag_id)?o.data.rag_id:[o.data.rag_id],D=[];for(let T of A){t==null||t({type:"info:memoNodeRunner",content:`Executing RAG query with namespace: ${T}`});let x=await e.env[`VDB_${(h=i.flowData)==null?void 0:h.tenant}_1024`].query(R.data[0],{namespace:T,topK:o.data.topk,returnMetadata:"all"});t==null||t({type:"info:memoNodeRunner",content:`RAG query completed for namespace ${T}, matches: ${((u=x.matches)==null?void 0:u.length)||0}`}),Array.isArray(x.matches)&&D.push(...x.matches)}let O=Date.now()-a;n=D.map(T=>{var x;return(x=T.metadata)==null?void 0:x.value}).filter(T=>typeof T=="string").join(`
8
-
9
- `),p==null||p({type:"memo_search",payload:{nodeId:o.id,searchLatencyMs:O,retrievedContext:n}}),t==null||t({type:"info:memoNodeRunner",content:`Context retrieval complete, length: ${n.length}, preview: ${n.substring(0,200)}...`}),t==null||t({type:"info:memoNodeRunner",content:"Memo node execution completed successfully"}),f=!0}catch(l){throw console.error("Error processing MemoNode:",l),t==null||t({type:"error:memoNodeRunner",content:`Memo node execution failed: ${l}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(l)}}),l}finally{f&&(r==null||r(o.id,n),t==null||t({type:"info:memoNodeRunner",content:`onResult called with context length: ${n.length}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}}))}}async function Rt(e,o,i,t,r,w,p){var c,g,d,m,s,h,u,l;console.log(`**** START Node ${o.id} ****`),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}}),t==null||t({type:"info:flow",content:i}),p==null||p({type:"start_node",payload:{userMessage:(c=i==null?void 0:i.context)==null?void 0:c.user_input}});let n=((g=o.data)==null?void 0:g.allow_images)!==!1,f=((d=o.data)==null?void 0:d.allow_documents)!==!1;!n&&(i!=null&&i.context)&&(i.context.user_images=[],w==null||w({...i})),!f&&(i!=null&&i.context)&&(i.context.files="",w==null||w({...i}));let a={};for(let y of S(o.data))a[y.name]=(m=i==null?void 0:i.context)==null?void 0:m[y.name];r==null||r(o.id,{...a,user_input:(s=i==null?void 0:i.context)==null?void 0:s.user_input,images:n?(h=i==null?void 0:i.context)==null?void 0:h.user_images:[],files:f?(u=i==null?void 0:i.context)==null?void 0:u.files:"",memory:((l=i==null?void 0:i.context)==null?void 0:l.memory)??""}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}function dr(e,o,i){let t=o;async function r(){var a;if(await((a=i==null?void 0:i.shouldStop)==null?void 0:a.call(i)))throw new et}async function w(a){let c=a;for(t.executedNodes=t.executedNodes||[],t.context=t.context||{},t.results=t.results||{};c&&c.id;)await r(),await p(c),await r(),c=pe(c,t.flowData,t)}async function p(a){var s,h;let c=f[a.type];if(!c){(s=i==null?void 0:i.onError)==null||s.call(i,`Unknown node type: ${a.type}`);return}t.executedNodes=t.executedNodes||[],t.executedNodes.push({id:a.id,type:a.type,label:typeof((h=a.data)==null?void 0:h.label)=="string"?a.data.label:void 0}),t.lastNodeId=a.id;let g=u=>{var l;return(l=i==null?void 0:i.onServerEvent)==null?void 0:l.call(i,{...u,ts:Date.now()})},d=u=>{var l,y;if((l=i==null?void 0:i.onTelemetry)==null||l.call(i,u),u.type==="llm_telemetry"||u.type==="decision_telemetry"||u.type==="memory_update"){let N=(y=u.payload)==null?void 0:y.usage;N&&(t.tokenUsage=t.tokenUsage||{promptTokens:0,completionTokens:0,totalTokens:0},t.tokenUsage.promptTokens+=N.promptTokens||0,t.tokenUsage.completionTokens+=N.completionTokens||0,t.tokenUsage.totalTokens+=N.totalTokens||0)}};return await c(e,a,t,g,(u,l)=>{t.results[u]=l},i==null?void 0:i.onChangeState,d)}let n=async a=>{var m,s,h,u,l,y,N;let c=Date.now(),g="completed",d;try{await r();let R=typeof a=="string"?_t(a):a,A=(R==null?void 0:R.text)||"",D=(R==null?void 0:R.images)||[],O=(R==null?void 0:R.documents)||[],M=await co(O,e.env),b=M.length>0?M.map(I=>`--- file: ${I.name} ---
10
- ${I.text}`).join(`
11
-
12
- `):"";t.context={user_input:A,user_images:D,files:b},t.tokenUsage={promptTokens:0,completionTokens:0,totalTokens:0},t.executedNodes=[],(m=i==null?void 0:i.onServerEvent)==null||m.call(i,{type:"agent:start",content:"Execution started",timestamp:Date.now()});let{startNode:T,error:x}=ue(t.flowData);if(!T)g="failed",d=x||"Flow Format Error",(s=i==null?void 0:i.onError)==null||s.call(i,d);else{let I=S(T.data),{values:C,errors:j}=Ft(I,R==null?void 0:R.inputs);if(j.length>0)return g="failed",d=`Invalid flow inputs: ${j.join("; ")}`,(h=i==null?void 0:i.onError)==null||h.call(i,d),{status:g,error:d};if(t.context={...t.context,inputs:C,...C},t.context.user_input||(t.context.user_input=A),Ut(T.data)){let F=Pt(Vt(T.data));t.context.memory=jt(e.agentMemory||"",F).content}else t.context.memory="";await w(T),(u=i==null?void 0:i.onServerEvent)==null||u.call(i,{type:"agent:telemetry",content:{durationMs:Date.now()-c,tokenUsage:t.tokenUsage},timestamp:Date.now()})}}catch(R){R instanceof et?(g="stopped",d=R.message,(l=i==null?void 0:i.onServerEvent)==null||l.call(i,{type:"agent:stopped",content:d,timestamp:Date.now()})):(g="failed",d=R instanceof Error?R.message:"Agent execution failed",(y=i==null?void 0:i.onError)==null||y.call(i,d))}finally{(N=i==null?void 0:i.onServerEvent)==null||N.call(i,{type:"agent:complete",content:{status:g,durationMs:Date.now()-c},timestamp:Date.now()})}return{status:g,error:d}},f={startNode:Rt,classifierNode:yt,llmNode:ht,memoNode:Nt,answerNode:nt,apiNode:dt,toolNode:pt,workerNode:mt,crawlNode:ft};return n}var et=class extends Error{constructor(){super("Stopped by user"),this.name="FlowExecutionStoppedError"}};function ue(e){let o=(e==null?void 0:e.state)??e,i=Lt(o);return i.length?{error:i[0].message}:{startNode:o.nodes.find(t=>t.type==="startNode")}}function $o(e,o){var i;return((i=e.state)==null?void 0:i.nodes.find(t=>t.id===o))||null}function pe(e,o,i){var w;let t=o==null?void 0:o.state;if(!t)return null;let r=t.edges.filter(p=>p.source===e.id);if(e.type==="classifierNode"){let p=(w=i==null?void 0:i.results)==null?void 0:w[e.id];if(!p||!["class","uncertain","blocked","error"].includes(p.route))throw new Error(`Classifier ${e.id}: missing decision result`);let n=p.route,f=g=>r.find(d=>d.sourceHandle===it(g,p.classification)),a=f(n);if(!a&&n==="blocked"&&(n=p.confidence<e.data.confidence.threshold||p.margin<e.data.confidence.margin?"uncertain":"class",a=f(n)),!a&&n==="uncertain"&&(n="class",a=f(n)),!a)throw new Error(`Classifier ${e.id}: no connected edge for ${it(n,p.classification)}`);let c=$o(o,a.target);if(!c)throw new Error(`Classifier ${e.id}: edge target ${a.target} does not exist`);return c}return r.length===0?null:$o(o,r[0].target)}export{z as a,_o as b,wo as c,He as d,ee as e,To as f,fi as g,dr as h,et as i};