@hugex/ai 3.0.2 → 3.0.4
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/chunk-ENVV3OEO.js +7 -0
- package/dist/{chunk-UBNZUUTD.js → chunk-EZIUCT77.js} +1 -1
- package/dist/chunk-VLZKZDRV.js +3 -0
- package/dist/client.js +1 -1
- package/dist/common/utils/agentMemory.d.ts +24 -0
- package/dist/common.d.ts +1 -0
- package/dist/common.js +1 -1
- package/dist/httpTool-5D2PQJKV.js +1 -0
- package/dist/index.js +16 -12
- package/dist/server/core/AgentDO.d.ts +18 -1
- package/dist/server/logic/memoryWriter.d.ts +46 -0
- package/package.json +1 -1
- package/dist/chunk-K4MP63XM.js +0 -3
- package/dist/chunk-TSZICF6X.js +0 -1
- package/dist/httpTool-LSNJKMPR.js +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function j(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 H(e){if(typeof e!="string")return null;let t=e.trim();return t?t.slice(0,T):null}function Y(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"],y=["temperature","topP","topK","frequencyPenalty","presencePenalty"],E={precise:{temperature:.3,topP:.9,topK:30},balanced:{temperature:.8,topP:1,topK:50},creative:{temperature:1.1,topP:.95,topK:80}},h=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 M(e){return/^gpt-5/i.test(e)}function c(e){let t=e.contextWindow??128e3;return e.provider==="openai"?M(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)<h}function $(e,t){for(let n of["precise","balanced","creative"]){let o=E[n],s=!0;for(let r of y){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=E[e],o={};for(let s of y){if(t&&!l(s,t))continue;let r=n[s];r!==void 0&&(o[s]=r)}return o}function Z(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 B(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 X(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 J(e=128e3){return c({provider:"openai",providerModel:"gpt-4.1",contextWindow:e})}function Q(e=2e6){return c({provider:"openai",providerModel:"gpt-5-nano",contextWindow:e})}function ee(e=256e3){return c({provider:"xai",providerModel:"grok-4-fast",contextWindow:e})}function te(e=128e3){return c({provider:"cloudflare",providerModel:"@cf/meta/llama-3.2-3b-instruct",contextWindow:e})}function ne(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 oe(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 se(e){return e.kind==="tag"?!0:e.kind==="effort"?A(e.exposesReasoning):!1}function ie(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 ae(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."}],pe=L.reduce((e,t)=>(e[t.id]=t,e),{});var me={};function ce(e){}var N={short:512,medium:1024,long:2048},R="medium",w="gpt_5_nano",P=4;function I(e){return e==="short"||e==="medium"||e==="long"?e:R}function C(e=R){return N[e]}function q(e){return e?Math.ceil(e.length/P):0}function G(e,t){if(!e)return{content:"",truncated:!1};if(q(e)<=t)return{content:e,truncated:!1};let n=Math.max(0,t*P);return{content:e.slice(0,n),truncated:!0}}function de(e){let t=e==null?void 0:e.memory_enabled;return t===!0||t==="true"||t===1}function ge(e){let t=e==null?void 0:e.memory_model;return typeof t=="string"&&t.trim()?t.trim():w}function xe(e){return I(e==null?void 0:e.memory_length)}function ye(e,t){let n=C(e);return t&&t!=="none"?Math.min(n+2048,8192):n}var S=/^(user|assistant|usuario|asistente|u|a)\s*:/i,K=/^(hola|hello|hi|hey|buenas|buen[oa]s?\s+d[ií]as?|qu[eé]\s+tal|qu[eé]\s+haces)[\s,.!¡¿?]*$/i;function U(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 W(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 U(t.join(`
|
|
4
|
+
`))?"":t.join(`
|
|
5
|
+
`)}function Ee(e){let t=e.trim();if(!t||K.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 Re(e,t,n){let s=[...W(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?"":G(s.map(r=>`- ${r}`).join(`
|
|
7
|
+
`),n).content}export{F as a,j as b,T as c,H as d,Y as e,N as f,R as g,w as h,I as i,C as j,q as k,G as l,de as m,ge as n,xe as o,ye as p,U as q,W as r,Ee as s,Re as t,x as u,y as v,E as w,c as x,$ as y,z,Z as A,B,X as C,J as D,Q as E,ee as F,te as G,ne as H,k as I,oe as J,O as K,se as L,ie as M,ae as N,pe as O,me as P,ce as Q};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{q as N}from"./chunk-
|
|
1
|
+
import{q as N}from"./chunk-VLZKZDRV.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,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))(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};
|
package/dist/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as De,B as He,a as u,b as Q,c as T,d as X,e as z,f as
|
|
1
|
+
import{A as De,B as He,C as je,D as Ue,E as Pe,F as Je,G as Ge,H as $e,I as Le,J as Ye,K as ke,L as Ke,M as Qe,N as Xe,O as ze,P as Be,Q as We,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 be,v as Ne,w as Oe,x as qe,y as Ve,z as Fe}from"./chunk-ENVV3OEO.js";import{a as $,b as L,c as Y,d as k,e as K,f as ue,g as de,h as ve,i as ye,j as me,k as Se,l as fe,m as Ae,n as Re,o as Me,p as Ee,q as Te,r as Ie,s as Ce,t as he,u as xe,v as we,w as _e}from"./chunk-VLZKZDRV.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 it(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{W as DEFAULT_MEMORY_LENGTH,Z as DEFAULT_MEMORY_MODEL,L as FLOW_INPUT_NAME_RE,be as GENERATION_PARAM_KEYS,Oe as GENERATION_PRESETS,T as MAX_USER_IDENTITY_LENGTH,B as MEMORY_LENGTH_TOKENS,Be as MODEL_REGISTRY_SNAPSHOT,$ as NodeType,ue as OUT_VAR_NAME_RE,Ne as PRESET_PARAM_KEYS,Le as REASONING_EFFORT_LEVELS,ze as TOOL_REGISTRY_SNAPSHOT,Ee as VariableResolutionError,Fe as applyPresetToOverrides,Xe as buildReasoningProviderOptions,fe as buildScope,K as buildTriggerMessageText,se as capMemoryContent,qe as deriveParamSupport,ne as estimateTokens,xe as extractTemplateReferences,pe as extractUserKeypoints,Ae as findScopedSourceNode,h as getAgentStore,me as getAncestorNodeIds,de as getDefaultOutVars,ye as getEffectiveOutVars,Y as getFlowInputDefs,We as getModelEntry,Re as getRefTail,Se as getUpstreamOutVars,Me as isBinaryOutVar,oe as isStartMemoryEnabled,G as logc,ge as looksLikeTranscript,ie as memoryGenerationMaxTokens,te as memoryTokenLimit,ce as mergeKeypointMemory,u as messageTypes,He as normalizeEffectiveParams,k as normalizeFlowInputs,Ye as normalizeReasoning,Pe as openAiReasoningParamSupport,Ue as openAiStandardParamSupport,ee as parseMemoryLength,he as parseTemplateExpression,z as parseUserAuth,Q as parseUserMessage,De as pickNodeOverrides,ke as reasoningEffortLevels,Ke as reasoningExposable,Ce as resolveOutVarRef,Ve as resolvePreset,Qe as resolveReasoningEffort,Ie as resolveReference,_e as resolveTemplate,we as rewriteTemplateNodeRefs,le as sanitizeMemoryDocument,X as sanitizeUserIdentity,ae as startMemoryLength,re as startMemoryModel,$e as stripUnsupportedFromNodeData,je as toStreamTextSettings,it as useAgent,j as useAgentStore,ve as validateOutVars,Te as walkPath,Ge as workersAiParamSupport,Je as xaiParamSupport};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type MemoryLength = 'short' | 'medium' | 'long';
|
|
2
|
+
export declare const MEMORY_LENGTH_TOKENS: {
|
|
3
|
+
readonly short: 512;
|
|
4
|
+
readonly medium: 1024;
|
|
5
|
+
readonly long: 2048;
|
|
6
|
+
};
|
|
7
|
+
export declare const DEFAULT_MEMORY_LENGTH: MemoryLength;
|
|
8
|
+
export declare const DEFAULT_MEMORY_MODEL = "gpt_5_nano";
|
|
9
|
+
export declare function parseMemoryLength(value: unknown): MemoryLength;
|
|
10
|
+
export declare function memoryTokenLimit(length?: MemoryLength): number;
|
|
11
|
+
export declare function estimateTokens(text: string): number;
|
|
12
|
+
export declare function capMemoryContent(content: string, maxTokens: number): {
|
|
13
|
+
content: string;
|
|
14
|
+
truncated: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare function isStartMemoryEnabled(data: Record<string, unknown> | undefined | null): boolean;
|
|
17
|
+
export declare function startMemoryModel(data: Record<string, unknown> | undefined | null): string;
|
|
18
|
+
export declare function startMemoryLength(data: Record<string, unknown> | undefined | null): MemoryLength;
|
|
19
|
+
/** Reasoning models spend output budget on thinking; request extra tokens then cap the document. */
|
|
20
|
+
export declare function memoryGenerationMaxTokens(length: MemoryLength, reasoningKind?: string): number;
|
|
21
|
+
export declare function looksLikeTranscript(content: string): boolean;
|
|
22
|
+
export declare function sanitizeMemoryDocument(content: string): string;
|
|
23
|
+
export declare function extractUserKeypoints(userText: string): string[];
|
|
24
|
+
export declare function mergeKeypointMemory(previous: string, additions: string[], maxTokens: number): string;
|
package/dist/common.d.ts
CHANGED
package/dist/common.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as Y,B as Z,a as b,b as h,c as i,d as j,e as k,f as
|
|
1
|
+
import{A as Y,B as Z,C as _,D as $,E as aa,F as ba,G as ca,H as da,I as ea,J as fa,K as ga,L as ha,M as ia,N as ja,O as ka,P as la,Q as ma,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 S,v as T,w as U,x as V,y as W,z as X}from"./chunk-ENVV3OEO.js";import{a as c,b as d,c as e,d as f,e as g,f as A,g as B,h as C,i as D,j as E,k as F,l as G,m as H,n as I,o as J,p as K,q as L,r as M,s as N,t as O,u as P,v as Q,w as R}from"./chunk-VLZKZDRV.js";import{a}from"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";export{m as DEFAULT_MEMORY_LENGTH,n as DEFAULT_MEMORY_MODEL,d as FLOW_INPUT_NAME_RE,S as GENERATION_PARAM_KEYS,U as GENERATION_PRESETS,i as MAX_USER_IDENTITY_LENGTH,l as MEMORY_LENGTH_TOKENS,la as MODEL_REGISTRY_SNAPSHOT,c as NodeType,A as OUT_VAR_NAME_RE,T as PRESET_PARAM_KEYS,ea as REASONING_EFFORT_LEVELS,ka as TOOL_REGISTRY_SNAPSHOT,K as VariableResolutionError,X as applyPresetToOverrides,ja as buildReasoningProviderOptions,G as buildScope,g as buildTriggerMessageText,r as capMemoryContent,V as deriveParamSupport,q as estimateTokens,P as extractTemplateReferences,y as extractUserKeypoints,H as findScopedSourceNode,E as getAncestorNodeIds,B as getDefaultOutVars,D as getEffectiveOutVars,e as getFlowInputDefs,ma as getModelEntry,I as getRefTail,F as getUpstreamOutVars,J as isBinaryOutVar,s as isStartMemoryEnabled,a as logc,w as looksLikeTranscript,v as memoryGenerationMaxTokens,p as memoryTokenLimit,z as mergeKeypointMemory,b as messageTypes,Z as normalizeEffectiveParams,f as normalizeFlowInputs,fa as normalizeReasoning,aa as openAiReasoningParamSupport,$ as openAiStandardParamSupport,o as parseMemoryLength,O as parseTemplateExpression,k as parseUserAuth,h as parseUserMessage,Y as pickNodeOverrides,ga as reasoningEffortLevels,ha as reasoningExposable,N as resolveOutVarRef,W as resolvePreset,ia as resolveReasoningEffort,M as resolveReference,R as resolveTemplate,Q as rewriteTemplateNodeRefs,x as sanitizeMemoryDocument,j as sanitizeUserIdentity,u as startMemoryLength,t as startMemoryModel,da as stripUnsupportedFromNodeData,_ as toStreamTextSettings,C as validateOutVars,L as walkPath,ca as workersAiParamSupport,ba as xaiParamSupport};
|
|
@@ -0,0 +1 @@
|
|
|
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};
|
package/dist/index.js
CHANGED
|
@@ -1,26 +1,30 @@
|
|
|
1
|
-
import{a as Gt}from"./chunk-ELMOSEQ7.js";import{a as B,b as st,c as Wt,d as pt}from"./chunk-UBNZUUTD.js";import{a as ne}from"./chunk-OF6G42DM.js";import"./chunk-MOYYZBTC.js";import{a as re,b as ie}from"./chunk-CDGUEX3J.js";import{A as $s,B as ks,a as U,b as ct,c as ss,d as ot,e as qt,f as gs,g as ys,h as ws,i as Yt,j as hs,k as Rs,l as Bt,m as Zt,n as Qt,o as Is,p as xs,q as Ts,r as Ns,s as As,t as _s,u as vt,v as Os,w as te,x as ee,y as oe,z as se}from"./chunk-TSZICF6X.js";import{a as Q,b as os,c as v,d as Kt,e as Xt,f as ns,g as rs,h as Jt,i as lt,j as is,k as tt,l as as,m as cs,n as ls,o as ds,p as H,q as dt,r as J,s as us,t as ps,u as fs,v as ms,w as St}from"./chunk-K4MP63XM.js";import{a as Yo}from"./chunk-RYHQGPX5.js";import{a as Bo}from"./chunk-R6EKV3WR.js";import{a as vo}from"./chunk-6HY7QUMP.js";import{a as Zo,b as Qo}from"./chunk-V6JSMX5A.js";import{a as W,b as Z,c as ts,d as Vt,e as es}from"./chunk-G3SGJ7XJ.js";import{a as et}from"./chunk-U56YWPSI.js";import{a as ut,b as zt}from"./chunk-A2IRPAD4.js";import{a as at}from"./chunk-3TXHFKDN.js";import{Agent as Mo}from"agents";import{nanoid as bo}from"nanoid";var E=(o,t,s)=>{o.send(t+"::"+s)};async function qe(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 ae(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 ft(o){o.sql`DELETE FROM messages`}async function ce(o){await qe(o)}function xt(o){return{"Content-Type":"application/json",Authorization:o.HX_API_KEY}}function mt(o){return!!(o!=null&&o.HX_ORA_URL)&&!!(o!=null&&o.HX_API_KEY)}var Je="anonymous:";function le(o,t){return(o==null?void 0:o.trim())||`${Je}${t}`}async function Tt(o,t){if(!mt(o))return null;let s=await fetch(`${o.HX_ORA_URL}/internal/runs`,{method:"POST",headers:xt(o),body:JSON.stringify(t)});return s.ok?await s.json():(console.error("[oraTriggers] createRun failed",s.status,await s.text().catch(()=>"")),null)}async function nt(o,t){if(!mt(o))return{claimed:!0};let s=await fetch(`${o.HX_ORA_URL}/internal/runs/${encodeURIComponent(t)}/claim`,{method:"POST",headers:xt(o)});if(!s.ok){let e=await s.text().catch(()=>"");throw new Error(`claimRun ${t} failed with ${s.status}: ${e}`)}return await s.json()}async function gt(o,t,s,e=3){if(!mt(o))return!0;for(let n=1;n<=e;n++){try{let r=await fetch(`${o.HX_ORA_URL}/internal/runs/${encodeURIComponent(t)}/complete`,{method:"POST",headers:xt(o),body:JSON.stringify(s)});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 ${n} failed with ${r.status}`)}catch(r){console.warn(`[oraTriggers] completeRun ${t} attempt ${n} threw`,r)}n<e&&await new Promise(r=>setTimeout(r,250*n))}return console.error(`[oraTriggers] completeRun ${t} exhausted ${e} attempts; hx-ora will time the run out`),!1}async function de(o,t){if(!mt(o))return Promise.resolve();try{return await Tt(o,t)}catch(s){return console.error("[oraTriggers] recordRun failed",s),null}}var Nt=Object.freeze({}),Se="__SYSTEM_";function ue(o){return o.startsWith(Se)}function ze(o){let t={};for(let[s,e]of Object.entries(o))ue(s)||(t[s]=e);return Object.freeze(t)}async function yt(o,t){if(!t)return Nt;if(o.HX_ORA_URL&&o.HX_API_KEY)try{let n=await fetch(`${o.HX_ORA_URL}/internal/secrets`,{headers:{Authorization:o.HX_API_KEY}});if(n.ok){let r=await n.json();if(r.secrets)return ze(r.secrets)}else console.warn(`[secrets] API failed with status ${n.status}, falling back to KV`)}catch(n){console.error("[secrets] API request failed, falling back to KV",n)}let s=o.ORA_SECRETS;if(!s)return Nt;let e=`${t}:`;try{let n=await s.list({prefix:e,limit:1e3});n.list_complete===!1&&console.warn(`[secrets] tenant=${t} exceeded list page; truncating to first 1000 keys`);let r=n.keys.filter(a=>!ue(a.name.slice(e.length))),i=await Promise.all(r.map(async a=>{let u=await s.get(a.name);return u!==null?[a.name.slice(e.length),u]:null})),c={};for(let a of i){if(!a)continue;let[u,p]=a;u&&(c[u]=p)}return Object.freeze(c)}catch(n){return console.error("[secrets] failed to load tenant secrets from KV",{tenant:t,err:n}),Nt}}function pe(o){var n,r;let t=(n=o==null?void 0:o.flowData)==null?void 0:n.state,e=((t==null?void 0:t.nodes)??((r=o==null?void 0:o.flowData)==null?void 0:r.nodes)??[]).find(i=>i.type==="startNode");return e==null?void 0:e.data}import{nanoid as Do}from"nanoid";async function fe(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 n=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(!n.ok)return console.error(`extractDocuments: ${e.name} failed ${n.status}`),{name:e.name,text:""};let r=await n.json();return{name:e.name,text:r.text||""}}catch(n){return console.error(`extractDocuments: ${e.name} threw`,n),{name:e.name,text:""}}})):[]}function Ge(o,t,s){var e,n,r,i;return tt(((n=(e=s.flowData)==null?void 0:e.state)==null?void 0:n.nodes)??[],((i=(r=s.flowData)==null?void 0:r.state)==null?void 0:i.edges)??[],t.id).some(c=>c.ref===o&&(c.type==="image"||c.type==="file"))}function We(o,t){var i,c,a,u,p,g,d;let s=Array.isArray((i=o.data)==null?void 0:i.outputMapping)?o.data.outputMapping:[];if(s.length===0)return null;let e=((a=(c=t.flowData)==null?void 0:c.state)==null?void 0:a.nodes)||[],n={},r=new Set;for(let m of s){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(Ge(f,o,t))throw new Error(`Answer node ${o.id} cannot persist binary source "${f}"`);let y=J(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 H(y.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Answer node ${o.id} could not resolve output "${f}"`);h=m.default}n[l]=h,r.add(l)}try{JSON.stringify(n)}catch{throw new Error(`Answer node ${o.id} produced a value that is not JSON serializable`)}return n}async function At(o,t,s,e,n,r,i){var a,u,p;e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let c;try{c=We(t,s)}catch(g){throw e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"error",error:String(g)}}),g}c&&o.outputCollector&&o.outputCollector.add(t.id,c);try{let g=await((a=o.getMessages)==null?void 0:a.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=s==null?void 0:s.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"})}n==null||n(t.id,{type:"answerNode",message:"Answer response for: "+t.data.response,saved:!0,persistenceRequested:!!c&&!!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 G(o,t,s,e,n){var c,a,u,p,g;let r=(n==null?void 0:n.callerTag)??"llmNodeRunner",i=(n==null?void 0:n.serializeNonStrings)??!1;return St(o,t,{context:s.context??{},results:s.results??{},nodes:((a=(c=s.flowData)==null?void 0:c.state)==null?void 0:a.nodes)??[],edges:((p=(u=s.flowData)==null?void 0:u.state)==null?void 0:p.edges)??[],currentNodeId:t.id,secrets:(g=n==null?void 0:n.sessionEnv)==null?void 0:g.secrets},{callerTag:r,serializeNonStrings:i,onError:d=>{e==null||e({type:`error:${r}`,content:d})}})}var _t="[redacted]",me=8*1024;function Ye(o){if(o==null)return{value:o,truncated:!1};let t=typeof o=="string"?o:JSON.stringify(o),s=new TextEncoder().encode(t);if(s.byteLength<=me){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=s.slice(0,me);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(e),truncated:!0}}function Be(o,t){let s={};for(let e of lt(o))s[e.name]=dt(t,e.path??"");return s}var Ot=(o,t,s,e,n)=>G(o,t,s,n,{callerTag:"apiNodeRunner",serializeNonStrings:!0,sessionEnv:e});async function $t(o,t,s,e,n,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 c=null,a=Date.now();try{console.log("[apiNodeRunner] context keys:",Object.keys(s.context||{})),console.log("[apiNodeRunner] results keys:",Object.keys(s.results||{}));let f=((u=t.data)==null?void 0:u.url)||"",y=Ot(f,t,s,o,e);if(console.log("[apiNodeRunner] resolved url:",B(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"}}),n==null||n(t.id,c);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)||{},N={},I={};for(let j in w)if(Object.prototype.hasOwnProperty.call(w,j)){let L=String(w[j]??"");I[j]=B(L),N[j]=Ot(L,t,s,o,e)}let x,$=!1;if(h!=="GET"&&h!=="HEAD"&&((d=t.data)==null?void 0:d.body)!==void 0){let j=typeof t.data.body=="string"?t.data.body:JSON.stringify(t.data.body);$=B(j),x=Ot(j,t,s,o,e),!N["Content-Type"]&&!N["content-type"]&&(N["Content-Type"]="application/json")}let _={};for(let j in N)_[j]=I[j]?_t:N[j];console.log("[apiNodeRunner] headers:",JSON.stringify(_)),console.log("[apiNodeRunner] body:",$?_t:x),e==null||e({type:"info:apiNodeRunner:request",content:{nodeId:t.id,method:h,url:B(f)?st(y):y,headers:_,body:$?_t:x}});let D=Number((m=t.data)==null?void 0:m.timeoutMs),M=new AbortController,T=Number.isFinite(D)&&D>0?setTimeout(()=>M.abort(),D):null,R;try{console.log("[apiNodeRunner] fetching..."),R=await fetch(y,{method:h,headers:N,body:x,signal:M.signal}),console.log("[apiNodeRunner] fetch returned status:",R.status)}finally{T&&clearTimeout(T)}let F=R.headers.get("content-type")||"";console.log("[apiNodeRunner] content-type:",F);let k;F.includes("application/json")?k=await R.json():k=await R.text(),console.log("[apiNodeRunner] payload preview:",typeof k=="string"?k.slice(0,200):JSON.stringify(k).slice(0,200)),c={ok:R.ok,status:R.status,data:k};let C=Date.now()-a;i==null||i({type:"api_call",payload:{nodeId:t.id,url:y,method:h,status:R.status,latencyMs:C}});let{value:b,truncated:X}=Ye(k);e==null||e({type:"info:apiNodeRunner:response",content:{nodeId:t.id,ok:R.ok,status:R.status,latencyMs:C,data:b,truncated:X,outVars:Be(t,c)}}),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(c))==null?void 0:l.slice(0,300)),n==null||n(t.id,c)}}var Ze="[redacted]",ge=8*1024;function kt(o,t){if(typeof o=="string")return B(o)?typeof t=="string"&&/^https?:\/\//i.test(t)?st(t):Ze:t;if(o&&typeof o=="object"&&!Array.isArray(o)){let s={},e=t&&typeof t=="object"&&!Array.isArray(t)?t:{};for(let[n,r]of Object.entries(o))s[n]=kt(r,e[n]);return s}if(Array.isArray(o)){let s=Array.isArray(t)?t:[];return o.map((e,n)=>kt(e,s[n]))}return t}function Qe(o){if(o==null)return{value:o,truncated:!1};let t=typeof o=="string"?o:JSON.stringify(o),s=new TextEncoder().encode(t);if(s.byteLength<=ge){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=s.slice(0,ge);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(e),truncated:!0}}function ve(o,t){let s={};for(let e of lt(o))s[e.name]=dt(t,e.path??"");return s}var to=(o,t,s,e,n)=>G(o,t,s,n,{callerTag:"toolNodeRunner",serializeNonStrings:!0,sessionEnv:e});function wt(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)?o:{}}function eo(o){let t=wt(o);if(Array.isArray(t.enum)&&t.enum.length>0)return t.enum.every(n=>typeof n=="string"||typeof n=="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 oo(o,t){var i,c;let s={},e={},n=((i=o.data)==null?void 0:i.inputSchema)??t;if(n&&typeof n=="object"&&!Array.isArray(n)){e=wt(wt(n).properties);for(let[a,u]of Object.entries(e))s[a]=eo(u);return{types:s,properties:e}}let r=(c=o.data)==null?void 0:c.argTypes;if(r&&typeof r=="object"&&!Array.isArray(r))for(let[a,u]of Object.entries(r))typeof u=="string"&&(s[a]=u);return{types:s,properties:e}}function so(o,t,s){if(o.trim()!==""){if(o==="null"&&t&&t!=="string"&&t!=="enum")return null;switch(t){case"string":return o;case"enum":{let e=wt(s).enum;if(Array.isArray(e)){let n=e.find(r=>String(r)===o);if(n!==void 0)return n}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 no(o){return o===void 0||typeof o=="string"&&o.trim()===""}function Pt(o,t,s,e,n,r,i){if(typeof o=="string"){let c=o.includes("{{")?to(o,t,s,e,n):o;return so(c,r,i)}if(o&&typeof o=="object"&&!Array.isArray(o)){let c={};for(let[a,u]of Object.entries(o))c[a]=Pt(u,t,s,e,n);return c}return Array.isArray(o)?o.map(c=>Pt(c,t,s,e,n)):o}function ro(o,t,s,e,n,r){let i={};for(let[c,a]of Object.entries(o)){let u=Pt(a,t,s,e,n,r.types[c],r.properties[c]);no(u)||(i[c]=u)}return i}async function io(o){if(o.toolCatalog)return o.toolCatalog;if(!o.env)return o.toolCatalog={},o.toolCatalog;let t=await zt(o.env),s={};for(let e of t)e!=null&&e.id&&(s[e.id]=e);return o.toolCatalog=s,s}async function ao(o){if(o.toolDefs)return o.toolDefs;if(!o.env)return o.toolDefs={},o.toolDefs;let t=await ut(o.env),s={};for(let e of t)e!=null&&e.id&&(s[e.id]=e);return o.toolDefs=s,s}async function Ft(o,t,s,e,n,r,i){var p,g,d,m,l,f,y,h,w,N,I,x;`${t.id}`,e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let c={ok:!1,data:null,error:null},a=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:{},_,D;if(u==="http"){let C=typeof((d=t.data)==null?void 0:d.toolId)=="string"?t.data.toolId.trim():"";if(!C)throw new Error("HTTP tool nodes require toolId");if(D=(await ao(o))[C],!D)throw new Error(`Tool ${C} not found`);_=D.inputSchema}let M=oo(t,_),T=ro($,t,s,o,e,M);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:kt($,T)}}),u==="catalog"){let C=typeof((y=t.data)==null?void 0:y.catalogId)=="string"?t.data.catalogId.trim():"",b=typeof((h=t.data)==null?void 0:h.toolSlug)=="string"?t.data.toolSlug.trim():"";if(!C||!b)throw new Error("Catalog tool nodes require catalogId and toolSlug");let j=(await io(o))[C];if(!j)throw new Error(`Tool catalog entry ${C} not found or disabled`);let L=typeof((w=t.data)==null?void 0:w.toolVersion)=="string"?t.data.toolVersion.trim():"",V=await Gt(o,{toolSlug:b,connectionScope:j.connectionScope,toolVersion:L||null,toolkitVersion:j.toolkitVersion,arguments:T});c={ok:V.ok,data:V.ok?V.data:null,error:V.ok?null:V.error??"Tool execution failed"}}else{let C=pt(D,o,s,e);if(!C.execute)throw new Error(`Tool ${(N=t.data)==null?void 0:N.toolId} is missing an execute handler`);let b=await C.execute(T,{}),X=b&&typeof b=="object"&&"error"in b&&b.error?String(b.error):null;c={ok:!X,data:b,error:X}}let R=Date.now()-a;i==null||i({type:"tool_call",payload:{nodeId:t.id,url:u==="catalog"?`composio:${((I=t.data)==null?void 0:I.toolSlug)??""}`:`tool:${((x=t.data)==null?void 0:x.toolId)??""}`,method:"EXECUTE",status:c.ok?200:502,latencyMs:R}});let{value:F,truncated:k}=Qe(c.data);e==null||e({type:"info:toolNodeRunner:response",content:{nodeId:t.id,ok:c.ok,latencyMs:R,data:F,truncated:k,error:c.error,outVars:ve(t,c)}}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:c.ok?"success":"error",error:c.error??void 0}})}catch($){let _=$ instanceof Error?$.message:String($);c={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{n==null||n(t.id,c)}}import{generateObject as wo}from"ai";import{z as ye}from"zod";import{openai as co}from"@ai-sdk/openai";import{extractReasoningMiddleware as lo,wrapLanguageModel as uo}from"ai";import{createWorkersAI as po}from"workers-ai-provider";import{xai as fo}from"@ai-sdk/xai";import{anthropic as mo}from"@ai-sdk/anthropic";import{createOpenRouter as go}from"@openrouter/ai-sdk-provider";var Ct={};function Dt(o){if(o!=null){if(typeof o!="string")return o;try{return JSON.parse(o)}catch{return}}}function yo(o){return{...o,defaultParams:Dt(o.defaultParams)??o.defaultParams,capabilities:Dt(o.capabilities)??o.capabilities,price:Dt(o.price)??o.price}}async function ht(o,t,s){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 n=yo(e),r=((p=n.capabilities)==null?void 0:p.params)??Yt(n),{effectiveParams:i,adjustments:c}=Zt(n.defaultParams,s,r),a;if(Ct[n.provider])a=await Ct[n.provider](n,t,s);else if(n.provider==="openai")a=co(n.providerModel);else if(n.provider==="xai")a=fo(n.providerModel);else if(n.provider==="anthropic")a=mo(n.providerModel);else if(n.provider==="openrouter")a=go()(n.providerModel);else if(n.provider==="workersai"||n.provider==="cloudflare"){if(!((g=t==null?void 0:t.env)!=null&&g.AI))throw new Error("Workers AI provider requires sessionEnv.env.AI binding");a=po({binding:t.env.AI})(n.providerModel)}else a={provider:n.provider,providerModel:n.providerModel};let u=vt(n);return u.kind==="tag"&&a&&typeof a=="object"&&"specificationVersion"in a&&(a=uo({model:a,middleware:lo({tagName:u.tagName??"think",startWithReasoning:u.startWithReasoning??!1})})),{provider:n.provider,modelHandle:a,entry:n,effectiveParams:i,paramAdjustments:c.length>0?c:void 0,reasoning:u}}function dn(o,t){Ct[o]=t}async function Ut(o,t,s,e,n,r,i){var l,f,y,h,w,N,I;e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let c=String(((l=t==null?void 0:t.data)==null?void 0:l.input_variable)||"user_input").trim(),a;try{let x=J(c,{context:s.context??{},results:s.results??{},nodes:((y=(f=s.flowData)==null?void 0:f.state)==null?void 0:y.nodes)??[],edges:((w=(h=s.flowData)==null?void 0:h.state)==null?void 0:w.edges)??[],currentNodeId:t.id});if(x.missing)throw new Error(`Classifier input "${c}" did not produce a value`);a=x.value}catch(x){throw e==null||e({type:"error:classifier",content:String(x)}),e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"error",error:String(x)}}),x}let u=Array.isArray((N=t==null?void 0:t.data)==null?void 0:N.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((I=u[u.length-1])==null?void 0:I.id);if(!a||String(a).trim().length===0){e==null||e({type:"warning:classifier",content:"No input for classification \u2014 falling back to last item."}),n==null||n(t.id,{classification:p}),s.context=s.context||{},s.context.classified_id=p,r==null||r(s);return}let d=`You are a precise classifier. Given a short user message, identify the category that best matches from the provided list.
|
|
1
|
+
import{a as ae}from"./chunk-ELMOSEQ7.js";import{a as Z,b as st,c as ce,d as wt}from"./chunk-EZIUCT77.js";import{a as ge}from"./chunk-OF6G42DM.js";import"./chunk-MOYYZBTC.js";import{a as ye,b as we}from"./chunk-CDGUEX3J.js";import{A as de,B as ue,C as ht,D as Bn,E as Zn,F as Qn,G as vn,H as ts,I as es,J as pe,K as os,L as fe,M as Rt,N as Tt,O as me,P as ns,Q as ss,a as j,b as lt,c as $n,d as nt,e as Qt,f as Mn,g as bn,h as Pn,i as Fn,j as dt,k as Dn,l as ut,m as pt,n as vt,o as ft,p as te,q as ee,r as Mt,s as oe,t as ne,u as Jn,v as zn,w as Wn,x as le,y as Gn,z as Yn}from"./chunk-ENVV3OEO.js";import{a as B,b as On,c as v,d as Bt,e as Zt,f as Un,g as Cn,h as se,i as mt,j as En,k as tt,l as jn,m as Ln,n as Hn,o as Sn,p as V,q as gt,r as q,s as Vn,t as Kn,u as Xn,v as qn,w as re}from"./chunk-VLZKZDRV.js";import{a as Tn}from"./chunk-RYHQGPX5.js";import{a as xn}from"./chunk-R6EKV3WR.js";import{a as An}from"./chunk-6HY7QUMP.js";import{a as In,b as Nn}from"./chunk-V6JSMX5A.js";import{a as G,b as Q,c as kn,d as Yt,e as _n}from"./chunk-G3SGJ7XJ.js";import{a as ot}from"./chunk-U56YWPSI.js";import{a as yt,b as ie}from"./chunk-A2IRPAD4.js";import{a as ct}from"./chunk-3TXHFKDN.js";import{Agent as sn}from"agents";import{nanoid as rn}from"nanoid";var S=(o,t,n)=>{o.send(t+"::"+n)};async function eo(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 he(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 xt(o){o.sql`DELETE FROM messages`}async function Re(o){await eo(o)}function bt(o){return{"Content-Type":"application/json",Authorization:o.HX_API_KEY}}function It(o){return!!(o!=null&&o.HX_ORA_URL)&&!!(o!=null&&o.HX_API_KEY)}var oo="anonymous:";function Te(o,t){return(o==null?void 0:o.trim())||`${oo}${t}`}async function Pt(o,t){if(!It(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(!It(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 Nt(o,t,n,e=3){if(!It(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 xe(o,t){if(!It(o))return Promise.resolve();try{return await Pt(o,t)}catch(n){return console.error("[oraTriggers] recordRun failed",n),null}}var Ft=Object.freeze({}),no="__SYSTEM_";function Ie(o){return o.startsWith(no)}function so(o){let t={};for(let[n,e]of Object.entries(o))Ie(n)||(t[n]=e);return Object.freeze(t)}async function At(o,t){if(!t)return Ft;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 so(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 Ft;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=>!Ie(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}),Ft}}function kt(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 en}from"nanoid";async function Ne(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 ro(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 io(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(ro(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 Dt(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=io(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 re(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 Ut="[redacted]",Ae=8*1024;function ao(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<=Ae){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,Ae);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(e),truncated:!0}}function co(o,t){let n={};for(let e of mt(o))n[e.name]=gt(t,e.path??"");return n}var Ct=(o,t,n,e,s)=>W(o,t,n,s,{callerTag:"apiNodeRunner",serializeNonStrings:!0,sessionEnv:e});async function Et(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=Ct(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 P=String(w[k]??"");T[k]=Z(P),R[k]=Ct(P,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=Ct(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]?Ut:R[k];console.log("[apiNodeRunner] headers:",JSON.stringify(_)),console.log("[apiNodeRunner] body:",$?Ut:I),e==null||e({type:"info:apiNodeRunner:request",content:{nodeId:t.id,method:h,url:Z(f)?st(y):y,headers:_,body:$?Ut: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}=ao(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:co(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 lo="[redacted]",ke=8*1024;function jt(o,t){if(typeof o=="string")return Z(o)?typeof t=="string"&&/^https?:\/\//i.test(t)?st(t):lo: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]=jt(r,e[s]);return n}if(Array.isArray(o)){let n=Array.isArray(t)?t:[];return o.map((e,s)=>jt(e,n[s]))}return t}function uo(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 po(o,t){let n={};for(let e of mt(o))n[e.name]=gt(t,e.path??"");return n}var fo=(o,t,n,e,s)=>W(o,t,n,s,{callerTag:"toolNodeRunner",serializeNonStrings:!0,sessionEnv:e});function _t(o){return o!==null&&typeof o=="object"&&!Array.isArray(o)?o:{}}function mo(o){let t=_t(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 go(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=_t(_t(s).properties);for(let[c,u]of Object.entries(e))n[c]=mo(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 yo(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=_t(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 wo(o){return o===void 0||typeof o=="string"&&o.trim()===""}function Lt(o,t,n,e,s,r,i){if(typeof o=="string"){let a=o.includes("{{")?fo(o,t,n,e,s):o;return yo(a,r,i)}if(o&&typeof o=="object"&&!Array.isArray(o)){let a={};for(let[c,u]of Object.entries(o))a[c]=Lt(u,t,n,e,s);return a}return Array.isArray(o)?o.map(a=>Lt(a,t,n,e,s)):o}function ho(o,t,n,e,s,r){let i={};for(let[a,c]of Object.entries(o)){let u=Lt(c,t,n,e,s,r.types[a],r.properties[a]);wo(u)||(i[a]=u)}return i}async function Ro(o){if(o.toolCatalog)return o.toolCatalog;if(!o.env)return o.toolCatalog={},o.toolCatalog;let t=await ie(o.env),n={};for(let e of t)e!=null&&e.id&&(n[e.id]=e);return o.toolCatalog=n,n}async function To(o){if(o.toolDefs)return o.toolDefs;if(!o.env)return o.toolDefs={},o.toolDefs;let t=await yt(o.env),n={};for(let e of t)e!=null&&e.id&&(n[e.id]=e);return o.toolDefs=n,n}async function Ht(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 To(o))[U],!F)throw new Error(`Tool ${U} not found`);_=F.inputSchema}let H=go(t,_),M=ho($,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:jt($,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 Ro(o))[U];if(!k)throw new Error(`Tool catalog entry ${U} not found or disabled`);let P=typeof((w=t.data)==null?void 0:w.toolVersion)=="string"?t.data.toolVersion.trim():"",E=await ae(o,{toolSlug:L,connectionScope:k.connectionScope,toolVersion:P||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=wt(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}=uo(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:po(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 Mo}from"ai";import{z as _e}from"zod";import{openai as xo}from"@ai-sdk/openai";import{extractReasoningMiddleware as Io,wrapLanguageModel as No}from"ai";import{createWorkersAI as Ao}from"workers-ai-provider";import{xai as ko}from"@ai-sdk/xai";import{anthropic as _o}from"@ai-sdk/anthropic";import{createOpenRouter as Oo}from"@openrouter/ai-sdk-provider";var Vt={};function St(o){if(o!=null){if(typeof o!="string")return o;try{return JSON.parse(o)}catch{return}}}function $o(o){return{...o,defaultParams:St(o.defaultParams)??o.defaultParams,capabilities:St(o.capabilities)??o.capabilities,price:St(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=$o(e),r=((p=s.capabilities)==null?void 0:p.params)??le(s),{effectiveParams:i,adjustments:a}=ue(s.defaultParams,n,r),c;if(Vt[s.provider])c=await Vt[s.provider](s,t,n);else if(s.provider==="openai")c=xo(s.providerModel);else if(s.provider==="xai")c=ko(s.providerModel);else if(s.provider==="anthropic")c=_o(s.providerModel);else if(s.provider==="openrouter")c=Oo()(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=Ao({binding:t.env.AI})(s.providerModel)}else c={provider:s.provider,providerModel:s.providerModel};let u=pe(s);return u.kind==="tag"&&c&&typeof c=="object"&&"specificationVersion"in c&&(c=No({model:c,middleware:Io({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 Hs(o,t){Vt[o]=t}async function Kt(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
2
|
If the message is ambiguous or none clearly matches, choose the LAST category in the list.
|
|
3
3
|
|
|
4
4
|
Categories:
|
|
5
|
-
${u.map(
|
|
6
|
-
label: ${
|
|
5
|
+
${u.map(I=>{let $=I.keywords??I["keywords/topics"]??"",_=Array.isArray($)?$.join(", "):String($||"");return`- id: ${I.id}
|
|
6
|
+
label: ${I.label}
|
|
7
7
|
keywords/topics: ${_}`}).join(`
|
|
8
8
|
`)}
|
|
9
9
|
`,m=`User message:
|
|
10
|
-
"""${String(
|
|
10
|
+
"""${String(c).trim()}"""
|
|
11
11
|
|
|
12
|
-
Select the best matching category id.`;try{let
|
|
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 Mo({model:H,messages:[{role:"system",content:d},{role:"user",content:m}],schema:_e.object({classification:_e.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 Do,streamText as Uo}from"ai";import{nanoid as Co}from"nanoid";import"zod";function Oe(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
13
|
|
|
14
|
-
`:"")+l.value)}return i}function ho(o,t){var n,r,i,c,a;let s=((n=o.data)==null?void 0:n.attachments)??[];if(!Array.isArray(s))throw new H("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)??[],((a=(c=t.flowData)==null?void 0:c.state)==null?void 0:a.edges)??[],o.id);return s.map(u=>{if(typeof u!="string")throw new H("INVALID_EXPRESSION",`Node ${o.id} has an invalid attachment reference`);let p=e.find(g=>g.ref===u);if(!p)throw new H("OUT_OF_SCOPE",`Attachment "${u}" is not in this node's connection scope`);if(p.type!=="image"&&p.type!=="file")throw new H("UNKNOWN_OUTPUT",`Attachment "${u}" is not a binary output`);return p.type==="image"?u:null}).filter(u=>u!==null)}function he(o,t){var n,r,i,c;let s=[],e={context:t.context??{},results:t.results??{},nodes:((r=(n=t.flowData)==null?void 0:n.state)==null?void 0:r.nodes)??[],edges:((c=(i=t.flowData)==null?void 0:i.state)==null?void 0:c.edges)??[],currentNodeId:o.id};for(let a of ho(o,t)){let u=J(a,e);if(u.missing)throw new H(u.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Attachment "${a}" did not produce a value`);if(!Array.isArray(u.value))throw new H("PATH_NOT_FOUND",`Attachment "${a}" must resolve to an image array`);s.push(...u.value)}return s}var Ro=at({"../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-LSNJKMPR.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 Io=at({});async function Ao(o,t,s,e){var g;let n=Array.isArray((g=s==null?void 0:s.data)==null?void 0:g.tools)?s.data.tools:[];if(n.length===0)return{};let r={},i=d=>{var N,I;let m=typeof(d==null?void 0:d.description)=="string"?d.description:"",l=d==null?void 0:d.inputSchema,f;try{let x=(l==null?void 0:l.shape)??(typeof((N=l==null?void 0:l._def)==null?void 0:N.shape)=="function"?l._def.shape():(I=l==null?void 0:l._def)==null?void 0:I.shape);x&&typeof x=="object"&&(f=x)}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}`},c=(()=>{let d=[],m=[],l=[],f=[];for(let h=0;h<n.length;h++){let w=n[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 ${s.id} requested (${n.length}): ${c}`);let a=!1,u=async()=>{if(a&&o.toolDefs)return o.toolDefs;if(!o.env)return o.toolDefs=o.toolDefs||{},a=!0,o.toolDefs;try{let d=await ut(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 a=!0,o.toolDefs},p=[];for(let d=0;d<n.length;d++){let m=n[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 ne(y,o,t,e),N=Object.keys(w);for(let[I,x]of Object.entries(w))r[I]=x;console.log(`[tools] \u2713 composio '${l.id}' \u2192 ${N.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]=re(y,o,t,e),p.push(y);let N=typeof y.execution=="string"?JSON.parse(y.execution):y.execution||{},I=Array.isArray(N.references)?N.references.map(x=>x==null?void 0:x.name):[];console.log(`[tools] \u2713 skill '${l.id}' \u2192 '${w}' (refs: ${I.join(", ")||"none"})`),e==null||e({type:"info:skill:registered",content:{skill:w,refCount:I.length,refs:I}})}catch(N){console.error(`[tools] \u2717 skill '${l.id}': ${String(N)}`),e==null||e({type:"error:llmNodeRunner",content:`Error loading skill tool '${l.id}': ${String(N)}`})}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=pt(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(!se[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 Ro(`../tools/${l.id}.ts`)}catch{f=await Io(`../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,N={};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=Wt(_),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)?N=l.params.defaults:(e==null||e({type:"error:llmNodeRunner",content:`Invalid defaults for tool '${l.id}' \u2014 must be an object`}),N={}):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`}),N={}):N={}}let I=y(o,t,N,e);h&&I&&typeof I=="object"&&(I.description=h),w&&I&&typeof I=="object"&&(I.inputSchema=w),r[l.id]=I;let x=[];h&&x.push("description"),w&&x.push("inputSchema"),Object.keys(N).length&&x.push(`defaults(${Object.keys(N).join(",")})`);let $=x.length?` [overrides: ${x.join(", ")}]`:"";console.log(`[tools] \u2713 builtin '${l.id}'${$}`),console.log(`[tools] ${i(I)}`)}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=ie(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 Mt(o,t,s,e,n,r,i){var _,D,M,T;`${t.id}`,e==null||e({type:"node:execution",content:{nodeId:t.id,nodeType:t.type,status:"start"}});let c=!1;try{let R=(_=s.flowData)==null?void 0:_.state;if(R&&R.edges&&R.nodes){let F=R.edges.filter(k=>k.source===t.id);if(F.length>0){let k=R.nodes.find(C=>C.id===F[0].target);k&&k.type==="answerNode"&&(c=!0)}}}catch(R){console.error("Error determining next node for streaming:",R)}let a=G(t.data.template,t,s,e,{sessionEnv:o});(!a||!a.trim())&&(a="Answer straight forward to the user, dont offer any other option to continue");let u=a,p=G(t.data.user_template||"",t,s,e,{sessionEnv:o}),g=R=>R&&Object.fromEntries(Object.keys(R).map(F=>[F,"[redacted]"])),d=o!=null&&o.secrets||o!=null&&o.userAuth?{...o,secrets:g(o.secrets),userAuth:g(o.userAuth)}:o,m=G(t.data.template,t,s,void 0,{sessionEnv:d})||u,l=G(t.data.user_template||"",t,s,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=(D=t==null?void 0:t.data)==null?void 0:D.window_size,y=Number(f);(!Number.isInteger(y)||y<=0)&&(y=5);let h=he(t,s),w=we(t,s);e==null||e({type:"info:llmNodeRunner:attachments",content:{nodeId:t.id,refs:Array.isArray((M=t.data)==null?void 0:M.attachments)?t.data.attachments:[],images:h.length,documents:w?1:0}});let I=(await((T=o.getMessages)==null?void 0:T.call(o))??[]).slice(-y),x=I.filter(R=>R&&typeof R.role=="string"&&typeof R.content=="string");x.length!==I.length&&console.warn(`Filtered ${I.length-x.length} invalid messages from history`);let $=Oo(x,p,h,w);await _o(a,$,o.conn,e,t,c,n,s,r,o,i)}async function _o(o,t,s,e,n,r,i,c,a,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 F,k,C,b,X,j;let f,y={},h,w="none",N=!1,I,x=!1,$=!1,_=0,D=0,M=(F=n==null?void 0:n.data)==null?void 0:F.sendReasoning,T=M!==!1;try{let L=(k=n==null?void 0:n.data)==null?void 0:k.model,V=Array.isArray(L)?L[0]:L||"gpt_5_nano",A=Bt(n==null?void 0:n.data),P=await ht(V,u,A);if(!P)throw new Error(`Model '${V}' not found in registry`);f=P.modelHandle,y=P.effectiveParams||{},w=P.reasoning.kind;let O=ee(P.reasoning,(C=n==null?void 0:n.data)==null?void 0:C.reasoningEffort);N=T&&te(P.reasoning);let q=typeof((b=n==null?void 0:n.data)==null?void 0:b.reasoningMaxTokens)=="number"?n.data.reasoningMaxTokens:void 0;h=oe(P.provider,{effort:O,exposeReasoning:N,maxTokens:q}),O&&(e==null||e({type:"info:llmNodeRunner:reasoningEffort",content:O})),console.log(`[reasoning] ${JSON.stringify({model:V,provider:P.provider,capability:P.reasoning,requestedEffort:((X=n==null?void 0:n.data)==null?void 0:X.reasoningEffort)??null,resolvedEffort:O??null,sendReasoning:T,exposeReasoning:N,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:V}),e==null||e({type:"info:llmNodeRunner:generationParams",content:{...(j=n==null?void 0:n.data)!=null&&j.generationPreset?{preset:n.data.generationPreset}:{},...y,...w!=="none"?{reasoning:w,configuredSendReasoning:M,sendReasoning:T,exposeReasoning:N,...O?{effort:O}:{}}:{}}})}catch(L){throw e==null||e({type:"error:llmNodeRunner",content:`Model error: ${String(L)}`}),L}let R=await Ao(u,c,n,e);console.log(`[tools] node ${n.id} loaded ${Object.keys(R).length}: ${Object.keys(R).join(", ")||"(none)"}`),e==null||e({type:"info:llmNodeRunner:toolsLoaded",content:{nodeId:n.id,tools:Object.keys(R)}});try{let L=To({model:f,system:o,messages:t,stopWhen:(()=>{var K;let P=!!R.readSkillRef?10:5,O=Number(((K=n.data)==null?void 0:K.max_steps)??P),q=Number.isFinite(O)?Math.max(1,Math.min(30,O)):P;return xo(q)})(),...Qt(y),...h?{providerOptions:h}:{},tools:R,onFinish:async A=>{var Lt,Ht;let P=A.text||"",O=A.reasoningText??((Lt=A.reasoning)==null?void 0:Lt.text)??"";if(console.log(`[reasoning] done: deltas=${_} chars=${D} result.reasoningText=${O.length} finishReason=${A.finishReason??"n/a"} reasoningTokens=${((Ht=A.usage)==null?void 0:Ht.reasoningTokens)??"n/a"}`),T&&N&&!x&&O&&s){x=!0;try{E(s,U.SERVER_REASONING_STREAM,O)}catch(Xe){console.warn("Failed to send finished reasoning over connection",Xe)}}let q={id:No(),role:"assistant",type:"text",content:P,ts:Date.now()};r&&(u.setMessages?await u.setMessages(q):e==null||e({type:"error:llmNodeRunner",content:"setMessages callback missing"})),s&&T&&x&&!$&&($=!0,E(s,U.SERVER_REASONING_STREAM_COMPLETE,JSON.stringify({}))),r&&s&&E(s,U.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({})),i==null||i((n==null?void 0:n.id)||"llm_result",P),e==null||e({type:"info:llmNodeRunner:onFinish",content:JSON.stringify(A)});let K=Date.now()-g,Ke=I?I-g:void 0;p==null||p({type:"llm_telemetry",payload:{nodeId:n.id,totalLatency:K,timeToFirstToken:Ke,model:A.response.modelId,usage:A.usage}}),p==null||p({type:"llm_result",payload:{result:A}})},onStepFinish:async A=>{let P=(O,q=200)=>{let K=typeof O=="string"?O:JSON.stringify(O);return K?K.length>q?`${K.slice(0,q)}\u2026(+${K.length-q})`: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:${n.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:${n.id}`,content:JSON.stringify(A.toolResults)})}},experimental_onToolCallStart:A=>{var P;e==null||e({type:"tool:execution",content:{nodeId:n.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:n.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&&(x=!0,_+=1,D+=O.length,_===1&&console.log("[reasoning] \u2713 first reasoning-delta received")),T&&s&&O)try{E(s,U.SERVER_REASONING_STREAM,O)}catch(q){console.warn("Failed to send reasoning chunk over connection",q)}return}if(A.chunk.type==="text-delta"){if(I||(I=Date.now()),s&&T&&x&&!$){$=!0;try{E(s,U.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:n.id,chunk:A.chunk}});let P=`llm_chunk:${A.chunk.type}`;e==null||e({type:P,content:{...A}})}}),V=async()=>{let A="";for await(let P of L.fullStream)if(P.type==="text-delta"){if(A+=P.text,r&&s)try{E(s,U.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&&s&&A.trim())try{E(s,U.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({}))}catch(O){console.warn("Failed to flush text segment over connection",O)}A=""}};await Promise.all([L,V()]),m(),e==null||e({type:"node:execution",content:{nodeId:n.id,nodeType:n.type,status:"success"}})}catch(L){e==null||e({type:"node:execution",content:{nodeId:n.id,nodeType:n.type,status:"error",error:String(L)}}),l(L)}})}function Oo(o,t,s,e){let n=!!(s&&s.length>0),r=!!e,i=n||r,a=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]
|
|
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 $e(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 Po=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 Fo=ct({});async function Eo(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 yt(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 ge(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]=ye(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=wt(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(!me[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 Po(`../tools/${l.id}.ts`)}catch{f=await Fo(`../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=ce(_),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=we(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 Xt(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=$e(t,n),w=Oe(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 $=Lo(I,p,h,w);await jo(c,$,o.conn,e,t,a,s,n,r,o,i)}async function jo(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 P=(D=s==null?void 0:s.data)==null?void 0:D.model,E=Array.isArray(P)?P[0]:P||"gpt_5_nano",A=de(s==null?void 0:s.data),b=await et(E,u,A);if(!b)throw new Error(`Model '${E}' not found in registry`);f=b.modelHandle,y=b.effectiveParams||{},w=b.reasoning.kind;let O=Rt(b.reasoning,(U=s==null?void 0:s.data)==null?void 0:U.reasoningEffort);R=M&&fe(b.reasoning);let X=typeof((L=s==null?void 0:s.data)==null?void 0:L.reasoningMaxTokens)=="number"?s.data.reasoningMaxTokens:void 0;h=Tt(b.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:b.provider,capability:b.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 b.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(P){throw e==null||e({type:"error:llmNodeRunner",content:`Model error: ${String(P)}`}),P}let N=await Eo(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 P=Uo({model:f,system:o,messages:t,stopWhen:(()=>{var K;let b=!!N.readSkillRef?10:5,O=Number(((K=s.data)==null?void 0:K.max_steps)??b),X=Number.isFinite(O)?Math.max(1,Math.min(30,O)):b;return Do(X)})(),...ht(y),...h?{providerOptions:h}:{},tools:N,onFinish:async A=>{var Wt,Gt;let b=A.text||"",O=A.reasoningText??((Wt=A.reasoning)==null?void 0:Wt.text)??"";if(console.log(`[reasoning] done: deltas=${_} chars=${F} result.reasoningText=${O.length} finishReason=${A.finishReason??"n/a"} reasoningTokens=${((Gt=A.usage)==null?void 0:Gt.reasoningTokens)??"n/a"}`),M&&R&&!I&&O&&n){I=!0;try{S(n,j.SERVER_REASONING_STREAM,O)}catch(to){console.warn("Failed to send finished reasoning over connection",to)}}let X={id:Co(),role:"assistant",type:"text",content:b,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",b),e==null||e({type:"info:llmNodeRunner:onFinish",content:JSON.stringify(A)});let K=Date.now()-g,ve=T?T-g:void 0;p==null||p({type:"llm_telemetry",payload:{nodeId:s.id,totalLatency:K,timeToFirstToken:ve,model:A.response.modelId,usage:A.usage}}),p==null||p({type:"llm_result",payload:{result:A}})},onStepFinish:async A=>{let b=(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}(${b(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 ${b(O.result??O.output)}`);e==null||e({type:`info:llmNodeRunner:toolResults:${s.id}`,content:JSON.stringify(A.toolResults)})}},experimental_onToolCallStart:A=>{var b;e==null||e({type:"tool:execution",content:{nodeId:s.id,toolName:(b=A==null?void 0:A.toolCall)==null?void 0:b.toolName,status:"start"}})},experimental_onToolCallFinish:A=>{var b,O;e==null||e({type:"tool:execution",content:{nodeId:s.id,toolName:(b=A==null?void 0:A.toolCall)==null?void 0:b.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 b=`llm_chunk:${A.chunk.type}`;e==null||e({type:b,content:{...A}})}}),E=async()=>{let A="";for await(let b of P.fullStream)if(b.type==="text-delta"){if(A+=b.text,r&&n)try{S(n,j.SERVER_TEXT_STREAM,b.text)}catch(O){console.warn("Failed to send chunk over connection",O)}}else if(b.type==="finish-step"&&b.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([P,E()]),m(),e==null||e({type:"node:execution",content:{nodeId:s.id,nodeType:s.type,status:"success"}})}catch(P){e==null||e({type:"node:execution",content:{nodeId:s.id,nodeType:s.type,status:"error",error:String(P)}}),l(P)}})}function Lo(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
15
|
${e}
|
|
16
16
|
[End of attached files]
|
|
17
17
|
|
|
18
|
-
`),p&&(d+=p),d&&g.push({type:"text",text:d}),
|
|
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 qt(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 Yt(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
19
|
|
|
20
|
-
`),i==null||i({type:"memo_search",payload:{nodeId:t.id,searchLatencyMs:_,retrievedContext:
|
|
21
|
-
${
|
|
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 Jt(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 Ot}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=Vo(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 Ne(_,o.env),H=F.length>0?F.map(C=>`--- file: ${C.name} ---
|
|
21
|
+
${C.text}`).join(`
|
|
22
22
|
|
|
23
|
-
`):"";e.context={user_input:x,user_images:$,files:M},e.tokenUsage={promptTokens:0,completionTokens:0,totalTokens:0},(m=s==null?void 0:s.onServerEvent)==null||m.call(s,{type:"agent:start",content:"Execution started",timestamp:Date.now()});let{startNode:T,error:R}=$o(e.flowData);if(!T)g="failed",d=R||"Flow Format Error",(l=s==null?void 0:s.onError)==null||l.call(s,d);else{let F=v(T.data),{values:k,errors:C}=Kt(F,I==null?void 0:I.inputs);if(C.length>0)return g="failed",d=`Invalid flow inputs: ${C.join("; ")}`,(f=s==null?void 0:s.onError)==null||f.call(s,d),{status:g,error:d};e.context={...e.context,inputs:k,...k},e.context.user_input||(e.context.user_input=x),await r(T),(y=s==null?void 0:s.onServerEvent)==null||y.call(s,{type:"agent:telemetry",content:{durationMs:Date.now()-p,tokenUsage:e.tokenUsage},timestamp:Date.now()})}}catch(I){I instanceof Rt?(g="stopped",d=I.message,(h=s==null?void 0:s.onServerEvent)==null||h.call(s,{type:"agent:stopped",content:d,timestamp:Date.now()})):(g="failed",d=I instanceof Error?I.message:"Agent execution failed",(w=s==null?void 0:s.onError)==null||w.call(s,d))}finally{(N=s==null?void 0:s.onServerEvent)==null||N.call(s,{type:"agent:complete",content:{status:g,durationMs:Date.now()-p},timestamp:Date.now()})}return{status:g,error:d}},a={startNode:jt,classifierNode:Ut,llmNode:Mt,memoNode:bt,answerNode:At,apiNode:$t,toolNode:Ft};return c}var Rt=class extends Error{constructor(){super("Stopped by user"),this.name="FlowExecutionStoppedError"}};function $o(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=Jt(d);if(m.length>0)return{error:m[0]}}let s=t.nodes.filter(d=>d.type==="startNode");if(s.length!==1)return{error:`Flow must include exactly one START node, found ${s.length}.`};let e=s[0],n=t.nodes.filter(d=>d.type==="answerNode");if(n.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 c=Re(e.id,r),a=new Set;for(let d of n){let m=Re(d.id,i);for(let l of m)a.add(l)}let u=[];for(let d of c)if(!a.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 Re(o,t){let s=new Set,e=[o];for(s.add(o);e.length>0;){let n=e.shift(),r=t.get(n)||[];for(let i of r)s.has(i)||(s.add(i),e.push(i))}return s}function ko(o,t){var s;return((s=o.state)==null?void 0:s.nodes.find(e=>e.id===t))||null}function Po(o,t,s){var c;let e=t==null?void 0:t.state;if(!e)return null;let n=e.edges.filter(a=>a.source===o.id);if(n.length===0)return null;let r=n[0].target;if(o.type==="classifierNode"&&((c=s==null?void 0:s.context)!=null&&c.classified_id)){let a=s.context.classified_id,u=n.find(p=>p.sourceHandle===`source-${a}`);u?r=u.target:console.log(`No matching edge, falling back to first: ${r}`)}return ko(t,r)}async function xe(o,t){var e,n;let s=(e=t==null?void 0:t.flowData)==null?void 0:e.flowId;if(!(o!=null&&o.HX_CORE_URL)||!s)return{engineState:t,refreshed:!1};try{let r=await Z(s,o),i={...t,flowData:{...r,tenant:t.flowData.tenant,flowId:s,chatId:t.flowData.chatId}},c=r==null?void 0:r.stateVersion,a=typeof c=="number"&&c!==((n=t.flowData)==null?void 0:n.stateVersion);return{engineState:i,refreshed:a}}catch(r){return console.error(`[flowRefresh] fetch failed for flow ${s}:`,r),{engineState:t,refreshed:!1}}}function Te(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(s=>{console.error("[sessionIndex] failed to index session",s)})}function Ne(){let o={};return{add(t,s){o[t]=s},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 Fo(o){return!!(o!=null&&o.HX_ORA_URL)&&!!(o!=null&&o.HX_API_KEY)}async function Ae(o,t){if(!Fo(o))throw new Error("Structured outputs require HX_ORA_URL and HX_API_KEY");let s=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(!s.ok){let e=await s.text().catch(()=>"");throw new Error(`Structured output persistence failed with ${s.status}${e?`: ${e}`:""}`)}}var _e=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 rt(o,t){var r,i;let s=o.id||o.name||"",[e,n]=String(s).split("::");if(!e||!n)return null;try{let a=(r=(await W(e,t)).metadata)==null?void 0:r.tenant,u=await Z(e,t),p=(i=o.state)==null?void 0:i.user,g={flowData:{...u,tenant:a,flowId:e,chatId:n},executedNodes:[],context:p?{user:p}:{}};return o.setState({...o.state,engineState:g}),g}catch(c){return console.error("Failed to initialize engine state:",c),null}}async function it(o){var $,_,D,M;let{agent:t,env:s,ctx:e,payload:n,connection:r}=o,i=Date.now(),c=[],a=o.runId?Ne():void 0,u=async()=>await z(t),p=async T=>{await ae(t,T)},g=async T=>{if(t.state.modelsCache&&t.state.modelsCache[T])return t.state.modelsCache[T];try{let{fetchOraModel:R}=await import("./oraApi-4O3W5LXD.js"),F=await R(T,s);return t.setState({...t.state,modelsCache:{...t.state.modelsCache||{},[T]:F}}),F}catch(R){throw console.error(`Error fetching model ${T}:`,R),R}},d={id:Do(),role:"user",type:"text",content:n.text,images:n.images,ts:Date.now()};await p(d);let m={onChangeState:T=>{t.setState({...t.state,engineState:T})},onServerEvent:async T=>{var R;await((R=o.onServerEvent)==null?void 0:R.call(o,T)),c.push(T)},onTelemetry:async T=>{var R,F,k,C,b,X;await _e({...T,userId:o.resolveUserId(),tenant:((F=(R=t.state.engineState)==null?void 0:R.flowData)==null?void 0:F.tenant)||"",flowId:((C=(k=t.state.engineState)==null?void 0:k.flowData)==null?void 0:C.flowId)||"",sessionId:((X=(b=t.state.engineState)==null?void 0:b.flowData)==null?void 0:X.chatId)||""},s)},onError:T=>{var R;(R=o.onError)==null||R.call(o,T),t.setState({...t.state,error:T})},shouldStop:o.shouldStop},l=t.state.engineState?{...t.state.engineState}:null;if(l){let{engineState:T,refreshed:R}=await xe(s,l);l=T,R&&t.setState({...t.state,engineState:l,modelsCache:{}})}else if(l=await rt(t,s),!l){let T="Failed to initialize agent";return m.onError(T),{status:"failed",error:T}}let f=o.secrets;if(!f||Object.keys(f).length===0){let T=($=l.flowData)==null?void 0:$.tenant;f=T?await yt(s,T):{},(_=o.onSecretsLoaded)==null||_.call(o,f)}let y=o.user??t.state.user??void 0;y&&!((D=l.context)!=null&&D.user)&&(l.context={...l.context||{},user:y});let h={env:s,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:a},w=await Ie(h,l,m)(n);if(w.status==="completed"&&o.runId&&(a!=null&&a.hasOutputs())){let{flowId:T,chatId:R}=l.flowData??{};if(!T||!R)w={status:"failed",error:"Structured output persistence requires flowId and sessionId"};else try{await Ae(s,{flowId:T,sessionId:R,runId:o.runId,createdAt:new Date(i).toISOString(),data:a.snapshotData(),answerNodeIds:a.answerNodeIds()});let F={...l.results||{}};for(let k of a.answerNodeIds())F[k]={...F[k]||{},persisted:!0,runId:o.runId};l={...l,results:F},t.setState({...t.state,engineState:l})}catch(F){let k=F instanceof Error?F.message:"Structured output persistence failed";m.onError(k),await m.onServerEvent({type:"error:answer-output",content:{runId:o.runId,error:k},timestamp:Date.now()}),w={status:"failed",error:k}}}let{tenant:N,flowId:I,chatId:x}=l.flowData??{};return N&&I&&x&&e.waitUntil(Te(s,{id:`${I}::${x}`,tenant:N,flowId:I,sessionId:x,userId:o.resolveUserId(),title:(M=n.text)==null?void 0:M.slice(0,120),turnTs:i,events:c})),t.setState({...t.state,lastUpdated:new Date}),{status:w.status,error:w.error,engineState:l}}import{nanoid as Co}from"nanoid";function Uo(o){let t=o.headers.get("X-User-Payload");if(!t)return null;try{let s=JSON.parse(t),e=typeof(s==null?void 0:s.email)=="string"?ot(s.email):null;return e?{...s,email:e}:null}catch{return null}}async function Oe(o,t,s,e){var n;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 c=typeof r.userId=="string"?ot(r.userId):null,a=Uo(t),u=a==null?void 0:a.email;a?o.setState({...o.state,user:a,injectedUserId:u}):c&&!((n=o.state.user)!=null&&n.email)&&o.setState({...o.state,injectedUserId:c});let p=()=>u??c??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 rt(o,s))return new Response(JSON.stringify({error:"Failed to initialize agent"}),{status:500,headers:{"content-type":"application/json"}});let d=`run-${Co(12)}`;await o.registerManualRun(d,i,p()),await nt(s,d).catch(y=>{console.warn(`[AgentHTTP] could not mark manual run ${d} as running`,y)});let m;try{m=await it({agent:o,env:s,ctx:e,payload:{text:i,inputs:g},skillRefCache:o.skillRefCache,user:a??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 $e(o){try{return await ft(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 ke="trigger:nonce:",jo=900*1e3,Et="run:stop:",Pe=class extends Mo{initialState={user:void 0,injectedUserId:null,sessionId:null,lastUpdated:null,modelsCache:{}};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}:{messages:await z(this)}}async requestRunStop(t){return t!=null&&t.trim()?(await this.ctx.storage.put(`${Et}${t}`,Date.now()),{accepted:!0}):{accepted:!1}}async isRunStopRequested(t){return!!await this.ctx.storage.get(`${Et}${t}`)}async clearRunStopRequest(t){await this.ctx.storage.delete(`${Et}${t}`)}async onRequest(t){let s=new URL(t.url);if(s.pathname.endsWith("/state"))return new Response(JSON.stringify(this.state),{headers:{"content-type":"application/json"}});if(s.pathname.endsWith("/history")){let e=await z(this);return new Response(JSON.stringify(e),{headers:{"content-type":"application/json"}})}return t.method==="POST"&&s.pathname.endsWith("/message")?Oe(this,t,this.env,this.ctx):t.method==="DELETE"&&s.pathname.endsWith("/clear")?$e(this):new Response("Ready to assist.")}async onConnect(t,s){var d,m,l,f,y;let[e,n]=t.server.split("::"),i=(d=(await W(e,this.env)).metadata)==null?void 0:d.tenant;this.secrets=await yt(this.env,i),this.userAuth={},this.composioSessions={},this.publicOrigin=void 0;let c=null;if(s.request){try{this.publicOrigin=new URL(s.request.url).origin}catch{}let h=s.request.headers.get("X-User-Payload");if(h)try{c=JSON.parse(h)}catch(w){console.warn("Failed to parse X-User-Payload",w)}}let a=await Z(e,this.env);this.setState({...this.state,user:c||null,sessionId:n,engineState:{flowData:{...a,tenant:i,flowId:e,chatId:n},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 u=await z(this);E(t,U.SERVER_HISTORY,JSON.stringify({messages:u}));let g=(((m=a==null?void 0:a.state)==null?void 0:m.nodes)??(a==null?void 0:a.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};E(t,U.SERVER_CONFIG,JSON.stringify(h))}}async onMessage(t,s){if(typeof s!="string")return;let e=s.indexOf(":");if(e===-1)return;let n=s.substring(0,e),r=s.substring(e+1);if(!n||!r)return;let c={[U.USER_MESSAGE]:a=>this.onUserMessage(t,a),[U.USER_CLEAR_HISTORY]:()=>this.onClearHistory(t),[U.USER_AUTH]:a=>this.onUserAuth(t,a),[U.USER_IDENTITY]:a=>this.onUserIdentity(t,a)}[n];c&&await c(r)}async onUserMessage(t,s){let e=ct(s),n=`run-${bo(12)}`;await this.registerManualRun(n,e.text),await nt(this.env,n).catch(r=>{console.warn(`[AgentDO] could not mark manual run ${n} as running`,r)});try{let r=await it({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:n,shouldStop:()=>this.isRunStopRequested(n),onServerEvent:i=>{E(t,U.SERVER_EVENT,JSON.stringify(i))},onError:i=>{E(t,U.SERVER_ERROR,i)},onSecretsLoaded:i=>{this.secrets=i}});this.ctx.waitUntil(this.completeManualRun(n,r.status==="completed"?"succeeded":r.status==="stopped"?"skipped":"failed",r.error))}finally{await this.clearRunStopRequest(n)}}registerManualRun(t,s,e){var a;let{tenant:n,flowId:r,chatId:i}=((a=this.state.engineState)==null?void 0:a.flowData)??{};if(!n||!r||!i)return Promise.resolve();let c=le(e||this.resolveSessionUserId(),i);return de(this.env,{id:t,tenant:n,flowId:r,userId:c,sessionId:i,label:s==null?void 0:s.slice(0,120)})}completeManualRun(t,s,e){return gt(this.env,t,{status:s,error:e})}async enqueueTrigger(t){var n;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 s=t.runAsUserId;return s&&!((n=this.state.user)!=null&&n.email)&&this.state.injectedUserId!==s&&this.setState({...this.state,injectedUserId:s}),{queued:!0,taskId:await this.queue("processTrigger",t)}}async claimTriggerNonce(t){let s=`${ke}${t}`;if(await this.ctx.storage.get(s))return!1;let e=Date.now();await this.ctx.storage.put(s,e);let r=[...(await this.ctx.storage.list({prefix:ke})).entries()].filter(([,i])=>e-i>jo).map(([i])=>i);return r.length>0&&await this.ctx.storage.delete(r),!0}async processTrigger(t){if(!(await nt(this.env,t.runId)).claimed){console.warn(`[AgentDO] activation ${t.activationId} skipped \u2014 run ${t.runId} already claimed`);return}try{this.state.engineState||await rt(this,this.env);let e=v(pe(this.state.engineState)),n=Xt(e,t.inputs||{},t.label),r=await it({agent:this,env:this.env,ctx:this.ctx,payload:{text:n,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 gt(this.env,t.runId,{status:r.status==="completed"?"succeeded":r.status==="stopped"?"skipped":"failed",error:r.error})}catch(e){let n=e instanceof Error?e.message:"Trigger execution failed";throw await gt(this.env,t.runId,{status:"failed",error:n}),e}finally{await this.clearRunStopRequest(t.runId)}}async onUserIdentity(t,s){let e=ot(s);if(!e){E(t,U.SERVER_ERROR,"Invalid identity payload");return}this.setState({...this.state,injectedUserId:e}),E(t,U.SERVER_EVENT,JSON.stringify({type:"info:identity",content:{set:!0}}))}async onUserAuth(t,s){let e=qt(s);if(!e){E(t,U.SERVER_ERROR,"Invalid auth payload");return}let n=e.value.trim();n===""?delete this.userAuth[e.name]:this.userAuth[e.name]=e.value,E(t,U.SERVER_EVENT,JSON.stringify({type:"info:auth",content:{name:e.name,set:n!==""}}))}async onClearHistory(t){await ft(this),this.userAuth={},this.composioSessions={},this.skillRefCache.clear(),this.setState({...this.state,error:"",engineState:this.state.engineState,modelsCache:{},lastUpdated:new Date}),t&&E(t,U.SERVER_HISTORY,JSON.stringify({messages:[]}))}async onStart(){`${JSON.stringify(this.state)}`,await ce(this);let t=await z(this);`${JSON.stringify(t)}`}async onClose(t,s,e,n){console.log(`Session closed: ${this.state.sessionId} ${s} - ${e}`)}async onError(t){console.error("AgentDO encountered an error:",t)}};function vr(o){let t=o.state;if(!t)return null;let s=["startNode","answerNode"];for(let e of s)if(!t.nodes.some(r=>r.type===e))return!1;return t.nodes.find(e=>e.type==="startNode")}import{importSPKI as Eo,jwtVerify as Lo}from"jose";function Fe(o){let t={};if(!o)return t;let s=o.split(";");for(let e of s){let n=e.indexOf("=");if(n>-1){let r=e.slice(0,n).trim(),i=e.slice(n+1).trim();r&&(t[r]=decodeURIComponent(i))}}return t}function Ho(o){return(typeof o.email=="string"?o.email.trim():"")||null}async function Y(o,t,s){let e=Fe(o.headers.get("cookie")),n=new URL(o.url),r=e.access_token||n.searchParams.get("access_token"),i=await Vo(t,r);if(i.ok){let c=i.payload,a=Ho(c);return a?{id:c.sub,email:a,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 Vo(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 s=`-----BEGIN PUBLIC KEY-----
|
|
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}=Ho(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}=Bt(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),pt(M.data)){let L=dt(ft(M.data));e.context.memory=ut(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 Ot?(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:Jt,classifierNode:Kt,llmNode:Xt,memoNode:qt,answerNode:Dt,apiNode:Et,toolNode:Ht};return a}var Ot=class extends Error{constructor(){super("Stopped by user"),this.name="FlowExecutionStoppedError"}};function Ho(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=se(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=Me(e.id,r),c=new Set;for(let d of s){let m=Me(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 Me(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 So(o,t){var n;return((n=o.state)==null?void 0:n.nodes.find(e=>e.id===t))||null}function Vo(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 So(t,r)}import{streamText as Ko}from"ai";var Xo={short:"Up to 16 dense bullets. Keep constraints, working agreements, and the outline of anything already settled.",medium:"Grouped bullets by whatever this session is about (actors, constraints, decisions, current plan/state, open work). Under-remembering is worse than a few extra bullets.",long:"Same as medium, with one-line context on a decision or plan block when later turns will need it."},qo=12,Jo=400,Pe=700;function zo(o,t=qo){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"?Pe:Jo,a=r.trim().replace(/\s+/g," ").slice(0,i);a&&e.push(`${s.role==="user"?"U":"A"}: ${a}`)}return e.join(`
|
|
24
|
+
`)}function Wo(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 Go(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 Yo(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 Bo(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.`,Xo[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,Pe)}`:"",o.answers.trim()?`Answer outputs:
|
|
26
|
+
${o.answers.trim()}`:""].filter(Boolean).join(`
|
|
27
|
+
`);return{system:t,user:n}}function Zo(o){return ne(o.previous,oe(o.userText),o.maxTokens)}async function Qo(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 vo(o){if(o.fullStream&&typeof o.fullStream[Symbol.asyncIterator]=="function")return Qo({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 Fe(o){var u;let t=kt(o.engineState);if(!t)return{status:"skipped",reason:"start_node_missing"};if(!pt(t))return{status:"skipped",reason:"memory_disabled"};let n=ft(t),e=dt(n),s=vt(t),r=Mt(o.previousContent||""),i=Go(o.messages),a=Yo(o.engineState),c=p=>{let g=Zo({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=te(n,(u=p.reasoning)==null?void 0:u.kind),{system:d,user:m}=Bo({previous:r,userText:o.userText,assistantText:i,answers:a,length:n,maxTokens:e,recentTurns:zo(o.messages)}),l=Rt(p.reasoning),f=Tt(p.provider,{effort:l,exposeReasoning:!1,maxTokens:g}),y=Ko({model:p.modelHandle,system:d,messages:[{role:"user",content:m}],...ht({...p.effectiveParams??{},maxOutputTokens:g}),...f?{providerOptions:f}:{}}),h=await vo(y),w=Wo(await y.usage),R=Mt(h.text);if(ee(R)&&(R=""),!R)return{...c(h.error||"Memory model returned empty text"),usage:w};let T=ut(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 De(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 Ue(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 Ce(){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 tn(o){return!!(o!=null&&o.HX_ORA_URL)&&!!(o!=null&&o.HX_API_KEY)}async function Ee(o,t){if(!tn(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 je=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?Ce():void 0,u=async()=>await z(t),p=async x=>{await he(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"),P=await k(x,n);return t.setState({...t.state,modelsCache:{...t.state.modelsCache||{},[x]:P}}),P}catch(k){throw console.error(`Error fetching model ${x}:`,k),k}},d={id:en(),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,P,E,A,b,O;await je({...x,userId:o.resolveUserId(),tenant:((P=(k=t.state.engineState)==null?void 0:k.flowData)==null?void 0:P.tenant)||"",flowId:((A=(E=t.state.engineState)==null?void 0:E.flowData)==null?void 0:A.flowId)||"",sessionId:((O=(b=t.state.engineState)==null?void 0:b.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 De(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 At(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 Fe({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 Ee(n,{flowId:x,sessionId:k,runId:o.runId,createdAt:new Date(i).toISOString(),data:c.snapshotData(),answerNodeIds:c.answerNodeIds()});let P={...R.results||{}};for(let E of c.answerNodeIds())P[E]={...P[E]||{},persisted:!0,runId:o.runId};R={...R,results:P},t.setState({...t.state,engineState:R})}catch(P){let E=P instanceof Error?P.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(Ue(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 on}from"nanoid";function nn(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 Le(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=nn(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-${on(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 He(o){try{return await xt(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 Se="trigger:nonce:",an=900*1e3,zt="run:stop:",Ve=class extends sn{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(`${zt}${t}`,Date.now()),{accepted:!0}):{accepted:!1}}async isRunStopRequested(t){return!!await this.ctx.storage.get(`${zt}${t}`)}async clearRunStopRequest(t){await this.ctx.storage.delete(`${zt}${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")?Le(this,t,this.env,this.ctx):t.method==="DELETE"&&n.pathname.endsWith("/clear")?He(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 At(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-${rn(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=Te(e||this.resolveSessionUserId(),i);return xe(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 Nt(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=`${Se}${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:Se})).entries()].filter(([,i])=>e-i>an).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(kt(this.state.engineState)),s=Zt(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 Nt(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 Nt(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=Qt(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 xt(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 Re(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 Li(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 cn,jwtVerify as ln}from"jose";function Ke(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 dn(o){return(typeof o.email=="string"?o.email.trim():"")||null}async function Y(o,t,n){let e=Ke(o.headers.get("cookie")),s=new URL(o.url),r=e.access_token||s.searchParams.get("access_token"),i=await un(t,r);if(i.ok){let a=i.payload,c=dn(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 un(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-----
|
|
24
28
|
${o.KC_RS256_PK}
|
|
25
|
-
-----END PUBLIC KEY-----`,e=await
|
|
26
|
-
`)}async function Le(o,t){let s=await crypto.subtle.importKey("raw",Ce.encode(o),{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return Xo(await crypto.subtle.sign("HMAC",s,Ce.encode(t)))}function Jo(o,t){if(o.length!==t.length)return!1;let s=0;for(let e=0;e<o.length;e++)s|=o.charCodeAt(e)^t.charCodeAt(e);return s===0}async function ui(o){let t=String(o.timestamp??Math.floor(Date.now()/1e3)),s=await Le(o.secret,Ee({timestamp:t,nonce:o.nonce,tenant:o.tenant,destination:o.destination,body:o.body}));return{"content-type":"application/json",[je]:o.tenant,[Me]:t,[be]:o.nonce,[Ue]:`v1=${s}`}}async function He(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(je))==null?void 0:p.trim(),s=(g=o.headers.get(Me))==null?void 0:g.trim(),e=(d=o.headers.get(be))==null?void 0:d.trim(),n=(m=o.headers.get(Ue))==null?void 0:m.trim();if(!t||!s||!e||!n)return{ok:!1,error:"missing signature headers"};if(!n.startsWith("v1="))return{ok:!1,error:"unsupported signature version"};let r=Number(s);if(!Number.isFinite(r))return{ok:!1,error:"invalid timestamp"};let i=Math.floor((o.now??Date.now())/1e3),c=o.toleranceSeconds??300;if(Math.abs(i-r)>c)return{ok:!1,error:"stale timestamp"};let a=await Le(o.secret.trim(),Ee({timestamp:s,nonce:e,tenant:t,destination:o.url,body:o.body}));return Jo(n.slice(3),a)?{ok:!0,tenant:t,nonce:e,timestamp:r}:{ok:!1,error:"signature mismatch"}}var S=(o,t=200)=>new Response(JSON.stringify(o),{status:t,headers:{"content-type":"application/json"}});async function Ve(o,t,s){var u;if(new URL(o.url).pathname!=="/api/triggers/dispatch")return;if(o.method!=="POST")return S({error:"Method not allowed"},405);let n=await o.text(),r=await He({secret:t.HX_API_KEY,body:n,url:o.url,headers:o.headers});if(!r.ok)return console.warn(`[triggers] rejected dispatch: ${r.error}`),S({error:"Invalid signature"},401);let i;try{i=JSON.parse(n)}catch{return S({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 S({error:"activationId, triggerId, triggerKind, invocationMode, runId, flowId, runAsUserId and tenant are required"},400);if(i.tenant!==r.tenant)return S({error:"Tenant mismatch"},403);let c;try{c=await W(i.flowId,t)}catch{return S({error:"Flow not found"},404)}if(!((u=c==null?void 0:c.metadata)!=null&&u.tenant)||c.metadata.tenant!==i.tenant)return console.warn(`[triggers] flow ${i.flowId} does not belong to tenant ${i.tenant}`),S({error:"Tenant mismatch"},403);let a=await De(t,{...i,sessionId:i.sessionId||i.runAsUserId,nonce:r.nonce});return a.status==="error"?S({error:a.error},502):a.status==="deduped"?S({deduped:!0,runId:a.runId},200):S({accepted:!0,runId:a.runId,taskId:a.taskId},202)}var So=/^[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}$/,zo=new Set(["state","messages"]);async function Go(o,t){let s=new URL(o.url);if(!s.pathname.startsWith("/api/internal/sessions/"))return;let e=s.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 n=decodeURIComponent(e[4]||""),r=decodeURIComponent(e[5]||""),i=decodeURIComponent(e[7]||"");if(!n||!r||!i)return new Response("Not found",{status:404});try{let c=await It(t.AGENT,`${n}::${r}`);return Response.json(await c.requestRunStop(i))}catch(c){return console.error("[agents] failed to request run stop",c),Response.json({error:"Failed to stop run"},{status:502})}}async function Wo(o,t){let s=new URL(o.url);if(!s.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 n=s.pathname.split("/"),r=decodeURIComponent(n[4]||""),i=decodeURIComponent(n[5]||""),c=n[6];if(!r||!i||!c||!zo.has(c))return new Response("Not found",{status:404});try{let u=await(await It(t.AGENT,`${r}::${i}`)).inspectPersistedSession(c);return Response.json(u)}catch(a){return console.error("[agents] failed to inspect persisted session",a),Response.json({error:"Failed to inspect persisted session"},{status:502})}}async function xi(o,t,s){var c,a,u,p;let e=new URL(o.url),n=await Ve(o,t,s);if(n instanceof Response)return n;let r=await Go(o,t);if(r instanceof Response)return r;let i=await Wo(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 W(d,t)}catch{return new Response("Flow not found",{status:404})}if(!l.metadata||((c=l.metadata)==null?void 0:c.status)!=="active")return new Response("NO chat",{status:404});if(((a=l.metadata)==null?void 0:a.visibility)==="private"&&!await Y(o,t,s)){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(!So.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,s);if(!f){let I=new URL(o.url).searchParams.has("access_token");console.warn(`[agents] Unauthenticated agent socket upgrade (access_token query=${I}) \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 It(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}`,N=await Y(o,t,s);if(!N){let D=new URL(o.url).searchParams.has("access_token");console.warn(`[agents] Unauthenticated agent socket upgrade (access_token query=${D}) \u2014 Composio connections from tool editor will not apply`)}let I=new Headers(o.headers);I.delete("X-User-Payload"),N&&I.set("X-User-Payload",JSON.stringify(N));let x=new Request(o,{headers:I});return(await It(t.AGENT,w)).fetch(x)}catch(f){return console.error("Error in /api/ora/connect:",f),new Response("Internal error",{status:500})}}}async function Ai(o,t,s){let e=new URL(o.url),n=o.method;if(!e.pathname.startsWith("/api/instances"))return;let r=await Y(o,t,s);if(!r)return new Response("Unauthorized",{status:401});let i=t.HX_CORE_URL,c=t.HX_API_KEY;if(!i||!c)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)}),n==="GET"&&!u&&d.searchParams.set("filter_user_id",r.email);let m=new Headers;m.set("Authorization",c),m.set("Content-Type","application/json"),m.set("X-User-Payload",JSON.stringify(r));let l={method:n,headers:m};if(["POST","PATCH","PUT"].includes(n))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 $i(o,t,s){let e=new URL(o.url);if(o.method==="POST"&&e.pathname==="/auth/login")try{let n=await o.formData(),r=n.get("username"),i=n.get("password"),c=n.get("nextURL")||"/";if(!r||!i)return new Response("Missing username or password",{status:400});let a=new URLSearchParams;a.append("username",r),a.append("password",i),a.append("grant_type","password"),a.append("client_id",t.KC_CLIENT_ID),a.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:a});if(!u.ok)return new Response("Unauthorized",{status:401});let p=await u.json(),g=new Response(null,{status:302,headers:{Location:c}}),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(n){return console.error("Auth error:",n),new Response("Internal Server Error",{status:500})}if(e.pathname==="/auth/logout"){let n=new Response(null,{status:302,headers:{Location:"/login"}}),r=i=>{n.headers.append("Set-Cookie",`${i}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=0`)};return r("access_token"),r("refresh_token"),r("id_token"),n}if(e.pathname.startsWith("/s/")){let n=await Y(o,t,s);if(!n){let r=new URL("/login",e.origin);return r.searchParams.set("nextURL",`${e.pathname}${e.search}`),Response.redirect(r.toString(),302)}return{user:n}}}export{Je as ANONYMOUS_RUN_USER_PREFIX,Pe as AgentDO,os as FLOW_INPUT_NAME_RE,Rt as FlowExecutionStoppedError,gs as GENERATION_PARAM_KEYS,ws as GENERATION_PRESETS,ss as MAX_USER_IDENTITY_LENGTH,$s as MODEL_REGISTRY_SNAPSHOT,Q as NodeType,ns as OUT_VAR_NAME_RE,ys as PRESET_PARAM_KEYS,_s as REASONING_EFFORT_LEVELS,se as TOOL_REGISTRY_SNAPSHOT,be as TRIGGER_NONCE_HEADER,Ue as TRIGGER_SIGNATURE_HEADER,di as TRIGGER_SIGNATURE_TOLERANCE_SECONDS,je as TRIGGER_TENANT_HEADER,Me as TRIGGER_TIMESTAMP_HEADER,H as VariableResolutionError,Rs as applyPresetToOverrides,oe as buildReasoningProviderOptions,as as buildScope,ui as buildSignedTriggerHeaders,Xt as buildTriggerMessageText,Qo as buildUrl,Ho as canonicalUserEmail,nt as claimRun,ft as clearAllMessages,gt as completeRun,Yo as convertTempMessure,Tt as createRun,Yt as deriveParamSupport,De as dispatchTrigger,Vt as embedText,ce as ensureAgentTables,qe as ensureMessagesTable,fs as extractTemplateReferences,cs as findScopedSourceNode,z as getAllMessages,is as getAncestorNodeIds,rs as getDefaultOutVars,lt as getEffectiveOutVars,v as getFlowInputDefs,ks as getModelEntry,ls as getRefTail,tt as getUpstreamOutVars,xi as handleAgentsRoutes,$i as handleAuthRoutes,ri as handleCommonRoutes,Ai as handleIntancesRoutes,Wo as handlePersistedSessionInspection,Go as handleSessionRunControl,Ve as handleTriggerRoutes,ts as hashText,rt as initializeEngineState,ds as isBinaryOutVar,Wt as jsonSchemaToZod,et as logc,U as messageTypes,qo as normalizeDestination,Zt as normalizeEffectiveParams,Kt as normalizeFlowInputs,yo as normalizeModelEntry,vt as normalizeReasoning,xs as openAiReasoningParamSupport,Is as openAiStandardParamSupport,Fe as parseCookies,ps as parseTemplateExpression,qt as parseUserAuth,ct as parseUserMessage,Bt as pickNodeOverrides,Os as reasoningEffortLevels,te as reasoningExposable,de as recordRun,dn as registerProvider,We as resolveAnswerMappings,ht as resolveModelById,us as resolveOutVarRef,hs as resolvePreset,ee as resolveReasoningEffort,J as resolveReference,le as resolveRunUserId,St as resolveTemplate,ms as rewriteTemplateNodeRefs,it as runAgentTurn,Zo as safeParseJSON,ot as sanitizeUserIdentity,_e as sendEvent,E as serverSend,ae as setMessage,Le as signTriggerMaterial,Ie as startEngine,As as stripUnsupportedFromNodeData,Bo as tempTool,Jo as timingSafeEqualHex,Qt as toStreamTextSettings,Ee as triggerSignatureMaterial,vo as twitter,vr as validateFlowStart,Jt as validateOutVars,es as vectorize,Vo as verifyToken,He as verifyTriggerRequest,Y as verifyUser,dt as walkPath,Ns as workersAiParamSupport,Ts as xaiParamSupport};
|
|
29
|
+
-----END PUBLIC KEY-----`,e=await cn(n,"RS256");try{let{payload:s,protectedHeader:r}=await ln(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 qi(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 $t}from"agents";import{getAgentByName as pn}from"agents";async function Xe(o,t){let n=t.sessionId||t.runAsUserId,e=t.inputs||{},s=t.runId;if(!s){let c=await Pt(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 pn(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 Je="x-ora-signature",ze="x-ora-timestamp",We="x-ora-nonce",Ge="x-ora-tenant",Yi=300,qe=new TextEncoder;function fn(o){return[...new Uint8Array(o)].map(t=>t.toString(16).padStart(2,"0")).join("")}function mn(o){try{let t=new URL(o);return`${t.origin}${t.pathname.replace(/\/$/,"")}`}catch{return o.replace(/\/$/,"")}}function Ye(o){return["v1",o.timestamp,o.nonce,o.tenant,mn(o.destination),o.body].join(`
|
|
30
|
+
`)}async function Be(o,t){let n=await crypto.subtle.importKey("raw",qe.encode(o),{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return fn(await crypto.subtle.sign("HMAC",n,qe.encode(t)))}function gn(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 Bi(o){let t=String(o.timestamp??Math.floor(Date.now()/1e3)),n=await Be(o.secret,Ye({timestamp:t,nonce:o.nonce,tenant:o.tenant,destination:o.destination,body:o.body}));return{"content-type":"application/json",[Ge]:o.tenant,[ze]:t,[We]:o.nonce,[Je]:`v1=${n}`}}async function Ze(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(Ge))==null?void 0:p.trim(),n=(g=o.headers.get(ze))==null?void 0:g.trim(),e=(d=o.headers.get(We))==null?void 0:d.trim(),s=(m=o.headers.get(Je))==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 Be(o.secret.trim(),Ye({timestamp:n,nonce:e,tenant:t,destination:o.url,body:o.body}));return gn(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 Qe(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 Ze({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 Xe(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 yn=/^[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}$/,wn=new Set(["state","messages","memory"]);async function hn(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 $t(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 Rn(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||!wn.has(a))return new Response("Not found",{status:404});try{let u=await(await $t(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 ia(o,t,n){var a,c,u,p;let e=new URL(o.url),s=await Qe(o,t,n);if(s instanceof Response)return s;let r=await hn(o,t);if(r instanceof Response)return r;let i=await Rn(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(!yn.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 $t(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 $t(t.AGENT,w)).fetch(I)}catch(f){return console.error("Error in /api/ora/connect:",f),new Response("Internal error",{status:500})}}}async function la(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 pa(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{oo as ANONYMOUS_RUN_USER_PREFIX,Ve as AgentDO,bn as DEFAULT_MEMORY_LENGTH,Pn as DEFAULT_MEMORY_MODEL,On as FLOW_INPUT_NAME_RE,Ot as FlowExecutionStoppedError,Jn as GENERATION_PARAM_KEYS,Wn as GENERATION_PRESETS,$n as MAX_USER_IDENTITY_LENGTH,Mn as MEMORY_LENGTH_TOKENS,ns as MODEL_REGISTRY_SNAPSHOT,B as NodeType,Un as OUT_VAR_NAME_RE,zn as PRESET_PARAM_KEYS,es as REASONING_EFFORT_LEVELS,me as TOOL_REGISTRY_SNAPSHOT,We as TRIGGER_NONCE_HEADER,Je as TRIGGER_SIGNATURE_HEADER,Yi as TRIGGER_SIGNATURE_TOLERANCE_SECONDS,Ge as TRIGGER_TENANT_HEADER,ze as TRIGGER_TIMESTAMP_HEADER,V as VariableResolutionError,Yn as applyPresetToOverrides,Tt as buildReasoningProviderOptions,jn as buildScope,Bi as buildSignedTriggerHeaders,Zt as buildTriggerMessageText,Nn as buildUrl,dn as canonicalUserEmail,ut as capMemoryContent,rt as claimRun,xt as clearAllMessages,Nt as completeRun,Tn as convertTempMessure,Pt as createRun,le as deriveParamSupport,Xe as dispatchTrigger,Yt as embedText,Re as ensureAgentTables,eo as ensureMessagesTable,Dn as estimateTokens,Xn as extractTemplateReferences,oe as extractUserKeypoints,Ln as findScopedSourceNode,z as getAllMessages,En as getAncestorNodeIds,Cn as getDefaultOutVars,mt as getEffectiveOutVars,v as getFlowInputDefs,ss as getModelEntry,Hn as getRefTail,tt as getUpstreamOutVars,ia as handleAgentsRoutes,pa as handleAuthRoutes,qi as handleCommonRoutes,la as handleIntancesRoutes,Rn as handlePersistedSessionInspection,hn as handleSessionRunControl,Qe as handleTriggerRoutes,kn as hashText,it as initializeEngineState,Sn as isBinaryOutVar,pt as isStartMemoryEnabled,ce as jsonSchemaToZod,ot as logc,ee as looksLikeTranscript,te as memoryGenerationMaxTokens,dt as memoryTokenLimit,ne as mergeKeypointMemory,j as messageTypes,mn as normalizeDestination,ue as normalizeEffectiveParams,Bt as normalizeFlowInputs,$o as normalizeModelEntry,pe as normalizeReasoning,Zn as openAiReasoningParamSupport,Bn as openAiStandardParamSupport,Ke as parseCookies,Fn as parseMemoryLength,Kn as parseTemplateExpression,Qt as parseUserAuth,lt as parseUserMessage,de as pickNodeOverrides,os as reasoningEffortLevels,fe as reasoningExposable,xe as recordRun,Hs as registerProvider,io as resolveAnswerMappings,et as resolveModelById,Vn as resolveOutVarRef,Gn as resolvePreset,Rt as resolveReasoningEffort,q as resolveReference,Te as resolveRunUserId,re as resolveTemplate,qn as rewriteTemplateNodeRefs,at as runAgentTurn,In as safeParseJSON,Mt as sanitizeMemoryDocument,nt as sanitizeUserIdentity,je as sendEvent,S as serverSend,he as setMessage,Be as signTriggerMaterial,be as startEngine,ft as startMemoryLength,vt as startMemoryModel,ts as stripUnsupportedFromNodeData,xn as tempTool,gn as timingSafeEqualHex,ht as toStreamTextSettings,Ye as triggerSignatureMaterial,An as twitter,Li as validateFlowStart,se as validateOutVars,_n as vectorize,un as verifyToken,Ze as verifyTriggerRequest,Y as verifyUser,gt as walkPath,vn as workersAiParamSupport,Qn as xaiParamSupport};
|
|
@@ -35,6 +35,8 @@ export interface SessionEnv {
|
|
|
35
35
|
runId?: string;
|
|
36
36
|
/** Turn-local structured output collector. Never persisted in Agent state. */
|
|
37
37
|
outputCollector?: RunOutputCollector;
|
|
38
|
+
/** Durable memory document for this DO (from `this.state.memory`, not engineState). */
|
|
39
|
+
agentMemory?: string;
|
|
38
40
|
}
|
|
39
41
|
export type { ComposioSessionMeta };
|
|
40
42
|
export interface State {
|
|
@@ -46,12 +48,27 @@ export interface State {
|
|
|
46
48
|
engineState?: FlowEngineState;
|
|
47
49
|
error?: string;
|
|
48
50
|
modelsCache?: Record<string, any>;
|
|
51
|
+
/** Session memory document for this DO. Sibling of engineState — never copied into engineState as the source of truth. */
|
|
52
|
+
memory?: {
|
|
53
|
+
content: string;
|
|
54
|
+
updatedTs: number;
|
|
55
|
+
lastError?: string;
|
|
56
|
+
fallback?: boolean;
|
|
57
|
+
};
|
|
49
58
|
}
|
|
50
|
-
export type PersistedSessionSection = 'state' | 'messages';
|
|
59
|
+
export type PersistedSessionSection = 'state' | 'messages' | 'memory';
|
|
60
|
+
export type PersistedSessionMemory = {
|
|
61
|
+
content: string;
|
|
62
|
+
updatedTs: number;
|
|
63
|
+
lastError?: string;
|
|
64
|
+
fallback?: boolean;
|
|
65
|
+
};
|
|
51
66
|
export type PersistedSessionSectionResult = {
|
|
52
67
|
state: State;
|
|
53
68
|
} | {
|
|
54
69
|
messages: Message[];
|
|
70
|
+
} | {
|
|
71
|
+
memory: PersistedSessionMemory | null;
|
|
55
72
|
};
|
|
56
73
|
export declare class AgentDO extends Agent<Env, State> {
|
|
57
74
|
initialState: State;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Message } from '../../common/types/agent-types';
|
|
2
|
+
import { type MemoryLength } from '../../common/utils/agentMemory';
|
|
3
|
+
import type { SessionEnv } from '../core/AgentDO';
|
|
4
|
+
import type { FlowEngineState } from './FlowEngine';
|
|
5
|
+
export declare function recentTurnsDigest(messages: Message[], limit?: number): string;
|
|
6
|
+
export interface MemoryWriteResult {
|
|
7
|
+
status: 'written';
|
|
8
|
+
content: string;
|
|
9
|
+
truncated: boolean;
|
|
10
|
+
usage?: {
|
|
11
|
+
promptTokens: number;
|
|
12
|
+
completionTokens: number;
|
|
13
|
+
totalTokens: number;
|
|
14
|
+
};
|
|
15
|
+
modelId?: string;
|
|
16
|
+
fallback?: boolean;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
export type MemoryWriteOutcome = MemoryWriteResult | {
|
|
20
|
+
status: 'skipped';
|
|
21
|
+
reason: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function buildMemoryWriterPrompt(input: {
|
|
24
|
+
previous: string;
|
|
25
|
+
userText: string;
|
|
26
|
+
assistantText: string;
|
|
27
|
+
answers: string;
|
|
28
|
+
length: MemoryLength;
|
|
29
|
+
maxTokens: number;
|
|
30
|
+
recentTurns?: string;
|
|
31
|
+
}): {
|
|
32
|
+
system: string;
|
|
33
|
+
user: string;
|
|
34
|
+
};
|
|
35
|
+
export declare function fallbackMemoryDocument(input: {
|
|
36
|
+
previous: string;
|
|
37
|
+
userText: string;
|
|
38
|
+
maxTokens: number;
|
|
39
|
+
}): string;
|
|
40
|
+
export declare function updateAgentMemoryAfterTurn(options: {
|
|
41
|
+
sessionEnv: SessionEnv;
|
|
42
|
+
engineState: FlowEngineState;
|
|
43
|
+
previousContent: string;
|
|
44
|
+
userText: string;
|
|
45
|
+
messages: Message[];
|
|
46
|
+
}): Promise<MemoryWriteOutcome>;
|
package/package.json
CHANGED
package/dist/chunk-K4MP63XM.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"}];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",l=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 l("UNSAFE_PATH",`Unsafe variable path segment "${t}"`)}function R(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;if(Object.prototype.hasOwnProperty.call(t.refOverrides??{},e))return{value:t.refOverrides[e]};let n=t.nodes.find(f=>f.type==="startNode");if(e==="user_input")return{value:(o=t.context)==null?void 0:o.user_input};if(e==="images"&&((r=n==null?void 0:n.data)==null?void 0:r.allow_images)===!0)return{value:(s=t.context)==null?void 0:s.user_images};if(e==="files"&&((i=n==null?void 0:n.data)==null?void 0:i.allow_documents)===!0)return{value:(a=t.context)==null?void 0:a.files};if(e==="classified_id")return{value:(c=t.context)==null?void 0:c.classified_id};if(n&&m(n.data).some(f=>f.name===e))return{value:(u=t.context)==null?void 0:u[e]}}function v(e,t){var h;let n=e.trim();if(!n)throw new l("INVALID_EXPRESSION","Variable reference is empty");let o=n.includes(".")?void 0:k(n,t);if(o)return o;if(!n.includes("."))throw new l("UNKNOWN_CONTEXT_REF",`Unknown run-context variable "${n}"`);let r=x(n,t);if(!r)throw new l("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 l("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 f=R(u,c.path??""),p=a.length>0?R(f,a.join(".")):f;return p==null?{value:void 0,missing:"path_not_found"}:{value:p}}function ce(e,t){return v(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 l("INVALID_EXPRESSION","Template defaults must be quoted string literals");if(e[0]==='"')try{return JSON.parse(e)}catch{throw new l("INVALID_EXPRESSION","Invalid double-quoted template default")}return e.slice(1,-1).replace(/\\'/g,"'").replace(/\\\\/g,"\\")}function V(e){let{ref:t,rawDefault:n}=M(e.trim());if(!t)throw new l("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 p=u.ref.slice(8);if(!Object.prototype.hasOwnProperty.call(n.secrets??{},p))throw new l("MISSING_SECRET",`Secret "${p}" is not defined for this tenant`);return _(n.secrets[p],r)}let f=v(u.ref,n);if(f.missing){if(u.defaultValue!==void 0)return _(u.defaultValue,r);let p=f.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 l(f.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",p)}return _(f.value,r)}catch(u){if(u instanceof l)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,l as p,R as q,v as r,ce as s,V as t,le as u,fe as v,pe as w};
|
package/dist/chunk-TSZICF6X.js
DELETED
|
@@ -1 +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 P=256;function A(e){if(typeof e!="string")return null;let t=e.trim();return t?t.slice(0,P):null}function I(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 C={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 y=["temperature","topP","topK","frequencyPenalty","presencePenalty","maxOutputTokens","seed","stopSequences","maxRetries"],g=["temperature","topP","topK","frequencyPenalty","presencePenalty"],E={precise:{temperature:.3,topP:.9,topK:30},balanced:{temperature:.8,topP:1,topK:50},creative:{temperature:1.1,topP:.95,topK:80}},R=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 S(e){return/^gpt-5/i.test(e)}function c(e){let t=e.contextWindow??128e3;return e.provider==="openai"?S(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 d(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 T(e,t){return e===void 0&&t===void 0?!0:e===void 0||t===void 0?!1:Math.abs(e-t)<R}function w(e,t){for(let n of["precise","balanced","creative"]){let o=E[n],s=!0;for(let r of g){if(t&&!d(r,t))continue;let u=o[r],i=e[r];if(u!==void 0){if(typeof u=="number"&&typeof i=="number"){if(!T(i,u)){s=!1;break}}else if(i!==u){s=!1;break}}}if(s)return n}return"custom"}function L(e,t){let n=E[e],o={};for(let s of g){if(t&&!d(s,t))continue;let r=n[s];r!==void 0&&(o[s]=r)}return o}function K(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 U(e,t,n){var u;let o={...e,...t},s=[],r={};for(let i of y){let f=o[i];if(f===void 0)continue;if(i==="maxRetries"){r.maxRetries=f;continue}if(!d(i,n)){s.push({key:i,action:"stripped",detail:"unsupported by model"});continue}if(i==="stopSequences"){let a=f,p=((u=n.stopSequences)==null?void 0:u.max)??a.length;a.length>p?(r.stopSequences=a.slice(0,p),s.push({key:i,action:"clamped",detail:`truncated to ${p} sequences`})):r.stopSequences=a;continue}if(i==="seed"){r.seed=f;continue}let m=n[i];if(m&&typeof m=="object"&&"min"in m){let a=f,p=v(a,m.min,m.max);r[i]=p,p!==a&&s.push({key:i,action:"clamped",detail:`clamped from ${a} to ${p}`})}else if(i==="maxOutputTokens"){let a=f,p=n.maxOutputTokens.max,l=Math.min(a,p);r.maxOutputTokens=l,l!==a&&s.push({key:i,action:"clamped",detail:`clamped from ${a} to ${l}`})}}return{effectiveParams:r,adjustments:s}}function G(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 W(e=128e3){return c({provider:"openai",providerModel:"gpt-4.1",contextWindow:e})}function V(e=2e6){return c({provider:"openai",providerModel:"gpt-5-nano",contextWindow:e})}function j(e=256e3){return c({provider:"xai",providerModel:"grok-4-fast",contextWindow:e})}function H(e=128e3){return c({provider:"cloudflare",providerModel:"@cf/meta/llama-3.2-3b-instruct",contextWindow:e})}function F(e,t){let n={...e};for(let o of y)o==="maxRetries"||n[o]===void 0||d(o,t)||delete n[o];return n}var b=["none","minimal","low","medium","high","xhigh"],k=e=>typeof e=="string"&&b.includes(e);function z(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 M(e){return e.kind!=="effort"?[]:e.levels??[]}var O=e=>e===!0||e==="true";function D(e){return e.kind==="tag"?!0:e.kind==="effort"?O(e.exposesReasoning):!1}function $(e,t){if(e.kind!=="effort")return;let n=M(e);if(k(t)&&n.includes(t))return t;if(e.defaultLevel&&n.includes(e.defaultLevel))return e.defaultLevel}function X(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 _=[{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."}],Z=_.reduce((e,t)=>(e[t.id]=t,e),{});var Q={};function ee(e){}export{C as a,h as b,P as c,A as d,I as e,y as f,g,E as h,c as i,w as j,L as k,K as l,U as m,G as n,W as o,V as p,j as q,H as r,F as s,b as t,z as u,M as v,D as w,$ as x,X as y,Z as z,Q as A,ee as B};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as a,e as b}from"./chunk-UBNZUUTD.js";import"./chunk-K4MP63XM.js";import"./chunk-V6JSMX5A.js";import"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";export{a as customHttpTool,b as default};
|