@hugex/ai 3.0.5 → 3.0.6
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/FlowEngine-RGHVLIOZ.js +1 -0
- package/dist/chunk-4XJVXKXR.js +7 -0
- package/dist/chunk-CRVHPQVH.js +23 -0
- package/dist/chunk-J4LJZZ67.js +3 -0
- package/dist/chunk-Q7QHJJGR.js +1 -0
- package/dist/chunk-VS4EXG76.js +1 -0
- package/dist/{chunk-EZIUCT77.js → chunk-YFOFZWIB.js} +1 -1
- package/dist/chunk-YLDLDEUP.js +1 -0
- package/dist/client.js +1 -1
- package/dist/common/types/node-types.d.ts +3 -2
- package/dist/common/utils/httpPayload.d.ts +4 -0
- package/dist/common/utils/templateUtils.d.ts +12 -0
- package/dist/common.d.ts +1 -0
- package/dist/common.js +1 -1
- package/dist/httpTool-2BU6JAAK.js +1 -0
- package/dist/index.js +8 -30
- package/dist/server/core/AgentDO.d.ts +8 -0
- package/dist/server/runners/workerNodeRunner.d.ts +4 -0
- package/dist/vectorize-CDB26DMD.js +1 -0
- package/package.json +1 -1
- package/dist/chunk-G3SGJ7XJ.js +0 -1
- package/dist/chunk-QHCN3UMW.js +0 -7
- package/dist/chunk-VLZKZDRV.js +0 -3
- package/dist/httpTool-5D2PQJKV.js +0 -1
- package/dist/vectorize-UJXIDL2E.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as a,i as b}from"./chunk-CRVHPQVH.js";import"./chunk-ELMOSEQ7.js";import"./chunk-YFOFZWIB.js";import"./chunk-OF6G42DM.js";import"./chunk-MOYYZBTC.js";import"./chunk-CDGUEX3J.js";import"./chunk-4XJVXKXR.js";import"./chunk-J4LJZZ67.js";import"./chunk-V6JSMX5A.js";import"./chunk-YLDLDEUP.js";import"./chunk-U56YWPSI.js";import"./chunk-A2IRPAD4.js";import"./chunk-3TXHFKDN.js";export{b as FlowExecutionStoppedError,a as startEngine};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
var H={USER_MESSAGE:"M",USER_CLEAR_HISTORY:"CH",USER_AUTH:"AUT",USER_IDENTITY:"UID",SERVER_EVENT:"SE",SERVER_HISTORY:"HIS",SERVER_ERROR:"ERR",SERVER_STEP:"STEP",SERVER_TEXT_STREAM:"TS",SERVER_TEXT_STREAM_COMPLETE:"TSC",SERVER_REASONING_STREAM:"RS",SERVER_REASONING_STREAM_COMPLETE:"RSC",SERVER_CONFIG:"CFG"};function V(e){try{let t=JSON.parse(e);if(t&&typeof t=="object"&&typeof t.text=="string")return t}catch{}return{text:e}}var T=256;function F(e){if(typeof e!="string")return null;let t=e.trim();return t?t.slice(0,T):null}function D(e){try{let t=JSON.parse(e);if(t&&typeof t=="object"&&typeof t.name=="string"&&typeof t.value=="string"){let n=t.name.trim();return/^[A-Z][A-Z0-9_]*$/.test(n)?{name:n,value:t.value}:null}}catch{}return null}var h={short:100,medium:250,long:1e3},v={short:2e3,medium:5e3,long:2e4},g="medium",M="gpt_5_nano",E=4;function b(e){return e==="short"||e==="medium"||e==="long"?e:g}function k(e=g){return v[e]}function z(e=g){return h[e]}function _(e){return e?Math.ceil(e.length/E):0}function O(e,t){if(!e)return{content:"",truncated:!1};if(_(e)<=t)return{content:e,truncated:!1};let n=Math.max(0,t*E);return{content:e.slice(0,n),truncated:!0}}function Z(e){let t=e==null?void 0:e.memory_enabled;return t===!0||t==="true"||t===1}function B(e){let t=e==null?void 0:e.memory_model;return typeof t=="string"&&t.trim()?t.trim():M}function X(e){return b(e==null?void 0:e.memory_length)}function J(e,t){let n=k(e);return t&&t!=="none"?n+2048:n}var R=/^(user|assistant|usuario|asistente|u|a)\s*:/i,A=/^(hola|hello|hi|hey|buenas|buen[oa]s?\s+d[ií]as?|qu[eé]\s+tal|qu[eé]\s+haces)[\s,.!¡¿?]*$/i;function L(e){let t=e.split(`
|
|
2
|
+
`).map(o=>o.replace(/^[-*]\s*/,"").trim()).filter(Boolean);if(t.length<2)return!1;let n=t.filter(o=>R.test(o));return n.length>=2&&n.length>=Math.ceil(t.length/2)}function N(e){let t=e.split(`
|
|
3
|
+
`).map(n=>n.trim()).filter(Boolean).filter(n=>n!=="(empty)"&&n!=="(none)").filter(n=>!R.test(n.replace(/^[-*]\s*/,"")));return L(t.join(`
|
|
4
|
+
`))?"":t.join(`
|
|
5
|
+
`)}function Q(e){let t=e.trim();if(!t||A.test(t))return[];let n=[],o=t.match(/(?:me llamo|soy|i['’]m|i am|my name is)\s+([A-Za-zÁÉÍÓÚÜáéíóúüñÑ][\wÁÉÍÓÚÜáéíóúüñÑ'-]{1,40})/i);o&&n.push(`Name: ${o[1]}`);let s=t.match(/me gusta[n]?\s+([^,.!?]+)/i);if(s&&n.push(`Likes: ${s[1].trim()}`),/[?¿]/.test(t)||/^(pregunt|dime\b|cu[eé]nt)/i.test(t))return n;let a=t.replace(/^(hola|hey|hi)[,\s]+/i,"").replace(/(?:me llamo|soy)\s+[A-Za-zÁÉÍÓÚÜáéíóúüñÑ][\wÁÉÍÓÚÜáéíóúüñÑ'-]*/gi,"").replace(/me gusta[n]?\s+[^,.!?]+/gi,"").replace(/[,.\s]+/g," ").trim();return a.length>=16&&n.push(a.slice(0,140)),n}function ee(e,t,n){let s=[...N(e).split(`
|
|
6
|
+
`).map(r=>r.replace(/^[-*]\s*/,"").trim()).filter(Boolean)];for(let r of t){let a=r.replace(/^[-*]\s*/,"").trim();a&&(s.some(i=>i.toLowerCase()===a.toLowerCase())||s.push(a))}return s.length===0?"":O(s.map(r=>`- ${r}`).join(`
|
|
7
|
+
`),n).content}var y=["temperature","topP","topK","frequencyPenalty","presencePenalty","maxOutputTokens","seed","stopSequences","maxRetries"],P=["temperature","topP","topK","frequencyPenalty","presencePenalty"],S={precise:{temperature:.3,topP:.9,topK:30},balanced:{temperature:.8,topP:1,topK:50},creative:{temperature:1.1,topP:.95,topK:80}},w=1e-6,x={temperature:{min:0,max:2,step:.1},topP:{min:0,max:1,step:.05},topK:{min:1,max:500,step:1},frequencyPenalty:{min:-2,max:2,step:.1},presencePenalty:{min:-2,max:2,step:.1},maxOutputTokens:{max:128e3},seed:!0,stopSequences:{max:4}};function I(e){return/^gpt-5/i.test(e)}function c(e){let t=e.contextWindow??128e3;return e.provider==="openai"?I(e.providerModel)?{temperature:!1,topP:!1,topK:{min:1,max:500,step:1},frequencyPenalty:{min:-2,max:2,step:.1},presencePenalty:{min:-2,max:2,step:.1},maxOutputTokens:{max:t},seed:!0,stopSequences:{max:4}}:{...x,maxOutputTokens:{max:t}}:e.provider==="xai"?{...x,maxOutputTokens:{max:t},seed:!0}:e.provider==="anthropic"?{temperature:{min:0,max:1,step:.1},topP:{min:0,max:1,step:.05},topK:{min:1,max:500,step:1},frequencyPenalty:!1,presencePenalty:!1,maxOutputTokens:{max:t},seed:!1,stopSequences:{max:4}}:e.provider==="openrouter"?{temperature:{min:0,max:2,step:.1},topP:{min:0,max:1,step:.05},topK:{min:1,max:500,step:1},frequencyPenalty:{min:-2,max:2,step:.1},presencePenalty:{min:-2,max:2,step:.1},maxOutputTokens:{max:t},seed:!0,stopSequences:{max:4}}:e.provider==="workersai"||e.provider==="cloudflare"?{temperature:{min:0,max:2,step:.1},topP:{min:0,max:1,step:.05},topK:{min:1,max:500,step:1},frequencyPenalty:!1,presencePenalty:!1,maxOutputTokens:{max:t},seed:!1,stopSequences:{max:4}}:{...x,maxOutputTokens:{max:t}}}function l(e,t){if(e==="maxRetries")return!0;let n=t[e];return n===!1?!1:e==="seed"?n===!0:n!==void 0}function C(e,t,n){return Math.min(n,Math.max(t,e))}function q(e,t){return e===void 0&&t===void 0?!0:e===void 0||t===void 0?!1:Math.abs(e-t)<w}function ne(e,t){for(let n of["precise","balanced","creative"]){let o=S[n],s=!0;for(let r of P){if(t&&!l(r,t))continue;let a=o[r],i=e[r];if(a!==void 0){if(typeof a=="number"&&typeof i=="number"){if(!q(i,a)){s=!1;break}}else if(i!==a){s=!1;break}}}if(s)return n}return"custom"}function re(e,t){let n=S[e],o={};for(let s of P){if(t&&!l(s,t))continue;let r=n[s];r!==void 0&&(o[s]=r)}return o}function oe(e){if(!e)return{};let t={};for(let n of y){let o=e[n];o!==void 0&&(n==="stopSequences"?Array.isArray(o)&&(t.stopSequences=o.filter(s=>typeof s=="string")):n==="maxRetries"?typeof o=="number"&&(t.maxRetries=o):typeof o=="number"&&(t[n]=o))}return t}function se(e,t,n){var a;let o={...e,...t},s=[],r={};for(let i of y){let m=o[i];if(m===void 0)continue;if(i==="maxRetries"){r.maxRetries=m;continue}if(!l(i,n)){s.push({key:i,action:"stripped",detail:"unsupported by model"});continue}if(i==="stopSequences"){let u=m,p=((a=n.stopSequences)==null?void 0:a.max)??u.length;u.length>p?(r.stopSequences=u.slice(0,p),s.push({key:i,action:"clamped",detail:`truncated to ${p} sequences`})):r.stopSequences=u;continue}if(i==="seed"){r.seed=m;continue}let f=n[i];if(f&&typeof f=="object"&&"min"in f){let u=m,p=C(u,f.min,f.max);r[i]=p,p!==u&&s.push({key:i,action:"clamped",detail:`clamped from ${u} to ${p}`})}else if(i==="maxOutputTokens"){let u=m,p=n.maxOutputTokens.max,d=Math.min(u,p);r.maxOutputTokens=d,d!==u&&s.push({key:i,action:"clamped",detail:`clamped from ${u} to ${d}`})}}return{effectiveParams:r,adjustments:s}}function ie(e){let t={};return e.temperature!==void 0&&(t.temperature=e.temperature),e.topP!==void 0&&(t.topP=e.topP),e.topK!==void 0&&(t.topK=e.topK),e.frequencyPenalty!==void 0&&(t.frequencyPenalty=e.frequencyPenalty),e.presencePenalty!==void 0&&(t.presencePenalty=e.presencePenalty),e.maxOutputTokens!==void 0&&(t.maxOutputTokens=e.maxOutputTokens),e.seed!==void 0&&(t.seed=e.seed),e.stopSequences!==void 0&&(t.stopSequences=e.stopSequences),e.maxRetries!==void 0&&(t.maxRetries=e.maxRetries),t}function ae(e=128e3){return c({provider:"openai",providerModel:"gpt-4.1",contextWindow:e})}function ue(e=2e6){return c({provider:"openai",providerModel:"gpt-5-nano",contextWindow:e})}function pe(e=256e3){return c({provider:"xai",providerModel:"grok-4-fast",contextWindow:e})}function me(e=128e3){return c({provider:"cloudflare",providerModel:"@cf/meta/llama-3.2-3b-instruct",contextWindow:e})}function fe(e,t){let n={...e};for(let o of y)o==="maxRetries"||n[o]===void 0||l(o,t)||delete n[o];return n}var G=["none","minimal","low","medium","high","xhigh"],K=e=>typeof e=="string"&&G.includes(e);function le(e){var n;let t=(n=e.capabilities)==null?void 0:n.reasoning;return t&&typeof t=="object"?t:t?{kind:"effort"}:{kind:"none"}}function U(e){return e.kind!=="effort"?[]:e.levels??[]}var W=e=>e===!0||e==="true";function de(e){return e.kind==="tag"?!0:e.kind==="effort"?W(e.exposesReasoning):!1}function ge(e,t){if(e.kind!=="effort")return;let n=U(e);if(K(t)&&n.includes(t))return t;if(e.defaultLevel&&n.includes(e.defaultLevel))return e.defaultLevel}function xe(e,t){let{effort:n,exposeReasoning:o,maxTokens:s}=t;if(e==="openai"){let r={};return n&&(r.reasoningEffort=n),o&&(r.reasoningSummary="auto"),Object.keys(r).length?{openai:r}:void 0}if(e==="xai")return n?{xai:{reasoningEffort:n}}:void 0;if(e==="openrouter"){if(!s&&!n)return;let r={};return o!==void 0&&(r.exclude=!o),s?{openrouter:{reasoning:{...r,max_tokens:s}}}:{openrouter:{reasoning:{...r,effort:n}}}}if(e==="anthropic"){let r={};return(n||o)&&(r.thinking={type:"adaptive",...o?{display:"summarized"}:{}}),n&&(r.effort=n),Object.keys(r).length?{anthropic:r}:void 0}}var j=[{id:"convertTempMessure",label:"Convert Temperature",description:"Convert temperature between Celsius, Fahrenheit, and Kelvin with optional static parameters"},{id:"tempTool",label:"Temp Tool",description:"Temporary demo tool"},{id:"twitter",label:"Twitter",description:"Twitter API for user info, tweets, mentions, replies, advanced search, and trends"},{id:"vectorize",label:"Vectorize",description:"Perform a semantic vector search. Returns relevant matches with scores and metadata."}],Ee=j.reduce((e,t)=>(e[t.id]=t,e),{});export{H as a,V as b,T as c,F as d,D as e,h as f,v as g,g as h,M as i,b as j,k,z as l,_ as m,O as n,Z as o,B as p,X as q,J as r,L as s,N as t,Q as u,ee as v,y as w,P as x,S as y,c as z,ne as A,re as B,oe as C,se as D,ie as E,ae as F,ue as G,pe as H,me as I,fe as J,G as K,le as L,U as M,de as N,ge as O,xe as P,Ee as Q};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import{a as bt}from"./chunk-ELMOSEQ7.js";import{a as G,b as Z,c as Ct,d as tt}from"./chunk-YFOFZWIB.js";import{a as zt}from"./chunk-OF6G42DM.js";import{a as Kt,b as Bt}from"./chunk-CDGUEX3J.js";import{C as Ut,D as Vt,E as Lt,L as Ht,N as Wt,O as Jt,P as Xt,Q as qt,a as K,b as $t,k as Ft,n as It,o as Ot,q as _t,z as jt}from"./chunk-4XJVXKXR.js";import{B as Mt,c as E,d as At,h as kt,k as Y,r as Dt,s as V,v as S,w as J}from"./chunk-J4LJZZ67.js";import{a as Rt,b as xt,d as Tt}from"./chunk-YLDLDEUP.js";import{a as v,b as Pt}from"./chunk-A2IRPAD4.js";import{a as Q}from"./chunk-3TXHFKDN.js";async function Gt(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 s=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(!s.ok)return console.error(`extractDocuments: ${t.name} failed ${s.status}`),{name:t.name,text:""};let l=await s.json();return{name:t.name,text:l.text||""}}catch(s){return console.error(`extractDocuments: ${t.name} threw`,s),{name:t.name,text:""}}})):[]}function ao(e,o,i){var t,s,l,p;return Y(((s=(t=i.flowData)==null?void 0:t.state)==null?void 0:s.nodes)??[],((p=(l=i.flowData)==null?void 0:l.state)==null?void 0:p.edges)??[],o.id).some(d=>d.ref===e&&(d.type==="image"||d.type==="file"))}function lo(e,o){var p,d,u,a,c,m,n;let i=Array.isArray((p=e.data)==null?void 0:p.outputMapping)?e.data.outputMapping:[];if(i.length===0)return null;let t=((u=(d=o.flowData)==null?void 0:d.state)==null?void 0:u.nodes)||[],s={},l=new Set;for(let y of i){let r=(a=y.key)==null?void 0:a.trim(),h=(c=y.from)==null?void 0:c.trim();if(!r||!h)throw new Error(`Answer node ${e.id} has an incomplete variable mapping`);if(l.has(r))throw new Error(`Answer node ${e.id} has duplicate output key "${r}"`);if(ao(h,e,o))throw new Error(`Answer node ${e.id} cannot persist binary source "${h}"`);let f=J(h,{context:o.context||{},results:o.results||{},nodes:t,edges:((n=(m=o.flowData)==null?void 0:m.state)==null?void 0:n.edges)??[],currentNodeId:e.id}),g=f.value;if(f.missing||g===void 0||g===null){if(y.default===void 0)throw new V(f.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Answer node ${e.id} could not resolve output "${h}"`);g=y.default}s[r]=g,l.add(r)}try{JSON.stringify(s)}catch{throw new Error(`Answer node ${e.id} produced a value that is not JSON serializable`)}return s}async function st(e,o,i,t,s,l,p){var u,a,c;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let d;try{d=lo(o,i)}catch(m){throw t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(m)}}),m}d&&e.outputCollector&&e.outputCollector.add(o.id,d);try{let m=await((u=e.getMessages)==null?void 0:u.call(e))??[],n=((a=m[m.length-1])==null?void 0:a.type)==="text"?m[m.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:n}})}catch(m){console.error("answerNodeRunner: failed to emit answer telemetry:",m),t==null||t({type:"debug",content:"Warning: failed to emit answer telemetry"})}s==null||s(o.id,{type:"answerNode",message:"Answer response for: "+o.data.response,saved:!0,persistenceRequested:!!d&&!!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 z(e,o,i,t,s){var d,u,a,c,m;let l=(s==null?void 0:s.callerTag)??"llmNodeRunner",p=(s==null?void 0:s.serializeNonStrings)??!1;return Mt(e,o,{context:i.context??{},results:i.results??{},nodes:((u=(d=i.flowData)==null?void 0:d.state)==null?void 0:u.nodes)??[],edges:((c=(a=i.flowData)==null?void 0:a.state)==null?void 0:c.edges)??[],currentNodeId:o.id,secrets:(m=s==null?void 0:s.sessionEnv)==null?void 0:m.secrets},{callerTag:l,serializeNonStrings:p,onError:n=>{t==null||t({type:`error:${l}`,content:n})}})}var rt="[redacted]",Zt=8*1024;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<=Zt){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,Zt);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(t),truncated:!0}}function uo(e,o){return S(e,o)}var nt=(e,o,i,t,s)=>z(e,o,i,s,{callerTag:"apiNodeRunner",serializeNonStrings:!0,sessionEnv:t});async function at(e,o,i,t,s,l,p){var a,c,m,n,y,r;`${o.id}`,t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let d=null,u=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)||"",f=nt(h,o,i,e,t);if(console.log("[apiNodeRunner] resolved url:",G(h)?Z(f):f),!f){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"}}),s==null||s(o.id,d);return}let g=(((c=o.data)==null?void 0:c.method)||"GET").toUpperCase();console.log("[apiNodeRunner] method:",g);let w=((m=o.data)==null?void 0:m.headers)||{},x={},N={};for(let C in w)if(Object.prototype.hasOwnProperty.call(w,C)){let j=String(w[C]??"");N[C]=G(j),x[C]=nt(j,o,i,e,t)}let R,_=!1;if(g!=="GET"&&g!=="HEAD"&&((n=o.data)==null?void 0:n.body)!==void 0){let C=typeof o.data.body=="string"?o.data.body:JSON.stringify(o.data.body);_=G(C),R=nt(C,o,i,e,t),!x["Content-Type"]&&!x["content-type"]&&(x["Content-Type"]="application/json")}let F={};for(let C in x)F[C]=N[C]?rt:x[C];console.log("[apiNodeRunner] headers:",JSON.stringify(F)),console.log("[apiNodeRunner] body:",_?rt:R),t==null||t({type:"info:apiNodeRunner:request",content:{nodeId:o.id,method:g,url:G(h)?Z(f):f,headers:F,body:_?rt:R}});let P=Number((y=o.data)==null?void 0:y.timeoutMs),U=new AbortController,O=Number.isFinite(P)&&P>0?setTimeout(()=>U.abort(),P):null,T;try{console.log("[apiNodeRunner] fetching..."),T=await fetch(f,{method:g,headers:x,body:R,signal:U.signal}),console.log("[apiNodeRunner] fetch returned status:",T.status)}finally{O&&clearTimeout(O)}let b=T.headers.get("content-type")||"";console.log("[apiNodeRunner] content-type:",b);let M=await Dt(T);console.log("[apiNodeRunner] payload preview:",typeof M=="string"?M.slice(0,200):JSON.stringify(M).slice(0,200)),d={ok:T.ok,status:T.status,data:M};let D=Date.now()-u;p==null||p({type:"api_call",payload:{nodeId:o.id,url:f,method:g,status:T.status,latencyMs:D}});let{value:$,truncated:L}=co(M);t==null||t({type:"info:apiNodeRunner:response",content:{nodeId:o.id,ok:T.ok,status:T.status,latencyMs:D,data:$,truncated:L,outVars:uo(o,d)}}),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:",(r=JSON.stringify(d))==null?void 0:r.slice(0,300)),s==null||s(o.id,d)}}var po="[redacted]",Et=8*1024;function dt(e,o){if(typeof e=="string")return G(e)?typeof o=="string"&&/^https?:\/\//i.test(o)?Z(o):po:o;if(e&&typeof e=="object"&&!Array.isArray(e)){let i={},t=o&&typeof o=="object"&&!Array.isArray(o)?o:{};for(let[s,l]of Object.entries(e))i[s]=dt(l,t[s]);return i}if(Array.isArray(e)){let i=Array.isArray(o)?o:[];return e.map((t,s)=>dt(t,i[s]))}return o}function fo(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<=Et){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,Et);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(t),truncated:!0}}function mo(e,o){return S(e,o)}var yo=(e,o,i,t,s)=>z(e,o,i,s,{callerTag:"toolNodeRunner",serializeNonStrings:!0,sessionEnv:t});function ot(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function go(e){let o=ot(e);if(Array.isArray(o.enum)&&o.enum.length>0)return o.enum.every(s=>typeof s=="string"||typeof s=="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 wo(e,o){var p,d;let i={},t={},s=((p=e.data)==null?void 0:p.inputSchema)??o;if(s&&typeof s=="object"&&!Array.isArray(s)){t=ot(ot(s).properties);for(let[u,a]of Object.entries(t))i[u]=go(a);return{types:i,properties:t}}let l=(d=e.data)==null?void 0:d.argTypes;if(l&&typeof l=="object"&&!Array.isArray(l))for(let[u,a]of Object.entries(l))typeof a=="string"&&(i[u]=a);return{types:i,properties:t}}function ho(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 s=t.find(l=>String(l)===e);if(s!==void 0)return s}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 No(e){return e===void 0||typeof e=="string"&&e.trim()===""}function lt(e,o,i,t,s,l,p){if(typeof e=="string"){let d=e.includes("{{")?yo(e,o,i,t,s):e;return ho(d,l,p)}if(e&&typeof e=="object"&&!Array.isArray(e)){let d={};for(let[u,a]of Object.entries(e))d[u]=lt(a,o,i,t,s);return d}return Array.isArray(e)?e.map(d=>lt(d,o,i,t,s)):e}function Ro(e,o,i,t,s,l){let p={};for(let[d,u]of Object.entries(e)){let a=lt(u,o,i,t,s,l.types[d],l.properties[d]);No(a)||(p[d]=a)}return p}async function xo(e){if(e.toolCatalog)return e.toolCatalog;if(!e.env)return e.toolCatalog={},e.toolCatalog;let o=await Pt(e.env),i={};for(let t of o)t!=null&&t.id&&(i[t.id]=t);return e.toolCatalog=i,i}async function To(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}async function ct(e,o,i,t,s,l,p){var c,m,n,y,r,h,f,g,w,x,N,R;`${o.id}`,t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let d={ok:!1,data:null,error:null},u=Date.now(),a=((c=o.data)==null?void 0:c.source)==="http"?"http":"catalog";try{let _=(m=o.data)!=null&&m.args&&typeof o.data.args=="object"&&!Array.isArray(o.data.args)?o.data.args:{},F,P;if(a==="http"){let D=typeof((n=o.data)==null?void 0:n.toolId)=="string"?o.data.toolId.trim():"";if(!D)throw new Error("HTTP tool nodes require toolId");if(P=(await To(e))[D],!P)throw new Error(`Tool ${D} not found`);F=P.inputSchema}let U=wo(o,F),O=Ro(_,o,i,e,t,U);if(t==null||t({type:"info:toolNodeRunner:request",content:{nodeId:o.id,source:a,catalogId:(y=o.data)==null?void 0:y.catalogId,toolSlug:(r=o.data)==null?void 0:r.toolSlug,toolId:(h=o.data)==null?void 0:h.toolId,args:dt(_,O)}}),a==="catalog"){let D=typeof((f=o.data)==null?void 0:f.catalogId)=="string"?o.data.catalogId.trim():"",$=typeof((g=o.data)==null?void 0:g.toolSlug)=="string"?o.data.toolSlug.trim():"";if(!D||!$)throw new Error("Catalog tool nodes require catalogId and toolSlug");let C=(await xo(e))[D];if(!C)throw new Error(`Tool catalog entry ${D} not found or disabled`);let j=typeof((w=o.data)==null?void 0:w.toolVersion)=="string"?o.data.toolVersion.trim():"",H=await bt(e,{toolSlug:$,connectionScope:C.connectionScope,toolVersion:j||null,toolkitVersion:C.toolkitVersion,arguments:O});d={ok:H.ok,data:H.ok?H.data:null,error:H.ok?null:H.error??"Tool execution failed"}}else{let D=tt(P,e,i,t);if(!D.execute)throw new Error(`Tool ${(x=o.data)==null?void 0:x.toolId} is missing an execute handler`);let $=await D.execute(O,{}),L=$&&typeof $=="object"&&"error"in $&&$.error?String($.error):null;d={ok:!L,data:$,error:L}}let T=Date.now()-u;p==null||p({type:"tool_call",payload:{nodeId:o.id,url:a==="catalog"?`composio:${((N=o.data)==null?void 0:N.toolSlug)??""}`:`tool:${((R=o.data)==null?void 0:R.toolId)??""}`,method:"EXECUTE",status:d.ok?200:502,latencyMs:T}});let{value:b,truncated:M}=fo(d.data);t==null||t({type:"info:toolNodeRunner:response",content:{nodeId:o.id,ok:d.ok,latencyMs:T,data:b,truncated:M,error:d.error,outVars:mo(o,d)}}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:d.ok?"success":"error",error:d.error??void 0}})}catch(_){let F=_ instanceof Error?_.message:String(_);d={ok:!1,data:null,error:F},t==null||t({type:"error:toolNodeRunner",content:`Tool node execution failed: ${F}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:F}})}finally{s==null||s(o.id,d)}}function St(){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 Ao(e){return!!(e!=null&&e.HX_ORA_URL)&&!!(e!=null&&e.HX_API_KEY)}async function ge(e,o){if(!Ao(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 vt=3,to=10,$o=new Set(["agent:start","agent:complete","agent:telemetry"]);function Fo(e){let o=e.executedNodes||[];return o.length===0?"(none)":o.map(i=>i.label?`${i.id} (${i.label})`:i.id).join(" \u2192 ")}function Io(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 Oo(e,o){var l,p,d,u,a,c,m;let i=Array.isArray((l=e.data)==null?void 0:l.inputs)?e.data.inputs:[],t=((d=(p=o.flowData)==null?void 0:p.state)==null?void 0:d.nodes)||[],s={};for(let n of i){let y=(u=n.key)==null?void 0:u.trim();if(!y)continue;let r=(a=n.from)==null?void 0:a.trim();if(!r){if(n.default===void 0)continue;s[y]=n.default;continue}let h=J(r,{context:o.context||{},results:o.results||{},nodes:t,edges:((m=(c=o.flowData)==null?void 0:c.state)==null?void 0:m.edges)??[],currentNodeId:e.id}),f=h.value;if(h.missing||f===void 0||f===null){if(n.default===void 0)throw new V(h.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Worker node ${e.id} could not resolve input "${r}"`);f=n.default}s[y]=f}return s}async function ut(e,o,i,t,s,l,p){var U,O,T,b,M,D;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let d=typeof((U=o.data)==null?void 0:U.flowId)=="string"?o.data.flowId.trim():"";d||q(t,o,new Error(`Worker node ${o.id} is missing flowId`));let u=(O=i.flowData)==null?void 0:O.flowId,a=e.workerStack??(u?[u]:[]);a.includes(d)&&q(t,o,new Error(`Worker node ${o.id} cannot call ${d}: cycle detected (${[...a,d].join(" \u2192 ")})`)),a.length>=vt&&q(t,o,new Error(`Worker node ${o.id} exceeded max nesting depth (${vt})`));let c=e.workerCalls??{count:0};e.workerCalls=c,c.count>=to&&q(t,o,new Error(`Worker node ${o.id} exceeded max worker calls per run (${to})`)),c.count+=1;let m;try{m=Oo(o,i)}catch($){q(t,o,$ instanceof Error?$:new Error(String($)));return}let n=e.env;n||q(t,o,new Error(`Worker node ${o.id} is missing runtime env`));let y,r;try{let $=await Rt(d,n);r=(T=$==null?void 0:$.metadata)==null?void 0:T.tenant,y=await xt(d,n)}catch($){q(t,o,new Error(`Worker node ${o.id} could not load worker ${d}: ${$ instanceof Error?$.message:String($)}`))}let h=(b=i.flowData)==null?void 0:b.tenant;(!r||r!==h)&&q(t,o,new Error(`Worker ${d} belongs to a different tenant`));let f=St(),g={flowData:{...y,tenant:r,flowId:d,chatId:((M=i.flowData)==null?void 0:M.chatId)||""},executedNodes:[],context:{},results:{}},w={env:n,ctx:e.ctx,secrets:e.secrets,userAuth:e.userAuth,user:e.user,toolDefs:e.toolDefs,toolCatalog:e.toolCatalog,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:f,workerStack:[...a,d]},x,N={onChangeState:()=>{},onServerEvent:$=>{var L;$o.has($.type)||t==null||t({type:"worker:node",content:{workerNodeId:o.id,childNodeId:(L=$.content)==null?void 0:L.nodeId,event:$}})},onTelemetry:$=>p==null?void 0:p($),onError:$=>{x=$},shouldStop:e.shouldStop},{startEngine:R,FlowExecutionStoppedError:_}=await import("./FlowEngine-RGHVLIOZ.js"),F=await R(w,g,N)({text:"",inputs:m});if((F.status==="stopped"||await((D=e.shouldStop)==null?void 0:D.call(e)))&&q(t,o,new _),F.status!=="completed"){let $=Io(g),L=Fo(g),C=F.error||x||"unknown error",j=$?` at node ${$.label?`${$.id} (${$.label})`:$.id}`:"";q(t,o,new Error(`Worker ${d} failed${j}: ${C}. Path: ${L}`))}f.hasOutputs()||q(t,o,new Error(`El worker ${d} complet\xF3 sin output estructurado. Agreg\xE1 un mapeo de salida en su nodo Answer.`));let P=(g.executedNodes||[]).map($=>$.id);s==null||s(o.id,{ok:!0,data:f.snapshotData(),error:null,executed:P}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}import{generateObject as Uo}from"ai";import{z as oo}from"zod";import{openai as _o}from"@ai-sdk/openai";import{extractReasoningMiddleware as ko,wrapLanguageModel as Do}from"ai";import{createWorkersAI as Mo}from"workers-ai-provider";import{xai as Po}from"@ai-sdk/xai";import{anthropic as bo}from"@ai-sdk/anthropic";import{createOpenRouter as Co}from"@openrouter/ai-sdk-provider";var ft={};function pt(e){if(e!=null){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return}}}function jo(e){return{...e,defaultParams:pt(e.defaultParams)??e.defaultParams,capabilities:pt(e.capabilities)??e.capabilities,price:pt(e.price)??e.price}}async function et(e,o,i){var c,m;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 s=jo(t),l=((c=s.capabilities)==null?void 0:c.params)??jt(s),{effectiveParams:p,adjustments:d}=Vt(s.defaultParams,i,l),u;if(ft[s.provider])u=await ft[s.provider](s,o,i);else if(s.provider==="openai")u=_o(s.providerModel);else if(s.provider==="xai")u=Po(s.providerModel);else if(s.provider==="anthropic")u=bo(s.providerModel);else if(s.provider==="openrouter")u=Co()(s.providerModel);else if(s.provider==="workersai"||s.provider==="cloudflare"){if(!((m=o==null?void 0:o.env)!=null&&m.AI))throw new Error("Workers AI provider requires sessionEnv.env.AI binding");u=Mo({binding:o.env.AI})(s.providerModel)}else u={provider:s.provider,providerModel:s.providerModel};let a=Ht(s);return a.kind==="tag"&&u&&typeof u=="object"&&"specificationVersion"in u&&(u=Do({model:u,middleware:ko({tagName:a.tagName??"think",startWithReasoning:a.startWithReasoning??!1})})),{provider:s.provider,modelHandle:u,entry:s,effectiveParams:p,paramAdjustments:d.length>0?d:void 0,reasoning:a}}function De(e,o){ft[e]=o}async function mt(e,o,i,t,s,l,p){var r,h,f,g,w,x,N;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let d=String(((r=o==null?void 0:o.data)==null?void 0:r.input_variable)||"user_input").trim(),u;try{let R=J(d,{context:i.context??{},results:i.results??{},nodes:((f=(h=i.flowData)==null?void 0:h.state)==null?void 0:f.nodes)??[],edges:((w=(g=i.flowData)==null?void 0:g.state)==null?void 0:w.edges)??[],currentNodeId:o.id});if(R.missing)throw new Error(`Classifier input "${d}" did not produce a value`);u=R.value}catch(R){throw t==null||t({type:"error:classifier",content:String(R)}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(R)}}),R}let a=Array.isArray((x=o==null?void 0:o.data)==null?void 0:x.items)?o.data.items:[];if(a.length===0){t==null||t({type:"error:classifier",content:"ClassifierNode has no items to classify."});return}let c=String((N=a[a.length-1])==null?void 0:N.id);if(!u||String(u).trim().length===0){t==null||t({type:"warning:classifier",content:"No input for classification \u2014 falling back to last item."}),s==null||s(o.id,{classification:c}),i.context=i.context||{},i.context.classified_id=c,l==null||l(i);return}let n=`You are a precise classifier. Given a short user message, identify the category that best matches from the provided list.
|
|
2
|
+
If the message is ambiguous or none clearly matches, choose the LAST category in the list.
|
|
3
|
+
|
|
4
|
+
Categories:
|
|
5
|
+
${a.map(R=>{let _=R.keywords??R["keywords/topics"]??"",F=Array.isArray(_)?_.join(", "):String(_||"");return`- id: ${R.id}
|
|
6
|
+
label: ${R.label}
|
|
7
|
+
keywords/topics: ${F}`}).join(`
|
|
8
|
+
`)}
|
|
9
|
+
`,y=`User message:
|
|
10
|
+
"""${String(u).trim()}"""
|
|
11
|
+
|
|
12
|
+
Select the best matching category id.`;try{let R=Date.now(),_=a.map(D=>String(D.id)),F="gpt_4_1_mini",P=await et(F,e);if(!P)throw new Error(`Model '${F}' not found in registry`);let{modelHandle:U,effectiveParams:O}=P,T=await Uo({model:U,messages:[{role:"system",content:n},{role:"user",content:y}],schema:oo.object({classification:oo.enum(_).describe("The id of the best matching category")}),temperature:O.temperature??0}),b=Date.now()-R,M=T.object.classification;p==null||p({type:"class_telemetry",payload:{nodeId:o.id,totalLatency:b,model:T.response.modelId,usage:T.usage,options:_}}),p==null||p({type:"class_result",payload:{result:T}}),s==null||s(o.id,{classification:M}),i.context=i.context||{},i.context.classified_id=M,l==null||l(i),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}catch(R){throw t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(R)}}),R}}import{stepCountIs as Wo,streamText as Jo}from"ai";import{nanoid as Xo}from"nanoid";import"zod";function eo(e,o){var d,u,a,c,m;let i=((d=e.data)==null?void 0:d.attachments)??[];if(!Array.isArray(i))throw new V("INVALID_EXPRESSION",`Node ${e.id} attachments must be an array`);let t=((a=(u=o.flowData)==null?void 0:u.state)==null?void 0:a.nodes)??[],s=((m=(c=o.flowData)==null?void 0:c.state)==null?void 0:m.edges)??[],l=Y(t,s,e.id),p="";for(let n of i){if(typeof n!="string")throw new V("INVALID_EXPRESSION",`Node ${e.id} has an invalid attachment reference`);let y=l.find(h=>h.ref===n);if(!y)throw new V("OUT_OF_SCOPE",`Attachment "${n}" is not in this node's connection scope`);if(y.type!=="file"&&y.type!=="image")throw new V("UNKNOWN_OUTPUT",`Attachment "${n}" is not an image or file output`);if(y.type!=="file")continue;let r=J(n,{context:o.context??{},results:o.results??{},nodes:t,edges:s,currentNodeId:e.id});if(r.missing)throw new V(r.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Attachment "${n}" did not produce a value`);if(typeof r.value!="string")throw new V("PATH_NOT_FOUND",`Attachment "${n}" must resolve to file text`);r.value.trim()&&(p+=(p?`
|
|
13
|
+
|
|
14
|
+
`:"")+r.value)}return p}function Vo(e,o){var s,l,p,d,u;let i=((s=e.data)==null?void 0:s.attachments)??[];if(!Array.isArray(i))throw new V("INVALID_EXPRESSION",`Node ${e.id} attachments must be an array`);let t=Y(((p=(l=o.flowData)==null?void 0:l.state)==null?void 0:p.nodes)??[],((u=(d=o.flowData)==null?void 0:d.state)==null?void 0:u.edges)??[],e.id);return i.map(a=>{if(typeof a!="string")throw new V("INVALID_EXPRESSION",`Node ${e.id} has an invalid attachment reference`);let c=t.find(m=>m.ref===a);if(!c)throw new V("OUT_OF_SCOPE",`Attachment "${a}" is not in this node's connection scope`);if(c.type!=="image"&&c.type!=="file")throw new V("UNKNOWN_OUTPUT",`Attachment "${a}" is not a binary output`);return c.type==="image"?a:null}).filter(a=>a!==null)}function io(e,o){var s,l,p,d;let i=[],t={context:o.context??{},results:o.results??{},nodes:((l=(s=o.flowData)==null?void 0:s.state)==null?void 0:l.nodes)??[],edges:((d=(p=o.flowData)==null?void 0:p.state)==null?void 0:d.edges)??[],currentNodeId:e.id};for(let u of Vo(e,o)){let a=J(u,t);if(a.missing)throw new V(a.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Attachment "${u}" did not produce a value`);if(!Array.isArray(a.value))throw new V("PATH_NOT_FOUND",`Attachment "${u}" must resolve to an image array`);i.push(...a.value)}return i}var B=(e,o,i)=>{e.send(o+"::"+i)};var Lo=Q({"../tools/composioDirectTool.ts":()=>import("./composioDirectTool-H3GSCIPY.js"),"../tools/composioTool.ts":()=>import("./composioTool-5LFWUQ7F.js"),"../tools/convertTempMessure.ts":()=>import("./convertTempMessure-5CAGRLBY.js"),"../tools/httpTool.ts":()=>import("./httpTool-2BU6JAAK.js"),"../tools/skillTool.ts":()=>import("./skillTool-AIOXPTAJ.js"),"../tools/tempTool.ts":()=>import("./tempTool-2RXAF56M.js"),"../tools/twitter.ts":()=>import("./twitter-OMDEG7T2.js"),"../tools/vectorize.ts":()=>import("./vectorize-CDB26DMD.js")});var Ho=Q({});async function qo(e,o,i,t){var m;let s=Array.isArray((m=i==null?void 0:i.data)==null?void 0:m.tools)?i.data.tools:[];if(s.length===0)return{};let l={},p=n=>{var x,N;let y=typeof(n==null?void 0:n.description)=="string"?n.description:"",r=n==null?void 0:n.inputSchema,h;try{let R=(r==null?void 0:r.shape)??(typeof((x=r==null?void 0:r._def)==null?void 0:x.shape)=="function"?r._def.shape():(N=r==null?void 0:r._def)==null?void 0:N.shape);R&&typeof R=="object"&&(h=R)}catch{}let f=h?Object.keys(h):[],g=y?`description="${y.length>120?y.slice(0,120)+"\u2026":y}"`:"description=(none)",w=f.length?`inputSchema={${f.join(", ")}}`:"inputSchema=(none)";return`${g} ${w}`},d=(()=>{let n=[],y=[],r=[],h=[];for(let g=0;g<s.length;g++){let w=s[g];!w||typeof w!="object"||typeof w.id!="string"?h.push(g):w.kind==="builtin"?n.push(w.id):w.kind==="skill"?r.push(w.id):w.kind==="http"||w.kind==="mcp"||w.kind==="composio"?y.push(w.id):h.push(g)}let f=[];return n.length&&f.push(`builtin[${n.join(", ")}]`),y.length&&f.push(`custom[${y.join(", ")}]`),r.length&&f.push(`skill[${r.join(", ")}]`),h.length&&f.push(`invalid@[${h.join(", ")}]`),f.join(" ")||"(none)"})();console.log(`[tools] node ${i.id} requested (${s.length}): ${d}`);let u=!1,a=async()=>{if(u&&e.toolDefs)return e.toolDefs;if(!e.env)return e.toolDefs=e.toolDefs||{},u=!0,e.toolDefs;try{let n=await v(e.env),y={};for(let r of n)r&&r.id&&(y[r.id]=r);e.toolDefs=y}catch(n){t==null||t({type:"error:llmNodeRunner",content:`Failed to load custom tool defs: ${String(n)}`}),e.toolDefs=e.toolDefs||{}}return u=!0,e.toolDefs},c=[];for(let n=0;n<s.length;n++){let y=s[n];if(!y||typeof y!="object"||typeof y.id!="string"||y.kind!=="builtin"&&y.kind!=="http"&&y.kind!=="mcp"&&y.kind!=="composio"&&y.kind!=="skill"){t==null||t({type:"error:llmNodeRunner",content:`Invalid tool descriptor at index ${n}: expected { kind: 'http'|'mcp'|'composio'|'builtin'|'skill', id: string, params?: any }`});continue}let r=y;if(r.kind!=="builtin"){let f=(await a())[r.id];if(!f){console.error(`[tools] \u2717 custom '${r.id}': not found for tenant`),t==null||t({type:"error:llmNodeRunner",content:`custom tool '${r.id}' not found for this tenant`});continue}if(r.kind==="composio"){try{let w=await zt(f,e,o,t),x=Object.keys(w);for(let[N,R]of Object.entries(w))l[N]=R;console.log(`[tools] \u2713 composio '${r.id}' \u2192 ${x.length} tool(s)`)}catch(w){console.error(`[tools] \u2717 composio '${r.id}': ${String(w)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading composio tool '${r.id}': ${String(w)}`})}continue}if(r.kind==="skill"){if(f.kind!=="skill"){console.error(`[tools] \u2717 skill '${r.id}': row is of kind '${f.kind}', not 'skill'`),t==null||t({type:"error:llmNodeRunner",content:`tool '${r.id}' is not a skill`});continue}let w=f.name;if(l[w]){t==null||t({type:"warn:llmNodeRunner",content:`tool name collision on '${w}' \u2014 builtin/other already registered, skipping skill '${r.id}'`});continue}try{l[w]=Kt(f,e,o,t),c.push(f);let x=typeof f.execution=="string"?JSON.parse(f.execution):f.execution||{},N=Array.isArray(x.references)?x.references.map(R=>R==null?void 0:R.name):[];console.log(`[tools] \u2713 skill '${r.id}' \u2192 '${w}' (refs: ${N.join(", ")||"none"})`),t==null||t({type:"info:skill:registered",content:{skill:w,refCount:N.length,refs:N}})}catch(x){console.error(`[tools] \u2717 skill '${r.id}': ${String(x)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading skill tool '${r.id}': ${String(x)}`})}continue}let g=f.name;if(l[g]){t==null||t({type:"warn:llmNodeRunner",content:`tool name collision on '${g}' \u2014 builtin already registered, skipping custom tool '${r.id}'`});continue}try{let w=tt(f,e,o,t);l[g]=w,console.log(`[tools] \u2713 custom '${r.id}' \u2192 '${g}'`),console.log(`[tools] ${p(l[g])}`)}catch(w){console.error(`[tools] \u2717 custom '${r.id}': ${String(w)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading custom tool '${r.id}': ${String(w)}`})}continue}if(!qt[r.id]){console.error(`[tools] \u2717 builtin '${r.id}': not in registry`),t==null||t({type:"error:llmNodeRunner",content:`Tool '${r.id}' not found in registry`});continue}try{let h;try{h=await Lo(`../tools/${r.id}.ts`)}catch{h=await Ho(`../tools/${r.id}.js`)}let f;if(h[r.id])f=h[r.id];else if(h.default)f=h.default;else if(h.create)f=h.create;else{let F=Object.values(h);F.length>0&&(f=F[0])}if(!f){t==null||t({type:"error:llmNodeRunner",content:`No factory export found for tool '${r.id}'`});continue}let g,w,x={};if(r.params&&typeof r.params=="object"){if(typeof r.params.description=="string"?g=r.params.description:r.params.description!==void 0&&(t==null||t({type:"error:llmNodeRunner",content:`Invalid description for tool '${r.id}' \u2014 must be a string`})),r.params.inputSchema!==void 0){let F=r.params.inputSchema;typeof F=="object"&&(typeof F.safeParse=="function"||F._def)?w=F:typeof F=="object"&&F!==null&&F.type==="object"&&F.properties?(w=Ct(F),w||t==null||t({type:"error:llmNodeRunner",content:`Invalid inputSchema for tool '${r.id}' \u2014 must be a Zod schema or JSON Schema object`})):t==null||t({type:"error:llmNodeRunner",content:`Invalid inputSchema for tool '${r.id}' \u2014 must be a Zod schema or JSON Schema object`})}r.params.defaults!==void 0?typeof r.params.defaults=="object"&&r.params.defaults!==null&&!Array.isArray(r.params.defaults)?x=r.params.defaults:(t==null||t({type:"error:llmNodeRunner",content:`Invalid defaults for tool '${r.id}' \u2014 must be an object`}),x={}):r.params.source!==void 0||r.params.target!==void 0?(t==null||t({type:"error:llmNodeRunner",content:`Invalid params for tool '${r.id}' \u2014 legacy top-level source/target not supported; use params.defaults instead`}),x={}):x={}}let N=f(e,o,x,t);g&&N&&typeof N=="object"&&(N.description=g),w&&N&&typeof N=="object"&&(N.inputSchema=w),l[r.id]=N;let R=[];g&&R.push("description"),w&&R.push("inputSchema"),Object.keys(x).length&&R.push(`defaults(${Object.keys(x).join(",")})`);let _=R.length?` [overrides: ${R.join(", ")}]`:"";console.log(`[tools] \u2713 builtin '${r.id}'${_}`),console.log(`[tools] ${p(N)}`)}catch(h){console.error(`[tools] \u2717 builtin '${r.id}': ${String(h)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading tool '${r.id}': ${String(h)}`});continue}}if(c.length>0)if(l.readSkillRef)t==null||t({type:"warn:llmNodeRunner",content:"tool name collision on 'readSkillRef' \u2014 builtin/other already registered, skipping readSkillRef tool"});else try{l.readSkillRef=Bt(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(n=>n.name)}})}catch(n){console.error(`[tools] \u2717 failed to load readSkillRef tool: ${String(n)}`)}return l}async function yt(e,o,i,t,s,l,p){var F,P,U,O;`${o.id}`,t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let d=!1;try{let T=(F=i.flowData)==null?void 0:F.state;if(T&&T.edges&&T.nodes){let b=T.edges.filter(M=>M.source===o.id);if(b.length>0){let M=T.nodes.find(D=>D.id===b[0].target);M&&M.type==="answerNode"&&(d=!0)}}}catch(T){console.error("Error determining next node for streaming:",T)}let u=z(o.data.template,o,i,t,{sessionEnv:e});(!u||!u.trim())&&(u="Answer straight forward to the user, dont offer any other option to continue");let a=u,c=z(o.data.user_template||"",o,i,t,{sessionEnv:e}),m=T=>T&&Object.fromEntries(Object.keys(T).map(b=>[b,"[redacted]"])),n=e!=null&&e.secrets||e!=null&&e.userAuth?{...e,secrets:m(e.secrets),userAuth:m(e.userAuth)}:e,y=z(o.data.template,o,i,void 0,{sessionEnv:n})||a,r=z(o.data.user_template||"",o,i,void 0,{sessionEnv:n});t==null||t({type:`info:llmNodeRunner:${o.id}`,content:y}),t==null||t({type:`info:llmNodeRunner:${o.id}`,content:r});let h=(P=o==null?void 0:o.data)==null?void 0:P.window_size,f=Number(h);(!Number.isInteger(f)||f<=0)&&(f=5);let g=io(o,i),w=eo(o,i);t==null||t({type:"info:llmNodeRunner:attachments",content:{nodeId:o.id,refs:Array.isArray((U=o.data)==null?void 0:U.attachments)?o.data.attachments:[],images:g.length,documents:w?1:0}});let N=(await((O=e.getMessages)==null?void 0:O.call(e))??[]).slice(-f),R=N.filter(T=>T&&typeof T.role=="string"&&typeof T.content=="string");R.length!==N.length&&console.warn(`Filtered ${N.length-R.length} invalid messages from history`);let _=Ko(R,c,g,w);await zo(u,_,e.conn,t,o,d,s,i,l,e,p)}async function zo(e,o,i,t,s,l,p,d,u,a,c){var n;let m=Date.now();if(!((n=a.env)!=null&&n.AI))throw new Error("AI binding is required for LLM node");return new Promise(async(y,r)=>{var b,M,D,$,L,C;let h,f={},g,w="none",x=!1,N,R=!1,_=!1,F=0,P=0,U=(b=s==null?void 0:s.data)==null?void 0:b.sendReasoning,O=U!==!1;try{let j=(M=s==null?void 0:s.data)==null?void 0:M.model,H=Array.isArray(j)?j[0]:j||"gpt_5_nano",A=Ut(s==null?void 0:s.data),k=await et(H,a,A);if(!k)throw new Error(`Model '${H}' not found in registry`);h=k.modelHandle,f=k.effectiveParams||{},w=k.reasoning.kind;let I=Jt(k.reasoning,(D=s==null?void 0:s.data)==null?void 0:D.reasoningEffort);x=O&&Wt(k.reasoning);let X=typeof(($=s==null?void 0:s.data)==null?void 0:$.reasoningMaxTokens)=="number"?s.data.reasoningMaxTokens:void 0;g=Xt(k.provider,{effort:I,exposeReasoning:x,maxTokens:X}),I&&(t==null||t({type:"info:llmNodeRunner:reasoningEffort",content:I})),console.log(`[reasoning] ${JSON.stringify({model:H,provider:k.provider,capability:k.reasoning,requestedEffort:((L=s==null?void 0:s.data)==null?void 0:L.reasoningEffort)??null,resolvedEffort:I??null,sendReasoning:O,exposeReasoning:x,providerOptions:g??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:H}),t==null||t({type:"info:llmNodeRunner:generationParams",content:{...(C=s==null?void 0:s.data)!=null&&C.generationPreset?{preset:s.data.generationPreset}:{},...f,...w!=="none"?{reasoning:w,configuredSendReasoning:U,sendReasoning:O,exposeReasoning:x,...I?{effort:I}:{}}:{}}})}catch(j){throw t==null||t({type:"error:llmNodeRunner",content:`Model error: ${String(j)}`}),j}let T=await qo(a,d,s,t);console.log(`[tools] node ${s.id} loaded ${Object.keys(T).length}: ${Object.keys(T).join(", ")||"(none)"}`),t==null||t({type:"info:llmNodeRunner:toolsLoaded",content:{nodeId:s.id,tools:Object.keys(T)}});try{let j=Jo({model:h,system:e,messages:o,stopWhen:(()=>{var W;let k=!!T.readSkillRef?10:5,I=Number(((W=s.data)==null?void 0:W.max_steps)??k),X=Number.isFinite(I)?Math.max(1,Math.min(30,I)):k;return Wo(X)})(),...Lt(f),...g?{providerOptions:g}:{},tools:T,onFinish:async A=>{var ht,Nt;let k=A.text||"",I=A.reasoningText??((ht=A.reasoning)==null?void 0:ht.text)??"";if(console.log(`[reasoning] done: deltas=${F} chars=${P} result.reasoningText=${I.length} finishReason=${A.finishReason??"n/a"} reasoningTokens=${((Nt=A.usage)==null?void 0:Nt.reasoningTokens)??"n/a"}`),O&&x&&!R&&I&&i){R=!0;try{B(i,K.SERVER_REASONING_STREAM,I)}catch(no){console.warn("Failed to send finished reasoning over connection",no)}}let X={id:Xo(),role:"assistant",type:"text",content:k,ts:Date.now()};l&&(a.setMessages?await a.setMessages(X):t==null||t({type:"error:llmNodeRunner",content:"setMessages callback missing"})),i&&O&&R&&!_&&(_=!0,B(i,K.SERVER_REASONING_STREAM_COMPLETE,JSON.stringify({}))),l&&i&&B(i,K.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({})),p==null||p((s==null?void 0:s.id)||"llm_result",k),t==null||t({type:"info:llmNodeRunner:onFinish",content:JSON.stringify(A)});let W=Date.now()-m,ro=N?N-m:void 0;c==null||c({type:"llm_telemetry",payload:{nodeId:s.id,totalLatency:W,timeToFirstToken:ro,model:A.response.modelId,usage:A.usage}}),c==null||c({type:"llm_result",payload:{result:A}})},onStepFinish:async A=>{let k=(I,X=200)=>{let W=typeof I=="string"?I:JSON.stringify(I);return W?W.length>X?`${W.slice(0,X)}\u2026(+${W.length-X})`:W:""};if(A.toolCalls&&A.toolCalls.length>0){for(let I of A.toolCalls)console.log(`[tools] \u2192 ${I.toolName}(${k(I.args??I.input)})`);t==null||t({type:`info:llmNodeRunner:toolCalls:${s.id}`,content:JSON.stringify(A.toolCalls)})}if(A.toolResults&&A.toolResults.length>0){for(let I of A.toolResults)console.log(`[tools] \u2190 ${I.toolName} \u2192 ${k(I.result??I.output)}`);t==null||t({type:`info:llmNodeRunner:toolResults:${s.id}`,content:JSON.stringify(A.toolResults)})}},experimental_onToolCallStart:A=>{var k;t==null||t({type:"tool:execution",content:{nodeId:s.id,toolName:(k=A==null?void 0:A.toolCall)==null?void 0:k.toolName,status:"start"}})},experimental_onToolCallFinish:A=>{var k,I;t==null||t({type:"tool:execution",content:{nodeId:s.id,toolName:(k=A==null?void 0:A.toolCall)==null?void 0:k.toolName,status:((I=A==null?void 0:A.toolOutput)==null?void 0:I.type)==="tool-error"?"error":"success"}})},onError:A=>{t==null||t({type:"error:llmNodeRunner",content:"Execution error"}),r(A)},onChunk:A=>{if(A.chunk.type==="reasoning-delta"){let I=A.chunk.text??A.chunk.delta??"";if(I&&(R=!0,F+=1,P+=I.length,F===1&&console.log("[reasoning] \u2713 first reasoning-delta received")),O&&i&&I)try{B(i,K.SERVER_REASONING_STREAM,I)}catch(X){console.warn("Failed to send reasoning chunk over connection",X)}return}if(A.chunk.type==="text-delta"){if(N||(N=Date.now()),i&&O&&R&&!_){_=!0;try{B(i,K.SERVER_REASONING_STREAM_COMPLETE,JSON.stringify({}))}catch(I){console.warn("Failed to send reasoning complete over connection",I)}}return}c==null||c({type:A.chunk.type,payload:{nodeId:s.id,chunk:A.chunk}});let k=`llm_chunk:${A.chunk.type}`;t==null||t({type:k,content:{...A}})}}),H=async()=>{let A="";for await(let k of j.fullStream)if(k.type==="text-delta"){if(A+=k.text,l&&i)try{B(i,K.SERVER_TEXT_STREAM,k.text)}catch(I){console.warn("Failed to send chunk over connection",I)}}else if(k.type==="finish-step"&&k.finishReason==="tool-calls"){if(l&&i&&A.trim())try{B(i,K.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({}))}catch(I){console.warn("Failed to flush text segment over connection",I)}A=""}};await Promise.all([j,H()]),y(),t==null||t({type:"node:execution",content:{nodeId:s.id,nodeType:s.type,status:"success"}})}catch(j){t==null||t({type:"node:execution",content:{nodeId:s.id,nodeType:s.type,status:"error",error:String(j)}}),r(j)}})}function Ko(e,o,i,t){let s=!!(i&&i.length>0),l=!!t,p=s||l,u=e.length>0&&e[e.length-1].role==="user"?e[e.length-1]:void 0,a=c=>{let m=[],n="";if(l&&(n+=`[Attached files]
|
|
15
|
+
${t}
|
|
16
|
+
[End of attached files]
|
|
17
|
+
|
|
18
|
+
`),c&&(n+=c),n&&m.push({type:"text",text:n}),s)for(let y of i)m.push({type:"image",image:y.data,mimeType:y.mimeType});return m};return o&&u&&u.content===o?[...e.slice(0,-1).map(m=>({role:m.role,content:m.content})),{role:"user",content:a(o)}]:o?[...e.map(c=>({role:c.role,content:c.content})),{role:"user",content:a(o)}]:p&&u?[...e.slice(0,-1).map(m=>({role:m.role,content:m.content})),{role:"user",content:a(u.content)}]:e.map(c=>({role:c.role,content:c.content}))}async function gt(e,o,i,t,s,l,p){var c,m,n,y,r,h,f;console.log(`**** MEMO Node id: ${o.id} ****`),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let d="",u=!1,a=Date.now();try{t==null||t({type:"info:memoNodeRunner",content:"Starting memo node execution"});let g=String(((c=o.data)==null?void 0:c.query_key)||"user_input"),w=J(g,{context:i.context??{},results:i.results??{},nodes:((n=(m=i.flowData)==null?void 0:m.state)==null?void 0:n.nodes)??[],edges:((r=(y=i.flowData)==null?void 0:y.state)==null?void 0:r.edges)??[],currentNodeId:o.id});if(w.missing)throw new Error(`Memo query "${g}" did not produce a value`);if(!e.env||!e.ctx){t==null||t({type:"error:memoNodeRunner",content:"Missing env or ctx"}),s==null||s(o.id,d);return}if(!o.data.rag_id){t==null||t({type:"error:memoNodeRunner",content:"Missing rag_id"}),s==null||s(o.id,d);return}let x=String(w.value??"");t==null||t({type:"info:memoNodeRunner",content:`Query text: ${x}`}),t==null||t({type:"info:memoNodeRunner",content:"Generating embedding for query"});let N=await Tt(e,x,!0);t==null||t({type:"info:memoNodeRunner",content:`Embedding generated successfully, length: ${N.data[0].length}`});let R=Array.isArray(o.data.rag_id)?o.data.rag_id:[o.data.rag_id],_=[];for(let O of R){t==null||t({type:"info:memoNodeRunner",content:`Executing RAG query with namespace: ${O}`});let T=await e.env[`VDB_${(h=i.flowData)==null?void 0:h.tenant}_1024`].query(N.data[0],{namespace:O,topK:o.data.topk,returnMetadata:"all"});t==null||t({type:"info:memoNodeRunner",content:`RAG query completed for namespace ${O}, matches: ${((f=T.matches)==null?void 0:f.length)||0}`}),Array.isArray(T.matches)&&_.push(...T.matches)}let F=Date.now()-a;d=_.map(O=>{var T;return(T=O.metadata)==null?void 0:T.value}).filter(O=>typeof O=="string").join(`
|
|
19
|
+
|
|
20
|
+
`),p==null||p({type:"memo_search",payload:{nodeId:o.id,searchLatencyMs:F,retrievedContext:d}}),t==null||t({type:"info:memoNodeRunner",content:`Context retrieval complete, length: ${d.length}, preview: ${d.substring(0,200)}...`}),t==null||t({type:"info:memoNodeRunner",content:"Memo node execution completed successfully"}),u=!0}catch(g){throw console.error("Error processing MemoNode:",g),t==null||t({type:"error:memoNodeRunner",content:`Memo node execution failed: ${g}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(g)}}),g}finally{u&&(s==null||s(o.id,d),t==null||t({type:"info:memoNodeRunner",content:`onResult called with context length: ${d.length}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}}))}}async function wt(e,o,i,t,s,l,p){var c,m,n,y,r,h,f,g;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 d=((m=o.data)==null?void 0:m.allow_images)!==!1,u=((n=o.data)==null?void 0:n.allow_documents)!==!1;!d&&(i!=null&&i.context)&&(i.context.user_images=[],l==null||l({...i})),!u&&(i!=null&&i.context)&&(i.context.files="",l==null||l({...i}));let a={};for(let w of E(o.data))a[w.name]=(y=i==null?void 0:i.context)==null?void 0:y[w.name];s==null||s(o.id,{...a,user_input:(r=i==null?void 0:i.context)==null?void 0:r.user_input,images:d?(h=i==null?void 0:i.context)==null?void 0:h.user_images:[],files:u?(f=i==null?void 0:i.context)==null?void 0:f.files:"",memory:((g=i==null?void 0:i.context)==null?void 0:g.memory)??""}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}function Ui(e,o,i){let t=o;async function s(){var a;if(await((a=i==null?void 0:i.shouldStop)==null?void 0:a.call(i)))throw new it}async function l(a){let c=a;for(t.executedNodes=t.executedNodes||[],t.context=t.context||{},t.results=t.results||{};c&&c.id;)await s(),await p(c),await s(),c=Yo(c,t.flowData,t)}async function p(a){var r,h;let c=u[a.type];if(!c){(r=i==null?void 0:i.onError)==null||r.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 m=f=>{var g;return(g=i==null?void 0:i.onServerEvent)==null?void 0:g.call(i,{...f,ts:Date.now()})},n=f=>{var g,w;if((g=i==null?void 0:i.onTelemetry)==null||g.call(i,f),f.type==="llm_telemetry"||f.type==="class_telemetry"||f.type==="memory_update"){let x=(w=f.payload)==null?void 0:w.usage;x&&(t.tokenUsage=t.tokenUsage||{promptTokens:0,completionTokens:0,totalTokens:0},t.tokenUsage.promptTokens+=x.promptTokens||0,t.tokenUsage.completionTokens+=x.completionTokens||0,t.tokenUsage.totalTokens+=x.totalTokens||0)}};return await c(e,a,t,m,(f,g)=>{t.results[f]=g},i==null?void 0:i.onChangeState,n)}let d=async a=>{var y,r,h,f,g,w,x;let c=Date.now(),m="completed",n;try{await s();let N=typeof a=="string"?$t(a):a,R=(N==null?void 0:N.text)||"",_=(N==null?void 0:N.images)||[],F=(N==null?void 0:N.documents)||[],P=await Gt(F,e.env),U=P.length>0?P.map(b=>`--- file: ${b.name} ---
|
|
21
|
+
${b.text}`).join(`
|
|
22
|
+
|
|
23
|
+
`):"";t.context={user_input:R,user_images:_,files:U},t.tokenUsage={promptTokens:0,completionTokens:0,totalTokens:0},t.executedNodes=[],(y=i==null?void 0:i.onServerEvent)==null||y.call(i,{type:"agent:start",content:"Execution started",timestamp:Date.now()});let{startNode:O,error:T}=Bo(t.flowData);if(!O)m="failed",n=T||"Flow Format Error",(r=i==null?void 0:i.onError)==null||r.call(i,n);else{let b=E(O.data),{values:M,errors:D}=At(b,N==null?void 0:N.inputs);if(D.length>0)return m="failed",n=`Invalid flow inputs: ${D.join("; ")}`,(h=i==null?void 0:i.onError)==null||h.call(i,n),{status:m,error:n};if(t.context={...t.context,inputs:M,...M},t.context.user_input||(t.context.user_input=R),Ot(O.data)){let $=Ft(_t(O.data));t.context.memory=It(e.agentMemory||"",$).content}else t.context.memory="";await l(O),(f=i==null?void 0:i.onServerEvent)==null||f.call(i,{type:"agent:telemetry",content:{durationMs:Date.now()-c,tokenUsage:t.tokenUsage},timestamp:Date.now()})}}catch(N){N instanceof it?(m="stopped",n=N.message,(g=i==null?void 0:i.onServerEvent)==null||g.call(i,{type:"agent:stopped",content:n,timestamp:Date.now()})):(m="failed",n=N instanceof Error?N.message:"Agent execution failed",(w=i==null?void 0:i.onError)==null||w.call(i,n))}finally{(x=i==null?void 0:i.onServerEvent)==null||x.call(i,{type:"agent:complete",content:{status:m,durationMs:Date.now()-c},timestamp:Date.now()})}return{status:m,error:n}},u={startNode:wt,classifierNode:mt,llmNode:yt,memoNode:gt,answerNode:st,apiNode:at,toolNode:ct,workerNode:ut};return d}var it=class extends Error{constructor(){super("Stopped by user"),this.name="FlowExecutionStoppedError"}};function Bo(e){var c,m;let o=(e==null?void 0:e.state)??e;if(!o||!o.nodes||!o.edges||o.edges.length===0)return{error:"Flow is missing state, nodes, or edges."};if(o.schemaVersion!==3)return{error:"Flow uses an unsupported variable schema. Recreate it in Agent Design 3.0."};for(let n of o.nodes){if(((c=n.data)==null?void 0:c.varMapping)!==void 0)return{error:`Flow uses removed varMapping on node ${n.id}.`};let y=kt(n);if(y.length>0)return{error:y[0]}}let i=o.nodes.filter(n=>n.type==="startNode");if(i.length!==1)return{error:`Flow must include exactly one START node, found ${i.length}.`};let t=i[0],s=o.nodes.filter(n=>n.type==="answerNode");if(s.length===0)return{error:"Flow must include at least one ANSWER node."};let l=new Map;for(let n of o.edges)l.has(n.source)||l.set(n.source,[]),l.get(n.source).push(n.target);let p=new Map;for(let n of o.edges)p.has(n.target)||p.set(n.target,[]),p.get(n.target).push(n.source);let d=so(t.id,l),u=new Set;for(let n of s){let y=so(n.id,p);for(let r of y)u.add(r)}let a=[];for(let n of d)if(!u.has(n)){let y=o.nodes.find(r=>r.id===n);if(y){let r=((m=y.data)==null?void 0:m.label)||"";a.push(`${n}(${r},${y.type})`)}}return a.length>0?{error:`The following nodes reachable from START do not lead to any ANSWER node: ${a.join(", ")}`}:{startNode:t}}function so(e,o){let i=new Set,t=[e];for(i.add(e);t.length>0;){let s=t.shift(),l=o.get(s)||[];for(let p of l)i.has(p)||(i.add(p),t.push(p))}return i}function Go(e,o){var i;return((i=e.state)==null?void 0:i.nodes.find(t=>t.id===o))||null}function Yo(e,o,i){var d;let t=o==null?void 0:o.state;if(!t)return null;let s=t.edges.filter(u=>u.source===e.id);if(s.length===0)return null;let l=s[0].target;if(e.type==="classifierNode"&&((d=i==null?void 0:i.context)!=null&&d.classified_id)){let u=i.context.classified_id,a=s.find(c=>c.sourceHandle===`source-${u}`);a?l=a.target:console.log(`No matching edge, falling back to first: ${l}`)}return Go(o,l)}export{B as a,lo as b,St as c,ge as d,jo as e,et as f,De as g,Ui as h,it as i};
|
|
@@ -0,0 +1,3 @@
|
|
|
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))(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=k.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 T(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],c=T(i)?s.default:i;if(T(c)){s.required&&r.push(`"${s.label||s.name}" is required`);continue}let{value:a,error:u}=P(s,c);u?r.push(u):n[s.name]=a}return{values:n,errors:r}}function $(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}: ${$(t[i.name])}`),s=(n==null?void 0:n.trim())||"Automated execution";return o.length>0?`${s}
|
|
2
|
+
${o.join(`
|
|
3
|
+
`)}`:s}var k=["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":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"}];case"memoNode":return[{name:"context",path:"",type:"string"}];default:return[]}}function R(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),...R(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),...R(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 U(e,t,n){let r=x(t,n),o=[],s=new Set;for(let i of r){let c=e.find(a=>a.id===i);if(c)for(let a of L(c,d(c))){let u=c.type==="startNode"&&a.source==="default"?a.name:`${c.id}.${a.name}`;s.has(u)||(s.add(u),o.push({...a,ref:u,nodeId:c.id}))}}return o}function ae(e,t,n){return new Set(U(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 j(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||!(j(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 M=new Set(["__proto__","prototype","constructor"]),y="\0__ORA_OB__\0",h="\0__ORA_CB__\0",f=class extends Error{constructor(n,r){super(r);this.code=n;this.name="VariableResolutionError"}code};function W(e){for(let t of e.split("."))if(M.has(t))throw new f("UNSAFE_PATH",`Unsafe variable path segment "${t}"`)}function w(e,t){if(!t)return e;W(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 V(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]=V(t,r,e.type);return n}function q(e,t){var r,o,s,i,c,a,u,p;if(Object.prototype.hasOwnProperty.call(t.refOverrides??{},e))return{value:t.refOverrides[e]};let n=t.nodes.find(l=>l.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"&&((c=n==null?void 0:n.data)==null?void 0:c.allow_documents)===!0)return{value:(a=t.context)==null?void 0:a.files};if(e==="classified_id")return{value:(u=t.context)==null?void 0:u.classified_id};if(n&&m(n.data).some(l=>l.name===e))return{value:(p=t.context)==null?void 0:p[e]}}function F(e,t){var S;let n=e.trim();if(!n)throw new f("INVALID_EXPRESSION","Variable reference is empty");let r=n.includes(".")?void 0:q(n,t);if(r)return r;if(!n.includes("."))throw new f("UNKNOWN_CONTEXT_REF",`Unknown run-context variable "${n}"`);let o=v(n,t);if(!o)throw new f("OUT_OF_SCOPE",`Variable "${n}" is not in this node's connection scope`);let s=I(n,o.id),[i,...c]=s.split("."),a=d(o).find(A=>A.name===i);if(!a)throw new f("UNKNOWN_OUTPUT",`Node "${o.id}" does not expose output "${i}"`);if(Object.prototype.hasOwnProperty.call(t.refOverrides??{},n))return{value:t.refOverrides[n]};let u=(S=t.results)==null?void 0:S[o.id];if(u==null)return{value:void 0,missing:"ancestor_not_executed"};let p=V(u,a,o.type),l=c.length>0?w(p,c.join(".")):p;return l==null?{value:void 0,missing:"path_not_found"}:{value:l}}function Ee(e,t){return F(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 f("INVALID_EXPRESSION","Template defaults must be quoted string literals");if(e[0]==='"')try{return JSON.parse(e)}catch{throw new f("INVALID_EXPRESSION","Invalid double-quoted template default")}return e.slice(1,-1).replace(/\\'/g,"'").replace(/\\\\/g,"\\")}function b(e){let{ref:t,rawDefault:n}=K(e.trim());if(!t)throw new f("INVALID_EXPRESSION","Template expression is missing a variable reference");return{ref:t,...n===void 0?{}:{defaultValue:B(n)}}}function _e(e){let t=e.replace(/\\\{\{/g,y).replace(/\\\}\}/g,h),n=[],r=/\{\{\s*([^}]+?)\s*\}\}/g;for(let o of t.matchAll(r))n.push(b(o[1]).ref);return n}function z(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ye(e,t,n){let r=z(t);return e.replace(new RegExp(`(\\{\\{\\s*)${r}(?=\\.)`,"g"),`$1${n}`)}function _(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,y).replace(/\\\}\}/g,h),i=/\{\{\s*([^}]+?)\s*\}\}/g;return s=s.replace(i,(c,a)=>{try{let u=b(a);if(u.ref.startsWith("secrets.")){let l=u.ref.slice(8);if(!Object.prototype.hasOwnProperty.call(n.secrets??{},l))throw new f("MISSING_SECRET",`Secret "${l}" is not defined for this tenant`);return _(n.secrets[l],o)}let p=F(u.ref,n);if(p.missing){if(u.defaultValue!==void 0)return _(u.defaultValue,o);let l=p.missing==="ancestor_not_executed"?`Ancestor for variable "${u.ref}" did not execute in this branch`:`Variable path "${u.ref}" did not produce a value`;throw new f(p.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",l)}return _(p.value,o)}catch(u){if(u instanceof f)return H(u,r);throw u}}),s.split(y).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,U as k,ae as l,v as m,I as n,ue as o,j as p,E as q,le as r,f as s,w as t,V as u,Ne as v,F as w,Ee as x,b as y,_e as z,ye as A,he as B};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as u}from"./chunk-YLDLDEUP.js";import{tool as f}from"ai";import{z as i}from"zod";function b(s,d,a){return f({description:"Perform semantic vector search on memo data with optional static parameters. Returns relevant matches with scores and metadata.",inputSchema:i.object({query:i.string().min(1).describe("The search query to vectorize and search for"),topK:i.number().optional().default(5).describe("Number of top results to return (overrides static params if provided)")}),execute:async({query:e,topK:t=3})=>{var c;let r=a==null?void 0:a.namespace;if(!r)return{results:[]};if(`${e}${r}${t}`,!e||typeof e!="string"||e.trim()==="")return{results:[]};try{let n=await u(s,e,!0),m=await s.env[`VDB_${(c=d.flowData)==null?void 0:c.tenant}_1024`].query(n.data[0],{namespace:r,topK:t,returnMetadata:"all"}),p=(Array.isArray(m.matches)?m.matches:[]).map(o=>{var l;return(l=o.metadata)==null?void 0:l.value}).filter(o=>typeof o=="string");return`${e}${r}${t}${p.length}`,{query:e,topK:t,matches:p}}catch(n){return`${e}${r}${t}${n}`,{results:[]}}}})}export{b as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var r={};function e(o){}export{r as a,e as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as N}from"./chunk-J4LJZZ67.js";import{a as J}from"./chunk-V6JSMX5A.js";import{tool as ot}from"ai";import{z as M}from"zod";import{z as p}from"zod";function j(t){if(t&&typeof t=="object"&&!t.type)return p.object({});if(t.type==="object")if(t.properties){let e={},o=t.required||[];for(let[r,n]of Object.entries(t.properties)){let a=j(n),c=n!=null&&typeof n=="object"&&Object.prototype.hasOwnProperty.call(n,"default");e[r]=c?a.default(n.default):o.includes(r)?a:a.optional()}return p.object(e)}else return p.object({});else if(t.type==="array"&&t.items){let e=j(t.items);return p.array(e)}else{if(t.type==="string")return p.string();if(t.type==="number"||t.type==="integer")return p.number();if(t.type==="boolean")return p.boolean()}return p.any()}var W=/\{\{\s*secrets\.[A-Z][A-Z0-9_]*\s*\}\}/,xt=t=>W.test(t),rt=/\{\{\s*auth\.[A-Z][A-Z0-9_]*\s*\}\}/;var E=t=>W.test(t)||rt.test(t),w=t=>{let e=t.indexOf("?");return e===-1?t:`${t.slice(0,e)}?[redacted-query]`};var st=256*1024,it=3e4,ct=/\{\{\s*([^}]+?)\s*\}\}/g,at=t=>{let e=t.toLowerCase();return e.includes("token")||e.includes("secret")||e.includes("key")||e.includes("password")||e.includes("access")||e==="authorization"},ut=t=>{let e={};for(let o in t)e[o]=at(o)?"[REDACTED]":t[o];return e},I=(t,e)=>{let o=t.indexOf(".");if(o===-1)return e[t];let r=t.slice(0,o),n=t.slice(o+1);if(r in e)return N(e[r],n)},H=(t,e,o)=>t&&t.replace(ct,(r,n)=>{let a=String(n).trim();if(a.startsWith("secrets.")){let f=a.slice(8);return Object.prototype.hasOwnProperty.call(o.secrets,f)?o.secrets[f]:r}if(a.startsWith("auth.")){let f=a.slice(5);return Object.prototype.hasOwnProperty.call(o.auth,f)?o.auth[f]:r}let c=I(a,e);return c==null?"":typeof c=="string"?c:JSON.stringify(c)}),dt=/\{\{\s*((?:secrets|auth)\.[^}\s]+)\s*\}\}/g,lt=(...t)=>{let e=new Set;for(let o of t){if(o==null)continue;let r=typeof o=="string"?o:JSON.stringify(o);for(let n of r.matchAll(dt))e.add(n[1])}return[...e]},T=(t,e,o)=>{if(t==null)return t;if(typeof t=="string"){let r=t.match(/^\s*\{\{\s*([^}]+?)\s*\}\}\s*$/);if(r){let n=r[1].trim();if(n.startsWith("secrets.")){let c=n.slice(8);return Object.prototype.hasOwnProperty.call(o.secrets,c)?o.secrets[c]:t}if(n.startsWith("auth.")){let c=n.slice(5);return Object.prototype.hasOwnProperty.call(o.auth,c)?o.auth[c]:t}return I(n,e)}return H(t,e,o)}if(Array.isArray(t))return t.map(r=>T(r,e,o));if(typeof t=="object"){let r={};for(let n in t)r[n]=T(t[n],e,o);return r}return t},ft=(t,e)=>t?e?/^https?:\/\//i.test(e)?e:t.endsWith("/")&&e.startsWith("/")?t+e.slice(1):!t.endsWith("/")&&!e.startsWith("/")?`${t}/${e}`:t+e:t:e||"",pt=(t,e)=>{if(!e)return t;let o=new URL(t);for(let r in e){let n=e[r];n!==void 0&&(Array.isArray(n)?o.searchParams.set(r,n.join(",")):o.searchParams.set(r,String(n)))}return o.toString()},K=t=>{if(!t)return{};let e={};for(let o in t)t[o]!==void 0&&(e[o]=t[o]);return e},yt=t=>{let e={};for(let o in t){let r=t[o];r!=null&&(e[o]=typeof r=="string"?r:String(r))}return e},gt=(t,e,o)=>{if(!(!t||t.type==="none"||!t.value)){if(t.type==="bearer"){e.Authorization=`Bearer ${t.value}`;return}if(t.type==="apiKey"){let r=t.in||"header",n=t.param||t.header||"X-API-Key";r==="query"?o[n]=t.value:e[n]=t.value}}},mt=(t,e)=>{let o=new TextEncoder().encode(t);if(o.byteLength<=e)return{text:t,truncated:!1};let r=o.slice(0,e);return{text:new TextDecoder("utf-8",{fatal:!1}).decode(r),truncated:!0}};function ht(t,e,o,r){var Z;if(t.kind!=="http")throw new Error(`customHttpTool: unsupported kind '${t.kind}' for tool '${t.name}'`);let n=t.execution||{},a=n.actions&&typeof n.actions=="object"?Object.keys(n.actions):[],c=((Z=n.router)==null?void 0:Z.field)||"action",f=t.inputSchema&&typeof t.inputSchema=="object"&&Object.keys(t.inputSchema).length>0?j(t.inputSchema):M.object({});if(a.length>0&&f instanceof M.ZodObject){let m=M.enum(a);f=f.extend({[c]:m})}let G=t.description||t.label||t.name,y=t.output||{},Q=Number.isFinite(y.maxBytes)&&y.maxBytes>0?y.maxBytes:st;return ot({description:G,inputSchema:f,execute:async m=>{var z;let h={secrets:e.secrets??{},auth:e.userAuth??{}},b={input:m??{},...o.context||{}},u=n,i;if(n.actions&&typeof n.actions=="object"){let s=((z=n.router)==null?void 0:z.field)||"action";if(i=m==null?void 0:m[s],!i||!n.actions[i])return{type:"error",error:`unknown action '${i}' for tool '${t.name}'`,natural:`Tool ${t.name} could not run: missing or unknown action.`};u=n.actions[i]}let C=u.url||ft(n.baseUrl,u.path);if(!C)return{type:"error",error:"missing url",natural:`Tool ${t.name} has no URL configured.`};let V=E(C),F=H(C,b,h),X={...n.headers||{},...u.headers||{}},g=yt(K(T(X,b,h))),Y={...n.query||{},...u.query||{}},P=K(T(Y,b,h)),$=(u.method||n.method||"GET").toUpperCase(),k,v=u.body!==void 0||n.body!==void 0;if($!=="GET"&&$!=="HEAD"&&v){let s=u.body!==void 0?u.body:n.body,d=typeof s=="string"?H(s,b,h):T(s,b,h);k=typeof d=="string"?d:JSON.stringify(d),!g["Content-Type"]&&!g["content-type"]&&(g["Content-Type"]="application/json")}let R=u.auth||n.auth,A=R?{...R,value:R.value?H(String(R.value),b,h):R.value}:void 0;gt(A,g,P);let S=pt(F,P),tt=V?w(S):S,U=lt(F,g,P,k,A==null?void 0:A.value);if(U.length>0){let s=U.map(d=>`{{ ${d} }}`).join(", ");return r==null||r({type:`error:tool:${t.name}:credentials`,content:{tool:t.name,action:i,missing:U}}),{type:"error",error:`unresolved credentials: ${s}`,natural:`Tool ${t.name} could not run because ${s} has no value in this execution. Connect the credential or use a tenant secret so unattended runs can resolve it.`}}let et=Math.min(Number.isFinite(u.timeoutMs)&&u.timeoutMs>0?u.timeoutMs:Number.isFinite(n.timeoutMs)&&n.timeoutMs>0?n.timeoutMs:15e3,it),D={tool:t.name,action:i,stage:"request",url:tt,method:$,headers:ut(g)};JSON.stringify(D),r==null||r({type:`info:tool:${t.name}:request`,content:D});let q=new AbortController,nt=setTimeout(()=>q.abort(),et);try{let s=await fetch(S,{method:$,headers:g,body:k,signal:q.signal}),d=s.headers.get("content-type")||"",O=await s.text(),{text:x,truncated:_}=mt(O,Q),l;if(y.contentType==="text"?l=x:d.includes("application/json")||y.contentType==="json"?(l=J(x),l===null&&x&&(l=x)):l=x,y.jsonPath&&l!==null&&typeof l=="object"&&(l=N(l,y.jsonPath)),!s.ok){let B={tool:t.name,action:i,stage:"http_error",status:s.status};return JSON.stringify(B),r==null||r({type:`error:tool:${t.name}:http`,content:B}),{type:"error",status:s.status,error:`HTTP ${s.status}: ${s.statusText}`,result:l,truncated:_,natural:`${t.name}${i?`:${i}`:""} failed with HTTP ${s.status}.`}}let L={tool:t.name,action:i,stage:"finish",status:s.status,truncated:_};return JSON.stringify(L),r==null||r({type:`info:tool:${t.name}:finish`,content:L}),{type:i||t.name,status:s.status,result:l,truncated:_,natural:`${t.name}${i?`:${i}`:""} completed (HTTP ${s.status}).`}}catch(s){let d=String((s==null?void 0:s.message)??s),O={tool:t.name,action:i,stage:"error",error:d};return JSON.stringify(O),r==null||r({type:`error:tool:${t.name}:execution`,content:O}),{type:"error",error:d,natural:`${t.name}${i?`:${i}`:""} failed: ${d}`}}finally{clearTimeout(nt)}}})}var St=ht;export{xt as a,w as b,j as c,ht as d,St as e};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function I(t,o){let a=await fetch(`${o.HX_CORE_URL}/ora/flow/${t}`,{method:"GET",headers:{Authorization:`${o.HX_API_KEY}`},cache:"no-store"});if(!a.ok)throw new Error("Failed to fetch flow KV");return a.json()}async function K(t,o){let a=await fetch(`${o.HX_CORE_URL}/ora/flow/${t}/state`,{method:"GET",headers:{Authorization:`${o.HX_API_KEY}`},cache:"no-store"});if(!a.ok)throw new Error("Failed to fetch flow state");return a.json()}async function y(t,o){let a=await fetch(`${o.HX_CORE_URL}/ora/vectorize/get`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`${o.HX_API_KEY}`},body:JSON.stringify({hashes:t})});if(!a.ok)throw new Error("Failed to fetch embeddings from cache");return a.json()}async function A(t,o){let a=await fetch(`${o.HX_CORE_URL}/ora/vectorize/put`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`${o.HX_API_KEY}`},body:JSON.stringify({items:t})});if(!a.ok)throw new Error("Failed to store embeddings in cache");return a.json()}var _=async t=>{let o=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Array.from(new Uint8Array(o)).map(a=>a.toString(16).padStart(2,"0")).join("")},T=async(t,o,a=!1)=>{var b,u,p,w;let l=Array.isArray(o)?o:[o],d=await Promise.all(l.map(e=>_(e))),g=!!((b=t==null?void 0:t.env)!=null&&b.HX_CORE_URL)&&!!((u=t==null?void 0:t.env)!=null&&u.HX_API_KEY);console.log("Debug: KV cache API available:",g);let i=[],n=[];if(g){console.log("Debug: Attempting to get embeddings from KV cache via API");try{i=await y(d,t.env)}catch(e){console.warn("Failed to fetch from KV cache API",e),i=d.map(()=>null)}n=i.map((e,r)=>e===null?r:-1).filter(e=>e!==-1),console.log("Debug: Cached embeddings found:",i.filter(e=>e!==null).length,"missing:",n.length)}else console.log("Debug: KV cache API not available, skipping cache lookup"),n=l.map((e,r)=>r);if(n.length===0)return console.log("Debug: All embeddings retrieved from cache"),{data:i};let s=n.map(e=>l[e]),c,f;console.log("Debug: Generating embeddings for missing texts, count:",s.length);for(let e=0;e<3;e++)try{console.log("Debug: Primary embedding generation attempt",e+1);let r=new Promise((E,P)=>setTimeout(()=>P(new Error("Timeout after 2 seconds")),2e3)),h=(p=t==null?void 0:t.env)==null?void 0:p.AI.run("@cf/baai/bge-m3",{text:s});c=await Promise.race([h,r]),console.log("Debug: Primary embedding generation successful on attempt",e+1);break}catch(r){if(console.warn(`Primary embedding attempt ${e+1} failed:`,r),f=r,e===2)break}if(!c){if(!a)throw f;console.warn("Falling back to Ollama");try{let e=await fetch(`${(w=t==null?void 0:t.env)==null?void 0:w.OLLAMA_BASE_URL}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json",Cookie:"hxsecure=1"},body:JSON.stringify({model:"bge-m3:latest",input:s})});if(!e.ok)throw new Error(`Ollama API error: ${e.statusText}`);let r=await e.json();console.log("Embedding response data:",r.embeddings.length),c={data:r.embeddings},console.log("Debug: Fallback embedding generation successful")}catch(e){throw console.error("Both embedding methods failed:",e),e}}if(g&&n.length>0){console.log("Debug: Storing new embeddings in KV cache via API");let e=n.map((r,h)=>({hash:d[r],embedding:c.data[h]}));try{await A(e,t.env)}catch(r){console.warn("Failed to store in KV cache API",r)}}else console.log("Debug: Skipping cache storage as KV API not available or no new embeddings");let m=i.slice();for(let e=0;e<n.length;e++)m[n[e]]=c.data[e];return console.log("Debug: Embedding generation complete, total embeddings:",m.length),{data:m}};export{I as a,K as b,_ as c,T as d};
|
package/dist/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as
|
|
1
|
+
import{a as ot,b as rt}from"./chunk-VS4EXG76.js";import{A as Je,B as Ge,C as $e,D as Le,E as Ye,F as ke,G as Ke,H as Qe,I as Xe,J as ze,K as Be,L as We,M as Ze,N as et,O as tt,P as nt,Q as st,a as u,b as Q,c as T,d as X,e as z,f as B,g as W,h as Z,i as ee,j as te,k as ne,l as se,m as oe,n as re,o as ae,p as ie,q as ge,r as le,s as pe,t as ce,u as ue,v as de,w as He,x as je,y as Ue,z as Pe}from"./chunk-4XJVXKXR.js";import{A as Fe,B as De,a as $,b as L,c as Y,d as k,e as K,f as ve,g as ye,h as me,i as Se,j as fe,k as Ae,l as Re,m as Me,n as Ee,o as Te,p as Ie,q as Ce,r as he,s as xe,t as we,u as _e,v as be,w as Ne,x as Oe,y as qe,z as Ve}from"./chunk-J4LJZZ67.js";import{a as G}from"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";import{useAgent as U}from"agents/react";import{useCallback as d,useEffect as P,useMemo as J,useRef as m}from"react";import{create as F}from"zustand";import{devtools as D}from"zustand/middleware";var H={messages:[],events:[],eventsVisible:!1,status:"connecting",typingMessage:null,reasoningMessage:null,reasoningMessages:[],isReasoning:!1,stepInfo:null,approvals:[],error:null,flowConfig:null,composioAuth:null};function C(n){return F()(D((t,y)=>({...H,initHistory:e=>t({messages:e}),addEvent:e=>t(o=>({events:[...o.events,{...e,ts:Date.now()}]})),clearEvents:()=>t({events:[]}),setMessages:e=>{t({messages:e})},addMessage:e=>{t(o=>({messages:[...o.messages,e]}))},setTyping:e=>t({typingMessage:e}),appendTyping:(e,o)=>{let r=y().typingMessage;r&&r.id===e?t({typingMessage:{id:e,text:r.text+o}}):t({typingMessage:{id:e,text:o}})},clearTyping:()=>t({typingMessage:null}),setReasoning:e=>t({reasoningMessage:e}),appendReasoning:(e,o)=>{let r=y().reasoningMessage;r&&r.id===e?t({reasoningMessage:{id:e,text:r.text+o}}):t({reasoningMessage:{id:e,text:o}})},commitReasoning:e=>{t(o=>{var r;return(r=o.reasoningMessage)!=null&&r.text?{reasoningMessages:[...o.reasoningMessages,{...o.reasoningMessage,ts:e??Date.now()}],reasoningMessage:null,isReasoning:!1}:{reasoningMessage:null,isReasoning:!1}})},clearReasoning:()=>t({reasoningMessage:null,isReasoning:!1}),setReasoningMessages:e=>t({reasoningMessages:e}),setReasoningActive:e=>t({isReasoning:e}),setStep:e=>t({stepInfo:e}),clearStep:()=>t({stepInfo:null}),setStatus:e=>t({status:e}),toggleEvents:()=>t(e=>({eventsVisible:!e.eventsVisible})),clearHistory:()=>t({messages:[],typingMessage:null,reasoningMessage:null,reasoningMessages:[],isReasoning:!1,stepInfo:null}),addApprovalRequest:e=>{let o={id:`approval-${Date.now()}-${Math.random()}`,toolCallId:e.toolCallId,toolName:e.toolName,args:e.args??{},description:e.description,ts:Date.now(),status:"pending"};t(r=>({approvals:[...r.approvals,o]}))},updateApprovalStatus:({toolCallId:e,status:o})=>{t(r=>({approvals:r.approvals.map(v=>v.toolCallId===e?{...v,status:o}:v)}))},removeApproval:e=>{t(o=>({approvals:o.approvals.filter(r=>r.toolCallId!==e)}))},setError:e=>t({error:e}),setFlowConfig:e=>t({flowConfig:e}),setComposioAuth:e=>t({composioAuth:e}),clearComposioAuth:()=>t({composioAuth:null})}),{name:n,enabled:!0}))}var j=C("agent-store"),I=new Map;function h(n){if(!n)return j;let t=I.get(n);return t||(t=C(`agent-store:${n}`),I.set(n,t)),t}function vt(n){let t=J(()=>h(n==null?void 0:n.storeKey),[n==null?void 0:n.storeKey]),y=t(s=>s.typingMessage),e=m(null),o=m(null),r=m(null),v=m(0),S=m(null),f=()=>(v.current=Math.max(Date.now(),v.current+1),v.current);P(()=>{e.current=y},[y]);let A=d(s=>{var g;let i=s.trim().slice(0,T);!i||typeof((g=S.current)==null?void 0:g.send)!="function"||S.current.send(u.USER_IDENTITY+":"+i)},[]),l=U({host:n==null?void 0:n.host,basePath:(n==null?void 0:n.basePath)??"/api/agents/base",agent:n==null?void 0:n.agent,name:n==null?void 0:n.name,query:n==null?void 0:n.query,onMessage:s=>{if(typeof s.data!="string")return;let[i,g]=s.data.split("::");if(!i||!g)return;let a=t.getState(),R={[u.SERVER_HISTORY]:p=>{let c=JSON.parse(p);a.setMessages(c.messages),a.setReasoningMessages([])},[u.SERVER_EVENT]:p=>{var E;let c=JSON.parse(p);if((c==null?void 0:c.type)==="info:composio:auth_required"&&((E=c==null?void 0:c.content)!=null&&E.redirectUrl)){let M=c.content;a.setComposioAuth({toolkit:M.toolkit,redirectUrl:M.redirectUrl,toolRowId:M.toolRowId})}a.addEvent({type:"server",...c})},[u.SERVER_ERROR]:p=>{a.setError(p),a.addEvent({type:"error",content:p})},[u.SERVER_TEXT_STREAM]:p=>{o.current?a.appendTyping(o.current,p):(o.current=String(Date.now()),a.setTyping({id:o.current,text:p}))},[u.SERVER_TEXT_STREAM_COMPLETE]:p=>{if(a.setReasoningActive(!1),o.current&&a.typingMessage){let c=a.typingMessage.text;a.addMessage({role:"assistant",type:"text",content:c,id:o.current,ts:f()}),a.clearTyping(),o.current=null}},[u.SERVER_REASONING_STREAM]:p=>{a.setReasoningActive(!0),r.current?a.appendReasoning(r.current,p):(r.current=String(Date.now()),a.setReasoning({id:r.current,text:p}))},[u.SERVER_REASONING_STREAM_COMPLETE]:()=>{a.commitReasoning(f()),r.current=null},[u.SERVER_CONFIG]:p=>{a.setFlowConfig(JSON.parse(p))}};R[i]&&R[i](g)},onOpen:()=>{let s=t.getState();s.setStatus("connected"),s.clearTyping(),o.current=null,s.clearReasoning(),r.current=null,s.clearStep(),s.addEvent({type:"connection",content:"Connected to Agent Server"}),n!=null&&n.user&&A(n.user)},onClose:()=>{let s=t.getState();s.setStatus("disconnected"),s.setFlowConfig(null),s.addEvent({type:"connection",content:"Connection closed"})}});S.current=l;let x=d((s,i,g)=>{let a=s.trim();if(!a&&(!i||i.length===0)&&(!g||g.length===0))return;let p=((i==null?void 0:i.length)??0)>0||((g==null?void 0:g.length)??0)>0?JSON.stringify({text:a,images:i,documents:g}):a;l.send(u.USER_MESSAGE+":"+p);let c=t.getState();r.current=null,c.clearReasoning(),c.addMessage({id:String(Date.now())+Math.random(),role:"user",type:"text",content:a,images:i,ts:f()})},[l]),w=d(()=>{t.getState().clearHistory(),l.send(u.USER_CLEAR_HISTORY+":1")},[l]),_=d((s,i)=>{let g=s.trim();g&&l.send(u.USER_AUTH+":"+JSON.stringify({name:g,value:i}))},[l]),b=d(s=>{A(s)},[A]),N=d(()=>t.getState().toggleEvents(),[]),O=d(()=>t.getState().clearEvents(),[]),q=d(s=>{let i=t.getState();i.updateApprovalStatus({toolCallId:s,status:"approved"});let g=JSON.stringify({type:"tool_approval",toolCallId:s,approved:!0});typeof(l==null?void 0:l.send)=="function"&&l.send(g),i.addEvent({type:"approval",content:`Approved tool call ${s}`,ts:Date.now()})},[l]),V=d(s=>{let i=t.getState();i.updateApprovalStatus({toolCallId:s,status:"rejected"});let g=JSON.stringify({type:"tool_approval",toolCallId:s,approved:!1});typeof(l==null?void 0:l.send)=="function"&&l.send(g),i.addEvent({type:"approval",content:`Rejected tool call ${s}`,ts:Date.now()})},[l]);return{connection:l,store:t,send:x,clearHistory:w,sendAuth:_,setIdentity:b,toggleEventsVisible:N,clearEvents:O,approve:q,reject:V}}export{Z as DEFAULT_MEMORY_LENGTH,ee as DEFAULT_MEMORY_MODEL,L as FLOW_INPUT_NAME_RE,He as GENERATION_PARAM_KEYS,Ue as GENERATION_PRESETS,T as MAX_USER_IDENTITY_LENGTH,B as MEMORY_LENGTH_MD_LINES,W as MEMORY_LENGTH_TOKENS,ot as MODEL_REGISTRY_SNAPSHOT,$ as NodeType,ve as OUT_VAR_NAME_RE,je as PRESET_PARAM_KEYS,Be as REASONING_EFFORT_LEVELS,st as TOOL_REGISTRY_SNAPSHOT,xe as VariableResolutionError,Ge as applyPresetToOverrides,nt as buildReasoningProviderOptions,Re as buildScope,K as buildTriggerMessageText,re as capMemoryContent,Pe as deriveParamSupport,oe as estimateTokens,be as extractOutVarValues,Ve as extractTemplateReferences,ue as extractUserKeypoints,Me as findScopedSourceNode,h as getAgentStore,fe as getAncestorNodeIds,ye as getDefaultOutVars,Se as getEffectiveOutVars,Y as getFlowInputDefs,rt as getModelEntry,Ee as getRefTail,Ae as getUpstreamOutVars,Te as isBinaryOutVar,Ie as isJsonContentType,ae as isStartMemoryEnabled,G as logc,pe as looksLikeTranscript,le as memoryGenerationMaxTokens,se as memoryMdLineLimit,ne as memoryTokenLimit,de as mergeKeypointMemory,u as messageTypes,Le as normalizeEffectiveParams,k as normalizeFlowInputs,We as normalizeReasoning,Ke as openAiReasoningParamSupport,ke as openAiStandardParamSupport,te as parseMemoryLength,Ce as parsePayloadText,qe as parseTemplateExpression,z as parseUserAuth,Q as parseUserMessage,$e as pickNodeOverrides,he as readFetchPayload,Ze as reasoningEffortLevels,et as reasoningExposable,Oe as resolveOutVarRef,_e as resolveOutVarValue,Je as resolvePreset,tt as resolveReasoningEffort,Ne as resolveReference,De as resolveTemplate,Fe as rewriteTemplateNodeRefs,ce as sanitizeMemoryDocument,X as sanitizeUserIdentity,ge as startMemoryLength,ie as startMemoryModel,ze as stripUnsupportedFromNodeData,Ye as toStreamTextSettings,vt as useAgent,j as useAgentStore,me as validateOutVars,we as walkPath,Xe as workersAiParamSupport,Qe as xaiParamSupport};
|
|
@@ -5,6 +5,7 @@ export declare enum NodeType {
|
|
|
5
5
|
LLM_NODE = "llmNode",
|
|
6
6
|
ANSWER_NODE = "answerNode",
|
|
7
7
|
API_NODE = "apiNode",
|
|
8
|
-
TOOL_NODE = "toolNode"
|
|
8
|
+
TOOL_NODE = "toolNode",
|
|
9
|
+
WORKER_NODE = "workerNode"
|
|
9
10
|
}
|
|
10
|
-
export type NODETYPES = NodeType.START_NODE | NodeType.CLASSIFIER_NODE | NodeType.MEMO_NODE | NodeType.LLM_NODE | NodeType.ANSWER_NODE | NodeType.API_NODE | NodeType.TOOL_NODE;
|
|
11
|
+
export type NODETYPES = NodeType.START_NODE | NodeType.CLASSIFIER_NODE | NodeType.MEMO_NODE | NodeType.LLM_NODE | NodeType.ANSWER_NODE | NodeType.API_NODE | NodeType.TOOL_NODE | NodeType.WORKER_NODE;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** True for `application/json` and JSON:API / other `+json` types (`application/vnd.api+json`). */
|
|
2
|
+
export declare function isJsonContentType(contentType: string | null | undefined): boolean;
|
|
3
|
+
export declare function parsePayloadText(text: string, contentType?: string | null): unknown;
|
|
4
|
+
export declare function readFetchPayload(response: Response): Promise<unknown>;
|
|
@@ -14,6 +14,18 @@ export interface ParsedTemplateExpression {
|
|
|
14
14
|
defaultValue?: string;
|
|
15
15
|
}
|
|
16
16
|
export declare function walkPath(obj: any, path: string): any;
|
|
17
|
+
/**
|
|
18
|
+
* User outVars on API/tool/worker nodes are relative to the HTTP/tool payload
|
|
19
|
+
* (`result.data`), so JSON:API bodies map as `data.attributes.name` instead of
|
|
20
|
+
* `data.data.attributes.name`. Default outVars (`ok`, `status`, `data`) still
|
|
21
|
+
* walk the node envelope. Legacy envelope paths like `data.customer` fall back
|
|
22
|
+
* when the payload walk misses.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveOutVarValue(result: unknown, outVar: {
|
|
25
|
+
path?: string;
|
|
26
|
+
source?: 'default' | 'user';
|
|
27
|
+
}, nodeType?: string): unknown;
|
|
28
|
+
export declare function extractOutVarValues(node: FlowNode, result: unknown): Record<string, unknown>;
|
|
17
29
|
/** Resolves one canonical direct reference. Structural errors throw; absent values return missing metadata. */
|
|
18
30
|
export declare function resolveReference(ref: string, input: ResolveInput): RefResolution;
|
|
19
31
|
/** Kept as a concise public helper for callers that do not need missing diagnostics. */
|
package/dist/common.d.ts
CHANGED
|
@@ -14,4 +14,5 @@ export * from './common/utils/flowInputs';
|
|
|
14
14
|
export * from './common/utils/templateUtils';
|
|
15
15
|
export * from './common/utils/flowScope';
|
|
16
16
|
export * from './common/utils/outVars';
|
|
17
|
+
export * from './common/utils/httpPayload';
|
|
17
18
|
export * from './common/utils/agentMemory';
|
package/dist/common.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as
|
|
1
|
+
import{a as sa,b as ta}from"./chunk-VS4EXG76.js";import{A as ba,B as ca,C as da,D as ea,E as fa,F as ga,G as ha,H as ia,I as ja,J as ka,K as la,L as ma,M as na,N as oa,O as pa,P as qa,Q as ra,a as b,b as h,c as i,d as j,e as k,f as l,g as m,h as n,i as o,j as p,k as q,l as r,m as s,n as t,o as u,p as v,q as w,r as x,s as y,t as z,u as A,v as B,w as Z,x as _,y as $,z as aa}from"./chunk-4XJVXKXR.js";import{A as X,B as Y,a as c,b as d,c as e,d as f,e as g,f as C,g as D,h as E,i as F,j as G,k as H,l as I,m as J,n as K,o as L,p as M,q as N,r as O,s as P,t as Q,u as R,v as S,w as T,x as U,y as V,z as W}from"./chunk-J4LJZZ67.js";import{a}from"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";export{n as DEFAULT_MEMORY_LENGTH,o as DEFAULT_MEMORY_MODEL,d as FLOW_INPUT_NAME_RE,Z as GENERATION_PARAM_KEYS,$ as GENERATION_PRESETS,i as MAX_USER_IDENTITY_LENGTH,l as MEMORY_LENGTH_MD_LINES,m as MEMORY_LENGTH_TOKENS,sa as MODEL_REGISTRY_SNAPSHOT,c as NodeType,C as OUT_VAR_NAME_RE,_ as PRESET_PARAM_KEYS,la as REASONING_EFFORT_LEVELS,ra as TOOL_REGISTRY_SNAPSHOT,P as VariableResolutionError,ca as applyPresetToOverrides,qa as buildReasoningProviderOptions,I as buildScope,g as buildTriggerMessageText,t as capMemoryContent,aa as deriveParamSupport,s as estimateTokens,S as extractOutVarValues,W as extractTemplateReferences,A as extractUserKeypoints,J as findScopedSourceNode,G as getAncestorNodeIds,D as getDefaultOutVars,F as getEffectiveOutVars,e as getFlowInputDefs,ta as getModelEntry,K as getRefTail,H as getUpstreamOutVars,L as isBinaryOutVar,M as isJsonContentType,u as isStartMemoryEnabled,a as logc,y as looksLikeTranscript,x as memoryGenerationMaxTokens,r as memoryMdLineLimit,q as memoryTokenLimit,B as mergeKeypointMemory,b as messageTypes,ea as normalizeEffectiveParams,f as normalizeFlowInputs,ma as normalizeReasoning,ha as openAiReasoningParamSupport,ga as openAiStandardParamSupport,p as parseMemoryLength,N as parsePayloadText,V as parseTemplateExpression,k as parseUserAuth,h as parseUserMessage,da as pickNodeOverrides,O as readFetchPayload,na as reasoningEffortLevels,oa as reasoningExposable,U as resolveOutVarRef,R as resolveOutVarValue,ba as resolvePreset,pa as resolveReasoningEffort,T as resolveReference,Y as resolveTemplate,X as rewriteTemplateNodeRefs,z as sanitizeMemoryDocument,j as sanitizeUserIdentity,w as startMemoryLength,v as startMemoryModel,ka as stripUnsupportedFromNodeData,fa as toStreamTextSettings,E as validateOutVars,Q as walkPath,ja as workersAiParamSupport,ia as xaiParamSupport};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as a,e as b}from"./chunk-YFOFZWIB.js";import"./chunk-J4LJZZ67.js";import"./chunk-V6JSMX5A.js";import"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";export{a as customHttpTool,b as default};
|
package/dist/index.js
CHANGED
|
@@ -1,30 +1,8 @@
|
|
|
1
|
-
import{a as ce}from"./chunk-ELMOSEQ7.js";import{a as Z,b as st,c as le,d as ht}from"./chunk-EZIUCT77.js";import{a as ye}from"./chunk-OF6G42DM.js";import"./chunk-MOYYZBTC.js";import{a as we,b as he}from"./chunk-CDGUEX3J.js";import{A as Bn,B as Zn,C as ue,D as pe,E as Rt,F as Qn,G as vn,H as ts,I as es,J as os,K as ns,L as fe,M as ss,N as me,O as Tt,P as xt,Q as ge,R as rs,S as is,a as j,b as lt,c as Mn,d as nt,e as vt,f as Pn,g as bn,h as Fn,i as Dn,j as Un,k as dt,l as ut,m as Cn,n as pt,o as ft,p as te,q as mt,r as ee,s as oe,t as Pt,u as ne,v as se,w as Wn,x as Gn,y as Yn,z as de}from"./chunk-QHCN3UMW.js";import{a as B,b as $n,c as v,d as Zt,e as Qt,f as En,g as jn,h as re,i as gt,j as Ln,k as tt,l as Hn,m as Sn,n as Vn,o as Kn,p as V,q as yt,r as q,s as Xn,t as qn,u as Jn,v as zn,w as ie}from"./chunk-VLZKZDRV.js";import{a as xn}from"./chunk-RYHQGPX5.js";import{a as In}from"./chunk-R6EKV3WR.js";import{a as kn}from"./chunk-6HY7QUMP.js";import{a as Nn,b as An}from"./chunk-V6JSMX5A.js";import{a as G,b as Q,c as _n,d as Bt,e as On}from"./chunk-G3SGJ7XJ.js";import{a as ot}from"./chunk-U56YWPSI.js";import{a as wt,b as ae}from"./chunk-A2IRPAD4.js";import{a as ct}from"./chunk-3TXHFKDN.js";import{Agent as rn}from"agents";import{nanoid as an}from"nanoid";var S=(o,t,n)=>{o.send(t+"::"+n)};async function oo(o){o.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 Re(o,t){o.sql`INSERT INTO messages (id, role, type, content, ts) VALUES (${t.id}, ${t.role}, ${t.type}, ${t.content}, ${t.ts})`}async function z(o){return o.sql`SELECT id, role, type, content, ts FROM messages ORDER BY ts ASC`}async function It(o){o.sql`DELETE FROM messages`}async function Te(o){await oo(o)}function bt(o){return{"Content-Type":"application/json",Authorization:o.HX_API_KEY}}function Nt(o){return!!(o!=null&&o.HX_ORA_URL)&&!!(o!=null&&o.HX_API_KEY)}var no="anonymous:";function xe(o,t){return(o==null?void 0:o.trim())||`${no}${t}`}async function Ft(o,t){if(!Nt(o))return null;let n=await fetch(`${o.HX_ORA_URL}/internal/runs`,{method:"POST",headers:bt(o),body:JSON.stringify(t)});return n.ok?await n.json():(console.error("[oraTriggers] createRun failed",n.status,await n.text().catch(()=>"")),null)}async function rt(o,t){if(!Nt(o))return{claimed:!0};let n=await fetch(`${o.HX_ORA_URL}/internal/runs/${encodeURIComponent(t)}/claim`,{method:"POST",headers:bt(o)});if(!n.ok){let e=await n.text().catch(()=>"");throw new Error(`claimRun ${t} failed with ${n.status}: ${e}`)}return await n.json()}async function At(o,t,n,e=3){if(!Nt(o))return!0;for(let s=1;s<=e;s++){try{let r=await fetch(`${o.HX_ORA_URL}/internal/runs/${encodeURIComponent(t)}/complete`,{method:"POST",headers:bt(o),body:JSON.stringify(n)});if(r.ok||r.status===409)return!0;if(r.status===404)return console.error(`[oraTriggers] completeRun ${t} rejected with 404`),!1;console.warn(`[oraTriggers] completeRun ${t} attempt ${s} failed with ${r.status}`)}catch(r){console.warn(`[oraTriggers] completeRun ${t} attempt ${s} threw`,r)}s<e&&await new Promise(r=>setTimeout(r,250*s))}return console.error(`[oraTriggers] completeRun ${t} exhausted ${e} attempts; hx-ora will time the run out`),!1}async function Ie(o,t){if(!Nt(o))return Promise.resolve();try{return await Ft(o,t)}catch(n){return console.error("[oraTriggers] recordRun failed",n),null}}var Dt=Object.freeze({}),so="__SYSTEM_";function Ne(o){return o.startsWith(so)}function ro(o){let t={};for(let[n,e]of Object.entries(o))Ne(n)||(t[n]=e);return Object.freeze(t)}async function kt(o,t){if(!t)return Dt;if(o.HX_ORA_URL&&o.HX_API_KEY)try{let s=await fetch(`${o.HX_ORA_URL}/internal/secrets`,{headers:{Authorization:o.HX_API_KEY}});if(s.ok){let r=await s.json();if(r.secrets)return ro(r.secrets)}else console.warn(`[secrets] API failed with status ${s.status}, falling back to KV`)}catch(s){console.error("[secrets] API request failed, falling back to KV",s)}let n=o.ORA_SECRETS;if(!n)return Dt;let e=`${t}:`;try{let s=await n.list({prefix:e,limit:1e3});s.list_complete===!1&&console.warn(`[secrets] tenant=${t} exceeded list page; truncating to first 1000 keys`);let r=s.keys.filter(c=>!Ne(c.name.slice(e.length))),i=await Promise.all(r.map(async c=>{let u=await n.get(c.name);return u!==null?[c.name.slice(e.length),u]:null})),a={};for(let c of i){if(!c)continue;let[u,p]=c;u&&(a[u]=p)}return Object.freeze(a)}catch(s){return console.error("[secrets] failed to load tenant secrets from KV",{tenant:t,err:s}),Dt}}function _t(o){var s;let t=((s=o==null?void 0:o.flowData)==null?void 0:s.state)??(o==null?void 0:o.flowData),e=((t==null?void 0:t.nodes)??[]).find(r=>r.type==="startNode");return e==null?void 0:e.data}import{nanoid as on}from"nanoid";async function Ae(o,t){return o.length?!t||!t.HX_ORA_URL||!t.HX_API_KEY?(console.error("extractDocuments: missing HX_ORA_URL or HX_API_KEY"),o.map(e=>({name:e.name,text:""}))):await Promise.all(o.map(async e=>{try{let s=await fetch(`${t.HX_ORA_URL}/internal/files/extract`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:t.HX_API_KEY},body:JSON.stringify(e)});if(!s.ok)return console.error(`extractDocuments: ${e.name} failed ${s.status}`),{name:e.name,text:""};let r=await s.json();return{name:e.name,text:r.text||""}}catch(s){return console.error(`extractDocuments: ${e.name} threw`,s),{name:e.name,text:""}}})):[]}function io(o,t,n){var e,s,r,i;return tt(((s=(e=n.flowData)==null?void 0:e.state)==null?void 0:s.nodes)??[],((i=(r=n.flowData)==null?void 0:r.state)==null?void 0:i.edges)??[],t.id).some(a=>a.ref===o&&(a.type==="image"||a.type==="file"))}function ao(o,t){var i,a,c,u,p,g,d;let n=Array.isArray((i=o.data)==null?void 0:i.outputMapping)?o.data.outputMapping:[];if(n.length===0)return null;let e=((c=(a=t.flowData)==null?void 0:a.state)==null?void 0:c.nodes)||[],s={},r=new Set;for(let m of n){let l=(u=m.key)==null?void 0:u.trim(),f=(p=m.from)==null?void 0:p.trim();if(!l||!f)throw new Error(`Answer node ${o.id} has an incomplete variable mapping`);if(r.has(l))throw new Error(`Answer node ${o.id} has duplicate output key "${l}"`);if(io(f,o,t))throw new Error(`Answer node ${o.id} cannot persist binary source "${f}"`);let y=q(f,{context:t.context||{},results:t.results||{},nodes:e,edges:((d=(g=t.flowData)==null?void 0:g.state)==null?void 0:d.edges)??[],currentNodeId:o.id}),h=y.value;if(y.missing||h===void 0||h===null){if(m.default===void 0)throw new V(y.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Answer node ${o.id} could not resolve output "${f}"`);h=m.default}s[l]=h,r.add(l)}try{JSON.stringify(s)}catch{throw new Error(`Answer node ${o.id} produced a value that is not JSON serializable`)}return s}async function Ut(o,t,n,e,s,r,i){var c,u,p;e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let a;try{a=ao(t,n)}catch(g){throw e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"error",error:String(g)}}),g}a&&o.outputCollector&&o.outputCollector.add(t.id,a);try{let g=await((c=o.getMessages)==null?void 0:c.call(o))??[],d=((u=g[g.length-1])==null?void 0:u.type)==="text"?g[g.length-1].content:"NO-TEXT";i==null||i({type:"answer_node",payload:{userMessage:(p=n==null?void 0:n.context)==null?void 0:p.user_input,answer:d}})}catch(g){console.error("answerNodeRunner: failed to emit answer telemetry:",g),e==null||e({type:"debug",content:"Warning: failed to emit answer telemetry"})}s==null||s(t.id,{type:"answerNode",message:"Answer response for: "+t.data.response,saved:!0,persistenceRequested:!!a&&!!o.outputCollector,persisted:!1,...o.runId?{runId:o.runId}:{}}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"success"}})}function W(o,t,n,e,s){var a,c,u,p,g;let r=(s==null?void 0:s.callerTag)??"llmNodeRunner",i=(s==null?void 0:s.serializeNonStrings)??!1;return ie(o,t,{context:n.context??{},results:n.results??{},nodes:((c=(a=n.flowData)==null?void 0:a.state)==null?void 0:c.nodes)??[],edges:((p=(u=n.flowData)==null?void 0:u.state)==null?void 0:p.edges)??[],currentNodeId:t.id,secrets:(g=s==null?void 0:s.sessionEnv)==null?void 0:g.secrets},{callerTag:r,serializeNonStrings:i,onError:d=>{e==null||e({type:`error:${r}`,content:d})}})}var Ct="[redacted]",ke=8*1024;function co(o){if(o==null)return{value:o,truncated:!1};let t=typeof o=="string"?o:JSON.stringify(o),n=new TextEncoder().encode(t);if(n.byteLength<=ke){if(typeof o=="string")return{value:o,truncated:!1};try{return{value:JSON.parse(t),truncated:!1}}catch{return{value:t,truncated:!1}}}let e=n.slice(0,ke);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(e),truncated:!0}}function lo(o,t){let n={};for(let e of gt(o))n[e.name]=yt(t,e.path??"");return n}var Et=(o,t,n,e,s)=>W(o,t,n,s,{callerTag:"apiNodeRunner",serializeNonStrings:!0,sessionEnv:e});async function jt(o,t,n,e,s,r,i){var u,p,g,d,m,l;`${t.id}`,e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let a=null,c=Date.now();try{console.log("[apiNodeRunner] context keys:",Object.keys(n.context||{})),console.log("[apiNodeRunner] results keys:",Object.keys(n.results||{}));let f=((u=t.data)==null?void 0:u.url)||"",y=Et(f,t,n,o,e);if(console.log("[apiNodeRunner] resolved url:",Z(f)?st(y):y),!y){e==null||e({type:"error:apiNodeRunner",content:"Missing url"}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"error",error:"Missing url"}}),s==null||s(t.id,a);return}let h=(((p=t.data)==null?void 0:p.method)||"GET").toUpperCase();console.log("[apiNodeRunner] method:",h);let w=((g=t.data)==null?void 0:g.headers)||{},R={},T={};for(let k in w)if(Object.prototype.hasOwnProperty.call(w,k)){let b=String(w[k]??"");T[k]=Z(b),R[k]=Et(b,t,n,o,e)}let I,$=!1;if(h!=="GET"&&h!=="HEAD"&&((d=t.data)==null?void 0:d.body)!==void 0){let k=typeof t.data.body=="string"?t.data.body:JSON.stringify(t.data.body);$=Z(k),I=Et(k,t,n,o,e),!R["Content-Type"]&&!R["content-type"]&&(R["Content-Type"]="application/json")}let _={};for(let k in R)_[k]=T[k]?Ct:R[k];console.log("[apiNodeRunner] headers:",JSON.stringify(_)),console.log("[apiNodeRunner] body:",$?Ct:I),e==null||e({type:"info:apiNodeRunner:request",content:{nodeId:t.id,method:h,url:Z(f)?st(y):y,headers:_,body:$?Ct:I}});let F=Number((m=t.data)==null?void 0:m.timeoutMs),H=new AbortController,M=Number.isFinite(F)&&F>0?setTimeout(()=>H.abort(),F):null,N;try{console.log("[apiNodeRunner] fetching..."),N=await fetch(y,{method:h,headers:R,body:I,signal:H.signal}),console.log("[apiNodeRunner] fetch returned status:",N.status)}finally{M&&clearTimeout(M)}let C=N.headers.get("content-type")||"";console.log("[apiNodeRunner] content-type:",C);let D;C.includes("application/json")?D=await N.json():D=await N.text(),console.log("[apiNodeRunner] payload preview:",typeof D=="string"?D.slice(0,200):JSON.stringify(D).slice(0,200)),a={ok:N.ok,status:N.status,data:D};let U=Date.now()-c;i==null||i({type:"api_call",payload:{nodeId:t.id,url:y,method:h,status:N.status,latencyMs:U}});let{value:L,truncated:x}=co(D);e==null||e({type:"info:apiNodeRunner:response",content:{nodeId:t.id,ok:N.ok,status:N.status,latencyMs:U,data:L,truncated:x,outVars:lo(t,a)}}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"success"}})}catch(f){console.error("Error processing ApiNode:",f),e==null||e({type:"error:apiNodeRunner",content:`API node execution failed: ${f}`}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"error",error:String(f)}})}finally{console.log("[apiNodeRunner] final result:",(l=JSON.stringify(a))==null?void 0:l.slice(0,300)),s==null||s(t.id,a)}}var uo="[redacted]",_e=8*1024;function Lt(o,t){if(typeof o=="string")return Z(o)?typeof t=="string"&&/^https?:\/\//i.test(t)?st(t):uo:t;if(o&&typeof o=="object"&&!Array.isArray(o)){let n={},e=t&&typeof t=="object"&&!Array.isArray(t)?t:{};for(let[s,r]of Object.entries(o))n[s]=Lt(r,e[s]);return n}if(Array.isArray(o)){let n=Array.isArray(t)?t:[];return o.map((e,s)=>Lt(e,n[s]))}return t}function po(o){if(o==null)return{value:o,truncated:!1};let t=typeof o=="string"?o:JSON.stringify(o),n=new TextEncoder().encode(t);if(n.byteLength<=_e){if(typeof o=="string")return{value:o,truncated:!1};try{return{value:JSON.parse(t),truncated:!1}}catch{return{value:t,truncated:!1}}}let e=n.slice(0,_e);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(e),truncated:!0}}function fo(o,t){let n={};for(let e of gt(o))n[e.name]=yt(t,e.path??"");return n}var mo=(o,t,n,e,s)=>W(o,t,n,s,{callerTag:"toolNodeRunner",serializeNonStrings:!0,sessionEnv:e});function Ot(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)?o:{}}function go(o){let t=Ot(o);if(Array.isArray(t.enum)&&t.enum.length>0)return t.enum.every(s=>typeof s=="string"||typeof s=="number")?"enum":"unsupported";switch(Array.isArray(t.type)?t.type.find(e=>typeof e=="string"&&e!=="null"):t.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 yo(o,t){var i,a;let n={},e={},s=((i=o.data)==null?void 0:i.inputSchema)??t;if(s&&typeof s=="object"&&!Array.isArray(s)){e=Ot(Ot(s).properties);for(let[c,u]of Object.entries(e))n[c]=go(u);return{types:n,properties:e}}let r=(a=o.data)==null?void 0:a.argTypes;if(r&&typeof r=="object"&&!Array.isArray(r))for(let[c,u]of Object.entries(r))typeof u=="string"&&(n[c]=u);return{types:n,properties:e}}function wo(o,t,n){if(o.trim()!==""){if(o==="null"&&t&&t!=="string"&&t!=="enum")return null;switch(t){case"string":return o;case"enum":{let e=Ot(n).enum;if(Array.isArray(e)){let s=e.find(r=>String(r)===o);if(s!==void 0)return s}return o}case"number":{let e=Number(o);return Number.isFinite(e)?e:o}case"integer":{let e=Number.parseInt(o,10);return Number.isFinite(e)?e:o}case"boolean":return o==="true"?!0:o==="false"?!1:o;case"object":case"array":case"unsupported":try{return JSON.parse(o)}catch{return o}default:return o}}}function ho(o){return o===void 0||typeof o=="string"&&o.trim()===""}function Ht(o,t,n,e,s,r,i){if(typeof o=="string"){let a=o.includes("{{")?mo(o,t,n,e,s):o;return wo(a,r,i)}if(o&&typeof o=="object"&&!Array.isArray(o)){let a={};for(let[c,u]of Object.entries(o))a[c]=Ht(u,t,n,e,s);return a}return Array.isArray(o)?o.map(a=>Ht(a,t,n,e,s)):o}function Ro(o,t,n,e,s,r){let i={};for(let[a,c]of Object.entries(o)){let u=Ht(c,t,n,e,s,r.types[a],r.properties[a]);ho(u)||(i[a]=u)}return i}async function To(o){if(o.toolCatalog)return o.toolCatalog;if(!o.env)return o.toolCatalog={},o.toolCatalog;let t=await ae(o.env),n={};for(let e of t)e!=null&&e.id&&(n[e.id]=e);return o.toolCatalog=n,n}async function xo(o){if(o.toolDefs)return o.toolDefs;if(!o.env)return o.toolDefs={},o.toolDefs;let t=await wt(o.env),n={};for(let e of t)e!=null&&e.id&&(n[e.id]=e);return o.toolDefs=n,n}async function St(o,t,n,e,s,r,i){var p,g,d,m,l,f,y,h,w,R,T,I;`${t.id}`,e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let a={ok:!1,data:null,error:null},c=Date.now(),u=((p=t.data)==null?void 0:p.source)==="http"?"http":"catalog";try{let $=(g=t.data)!=null&&g.args&&typeof t.data.args=="object"&&!Array.isArray(t.data.args)?t.data.args:{},_,F;if(u==="http"){let U=typeof((d=t.data)==null?void 0:d.toolId)=="string"?t.data.toolId.trim():"";if(!U)throw new Error("HTTP tool nodes require toolId");if(F=(await xo(o))[U],!F)throw new Error(`Tool ${U} not found`);_=F.inputSchema}let H=yo(t,_),M=Ro($,t,n,o,e,H);if(e==null||e({type:"info:toolNodeRunner:request",content:{nodeId:t.id,source:u,catalogId:(m=t.data)==null?void 0:m.catalogId,toolSlug:(l=t.data)==null?void 0:l.toolSlug,toolId:(f=t.data)==null?void 0:f.toolId,args:Lt($,M)}}),u==="catalog"){let U=typeof((y=t.data)==null?void 0:y.catalogId)=="string"?t.data.catalogId.trim():"",L=typeof((h=t.data)==null?void 0:h.toolSlug)=="string"?t.data.toolSlug.trim():"";if(!U||!L)throw new Error("Catalog tool nodes require catalogId and toolSlug");let k=(await To(o))[U];if(!k)throw new Error(`Tool catalog entry ${U} not found or disabled`);let b=typeof((w=t.data)==null?void 0:w.toolVersion)=="string"?t.data.toolVersion.trim():"",E=await ce(o,{toolSlug:L,connectionScope:k.connectionScope,toolVersion:b||null,toolkitVersion:k.toolkitVersion,arguments:M});a={ok:E.ok,data:E.ok?E.data:null,error:E.ok?null:E.error??"Tool execution failed"}}else{let U=ht(F,o,n,e);if(!U.execute)throw new Error(`Tool ${(R=t.data)==null?void 0:R.toolId} is missing an execute handler`);let L=await U.execute(M,{}),x=L&&typeof L=="object"&&"error"in L&&L.error?String(L.error):null;a={ok:!x,data:L,error:x}}let N=Date.now()-c;i==null||i({type:"tool_call",payload:{nodeId:t.id,url:u==="catalog"?`composio:${((T=t.data)==null?void 0:T.toolSlug)??""}`:`tool:${((I=t.data)==null?void 0:I.toolId)??""}`,method:"EXECUTE",status:a.ok?200:502,latencyMs:N}});let{value:C,truncated:D}=po(a.data);e==null||e({type:"info:toolNodeRunner:response",content:{nodeId:t.id,ok:a.ok,latencyMs:N,data:C,truncated:D,error:a.error,outVars:fo(t,a)}}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:a.ok?"success":"error",error:a.error??void 0}})}catch($){let _=$ instanceof Error?$.message:String($);a={ok:!1,data:null,error:_},e==null||e({type:"error:toolNodeRunner",content:`Tool node execution failed: ${_}`}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"error",error:_}})}finally{s==null||s(t.id,a)}}import{generateObject as Po}from"ai";import{z as Oe}from"zod";import{openai as Io}from"@ai-sdk/openai";import{extractReasoningMiddleware as No,wrapLanguageModel as Ao}from"ai";import{createWorkersAI as ko}from"workers-ai-provider";import{xai as _o}from"@ai-sdk/xai";import{anthropic as Oo}from"@ai-sdk/anthropic";import{createOpenRouter as $o}from"@openrouter/ai-sdk-provider";var Kt={};function Vt(o){if(o!=null){if(typeof o!="string")return o;try{return JSON.parse(o)}catch{return}}}function Mo(o){return{...o,defaultParams:Vt(o.defaultParams)??o.defaultParams,capabilities:Vt(o.capabilities)??o.capabilities,price:Vt(o.price)??o.price}}async function et(o,t,n){var p,g;if(!(t!=null&&t.getOraModel))throw new Error("resolveModelById requires a sessionEnv with getOraModel capable of fetching models dynamically.");let e=await t.getOraModel(o);if(!e)return;let s=Mo(e),r=((p=s.capabilities)==null?void 0:p.params)??de(s),{effectiveParams:i,adjustments:a}=pe(s.defaultParams,n,r),c;if(Kt[s.provider])c=await Kt[s.provider](s,t,n);else if(s.provider==="openai")c=Io(s.providerModel);else if(s.provider==="xai")c=_o(s.providerModel);else if(s.provider==="anthropic")c=Oo(s.providerModel);else if(s.provider==="openrouter")c=$o()(s.providerModel);else if(s.provider==="workersai"||s.provider==="cloudflare"){if(!((g=t==null?void 0:t.env)!=null&&g.AI))throw new Error("Workers AI provider requires sessionEnv.env.AI binding");c=ko({binding:t.env.AI})(s.providerModel)}else c={provider:s.provider,providerModel:s.providerModel};let u=fe(s);return u.kind==="tag"&&c&&typeof c=="object"&&"specificationVersion"in c&&(c=Ao({model:c,middleware:No({tagName:u.tagName??"think",startWithReasoning:u.startWithReasoning??!1})})),{provider:s.provider,modelHandle:c,entry:s,effectiveParams:i,paramAdjustments:a.length>0?a:void 0,reasoning:u}}function Vs(o,t){Kt[o]=t}async function Xt(o,t,n,e,s,r,i){var l,f,y,h,w,R,T;e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let a=String(((l=t==null?void 0:t.data)==null?void 0:l.input_variable)||"user_input").trim(),c;try{let I=q(a,{context:n.context??{},results:n.results??{},nodes:((y=(f=n.flowData)==null?void 0:f.state)==null?void 0:y.nodes)??[],edges:((w=(h=n.flowData)==null?void 0:h.state)==null?void 0:w.edges)??[],currentNodeId:t.id});if(I.missing)throw new Error(`Classifier input "${a}" did not produce a value`);c=I.value}catch(I){throw e==null||e({type:"error:classifier",content:String(I)}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"error",error:String(I)}}),I}let u=Array.isArray((R=t==null?void 0:t.data)==null?void 0:R.items)?t.data.items:[];if(u.length===0){e==null||e({type:"error:classifier",content:"ClassifierNode has no items to classify."});return}let p=String((T=u[u.length-1])==null?void 0:T.id);if(!c||String(c).trim().length===0){e==null||e({type:"warning:classifier",content:"No input for classification \u2014 falling back to last item."}),s==null||s(t.id,{classification:p}),n.context=n.context||{},n.context.classified_id=p,r==null||r(n);return}let d=`You are a precise classifier. Given a short user message, identify the category that best matches from the provided list.
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
${u.map(I=>{let $=I.keywords??I["keywords/topics"]??"",_=Array.isArray($)?$.join(", "):String($||"");return`- id: ${I.id}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
`)}
|
|
9
|
-
`,m=`User message:
|
|
10
|
-
"""${String(c).trim()}"""
|
|
11
|
-
|
|
12
|
-
Select the best matching category id.`;try{let I=Date.now(),$=u.map(U=>String(U.id)),_="gpt_4_1_mini",F=await et(_,o);if(!F)throw new Error(`Model '${_}' not found in registry`);let{modelHandle:H,effectiveParams:M}=F,N=await Po({model:H,messages:[{role:"system",content:d},{role:"user",content:m}],schema:Oe.object({classification:Oe.enum($).describe("The id of the best matching category")}),temperature:M.temperature??0}),C=Date.now()-I,D=N.object.classification;i==null||i({type:"class_telemetry",payload:{nodeId:t.id,totalLatency:C,model:N.response.modelId,usage:N.usage,options:$}}),i==null||i({type:"class_result",payload:{result:N}}),s==null||s(t.id,{classification:D}),n.context=n.context||{},n.context.classified_id=D,r==null||r(n),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"success"}})}catch(I){throw e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"error",error:String(I)}}),I}}import{stepCountIs as Uo,streamText as Co}from"ai";import{nanoid as Eo}from"nanoid";import"zod";function $e(o,t){var a,c,u,p,g;let n=((a=o.data)==null?void 0:a.attachments)??[];if(!Array.isArray(n))throw new V("INVALID_EXPRESSION",`Node ${o.id} attachments must be an array`);let e=((u=(c=t.flowData)==null?void 0:c.state)==null?void 0:u.nodes)??[],s=((g=(p=t.flowData)==null?void 0:p.state)==null?void 0:g.edges)??[],r=tt(e,s,o.id),i="";for(let d of n){if(typeof d!="string")throw new V("INVALID_EXPRESSION",`Node ${o.id} has an invalid attachment reference`);let m=r.find(f=>f.ref===d);if(!m)throw new V("OUT_OF_SCOPE",`Attachment "${d}" is not in this node's connection scope`);if(m.type!=="file"&&m.type!=="image")throw new V("UNKNOWN_OUTPUT",`Attachment "${d}" is not an image or file output`);if(m.type!=="file")continue;let l=q(d,{context:t.context??{},results:t.results??{},nodes:e,edges:s,currentNodeId:o.id});if(l.missing)throw new V(l.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Attachment "${d}" did not produce a value`);if(typeof l.value!="string")throw new V("PATH_NOT_FOUND",`Attachment "${d}" must resolve to file text`);l.value.trim()&&(i+=(i?`
|
|
13
|
-
|
|
14
|
-
`:"")+l.value)}return i}function bo(o,t){var s,r,i,a,c;let n=((s=o.data)==null?void 0:s.attachments)??[];if(!Array.isArray(n))throw new V("INVALID_EXPRESSION",`Node ${o.id} attachments must be an array`);let e=tt(((i=(r=t.flowData)==null?void 0:r.state)==null?void 0:i.nodes)??[],((c=(a=t.flowData)==null?void 0:a.state)==null?void 0:c.edges)??[],o.id);return n.map(u=>{if(typeof u!="string")throw new V("INVALID_EXPRESSION",`Node ${o.id} has an invalid attachment reference`);let p=e.find(g=>g.ref===u);if(!p)throw new V("OUT_OF_SCOPE",`Attachment "${u}" is not in this node's connection scope`);if(p.type!=="image"&&p.type!=="file")throw new V("UNKNOWN_OUTPUT",`Attachment "${u}" is not a binary output`);return p.type==="image"?u:null}).filter(u=>u!==null)}function Me(o,t){var s,r,i,a;let n=[],e={context:t.context??{},results:t.results??{},nodes:((r=(s=t.flowData)==null?void 0:s.state)==null?void 0:r.nodes)??[],edges:((a=(i=t.flowData)==null?void 0:i.state)==null?void 0:a.edges)??[],currentNodeId:o.id};for(let c of bo(o,t)){let u=q(c,e);if(u.missing)throw new V(u.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Attachment "${c}" did not produce a value`);if(!Array.isArray(u.value))throw new V("PATH_NOT_FOUND",`Attachment "${c}" must resolve to an image array`);n.push(...u.value)}return n}var Fo=ct({"../tools/composioDirectTool.ts":()=>import("./composioDirectTool-H3GSCIPY.js"),"../tools/composioTool.ts":()=>import("./composioTool-5LFWUQ7F.js"),"../tools/convertTempMessure.ts":()=>import("./convertTempMessure-5CAGRLBY.js"),"../tools/httpTool.ts":()=>import("./httpTool-5D2PQJKV.js"),"../tools/skillTool.ts":()=>import("./skillTool-AIOXPTAJ.js"),"../tools/tempTool.ts":()=>import("./tempTool-2RXAF56M.js"),"../tools/twitter.ts":()=>import("./twitter-OMDEG7T2.js"),"../tools/vectorize.ts":()=>import("./vectorize-UJXIDL2E.js")});var Do=ct({});async function jo(o,t,n,e){var g;let s=Array.isArray((g=n==null?void 0:n.data)==null?void 0:g.tools)?n.data.tools:[];if(s.length===0)return{};let r={},i=d=>{var R,T;let m=typeof(d==null?void 0:d.description)=="string"?d.description:"",l=d==null?void 0:d.inputSchema,f;try{let I=(l==null?void 0:l.shape)??(typeof((R=l==null?void 0:l._def)==null?void 0:R.shape)=="function"?l._def.shape():(T=l==null?void 0:l._def)==null?void 0:T.shape);I&&typeof I=="object"&&(f=I)}catch{}let y=f?Object.keys(f):[],h=m?`description="${m.length>120?m.slice(0,120)+"\u2026":m}"`:"description=(none)",w=y.length?`inputSchema={${y.join(", ")}}`:"inputSchema=(none)";return`${h} ${w}`},a=(()=>{let d=[],m=[],l=[],f=[];for(let h=0;h<s.length;h++){let w=s[h];!w||typeof w!="object"||typeof w.id!="string"?f.push(h):w.kind==="builtin"?d.push(w.id):w.kind==="skill"?l.push(w.id):w.kind==="http"||w.kind==="mcp"||w.kind==="composio"?m.push(w.id):f.push(h)}let y=[];return d.length&&y.push(`builtin[${d.join(", ")}]`),m.length&&y.push(`custom[${m.join(", ")}]`),l.length&&y.push(`skill[${l.join(", ")}]`),f.length&&y.push(`invalid@[${f.join(", ")}]`),y.join(" ")||"(none)"})();console.log(`[tools] node ${n.id} requested (${s.length}): ${a}`);let c=!1,u=async()=>{if(c&&o.toolDefs)return o.toolDefs;if(!o.env)return o.toolDefs=o.toolDefs||{},c=!0,o.toolDefs;try{let d=await wt(o.env),m={};for(let l of d)l&&l.id&&(m[l.id]=l);o.toolDefs=m}catch(d){e==null||e({type:"error:llmNodeRunner",content:`Failed to load custom tool defs: ${String(d)}`}),o.toolDefs=o.toolDefs||{}}return c=!0,o.toolDefs},p=[];for(let d=0;d<s.length;d++){let m=s[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"){e==null||e({type:"error:llmNodeRunner",content:`Invalid tool descriptor at index ${d}: expected { kind: 'http'|'mcp'|'composio'|'builtin'|'skill', id: string, params?: any }`});continue}let l=m;if(l.kind!=="builtin"){let y=(await u())[l.id];if(!y){console.error(`[tools] \u2717 custom '${l.id}': not found for tenant`),e==null||e({type:"error:llmNodeRunner",content:`custom tool '${l.id}' not found for this tenant`});continue}if(l.kind==="composio"){try{let w=await ye(y,o,t,e),R=Object.keys(w);for(let[T,I]of Object.entries(w))r[T]=I;console.log(`[tools] \u2713 composio '${l.id}' \u2192 ${R.length} tool(s)`)}catch(w){console.error(`[tools] \u2717 composio '${l.id}': ${String(w)}`),e==null||e({type:"error:llmNodeRunner",content:`Error loading composio tool '${l.id}': ${String(w)}`})}continue}if(l.kind==="skill"){if(y.kind!=="skill"){console.error(`[tools] \u2717 skill '${l.id}': row is of kind '${y.kind}', not 'skill'`),e==null||e({type:"error:llmNodeRunner",content:`tool '${l.id}' is not a skill`});continue}let w=y.name;if(r[w]){e==null||e({type:"warn:llmNodeRunner",content:`tool name collision on '${w}' \u2014 builtin/other already registered, skipping skill '${l.id}'`});continue}try{r[w]=we(y,o,t,e),p.push(y);let R=typeof y.execution=="string"?JSON.parse(y.execution):y.execution||{},T=Array.isArray(R.references)?R.references.map(I=>I==null?void 0:I.name):[];console.log(`[tools] \u2713 skill '${l.id}' \u2192 '${w}' (refs: ${T.join(", ")||"none"})`),e==null||e({type:"info:skill:registered",content:{skill:w,refCount:T.length,refs:T}})}catch(R){console.error(`[tools] \u2717 skill '${l.id}': ${String(R)}`),e==null||e({type:"error:llmNodeRunner",content:`Error loading skill tool '${l.id}': ${String(R)}`})}continue}let h=y.name;if(r[h]){e==null||e({type:"warn:llmNodeRunner",content:`tool name collision on '${h}' \u2014 builtin already registered, skipping custom tool '${l.id}'`});continue}try{let w=ht(y,o,t,e);r[h]=w,console.log(`[tools] \u2713 custom '${l.id}' \u2192 '${h}'`),console.log(`[tools] ${i(r[h])}`)}catch(w){console.error(`[tools] \u2717 custom '${l.id}': ${String(w)}`),e==null||e({type:"error:llmNodeRunner",content:`Error loading custom tool '${l.id}': ${String(w)}`})}continue}if(!ge[l.id]){console.error(`[tools] \u2717 builtin '${l.id}': not in registry`),e==null||e({type:"error:llmNodeRunner",content:`Tool '${l.id}' not found in registry`});continue}try{let f;try{f=await Fo(`../tools/${l.id}.ts`)}catch{f=await Do(`../tools/${l.id}.js`)}let y;if(f[l.id])y=f[l.id];else if(f.default)y=f.default;else if(f.create)y=f.create;else{let _=Object.values(f);_.length>0&&(y=_[0])}if(!y){e==null||e({type:"error:llmNodeRunner",content:`No factory export found for tool '${l.id}'`});continue}let h,w,R={};if(l.params&&typeof l.params=="object"){if(typeof l.params.description=="string"?h=l.params.description:l.params.description!==void 0&&(e==null||e({type:"error:llmNodeRunner",content:`Invalid description for tool '${l.id}' \u2014 must be a string`})),l.params.inputSchema!==void 0){let _=l.params.inputSchema;typeof _=="object"&&(typeof _.safeParse=="function"||_._def)?w=_:typeof _=="object"&&_!==null&&_.type==="object"&&_.properties?(w=le(_),w||e==null||e({type:"error:llmNodeRunner",content:`Invalid inputSchema for tool '${l.id}' \u2014 must be a Zod schema or JSON Schema object`})):e==null||e({type:"error:llmNodeRunner",content:`Invalid inputSchema for tool '${l.id}' \u2014 must be a Zod schema or JSON Schema object`})}l.params.defaults!==void 0?typeof l.params.defaults=="object"&&l.params.defaults!==null&&!Array.isArray(l.params.defaults)?R=l.params.defaults:(e==null||e({type:"error:llmNodeRunner",content:`Invalid defaults for tool '${l.id}' \u2014 must be an object`}),R={}):l.params.source!==void 0||l.params.target!==void 0?(e==null||e({type:"error:llmNodeRunner",content:`Invalid params for tool '${l.id}' \u2014 legacy top-level source/target not supported; use params.defaults instead`}),R={}):R={}}let T=y(o,t,R,e);h&&T&&typeof T=="object"&&(T.description=h),w&&T&&typeof T=="object"&&(T.inputSchema=w),r[l.id]=T;let I=[];h&&I.push("description"),w&&I.push("inputSchema"),Object.keys(R).length&&I.push(`defaults(${Object.keys(R).join(",")})`);let $=I.length?` [overrides: ${I.join(", ")}]`:"";console.log(`[tools] \u2713 builtin '${l.id}'${$}`),console.log(`[tools] ${i(T)}`)}catch(f){console.error(`[tools] \u2717 builtin '${l.id}': ${String(f)}`),e==null||e({type:"error:llmNodeRunner",content:`Error loading tool '${l.id}': ${String(f)}`});continue}}if(p.length>0)if(r.readSkillRef)e==null||e({type:"warn:llmNodeRunner",content:"tool name collision on 'readSkillRef' \u2014 builtin/other already registered, skipping readSkillRef tool"});else try{r.readSkillRef=he(o,p,t,e),console.log(`[tools] \u2713 registered readSkillRef tool for ${p.length} skill(s)`),e==null||e({type:"info:skill:readSkillRefRegistered",content:{skills:p.map(d=>d.name)}})}catch(d){console.error(`[tools] \u2717 failed to load readSkillRef tool: ${String(d)}`)}return r}async function qt(o,t,n,e,s,r,i){var _,F,H,M;`${t.id}`,e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let a=!1;try{let N=(_=n.flowData)==null?void 0:_.state;if(N&&N.edges&&N.nodes){let C=N.edges.filter(D=>D.source===t.id);if(C.length>0){let D=N.nodes.find(U=>U.id===C[0].target);D&&D.type==="answerNode"&&(a=!0)}}}catch(N){console.error("Error determining next node for streaming:",N)}let c=W(t.data.template,t,n,e,{sessionEnv:o});(!c||!c.trim())&&(c="Answer straight forward to the user, dont offer any other option to continue");let u=c,p=W(t.data.user_template||"",t,n,e,{sessionEnv:o}),g=N=>N&&Object.fromEntries(Object.keys(N).map(C=>[C,"[redacted]"])),d=o!=null&&o.secrets||o!=null&&o.userAuth?{...o,secrets:g(o.secrets),userAuth:g(o.userAuth)}:o,m=W(t.data.template,t,n,void 0,{sessionEnv:d})||u,l=W(t.data.user_template||"",t,n,void 0,{sessionEnv:d});e==null||e({type:`info:llmNodeRunner:${t.id}`,content:m}),e==null||e({type:`info:llmNodeRunner:${t.id}`,content:l});let f=(F=t==null?void 0:t.data)==null?void 0:F.window_size,y=Number(f);(!Number.isInteger(y)||y<=0)&&(y=5);let h=Me(t,n),w=$e(t,n);e==null||e({type:"info:llmNodeRunner:attachments",content:{nodeId:t.id,refs:Array.isArray((H=t.data)==null?void 0:H.attachments)?t.data.attachments:[],images:h.length,documents:w?1:0}});let T=(await((M=o.getMessages)==null?void 0:M.call(o))??[]).slice(-y),I=T.filter(N=>N&&typeof N.role=="string"&&typeof N.content=="string");I.length!==T.length&&console.warn(`Filtered ${T.length-I.length} invalid messages from history`);let $=Ho(I,p,h,w);await Lo(c,$,o.conn,e,t,a,s,n,r,o,i)}async function Lo(o,t,n,e,s,r,i,a,c,u,p){var d;let g=Date.now();if(!((d=u.env)!=null&&d.AI))throw new Error("AI binding is required for LLM node");return new Promise(async(m,l)=>{var C,D,U,L,x,k;let f,y={},h,w="none",R=!1,T,I=!1,$=!1,_=0,F=0,H=(C=s==null?void 0:s.data)==null?void 0:C.sendReasoning,M=H!==!1;try{let b=(D=s==null?void 0:s.data)==null?void 0:D.model,E=Array.isArray(b)?b[0]:b||"gpt_5_nano",A=ue(s==null?void 0:s.data),P=await et(E,u,A);if(!P)throw new Error(`Model '${E}' not found in registry`);f=P.modelHandle,y=P.effectiveParams||{},w=P.reasoning.kind;let O=Tt(P.reasoning,(U=s==null?void 0:s.data)==null?void 0:U.reasoningEffort);R=M&&me(P.reasoning);let X=typeof((L=s==null?void 0:s.data)==null?void 0:L.reasoningMaxTokens)=="number"?s.data.reasoningMaxTokens:void 0;h=xt(P.provider,{effort:O,exposeReasoning:R,maxTokens:X}),O&&(e==null||e({type:"info:llmNodeRunner:reasoningEffort",content:O})),console.log(`[reasoning] ${JSON.stringify({model:E,provider:P.provider,capability:P.reasoning,requestedEffort:((x=s==null?void 0:s.data)==null?void 0:x.reasoningEffort)??null,resolvedEffort:O??null,sendReasoning:M,exposeReasoning:R,providerOptions:h??null},null,2)}`);for(let K of P.paramAdjustments??[])e==null||e({type:"warn:llmNodeRunner",content:K});e==null||e({type:"info:llmNodeRunner:model",content:E}),e==null||e({type:"info:llmNodeRunner:generationParams",content:{...(k=s==null?void 0:s.data)!=null&&k.generationPreset?{preset:s.data.generationPreset}:{},...y,...w!=="none"?{reasoning:w,configuredSendReasoning:H,sendReasoning:M,exposeReasoning:R,...O?{effort:O}:{}}:{}}})}catch(b){throw e==null||e({type:"error:llmNodeRunner",content:`Model error: ${String(b)}`}),b}let N=await jo(u,a,s,e);console.log(`[tools] node ${s.id} loaded ${Object.keys(N).length}: ${Object.keys(N).join(", ")||"(none)"}`),e==null||e({type:"info:llmNodeRunner:toolsLoaded",content:{nodeId:s.id,tools:Object.keys(N)}});try{let b=Co({model:f,system:o,messages:t,stopWhen:(()=>{var K;let P=!!N.readSkillRef?10:5,O=Number(((K=s.data)==null?void 0:K.max_steps)??P),X=Number.isFinite(O)?Math.max(1,Math.min(30,O)):P;return Uo(X)})(),...Rt(y),...h?{providerOptions:h}:{},tools:N,onFinish:async A=>{var Gt,Yt;let P=A.text||"",O=A.reasoningText??((Gt=A.reasoning)==null?void 0:Gt.text)??"";if(console.log(`[reasoning] done: deltas=${_} chars=${F} result.reasoningText=${O.length} finishReason=${A.finishReason??"n/a"} reasoningTokens=${((Yt=A.usage)==null?void 0:Yt.reasoningTokens)??"n/a"}`),M&&R&&!I&&O&&n){I=!0;try{S(n,j.SERVER_REASONING_STREAM,O)}catch(eo){console.warn("Failed to send finished reasoning over connection",eo)}}let X={id:Eo(),role:"assistant",type:"text",content:P,ts:Date.now()};r&&(u.setMessages?await u.setMessages(X):e==null||e({type:"error:llmNodeRunner",content:"setMessages callback missing"})),n&&M&&I&&!$&&($=!0,S(n,j.SERVER_REASONING_STREAM_COMPLETE,JSON.stringify({}))),r&&n&&S(n,j.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({})),i==null||i((s==null?void 0:s.id)||"llm_result",P),e==null||e({type:"info:llmNodeRunner:onFinish",content:JSON.stringify(A)});let K=Date.now()-g,to=T?T-g:void 0;p==null||p({type:"llm_telemetry",payload:{nodeId:s.id,totalLatency:K,timeToFirstToken:to,model:A.response.modelId,usage:A.usage}}),p==null||p({type:"llm_result",payload:{result:A}})},onStepFinish:async A=>{let P=(O,X=200)=>{let K=typeof O=="string"?O:JSON.stringify(O);return K?K.length>X?`${K.slice(0,X)}\u2026(+${K.length-X})`:K:""};if(A.toolCalls&&A.toolCalls.length>0){for(let O of A.toolCalls)console.log(`[tools] \u2192 ${O.toolName}(${P(O.args??O.input)})`);e==null||e({type:`info:llmNodeRunner:toolCalls:${s.id}`,content:JSON.stringify(A.toolCalls)})}if(A.toolResults&&A.toolResults.length>0){for(let O of A.toolResults)console.log(`[tools] \u2190 ${O.toolName} \u2192 ${P(O.result??O.output)}`);e==null||e({type:`info:llmNodeRunner:toolResults:${s.id}`,content:JSON.stringify(A.toolResults)})}},experimental_onToolCallStart:A=>{var P;e==null||e({type:"tool:execution",content:{nodeId:s.id,toolName:(P=A==null?void 0:A.toolCall)==null?void 0:P.toolName,status:"start"}})},experimental_onToolCallFinish:A=>{var P,O;e==null||e({type:"tool:execution",content:{nodeId:s.id,toolName:(P=A==null?void 0:A.toolCall)==null?void 0:P.toolName,status:((O=A==null?void 0:A.toolOutput)==null?void 0:O.type)==="tool-error"?"error":"success"}})},onError:A=>{e==null||e({type:"error:llmNodeRunner",content:"Execution error"}),l(A)},onChunk:A=>{if(A.chunk.type==="reasoning-delta"){let O=A.chunk.text??A.chunk.delta??"";if(O&&(I=!0,_+=1,F+=O.length,_===1&&console.log("[reasoning] \u2713 first reasoning-delta received")),M&&n&&O)try{S(n,j.SERVER_REASONING_STREAM,O)}catch(X){console.warn("Failed to send reasoning chunk over connection",X)}return}if(A.chunk.type==="text-delta"){if(T||(T=Date.now()),n&&M&&I&&!$){$=!0;try{S(n,j.SERVER_REASONING_STREAM_COMPLETE,JSON.stringify({}))}catch(O){console.warn("Failed to send reasoning complete over connection",O)}}return}p==null||p({type:A.chunk.type,payload:{nodeId:s.id,chunk:A.chunk}});let P=`llm_chunk:${A.chunk.type}`;e==null||e({type:P,content:{...A}})}}),E=async()=>{let A="";for await(let P of b.fullStream)if(P.type==="text-delta"){if(A+=P.text,r&&n)try{S(n,j.SERVER_TEXT_STREAM,P.text)}catch(O){console.warn("Failed to send chunk over connection",O)}}else if(P.type==="finish-step"&&P.finishReason==="tool-calls"){if(r&&n&&A.trim())try{S(n,j.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({}))}catch(O){console.warn("Failed to flush text segment over connection",O)}A=""}};await Promise.all([b,E()]),m(),e==null||e({type:"node:execution",content:{nodeId:s.id,nodeType:s.type,status:"success"}})}catch(b){e==null||e({type:"node:execution",content:{nodeId:s.id,nodeType:s.type,status:"error",error:String(b)}}),l(b)}})}function Ho(o,t,n,e){let s=!!(n&&n.length>0),r=!!e,i=s||r,c=o.length>0&&o[o.length-1].role==="user"?o[o.length-1]:void 0,u=p=>{let g=[],d="";if(r&&(d+=`[Attached files]
|
|
15
|
-
${e}
|
|
16
|
-
[End of attached files]
|
|
17
|
-
|
|
18
|
-
`),p&&(d+=p),d&&g.push({type:"text",text:d}),s)for(let m of n)g.push({type:"image",image:m.data,mimeType:m.mimeType});return g};return t&&c&&c.content===t?[...o.slice(0,-1).map(g=>({role:g.role,content:g.content})),{role:"user",content:u(t)}]:t?[...o.map(p=>({role:p.role,content:p.content})),{role:"user",content:u(t)}]:i&&c?[...o.slice(0,-1).map(g=>({role:g.role,content:g.content})),{role:"user",content:u(c.content)}]:o.map(p=>({role:p.role,content:p.content}))}async function Jt(o,t,n,e,s,r,i){var p,g,d,m,l,f,y;console.log(`**** MEMO Node id: ${t.id} ****`),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let a="",c=!1,u=Date.now();try{e==null||e({type:"info:memoNodeRunner",content:"Starting memo node execution"});let h=String(((p=t.data)==null?void 0:p.query_key)||"user_input"),w=q(h,{context:n.context??{},results:n.results??{},nodes:((d=(g=n.flowData)==null?void 0:g.state)==null?void 0:d.nodes)??[],edges:((l=(m=n.flowData)==null?void 0:m.state)==null?void 0:l.edges)??[],currentNodeId:t.id});if(w.missing)throw new Error(`Memo query "${h}" did not produce a value`);if(!o.env||!o.ctx){e==null||e({type:"error:memoNodeRunner",content:"Missing env or ctx"}),s==null||s(t.id,a);return}if(!t.data.rag_id){e==null||e({type:"error:memoNodeRunner",content:"Missing rag_id"}),s==null||s(t.id,a);return}let R=String(w.value??"");e==null||e({type:"info:memoNodeRunner",content:`Query text: ${R}`}),e==null||e({type:"info:memoNodeRunner",content:"Generating embedding for query"});let T=await Bt(o,R,!0);e==null||e({type:"info:memoNodeRunner",content:`Embedding generated successfully, length: ${T.data[0].length}`});let I=Array.isArray(t.data.rag_id)?t.data.rag_id:[t.data.rag_id],$=[];for(let M of I){e==null||e({type:"info:memoNodeRunner",content:`Executing RAG query with namespace: ${M}`});let N=await o.env[`VDB_${(f=n.flowData)==null?void 0:f.tenant}_1024`].query(T.data[0],{namespace:M,topK:t.data.topk,returnMetadata:"all"});e==null||e({type:"info:memoNodeRunner",content:`RAG query completed for namespace ${M}, matches: ${((y=N.matches)==null?void 0:y.length)||0}`}),Array.isArray(N.matches)&&$.push(...N.matches)}let _=Date.now()-u;a=$.map(M=>{var N;return(N=M.metadata)==null?void 0:N.value}).filter(M=>typeof M=="string").join(`
|
|
19
|
-
|
|
20
|
-
`),i==null||i({type:"memo_search",payload:{nodeId:t.id,searchLatencyMs:_,retrievedContext:a}}),e==null||e({type:"info:memoNodeRunner",content:`Context retrieval complete, length: ${a.length}, preview: ${a.substring(0,200)}...`}),e==null||e({type:"info:memoNodeRunner",content:"Memo node execution completed successfully"}),c=!0}catch(h){throw console.error("Error processing MemoNode:",h),e==null||e({type:"error:memoNodeRunner",content:`Memo node execution failed: ${h}`}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"error",error:String(h)}}),h}finally{c&&(s==null||s(t.id,a),e==null||e({type:"info:memoNodeRunner",content:`onResult called with context length: ${a.length}`}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"success"}}))}}async function zt(o,t,n,e,s,r,i){var p,g,d,m,l,f,y,h;console.log(`**** START Node ${t.id} ****`),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}}),e==null||e({type:"info:flow",content:n}),i==null||i({type:"start_node",payload:{userMessage:(p=n==null?void 0:n.context)==null?void 0:p.user_input}});let a=((g=t.data)==null?void 0:g.allow_images)!==!1,c=((d=t.data)==null?void 0:d.allow_documents)!==!1;!a&&(n!=null&&n.context)&&(n.context.user_images=[],r==null||r({...n})),!c&&(n!=null&&n.context)&&(n.context.files="",r==null||r({...n}));let u={};for(let w of v(t.data))u[w.name]=(m=n==null?void 0:n.context)==null?void 0:m[w.name];s==null||s(t.id,{...u,user_input:(l=n==null?void 0:n.context)==null?void 0:l.user_input,images:a?(f=n==null?void 0:n.context)==null?void 0:f.user_images:[],files:c?(y=n==null?void 0:n.context)==null?void 0:y.files:"",memory:((h=n==null?void 0:n.context)==null?void 0:h.memory)??""}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"success"}})}function be(o,t,n){let e=t;async function s(){var u;if(await((u=n==null?void 0:n.shouldStop)==null?void 0:u.call(n)))throw new $t}async function r(u){let p=u;for(e.executedNodes=e.executedNodes||[],e.context=e.context||{},e.results=e.results||{};p&&p.id;)await s(),await i(p),await s(),p=Ko(p,e.flowData,e)}async function i(u){var l;let p=c[u.type];if(!p){(l=n==null?void 0:n.onError)==null||l.call(n,`Unknown node type: ${u.type}`);return}let g=f=>{var y;return(y=n==null?void 0:n.onServerEvent)==null?void 0:y.call(n,{...f,ts:Date.now()})},d=f=>{var y,h;if((y=n==null?void 0:n.onTelemetry)==null||y.call(n,f),f.type==="llm_telemetry"||f.type==="class_telemetry"||f.type==="memory_update"){let w=(h=f.payload)==null?void 0:h.usage;w&&(e.tokenUsage=e.tokenUsage||{promptTokens:0,completionTokens:0,totalTokens:0},e.tokenUsage.promptTokens+=w.promptTokens||0,e.tokenUsage.completionTokens+=w.completionTokens||0,e.tokenUsage.totalTokens+=w.totalTokens||0)}};return await p(o,u,e,g,(f,y)=>{e.results[f]=y},n==null?void 0:n.onChangeState,d)}let a=async u=>{var m,l,f,y,h,w,R;let p=Date.now(),g="completed",d;try{await s();let T=typeof u=="string"?lt(u):u,I=(T==null?void 0:T.text)||"",$=(T==null?void 0:T.images)||[],_=(T==null?void 0:T.documents)||[],F=await Ae(_,o.env),H=F.length>0?F.map(C=>`--- file: ${C.name} ---
|
|
21
|
-
${C.text}`).join(`
|
|
22
|
-
|
|
23
|
-
`):"";e.context={user_input:I,user_images:$,files:H},e.tokenUsage={promptTokens:0,completionTokens:0,totalTokens:0},(m=n==null?void 0:n.onServerEvent)==null||m.call(n,{type:"agent:start",content:"Execution started",timestamp:Date.now()});let{startNode:M,error:N}=So(e.flowData);if(!M)g="failed",d=N||"Flow Format Error",(l=n==null?void 0:n.onError)==null||l.call(n,d);else{let C=v(M.data),{values:D,errors:U}=Zt(C,T==null?void 0:T.inputs);if(U.length>0)return g="failed",d=`Invalid flow inputs: ${U.join("; ")}`,(f=n==null?void 0:n.onError)==null||f.call(n,d),{status:g,error:d};if(e.context={...e.context,inputs:D,...D},e.context.user_input||(e.context.user_input=I),ft(M.data)){let L=dt(mt(M.data));e.context.memory=pt(o.agentMemory||"",L).content}else e.context.memory="";await r(M),(y=n==null?void 0:n.onServerEvent)==null||y.call(n,{type:"agent:telemetry",content:{durationMs:Date.now()-p,tokenUsage:e.tokenUsage},timestamp:Date.now()})}}catch(T){T instanceof $t?(g="stopped",d=T.message,(h=n==null?void 0:n.onServerEvent)==null||h.call(n,{type:"agent:stopped",content:d,timestamp:Date.now()})):(g="failed",d=T instanceof Error?T.message:"Agent execution failed",(w=n==null?void 0:n.onError)==null||w.call(n,d))}finally{(R=n==null?void 0:n.onServerEvent)==null||R.call(n,{type:"agent:complete",content:{status:g,durationMs:Date.now()-p},timestamp:Date.now()})}return{status:g,error:d}},c={startNode:zt,classifierNode:Xt,llmNode:qt,memoNode:Jt,answerNode:Ut,apiNode:jt,toolNode:St};return a}var $t=class extends Error{constructor(){super("Stopped by user"),this.name="FlowExecutionStoppedError"}};function So(o){var p,g;let t=(o==null?void 0:o.state)??o;if(!t||!t.nodes||!t.edges||t.edges.length===0)return{error:"Flow is missing state, nodes, or edges."};if(t.schemaVersion!==3)return{error:"Flow uses an unsupported variable schema. Recreate it in Agent Design 3.0."};for(let d of t.nodes){if(((p=d.data)==null?void 0:p.varMapping)!==void 0)return{error:`Flow uses removed varMapping on node ${d.id}.`};let m=re(d);if(m.length>0)return{error:m[0]}}let n=t.nodes.filter(d=>d.type==="startNode");if(n.length!==1)return{error:`Flow must include exactly one START node, found ${n.length}.`};let e=n[0],s=t.nodes.filter(d=>d.type==="answerNode");if(s.length===0)return{error:"Flow must include at least one ANSWER node."};let r=new Map;for(let d of t.edges)r.has(d.source)||r.set(d.source,[]),r.get(d.source).push(d.target);let i=new Map;for(let d of t.edges)i.has(d.target)||i.set(d.target,[]),i.get(d.target).push(d.source);let a=Pe(e.id,r),c=new Set;for(let d of s){let m=Pe(d.id,i);for(let l of m)c.add(l)}let u=[];for(let d of a)if(!c.has(d)){let m=t.nodes.find(l=>l.id===d);if(m){let l=((g=m.data)==null?void 0:g.label)||"";u.push(`${d}(${l},${m.type})`)}}return u.length>0?{error:`The following nodes reachable from START do not lead to any ANSWER node: ${u.join(", ")}`}:{startNode:e}}function Pe(o,t){let n=new Set,e=[o];for(n.add(o);e.length>0;){let s=e.shift(),r=t.get(s)||[];for(let i of r)n.has(i)||(n.add(i),e.push(i))}return n}function Vo(o,t){var n;return((n=o.state)==null?void 0:n.nodes.find(e=>e.id===t))||null}function Ko(o,t,n){var a;let e=t==null?void 0:t.state;if(!e)return null;let s=e.edges.filter(c=>c.source===o.id);if(s.length===0)return null;let r=s[0].target;if(o.type==="classifierNode"&&((a=n==null?void 0:n.context)!=null&&a.classified_id)){let c=n.context.classified_id,u=s.find(p=>p.sourceHandle===`source-${c}`);u?r=u.target:console.log(`No matching edge, falling back to first: ${r}`)}return Vo(t,r)}import{streamText as Xo}from"ai";var qo={short:`Up to ${ut("short")} markdown lines (one fact or bullet per line). Keep constraints, working agreements, and the outline of anything already settled.`,medium:`Up to ${ut("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 ${ut("long")} markdown lines. Same as medium, with one-line context on a decision or plan block when later turns will need it.`},Jo=12,zo=400,Fe=700;function Wo(o,t=Jo){let n=o.filter(s=>s.role==="user"||s.role==="assistant").slice(-t),e=[];for(let s of n){let r=typeof s.content=="string"?s.content:JSON.stringify(s.content??""),i=s.role==="assistant"?Fe:zo,a=r.trim().replace(/\s+/g," ").slice(0,i);a&&e.push(`${s.role==="user"?"U":"A"}: ${a}`)}return e.join(`
|
|
24
|
-
`)}function Go(o){let t=o??{},n=t.promptTokens??t.inputTokens??0,e=t.completionTokens??t.outputTokens??0,s=t.totalTokens??n+e;return{promptTokens:n,completionTokens:e,totalTokens:s}}function Yo(o){var t;for(let n=o.length-1;n>=0;n--)if(((t=o[n])==null?void 0:t.role)==="assistant"&&typeof o[n].content=="string")return o[n].content;return""}function Bo(o){var s,r;let t=((s=o.flowData)==null?void 0:s.state)??o.flowData,n=(t==null?void 0:t.nodes)??[],e=[];for(let i of n){if(i.type!=="answerNode")continue;let a=(r=o.results)==null?void 0:r[i.id];a!=null&&e.push(typeof a=="string"?a:JSON.stringify(a))}return e.join(`
|
|
25
|
-
`)}function Zo(o){var e;let t=["You maintain a KEYPOINT memory for one agent session so later turns can continue without re-asking.",`Hard limit: ${o.maxTokens} tokens.`,qo[o.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:",'"""',o.previous.trim()||"(empty)",'"""',"","Recent session (for extraction only; do not transcribe):",'"""',((e=o.recentTurns)==null?void 0:e.trim())||"(none)",'"""',"","This turn:",`User said: ${o.userText.trim()||"(empty)"}`,o.assistantText.trim()?`Latest assistant reply (extract accepted plan/facts only): ${o.assistantText.trim().slice(0,Fe)}`:"",o.answers.trim()?`Answer outputs:
|
|
26
|
-
${o.answers.trim()}`:""].filter(Boolean).join(`
|
|
27
|
-
`);return{system:t,user:n}}function Qo(o){return se(o.previous,ne(o.userText),o.maxTokens)}async function vo(o){let t="",n;for await(let e of o.fullStream)e.type==="text-delta"&&(t+=e.text??e.delta??""),e.type==="error"&&(n=e.error instanceof Error?e.error.message:String(e.error??"stream error"));return{text:t.trim(),error:n}}async function tn(o){if(o.fullStream&&typeof o.fullStream[Symbol.asyncIterator]=="function")return vo({fullStream:o.fullStream});try{return{text:((typeof o.text=="string"?o.text:await o.text)||"").trim()}}catch(t){return{text:"",error:t instanceof Error?t.message:String(t)}}}async function De(o){var u;let t=_t(o.engineState);if(!t)return{status:"skipped",reason:"start_node_missing"};if(!ft(t))return{status:"skipped",reason:"memory_disabled"};let n=mt(t),e=dt(n),s=te(t),r=Pt(o.previousContent||""),i=Yo(o.messages),a=Bo(o.engineState),c=p=>{let g=Qo({previous:r,userText:o.userText,maxTokens:e});return{status:"written",content:g,truncated:!1,modelId:s,fallback:!0,error:g?void 0:p}};try{let p=await et(s,o.sessionEnv,{maxOutputTokens:e});if(!p)throw new Error(`Memory model '${s}' not found in registry`);let g=ee(n,(u=p.reasoning)==null?void 0:u.kind),{system:d,user:m}=Zo({previous:r,userText:o.userText,assistantText:i,answers:a,length:n,maxTokens:e,recentTurns:Wo(o.messages)}),l=Tt(p.reasoning),f=xt(p.provider,{effort:l,exposeReasoning:!1,maxTokens:g}),y=Xo({model:p.modelHandle,system:d,messages:[{role:"user",content:m}],...Rt({...p.effectiveParams??{},maxOutputTokens:g}),...f?{providerOptions:f}:{}}),h=await tn(y),w=Go(await y.usage),R=Pt(h.text);if(oe(R)&&(R=""),!R)return{...c(h.error||"Memory model returned empty text"),usage:w};let T=pt(R,e);return{status:"written",content:T.content,truncated:T.truncated,usage:w,modelId:s}}catch(p){let g=p instanceof Error?p.message:"Memory update failed";return console.error("Memory update failed:",p),c(g)}}async function Ue(o,t){var e,s;let n=(e=t==null?void 0:t.flowData)==null?void 0:e.flowId;if(!(o!=null&&o.HX_CORE_URL)||!n)return{engineState:t,refreshed:!1};try{let r=await Q(n,o),i={...t,flowData:{...r,tenant:t.flowData.tenant,flowId:n,chatId:t.flowData.chatId}},a=r==null?void 0:r.stateVersion,c=typeof a=="number"&&a!==((s=t.flowData)==null?void 0:s.stateVersion);return{engineState:i,refreshed:c}}catch(r){return console.error(`[flowRefresh] fetch failed for flow ${n}:`,r),{engineState:t,refreshed:!1}}}function Ce(o,t){return!o||!o.HX_ORA_URL||!o.HX_API_KEY?Promise.resolve():fetch(`${o.HX_ORA_URL}/internal/sessions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:o.HX_API_KEY},body:JSON.stringify(t)}).catch(n=>{console.error("[sessionIndex] failed to index session",n)})}function Ee(){let o={};return{add(t,n){o[t]=n},hasOutputs(){return Object.keys(o).length>0},answerNodeIds(){return Object.keys(o)},snapshotData(){let t=Object.entries(o);return t.length===1?t[0][1]:Object.fromEntries(t)}}}function en(o){return!!(o!=null&&o.HX_ORA_URL)&&!!(o!=null&&o.HX_API_KEY)}async function je(o,t){if(!en(o))throw new Error("Structured outputs require HX_ORA_URL and HX_API_KEY");let n=await fetch(`${o.HX_ORA_URL}/internal/outputs/${encodeURIComponent(t.flowId)}/${encodeURIComponent(t.sessionId)}`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:o.HX_API_KEY},body:JSON.stringify({runId:t.runId,createdAt:t.createdAt,data:t.data,answerNodeIds:t.answerNodeIds})});if(!n.ok){let e=await n.text().catch(()=>"");throw new Error(`Structured output persistence failed with ${n.status}${e?`: ${e}`:""}`)}}var Le=async(o,t)=>{fetch(`${t.DW_URL}/q/telemetry/event`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)}),`${JSON.stringify(o)}`};async function it(o,t){var r,i;let n=o.id||o.name||"",[e,s]=String(n).split("::");if(!e||!s)return null;try{let c=(r=(await G(e,t)).metadata)==null?void 0:r.tenant,u=await Q(e,t),p=(i=o.state)==null?void 0:i.user,g={flowData:{...u,tenant:c,flowId:e,chatId:s},executedNodes:[],context:p?{user:p}:{}};return o.setState({...o.state,engineState:g}),g}catch(a){return console.error("Failed to initialize engine state:",a),null}}async function at(o){var _,F,H,M,N,C,D,U,L;let{agent:t,env:n,ctx:e,payload:s,connection:r}=o,i=Date.now(),a=[],c=o.runId?Ee():void 0,u=async()=>await z(t),p=async x=>{await Re(t,x)},g=async x=>{if(t.state.modelsCache&&t.state.modelsCache[x])return t.state.modelsCache[x];try{let{fetchOraModel:k}=await import("./oraApi-4O3W5LXD.js"),b=await k(x,n);return t.setState({...t.state,modelsCache:{...t.state.modelsCache||{},[x]:b}}),b}catch(k){throw console.error(`Error fetching model ${x}:`,k),k}},d={id:on(),role:"user",type:"text",content:s.text,images:s.images,ts:Date.now()};await p(d);let m={onChangeState:x=>{t.setState({...t.state,engineState:x})},onServerEvent:async x=>{var k;await((k=o.onServerEvent)==null?void 0:k.call(o,x)),a.push(x)},onTelemetry:async x=>{var k,b,E,A,P,O;await Le({...x,userId:o.resolveUserId(),tenant:((b=(k=t.state.engineState)==null?void 0:k.flowData)==null?void 0:b.tenant)||"",flowId:((A=(E=t.state.engineState)==null?void 0:E.flowData)==null?void 0:A.flowId)||"",sessionId:((O=(P=t.state.engineState)==null?void 0:P.flowData)==null?void 0:O.chatId)||""},n)},onError:x=>{var k;(k=o.onError)==null||k.call(o,x),t.setState({...t.state,error:x})},shouldStop:o.shouldStop},l=t.state.engineState?{...t.state.engineState}:null;if(l){let{engineState:x,refreshed:k}=await Ue(n,l);l=x,k&&t.setState({...t.state,engineState:l,modelsCache:{}})}else if(l=await it(t,n),!l){let x="Failed to initialize agent";return m.onError(x),{status:"failed",error:x}}let f=o.secrets;if(!f||Object.keys(f).length===0){let x=(_=l.flowData)==null?void 0:_.tenant;f=x?await kt(n,x):{},(F=o.onSecretsLoaded)==null||F.call(o,f)}let y=o.user??t.state.user??void 0;y&&!((H=l.context)!=null&&H.user)&&(l.context={...l.context||{},user:y});let h={env:n,ctx:e,conn:r,getMessages:u,setMessages:p,getOraModel:g,secrets:f,userAuth:o.userAuth,user:y,composioSessions:o.composioSessions,publicOrigin:o.publicOrigin,skillRefCache:o.skillRefCache,runId:o.runId,outputCollector:c,agentMemory:typeof((M=t.state.memory)==null?void 0:M.content)=="string"?t.state.memory.content:""},w=await be(h,l,m)(s),R=t.state.engineState??l;if(w.status==="completed")try{let x=await De({sessionEnv:h,engineState:R,previousContent:typeof((N=t.state.memory)==null?void 0:N.content)=="string"?t.state.memory.content:"",userText:s.text||"",messages:await u()});if(x.status==="skipped")await m.onServerEvent({type:"agent:memory",content:{skipped:!0,reason:x.reason},timestamp:Date.now()});else if(!x.content.trim())await m.onServerEvent({type:"agent:memory",content:{updated:!1,empty:!0,error:x.error,fallback:x.fallback},timestamp:Date.now()});else{let k={promptTokens:((C=R.tokenUsage)==null?void 0:C.promptTokens)??0,completionTokens:((D=R.tokenUsage)==null?void 0:D.completionTokens)??0,totalTokens:((U=R.tokenUsage)==null?void 0:U.totalTokens)??0};x.usage&&(k.promptTokens+=x.usage.promptTokens,k.completionTokens+=x.usage.completionTokens,k.totalTokens+=x.usage.totalTokens),R={...R,tokenUsage:k},t.setState({...t.state,engineState:R,memory:{content:x.content,updatedTs:Date.now(),...x.error?{lastError:x.error}:{},...x.fallback?{fallback:!0}:{}}}),await m.onTelemetry({type:"memory_update",payload:{model:x.modelId,truncated:x.truncated,usage:x.usage,fallback:x.fallback,error:x.error}}),await m.onServerEvent({type:"agent:memory",content:{updated:!0,truncated:x.truncated,fallback:x.fallback,error:x.error},timestamp:Date.now()})}}catch(x){let k=x instanceof Error?x.message:"Memory update failed";console.error("Memory update failed:",x),await m.onServerEvent({type:"agent:memory",content:{error:k},timestamp:Date.now()})}if(w.status==="completed"&&o.runId&&(c!=null&&c.hasOutputs())){let{flowId:x,chatId:k}=R.flowData??{};if(!x||!k)w={status:"failed",error:"Structured output persistence requires flowId and sessionId"};else try{await je(n,{flowId:x,sessionId:k,runId:o.runId,createdAt:new Date(i).toISOString(),data:c.snapshotData(),answerNodeIds:c.answerNodeIds()});let b={...R.results||{}};for(let E of c.answerNodeIds())b[E]={...b[E]||{},persisted:!0,runId:o.runId};R={...R,results:b},t.setState({...t.state,engineState:R})}catch(b){let E=b instanceof Error?b.message:"Structured output persistence failed";m.onError(E),await m.onServerEvent({type:"error:answer-output",content:{runId:o.runId,error:E},timestamp:Date.now()}),w={status:"failed",error:E}}}let{tenant:T,flowId:I,chatId:$}=R.flowData??{};return T&&I&&$&&e.waitUntil(Ce(n,{id:`${I}::${$}`,tenant:T,flowId:I,sessionId:$,userId:o.resolveUserId(),title:(L=s.text)==null?void 0:L.slice(0,120),turnTs:i,events:a})),t.setState({...t.state,lastUpdated:new Date}),{status:w.status,error:w.error,engineState:R}}import{nanoid as nn}from"nanoid";function sn(o){let t=o.headers.get("X-User-Payload");if(!t)return null;try{let n=JSON.parse(t),e=typeof(n==null?void 0:n.email)=="string"?nt(n.email):null;return e?{...n,email:e}:null}catch{return null}}async function He(o,t,n,e){var s;try{let r=await t.json(),i=r.message;if(!i||typeof i!="string")return new Response(JSON.stringify({error:"Invalid message"}),{status:400,headers:{"content-type":"application/json"}});let a=typeof r.userId=="string"?nt(r.userId):null,c=sn(t),u=c==null?void 0:c.email;c?o.setState({...o.state,user:c,injectedUserId:u}):a&&!((s=o.state.user)!=null&&s.email)&&o.setState({...o.state,injectedUserId:a});let p=()=>u??a??o.state.injectedUserId??void 0;o.skillRefCache||(o.skillRefCache=new Map);let g=r.inputs&&typeof r.inputs=="object"?r.inputs:void 0;if(!o.state.engineState&&!await it(o,n))return new Response(JSON.stringify({error:"Failed to initialize agent"}),{status:500,headers:{"content-type":"application/json"}});let d=`run-${nn(12)}`;await o.registerManualRun(d,i,p()),await rt(n,d).catch(y=>{console.warn(`[AgentHTTP] could not mark manual run ${d} as running`,y)});let m;try{m=await at({agent:o,env:n,ctx:e,payload:{text:i,inputs:g},skillRefCache:o.skillRefCache,user:c??void 0,resolveUserId:p,runId:d,shouldStop:()=>o.isRunStopRequested(d)}),e.waitUntil(o.completeManualRun(d,m.status==="completed"?"succeeded":m.status==="stopped"?"skipped":"failed",m.error))}finally{await o.clearRunStopRequest(d)}if(m.status==="failed")return new Response(JSON.stringify({error:m.error||"Agent execution failed"}),{status:500,headers:{"content-type":"application/json"}});if(m.status==="stopped")return new Response(JSON.stringify({error:m.error||"Stopped by user"}),{status:409,headers:{"content-type":"application/json"}});let f=(await z(o)).reverse().find(y=>y.role==="assistant");return new Response(JSON.stringify({answer:(f==null?void 0:f.content)||""}),{headers:{"content-type":"application/json"}})}catch(r){return new Response(JSON.stringify({error:r.message}),{status:500,headers:{"content-type":"application/json"}})}}async function Se(o){try{return await It(o),o.skillRefCache&&o.skillRefCache.clear(),o.setState({...o.state,error:"",engineState:void 0,modelsCache:{},lastUpdated:new Date}),new Response(JSON.stringify({success:!0,messages:[]}),{headers:{"content-type":"application/json"}})}catch(t){return new Response(JSON.stringify({error:t.message}),{status:500,headers:{"content-type":"application/json"}})}}var Ve="trigger:nonce:",cn=900*1e3,Wt="run:stop:",Ke=class extends rn{initialState={user:void 0,injectedUserId:null,sessionId:null,lastUpdated:null,modelsCache:{},memory:void 0};resolveSessionUserId(){var t;return((t=this.state.user)==null?void 0:t.email)??this.state.injectedUserId??void 0}secrets=Object.freeze({});userAuth={};composioSessions={};skillRefCache=new Map;publicOrigin;async inspectPersistedSession(t){return t==="state"?{state:this.state}:t==="memory"?{memory:this.state.memory??null}:{messages:await z(this)}}async requestRunStop(t){return t!=null&&t.trim()?(await this.ctx.storage.put(`${Wt}${t}`,Date.now()),{accepted:!0}):{accepted:!1}}async isRunStopRequested(t){return!!await this.ctx.storage.get(`${Wt}${t}`)}async clearRunStopRequest(t){await this.ctx.storage.delete(`${Wt}${t}`)}async onRequest(t){let n=new URL(t.url);if(n.pathname.endsWith("/state"))return new Response(JSON.stringify(this.state),{headers:{"content-type":"application/json"}});if(n.pathname.endsWith("/history")){let e=await z(this);return new Response(JSON.stringify(e),{headers:{"content-type":"application/json"}})}return t.method==="POST"&&n.pathname.endsWith("/message")?He(this,t,this.env,this.ctx):t.method==="DELETE"&&n.pathname.endsWith("/clear")?Se(this):new Response("Ready to assist.")}async onConnect(t,n){var d,m,l,f,y;let[e,s]=t.server.split("::"),i=(d=(await G(e,this.env)).metadata)==null?void 0:d.tenant;this.secrets=await kt(this.env,i),this.userAuth={},this.composioSessions={},this.publicOrigin=void 0;let a=null;if(n.request){try{this.publicOrigin=new URL(n.request.url).origin}catch{}let h=n.request.headers.get("X-User-Payload");if(h)try{a=JSON.parse(h)}catch(w){console.warn("Failed to parse X-User-Payload",w)}}let c=await Q(e,this.env);this.setState({...this.state,user:a||null,sessionId:s,engineState:{flowData:{...c,tenant:i,flowId:e,chatId:s},executedNodes:[],context:a?{user:a}:{}}}),a||console.warn("[AgentDO] WebSocket connected without authenticated user \u2014 Composio manual auth requires login (access_token on socket URL)");let u=await z(this);S(t,j.SERVER_HISTORY,JSON.stringify({messages:u}));let g=(((m=c==null?void 0:c.state)==null?void 0:m.nodes)??(c==null?void 0:c.nodes)??[]).find(h=>h.type==="startNode");if(g){let h={allow_images:((l=g.data)==null?void 0:l.allow_images)??!1,allow_documents:((f=g.data)==null?void 0:f.allow_documents)??!1,greeting:(y=g.data)==null?void 0:y.greeting};S(t,j.SERVER_CONFIG,JSON.stringify(h))}}async onMessage(t,n){if(typeof n!="string")return;let e=n.indexOf(":");if(e===-1)return;let s=n.substring(0,e),r=n.substring(e+1);if(!s||!r)return;let a={[j.USER_MESSAGE]:c=>this.onUserMessage(t,c),[j.USER_CLEAR_HISTORY]:()=>this.onClearHistory(t),[j.USER_AUTH]:c=>this.onUserAuth(t,c),[j.USER_IDENTITY]:c=>this.onUserIdentity(t,c)}[s];a&&await a(r)}async onUserMessage(t,n){let e=lt(n),s=`run-${an(12)}`;await this.registerManualRun(s,e.text),await rt(this.env,s).catch(r=>{console.warn(`[AgentDO] could not mark manual run ${s} as running`,r)});try{let r=await at({agent:this,env:this.env,ctx:this.ctx,payload:e,connection:t,secrets:this.secrets,userAuth:this.userAuth,composioSessions:this.composioSessions,publicOrigin:this.publicOrigin,skillRefCache:this.skillRefCache,user:this.state.user,resolveUserId:()=>this.resolveSessionUserId(),runId:s,shouldStop:()=>this.isRunStopRequested(s),onServerEvent:i=>{S(t,j.SERVER_EVENT,JSON.stringify(i))},onError:i=>{S(t,j.SERVER_ERROR,i)},onSecretsLoaded:i=>{this.secrets=i}});this.ctx.waitUntil(this.completeManualRun(s,r.status==="completed"?"succeeded":r.status==="stopped"?"skipped":"failed",r.error))}finally{await this.clearRunStopRequest(s)}}registerManualRun(t,n,e){var c;let{tenant:s,flowId:r,chatId:i}=((c=this.state.engineState)==null?void 0:c.flowData)??{};if(!s||!r||!i)return Promise.resolve();let a=xe(e||this.resolveSessionUserId(),i);return Ie(this.env,{id:t,tenant:s,flowId:r,userId:a,sessionId:i,label:n==null?void 0:n.slice(0,120)})}completeManualRun(t,n,e){return At(this.env,t,{status:n,error:e})}async enqueueTrigger(t){var s;if(!(t!=null&&t.runId)||!(t!=null&&t.flowId))return{queued:!1};if(t.nonce&&!await this.claimTriggerNonce(t.nonce))return console.warn(`[AgentDO] rejected replayed trigger nonce ${t.nonce}`),{queued:!1,duplicate:!0};let n=t.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",t)}}async claimTriggerNonce(t){let n=`${Ve}${t}`;if(await this.ctx.storage.get(n))return!1;let e=Date.now();await this.ctx.storage.put(n,e);let r=[...(await this.ctx.storage.list({prefix:Ve})).entries()].filter(([,i])=>e-i>cn).map(([i])=>i);return r.length>0&&await this.ctx.storage.delete(r),!0}async processTrigger(t){if(!(await rt(this.env,t.runId)).claimed){console.warn(`[AgentDO] activation ${t.activationId} skipped \u2014 run ${t.runId} already claimed`);return}try{this.state.engineState||await it(this,this.env);let e=v(_t(this.state.engineState)),s=Qt(e,t.inputs||{},t.label),r=await at({agent:this,env:this.env,ctx:this.ctx,payload:{text:s,inputs:t.inputs||{}},secrets:this.secrets,composioSessions:this.composioSessions,skillRefCache:this.skillRefCache,resolveUserId:()=>t.runAsUserId||this.resolveSessionUserId(),runId:t.runId,shouldStop:()=>this.isRunStopRequested(t.runId),onSecretsLoaded:i=>{this.secrets=i}});await At(this.env,t.runId,{status:r.status==="completed"?"succeeded":r.status==="stopped"?"skipped":"failed",error:r.error})}catch(e){let s=e instanceof Error?e.message:"Trigger execution failed";throw await At(this.env,t.runId,{status:"failed",error:s}),e}finally{await this.clearRunStopRequest(t.runId)}}async onUserIdentity(t,n){let e=nt(n);if(!e){S(t,j.SERVER_ERROR,"Invalid identity payload");return}this.setState({...this.state,injectedUserId:e}),S(t,j.SERVER_EVENT,JSON.stringify({type:"info:identity",content:{set:!0}}))}async onUserAuth(t,n){let e=vt(n);if(!e){S(t,j.SERVER_ERROR,"Invalid auth payload");return}let s=e.value.trim();s===""?delete this.userAuth[e.name]:this.userAuth[e.name]=e.value,S(t,j.SERVER_EVENT,JSON.stringify({type:"info:auth",content:{name:e.name,set:s!==""}}))}async onClearHistory(t){await It(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}),t&&S(t,j.SERVER_HISTORY,JSON.stringify({messages:[]}))}async onStart(){`${JSON.stringify(this.state)}`,await Te(this);let t=await z(this);`${JSON.stringify(t)}`}async onClose(t,n,e,s){console.log(`Session closed: ${this.state.sessionId} ${n} - ${e}`)}async onError(t){console.error("AgentDO encountered an error:",t)}};function Si(o){let t=o.state;if(!t)return null;let n=["startNode","answerNode"];for(let e of n)if(!t.nodes.some(r=>r.type===e))return!1;return t.nodes.find(e=>e.type==="startNode")}import{importSPKI as ln,jwtVerify as dn}from"jose";function Xe(o){let t={};if(!o)return t;let n=o.split(";");for(let e of n){let s=e.indexOf("=");if(s>-1){let r=e.slice(0,s).trim(),i=e.slice(s+1).trim();r&&(t[r]=decodeURIComponent(i))}}return t}function un(o){return(typeof o.email=="string"?o.email.trim():"")||null}async function Y(o,t,n){let e=Xe(o.headers.get("cookie")),s=new URL(o.url),r=e.access_token||s.searchParams.get("access_token"),i=await pn(t,r);if(i.ok){let a=i.payload,c=un(a);return c?{id:a.sub,email:c,name:a.name,first_name:a.given_name,last_name:a.family_name,tenant:a.tenant,roles:a["ora-roles"],db_name:a.db_name||null,user_id:a.user_id||null}:null}return null}async function pn(o,t){if(!t||typeof t!="string")return{ok:!1,payload:null,protectedHeader:null};if(!o.KC_RS256_PK)throw new Error("PK is not defined");let n=`-----BEGIN PUBLIC KEY-----
|
|
28
|
-
${o.KC_RS256_PK}
|
|
29
|
-
-----END PUBLIC KEY-----`,e=await ln(n,"RS256");try{let{payload:s,protectedHeader:r}=await dn(t,e);return{ok:!0,payload:s,protectedHeader:r}}catch(s){return console.error("JWT verification failed:",s),{ok:!1,payload:null,protectedHeader:null}}}async function zi(o,t,n){let e=new URL(o.url);if(e.pathname==="/favicon.ico")return new Response(null,{status:204});if(e.pathname.startsWith("/.well-known/appspecific"))return new Response(null,{status:204})}import{getAgentByName as Mt}from"agents";import{getAgentByName as fn}from"agents";async function qe(o,t){let n=t.sessionId||t.runAsUserId,e=t.inputs||{},s=t.runId;if(!s){let c=await Ft(o,{tenant:t.tenant,flowId:t.flowId,userId:t.runAsUserId,sessionId:n,triggerId:t.triggerId,triggerKind:t.triggerKind,invocationMode:t.invocationMode,activationId:t.activationId,deliveryId:void 0,externalDeliveryId:t.externalDeliveryId,correlationKey:t.correlationKey,inputs:e,label:t.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 r={...t,sessionId:n,runId:s,inputs:e},a=await(await fn(o.AGENT,`${t.flowId}::${n}`)).enqueueTrigger(r);return a.duplicate?{status:"deduped",runId:s}:a.queued?{status:"queued",runId:s,activation:r,taskId:a.taskId}:{status:"error",error:"Failed to queue trigger"}}var ze="x-ora-signature",We="x-ora-timestamp",Ge="x-ora-nonce",Ye="x-ora-tenant",Zi=300,Je=new TextEncoder;function mn(o){return[...new Uint8Array(o)].map(t=>t.toString(16).padStart(2,"0")).join("")}function gn(o){try{let t=new URL(o);return`${t.origin}${t.pathname.replace(/\/$/,"")}`}catch{return o.replace(/\/$/,"")}}function Be(o){return["v1",o.timestamp,o.nonce,o.tenant,gn(o.destination),o.body].join(`
|
|
30
|
-
`)}async function Ze(o,t){let n=await crypto.subtle.importKey("raw",Je.encode(o),{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return mn(await crypto.subtle.sign("HMAC",n,Je.encode(t)))}function yn(o,t){if(o.length!==t.length)return!1;let n=0;for(let e=0;e<o.length;e++)n|=o.charCodeAt(e)^t.charCodeAt(e);return n===0}async function Qi(o){let t=String(o.timestamp??Math.floor(Date.now()/1e3)),n=await Ze(o.secret,Be({timestamp:t,nonce:o.nonce,tenant:o.tenant,destination:o.destination,body:o.body}));return{"content-type":"application/json",[Ye]:o.tenant,[We]:t,[Ge]:o.nonce,[ze]:`v1=${n}`}}async function Qe(o){var u,p,g,d,m;if(!((u=o.secret)!=null&&u.trim()))return{ok:!1,error:"HX_API_KEY is not configured"};let t=(p=o.headers.get(Ye))==null?void 0:p.trim(),n=(g=o.headers.get(We))==null?void 0:g.trim(),e=(d=o.headers.get(Ge))==null?void 0:d.trim(),s=(m=o.headers.get(ze))==null?void 0:m.trim();if(!t||!n||!e||!s)return{ok:!1,error:"missing signature headers"};if(!s.startsWith("v1="))return{ok:!1,error:"unsupported signature version"};let r=Number(n);if(!Number.isFinite(r))return{ok:!1,error:"invalid timestamp"};let i=Math.floor((o.now??Date.now())/1e3),a=o.toleranceSeconds??300;if(Math.abs(i-r)>a)return{ok:!1,error:"stale timestamp"};let c=await Ze(o.secret.trim(),Be({timestamp:n,nonce:e,tenant:t,destination:o.url,body:o.body}));return yn(s.slice(3),c)?{ok:!0,tenant:t,nonce:e,timestamp:r}:{ok:!1,error:"signature mismatch"}}var J=(o,t=200)=>new Response(JSON.stringify(o),{status:t,headers:{"content-type":"application/json"}});async function ve(o,t,n){var u;if(new URL(o.url).pathname!=="/api/triggers/dispatch")return;if(o.method!=="POST")return J({error:"Method not allowed"},405);let s=await o.text(),r=await Qe({secret:t.HX_API_KEY,body:s,url:o.url,headers:o.headers});if(!r.ok)return console.warn(`[triggers] rejected dispatch: ${r.error}`),J({error:"Invalid signature"},401);let i;try{i=JSON.parse(s)}catch{return J({error:"Invalid payload"},400)}if(!(i!=null&&i.runId)||!(i!=null&&i.flowId)||!(i!=null&&i.runAsUserId)||!(i!=null&&i.tenant)||!(i!=null&&i.activationId)||!(i!=null&&i.triggerId)||!(i!=null&&i.triggerKind)||!(i!=null&&i.invocationMode))return J({error:"activationId, triggerId, triggerKind, invocationMode, runId, flowId, runAsUserId and tenant are required"},400);if(i.tenant!==r.tenant)return J({error:"Tenant mismatch"},403);let a;try{a=await G(i.flowId,t)}catch{return J({error:"Flow not found"},404)}if(!((u=a==null?void 0:a.metadata)!=null&&u.tenant)||a.metadata.tenant!==i.tenant)return console.warn(`[triggers] flow ${i.flowId} does not belong to tenant ${i.tenant}`),J({error:"Tenant mismatch"},403);let c=await qe(t,{...i,sessionId:i.sessionId||i.runAsUserId,nonce:r.nonce});return c.status==="error"?J({error:c.error},502):c.status==="deduped"?J({deduped:!0,runId:c.runId},200):J({accepted:!0,runId:c.runId,taskId:c.taskId},202)}var wn=/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/,hn=new Set(["state","messages","memory"]);async function Rn(o,t){let n=new URL(o.url);if(!n.pathname.startsWith("/api/internal/sessions/"))return;let e=n.pathname.split("/");if(e[6]!=="runs"||e[8]!=="stop"||e.length!==9)return;if(o.method!=="POST")return new Response("Method not allowed",{status:405});if(!t.HX_API_KEY||o.headers.get("Authorization")!==t.HX_API_KEY)return new Response("Unauthorized",{status:401});let s=decodeURIComponent(e[4]||""),r=decodeURIComponent(e[5]||""),i=decodeURIComponent(e[7]||"");if(!s||!r||!i)return new Response("Not found",{status:404});try{let a=await Mt(t.AGENT,`${s}::${r}`);return Response.json(await a.requestRunStop(i))}catch(a){return console.error("[agents] failed to request run stop",a),Response.json({error:"Failed to stop run"},{status:502})}}async function Tn(o,t){let n=new URL(o.url);if(!n.pathname.startsWith("/api/internal/sessions/"))return;if(o.method!=="GET")return new Response("Method not allowed",{status:405});let e=o.headers.get("Authorization")||"";if(!t.HX_API_KEY||e!==t.HX_API_KEY)return new Response("Unauthorized",{status:401});let s=n.pathname.split("/"),r=decodeURIComponent(s[4]||""),i=decodeURIComponent(s[5]||""),a=s[6];if(!r||!i||!a||!hn.has(a))return new Response("Not found",{status:404});try{let u=await(await Mt(t.AGENT,`${r}::${i}`)).inspectPersistedSession(a);return Response.json(u)}catch(c){return console.error("[agents] failed to inspect persisted session",c),Response.json({error:"Failed to inspect persisted session"},{status:502})}}async function ca(o,t,n){var a,c,u,p;let e=new URL(o.url),s=await ve(o,t,n);if(s instanceof Response)return s;let r=await Rn(o,t);if(r instanceof Response)return r;let i=await Tn(o,t);if(i instanceof Response)return i;if(e.pathname.startsWith("/a/")){let g=e.pathname.split("/"),d=g[2],m=g[3];try{if(!d)return Response.redirect(new URL("/",e.origin).toString(),302);let l;try{l=await G(d,t)}catch{return new Response("Flow not found",{status:404})}if(!l.metadata||((a=l.metadata)==null?void 0:a.status)!=="active")return new Response("NO chat",{status:404});if(((c=l.metadata)==null?void 0:c.visibility)==="private"&&!await Y(o,t,n)){let y=new URL("/login",e.origin);return y.searchParams.set("nextURL",`${e.pathname}${e.search}`),Response.redirect(y.toString(),302)}if(!m){let f=crypto.randomUUID(),y=new URL(`/a/${d}/${f}`,e.origin);return Response.redirect(y.toString(),302)}if(!wn.test(m))return new Response("Id del chat no v\xE1lido",{status:400})}catch(l){return console.error("Error accessing flow KV:",l),new Response("Flow error",{status:500})}}if(e.pathname.startsWith("/api/agent/flow")){let g=e.pathname.split("/"),d=g[4],m=g[5],l=`${d}::${m}`;try{let f=await Y(o,t,n);if(!f){let T=new URL(o.url).searchParams.has("access_token");console.warn(`[agents] Unauthenticated agent socket upgrade (access_token query=${T}) \u2014 Composio connections from tool editor will not apply`)}let y=new Headers(o.headers);y.delete("X-User-Payload"),f&&y.set("X-User-Payload",JSON.stringify(f));let h=new Request(o,{headers:y});return(await Mt(t.AGENT,l)).fetch(h)}catch(f){return console.error("Error accessing agent:",f),new Response("Agent error",{status:500})}}if(e.pathname.startsWith("/api/ora/connect")){let g=e.pathname.split("/"),d=g[4],m=g[5];if(!d||!m)return new Response("Missing flowId or sessionId",{status:400});let l=o.headers.get("Authorization")||e.searchParams.get("authorization");if(!l)return new Response("Missing Authorization header",{status:401});try{let f=`${t.HX_CORE_URL}/p/v1/validation/key/agent/${d}`,h=await(await fetch(f,{method:"GET",headers:{Authorization:l}})).json();if(((u=h.payload)==null?void 0:u.flowId)!==d)return console.error("FlowId mismatch:",(p=h.payload)==null?void 0:p.flowId,"!==",d),new Response("Validation error",{status:403});let w=`${d}::${m}`,R=await Y(o,t,n);if(!R){let F=new URL(o.url).searchParams.has("access_token");console.warn(`[agents] Unauthenticated agent socket upgrade (access_token query=${F}) \u2014 Composio connections from tool editor will not apply`)}let T=new Headers(o.headers);T.delete("X-User-Payload"),R&&T.set("X-User-Payload",JSON.stringify(R));let I=new Request(o,{headers:T});return(await Mt(t.AGENT,w)).fetch(I)}catch(f){return console.error("Error in /api/ora/connect:",f),new Response("Internal error",{status:500})}}}async function ua(o,t,n){let e=new URL(o.url),s=o.method;if(!e.pathname.startsWith("/api/instances"))return;let r=await Y(o,t,n);if(!r)return new Response("Unauthorized",{status:401});let i=t.HX_CORE_URL,a=t.HX_API_KEY;if(!i||!a)return console.error("Missing configuration: HX_CORE_URL or HX_API_KEY"),new Response("Internal Server Error",{status:500});let u=e.pathname.slice("/api/instances".length);u.startsWith("/")&&(u=u.slice(1)),u.endsWith("/")&&(u=u.slice(0,-1));let p="/ora/instances";u&&(p+=`/${u}`);let g=i.endsWith("/")?i.slice(0,-1):i,d=new URL(`${g}${p}`);e.searchParams.forEach((f,y)=>{d.searchParams.set(y,f)}),s==="GET"&&!u&&d.searchParams.set("filter_user_id",r.email);let m=new Headers;m.set("Authorization",a),m.set("Content-Type","application/json"),m.set("X-User-Payload",JSON.stringify(r));let l={method:s,headers:m};if(["POST","PATCH","PUT"].includes(s))try{l.body=await o.text()}catch(f){console.error("Error reading request body:",f)}try{let f=await fetch(d.toString(),l),y=await f.text();return new Response(y,{status:f.status,headers:{"Content-Type":"application/json"}})}catch(f){return console.error("Error proxying to flow instance backend:",f),new Response("Internal Server Error",{status:500})}}async function ma(o,t,n){let e=new URL(o.url);if(o.method==="POST"&&e.pathname==="/auth/login")try{let s=await o.formData(),r=s.get("username"),i=s.get("password"),a=s.get("nextURL")||"/";if(!r||!i)return new Response("Missing username or password",{status:400});let c=new URLSearchParams;c.append("username",r),c.append("password",i),c.append("grant_type","password"),c.append("client_id",t.KC_CLIENT_ID),c.append("client_secret",t.KC_CLIENT_SECRET);let u=await fetch(`${t.KC_BASE_URL}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Cookie:"hxsecure=1"},body:c});if(!u.ok)return new Response("Unauthorized",{status:401});let p=await u.json(),g=new Response(null,{status:302,headers:{Location:a}}),d=(m,l,f)=>{g.headers.append("Set-Cookie",`${m}=${l}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=${f}`)};return p.access_token&&d("access_token",p.access_token,p.expires_in),p.refresh_token&&d("refresh_token",p.refresh_token,p.refresh_expires_in||3600*24*30),p.id_token&&d("id_token",p.id_token,p.expires_in),g}catch(s){return console.error("Auth error:",s),new Response("Internal Server Error",{status:500})}if(e.pathname==="/auth/logout"){let s=new Response(null,{status:302,headers:{Location:"/login"}}),r=i=>{s.headers.append("Set-Cookie",`${i}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=0`)};return r("access_token"),r("refresh_token"),r("id_token"),s}if(e.pathname.startsWith("/s/")){let s=await Y(o,t,n);if(!s){let r=new URL("/login",e.origin);return r.searchParams.set("nextURL",`${e.pathname}${e.search}`),Response.redirect(r.toString(),302)}return{user:s}}}export{no as ANONYMOUS_RUN_USER_PREFIX,Ke as AgentDO,Fn as DEFAULT_MEMORY_LENGTH,Dn as DEFAULT_MEMORY_MODEL,$n as FLOW_INPUT_NAME_RE,$t as FlowExecutionStoppedError,Wn as GENERATION_PARAM_KEYS,Yn as GENERATION_PRESETS,Mn as MAX_USER_IDENTITY_LENGTH,Pn as MEMORY_LENGTH_MD_LINES,bn as MEMORY_LENGTH_TOKENS,rs as MODEL_REGISTRY_SNAPSHOT,B as NodeType,En as OUT_VAR_NAME_RE,Gn as PRESET_PARAM_KEYS,ns as REASONING_EFFORT_LEVELS,ge as TOOL_REGISTRY_SNAPSHOT,Ge as TRIGGER_NONCE_HEADER,ze as TRIGGER_SIGNATURE_HEADER,Zi as TRIGGER_SIGNATURE_TOLERANCE_SECONDS,Ye as TRIGGER_TENANT_HEADER,We as TRIGGER_TIMESTAMP_HEADER,V as VariableResolutionError,Zn as applyPresetToOverrides,xt as buildReasoningProviderOptions,Hn as buildScope,Qi as buildSignedTriggerHeaders,Qt as buildTriggerMessageText,An as buildUrl,un as canonicalUserEmail,pt as capMemoryContent,rt as claimRun,It as clearAllMessages,At as completeRun,xn as convertTempMessure,Ft as createRun,de as deriveParamSupport,qe as dispatchTrigger,Bt as embedText,Te as ensureAgentTables,oo as ensureMessagesTable,Cn as estimateTokens,Jn as extractTemplateReferences,ne as extractUserKeypoints,Sn as findScopedSourceNode,z as getAllMessages,Ln as getAncestorNodeIds,jn as getDefaultOutVars,gt as getEffectiveOutVars,v as getFlowInputDefs,is as getModelEntry,Vn as getRefTail,tt as getUpstreamOutVars,ca as handleAgentsRoutes,ma as handleAuthRoutes,zi as handleCommonRoutes,ua as handleIntancesRoutes,Tn as handlePersistedSessionInspection,Rn as handleSessionRunControl,ve as handleTriggerRoutes,_n as hashText,it as initializeEngineState,Kn as isBinaryOutVar,ft as isStartMemoryEnabled,le as jsonSchemaToZod,ot as logc,oe as looksLikeTranscript,ee as memoryGenerationMaxTokens,ut as memoryMdLineLimit,dt as memoryTokenLimit,se as mergeKeypointMemory,j as messageTypes,gn as normalizeDestination,pe as normalizeEffectiveParams,Zt as normalizeFlowInputs,Mo as normalizeModelEntry,fe as normalizeReasoning,vn as openAiReasoningParamSupport,Qn as openAiStandardParamSupport,Xe as parseCookies,Un as parseMemoryLength,qn as parseTemplateExpression,vt as parseUserAuth,lt as parseUserMessage,ue as pickNodeOverrides,ss as reasoningEffortLevels,me as reasoningExposable,Ie as recordRun,Vs as registerProvider,ao as resolveAnswerMappings,et as resolveModelById,Xn as resolveOutVarRef,Bn as resolvePreset,Tt as resolveReasoningEffort,q as resolveReference,xe as resolveRunUserId,ie as resolveTemplate,zn as rewriteTemplateNodeRefs,at as runAgentTurn,Nn as safeParseJSON,Pt as sanitizeMemoryDocument,nt as sanitizeUserIdentity,Le as sendEvent,S as serverSend,Re as setMessage,Ze as signTriggerMaterial,be as startEngine,mt as startMemoryLength,te as startMemoryModel,os as stripUnsupportedFromNodeData,In as tempTool,yn as timingSafeEqualHex,Rt as toStreamTextSettings,Be as triggerSignatureMaterial,kn as twitter,Si as validateFlowStart,re as validateOutVars,On as vectorize,pn as verifyToken,Qe as verifyTriggerRequest,Y as verifyUser,yt as walkPath,es as workersAiParamSupport,ts as xaiParamSupport};
|
|
1
|
+
import{a as k,b as Tn,c as xe,d as ke,e as Kn,f as be,g as Xn,h as Oe,i as Vn}from"./chunk-CRVHPQVH.js";import"./chunk-ELMOSEQ7.js";import{c as xn}from"./chunk-YFOFZWIB.js";import"./chunk-OF6G42DM.js";import"./chunk-MOYYZBTC.js";import"./chunk-CDGUEX3J.js";import{a as Gn,b as Jn}from"./chunk-VS4EXG76.js";import{A as bn,B as On,C as Cn,D as vn,E as Ae,F as Pn,G as Mn,H as Nn,I as Dn,J as $n,K as Fn,L as Ln,M as Hn,N as jn,O as Ue,P as _e,Q as qn,a as I,b as me,c as Gt,d as P,e as fe,f as Jt,g as zt,h as Wt,i as Yt,j as Bt,k as ge,l as H,m as Qt,n as ye,o as he,p as we,q as Re,r as Se,s as Ee,t as z,u as Ie,v as Te,w as kn,x as An,y as Un,z as _n}from"./chunk-4XJVXKXR.js";import{A as En,B as In,a as L,b as qt,c as de,d as Vt,e as pe,f as Zt,g as en,h as tn,i as nn,j as rn,k as sn,l as on,m as an,n as cn,o as ln,p as un,q as dn,r as pn,s as mn,t as fn,u as gn,v as yn,w as hn,x as wn,y as Rn,z as Sn}from"./chunk-J4LJZZ67.js";import{a as Dt}from"./chunk-RYHQGPX5.js";import{a as $t}from"./chunk-R6EKV3WR.js";import{a as Ht}from"./chunk-6HY7QUMP.js";import{a as Ft,b as Lt}from"./chunk-V6JSMX5A.js";import{a as Xt}from"./chunk-Q7QHJJGR.js";import{a as b,b as C,c as jt,d as Kt}from"./chunk-YLDLDEUP.js";import{a as ue}from"./chunk-U56YWPSI.js";import"./chunk-A2IRPAD4.js";import"./chunk-3TXHFKDN.js";import{Agent as Et}from"agents";import{nanoid as It}from"nanoid";async function nt(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 Ce(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 _(t){return t.sql`SELECT id, role, type, content, ts FROM messages ORDER BY ts ASC`}async function j(t){t.sql`DELETE FROM messages`}async function ve(t){await nt(t)}function W(t){return{"Content-Type":"application/json",Authorization:t.HX_API_KEY}}function K(t){return!!(t!=null&&t.HX_ORA_URL)&&!!(t!=null&&t.HX_API_KEY)}var rt="anonymous:";function Pe(t,e){return(t==null?void 0:t.trim())||`${rt}${e}`}async function Y(t,e){if(!K(t))return null;let r=await fetch(`${t.HX_ORA_URL}/internal/runs`,{method:"POST",headers:W(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 M(t,e){if(!K(t))return{claimed:!0};let r=await fetch(`${t.HX_ORA_URL}/internal/runs/${encodeURIComponent(e)}/claim`,{method:"POST",headers:W(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 X(t,e,r,n=3){if(!K(t))return!0;for(let s=1;s<=n;s++){try{let o=await fetch(`${t.HX_ORA_URL}/internal/runs/${encodeURIComponent(e)}/complete`,{method:"POST",headers:W(t),body:JSON.stringify(r)});if(o.ok||o.status===409)return!0;if(o.status===404)return console.error(`[oraTriggers] completeRun ${e} rejected with 404`),!1;console.warn(`[oraTriggers] completeRun ${e} attempt ${s} failed with ${o.status}`)}catch(o){console.warn(`[oraTriggers] completeRun ${e} attempt ${s} threw`,o)}s<n&&await new Promise(o=>setTimeout(o,250*s))}return console.error(`[oraTriggers] completeRun ${e} exhausted ${n} attempts; hx-ora will time the run out`),!1}async function Me(t,e){if(!K(t))return Promise.resolve();try{return await Y(t,e)}catch(r){return console.error("[oraTriggers] recordRun failed",r),null}}var B=Object.freeze({}),st="__SYSTEM_";function Ne(t){return t.startsWith(st)}function ot(t){let e={};for(let[r,n]of Object.entries(t))Ne(r)||(e[r]=n);return Object.freeze(e)}async function q(t,e){if(!e)return B;if(t.HX_ORA_URL&&t.HX_API_KEY)try{let s=await fetch(`${t.HX_ORA_URL}/internal/secrets`,{headers:{Authorization:t.HX_API_KEY}});if(s.ok){let o=await s.json();if(o.secrets)return ot(o.secrets)}else console.warn(`[secrets] API failed with status ${s.status}, falling back to KV`)}catch(s){console.error("[secrets] API request failed, falling back to KV",s)}let r=t.ORA_SECRETS;if(!r)return B;let n=`${e}:`;try{let s=await r.list({prefix:n,limit:1e3});s.list_complete===!1&&console.warn(`[secrets] tenant=${e} exceeded list page; truncating to first 1000 keys`);let o=s.keys.filter(i=>!Ne(i.name.slice(n.length))),a=await Promise.all(o.map(async i=>{let d=await r.get(i.name);return d!==null?[i.name.slice(n.length),d]:null})),c={};for(let i of a){if(!i)continue;let[d,u]=i;d&&(c[d]=u)}return Object.freeze(c)}catch(s){return console.error("[secrets] failed to load tenant secrets from KV",{tenant:e,err:s}),B}}function V(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(o=>o.type==="startNode");return n==null?void 0:n.data}import{nanoid as wt}from"nanoid";import{streamText as at}from"ai";var it={short:`Up to ${H("short")} markdown lines (one fact or bullet per line). Keep constraints, working agreements, and the outline of anything already settled.`,medium:`Up to ${H("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 ${H("long")} markdown lines. Same as medium, with one-line context on a decision or plan block when later turns will need it.`},ct=12,lt=400,De=700;function ut(t,e=ct){let r=t.filter(s=>s.role==="user"||s.role==="assistant").slice(-e),n=[];for(let s of r){let o=typeof s.content=="string"?s.content:JSON.stringify(s.content??""),a=s.role==="assistant"?De:lt,c=o.trim().replace(/\s+/g," ").slice(0,a);c&&n.push(`${s.role==="user"?"U":"A"}: ${c}`)}return n.join(`
|
|
2
|
+
`)}function dt(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 pt(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 mt(t){var s,o;let e=((s=t.flowData)==null?void 0:s.state)??t.flowData,r=(e==null?void 0:e.nodes)??[],n=[];for(let a of r){if(a.type!=="answerNode")continue;let c=(o=t.results)==null?void 0:o[a.id];c!=null&&n.push(typeof c=="string"?c:JSON.stringify(c))}return n.join(`
|
|
3
|
+
`)}function ft(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.`,it[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,De)}`:"",t.answers.trim()?`Answer outputs:
|
|
4
|
+
${t.answers.trim()}`:""].filter(Boolean).join(`
|
|
5
|
+
`);return{system:e,user:r}}function gt(t){return Te(t.previous,Ie(t.userText),t.maxTokens)}async function yt(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 ht(t){if(t.fullStream&&typeof t.fullStream[Symbol.asyncIterator]=="function")return yt({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 $e(t){var d;let e=V(t.engineState);if(!e)return{status:"skipped",reason:"start_node_missing"};if(!he(e))return{status:"skipped",reason:"memory_disabled"};let r=Re(e),n=ge(r),s=we(e),o=z(t.previousContent||""),a=pt(t.messages),c=mt(t.engineState),i=u=>{let y=gt({previous:o,userText:t.userText,maxTokens:n});return{status:"written",content:y,truncated:!1,modelId:s,fallback:!0,error:y?void 0:u}};try{let u=await be(s,t.sessionEnv,{maxOutputTokens:n});if(!u)throw new Error(`Memory model '${s}' not found in registry`);let y=Se(r,(d=u.reasoning)==null?void 0:d.kind),{system:f,user:p}=ft({previous:o,userText:t.userText,assistantText:a,answers:c,length:r,maxTokens:n,recentTurns:ut(t.messages)}),g=Ue(u.reasoning),m=_e(u.provider,{effort:g,exposeReasoning:!1,maxTokens:y}),h=at({model:u.modelHandle,system:f,messages:[{role:"user",content:p}],...Ae({...u.effectiveParams??{},maxOutputTokens:y}),...m?{providerOptions:m}:{}}),S=await ht(h),E=dt(await h.usage),R=z(S.text);if(Ee(R)&&(R=""),!R)return{...i(S.error||"Memory model returned empty text"),usage:E};let x=ye(R,n);return{status:"written",content:x.content,truncated:x.truncated,usage:E,modelId:s}}catch(u){let y=u instanceof Error?u.message:"Memory update failed";return console.error("Memory update failed:",u),i(y)}}async function Fe(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 o=await C(r,t),a={...e,flowData:{...o,tenant:e.flowData.tenant,flowId:r,chatId:e.flowData.chatId}},c=o==null?void 0:o.stateVersion,i=typeof c=="number"&&c!==((s=e.flowData)==null?void 0:s.stateVersion);return{engineState:a,refreshed:i}}catch(o){return console.error(`[flowRefresh] fetch failed for flow ${r}:`,o),{engineState:e,refreshed:!1}}}function Le(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 He=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 N(t,e){var o,a;let r=t.id||t.name||"",[n,s]=String(r).split("::");if(!n||!s)return null;try{let i=(o=(await b(n,e)).metadata)==null?void 0:o.tenant,d=await C(n,e),u=(a=t.state)==null?void 0:a.user,y={flowData:{...d,tenant:i,flowId:n,chatId:s},executedNodes:[],context:u?{user:u}:{}};return t.setState({...t.state,engineState:y}),y}catch(c){return console.error("Failed to initialize engine state:",c),null}}async function D(t){var J,F,Z,ee,te,ne,re,se,oe,ae;let{agent:e,env:r,ctx:n,payload:s,connection:o}=t,a=Date.now(),c=[],i=t.runId?xe():void 0,d=async()=>await _(e),u=async l=>{await Ce(e,l)},y=async l=>{if(e.state.modelsCache&&e.state.modelsCache[l])return e.state.modelsCache[l];try{let{fetchOraModel:w}=await import("./oraApi-4O3W5LXD.js"),T=await w(l,r);return e.setState({...e.state,modelsCache:{...e.state.modelsCache||{},[l]:T}}),T}catch(w){throw console.error(`Error fetching model ${l}:`,w),w}},f={id:wt(),role:"user",type:"text",content:s.text,images:s.images,ts:Date.now()};await u(f);let p={onChangeState:l=>{e.setState({...e.state,engineState:l})},onServerEvent:async l=>{var w;await((w=t.onServerEvent)==null?void 0:w.call(t,l)),c.push(l)},onTelemetry:async l=>{var w,T,U,ie,ce,le;await He({...l,userId:t.resolveUserId(),tenant:((T=(w=e.state.engineState)==null?void 0:w.flowData)==null?void 0:T.tenant)||"",flowId:((ie=(U=e.state.engineState)==null?void 0:U.flowData)==null?void 0:ie.flowId)||"",sessionId:((le=(ce=e.state.engineState)==null?void 0:ce.flowData)==null?void 0:le.chatId)||""},r)},onError:l=>{var w;(w=t.onError)==null||w.call(t,l),e.setState({...e.state,error:l})},shouldStop:t.shouldStop},g=e.state.engineState?{...e.state.engineState}:null;if(g){let{engineState:l,refreshed:w}=await Fe(r,g);g=l,w&&e.setState({...e.state,engineState:g,modelsCache:{}})}else if(g=await N(e,r),!g){let l="Failed to initialize agent";return p.onError(l),{status:"failed",error:l}}let m=t.secrets;if(!m||Object.keys(m).length===0){let l=(J=g.flowData)==null?void 0:J.tenant;m=l?await q(r,l):{},(F=t.onSecretsLoaded)==null||F.call(t,m)}let h=t.user??e.state.user??void 0;h&&!((Z=g.context)!=null&&Z.user)&&(g.context={...g.context||{},user:h});let S={env:r,ctx:n,conn:o,getMessages:d,setMessages:u,getOraModel:y,secrets:m,userAuth:t.userAuth,user:h,composioSessions:t.composioSessions,publicOrigin:t.publicOrigin,skillRefCache:t.skillRefCache,runId:t.runId,outputCollector:i,agentMemory:typeof((ee=e.state.memory)==null?void 0:ee.content)=="string"?e.state.memory.content:"",shouldStop:t.shouldStop,workerStack:(te=g.flowData)!=null&&te.flowId?[g.flowData.flowId]:[],workerCalls:{count:0}},E=await Oe(S,g,p)(s),R=e.state.engineState??g;if(E.status==="completed")try{let l=await $e({sessionEnv:S,engineState:R,previousContent:typeof((ne=e.state.memory)==null?void 0:ne.content)=="string"?e.state.memory.content:"",userText:s.text||"",messages:await d()});if(l.status==="skipped")await p.onServerEvent({type:"agent:memory",content:{skipped:!0,reason:l.reason},timestamp:Date.now()});else if(!l.content.trim())await p.onServerEvent({type:"agent:memory",content:{updated:!1,empty:!0,error:l.error,fallback:l.fallback},timestamp:Date.now()});else{let w={promptTokens:((re=R.tokenUsage)==null?void 0:re.promptTokens)??0,completionTokens:((se=R.tokenUsage)==null?void 0:se.completionTokens)??0,totalTokens:((oe=R.tokenUsage)==null?void 0:oe.totalTokens)??0};l.usage&&(w.promptTokens+=l.usage.promptTokens,w.completionTokens+=l.usage.completionTokens,w.totalTokens+=l.usage.totalTokens),R={...R,tokenUsage:w},e.setState({...e.state,engineState:R,memory:{content:l.content,updatedTs:Date.now(),...l.error?{lastError:l.error}:{},...l.fallback?{fallback:!0}:{}}}),await p.onTelemetry({type:"memory_update",payload:{model:l.modelId,truncated:l.truncated,usage:l.usage,fallback:l.fallback,error:l.error}}),await p.onServerEvent({type:"agent:memory",content:{updated:!0,truncated:l.truncated,fallback:l.fallback,error:l.error},timestamp:Date.now()})}}catch(l){let w=l instanceof Error?l.message:"Memory update failed";console.error("Memory update failed:",l),await p.onServerEvent({type:"agent:memory",content:{error:w},timestamp:Date.now()})}if(E.status==="completed"&&t.runId&&(i!=null&&i.hasOutputs())){let{flowId:l,chatId:w}=R.flowData??{};if(!l||!w)E={status:"failed",error:"Structured output persistence requires flowId and sessionId"};else try{await ke(r,{flowId:l,sessionId:w,runId:t.runId,createdAt:new Date(a).toISOString(),data:i.snapshotData(),answerNodeIds:i.answerNodeIds()});let T={...R.results||{}};for(let U of i.answerNodeIds())T[U]={...T[U]||{},persisted:!0,runId:t.runId};R={...R,results:T},e.setState({...e.state,engineState:R})}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()}),E={status:"failed",error:U}}}let{tenant:x,flowId:v,chatId:$}=R.flowData??{};return x&&v&&$&&n.waitUntil(Le(r,{id:`${v}::${$}`,tenant:x,flowId:v,sessionId:$,userId:t.resolveUserId(),title:(ae=s.text)==null?void 0:ae.slice(0,120),turnTs:a,events:c})),e.setState({...e.state,lastUpdated:new Date}),{status:E.status,error:E.error,engineState:R}}import{nanoid as Rt}from"nanoid";function St(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 je(t,e,r,n){var s;try{let o=await e.json(),a=o.message;if(!a||typeof a!="string")return new Response(JSON.stringify({error:"Invalid message"}),{status:400,headers:{"content-type":"application/json"}});let c=typeof o.userId=="string"?P(o.userId):null,i=St(e),d=i==null?void 0:i.email;i?t.setState({...t.state,user:i,injectedUserId:d}):c&&!((s=t.state.user)!=null&&s.email)&&t.setState({...t.state,injectedUserId:c});let u=()=>d??c??t.state.injectedUserId??void 0;t.skillRefCache||(t.skillRefCache=new Map);let y=o.inputs&&typeof o.inputs=="object"?o.inputs:void 0;if(!t.state.engineState&&!await N(t,r))return new Response(JSON.stringify({error:"Failed to initialize agent"}),{status:500,headers:{"content-type":"application/json"}});let f=`run-${Rt(12)}`;await t.registerManualRun(f,a,u()),await M(r,f).catch(h=>{console.warn(`[AgentHTTP] could not mark manual run ${f} as running`,h)});let p;try{p=await D({agent:t,env:r,ctx:n,payload:{text:a,inputs:y},skillRefCache:t.skillRefCache,user:i??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"}),{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 m=(await _(t)).reverse().find(h=>h.role==="assistant");return new Response(JSON.stringify({answer:(m==null?void 0:m.content)||""}),{headers:{"content-type":"application/json"}})}catch(o){return new Response(JSON.stringify({error:o.message}),{status:500,headers:{"content-type":"application/json"}})}}async function Ke(t){try{return await j(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 Xe="trigger:nonce:",Tt=900*1e3,Q="run:stop:",qe=class extends Et{initialState={user:void 0,injectedUserId:null,sessionId:null,lastUpdated:null,modelsCache:{},memory:void 0};resolveSessionUserId(){var e;return((e=this.state.user)==null?void 0:e.email)??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 _(this)}}async requestRunStop(e){return e!=null&&e.trim()?(await this.ctx.storage.put(`${Q}${e}`,Date.now()),{accepted:!0}):{accepted:!1}}async isRunStopRequested(e){return!!await this.ctx.storage.get(`${Q}${e}`)}async clearRunStopRequest(e){await this.ctx.storage.delete(`${Q}${e}`)}async onRequest(e){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 _(this);return new Response(JSON.stringify(n),{headers:{"content-type":"application/json"}})}return e.method==="POST"&&r.pathname.endsWith("/message")?je(this,e,this.env,this.ctx):e.method==="DELETE"&&r.pathname.endsWith("/clear")?Ke(this):new Response("Ready to assist.")}async onConnect(e,r){var f,p,g,m,h;let[n,s]=e.server.split("::"),a=(f=(await b(n,this.env)).metadata)==null?void 0:f.tenant;this.secrets=await q(this.env,a),this.userAuth={},this.composioSessions={},this.publicOrigin=void 0;let c=null;if(r.request){try{this.publicOrigin=new URL(r.request.url).origin}catch{}let S=r.request.headers.get("X-User-Payload");if(S)try{c=JSON.parse(S)}catch(E){console.warn("Failed to parse X-User-Payload",E)}}let i=await C(n,this.env);this.setState({...this.state,user:c||null,sessionId:s,engineState:{flowData:{...i,tenant:a,flowId:n,chatId:s},executedNodes:[],context:c?{user:c}:{}}}),c||console.warn("[AgentDO] WebSocket connected without authenticated user \u2014 Composio manual auth requires login (access_token on socket URL)");let d=await _(this);k(e,I.SERVER_HISTORY,JSON.stringify({messages:d}));let y=(((p=i==null?void 0:i.state)==null?void 0:p.nodes)??(i==null?void 0:i.nodes)??[]).find(S=>S.type==="startNode");if(y){let S={allow_images:((g=y.data)==null?void 0:g.allow_images)??!1,allow_documents:((m=y.data)==null?void 0:m.allow_documents)??!1,greeting:(h=y.data)==null?void 0:h.greeting};k(e,I.SERVER_CONFIG,JSON.stringify(S))}}async onMessage(e,r){if(typeof r!="string")return;let n=r.indexOf(":");if(n===-1)return;let s=r.substring(0,n),o=r.substring(n+1);if(!s||!o)return;let c={[I.USER_MESSAGE]:i=>this.onUserMessage(e,i),[I.USER_CLEAR_HISTORY]:()=>this.onClearHistory(e),[I.USER_AUTH]:i=>this.onUserAuth(e,i),[I.USER_IDENTITY]:i=>this.onUserIdentity(e,i)}[s];c&&await c(o)}async onUserMessage(e,r){let n=me(r),s=`run-${It(12)}`;await this.registerManualRun(s,n.text),await M(this.env,s).catch(o=>{console.warn(`[AgentDO] could not mark manual run ${s} as running`,o)});try{let o=await D({agent:this,env:this.env,ctx:this.ctx,payload:n,connection:e,secrets:this.secrets,userAuth:this.userAuth,composioSessions:this.composioSessions,publicOrigin:this.publicOrigin,skillRefCache:this.skillRefCache,user:this.state.user,resolveUserId:()=>this.resolveSessionUserId(),runId:s,shouldStop:()=>this.isRunStopRequested(s),onServerEvent:a=>{k(e,I.SERVER_EVENT,JSON.stringify(a))},onError:a=>{k(e,I.SERVER_ERROR,a)},onSecretsLoaded:a=>{this.secrets=a}});this.ctx.waitUntil(this.completeManualRun(s,o.status==="completed"?"succeeded":o.status==="stopped"?"skipped":"failed",o.error))}finally{await this.clearRunStopRequest(s)}}registerManualRun(e,r,n){var i;let{tenant:s,flowId:o,chatId:a}=((i=this.state.engineState)==null?void 0:i.flowData)??{};if(!s||!o||!a)return Promise.resolve();let c=Pe(n||this.resolveSessionUserId(),a);return Me(this.env,{id:e,tenant:s,flowId:o,userId:c,sessionId:a,label:r==null?void 0:r.slice(0,120)})}completeManualRun(e,r,n){return X(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=`${Xe}${e}`;if(await this.ctx.storage.get(r))return!1;let n=Date.now();await this.ctx.storage.put(r,n);let o=[...(await this.ctx.storage.list({prefix:Xe})).entries()].filter(([,a])=>n-a>Tt).map(([a])=>a);return o.length>0&&await this.ctx.storage.delete(o),!0}async processTrigger(e){if(!(await M(this.env,e.runId)).claimed){console.warn(`[AgentDO] activation ${e.activationId} skipped \u2014 run ${e.runId} already claimed`);return}try{this.state.engineState||await N(this,this.env);let n=de(V(this.state.engineState)),s=pe(n,e.inputs||{},e.label),o=await D({agent:this,env:this.env,ctx:this.ctx,payload:{text:s,inputs:e.inputs||{}},secrets:this.secrets,composioSessions:this.composioSessions,skillRefCache:this.skillRefCache,resolveUserId:()=>e.runAsUserId||this.resolveSessionUserId(),runId:e.runId,shouldStop:()=>this.isRunStopRequested(e.runId),onSecretsLoaded:a=>{this.secrets=a}});await X(this.env,e.runId,{status:o.status==="completed"?"succeeded":o.status==="stopped"?"skipped":"failed",error:o.error})}catch(n){let s=n instanceof Error?n.message:"Trigger execution failed";throw await X(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=fe(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 j(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 ve(this);let e=await _(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 Gr(t){let e=t.state;if(!e)return null;let r=["startNode","answerNode"];for(let n of r)if(!e.nodes.some(o=>o.type===n))return!1;return e.nodes.find(n=>n.type==="startNode")}import{importSPKI as xt,jwtVerify as kt}from"jose";function Ve(t){let e={};if(!t)return e;let r=t.split(";");for(let n of r){let s=n.indexOf("=");if(s>-1){let o=n.slice(0,s).trim(),a=n.slice(s+1).trim();o&&(e[o]=decodeURIComponent(a))}}return e}function At(t){return(typeof t.email=="string"?t.email.trim():"")||null}async function O(t,e,r){let n=Ve(t.headers.get("cookie")),s=new URL(t.url),o=n.access_token||s.searchParams.get("access_token"),a=await Ut(e,o);if(a.ok){let c=a.payload,i=At(c);return i?{id:c.sub,email:i,name:c.name,first_name:c.given_name,last_name:c.family_name,tenant:c.tenant,roles:c["ora-roles"],db_name:c.db_name||null,user_id:c.user_id||null}:null}return null}async function Ut(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-----
|
|
6
|
+
${t.KC_RS256_PK}
|
|
7
|
+
-----END PUBLIC KEY-----`,n=await xt(r,"RS256");try{let{payload:s,protectedHeader:o}=await kt(e,n);return{ok:!0,payload:s,protectedHeader:o}}catch(s){return console.error("JWT verification failed:",s),{ok:!1,payload:null,protectedHeader:null}}}async function Qr(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 G}from"agents";import{getAgentByName as _t}from"agents";async function Ge(t,e){let r=e.sessionId||e.runAsUserId,n=e.inputs||{},s=e.runId;if(!s){let i=await Y(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(!i)return{status:"error",error:"Failed to register run"};if(!i.created&&i.run.status!=="queued")return{status:"deduped",runId:i.run.id};s=i.run.id}let o={...e,sessionId:r,runId:s,inputs:n},c=await(await _t(t.AGENT,`${e.flowId}::${r}`)).enqueueTrigger(o);return c.duplicate?{status:"deduped",runId:s}:c.queued?{status:"queued",runId:s,activation:o,taskId:c.taskId}:{status:"error",error:"Failed to queue trigger"}}var ze="x-ora-signature",We="x-ora-timestamp",Ye="x-ora-nonce",Be="x-ora-tenant",rs=300,Je=new TextEncoder;function bt(t){return[...new Uint8Array(t)].map(e=>e.toString(16).padStart(2,"0")).join("")}function Ot(t){try{let e=new URL(t);return`${e.origin}${e.pathname.replace(/\/$/,"")}`}catch{return t.replace(/\/$/,"")}}function Qe(t){return["v1",t.timestamp,t.nonce,t.tenant,Ot(t.destination),t.body].join(`
|
|
8
|
+
`)}async function Ze(t,e){let r=await crypto.subtle.importKey("raw",Je.encode(t),{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return bt(await crypto.subtle.sign("HMAC",r,Je.encode(e)))}function Ct(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 ss(t){let e=String(t.timestamp??Math.floor(Date.now()/1e3)),r=await Ze(t.secret,Qe({timestamp:e,nonce:t.nonce,tenant:t.tenant,destination:t.destination,body:t.body}));return{"content-type":"application/json",[Be]:t.tenant,[We]:e,[Ye]:t.nonce,[ze]:`v1=${r}`}}async function et(t){var d,u,y,f,p;if(!((d=t.secret)!=null&&d.trim()))return{ok:!1,error:"HX_API_KEY is not configured"};let e=(u=t.headers.get(Be))==null?void 0:u.trim(),r=(y=t.headers.get(We))==null?void 0:y.trim(),n=(f=t.headers.get(Ye))==null?void 0:f.trim(),s=(p=t.headers.get(ze))==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 o=Number(r);if(!Number.isFinite(o))return{ok:!1,error:"invalid timestamp"};let a=Math.floor((t.now??Date.now())/1e3),c=t.toleranceSeconds??300;if(Math.abs(a-o)>c)return{ok:!1,error:"stale timestamp"};let i=await Ze(t.secret.trim(),Qe({timestamp:r,nonce:n,tenant:e,destination:t.url,body:t.body}));return Ct(s.slice(3),i)?{ok:!0,tenant:e,nonce:n,timestamp:o}:{ok:!1,error:"signature mismatch"}}var A=(t,e=200)=>new Response(JSON.stringify(t),{status:e,headers:{"content-type":"application/json"}});async function tt(t,e,r){var d;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(),o=await et({secret:e.HX_API_KEY,body:s,url:t.url,headers:t.headers});if(!o.ok)return console.warn(`[triggers] rejected dispatch: ${o.error}`),A({error:"Invalid signature"},401);let a;try{a=JSON.parse(s)}catch{return A({error:"Invalid payload"},400)}if(!(a!=null&&a.runId)||!(a!=null&&a.flowId)||!(a!=null&&a.runAsUserId)||!(a!=null&&a.tenant)||!(a!=null&&a.activationId)||!(a!=null&&a.triggerId)||!(a!=null&&a.triggerKind)||!(a!=null&&a.invocationMode))return A({error:"activationId, triggerId, triggerKind, invocationMode, runId, flowId, runAsUserId and tenant are required"},400);if(a.tenant!==o.tenant)return A({error:"Tenant mismatch"},403);let c;try{c=await b(a.flowId,e)}catch{return A({error:"Flow not found"},404)}if(!((d=c==null?void 0:c.metadata)!=null&&d.tenant)||c.metadata.tenant!==a.tenant)return console.warn(`[triggers] flow ${a.flowId} does not belong to tenant ${a.tenant}`),A({error:"Tenant mismatch"},403);let i=await Ge(e,{...a,sessionId:a.sessionId||a.runAsUserId,nonce:o.nonce});return i.status==="error"?A({error:i.error},502):i.status==="deduped"?A({deduped:!0,runId:i.runId},200):A({accepted:!0,runId:i.runId,taskId:i.taskId},202)}var vt=/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/,Pt=new Set(["state","messages","memory"]);async function Mt(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]||""),o=decodeURIComponent(n[5]||""),a=decodeURIComponent(n[7]||"");if(!s||!o||!a)return new Response("Not found",{status:404});try{let c=await G(e.AGENT,`${s}::${o}`);return Response.json(await c.requestRunStop(a))}catch(c){return console.error("[agents] failed to request run stop",c),Response.json({error:"Failed to stop run"},{status:502})}}async function Nt(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("/"),o=decodeURIComponent(s[4]||""),a=decodeURIComponent(s[5]||""),c=s[6];if(!o||!a||!c||!Pt.has(c))return new Response("Not found",{status:404});try{let d=await(await G(e.AGENT,`${o}::${a}`)).inspectPersistedSession(c);return Response.json(d)}catch(i){return console.error("[agents] failed to inspect persisted session",i),Response.json({error:"Failed to inspect persisted session"},{status:502})}}async function fs(t,e,r){var c,i,d,u;let n=new URL(t.url),s=await tt(t,e,r);if(s instanceof Response)return s;let o=await Mt(t,e);if(o instanceof Response)return o;let a=await Nt(t,e);if(a instanceof Response)return a;if(n.pathname.startsWith("/a/")){let y=n.pathname.split("/"),f=y[2],p=y[3];try{if(!f)return Response.redirect(new URL("/",n.origin).toString(),302);let g;try{g=await b(f,e)}catch{return new Response("Flow not found",{status:404})}if(!g.metadata||((c=g.metadata)==null?void 0:c.status)!=="active")return new Response("NO chat",{status:404});if(((i=g.metadata)==null?void 0:i.visibility)==="private"&&!await O(t,e,r)){let h=new URL("/login",n.origin);return h.searchParams.set("nextURL",`${n.pathname}${n.search}`),Response.redirect(h.toString(),302)}if(!p){let m=crypto.randomUUID(),h=new URL(`/a/${f}/${m}`,n.origin);return Response.redirect(h.toString(),302)}if(!vt.test(p))return new Response("Id del chat no v\xE1lido",{status:400})}catch(g){return console.error("Error accessing flow KV:",g),new Response("Flow error",{status:500})}}if(n.pathname.startsWith("/api/agent/flow")){let y=n.pathname.split("/"),f=y[4],p=y[5],g=`${f}::${p}`;try{let m=await O(t,e,r);if(!m){let x=new URL(t.url).searchParams.has("access_token");console.warn(`[agents] Unauthenticated agent socket upgrade (access_token query=${x}) \u2014 Composio connections from tool editor will not apply`)}let h=new Headers(t.headers);h.delete("X-User-Payload"),m&&h.set("X-User-Payload",JSON.stringify(m));let S=new Request(t,{headers:h});return(await G(e.AGENT,g)).fetch(S)}catch(m){return console.error("Error accessing agent:",m),new Response("Agent error",{status:500})}}if(n.pathname.startsWith("/api/ora/connect")){let y=n.pathname.split("/"),f=y[4],p=y[5];if(!f||!p)return new Response("Missing flowId or sessionId",{status:400});let g=t.headers.get("Authorization")||n.searchParams.get("authorization");if(!g)return new Response("Missing Authorization header",{status:401});try{let m=`${e.HX_CORE_URL}/p/v1/validation/key/agent/${f}`,S=await(await fetch(m,{method:"GET",headers:{Authorization:g}})).json();if(((d=S.payload)==null?void 0:d.flowId)!==f)return console.error("FlowId mismatch:",(u=S.payload)==null?void 0:u.flowId,"!==",f),new Response("Validation error",{status:403});let E=`${f}::${p}`,R=await O(t,e,r);if(!R){let F=new URL(t.url).searchParams.has("access_token");console.warn(`[agents] Unauthenticated agent socket upgrade (access_token query=${F}) \u2014 Composio connections from tool editor will not apply`)}let x=new Headers(t.headers);x.delete("X-User-Payload"),R&&x.set("X-User-Payload",JSON.stringify(R));let v=new Request(t,{headers:x});return(await G(e.AGENT,E)).fetch(v)}catch(m){return console.error("Error in /api/ora/connect:",m),new Response("Internal error",{status:500})}}}async function hs(t,e,r){let n=new URL(t.url),s=t.method;if(!n.pathname.startsWith("/api/instances"))return;let o=await O(t,e,r);if(!o)return new Response("Unauthorized",{status:401});let a=e.HX_CORE_URL,c=e.HX_API_KEY;if(!a||!c)return console.error("Missing configuration: HX_CORE_URL or HX_API_KEY"),new Response("Internal Server Error",{status:500});let d=n.pathname.slice("/api/instances".length);d.startsWith("/")&&(d=d.slice(1)),d.endsWith("/")&&(d=d.slice(0,-1));let u="/ora/instances";d&&(u+=`/${d}`);let y=a.endsWith("/")?a.slice(0,-1):a,f=new URL(`${y}${u}`);n.searchParams.forEach((m,h)=>{f.searchParams.set(h,m)}),s==="GET"&&!d&&f.searchParams.set("filter_user_id",o.email);let p=new Headers;p.set("Authorization",c),p.set("Content-Type","application/json"),p.set("X-User-Payload",JSON.stringify(o));let g={method:s,headers:p};if(["POST","PATCH","PUT"].includes(s))try{g.body=await t.text()}catch(m){console.error("Error reading request body:",m)}try{let m=await fetch(f.toString(),g),h=await m.text();return new Response(h,{status:m.status,headers:{"Content-Type":"application/json"}})}catch(m){return console.error("Error proxying to flow instance backend:",m),new Response("Internal Server Error",{status:500})}}async function Ss(t,e,r){let n=new URL(t.url);if(t.method==="POST"&&n.pathname==="/auth/login")try{let s=await t.formData(),o=s.get("username"),a=s.get("password"),c=s.get("nextURL")||"/";if(!o||!a)return new Response("Missing username or password",{status:400});let i=new URLSearchParams;i.append("username",o),i.append("password",a),i.append("grant_type","password"),i.append("client_id",e.KC_CLIENT_ID),i.append("client_secret",e.KC_CLIENT_SECRET);let d=await fetch(`${e.KC_BASE_URL}/protocol/openid-connect/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Cookie:"hxsecure=1"},body:i});if(!d.ok)return new Response("Unauthorized",{status:401});let u=await d.json(),y=new Response(null,{status:302,headers:{Location:c}}),f=(p,g,m)=>{y.headers.append("Set-Cookie",`${p}=${g}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=${m}`)};return u.access_token&&f("access_token",u.access_token,u.expires_in),u.refresh_token&&f("refresh_token",u.refresh_token,u.refresh_expires_in||3600*24*30),u.id_token&&f("id_token",u.id_token,u.expires_in),y}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"}}),o=a=>{s.headers.append("Set-Cookie",`${a}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=0`)};return o("access_token"),o("refresh_token"),o("id_token"),s}if(n.pathname.startsWith("/s/")){let s=await O(t,e,r);if(!s){let o=new URL("/login",n.origin);return o.searchParams.set("nextURL",`${n.pathname}${n.search}`),Response.redirect(o.toString(),302)}return{user:s}}}export{rt as ANONYMOUS_RUN_USER_PREFIX,qe as AgentDO,Wt as DEFAULT_MEMORY_LENGTH,Yt as DEFAULT_MEMORY_MODEL,qt as FLOW_INPUT_NAME_RE,Vn as FlowExecutionStoppedError,kn as GENERATION_PARAM_KEYS,Un as GENERATION_PRESETS,Gt as MAX_USER_IDENTITY_LENGTH,Jt as MEMORY_LENGTH_MD_LINES,zt as MEMORY_LENGTH_TOKENS,Gn as MODEL_REGISTRY_SNAPSHOT,L as NodeType,Zt as OUT_VAR_NAME_RE,An as PRESET_PARAM_KEYS,Fn as REASONING_EFFORT_LEVELS,qn as TOOL_REGISTRY_SNAPSHOT,Ye as TRIGGER_NONCE_HEADER,ze as TRIGGER_SIGNATURE_HEADER,rs as TRIGGER_SIGNATURE_TOLERANCE_SECONDS,Be as TRIGGER_TENANT_HEADER,We as TRIGGER_TIMESTAMP_HEADER,mn as VariableResolutionError,On as applyPresetToOverrides,_e as buildReasoningProviderOptions,on as buildScope,ss as buildSignedTriggerHeaders,pe as buildTriggerMessageText,Lt as buildUrl,At as canonicalUserEmail,ye as capMemoryContent,M as claimRun,j as clearAllMessages,X as completeRun,Dt as convertTempMessure,Y as createRun,_n as deriveParamSupport,Ge as dispatchTrigger,Kt as embedText,ve as ensureAgentTables,nt as ensureMessagesTable,Qt as estimateTokens,yn as extractOutVarValues,Sn as extractTemplateReferences,Ie as extractUserKeypoints,an as findScopedSourceNode,_ as getAllMessages,rn as getAncestorNodeIds,en as getDefaultOutVars,nn as getEffectiveOutVars,de as getFlowInputDefs,Jn as getModelEntry,cn as getRefTail,sn as getUpstreamOutVars,fs as handleAgentsRoutes,Ss as handleAuthRoutes,Qr as handleCommonRoutes,hs as handleIntancesRoutes,Nt as handlePersistedSessionInspection,Mt as handleSessionRunControl,tt as handleTriggerRoutes,jt as hashText,N as initializeEngineState,ln as isBinaryOutVar,un as isJsonContentType,he as isStartMemoryEnabled,xn as jsonSchemaToZod,ue as logc,Ee as looksLikeTranscript,Se as memoryGenerationMaxTokens,H as memoryMdLineLimit,ge as memoryTokenLimit,Te as mergeKeypointMemory,I as messageTypes,Ot as normalizeDestination,vn as normalizeEffectiveParams,Vt as normalizeFlowInputs,Kn as normalizeModelEntry,Ln as normalizeReasoning,Mn as openAiReasoningParamSupport,Pn as openAiStandardParamSupport,Ve as parseCookies,Bt as parseMemoryLength,dn as parsePayloadText,Rn as parseTemplateExpression,fe as parseUserAuth,me as parseUserMessage,Cn as pickNodeOverrides,pn as readFetchPayload,Hn as reasoningEffortLevels,jn as reasoningExposable,Me as recordRun,Xn as registerProvider,Tn as resolveAnswerMappings,be as resolveModelById,wn as resolveOutVarRef,gn as resolveOutVarValue,bn as resolvePreset,Ue as resolveReasoningEffort,hn as resolveReference,Pe as resolveRunUserId,In as resolveTemplate,En as rewriteTemplateNodeRefs,D as runAgentTurn,Ft as safeParseJSON,z as sanitizeMemoryDocument,P as sanitizeUserIdentity,He as sendEvent,k as serverSend,Ce as setMessage,Ze as signTriggerMaterial,Oe as startEngine,Re as startMemoryLength,we as startMemoryModel,$n as stripUnsupportedFromNodeData,$t as tempTool,Ct as timingSafeEqualHex,Ae as toStreamTextSettings,Qe as triggerSignatureMaterial,Ht as twitter,Gr as validateFlowStart,tn as validateOutVars,Xt as vectorize,Ut as verifyToken,et as verifyTriggerRequest,O as verifyUser,fn as walkPath,Dn as workersAiParamSupport,Nn as xaiParamSupport};
|
|
@@ -37,6 +37,14 @@ export interface SessionEnv {
|
|
|
37
37
|
outputCollector?: RunOutputCollector;
|
|
38
38
|
/** Durable memory document for this DO (from `this.state.memory`, not engineState). */
|
|
39
39
|
agentMemory?: string;
|
|
40
|
+
/** Cooperative cancellation for in-process subflows. Runners read this instead of FlowEngineCallbacks. */
|
|
41
|
+
shouldStop?: () => boolean | Promise<boolean>;
|
|
42
|
+
/** Server-only stack of flowIds for in-process worker nodes. Never copy into engineState. */
|
|
43
|
+
workerStack?: string[];
|
|
44
|
+
/** Mutable per-turn counter for in-process worker node invocations. Never copy into engineState. */
|
|
45
|
+
workerCalls?: {
|
|
46
|
+
count: number;
|
|
47
|
+
};
|
|
40
48
|
}
|
|
41
49
|
export type { ComposioSessionMeta };
|
|
42
50
|
export interface State {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SessionEnv } from '../core/AgentDO';
|
|
2
|
+
import type { FlowEngineEvent, FlowEngineState } from '../logic/FlowEngine';
|
|
3
|
+
import type { TelemetryEvent } from '../utils/telemetry';
|
|
4
|
+
export default function workerNodeRunner(sessionEnv: SessionEnv, node: any, engineState: FlowEngineState, onServerEvent?: (event: FlowEngineEvent) => void, onResult?: (key: string, result: any) => void, _onChangeState?: (state: FlowEngineState) => void, onTelemetry?: (event: TelemetryEvent) => void): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"./chunk-Q7QHJJGR.js";import"./chunk-YLDLDEUP.js";import"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";export{a as vectorize};
|
package/package.json
CHANGED
package/dist/chunk-G3SGJ7XJ.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{tool as T}from"ai";import{z as p}from"zod";async function E(t,o){let r=await fetch(`${o.HX_CORE_URL}/ora/flow/${t}`,{method:"GET",headers:{Authorization:`${o.HX_API_KEY}`},cache:"no-store"});if(!r.ok)throw new Error("Failed to fetch flow KV");return r.json()}async function D(t,o){let r=await fetch(`${o.HX_CORE_URL}/ora/flow/${t}/state`,{method:"GET",headers:{Authorization:`${o.HX_API_KEY}`},cache:"no-store"});if(!r.ok)throw new Error("Failed to fetch flow state");return r.json()}async function A(t,o){let r=await fetch(`${o.HX_CORE_URL}/ora/vectorize/get`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`${o.HX_API_KEY}`},body:JSON.stringify({hashes:t})});if(!r.ok)throw new Error("Failed to fetch embeddings from cache");return r.json()}async function P(t,o){let r=await fetch(`${o.HX_CORE_URL}/ora/vectorize/put`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`${o.HX_API_KEY}`},body:JSON.stringify({items:t})});if(!r.ok)throw new Error("Failed to store embeddings in cache");return r.json()}var S=async t=>{let o=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Array.from(new Uint8Array(o)).map(r=>r.toString(16).padStart(2,"0")).join("")},_=async(t,o,r=!1)=>{var f,b,w,y;let i=Array.isArray(o)?o:[o],c=await Promise.all(i.map(e=>S(e))),s=!!((f=t==null?void 0:t.env)!=null&&f.HX_CORE_URL)&&!!((b=t==null?void 0:t.env)!=null&&b.HX_API_KEY);console.log("Debug: KV cache API available:",s);let l=[],n=[];if(s){console.log("Debug: Attempting to get embeddings from KV cache via API");try{l=await A(c,t.env)}catch(e){console.warn("Failed to fetch from KV cache API",e),l=c.map(()=>null)}n=l.map((e,a)=>e===null?a:-1).filter(e=>e!==-1),console.log("Debug: Cached embeddings found:",l.filter(e=>e!==null).length,"missing:",n.length)}else console.log("Debug: KV cache API not available, skipping cache lookup"),n=i.map((e,a)=>a);if(n.length===0)return console.log("Debug: All embeddings retrieved from cache"),{data:l};let d=n.map(e=>i[e]),g,h;console.log("Debug: Generating embeddings for missing texts, count:",d.length);for(let e=0;e<3;e++)try{console.log("Debug: Primary embedding generation attempt",e+1);let a=new Promise((x,$)=>setTimeout(()=>$(new Error("Timeout after 2 seconds")),2e3)),u=(w=t==null?void 0:t.env)==null?void 0:w.AI.run("@cf/baai/bge-m3",{text:d});g=await Promise.race([u,a]),console.log("Debug: Primary embedding generation successful on attempt",e+1);break}catch(a){if(console.warn(`Primary embedding attempt ${e+1} failed:`,a),h=a,e===2)break}if(!g){if(!r)throw h;console.warn("Falling back to Ollama");try{let e=await fetch(`${(y=t==null?void 0:t.env)==null?void 0:y.OLLAMA_BASE_URL}/api/embed`,{method:"POST",headers:{"Content-Type":"application/json",Cookie:"hxsecure=1"},body:JSON.stringify({model:"bge-m3:latest",input:d})});if(!e.ok)throw new Error(`Ollama API error: ${e.statusText}`);let a=await e.json();console.log("Embedding response data:",a.embeddings.length),g={data:a.embeddings},console.log("Debug: Fallback embedding generation successful")}catch(e){throw console.error("Both embedding methods failed:",e),e}}if(s&&n.length>0){console.log("Debug: Storing new embeddings in KV cache via API");let e=n.map((a,u)=>({hash:c[a],embedding:g.data[u]}));try{await P(e,t.env)}catch(a){console.warn("Failed to store in KV cache API",a)}}else console.log("Debug: Skipping cache storage as KV API not available or no new embeddings");let m=l.slice();for(let e=0;e<n.length;e++)m[n[e]]=g.data[e];return console.log("Debug: Embedding generation complete, total embeddings:",m.length),{data:m}};function V(t,o,r){return T({description:"Perform semantic vector search on memo data with optional static parameters. Returns relevant matches with scores and metadata.",inputSchema:p.object({query:p.string().min(1).describe("The search query to vectorize and search for"),topK:p.number().optional().default(5).describe("Number of top results to return (overrides static params if provided)")}),execute:async({query:i,topK:c=3})=>{var l;let s=r==null?void 0:r.namespace;if(!s)return{results:[]};if(`${i}${s}${c}`,!i||typeof i!="string"||i.trim()==="")return{results:[]};try{let n=await _(t,i,!0),d=await t.env[`VDB_${(l=o.flowData)==null?void 0:l.tenant}_1024`].query(n.data[0],{namespace:s,topK:c,returnMetadata:"all"}),h=(Array.isArray(d.matches)?d.matches:[]).map(m=>{var f;return(f=m.metadata)==null?void 0:f.value}).filter(m=>typeof m=="string");return`${i}${s}${c}${h.length}`,{query:i,topK:c,matches:h}}catch(n){return`${i}${s}${c}${n}`,{results:[]}}}})}export{E as a,D as b,S as c,_ as d,V as e};
|
package/dist/chunk-QHCN3UMW.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
function H(e){try{let t=JSON.parse(e);if(t&&typeof t=="object"&&typeof t.text=="string")return t}catch{}return{text:e}}var T=256;function Y(e){if(typeof e!="string")return null;let t=e.trim();return t?t.slice(0,T):null}function V(e){try{let t=JSON.parse(e);if(t&&typeof t=="object"&&typeof t.name=="string"&&typeof t.value=="string"){let n=t.name.trim();return/^[A-Z][A-Z0-9_]*$/.test(n)?{name:n,value:t.value}:null}}catch{}return null}var F={USER_MESSAGE:"M",USER_CLEAR_HISTORY:"CH",USER_AUTH:"AUT",USER_IDENTITY:"UID",SERVER_EVENT:"SE",SERVER_HISTORY:"HIS",SERVER_ERROR:"ERR",SERVER_STEP:"STEP",SERVER_TEXT_STREAM:"TS",SERVER_TEXT_STREAM_COMPLETE:"TSC",SERVER_REASONING_STREAM:"RS",SERVER_REASONING_STREAM_COMPLETE:"RSC",SERVER_CONFIG:"CFG"};var x=["temperature","topP","topK","frequencyPenalty","presencePenalty","maxOutputTokens","seed","stopSequences","maxRetries"],E=["temperature","topP","topK","frequencyPenalty","presencePenalty"],R={precise:{temperature:.3,topP:.9,topK:30},balanced:{temperature:.8,topP:1,topK:50},creative:{temperature:1.1,topP:.95,topK:80}},M=1e-6,g={temperature:{min:0,max:2,step:.1},topP:{min:0,max:1,step:.05},topK:{min:1,max:500,step:1},frequencyPenalty:{min:-2,max:2,step:.1},presencePenalty:{min:-2,max:2,step:.1},maxOutputTokens:{max:128e3},seed:!0,stopSequences:{max:4}};function h(e){return/^gpt-5/i.test(e)}function c(e){let t=e.contextWindow??128e3;return e.provider==="openai"?h(e.providerModel)?{temperature:!1,topP:!1,topK:{min:1,max:500,step:1},frequencyPenalty:{min:-2,max:2,step:.1},presencePenalty:{min:-2,max:2,step:.1},maxOutputTokens:{max:t},seed:!0,stopSequences:{max:4}}:{...g,maxOutputTokens:{max:t}}:e.provider==="xai"?{...g,maxOutputTokens:{max:t},seed:!0}:e.provider==="anthropic"?{temperature:{min:0,max:1,step:.1},topP:{min:0,max:1,step:.05},topK:{min:1,max:500,step:1},frequencyPenalty:!1,presencePenalty:!1,maxOutputTokens:{max:t},seed:!1,stopSequences:{max:4}}:e.provider==="openrouter"?{temperature:{min:0,max:2,step:.1},topP:{min:0,max:1,step:.05},topK:{min:1,max:500,step:1},frequencyPenalty:{min:-2,max:2,step:.1},presencePenalty:{min:-2,max:2,step:.1},maxOutputTokens:{max:t},seed:!0,stopSequences:{max:4}}:e.provider==="workersai"||e.provider==="cloudflare"?{temperature:{min:0,max:2,step:.1},topP:{min:0,max:1,step:.05},topK:{min:1,max:500,step:1},frequencyPenalty:!1,presencePenalty:!1,maxOutputTokens:{max:t},seed:!1,stopSequences:{max:4}}:{...g,maxOutputTokens:{max:t}}}function l(e,t){if(e==="maxRetries")return!0;let n=t[e];return n===!1?!1:e==="seed"?n===!0:n!==void 0}function v(e,t,n){return Math.min(n,Math.max(t,e))}function b(e,t){return e===void 0&&t===void 0?!0:e===void 0||t===void 0?!1:Math.abs(e-t)<M}function z(e,t){for(let n of["precise","balanced","creative"]){let o=R[n],s=!0;for(let r of E){if(t&&!l(r,t))continue;let a=o[r],i=e[r];if(a!==void 0){if(typeof a=="number"&&typeof i=="number"){if(!b(i,a)){s=!1;break}}else if(i!==a){s=!1;break}}}if(s)return n}return"custom"}function Z(e,t){let n=R[e],o={};for(let s of E){if(t&&!l(s,t))continue;let r=n[s];r!==void 0&&(o[s]=r)}return o}function B(e){if(!e)return{};let t={};for(let n of x){let o=e[n];o!==void 0&&(n==="stopSequences"?Array.isArray(o)&&(t.stopSequences=o.filter(s=>typeof s=="string")):n==="maxRetries"?typeof o=="number"&&(t.maxRetries=o):typeof o=="number"&&(t[n]=o))}return t}function X(e,t,n){var a;let o={...e,...t},s=[],r={};for(let i of x){let f=o[i];if(f===void 0)continue;if(i==="maxRetries"){r.maxRetries=f;continue}if(!l(i,n)){s.push({key:i,action:"stripped",detail:"unsupported by model"});continue}if(i==="stopSequences"){let u=f,p=((a=n.stopSequences)==null?void 0:a.max)??u.length;u.length>p?(r.stopSequences=u.slice(0,p),s.push({key:i,action:"clamped",detail:`truncated to ${p} sequences`})):r.stopSequences=u;continue}if(i==="seed"){r.seed=f;continue}let m=n[i];if(m&&typeof m=="object"&&"min"in m){let u=f,p=v(u,m.min,m.max);r[i]=p,p!==u&&s.push({key:i,action:"clamped",detail:`clamped from ${u} to ${p}`})}else if(i==="maxOutputTokens"){let u=f,p=n.maxOutputTokens.max,d=Math.min(u,p);r.maxOutputTokens=d,d!==u&&s.push({key:i,action:"clamped",detail:`clamped from ${u} to ${d}`})}}return{effectiveParams:r,adjustments:s}}function J(e){let t={};return e.temperature!==void 0&&(t.temperature=e.temperature),e.topP!==void 0&&(t.topP=e.topP),e.topK!==void 0&&(t.topK=e.topK),e.frequencyPenalty!==void 0&&(t.frequencyPenalty=e.frequencyPenalty),e.presencePenalty!==void 0&&(t.presencePenalty=e.presencePenalty),e.maxOutputTokens!==void 0&&(t.maxOutputTokens=e.maxOutputTokens),e.seed!==void 0&&(t.seed=e.seed),e.stopSequences!==void 0&&(t.stopSequences=e.stopSequences),e.maxRetries!==void 0&&(t.maxRetries=e.maxRetries),t}function Q(e=128e3){return c({provider:"openai",providerModel:"gpt-4.1",contextWindow:e})}function ee(e=2e6){return c({provider:"openai",providerModel:"gpt-5-nano",contextWindow:e})}function te(e=256e3){return c({provider:"xai",providerModel:"grok-4-fast",contextWindow:e})}function ne(e=128e3){return c({provider:"cloudflare",providerModel:"@cf/meta/llama-3.2-3b-instruct",contextWindow:e})}function re(e,t){let n={...e};for(let o of x)o==="maxRetries"||n[o]===void 0||l(o,t)||delete n[o];return n}var k=["none","minimal","low","medium","high","xhigh"],_=e=>typeof e=="string"&&k.includes(e);function se(e){var n;let t=(n=e.capabilities)==null?void 0:n.reasoning;return t&&typeof t=="object"?t:t?{kind:"effort"}:{kind:"none"}}function O(e){return e.kind!=="effort"?[]:e.levels??[]}var A=e=>e===!0||e==="true";function ie(e){return e.kind==="tag"?!0:e.kind==="effort"?A(e.exposesReasoning):!1}function ae(e,t){if(e.kind!=="effort")return;let n=O(e);if(_(t)&&n.includes(t))return t;if(e.defaultLevel&&n.includes(e.defaultLevel))return e.defaultLevel}function ue(e,t){let{effort:n,exposeReasoning:o,maxTokens:s}=t;if(e==="openai"){let r={};return n&&(r.reasoningEffort=n),o&&(r.reasoningSummary="auto"),Object.keys(r).length?{openai:r}:void 0}if(e==="xai")return n?{xai:{reasoningEffort:n}}:void 0;if(e==="openrouter"){if(!s&&!n)return;let r={};return o!==void 0&&(r.exclude=!o),s?{openrouter:{reasoning:{...r,max_tokens:s}}}:{openrouter:{reasoning:{...r,effort:n}}}}if(e==="anthropic"){let r={};return(n||o)&&(r.thinking={type:"adaptive",...o?{display:"summarized"}:{}}),n&&(r.effort=n),Object.keys(r).length?{anthropic:r}:void 0}}var L=[{id:"convertTempMessure",label:"Convert Temperature",description:"Convert temperature between Celsius, Fahrenheit, and Kelvin with optional static parameters"},{id:"tempTool",label:"Temp Tool",description:"Temporary demo tool"},{id:"twitter",label:"Twitter",description:"Twitter API for user info, tweets, mentions, replies, advanced search, and trends"},{id:"vectorize",label:"Vectorize",description:"Perform a semantic vector search. Returns relevant matches with scores and metadata."}],fe=L.reduce((e,t)=>(e[t.id]=t,e),{});var ce={};function le(e){}var N={short:100,medium:250,long:1e3},w={short:2e3,medium:5e3,long:2e4},y="medium",I="gpt_5_nano",P=4;function C(e){return e==="short"||e==="medium"||e==="long"?e:y}function q(e=y){return w[e]}function ge(e=y){return N[e]}function G(e){return e?Math.ceil(e.length/P):0}function K(e,t){if(!e)return{content:"",truncated:!1};if(G(e)<=t)return{content:e,truncated:!1};let n=Math.max(0,t*P);return{content:e.slice(0,n),truncated:!0}}function xe(e){let t=e==null?void 0:e.memory_enabled;return t===!0||t==="true"||t===1}function ye(e){let t=e==null?void 0:e.memory_model;return typeof t=="string"&&t.trim()?t.trim():I}function Ee(e){return C(e==null?void 0:e.memory_length)}function Re(e,t){let n=q(e);return t&&t!=="none"?n+2048:n}var S=/^(user|assistant|usuario|asistente|u|a)\s*:/i,U=/^(hola|hello|hi|hey|buenas|buen[oa]s?\s+d[ií]as?|qu[eé]\s+tal|qu[eé]\s+haces)[\s,.!¡¿?]*$/i;function W(e){let t=e.split(`
|
|
2
|
-
`).map(o=>o.replace(/^[-*]\s*/,"").trim()).filter(Boolean);if(t.length<2)return!1;let n=t.filter(o=>S.test(o));return n.length>=2&&n.length>=Math.ceil(t.length/2)}function j(e){let t=e.split(`
|
|
3
|
-
`).map(n=>n.trim()).filter(Boolean).filter(n=>n!=="(empty)"&&n!=="(none)").filter(n=>!S.test(n.replace(/^[-*]\s*/,"")));return W(t.join(`
|
|
4
|
-
`))?"":t.join(`
|
|
5
|
-
`)}function Pe(e){let t=e.trim();if(!t||U.test(t))return[];let n=[],o=t.match(/(?:me llamo|soy|i['’]m|i am|my name is)\s+([A-Za-zÁÉÍÓÚÜáéíóúüñÑ][\wÁÉÍÓÚÜáéíóúüñÑ'-]{1,40})/i);o&&n.push(`Name: ${o[1]}`);let s=t.match(/me gusta[n]?\s+([^,.!?]+)/i);if(s&&n.push(`Likes: ${s[1].trim()}`),/[?¿]/.test(t)||/^(pregunt|dime\b|cu[eé]nt)/i.test(t))return n;let a=t.replace(/^(hola|hey|hi)[,\s]+/i,"").replace(/(?:me llamo|soy)\s+[A-Za-zÁÉÍÓÚÜáéíóúüñÑ][\wÁÉÍÓÚÜáéíóúüñÑ'-]*/gi,"").replace(/me gusta[n]?\s+[^,.!?]+/gi,"").replace(/[,.\s]+/g," ").trim();return a.length>=16&&n.push(a.slice(0,140)),n}function Se(e,t,n){let s=[...j(e).split(`
|
|
6
|
-
`).map(r=>r.replace(/^[-*]\s*/,"").trim()).filter(Boolean)];for(let r of t){let a=r.replace(/^[-*]\s*/,"").trim();a&&(s.some(i=>i.toLowerCase()===a.toLowerCase())||s.push(a))}return s.length===0?"":K(s.map(r=>`- ${r}`).join(`
|
|
7
|
-
`),n).content}export{F as a,H as b,T as c,Y as d,V as e,N as f,w as g,y as h,I as i,C as j,q as k,ge as l,G as m,K as n,xe as o,ye as p,Ee as q,Re as r,W as s,j as t,Pe as u,Se as v,x as w,E as x,R as y,c as z,z as A,Z as B,B as C,X as D,J as E,Q as F,ee as G,te as H,ne as I,re as J,k as K,se as L,O as M,ie as N,ae as O,ue as P,fe as Q,ce as R,le as S};
|
package/dist/chunk-VLZKZDRV.js
DELETED
|
@@ -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))(g||{});var b=/^[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=[],o=new Set;for(let r of t){let s=typeof(r==null?void 0:r.name)=="string"?r.name.trim():"";if(!s||!b.test(s)||o.has(s))continue;o.add(s);let i=P.includes(r==null?void 0:r.type)?r.type:"string";n.push({name:s,type:i,required:(r==null?void 0:r.required)===!0,default:(r==null?void 0:r.default)??void 0})}return n}function A(e,t){let n=e.label||e.name;switch(e.type){case"number":{let o=typeof t=="number"?t:Number(String(t).trim());return Number.isFinite(o)?{value:o}:{error:`"${n}" must be a number`}}case"boolean":{if(typeof t=="boolean")return{value:t};let o=String(t).trim().toLowerCase();return["true","1","yes","si","s\xED"].includes(o)?{value:!0}:["false","0","no"].includes(o)?{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 B(e,t){let n={},o=[],r=t??{};for(let s of e){let i=r[s.name],a=S(i)?s.default:i;if(S(a)){s.required&&o.push(`"${s.label||s.name}" is required`);continue}let{value:c,error:u}=A(s,a);u?o.push(u):n[s.name]=c}return{values:n,errors:o}}function D(e){return typeof e=="string"?e:e==null?"":typeof e=="object"?JSON.stringify(e):String(e)}function z(e,t,n){let o=t.user_input;if(typeof o=="string"&&o.trim())return o;let r=e.filter(i=>i.name!=="user_input"&&t[i.name]!==void 0).map(i=>`- ${i.label||i.name}: ${D(t[i.name])}`),s=(n==null?void 0:n.trim())||"Automated execution";return r.length>0?`${s}
|
|
2
|
-
${r.join(`
|
|
3
|
-
`)}`:s}var P=["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":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"}];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 $(e){var r;let t=[...N(e.type),...T(e),...Array.isArray((r=e.data)==null?void 0:r.outVars)?e.data.outVars:[]],n=new Set,o=[];for(let s of t){let i=typeof(s==null?void 0:s.name)=="string"?s.name.trim():"";O.test(i)?n.has(i)?o.push(`Node ${e.id} has duplicate output name "${i}"`):n.add(i):o.push(`Node ${e.id} has an invalid output name`)}return o}function d(e){var o;let t=[...N(e.type),...T(e)],n=Array.isArray((o=e.data)==null?void 0:o.outVars)?e.data.outVars:[];return[...t.map(r=>({...r,source:"default"})),...n.map(r=>({...r,name:typeof(r==null?void 0:r.name)=="string"?r.name.trim():""})).filter(r=>O.test(r.name)).map(r=>({...r,source:"user"}))]}function w(e,t){let n=new Set,o=[t],r=new Set([t]);for(;o.length>0;){let s=o.shift();for(let i of e)i.target!==s||r.has(i.source)||(r.add(i.source),n.add(i.source),o.push(i.source))}return n}function U(e,t){var r,s;if(e.type!=="startNode")return t;let n=((r=e.data)==null?void 0:r.allow_images)===!0,o=((s=e.data)==null?void 0:s.allow_documents)===!0;return t.filter(i=>!(i.name==="images"&&!n||i.name==="files"&&!o))}function C(e,t,n){let o=w(t,n),r=[],s=new Set;for(let i of o){let a=e.find(c=>c.id===i);if(a)for(let c of U(a,d(a))){let u=a.type==="startNode"&&c.source==="default"?c.name:`${a.id}.${c.name}`;s.has(u)||(s.add(u),r.push({...c,ref:u,nodeId:a.id}))}}return r}function ne(e,t,n){return new Set(C(e,t,n).map(o=>o.ref))}function x(e,t){let n=w(t.edges,t.currentNodeId);return t.nodes.filter(o=>n.has(o.id)&&e.startsWith(`${o.id}.`)).sort((o,r)=>r.id.length-o.id.length)[0]}function I(e,t){return e.slice(t.length+1)}function re(e){return e.type==="image"||e.type==="file"}var L=new Set(["__proto__","prototype","constructor"]),E="\0__ORA_OB__\0",y="\0__ORA_CB__\0",f=class extends Error{constructor(n,o){super(o);this.code=n;this.name="VariableResolutionError"}code};function j(e){for(let t of e.split("."))if(L.has(t))throw new f("UNSAFE_PATH",`Unsafe variable path segment "${t}"`)}function v(e,t){if(!t)return e;j(t);let n=e;for(let o of t.split(".")){if(n==null||!Object.prototype.hasOwnProperty.call(Object(n),o))return;n=n[o]}return n}function k(e,t){var o,r,s,i,a,c,u,p;if(Object.prototype.hasOwnProperty.call(t.refOverrides??{},e))return{value:t.refOverrides[e]};let n=t.nodes.find(l=>l.type==="startNode");if(e==="user_input")return{value:(o=t.context)==null?void 0:o.user_input};if(e==="memory")return{value:((r=t.context)==null?void 0:r.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"&&((a=n==null?void 0:n.data)==null?void 0:a.allow_documents)===!0)return{value:(c=t.context)==null?void 0:c.files};if(e==="classified_id")return{value:(u=t.context)==null?void 0:u.classified_id};if(n&&m(n.data).some(l=>l.name===e))return{value:(p=t.context)==null?void 0:p[e]}}function R(e,t){var h;let n=e.trim();if(!n)throw new f("INVALID_EXPRESSION","Variable reference is empty");let o=n.includes(".")?void 0:k(n,t);if(o)return o;if(!n.includes("."))throw new f("UNKNOWN_CONTEXT_REF",`Unknown run-context variable "${n}"`);let r=x(n,t);if(!r)throw new f("OUT_OF_SCOPE",`Variable "${n}" is not in this node's connection scope`);let s=I(n,r.id),[i,...a]=s.split("."),c=d(r).find(F=>F.name===i);if(!c)throw new f("UNKNOWN_OUTPUT",`Node "${r.id}" does not expose output "${i}"`);if(Object.prototype.hasOwnProperty.call(t.refOverrides??{},n))return{value:t.refOverrides[n]};let u=(h=t.results)==null?void 0:h[r.id];if(u==null)return{value:void 0,missing:"ancestor_not_executed"};let p=v(u,c.path??""),l=a.length>0?v(p,a.join(".")):p;return l==null?{value:void 0,missing:"path_not_found"}:{value:l}}function ce(e,t){return R(e,t).value}function M(e){let t=null,n=!1;for(let o=0;o<e.length-1;o+=1){let r=e[o];if(n){n=!1;continue}if(r==="\\"){n=!0;continue}if(t){r===t&&(t=null);continue}if(r==='"'||r==="'"){t=r;continue}if(r==="?"&&e[o+1]==="?")return{ref:e.slice(0,o).trim(),rawDefault:e.slice(o+2).trim()}}return{ref:e.trim()}}function W(e){if(e.length<2||!['"',"'"].includes(e[0])||e.at(-1)!==e[0])throw new f("INVALID_EXPRESSION","Template defaults must be quoted string literals");if(e[0]==='"')try{return JSON.parse(e)}catch{throw new f("INVALID_EXPRESSION","Invalid double-quoted template default")}return e.slice(1,-1).replace(/\\'/g,"'").replace(/\\\\/g,"\\")}function V(e){let{ref:t,rawDefault:n}=M(e.trim());if(!t)throw new f("INVALID_EXPRESSION","Template expression is missing a variable reference");return{ref:t,...n===void 0?{}:{defaultValue:W(n)}}}function le(e){let t=e.replace(/\\\{\{/g,E).replace(/\\\}\}/g,y),n=[],o=/\{\{\s*([^}]+?)\s*\}\}/g;for(let r of t.matchAll(o))n.push(V(r[1]).ref);return n}function X(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function fe(e,t,n){let o=X(t);return e.replace(new RegExp(`(\\{\\{\\s*)${o}(?=\\.)`,"g"),`$1${n}`)}function _(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 q(e,t){var n;throw(n=t==null?void 0:t.onError)==null||n.call(t,e.message),e}function pe(e,t,n,o){if(!e)return e;let r=(o==null?void 0:o.serializeNonStrings)??!1,s=e.replace(/\\\{\{/g,E).replace(/\\\}\}/g,y),i=/\{\{\s*([^}]+?)\s*\}\}/g;return s=s.replace(i,(a,c)=>{try{let u=V(c);if(u.ref.startsWith("secrets.")){let l=u.ref.slice(8);if(!Object.prototype.hasOwnProperty.call(n.secrets??{},l))throw new f("MISSING_SECRET",`Secret "${l}" is not defined for this tenant`);return _(n.secrets[l],r)}let p=R(u.ref,n);if(p.missing){if(u.defaultValue!==void 0)return _(u.defaultValue,r);let l=p.missing==="ancestor_not_executed"?`Ancestor for variable "${u.ref}" did not execute in this branch`:`Variable path "${u.ref}" did not produce a value`;throw new f(p.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",l)}return _(p.value,r)}catch(u){if(u instanceof f)return q(u,o);throw u}}),s.split(E).join("{{").split(y).join("}}")}export{g as a,b,m as c,B as d,z as e,O as f,N as g,$ as h,d as i,w as j,C as k,ne as l,x as m,I as n,re as o,f as p,v as q,R as r,ce as s,V as t,le as u,fe as v,pe as w};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as a,e as b}from"./chunk-EZIUCT77.js";import"./chunk-VLZKZDRV.js";import"./chunk-V6JSMX5A.js";import"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";export{a as customHttpTool,b as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{e as a}from"./chunk-G3SGJ7XJ.js";import"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";export{a as vectorize};
|