@hugex/ai 3.2.0 → 3.4.0

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.
Files changed (49) hide show
  1. package/dist/FlowEngine-UNMMHMN6.js +1 -0
  2. package/dist/{chunk-V35SRZAO.js → chunk-3D77ZXDC.js} +1 -1
  3. package/dist/{chunk-6AZ7RATD.js → chunk-AKJFVR6J.js} +1 -1
  4. package/dist/chunk-EHOK5FW2.js +1 -0
  5. package/dist/chunk-HJPR76HF.js +1 -0
  6. package/dist/chunk-J67BCWE3.js +1 -0
  7. package/dist/chunk-KKJW6HJA.js +3 -0
  8. package/dist/chunk-V43Y4KSA.js +12 -0
  9. package/dist/chunk-YXG3ZEUP.js +10 -0
  10. package/dist/{chunk-ZYIULB2P.js → chunk-Z4CYLB7J.js} +1 -1
  11. package/dist/client.js +1 -1
  12. package/dist/common/constants/clef-models.d.ts +48 -0
  13. package/dist/common/constants/tenant-only-nodes.d.ts +1 -1
  14. package/dist/common/flow-graph/catalog.d.ts +40 -0
  15. package/dist/common/flow-graph/classifier.d.ts +2 -0
  16. package/dist/common/flow-graph/composio.d.ts +2 -0
  17. package/dist/common/flow-graph/credentials.d.ts +3 -0
  18. package/dist/common/flow-graph/index.d.ts +11 -0
  19. package/dist/common/flow-graph/ops.d.ts +21 -0
  20. package/dist/common/flow-graph/refs.d.ts +18 -0
  21. package/dist/common/flow-graph/schema.d.ts +570 -0
  22. package/dist/common/flow-graph/templates.d.ts +2 -0
  23. package/dist/common/flow-graph/validate.d.ts +77 -0
  24. package/dist/common/types/classifier-types.d.ts +57 -0
  25. package/dist/common/types/classifier-validation.d.ts +2 -0
  26. package/dist/common/utils/clef-prefix.d.ts +16 -0
  27. package/dist/common/utils/clef.d.ts +49 -0
  28. package/dist/common.d.ts +5 -0
  29. package/dist/common.js +1 -1
  30. package/dist/composioDirectTool-ZCZRW5WU.js +1 -0
  31. package/dist/composioTool-RKVCX25U.js +1 -0
  32. package/dist/httpTool-IW4W7CGE.js +1 -0
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.js +6 -6
  35. package/dist/server/core/agentTurn.d.ts +4 -0
  36. package/dist/server/runners/classifierNodeRunner.d.ts +1 -1
  37. package/dist/server/utils/clef.d.ts +1 -0
  38. package/dist/server/utils/composio.d.ts +2 -0
  39. package/dist/server/utils/redactSecrets.d.ts +6 -0
  40. package/package.json +1 -1
  41. package/dist/FlowEngine-H3QNWZVB.js +0 -1
  42. package/dist/chunk-6JUKM6LT.js +0 -10
  43. package/dist/chunk-DEW7U7V7.js +0 -23
  44. package/dist/chunk-QEZQZG6Z.js +0 -3
  45. package/dist/chunk-RFWFJGER.js +0 -1
  46. package/dist/chunk-XXB57DMN.js +0 -1
  47. package/dist/composioDirectTool-XOKIM5FJ.js +0 -1
  48. package/dist/composioTool-C4KZMI4Q.js +0 -1
  49. package/dist/httpTool-RT5CTG4O.js +0 -1
@@ -1,23 +0,0 @@
1
- import{a as Wt}from"./chunk-V35SRZAO.js";import{a as K,b as G,c as Ht,d as tt}from"./chunk-ZYIULB2P.js";import{a as to}from"./chunk-6AZ7RATD.js";import{a as jt,b as Ut,d as Vt,g as Lt,i as st}from"./chunk-XXB57DMN.js";import{a as oo,b as eo}from"./chunk-3K4IMMLP.js";import{A as Xt,B as qt,D as Kt,H as Bt,K as zt,L as Gt,M as Yt,T as Zt,V as Qt,W as Et,X as St,Y as vt,a as B,b as It,k as Ot,n as kt,o as Dt,q as Mt,x as Jt}from"./chunk-6JUKM6LT.js";import{B as Pt,c as S,d as $t,h as bt,k as Z,r as Ct,s as P,v as Q,w as W}from"./chunk-QEZQZG6Z.js";import{a as At,b as _t,d as Ft}from"./chunk-YLDLDEUP.js";import{a as v}from"./chunk-YHXUBVN2.js";import{a as E}from"./chunk-3TXHFKDN.js";async function io(e,o){return e.length?!o||!o.HX_ORA_URL||!o.HX_API_KEY?(console.error("extractDocuments: missing HX_ORA_URL or HX_API_KEY"),e.map(t=>({name:t.name,text:""}))):await Promise.all(e.map(async t=>{try{let s=await fetch(`${o.HX_ORA_URL}/internal/files/extract`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:o.HX_API_KEY},body:JSON.stringify(t)});if(!s.ok)return console.error(`extractDocuments: ${t.name} failed ${s.status}`),{name:t.name,text:""};let u=await s.json();return{name:t.name,text:u.text||""}}catch(s){return console.error(`extractDocuments: ${t.name} threw`,s),{name:t.name,text:""}}})):[]}function No(e,o,i){var t,s,u,p;return Z(((s=(t=i.flowData)==null?void 0:t.state)==null?void 0:s.nodes)??[],((p=(u=i.flowData)==null?void 0:u.state)==null?void 0:p.edges)??[],o.id).some(n=>n.ref===e&&(n.type==="image"||n.type==="file"))}function Ro(e,o){var p,n,f,d,c,g,a;let i=Array.isArray((p=e.data)==null?void 0:p.outputMapping)?e.data.outputMapping:[];if(i.length===0)return null;let t=((f=(n=o.flowData)==null?void 0:n.state)==null?void 0:f.nodes)||[],s={},u=new Set;for(let w of i){let r=(d=w.key)==null?void 0:d.trim(),y=(c=w.from)==null?void 0:c.trim();if(!r||!y)throw new Error(`Answer node ${e.id} has an incomplete variable mapping`);if(u.has(r))throw new Error(`Answer node ${e.id} has duplicate output key "${r}"`);if(No(y,e,o))throw new Error(`Answer node ${e.id} cannot persist binary source "${y}"`);let l=W(y,{context:o.context||{},results:o.results||{},nodes:t,edges:((a=(g=o.flowData)==null?void 0:g.state)==null?void 0:a.edges)??[],currentNodeId:e.id}),m=l.value;if(l.missing||m===void 0||m===null){if(w.default===void 0)throw new P(l.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Answer node ${e.id} could not resolve output "${y}"`);m=w.default}s[r]=m,u.add(r)}try{JSON.stringify(s)}catch{throw new Error(`Answer node ${e.id} produced a value that is not JSON serializable`)}return s}async function nt(e,o,i,t,s,u,p){var f,d,c;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n;try{n=Ro(o,i)}catch(g){throw t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(g)}}),g}n&&e.outputCollector&&e.outputCollector.add(o.id,n);try{let g=await((f=e.getMessages)==null?void 0:f.call(e))??[],a=((d=g[g.length-1])==null?void 0:d.type)==="text"?g[g.length-1].content:"NO-TEXT";p==null||p({type:"answer_node",payload:{userMessage:(c=i==null?void 0:i.context)==null?void 0:c.user_input,answer:a}})}catch(g){console.error("answerNodeRunner: failed to emit answer telemetry:",g),t==null||t({type:"debug",content:"Warning: failed to emit answer telemetry"})}s==null||s(o.id,{type:"answerNode",message:"Answer response for: "+o.data.response,saved:!0,persistenceRequested:!!n&&!!e.outputCollector,persisted:!1,...e.runId?{runId:e.runId}:{}}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}function J(e,o,i,t,s){var n,f,d,c,g;let u=(s==null?void 0:s.callerTag)??"llmNodeRunner",p=(s==null?void 0:s.serializeNonStrings)??!1;return Pt(e,o,{context:i.context??{},results:i.results??{},nodes:((f=(n=i.flowData)==null?void 0:n.state)==null?void 0:f.nodes)??[],edges:((c=(d=i.flowData)==null?void 0:d.state)==null?void 0:c.edges)??[],currentNodeId:o.id,secrets:(g=s==null?void 0:s.sessionEnv)==null?void 0:g.secrets},{callerTag:u,serializeNonStrings:p,onError:a=>{t==null||t({type:`error:${u}`,content:a})}})}var at="[redacted]",so=8*1024;function xo(e){if(e==null)return{value:e,truncated:!1};let o=typeof e=="string"?e:JSON.stringify(e),i=new TextEncoder().encode(o);if(i.byteLength<=so){if(typeof e=="string")return{value:e,truncated:!1};try{return{value:JSON.parse(o),truncated:!1}}catch{return{value:o,truncated:!1}}}let t=i.slice(0,so);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(t),truncated:!0}}function To(e,o){return Q(e,o)}var dt=(e,o,i,t,s)=>J(e,o,i,s,{callerTag:"apiNodeRunner",serializeNonStrings:!0,sessionEnv:t});async function ct(e,o,i,t,s,u,p){var d,c,g,a,w,r;`${o.id}`,t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n=null,f=Date.now();try{console.log("[apiNodeRunner] context keys:",Object.keys(i.context||{})),console.log("[apiNodeRunner] results keys:",Object.keys(i.results||{}));let y=((d=o.data)==null?void 0:d.url)||"",l=dt(y,o,i,e,t);if(console.log("[apiNodeRunner] resolved url:",K(y)?G(l):l),!l){t==null||t({type:"error:apiNodeRunner",content:"Missing url"}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:"Missing url"}}),s==null||s(o.id,n);return}let m=(((c=o.data)==null?void 0:c.method)||"GET").toUpperCase();console.log("[apiNodeRunner] method:",m);let N=((g=o.data)==null?void 0:g.headers)||{},R={},h={};for(let U in N)if(Object.prototype.hasOwnProperty.call(N,U)){let j=String(N[U]??"");h[U]=K(j),R[U]=dt(j,o,i,e,t)}let T,k=!1;if(m!=="GET"&&m!=="HEAD"&&((a=o.data)==null?void 0:a.body)!==void 0){let U=typeof o.data.body=="string"?o.data.body:JSON.stringify(o.data.body);k=K(U),T=dt(U,o,i,e,t),!R["Content-Type"]&&!R["content-type"]&&(R["Content-Type"]="application/json")}let _={};for(let U in R)_[U]=h[U]?at:R[U];console.log("[apiNodeRunner] headers:",JSON.stringify(_)),console.log("[apiNodeRunner] body:",k?at:T),t==null||t({type:"info:apiNodeRunner:request",content:{nodeId:o.id,method:m,url:K(y)?G(l):l,headers:_,body:k?at:T}});let b=Number((w=o.data)==null?void 0:w.timeoutMs),C=new AbortController,F=Number.isFinite(b)&&b>0?setTimeout(()=>C.abort(),b):null,x;try{console.log("[apiNodeRunner] fetching..."),x=await fetch(l,{method:m,headers:R,body:T,signal:C.signal}),console.log("[apiNodeRunner] fetch returned status:",x.status)}finally{F&&clearTimeout(F)}let D=x.headers.get("content-type")||"";console.log("[apiNodeRunner] content-type:",D);let M=await Ct(x);console.log("[apiNodeRunner] payload preview:",typeof M=="string"?M.slice(0,200):JSON.stringify(M).slice(0,200)),n={ok:x.ok,status:x.status,data:M};let V=Date.now()-f;p==null||p({type:"api_call",payload:{nodeId:o.id,url:l,method:m,status:x.status,latencyMs:V}});let{value:I,truncated:q}=xo(M);t==null||t({type:"info:apiNodeRunner:response",content:{nodeId:o.id,ok:x.ok,status:x.status,latencyMs:V,data:I,truncated:q,outVars:To(o,n)}}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}catch(y){console.error("Error processing ApiNode:",y),t==null||t({type:"error:apiNodeRunner",content:`API node execution failed: ${y}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(y)}})}finally{console.log("[apiNodeRunner] final result:",(r=JSON.stringify(n))==null?void 0:r.slice(0,300)),s==null||s(o.id,n)}}var Ao="[redacted]",no=8*1024;function lt(e,o){if(typeof e=="string")return K(e)?typeof o=="string"&&/^https?:\/\//i.test(o)?G(o):Ao:o;if(e&&typeof e=="object"&&!Array.isArray(e)){let i={},t=o&&typeof o=="object"&&!Array.isArray(o)?o:{};for(let[s,u]of Object.entries(e))i[s]=lt(u,t[s]);return i}if(Array.isArray(e)){let i=Array.isArray(o)?o:[];return e.map((t,s)=>lt(t,i[s]))}return o}function _o(e){if(e==null)return{value:e,truncated:!1};let o=typeof e=="string"?e:JSON.stringify(e),i=new TextEncoder().encode(o);if(i.byteLength<=no){if(typeof e=="string")return{value:e,truncated:!1};try{return{value:JSON.parse(o),truncated:!1}}catch{return{value:o,truncated:!1}}}let t=i.slice(0,no);return{value:new TextDecoder("utf-8",{fatal:!1}).decode(t),truncated:!0}}function Fo(e,o){return Q(e,o)}var $o=(e,o,i,t,s)=>J(e,o,i,s,{callerTag:"toolNodeRunner",serializeNonStrings:!0,sessionEnv:t});function ot(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Io(e){let o=ot(e);if(Array.isArray(o.enum)&&o.enum.length>0)return o.enum.every(s=>typeof s=="string"||typeof s=="number")?"enum":"unsupported";switch(Array.isArray(o.type)?o.type.find(t=>typeof t=="string"&&t!=="null"):o.type){case"string":return"string";case"number":return"number";case"integer":return"integer";case"boolean":return"boolean";case"object":return"object";case"array":return"array";default:return"unsupported"}}function Oo(e,o){var p,n;let i={},t={},s=((p=e.data)==null?void 0:p.inputSchema)??o;if(s&&typeof s=="object"&&!Array.isArray(s)){t=ot(ot(s).properties);for(let[f,d]of Object.entries(t))i[f]=Io(d);return{types:i,properties:t}}let u=(n=e.data)==null?void 0:n.argTypes;if(u&&typeof u=="object"&&!Array.isArray(u))for(let[f,d]of Object.entries(u))typeof d=="string"&&(i[f]=d);return{types:i,properties:t}}function ko(e,o,i){if(e.trim()!==""){if(e==="null"&&o&&o!=="string"&&o!=="enum")return null;switch(o){case"string":return e;case"enum":{let t=ot(i).enum;if(Array.isArray(t)){let s=t.find(u=>String(u)===e);if(s!==void 0)return s}return e}case"number":{let t=Number(e);return Number.isFinite(t)?t:e}case"integer":{let t=Number.parseInt(e,10);return Number.isFinite(t)?t:e}case"boolean":return e==="true"?!0:e==="false"?!1:e;case"object":case"array":case"unsupported":try{return JSON.parse(e)}catch{return e}default:return e}}}function Do(e){return e===void 0||typeof e=="string"&&e.trim()===""}function ut(e,o,i,t,s,u,p){if(typeof e=="string"){let n=e.includes("{{")?$o(e,o,i,t,s):e;return ko(n,u,p)}if(e&&typeof e=="object"&&!Array.isArray(e)){let n={};for(let[f,d]of Object.entries(e))n[f]=ut(d,o,i,t,s);return n}return Array.isArray(e)?e.map(n=>ut(n,o,i,t,s)):e}function Mo(e,o,i,t,s,u){let p={};for(let[n,f]of Object.entries(e)){let d=ut(f,o,i,t,s,u.types[n],u.properties[n]);Do(d)||(p[n]=d)}return p}async function bo(e){if(e.toolDefs)return e.toolDefs;if(!e.env)return e.toolDefs={},e.toolDefs;let o=await v(e.env),i={};for(let t of o)t!=null&&t.id&&(i[t.id]=t);return e.toolDefs=i,i}function Co(e){var o,i,t;return((o=e.data)==null?void 0:o.source)==="catalog"?"catalog":((i=e.data)==null?void 0:i.source)==="composio"?"composio":(((t=e.data)==null?void 0:t.source)==="http","http")}function Po(e,o,i){let t=st(e.execution);if(t.authMode==="manual"){let s=jt(t,e.id);if(!s)throw new Error(`Composio tool '${e.name}' is missing connection scope`);return Ut(s)}return Lt(o,i,{allowChatIdFallback:!0})}async function pt(e,o,i,t,s,u,p){var c,g,a,w,r,y;`${o.id}`,t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n={ok:!1,data:null,error:null},f=Date.now(),d=Co(o);try{if(d==="catalog")throw new Error("This Tool node still uses a curated catalog connector. Reconfigure it to a tenant HTTP or connector tool.");let l=(c=o.data)!=null&&c.args&&typeof o.data.args=="object"&&!Array.isArray(o.data.args)?o.data.args:{},m=typeof((g=o.data)==null?void 0:g.toolId)=="string"?o.data.toolId.trim():"";if(!m)throw new Error("Tool nodes require toolId");let R=(await bo(e))[m];if(!R)throw new Error(`Tool ${m} not found`);let h="";if(d==="composio"){if(R.kind!=="composio")throw new Error(`Tool ${m} is not a connector tool`);if(h=typeof((a=o.data)==null?void 0:a.toolSlug)=="string"?o.data.toolSlug.trim():"",!h)throw new Error("Connector tool nodes require toolSlug");let F=st(R.execution);if(!Vt(F.tools).includes(h))throw new Error(`Tool slug ${h} is not enabled on connector ${m}`)}else if(R.kind!=="http")throw new Error(`Tool ${m} is not an HTTP tool`);let T=Oo(o,d==="http"?R.inputSchema:void 0),k=Mo(l,o,i,e,t,T);if(t==null||t({type:"info:toolNodeRunner:request",content:{nodeId:o.id,source:d,toolSlug:(w=o.data)==null?void 0:w.toolSlug,toolId:(r=o.data)==null?void 0:r.toolId,args:lt(l,k)}}),d==="composio"){let F=typeof((y=o.data)==null?void 0:y.toolVersion)=="string"?o.data.toolVersion.trim():"",x=await Wt(e,{toolSlug:h,connectionScope:Po(R,e,i),toolVersion:F||null,arguments:k});n={ok:x.ok,data:x.ok?x.data:null,error:x.ok?null:x.error??"Tool execution failed"}}else{let F=tt(R,e,i,t);if(!F.execute)throw new Error(`Tool ${m} is missing an execute handler`);let x=await F.execute(k,{}),D=x&&typeof x=="object"&&"error"in x&&x.error?String(x.error):null;n={ok:!D,data:x,error:D}}let _=Date.now()-f;p==null||p({type:"tool_call",payload:{nodeId:o.id,url:d==="composio"?`composio:${h}`:`tool:${m}`,method:"EXECUTE",status:n.ok?200:502,latencyMs:_}});let{value:b,truncated:C}=_o(n.data);t==null||t({type:"info:toolNodeRunner:response",content:{nodeId:o.id,ok:n.ok,latencyMs:_,data:b,truncated:C,error:n.error,outVars:Fo(o,n)}}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:n.ok?"success":"error",error:n.error??void 0}})}catch(l){let m=l instanceof Error?l.message:String(l);n={ok:!1,data:null,error:m},t==null||t({type:"error:toolNodeRunner",content:`Tool node execution failed: ${m}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:m}})}finally{s==null||s(o.id,n)}}var jo=1440*60*1e3,ao=8*1024;function co(e){if(e==null)return{value:e,truncated:!1};let o=new TextEncoder().encode(JSON.stringify(e));return o.byteLength<=ao?{value:e,truncated:!1}:{value:new TextDecoder().decode(o.slice(0,ao)),truncated:!0}}async function ft(e,o,i,t,s,u,p){var g,a,w;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n={ok:!1,data:null,error:null},f=Date.now(),d="crawl:unknown",c=r=>{let y=JSON.stringify(r);for(let l of Object.values(e.secrets??{}))l&&(y=y.split(JSON.stringify(l).slice(1,-1)).join("[redacted]"),y=y.split(encodeURIComponent(l)).join("[redacted]"));return JSON.parse(y)};try{if(!Jt("crawlNode",(g=i.flowData)==null?void 0:g.tenant))throw new Error("Crawl node no disponible para este tenant");let r=e.env;if(!(r!=null&&r.CF_ACCOUNT_ID)||!(r!=null&&r.CF_BROWSER_RUN_TOKEN))throw new Error("Crawl no configurado: faltan CF_ACCOUNT_ID / CF_BROWSER_RUN_TOKEN");let y=J(o.data.url,o,i,t,{callerTag:"crawlNodeRunner",serializeNonStrings:!0,sessionEnv:e}),l=Xt(o.data,y),m=K(o.data.url);d=`crawl:${c(new URL(y).host)}`;let N=`crawl:pending:${await qt(l)}`,R=(a=e.ctx)==null?void 0:a.storage,h=await(R==null?void 0:R.get(N)),T=h&&typeof h.jobId=="string"&&h.jobId&&Number.isFinite(h.createdAt)&&Date.now()-h.createdAt>=0&&Date.now()-h.createdAt<jo;h&&!T&&await(R==null?void 0:R.delete(N)),t==null||t({type:"info:crawlNodeRunner:request",content:{nodeId:o.id,url:m?c(G(y)):y,resumeJobId:T?h.jobId:void 0}}),{result:n}=await Kt({accountId:r.CF_ACCOUNT_ID,apiToken:r.CF_BROWSER_RUN_TOKEN},o.data,{url:y,...T?{resumeJobId:h.jobId}:{}}),n.error==="timeout"&&((w=n.data)!=null&&w.jobId)?await(R==null?void 0:R.put(N,{jobId:n.data.jobId,createdAt:T?h.createdAt:Date.now()})):n.data&&n.data.status!=="running"&&await(R==null?void 0:R.delete(N))}catch(r){n={ok:!1,data:null,error:r instanceof Error?r.message:String(r)},t==null||t({type:"error:crawlNodeRunner",content:c(`Crawl node execution failed: ${n.error}`)})}finally{let r=Date.now()-f;p==null||p({type:"tool_call",payload:{nodeId:o.id,url:d,method:"EXECUTE",status:n.ok?200:502,latencyMs:r}});let y=co(c(n.data));t==null||t({type:"info:crawlNodeRunner:response",content:{nodeId:o.id,ok:n.ok,latencyMs:r,data:y.value,truncated:y.truncated,error:c(n.error),outVars:co(c(Q(o,n))).value}}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:n.ok?"success":"error",error:c(n.error)??void 0}}),s==null||s(o.id,n)}}function lo(){let e={};return{add(o,i){e[o]=i},hasOutputs(){return Object.keys(e).length>0},answerNodeIds(){return Object.keys(e)},snapshotData(){let o=Object.entries(e);return o.length===1?o[0][1]:Object.fromEntries(o)}}}function Uo(e){return!!(e!=null&&e.HX_ORA_URL)&&!!(e!=null&&e.HX_API_KEY)}async function Ve(e,o){if(!Uo(e))throw new Error("Structured outputs require HX_ORA_URL and HX_API_KEY");let i=await fetch(`${e.HX_ORA_URL}/internal/outputs/${encodeURIComponent(o.flowId)}/${encodeURIComponent(o.sessionId)}`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:e.HX_API_KEY},body:JSON.stringify({runId:o.runId,createdAt:o.createdAt,data:o.data,answerNodeIds:o.answerNodeIds})});if(!i.ok){let t=await i.text().catch(()=>"");throw new Error(`Structured output persistence failed with ${i.status}${t?`: ${t}`:""}`)}}var uo=3,po=10,Vo=new Set(["agent:start","agent:complete","agent:telemetry"]);function Lo(e){let o=e.executedNodes||[];return o.length===0?"(none)":o.map(i=>i.label?`${i.id} (${i.label})`:i.id).join(" \u2192 ")}function Wo(e){let o=e.executedNodes||[];return o[o.length-1]}function X(e,o,i){throw e==null||e({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:i.message}}),i}function Ho(e,o){var u,p,n,f,d,c,g;let i=Array.isArray((u=e.data)==null?void 0:u.inputs)?e.data.inputs:[],t=((n=(p=o.flowData)==null?void 0:p.state)==null?void 0:n.nodes)||[],s={};for(let a of i){let w=(f=a.key)==null?void 0:f.trim();if(!w)continue;let r=(d=a.from)==null?void 0:d.trim();if(!r){if(a.default===void 0)continue;s[w]=a.default;continue}let y=W(r,{context:o.context||{},results:o.results||{},nodes:t,edges:((g=(c=o.flowData)==null?void 0:c.state)==null?void 0:g.edges)??[],currentNodeId:e.id}),l=y.value;if(y.missing||l===void 0||l===null){if(a.default===void 0)throw new P(y.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Worker node ${e.id} could not resolve input "${r}"`);l=a.default}s[w]=l}return s}async function mt(e,o,i,t,s,u,p){var C,F,x,D,M,V;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n=typeof((C=o.data)==null?void 0:C.flowId)=="string"?o.data.flowId.trim():"";n||X(t,o,new Error(`Worker node ${o.id} is missing flowId`));let f=(F=i.flowData)==null?void 0:F.flowId,d=e.workerStack??(f?[f]:[]);d.includes(n)&&X(t,o,new Error(`Worker node ${o.id} cannot call ${n}: cycle detected (${[...d,n].join(" \u2192 ")})`)),d.length>=uo&&X(t,o,new Error(`Worker node ${o.id} exceeded max nesting depth (${uo})`));let c=e.workerCalls??{count:0};e.workerCalls=c,c.count>=po&&X(t,o,new Error(`Worker node ${o.id} exceeded max worker calls per run (${po})`)),c.count+=1;let g;try{g=Ho(o,i)}catch(I){X(t,o,I instanceof Error?I:new Error(String(I)));return}let a=e.env;a||X(t,o,new Error(`Worker node ${o.id} is missing runtime env`));let w,r;try{let I=await At(n,a);r=(x=I==null?void 0:I.metadata)==null?void 0:x.tenant,w=await _t(n,a)}catch(I){X(t,o,new Error(`Worker node ${o.id} could not load worker ${n}: ${I instanceof Error?I.message:String(I)}`))}let y=(D=i.flowData)==null?void 0:D.tenant;(!r||r!==y)&&X(t,o,new Error(`Worker ${n} belongs to a different tenant`));let l=lo(),m={flowData:{...w,tenant:r,flowId:n,chatId:((M=i.flowData)==null?void 0:M.chatId)||""},executedNodes:[],context:{},results:{}},N={env:a,ctx:e.ctx,secrets:e.secrets,userAuth:e.userAuth,user:e.user,toolDefs:e.toolDefs,composioSessions:e.composioSessions,skillRefCache:e.skillRefCache,publicOrigin:e.publicOrigin,getOraModel:e.getOraModel,runId:e.runId,shouldStop:e.shouldStop,workerCalls:c,conn:void 0,getMessages:async()=>[],setMessages:async()=>{},agentMemory:"",outputCollector:l,workerStack:[...d,n]},R,h={onChangeState:()=>{},onServerEvent:I=>{var q;Vo.has(I.type)||t==null||t({type:"worker:node",content:{workerNodeId:o.id,childNodeId:(q=I.content)==null?void 0:q.nodeId,event:I}})},onTelemetry:I=>p==null?void 0:p(I),onError:I=>{R=I},shouldStop:e.shouldStop},{startEngine:T,FlowExecutionStoppedError:k}=await import("./FlowEngine-H3QNWZVB.js"),_=await T(N,m,h)({text:"",inputs:g});if((_.status==="stopped"||await((V=e.shouldStop)==null?void 0:V.call(e)))&&X(t,o,new k),_.status!=="completed"){let I=Wo(m),q=Lo(m),U=_.error||R||"unknown error",j=I?` at node ${I.label?`${I.id} (${I.label})`:I.id}`:"";X(t,o,new Error(`Worker ${n} failed${j}: ${U}. Path: ${q}`))}l.hasOutputs()||X(t,o,new Error(`El worker ${n} complet\xF3 sin output estructurado. Agreg\xE1 un mapeo de salida en su nodo Answer.`));let b=(m.executedNodes||[]).map(I=>I.id);s==null||s(o.id,{ok:!0,data:l.snapshotData(),error:null,executed:b}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}import{generateObject as Zo}from"ai";import{z as fo}from"zod";import{openai as Jo}from"@ai-sdk/openai";import{extractReasoningMiddleware as Xo,wrapLanguageModel as qo}from"ai";import{createWorkersAI as Ko}from"workers-ai-provider";import{xai as Bo}from"@ai-sdk/xai";import{anthropic as zo}from"@ai-sdk/anthropic";import{createOpenRouter as Go}from"@openrouter/ai-sdk-provider";var gt={};function yt(e){if(e!=null){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return}}}function Yo(e){return{...e,defaultParams:yt(e.defaultParams)??e.defaultParams,capabilities:yt(e.capabilities)??e.capabilities,price:yt(e.price)??e.price}}async function et(e,o,i){var c,g;if(!(o!=null&&o.getOraModel))throw new Error("resolveModelById requires a sessionEnv with getOraModel capable of fetching models dynamically.");let t=await o.getOraModel(e);if(!t)return;let s=Yo(t),u=((c=s.capabilities)==null?void 0:c.params)??Bt(s),{effectiveParams:p,adjustments:n}=Gt(s.defaultParams,i,u),f;if(gt[s.provider])f=await gt[s.provider](s,o,i);else if(s.provider==="openai")f=Jo(s.providerModel);else if(s.provider==="xai")f=Bo(s.providerModel);else if(s.provider==="anthropic")f=zo(s.providerModel);else if(s.provider==="openrouter")f=Go()(s.providerModel);else if(s.provider==="workersai"||s.provider==="cloudflare"){if(!((g=o==null?void 0:o.env)!=null&&g.AI))throw new Error("Workers AI provider requires sessionEnv.env.AI binding");f=Ko({binding:o.env.AI})(s.providerModel)}else f={provider:s.provider,providerModel:s.providerModel};let d=Zt(s);return d.kind==="tag"&&f&&typeof f=="object"&&"specificationVersion"in f&&(f=qo({model:f,middleware:Xo({tagName:d.tagName??"think",startWithReasoning:d.startWithReasoning??!1})})),{provider:s.provider,modelHandle:f,entry:s,effectiveParams:p,paramAdjustments:n.length>0?n:void 0,reasoning:d}}function Ee(e,o){gt[e]=o}async function wt(e,o,i,t,s,u,p){var r,y,l,m,N,R,h;t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n=String(((r=o==null?void 0:o.data)==null?void 0:r.input_variable)||"user_input").trim(),f;try{let T=W(n,{context:i.context??{},results:i.results??{},nodes:((l=(y=i.flowData)==null?void 0:y.state)==null?void 0:l.nodes)??[],edges:((N=(m=i.flowData)==null?void 0:m.state)==null?void 0:N.edges)??[],currentNodeId:o.id});if(T.missing)throw new Error(`Classifier input "${n}" did not produce a value`);f=T.value}catch(T){throw t==null||t({type:"error:classifier",content:String(T)}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(T)}}),T}let d=Array.isArray((R=o==null?void 0:o.data)==null?void 0:R.items)?o.data.items:[];if(d.length===0){t==null||t({type:"error:classifier",content:"ClassifierNode has no items to classify."});return}let c=String((h=d[d.length-1])==null?void 0:h.id);if(!f||String(f).trim().length===0){t==null||t({type:"warning:classifier",content:"No input for classification \u2014 falling back to last item."}),s==null||s(o.id,{classification:c}),i.context=i.context||{},i.context.classified_id=c,u==null||u(i);return}let a=`You are a precise classifier. Given a short user message, identify the category that best matches from the provided list.
2
- If the message is ambiguous or none clearly matches, choose the LAST category in the list.
3
-
4
- Categories:
5
- ${d.map(T=>{let k=T.keywords??T["keywords/topics"]??"",_=Array.isArray(k)?k.join(", "):String(k||"");return`- id: ${T.id}
6
- label: ${T.label}
7
- keywords/topics: ${_}`}).join(`
8
- `)}
9
- `,w=`User message:
10
- """${String(f).trim()}"""
11
-
12
- Select the best matching category id.`;try{let T=Date.now(),k=d.map(V=>String(V.id)),_="gpt_4_1_mini",b=await et(_,e);if(!b)throw new Error(`Model '${_}' not found in registry`);let{modelHandle:C,effectiveParams:F}=b,x=await Zo({model:C,messages:[{role:"system",content:a},{role:"user",content:w}],schema:fo.object({classification:fo.enum(k).describe("The id of the best matching category")}),temperature:F.temperature??0}),D=Date.now()-T,M=x.object.classification;p==null||p({type:"class_telemetry",payload:{nodeId:o.id,totalLatency:D,model:x.response.modelId,usage:x.usage,options:k}}),p==null||p({type:"class_result",payload:{result:x}}),s==null||s(o.id,{classification:M}),i.context=i.context||{},i.context.classified_id=M,u==null||u(i),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}catch(T){throw t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(T)}}),T}}import{stepCountIs as vo,streamText as te}from"ai";import{nanoid as oe}from"nanoid";import"zod";function mo(e,o){var n,f,d,c,g;let i=((n=e.data)==null?void 0:n.attachments)??[];if(!Array.isArray(i))throw new P("INVALID_EXPRESSION",`Node ${e.id} attachments must be an array`);let t=((d=(f=o.flowData)==null?void 0:f.state)==null?void 0:d.nodes)??[],s=((g=(c=o.flowData)==null?void 0:c.state)==null?void 0:g.edges)??[],u=Z(t,s,e.id),p="";for(let a of i){if(typeof a!="string")throw new P("INVALID_EXPRESSION",`Node ${e.id} has an invalid attachment reference`);let w=u.find(y=>y.ref===a);if(!w)throw new P("OUT_OF_SCOPE",`Attachment "${a}" is not in this node's connection scope`);if(w.type!=="file"&&w.type!=="image")throw new P("UNKNOWN_OUTPUT",`Attachment "${a}" is not an image or file output`);if(w.type!=="file")continue;let r=W(a,{context:o.context??{},results:o.results??{},nodes:t,edges:s,currentNodeId:e.id});if(r.missing)throw new P(r.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Attachment "${a}" did not produce a value`);if(typeof r.value!="string")throw new P("PATH_NOT_FOUND",`Attachment "${a}" must resolve to file text`);r.value.trim()&&(p+=(p?`
13
-
14
- `:"")+r.value)}return p}function Qo(e,o){var s,u,p,n,f;let i=((s=e.data)==null?void 0:s.attachments)??[];if(!Array.isArray(i))throw new P("INVALID_EXPRESSION",`Node ${e.id} attachments must be an array`);let t=Z(((p=(u=o.flowData)==null?void 0:u.state)==null?void 0:p.nodes)??[],((f=(n=o.flowData)==null?void 0:n.state)==null?void 0:f.edges)??[],e.id);return i.map(d=>{if(typeof d!="string")throw new P("INVALID_EXPRESSION",`Node ${e.id} has an invalid attachment reference`);let c=t.find(g=>g.ref===d);if(!c)throw new P("OUT_OF_SCOPE",`Attachment "${d}" is not in this node's connection scope`);if(c.type!=="image"&&c.type!=="file")throw new P("UNKNOWN_OUTPUT",`Attachment "${d}" is not a binary output`);return c.type==="image"?d:null}).filter(d=>d!==null)}function yo(e,o){var s,u,p,n;let i=[],t={context:o.context??{},results:o.results??{},nodes:((u=(s=o.flowData)==null?void 0:s.state)==null?void 0:u.nodes)??[],edges:((n=(p=o.flowData)==null?void 0:p.state)==null?void 0:n.edges)??[],currentNodeId:e.id};for(let f of Qo(e,o)){let d=W(f,t);if(d.missing)throw new P(d.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",`Attachment "${f}" did not produce a value`);if(!Array.isArray(d.value))throw new P("PATH_NOT_FOUND",`Attachment "${f}" must resolve to an image array`);i.push(...d.value)}return i}var z=(e,o,i)=>{e.send(o+"::"+i)};var Eo=E({"../tools/composioDirectTool.ts":()=>import("./composioDirectTool-XOKIM5FJ.js"),"../tools/composioTool.ts":()=>import("./composioTool-C4KZMI4Q.js"),"../tools/convertTempMessure.ts":()=>import("./convertTempMessure-5CAGRLBY.js"),"../tools/httpTool.ts":()=>import("./httpTool-RT5CTG4O.js"),"../tools/skillTool.ts":()=>import("./skillTool-JEAL3G33.js"),"../tools/tempTool.ts":()=>import("./tempTool-2RXAF56M.js"),"../tools/twitter.ts":()=>import("./twitter-OMDEG7T2.js"),"../tools/vectorize.ts":()=>import("./vectorize-CDB26DMD.js")});var So=E({});async function ee(e,o,i,t){var g;let s=Array.isArray((g=i==null?void 0:i.data)==null?void 0:g.tools)?i.data.tools:[];if(s.length===0)return{};let u={},p=a=>{var R,h;let w=typeof(a==null?void 0:a.description)=="string"?a.description:"",r=a==null?void 0:a.inputSchema,y;try{let T=(r==null?void 0:r.shape)??(typeof((R=r==null?void 0:r._def)==null?void 0:R.shape)=="function"?r._def.shape():(h=r==null?void 0:r._def)==null?void 0:h.shape);T&&typeof T=="object"&&(y=T)}catch{}let l=y?Object.keys(y):[],m=w?`description="${w.length>120?w.slice(0,120)+"\u2026":w}"`:"description=(none)",N=l.length?`inputSchema={${l.join(", ")}}`:"inputSchema=(none)";return`${m} ${N}`},n=(()=>{let a=[],w=[],r=[],y=[];for(let m=0;m<s.length;m++){let N=s[m];!N||typeof N!="object"||typeof N.id!="string"?y.push(m):N.kind==="builtin"?a.push(N.id):N.kind==="skill"?r.push(N.id):N.kind==="http"||N.kind==="mcp"||N.kind==="composio"?w.push(N.id):y.push(m)}let l=[];return a.length&&l.push(`builtin[${a.join(", ")}]`),w.length&&l.push(`custom[${w.join(", ")}]`),r.length&&l.push(`skill[${r.join(", ")}]`),y.length&&l.push(`invalid@[${y.join(", ")}]`),l.join(" ")||"(none)"})();console.log(`[tools] node ${i.id} requested (${s.length}): ${n}`);let f=!1,d=async()=>{if(f&&e.toolDefs)return e.toolDefs;if(!e.env)return e.toolDefs=e.toolDefs||{},f=!0,e.toolDefs;try{let a=await v(e.env),w={};for(let r of a)r&&r.id&&(w[r.id]=r);e.toolDefs=w}catch(a){t==null||t({type:"error:llmNodeRunner",content:`Failed to load custom tool defs: ${String(a)}`}),e.toolDefs=e.toolDefs||{}}return f=!0,e.toolDefs},c=[];for(let a=0;a<s.length;a++){let w=s[a];if(!w||typeof w!="object"||typeof w.id!="string"||w.kind!=="builtin"&&w.kind!=="http"&&w.kind!=="mcp"&&w.kind!=="composio"&&w.kind!=="skill"){t==null||t({type:"error:llmNodeRunner",content:`Invalid tool descriptor at index ${a}: expected { kind: 'http'|'mcp'|'composio'|'builtin'|'skill', id: string, params?: any }`});continue}let r=w;if(r.kind!=="builtin"){let l=(await d())[r.id];if(!l){console.error(`[tools] \u2717 custom '${r.id}': not found for tenant`),t==null||t({type:"error:llmNodeRunner",content:`custom tool '${r.id}' not found for this tenant`});continue}if(r.kind==="composio"){try{let N=await to(l,e,o,t),R=Object.keys(N);for(let[h,T]of Object.entries(N))u[h]=T;console.log(`[tools] \u2713 composio '${r.id}' \u2192 ${R.length} tool(s)`)}catch(N){console.error(`[tools] \u2717 composio '${r.id}': ${String(N)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading composio tool '${r.id}': ${String(N)}`})}continue}if(r.kind==="skill"){if(l.kind!=="skill"){console.error(`[tools] \u2717 skill '${r.id}': row is of kind '${l.kind}', not 'skill'`),t==null||t({type:"error:llmNodeRunner",content:`tool '${r.id}' is not a skill`});continue}let N=l.name;if(u[N]){t==null||t({type:"warn:llmNodeRunner",content:`tool name collision on '${N}' \u2014 builtin/other already registered, skipping skill '${r.id}'`});continue}try{u[N]=oo(l,e,o,t),c.push(l);let R=typeof l.execution=="string"?JSON.parse(l.execution):l.execution||{},h=Array.isArray(R.references)?R.references.map(T=>T==null?void 0:T.name):[];console.log(`[tools] \u2713 skill '${r.id}' \u2192 '${N}' (refs: ${h.join(", ")||"none"})`),t==null||t({type:"info:skill:registered",content:{skill:N,refCount:h.length,refs:h}})}catch(R){console.error(`[tools] \u2717 skill '${r.id}': ${String(R)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading skill tool '${r.id}': ${String(R)}`})}continue}let m=l.name;if(u[m]){t==null||t({type:"warn:llmNodeRunner",content:`tool name collision on '${m}' \u2014 builtin already registered, skipping custom tool '${r.id}'`});continue}try{let N=tt(l,e,o,t);u[m]=N,console.log(`[tools] \u2713 custom '${r.id}' \u2192 '${m}'`),console.log(`[tools] ${p(u[m])}`)}catch(N){console.error(`[tools] \u2717 custom '${r.id}': ${String(N)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading custom tool '${r.id}': ${String(N)}`})}continue}if(!vt[r.id]){console.error(`[tools] \u2717 builtin '${r.id}': not in registry`),t==null||t({type:"error:llmNodeRunner",content:`Tool '${r.id}' not found in registry`});continue}try{let y;try{y=await Eo(`../tools/${r.id}.ts`)}catch{y=await So(`../tools/${r.id}.js`)}let l;if(y[r.id])l=y[r.id];else if(y.default)l=y.default;else if(y.create)l=y.create;else{let _=Object.values(y);_.length>0&&(l=_[0])}if(!l){t==null||t({type:"error:llmNodeRunner",content:`No factory export found for tool '${r.id}'`});continue}let m,N,R={};if(r.params&&typeof r.params=="object"){if(typeof r.params.description=="string"?m=r.params.description:r.params.description!==void 0&&(t==null||t({type:"error:llmNodeRunner",content:`Invalid description for tool '${r.id}' \u2014 must be a string`})),r.params.inputSchema!==void 0){let _=r.params.inputSchema;typeof _=="object"&&(typeof _.safeParse=="function"||_._def)?N=_:typeof _=="object"&&_!==null&&_.type==="object"&&_.properties?(N=Ht(_),N||t==null||t({type:"error:llmNodeRunner",content:`Invalid inputSchema for tool '${r.id}' \u2014 must be a Zod schema or JSON Schema object`})):t==null||t({type:"error:llmNodeRunner",content:`Invalid inputSchema for tool '${r.id}' \u2014 must be a Zod schema or JSON Schema object`})}r.params.defaults!==void 0?typeof r.params.defaults=="object"&&r.params.defaults!==null&&!Array.isArray(r.params.defaults)?R=r.params.defaults:(t==null||t({type:"error:llmNodeRunner",content:`Invalid defaults for tool '${r.id}' \u2014 must be an object`}),R={}):r.params.source!==void 0||r.params.target!==void 0?(t==null||t({type:"error:llmNodeRunner",content:`Invalid params for tool '${r.id}' \u2014 legacy top-level source/target not supported; use params.defaults instead`}),R={}):R={}}let h=l(e,o,R,t);m&&h&&typeof h=="object"&&(h.description=m),N&&h&&typeof h=="object"&&(h.inputSchema=N),u[r.id]=h;let T=[];m&&T.push("description"),N&&T.push("inputSchema"),Object.keys(R).length&&T.push(`defaults(${Object.keys(R).join(",")})`);let k=T.length?` [overrides: ${T.join(", ")}]`:"";console.log(`[tools] \u2713 builtin '${r.id}'${k}`),console.log(`[tools] ${p(h)}`)}catch(y){console.error(`[tools] \u2717 builtin '${r.id}': ${String(y)}`),t==null||t({type:"error:llmNodeRunner",content:`Error loading tool '${r.id}': ${String(y)}`});continue}}if(c.length>0)if(u.readSkillRef)t==null||t({type:"warn:llmNodeRunner",content:"tool name collision on 'readSkillRef' \u2014 builtin/other already registered, skipping readSkillRef tool"});else try{u.readSkillRef=eo(e,c,o,t),console.log(`[tools] \u2713 registered readSkillRef tool for ${c.length} skill(s)`),t==null||t({type:"info:skill:readSkillRefRegistered",content:{skills:c.map(a=>a.name)}})}catch(a){console.error(`[tools] \u2717 failed to load readSkillRef tool: ${String(a)}`)}return u}async function ht(e,o,i,t,s,u,p){var _,b,C,F;`${o.id}`,t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n=!1;try{let x=(_=i.flowData)==null?void 0:_.state;if(x&&x.edges&&x.nodes){let D=x.edges.filter(M=>M.source===o.id);if(D.length>0){let M=x.nodes.find(V=>V.id===D[0].target);M&&M.type==="answerNode"&&(n=!0)}}}catch(x){console.error("Error determining next node for streaming:",x)}let f=J(o.data.template,o,i,t,{sessionEnv:e});(!f||!f.trim())&&(f="Answer straight forward to the user, dont offer any other option to continue");let d=f,c=J(o.data.user_template||"",o,i,t,{sessionEnv:e}),g=x=>x&&Object.fromEntries(Object.keys(x).map(D=>[D,"[redacted]"])),a=e!=null&&e.secrets||e!=null&&e.userAuth?{...e,secrets:g(e.secrets),userAuth:g(e.userAuth)}:e,w=J(o.data.template,o,i,void 0,{sessionEnv:a})||d,r=J(o.data.user_template||"",o,i,void 0,{sessionEnv:a});t==null||t({type:`info:llmNodeRunner:${o.id}`,content:w}),t==null||t({type:`info:llmNodeRunner:${o.id}`,content:r});let y=(b=o==null?void 0:o.data)==null?void 0:b.window_size,l=Number(y);(!Number.isInteger(l)||l<=0)&&(l=5);let m=yo(o,i),N=mo(o,i);t==null||t({type:"info:llmNodeRunner:attachments",content:{nodeId:o.id,refs:Array.isArray((C=o.data)==null?void 0:C.attachments)?o.data.attachments:[],images:m.length,documents:N?1:0}});let h=(await((F=e.getMessages)==null?void 0:F.call(e))??[]).slice(-l),T=h.filter(x=>x&&typeof x.role=="string"&&typeof x.content=="string");T.length!==h.length&&console.warn(`Filtered ${h.length-T.length} invalid messages from history`);let k=se(T,c,m,N);await ie(f,k,e.conn,t,o,n,s,i,u,e,p)}async function ie(e,o,i,t,s,u,p,n,f,d,c){var a;let g=Date.now();if(!((a=d.env)!=null&&a.AI))throw new Error("AI binding is required for LLM node");return new Promise(async(w,r)=>{var D,M,V,I,q,U;let y,l={},m,N="none",R=!1,h,T=!1,k=!1,_=0,b=0,C=(D=s==null?void 0:s.data)==null?void 0:D.sendReasoning,F=C!==!1;try{let j=(M=s==null?void 0:s.data)==null?void 0:M.model,Y=Array.isArray(j)?j[0]:j||"gpt_5_nano",A=zt(s==null?void 0:s.data),O=await et(Y,d,A);if(!O)throw new Error(`Model '${Y}' not found in registry`);y=O.modelHandle,l=O.effectiveParams||{},N=O.reasoning.kind;let $=Et(O.reasoning,(V=s==null?void 0:s.data)==null?void 0:V.reasoningEffort);R=F&&Qt(O.reasoning);let H=typeof((I=s==null?void 0:s.data)==null?void 0:I.reasoningMaxTokens)=="number"?s.data.reasoningMaxTokens:void 0;m=St(O.provider,{effort:$,exposeReasoning:R,maxTokens:H}),$&&(t==null||t({type:"info:llmNodeRunner:reasoningEffort",content:$})),console.log(`[reasoning] ${JSON.stringify({model:Y,provider:O.provider,capability:O.reasoning,requestedEffort:((q=s==null?void 0:s.data)==null?void 0:q.reasoningEffort)??null,resolvedEffort:$??null,sendReasoning:F,exposeReasoning:R,providerOptions:m??null},null,2)}`);for(let L of O.paramAdjustments??[])t==null||t({type:"warn:llmNodeRunner",content:L});t==null||t({type:"info:llmNodeRunner:model",content:Y}),t==null||t({type:"info:llmNodeRunner:generationParams",content:{...(U=s==null?void 0:s.data)!=null&&U.generationPreset?{preset:s.data.generationPreset}:{},...l,...N!=="none"?{reasoning:N,configuredSendReasoning:C,sendReasoning:F,exposeReasoning:R,...$?{effort:$}:{}}:{}}})}catch(j){throw t==null||t({type:"error:llmNodeRunner",content:`Model error: ${String(j)}`}),j}let x=await ee(d,n,s,t);console.log(`[tools] node ${s.id} loaded ${Object.keys(x).length}: ${Object.keys(x).join(", ")||"(none)"}`),t==null||t({type:"info:llmNodeRunner:toolsLoaded",content:{nodeId:s.id,tools:Object.keys(x)}});try{let j=te({model:y,system:e,messages:o,stopWhen:(()=>{var L;let O=!!x.readSkillRef?10:5,$=Number(((L=s.data)==null?void 0:L.max_steps)??O),H=Number.isFinite($)?Math.max(1,Math.min(30,$)):O;return vo(H)})(),...Yt(l),...m?{providerOptions:m}:{},tools:x,onFinish:async A=>{var xt,Tt;let O=A.text||"",$=A.reasoningText??((xt=A.reasoning)==null?void 0:xt.text)??"";if(console.log(`[reasoning] done: deltas=${_} chars=${b} result.reasoningText=${$.length} finishReason=${A.finishReason??"n/a"} reasoningTokens=${((Tt=A.usage)==null?void 0:Tt.reasoningTokens)??"n/a"}`),F&&R&&!T&&$&&i){T=!0;try{z(i,B.SERVER_REASONING_STREAM,$)}catch(ho){console.warn("Failed to send finished reasoning over connection",ho)}}let H={id:oe(),role:"assistant",type:"text",content:O,ts:Date.now()};u&&(d.setMessages?await d.setMessages(H):t==null||t({type:"error:llmNodeRunner",content:"setMessages callback missing"})),i&&F&&T&&!k&&(k=!0,z(i,B.SERVER_REASONING_STREAM_COMPLETE,JSON.stringify({}))),u&&i&&z(i,B.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({})),p==null||p((s==null?void 0:s.id)||"llm_result",O),t==null||t({type:"info:llmNodeRunner:onFinish",content:JSON.stringify(A)});let L=Date.now()-g,wo=h?h-g:void 0;c==null||c({type:"llm_telemetry",payload:{nodeId:s.id,totalLatency:L,timeToFirstToken:wo,model:A.response.modelId,usage:A.usage}}),c==null||c({type:"llm_result",payload:{result:A}})},onStepFinish:async A=>{let O=($,H=200)=>{let L=typeof $=="string"?$:JSON.stringify($);return L?L.length>H?`${L.slice(0,H)}\u2026(+${L.length-H})`:L:""};if(A.toolCalls&&A.toolCalls.length>0){for(let $ of A.toolCalls)console.log(`[tools] \u2192 ${$.toolName}(${O($.args??$.input)})`);t==null||t({type:`info:llmNodeRunner:toolCalls:${s.id}`,content:JSON.stringify(A.toolCalls)})}if(A.toolResults&&A.toolResults.length>0){for(let $ of A.toolResults)console.log(`[tools] \u2190 ${$.toolName} \u2192 ${O($.result??$.output)}`);t==null||t({type:`info:llmNodeRunner:toolResults:${s.id}`,content:JSON.stringify(A.toolResults)})}},experimental_onToolCallStart:A=>{var O;t==null||t({type:"tool:execution",content:{nodeId:s.id,toolName:(O=A==null?void 0:A.toolCall)==null?void 0:O.toolName,status:"start"}})},experimental_onToolCallFinish:A=>{var O,$;t==null||t({type:"tool:execution",content:{nodeId:s.id,toolName:(O=A==null?void 0:A.toolCall)==null?void 0:O.toolName,status:(($=A==null?void 0:A.toolOutput)==null?void 0:$.type)==="tool-error"?"error":"success"}})},onError:A=>{t==null||t({type:"error:llmNodeRunner",content:"Execution error"}),r(A)},onChunk:A=>{if(A.chunk.type==="reasoning-delta"){let $=A.chunk.text??A.chunk.delta??"";if($&&(T=!0,_+=1,b+=$.length,_===1&&console.log("[reasoning] \u2713 first reasoning-delta received")),F&&i&&$)try{z(i,B.SERVER_REASONING_STREAM,$)}catch(H){console.warn("Failed to send reasoning chunk over connection",H)}return}if(A.chunk.type==="text-delta"){if(h||(h=Date.now()),i&&F&&T&&!k){k=!0;try{z(i,B.SERVER_REASONING_STREAM_COMPLETE,JSON.stringify({}))}catch($){console.warn("Failed to send reasoning complete over connection",$)}}return}c==null||c({type:A.chunk.type,payload:{nodeId:s.id,chunk:A.chunk}});let O=`llm_chunk:${A.chunk.type}`;t==null||t({type:O,content:{...A}})}}),Y=async()=>{let A="";for await(let O of j.fullStream)if(O.type==="text-delta"){if(A+=O.text,u&&i)try{z(i,B.SERVER_TEXT_STREAM,O.text)}catch($){console.warn("Failed to send chunk over connection",$)}}else if(O.type==="finish-step"&&O.finishReason==="tool-calls"){if(u&&i&&A.trim())try{z(i,B.SERVER_TEXT_STREAM_COMPLETE,JSON.stringify({}))}catch($){console.warn("Failed to flush text segment over connection",$)}A=""}};await Promise.all([j,Y()]),w(),t==null||t({type:"node:execution",content:{nodeId:s.id,nodeType:s.type,status:"success"}})}catch(j){t==null||t({type:"node:execution",content:{nodeId:s.id,nodeType:s.type,status:"error",error:String(j)}}),r(j)}})}function se(e,o,i,t){let s=!!(i&&i.length>0),u=!!t,p=s||u,f=e.length>0&&e[e.length-1].role==="user"?e[e.length-1]:void 0,d=c=>{let g=[],a="";if(u&&(a+=`[Attached files]
15
- ${t}
16
- [End of attached files]
17
-
18
- `),c&&(a+=c),a&&g.push({type:"text",text:a}),s)for(let w of i)g.push({type:"image",image:w.data,mimeType:w.mimeType});return g};return o&&f&&f.content===o?[...e.slice(0,-1).map(g=>({role:g.role,content:g.content})),{role:"user",content:d(o)}]:o?[...e.map(c=>({role:c.role,content:c.content})),{role:"user",content:d(o)}]:p&&f?[...e.slice(0,-1).map(g=>({role:g.role,content:g.content})),{role:"user",content:d(f.content)}]:e.map(c=>({role:c.role,content:c.content}))}async function Nt(e,o,i,t,s,u,p){var c,g,a,w,r,y,l;console.log(`**** MEMO Node id: ${o.id} ****`),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}});let n="",f=!1,d=Date.now();try{t==null||t({type:"info:memoNodeRunner",content:"Starting memo node execution"});let m=String(((c=o.data)==null?void 0:c.query_key)||"user_input"),N=W(m,{context:i.context??{},results:i.results??{},nodes:((a=(g=i.flowData)==null?void 0:g.state)==null?void 0:a.nodes)??[],edges:((r=(w=i.flowData)==null?void 0:w.state)==null?void 0:r.edges)??[],currentNodeId:o.id});if(N.missing)throw new Error(`Memo query "${m}" did not produce a value`);if(!e.env||!e.ctx){t==null||t({type:"error:memoNodeRunner",content:"Missing env or ctx"}),s==null||s(o.id,n);return}if(!o.data.rag_id){t==null||t({type:"error:memoNodeRunner",content:"Missing rag_id"}),s==null||s(o.id,n);return}let R=String(N.value??"");t==null||t({type:"info:memoNodeRunner",content:`Query text: ${R}`}),t==null||t({type:"info:memoNodeRunner",content:"Generating embedding for query"});let h=await Ft(e,R,!0);t==null||t({type:"info:memoNodeRunner",content:`Embedding generated successfully, length: ${h.data[0].length}`});let T=Array.isArray(o.data.rag_id)?o.data.rag_id:[o.data.rag_id],k=[];for(let F of T){t==null||t({type:"info:memoNodeRunner",content:`Executing RAG query with namespace: ${F}`});let x=await e.env[`VDB_${(y=i.flowData)==null?void 0:y.tenant}_1024`].query(h.data[0],{namespace:F,topK:o.data.topk,returnMetadata:"all"});t==null||t({type:"info:memoNodeRunner",content:`RAG query completed for namespace ${F}, matches: ${((l=x.matches)==null?void 0:l.length)||0}`}),Array.isArray(x.matches)&&k.push(...x.matches)}let _=Date.now()-d;n=k.map(F=>{var x;return(x=F.metadata)==null?void 0:x.value}).filter(F=>typeof F=="string").join(`
19
-
20
- `),p==null||p({type:"memo_search",payload:{nodeId:o.id,searchLatencyMs:_,retrievedContext:n}}),t==null||t({type:"info:memoNodeRunner",content:`Context retrieval complete, length: ${n.length}, preview: ${n.substring(0,200)}...`}),t==null||t({type:"info:memoNodeRunner",content:"Memo node execution completed successfully"}),f=!0}catch(m){throw console.error("Error processing MemoNode:",m),t==null||t({type:"error:memoNodeRunner",content:`Memo node execution failed: ${m}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"error",error:String(m)}}),m}finally{f&&(s==null||s(o.id,n),t==null||t({type:"info:memoNodeRunner",content:`onResult called with context length: ${n.length}`}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}}))}}async function Rt(e,o,i,t,s,u,p){var c,g,a,w,r,y,l,m;console.log(`**** START Node ${o.id} ****`),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"start"}}),t==null||t({type:"info:flow",content:i}),p==null||p({type:"start_node",payload:{userMessage:(c=i==null?void 0:i.context)==null?void 0:c.user_input}});let n=((g=o.data)==null?void 0:g.allow_images)!==!1,f=((a=o.data)==null?void 0:a.allow_documents)!==!1;!n&&(i!=null&&i.context)&&(i.context.user_images=[],u==null||u({...i})),!f&&(i!=null&&i.context)&&(i.context.files="",u==null||u({...i}));let d={};for(let N of S(o.data))d[N.name]=(w=i==null?void 0:i.context)==null?void 0:w[N.name];s==null||s(o.id,{...d,user_input:(r=i==null?void 0:i.context)==null?void 0:r.user_input,images:n?(y=i==null?void 0:i.context)==null?void 0:y.user_images:[],files:f?(l=i==null?void 0:i.context)==null?void 0:l.files:"",memory:((m=i==null?void 0:i.context)==null?void 0:m.memory)??""}),t==null||t({type:"node:execution",content:{nodeId:o.id,nodeType:o.type,status:"success"}})}function ss(e,o,i){let t=o;async function s(){var d;if(await((d=i==null?void 0:i.shouldStop)==null?void 0:d.call(i)))throw new it}async function u(d){let c=d;for(t.executedNodes=t.executedNodes||[],t.context=t.context||{},t.results=t.results||{};c&&c.id;)await s(),await p(c),await s(),c=ae(c,t.flowData,t)}async function p(d){var r,y;let c=f[d.type];if(!c){(r=i==null?void 0:i.onError)==null||r.call(i,`Unknown node type: ${d.type}`);return}t.executedNodes=t.executedNodes||[],t.executedNodes.push({id:d.id,type:d.type,label:typeof((y=d.data)==null?void 0:y.label)=="string"?d.data.label:void 0}),t.lastNodeId=d.id;let g=l=>{var m;return(m=i==null?void 0:i.onServerEvent)==null?void 0:m.call(i,{...l,ts:Date.now()})},a=l=>{var m,N;if((m=i==null?void 0:i.onTelemetry)==null||m.call(i,l),l.type==="llm_telemetry"||l.type==="class_telemetry"||l.type==="memory_update"){let R=(N=l.payload)==null?void 0:N.usage;R&&(t.tokenUsage=t.tokenUsage||{promptTokens:0,completionTokens:0,totalTokens:0},t.tokenUsage.promptTokens+=R.promptTokens||0,t.tokenUsage.completionTokens+=R.completionTokens||0,t.tokenUsage.totalTokens+=R.totalTokens||0)}};return await c(e,d,t,g,(l,m)=>{t.results[l]=m},i==null?void 0:i.onChangeState,a)}let n=async d=>{var w,r,y,l,m,N,R;let c=Date.now(),g="completed",a;try{await s();let h=typeof d=="string"?It(d):d,T=(h==null?void 0:h.text)||"",k=(h==null?void 0:h.images)||[],_=(h==null?void 0:h.documents)||[],b=await io(_,e.env),C=b.length>0?b.map(D=>`--- file: ${D.name} ---
21
- ${D.text}`).join(`
22
-
23
- `):"";t.context={user_input:T,user_images:k,files:C},t.tokenUsage={promptTokens:0,completionTokens:0,totalTokens:0},t.executedNodes=[],(w=i==null?void 0:i.onServerEvent)==null||w.call(i,{type:"agent:start",content:"Execution started",timestamp:Date.now()});let{startNode:F,error:x}=re(t.flowData);if(!F)g="failed",a=x||"Flow Format Error",(r=i==null?void 0:i.onError)==null||r.call(i,a);else{let D=S(F.data),{values:M,errors:V}=$t(D,h==null?void 0:h.inputs);if(V.length>0)return g="failed",a=`Invalid flow inputs: ${V.join("; ")}`,(y=i==null?void 0:i.onError)==null||y.call(i,a),{status:g,error:a};if(t.context={...t.context,inputs:M,...M},t.context.user_input||(t.context.user_input=T),Dt(F.data)){let I=Ot(Mt(F.data));t.context.memory=kt(e.agentMemory||"",I).content}else t.context.memory="";await u(F),(l=i==null?void 0:i.onServerEvent)==null||l.call(i,{type:"agent:telemetry",content:{durationMs:Date.now()-c,tokenUsage:t.tokenUsage},timestamp:Date.now()})}}catch(h){h instanceof it?(g="stopped",a=h.message,(m=i==null?void 0:i.onServerEvent)==null||m.call(i,{type:"agent:stopped",content:a,timestamp:Date.now()})):(g="failed",a=h instanceof Error?h.message:"Agent execution failed",(N=i==null?void 0:i.onError)==null||N.call(i,a))}finally{(R=i==null?void 0:i.onServerEvent)==null||R.call(i,{type:"agent:complete",content:{status:g,durationMs:Date.now()-c},timestamp:Date.now()})}return{status:g,error:a}},f={startNode:Rt,classifierNode:wt,llmNode:ht,memoNode:Nt,answerNode:nt,apiNode:ct,toolNode:pt,workerNode:mt,crawlNode:ft};return n}var it=class extends Error{constructor(){super("Stopped by user"),this.name="FlowExecutionStoppedError"}};function re(e){var c,g;let o=(e==null?void 0:e.state)??e;if(!o||!o.nodes||!o.edges||o.edges.length===0)return{error:"Flow is missing state, nodes, or edges."};if(o.schemaVersion!==3)return{error:"Flow uses an unsupported variable schema. Recreate it in Agent Design 3.0."};for(let a of o.nodes){if(((c=a.data)==null?void 0:c.varMapping)!==void 0)return{error:`Flow uses removed varMapping on node ${a.id}.`};let w=bt(a);if(w.length>0)return{error:w[0]}}let i=o.nodes.filter(a=>a.type==="startNode");if(i.length!==1)return{error:`Flow must include exactly one START node, found ${i.length}.`};let t=i[0],s=o.nodes.filter(a=>a.type==="answerNode");if(s.length===0)return{error:"Flow must include at least one ANSWER node."};let u=new Map;for(let a of o.edges)u.has(a.source)||u.set(a.source,[]),u.get(a.source).push(a.target);let p=new Map;for(let a of o.edges)p.has(a.target)||p.set(a.target,[]),p.get(a.target).push(a.source);let n=go(t.id,u),f=new Set;for(let a of s){let w=go(a.id,p);for(let r of w)f.add(r)}let d=[];for(let a of n)if(!f.has(a)){let w=o.nodes.find(r=>r.id===a);if(w){let r=((g=w.data)==null?void 0:g.label)||"";d.push(`${a}(${r},${w.type})`)}}return d.length>0?{error:`The following nodes reachable from START do not lead to any ANSWER node: ${d.join(", ")}`}:{startNode:t}}function go(e,o){let i=new Set,t=[e];for(i.add(e);t.length>0;){let s=t.shift(),u=o.get(s)||[];for(let p of u)i.has(p)||(i.add(p),t.push(p))}return i}function ne(e,o){var i;return((i=e.state)==null?void 0:i.nodes.find(t=>t.id===o))||null}function ae(e,o,i){var n;let t=o==null?void 0:o.state;if(!t)return null;let s=t.edges.filter(f=>f.source===e.id);if(s.length===0)return null;let u=s[0].target;if(e.type==="classifierNode"&&((n=i==null?void 0:i.context)!=null&&n.classified_id)){let f=i.context.classified_id,d=s.find(c=>c.sourceHandle===`source-${f}`);d?u=d.target:console.log(`No matching edge, falling back to first: ${u}`)}return ne(o,u)}export{z as a,Ro as b,lo as c,Ve as d,Yo as e,et as f,Ee as g,ss as h,it as i};
@@ -1,3 +0,0 @@
1
- var g=(a=>(a.START_NODE="startNode",a.CLASSIFIER_NODE="classifierNode",a.MEMO_NODE="memoNode",a.LLM_NODE="llmNode",a.ANSWER_NODE="answerNode",a.API_NODE="apiNode",a.TOOL_NODE="toolNode",a.WORKER_NODE="workerNode",a.CRAWL_NODE="crawlNode",a))(g||{});var 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=[],r=new Set;for(let o of t){let s=typeof(o==null?void 0:o.name)=="string"?o.name.trim():"";if(!s||!b.test(s)||r.has(s))continue;r.add(s);let i=k.includes(o==null?void 0:o.type)?o.type:"string";n.push({name:s,type:i,required:(o==null?void 0:o.required)===!0,default:(o==null?void 0:o.default)??void 0})}return n}function P(e,t){let n=e.label||e.name;switch(e.type){case"number":{let r=typeof t=="number"?t:Number(String(t).trim());return Number.isFinite(r)?{value:r}:{error:`"${n}" must be a number`}}case"boolean":{if(typeof t=="boolean")return{value:t};let r=String(t).trim().toLowerCase();return["true","1","yes","si","s\xED"].includes(r)?{value:!0}:["false","0","no"].includes(r)?{value:!1}:{error:`"${n}" must be true or false`}}case"json":{if(typeof t=="object")return{value:t};try{return{value:JSON.parse(String(t))}}catch{return{error:`"${n}" must be valid JSON`}}}default:return{value:typeof t=="string"?t:String(t)}}}function S(e){return e==null||typeof e=="string"&&e.trim()===""}function Z(e,t){let n={},r=[],o=t??{};for(let s of e){let i=o[s.name],u=S(i)?s.default:i;if(S(u)){s.required&&r.push(`"${s.label||s.name}" is required`);continue}let{value:c,error:a}=P(s,u);a?r.push(a):n[s.name]=c}return{values:n,errors:r}}function $(e){return typeof e=="string"?e:e==null?"":typeof e=="object"?JSON.stringify(e):String(e)}function G(e,t,n){let r=t.user_input;if(typeof r=="string"&&r.trim())return r;let o=e.filter(i=>i.name!=="user_input"&&t[i.name]!==void 0).map(i=>`- ${i.label||i.name}: ${$(t[i.name])}`),s=(n==null?void 0:n.trim())||"Automated execution";return o.length>0?`${s}
2
- ${o.join(`
3
- `)}`:s}var k=["string","number","boolean","json"];var O=/^[A-Za-z][A-Za-z0-9_]*$/;function N(e){switch(e){case"startNode":return[{name:"user_input",path:"user_input",type:"string"},{name:"images",path:"images",type:"image"},{name:"files",path:"files",type:"file"},{name:"memory",path:"memory",type:"string"}];case"llmNode":return[{name:"output",path:"",type:"string"}];case"apiNode":return[{name:"ok",path:"ok",type:"boolean"},{name:"status",path:"status",type:"number"},{name:"data",path:"data",type:"object"}];case"toolNode":case"workerNode":case"crawlNode":return[{name:"ok",path:"ok",type:"boolean"},{name:"data",path:"data",type:"object"},{name:"error",path:"error",type:"string"}];case"classifierNode":return[{name:"classification",path:"classification",type:"string"}];case"memoNode":return[{name:"context",path:"",type:"string"}];default:return[]}}function T(e){return e.type!=="startNode"?[]:m(e.data).map(t=>({name:t.name,path:t.name,type:t.type==="json"?"object":t.type}))}function C(e){var o;let t=[...N(e.type),...T(e),...Array.isArray((o=e.data)==null?void 0:o.outVars)?e.data.outVars:[]],n=new Set,r=[];for(let s of t){let i=typeof(s==null?void 0:s.name)=="string"?s.name.trim():"";O.test(i)?n.has(i)?r.push(`Node ${e.id} has duplicate output name "${i}"`):n.add(i):r.push(`Node ${e.id} has an invalid output name`)}return r}function d(e){var r;let t=[...N(e.type),...T(e)];return[...(Array.isArray((r=e.data)==null?void 0:r.outVars)?e.data.outVars:[]).map(o=>({...o,name:typeof(o==null?void 0:o.name)=="string"?o.name.trim():""})).filter(o=>O.test(o.name)).map(o=>({...o,source:"user"})),...t.map(o=>({...o,source:"default"}))]}function x(e,t){let n=new Set,r=[t],o=new Set([t]);for(;r.length>0;){let s=r.shift();for(let i of e)i.target!==s||o.has(i.source)||(o.add(i.source),n.add(i.source),r.push(i.source))}return n}function L(e,t){var o,s;if(e.type!=="startNode")return t;let n=((o=e.data)==null?void 0:o.allow_images)===!0,r=((s=e.data)==null?void 0:s.allow_documents)===!0;return t.filter(i=>!(i.name==="images"&&!n||i.name==="files"&&!r))}function U(e,t,n){let r=x(t,n),o=[],s=new Set;for(let i of r){let u=e.find(c=>c.id===i);if(u)for(let c of L(u,d(u))){let a=u.type==="startNode"&&c.source==="default"?c.name:`${u.id}.${c.name}`;s.has(a)||(s.add(a),o.push({...c,ref:a,nodeId:u.id}))}}return o}function ae(e,t,n){return new Set(U(e,t,n).map(r=>r.ref))}function v(e,t){let n=x(t.edges,t.currentNodeId);return t.nodes.filter(r=>n.has(r.id)&&e.startsWith(`${r.id}.`)).sort((r,o)=>o.id.length-r.id.length)[0]}function I(e,t){return e.slice(t.length+1)}function ue(e){return e.type==="image"||e.type==="file"}function j(e){if(!e)return!1;let t=e.split(";")[0].trim().toLowerCase();return t==="application/json"||t.endsWith("+json")}function E(e,t){let n=e.trim();if(!n||!(j(t)||n.startsWith("{")||n.startsWith("[")))return e;try{return JSON.parse(n)}catch{return e}}async function le(e){let t=e.headers.get("content-type"),n=await e.text();return E(n,t)}var W=new Set(["__proto__","prototype","constructor"]),y="\0__ORA_OB__\0",h="\0__ORA_CB__\0",f=class extends Error{constructor(n,r){super(r);this.code=n;this.name="VariableResolutionError"}code};function M(e){for(let t of e.split("."))if(W.has(t))throw new f("UNSAFE_PATH",`Unsafe variable path segment "${t}"`)}function w(e,t){if(!t)return e;M(t);let n=e;for(let r of t.split(".")){if(n==null||!Object.prototype.hasOwnProperty.call(Object(n),r))return;n=n[r]}return n}var J=new Set(["apiNode","toolNode","workerNode"]);function X(e){if(e!==null&&typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"data")){let t=e.data;return typeof t=="string"?E(t):t}}function V(e,t,n){let r=t.path??"";if(t.source==="user"&&n&&J.has(n)){let o=w(X(e),r);if(o!==void 0)return o}return w(e,r)}function Ne(e,t){let n={};for(let r of d(e))n[r.name]=V(t,r,e.type);return n}function q(e,t){var r,o,s,i,u,c,a,p;if(Object.prototype.hasOwnProperty.call(t.refOverrides??{},e))return{value:t.refOverrides[e]};let n=t.nodes.find(l=>l.type==="startNode");if(e==="user_input")return{value:(r=t.context)==null?void 0:r.user_input};if(e==="memory")return{value:((o=t.context)==null?void 0:o.memory)??""};if(e==="images"&&((s=n==null?void 0:n.data)==null?void 0:s.allow_images)===!0)return{value:(i=t.context)==null?void 0:i.user_images};if(e==="files"&&((u=n==null?void 0:n.data)==null?void 0:u.allow_documents)===!0)return{value:(c=t.context)==null?void 0:c.files};if(e==="classified_id")return{value:(a=t.context)==null?void 0:a.classified_id};if(n&&m(n.data).some(l=>l.name===e))return{value:(p=t.context)==null?void 0:p[e]}}function A(e,t){var R;let n=e.trim();if(!n)throw new f("INVALID_EXPRESSION","Variable reference is empty");let r=n.includes(".")?void 0:q(n,t);if(r)return r;if(!n.includes("."))throw new f("UNKNOWN_CONTEXT_REF",`Unknown run-context variable "${n}"`);let o=v(n,t);if(!o)throw new f("OUT_OF_SCOPE",`Variable "${n}" is not in this node's connection scope`);let s=I(n,o.id),[i,...u]=s.split("."),c=d(o).find(D=>D.name===i);if(!c)throw new f("UNKNOWN_OUTPUT",`Node "${o.id}" does not expose output "${i}"`);if(Object.prototype.hasOwnProperty.call(t.refOverrides??{},n))return{value:t.refOverrides[n]};let a=(R=t.results)==null?void 0:R[o.id];if(a==null)return{value:void 0,missing:"ancestor_not_executed"};let p=V(a,c,o.type),l=u.length>0?w(p,u.join(".")):p;return l==null?{value:void 0,missing:"path_not_found"}:{value:l}}function Ee(e,t){return A(e,t).value}function K(e){let t=null,n=!1;for(let r=0;r<e.length-1;r+=1){let o=e[r];if(n){n=!1;continue}if(o==="\\"){n=!0;continue}if(t){o===t&&(t=null);continue}if(o==='"'||o==="'"){t=o;continue}if(o==="?"&&e[r+1]==="?")return{ref:e.slice(0,r).trim(),rawDefault:e.slice(r+2).trim()}}return{ref:e.trim()}}function B(e){if(e.length<2||!['"',"'"].includes(e[0])||e.at(-1)!==e[0])throw new f("INVALID_EXPRESSION","Template defaults must be quoted string literals");if(e[0]==='"')try{return JSON.parse(e)}catch{throw new f("INVALID_EXPRESSION","Invalid double-quoted template default")}return e.slice(1,-1).replace(/\\'/g,"'").replace(/\\\\/g,"\\")}function F(e){let{ref:t,rawDefault:n}=K(e.trim());if(!t)throw new f("INVALID_EXPRESSION","Template expression is missing a variable reference");return{ref:t,...n===void 0?{}:{defaultValue:B(n)}}}function _e(e){let t=e.replace(/\\\{\{/g,y).replace(/\\\}\}/g,h),n=[],r=/\{\{\s*([^}]+?)\s*\}\}/g;for(let o of t.matchAll(r))n.push(F(o[1]).ref);return n}function z(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ye(e,t,n){let r=z(t);return e.replace(new RegExp(`(\\{\\{\\s*)${r}(?=\\.)`,"g"),`$1${n}`)}function _(e,t){return typeof e=="string"?t?JSON.stringify(e).slice(1,-1):e:typeof e=="object"&&e!==null?t?JSON.stringify(e):JSON.stringify(e,null,2):e!=null?t?JSON.stringify(e):String(e):""}function H(e,t){var n;throw(n=t==null?void 0:t.onError)==null||n.call(t,e.message),e}function he(e,t,n,r){if(!e)return e;let o=(r==null?void 0:r.serializeNonStrings)??!1,s=e.replace(/\\\{\{/g,y).replace(/\\\}\}/g,h),i=/\{\{\s*([^}]+?)\s*\}\}/g;return s=s.replace(i,(u,c)=>{try{let a=F(c);if(a.ref.startsWith("secrets.")){let l=a.ref.slice(8);if(!Object.prototype.hasOwnProperty.call(n.secrets??{},l))throw new f("MISSING_SECRET",`Secret "${l}" is not defined for this tenant`);return _(n.secrets[l],o)}let p=A(a.ref,n);if(p.missing){if(a.defaultValue!==void 0)return _(a.defaultValue,o);let l=p.missing==="ancestor_not_executed"?`Ancestor for variable "${a.ref}" did not execute in this branch`:`Variable path "${a.ref}" did not produce a value`;throw new f(p.missing==="ancestor_not_executed"?"ANCESTOR_NOT_EXECUTED":"PATH_NOT_FOUND",l)}return _(p.value,o)}catch(a){if(a instanceof f)return H(a,r);throw a}}),s.split(y).join("{{").split(h).join("}}")}export{g as a,b,m as c,Z as d,G as e,O as f,N as g,C as h,d as i,x as j,U as k,ae as l,v as m,I as n,ue as o,j as p,E as q,le as r,f as s,w as t,V as u,Ne as v,A as w,Ee as x,F as y,_e as z,ye as A,he as B};
@@ -1 +0,0 @@
1
- var r={};function e(o){}export{r as a,e as b};
@@ -1 +0,0 @@
1
- import{SessionPreset as g}from"@composio/core";function U(n,o){var t;return(o==null?void 0:o.trim())||((t=n.connectionScope)==null?void 0:t.trim())||void 0}function R(n){let o=n.trim();if(!o)throw new Error("Composio connection scope is required");return o}var m=/https:\/\/connect\.composio\.dev\/link\/[^\s)\]"']+/i,C=/"redirect_?[Uu]rl"\s*:\s*"(https?:\/\/[^"]+)"/;function b(n){var t;let o=(t=n.publicOrigin)==null?void 0:t.trim();return o?o.replace(/\/$/,""):O(n.env)}function v(n){var e,s,i,r;let o=(s=(e=n.secrets)==null?void 0:e.COMPOSIO_API_KEY)==null?void 0:s.trim();if(o)return o;let t=(r=(i=n.env)==null?void 0:i.COMPOSIO_API_KEY)==null?void 0:r.trim();if(t)return t;throw new Error("COMPOSIO_API_KEY is not configured (register tenant secret or set env COMPOSIO_API_KEY)")}function k(n){if(!n)return[];let o=[];for(let t of Object.values(n))o.push(...a(t.enable));return[...new Set(o)].sort()}function A(n){return JSON.stringify({toolkits:n.toolkits,tools:n.tools,authMode:n.authMode,authConfigs:n.authConfigs,workbench:n.workbench,sessionPreset:n.sessionPreset,sessionPreload:n.sessionPreload})}function L(n,o){var s;let t=E(n.tools),e=n.sessionPreset==="direct_tools";return{toolkits:n.toolkits,...n.authConfigs?{authConfigs:n.authConfigs}:{},...t?{tools:t}:{},manageConnections:o.manageConnections,workbench:o.workbench,...e?{sessionPreset:g.DIRECT_TOOLS}:{},...!e&&((s=n.sessionPreload)!=null&&s.enabled)?(()=>{let i=k(n.tools);return i.length>0?{preload:{tools:i}}:{}})():{}}}function h(n,o){var e;let t=(e=n==null?void 0:n.context)==null?void 0:e.user;return t!=null&&t.email||t!=null&&t.id?t:o.user}function j(n,o,t){var r,c,l;let e=h(o,n),s=(r=e==null?void 0:e.email)==null?void 0:r.trim();if(s&&s!=="default")return s;if((t==null?void 0:t.allowChatIdFallback)===!1)throw new Error("Composio user ID unavailable \u2014 log in so your tool-editor connections apply to your email");let i=(l=(c=o==null?void 0:o.flowData)==null?void 0:c.chatId)==null?void 0:l.trim();if(i&&i!=="default")return i;throw new Error("Composio user ID unavailable \u2014 log in (access_token cookie) or provide a chat session id")}function y(n){let o=JSON.stringify(n);return(typeof btoa=="function"?btoa(o):Buffer.from(o,"utf8").toString("base64")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function O(n){var t;let o=(t=n==null?void 0:n.ORA_PUBLIC_URL)==null?void 0:t.trim();return o?o.replace(/\/$/,""):"http://localhost:5173"}function x(n,o,t,e){let s=b(n),i=y({flowId:o??"",sessionId:t??"",toolRowId:e});return`${s}/api/composio/callback?ctx=${encodeURIComponent(i)}`}function a(n){return Array.isArray(n)?n.filter(o=>typeof o=="string"&&!!o.trim()).map(o=>o.trim()):[]}function S(n,o){var i;let t=n.toUpperCase(),e=(i=t.split("_")[0])==null?void 0:i.toLowerCase();if(!e)return;let s=o.find(r=>r.toLowerCase()===e);return s||o.find(r=>t.startsWith(`${r.toUpperCase()}_`))}function w(n,o){let t={};for(let e of n){let s=S(e,o);s&&(t[s]||(t[s]=[]),t[s].push(e))}return Object.fromEntries(Object.entries(t).map(([e,s])=>[e,{enable:s}]))}function E(n){if(!n)return;let o={};for(let[t,e]of Object.entries(n)){let s=a(e.enable),i=a(e.disable);s.length?o[t]={enable:s}:i.length&&(o[t]={disable:i})}return Object.keys(o).length>0?o:void 0}function _(n,o,t){let e=new Set(o.map(c=>c.trim()).filter(Boolean)),s={};if(n&&typeof n=="object")for(let[c,l]of Object.entries(n)){if(!e.has(c)||!l||typeof l!="object")continue;let p=l,u=a(p.enable),f=a(p.disable);u.length===0&&f.length===0||(s[c]={...u.length?{enable:u}:{},...f.length?{disable:f}:{}})}if(Object.keys(s).length>0)return s;let i=a(t==null?void 0:t.tools);if(i.length===0)return;let r=w(i,o);return Object.keys(r).length>0?r:void 0}function M(n){var c;let o=n&&typeof n=="object"?n:{},t=Array.isArray(o.toolkits)?o.toolkits.filter(l=>typeof l=="string"&&l.trim()):[];if(t.length===0)throw new Error("Composio tool execution.toolkits must be a non-empty string array");let e=_(o.tools,t,o.preload),s=typeof o.connectionScope=="string"&&o.connectionScope.trim()?o.connectionScope.trim():void 0,i=o.sessionPreset==="direct_tools"?"direct_tools":void 0,r=((c=o.sessionPreload)==null?void 0:c.enabled)===!0?{enabled:!0}:void 0;return{toolkits:t,authMode:o.authMode==="manual"?"manual":"in_app",authConfigs:o.authConfigs,...s?{connectionScope:s}:{},...e?{tools:e}:{},manageConnections:o.manageConnections,workbench:o.workbench??{enable:!0},...i?{sessionPreset:i}:{},...r?{sessionPreload:r}:{}}}function F(n,o){var e,s;return n.authMode==="manual"?!1:{callbackUrl:((s=(e=n.manageConnections)==null?void 0:e.callbackUrl)==null?void 0:s.trim())||o}}function K(n){let o=String((n==null?void 0:n.message)??n??"").toLowerCase();return o.includes("not connected")||o.includes("not authenticated")||o.includes("connection required")||o.includes("no active connection")||o.includes("authorize")||o.includes("authentication")||o.includes("connect link")||o.includes("no connected account")||o.includes("composio_manage_connections")}function T(n){if(typeof n!="string")return;let o=n.trim();if(o.startsWith("http"))return o}function I(n){for(let o of["redirectUrl","redirect_url","composio_link_redirect_url","url","link"]){let t=T(n[o]);if(t)return d(t)??t}}function d(n){if(n&&typeof n=="object"&&!Array.isArray(n)){let e=I(n);return e||d(JSON.stringify(n))}if(typeof n!="string")return;let o=n.match(m);if(o!=null&&o[0])return o[0];let t=n.match(C);if(t!=null&&t[1]){let e=t[1].replace(/\\u0026/g,"&").replace(/\\\//g,"/");return d(e)??e}}function N(n,o){var t;if(typeof n=="string"){let e=n.toLowerCase();for(let s of(o==null?void 0:o.toolkits)??[])if(e.includes(s.toLowerCase()))return s}return(t=o==null?void 0:o.toolkits)==null?void 0:t[0]}export{U as a,R as b,v as c,k as d,A as e,L as f,j as g,x as h,M as i,F as j,K as k,d as l,N as m};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-V35SRZAO.js";import"./chunk-XXB57DMN.js";import"./chunk-3TXHFKDN.js";export{a as executeComposioDirectTool};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-6AZ7RATD.js";import"./chunk-XXB57DMN.js";import"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";export{a as loadComposioTools};
@@ -1 +0,0 @@
1
- import{d as a,e as b}from"./chunk-ZYIULB2P.js";import"./chunk-QEZQZG6Z.js";import"./chunk-V6JSMX5A.js";import"./chunk-U56YWPSI.js";import"./chunk-3TXHFKDN.js";export{a as customHttpTool,b as default};