@smythos/sdk
Version:
29 lines (28 loc) • 66.4 kB
JavaScript
import{SRE,AccessCandidate,DEFAULT_TEAM_ID,ConnectorService,TConnectorService,SmythFS,TAccessRole,Conversation,TLLMEvent,DummyAccount,BinaryInput,TLLMProvider,AgentProcess}from"@smythos/sre";import{AccessCandidate as AccessCandidate2,TLLMEvent as TLLMEvent2,TLLMProvider as TLLMProvider2}from"@smythos/sre";import EventEmitter$1,{EventEmitter}from"events";import*as fs from"fs";import fs__default,{existsSync}from"fs";import chalk from"chalk";import*as acorn from"acorn";import express from"express";import{SSEServerTransport}from"@modelcontextprotocol/sdk/server/sse.js";import{Server}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport}from"@modelcontextprotocol/sdk/server/stdio.js";import{ListToolsRequestSchema,CallToolRequestSchema}from"@modelcontextprotocol/sdk/types.js";import{lookup}from"mime-types";import path,{extname}from"path";import{readFile}from"fs/promises";import*as mammoth from"mammoth";var version="1.0.42";function uid(){return(Date.now()+Math.random()).toString(36).replace(".","").toUpperCase()}function nGramSearch(str,array,n=3){if(!str||!array?.length)return null;const getNGrams=(s,gramSize)=>{const ngrams=new Set,source=s.toLowerCase();if(source.length<gramSize)return source.length>0&&ngrams.add(source),ngrams;for(let i=0;i<=source.length-gramSize;i++)ngrams.add(source.substring(i,i+gramSize));return ngrams},strNGrams=getNGrams(str,n);let bestMatch=null,bestScore=-1;for(const candidate of array){const candidateNGrams=getNGrams(candidate,n),intersection=new Set([...strNGrams].filter(gram=>candidateNGrams.has(gram))),union=new Set([...strNGrams,...candidateNGrams]),similarity=union.size===0?0:intersection.size/union.size;similarity>bestScore&&(bestScore=similarity,bestMatch=candidate)}return bestMatch}function isFile(str){if(!str||str.length>=1e3||!isValidPathFormat(str))return!1;try{return fs__default.statSync(str).isFile()}catch{return!1}}function isValidPathFormat(path2){if(/[\0<>"|?*]/.test(path2))return!1;const windowsAbsolute=/^[a-zA-Z]:[\\\/]/,windowsUNC=/^\\\\[^\\]+\\[^\\]+/,windowsRelative=/^\.{1,2}[\\\/]/,unixAbsolute=/^\//,unixHome=/^~[\/]/,unixRelative=/^\.{1,2}\//,genericRelative=/^[^\\\/]/;return windowsAbsolute.test(path2)||windowsUNC.test(path2)||windowsRelative.test(path2)||unixAbsolute.test(path2)||unixHome.test(path2)||unixRelative.test(path2)||genericRelative.test(path2)}const SDKLog={warn:(...args)=>{console.warn(chalk.gray("[WARN]",...args))},error:(...args)=>{console.error(chalk.red("[ERR]",...args))},info:(...args)=>{console.info("[INFO]",...args)},debug:(...args)=>{console.debug("[DBG]",...args)},log:(...args)=>{console.log(...args)}};var __defProp$e=Object.defineProperty,__defNormalProp$e=(obj,key,value)=>key in obj?__defProp$e(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$e=(obj,key,value)=>__defNormalProp$e(obj,typeof key!="symbol"?key+"":key,value);class ControlledPromise extends Promise{constructor(executor){let internalResolve,internalReject,_isSettled=!1;super((resolve,reject)=>{internalResolve=value=>{_isSettled||(_isSettled=!0,resolve(value))},internalReject=reason=>{_isSettled||(_isSettled=!0,reject(reason))}}),__publicField$e(this,"_isSettled",!1),__publicField$e(this,"isSettled"),__publicField$e(this,"resolve"),__publicField$e(this,"reject"),this.resolve=internalResolve,this.reject=internalReject,this.isSettled=()=>_isSettled,executor(this.resolve,this.reject,this.isSettled)}}var __defProp$d=Object.defineProperty,__defNormalProp$d=(obj,key,value)=>key in obj?__defProp$d(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$d=(obj,key,value)=>__defNormalProp$d(obj,typeof key!="symbol"?key+"":key,value);class SDKObject{constructor(){__publicField$d(this,"_eventEmitter"),__publicField$d(this,"_readyPromise"),this._eventEmitter=new EventEmitter,this._readyPromise=new ControlledPromise(this.init.bind(this))}get ready(){return this._readyPromise}async init(){SRE.initializing||SRE.init({}),await SRE.ready(),this._readyPromise.resolve(!0)}on(event,listener){this._eventEmitter.on(event,listener)}emit(event,...args){this._eventEmitter.emit(event,...args)}off(event,listener){this._eventEmitter.off(event,listener)}once(event,listener){this._eventEmitter.once(event,listener)}removeListener(event,listener){this._eventEmitter.removeListener(event,listener)}}var __defProp$c=Object.defineProperty,__defNormalProp$c=(obj,key,value)=>key in obj?__defProp$c(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$c=(obj,key,value)=>__defNormalProp$c(obj,typeof key!="symbol"?key+"":key,value);class StorageInstance extends SDKObject{constructor(providerId,storageSettings={},candidate){super(),__publicField$c(this,"_candidate"),__publicField$c(this,"_teamId"),__publicField$c(this,"_fs"),this._candidate=candidate||AccessCandidate.team(DEFAULT_TEAM_ID);let connector=ConnectorService.getStorageConnector(providerId||"");if(!connector?.valid&&(connector=ConnectorService.init(TConnectorService.Storage,providerId,providerId,{}),!connector?.valid))throw console.error(`Storage connector ${providerId} is not available`),new Error(`Storage connector ${providerId} is not available`);const instance=connector.instance(storageSettings||connector.settings);this._fs=SmythFS.getInstance(instance)}get fs(){return this._fs}async getResourceId(resourceName){if(!this._teamId){const accountConnector=ConnectorService.getAccountConnector();this._teamId=await accountConnector.getCandidateTeam(this._candidate)}return`teams/${this._teamId}/${resourceName}`}async getResourceUri(resourceName){if(!this._teamId){const accountConnector=ConnectorService.getAccountConnector();this._teamId=await accountConnector.getCandidateTeam(this._candidate)}let tld="";switch(this._candidate.role){case TAccessRole.Agent:tld=".agent";break;case TAccessRole.User:tld=".user";break;default:tld=".team"}return`smythfs://${this._candidate.id}${tld}/${resourceName}`}async read(resourceName){const uri=resourceName.startsWith("smythfs://")?resourceName:await this.getResourceUri(resourceName);try{return await this.fs.read(uri,this._candidate)}catch(error){throw console.error(error),error}}async write(resourceName,data){const uri=resourceName.startsWith("smythfs://")?resourceName:await this.getResourceUri(resourceName);try{return await this.fs.write(uri,data,this._candidate),uri}catch(error){throw console.error(error),error}}async delete(resourceName){const uri=resourceName.startsWith("smythfs://")?resourceName:await this.getResourceUri(resourceName);try{return await this.fs.delete(uri,this._candidate),uri}catch(error){throw console.error(error),error}}async exists(resourceName){const uri=resourceName.startsWith("smythfs://")?resourceName:await this.getResourceUri(resourceName);try{return await this.fs.exists(uri,this._candidate),uri}catch(error){throw console.error(error),error}}}var __defProp$b=Object.defineProperty,__defNormalProp$b=(obj,key,value)=>key in obj?__defProp$b(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$b=(obj,key,value)=>__defNormalProp$b(obj,typeof key!="symbol"?key+"":key,value);const console$3=SDKLog;class LocalChatStore extends SDKObject{constructor(_conversationId,candidate){super(),this._conversationId=_conversationId,__publicField$b(this,"_storage"),this._storage=new StorageInstance(null,null,candidate)}async save(messages){try{await this._storage.write(`${this._conversationId}`,JSON.stringify(messages))}catch(error){throw console$3.error("Error saving chat messages: ",error),error}}async load(count){try{const buffer=await this._storage.read(`${this._conversationId}`);return buffer?JSON.parse(buffer.toString()):[]}catch(error){throw console$3.error("Error loading chat messages: ",error),error}}async getMessage(message_id){return(await this.load()).find(m=>m.__smyth_data__?.message_id===message_id)}}class ChatCommand{constructor(prompt,chat){this.prompt=prompt,this.chat=chat,__publicField$b(this,"_conversation"),this._conversation=chat._conversation}then(resolve,reject){return this.run().then(resolve,reject)}async run(){return await this.chat.ready,await this._conversation.streamPrompt(this.prompt)}async stream(){await this.chat.ready;const eventEmitter=new EventEmitter,toolInfoHandler=toolInfo=>{eventEmitter.emit(TLLMEvent.ToolInfo,toolInfo),this.chat.emit(TLLMEvent.ToolInfo,toolInfo)},interruptedHandler=interrupted=>{eventEmitter.emit(TLLMEvent.Interrupted,interrupted),this.chat.emit(TLLMEvent.Interrupted,interrupted)},contentHandler=content=>{eventEmitter.emit(TLLMEvent.Content,content),this.chat.emit(TLLMEvent.Content,content)},toolCallHandler=toolCall=>{eventEmitter.emit(TLLMEvent.ToolCall,toolCall),this.chat.emit(TLLMEvent.ToolCall,toolCall)},toolResultHandler=toolResult=>{eventEmitter.emit(TLLMEvent.ToolResult,toolResult),this.chat.emit(TLLMEvent.ToolResult,toolResult)},endHandler=()=>{eventEmitter.emit(TLLMEvent.End),this.chat.emit(TLLMEvent.End),removeHandlers()},errorHandler=error=>{eventEmitter.emit(TLLMEvent.Error,error),this.chat.emit(TLLMEvent.Error,error),removeHandlers()},usageHandler=usage=>{eventEmitter.emit(TLLMEvent.Usage,usage),this.chat.emit(TLLMEvent.Usage,usage)},removeHandlers=()=>{this._conversation.off(TLLMEvent.ToolCall,toolCallHandler),this._conversation.off(TLLMEvent.ToolResult,toolResultHandler),this._conversation.off(TLLMEvent.Usage,usageHandler),this._conversation.off(TLLMEvent.End,endHandler),this._conversation.off(TLLMEvent.Error,errorHandler),this._conversation.off(TLLMEvent.Content,contentHandler),this._conversation.off(TLLMEvent.ToolInfo,toolInfoHandler),this._conversation.off(TLLMEvent.Interrupted,interruptedHandler)};return this._conversation.on(TLLMEvent.ToolCall,toolCallHandler),this._conversation.on(TLLMEvent.ToolResult,toolResultHandler),this._conversation.on(TLLMEvent.End,endHandler),this._conversation.on(TLLMEvent.Error,errorHandler),this._conversation.on(TLLMEvent.Content,contentHandler),this._conversation.on(TLLMEvent.ToolInfo,toolInfoHandler),this._conversation.on(TLLMEvent.Interrupted,interruptedHandler),this._conversation.streamPrompt(this.prompt),eventEmitter}}class Chat extends SDKObject{constructor(options,_model,_data,_convOptions={}){super(),this._convOptions=_convOptions,__publicField$b(this,"_id"),__publicField$b(this,"_conversation"),__publicField$b(this,"_data",{version:"1.0.0",name:"Agent",behavior:"",components:[],connections:[],defaultModel:"",id:uid()}),this._data={...this._data,..._data,defaultModel:_model},this._id=options.id||uid(),options.persist&&(options.candidate?(!this._convOptions?.store&&typeof options.persist=="boolean"&&(this._convOptions.store=new LocalChatStore(this._id,options.candidate)),!this._convOptions?.store&&this.isValidPersistanceObject(options.persist)&&(this._convOptions.store=options.persist)):(console$3.warn("Agent ID or Team ID are required to use chat persistance."),console$3.warn("Chat persistance disabled!"))),options.maxContextSize&&(this._convOptions.maxContextSize=options.maxContextSize),options.maxOutputTokens&&(this._convOptions.maxOutputTokens=options.maxOutputTokens),this._conversation=createConversation(this._data,this._convOptions)}get id(){return this._id}get agentData(){return this._data}isValidPersistanceObject(persistance){return typeof persistance=="object"&&"save"in persistance&&"load"in persistance&&"getMessage"in persistance}async init(){await super.init(),await registerProcessSkills(this._conversation,this._data)}prompt(prompt){return new ChatCommand(prompt,this)}}function createConversation(agentData,options){const filteredAgentData={...agentData,components:agentData.components.filter(c=>!c.process)},conversation=new Conversation(agentData.defaultModel,filteredAgentData,{agentId:agentData.id,...options});return conversation.on(TLLMEvent.Error,error=>{console$3.error("An error occurred while running the agent: ",error.message)}),conversation}async function registerProcessSkills(conversation,agentData){const processSkills=agentData.components.filter(c=>c.process);for(const skill of processSkills)await conversation.addTool({name:skill.data.endpoint,description:skill.data.description,handler:skill.process,inputs:skill.inputs})}async function prepareConversation(agentData,options){const conversation=createConversation(agentData,options);return await registerProcessSkills(conversation,agentData),conversation}function createSafeAccessor(base,root,currentPath,props){return new Proxy(base,{get(target,prop){if(prop==="__root__")return root;if(prop==="__path__")return currentPath||"";if(prop==="__props__")return props||{};if(typeof target[prop]=="function")return target[prop];if(!(prop in target)){const newPath=currentPath?`${currentPath}.${prop}`:prop;return createSafeAccessor({},root,newPath)}return target[prop]}})}var __defProp$a=Object.defineProperty,__defNormalProp$a=(obj,key,value)=>key in obj?__defProp$a(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$a=(obj,key,value)=>__defNormalProp$a(obj,typeof key!="symbol"?key+"":key,value);class ComponentWrapper{constructor(_internalData,_agentMaker){this._internalData=_internalData,this._agentMaker=_agentMaker,__publicField$a(this,"_id"),__publicField$a(this,"outputPathRewrite",path2=>path2),this._id="C"+uid()}get internalData(){return this._internalData}get id(){return this._id}get agentMaker(){return this._agentMaker}set agentMaker(agentMaker){this._agentMaker=agentMaker}get data(){const processInputs=this._internalData.process?this.extractArgsInputs(this._internalData.process):[],data={name:this._name,data:this._settings,displayName:this._name,title:this._name,id:this._id,process:typeof this._internalData.process=="function"?this._internalData.process:void 0,left:"0px",top:"0px",inputs:[...processInputs,...Object.keys(this._inputs).map(key=>({name:key,type:this._inputs[key].type||"Any",description:this._inputs[key].description||void 0,optional:this._inputs[key].optional||!1,default:this._inputs[key].default||void 0}))],outputs:Object.keys(this._outputs).map(key=>({name:key,...this._outputs[key]?.__props__||{}}))},inputs=data.inputs.reduce((acc,input)=>(acc[input.name]?acc[input.name]={...acc[input.name],...input}:acc[input.name]=input,acc),{});return data.inputs=Object.values(inputs),data}get _name(){return this._internalData.name}get _settings(){return this._internalData.settings}get _inputs(){return this._internalData.inputs}get _outputs(){return this._internalData.outputs}inputs(inputsList){for(let key in inputsList){const val=inputsList[key],sourceData=val?.__root__?.data;let outputPath=val?.__path__;const agentMaker=val?.__root__?.agentMaker;if(agentMaker){this.agentMaker||(this.agentMaker=agentMaker),agentMaker?.structure?.components.find(c=>c.id==this._id)||agentMaker?.structure?.components?.push(this);const sourceId=sourceData?.id,targetId=this._id;if(sourceId&&targetId){const sourceComponent=agentMaker?.structure?.components?.find(c=>c.id==sourceId);outputPath=sourceComponent.outputPathRewrite(outputPath),Object.keys(sourceComponent?._outputs).includes(outputPath)||(sourceComponent._outputs[outputPath]=createSafeAccessor({},sourceComponent,outputPath));const connection={sourceId,targetId,sourceIndex:outputPath,targetIndex:key};agentMaker?.structure?.connections?.push(connection)}}typeof sourceData<"u"?(inputsList[key]={source:val},this._inputs[key]||(this._inputs[key]={source:val,component:this,type:"Any",default:!1})):this._inputs[key]||(this._inputs[key]={component:this,type:"Any",default:!1,...val})}return this}extractArgsInputs(fn){const params=acorn.parse(`(${fn.toString()})`,{ecmaVersion:"latest"}).body[0].expression.params;let counter=0;function handleParam(param){return param.type==="Identifier"?[{name:param.name,type:"Any",description:""}]:param.type==="AssignmentPattern"&¶m.left.type==="Identifier"?[{name:param.left.name,type:"Any",description:""}]:param.type==="RestElement"&¶m.argument.type==="Identifier"?[{name:param.argument.name,type:"Any",description:""}]:param.type==="ObjectPattern"?(counter++,param.properties.map(prop=>({name:prop.key.name||`unknown_${counter++}`,type:"Any",description:""}))):{name:`unknown_${counter++}`,type:"Any",description:""}}return params.map(handleParam).flat()}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function APICall(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"APICall",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({Headers:createSafeAccessor({},component,"Headers",{description:"The headers of the API call response",default:!0}),Response:createSafeAccessor({},component,"Response",{description:"The response of the API call",default:!0})},component,""),_in={};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function APIOutput(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"APIOutput",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({},component,""),_in={};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function Await(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"Await",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({},component,""),_in={};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function Classifier(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"Classifier",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({},component,""),_in={Input:{component,type:"Any",optional:!1,default:!0}};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function ECMASandbox(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"ECMASandbox",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({},component,""),_in={};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function GenAILLM(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"GenAILLM",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({Reply:createSafeAccessor({},component,"Reply",{default:!0})},component,""),_in={Input:{component,type:"Any",optional:!1,default:!1},Attachment:{component,type:"Binary",optional:!0,default:!1}};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function HuggingFace(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"HuggingFace",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({},component,""),_in={};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function ImageGenerator(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"ImageGenerator",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({},component,""),_in={};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function MCPClient(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"MCPClient",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({},component,""),_in={};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function ServerlessCode(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"ServerlessCode",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({},component,""),_in={};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
function TavilyWebSearch(settings,agent){const{name,...settingsWithoutName}=settings||{},dataObject={name:settings?.name||"TavilyWebSearch",settings:{...settingsWithoutName}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({Results:createSafeAccessor({},component,"Results",{type:"Array",description:"The web search results",default:!0})},component,""),_in={SearchQuery:{component,type:"Text",optional:!1,default:!0}};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),{out:_out,in:component.inputs.bind(component)}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
const Components={APICall,APIOutput,Await,Classifier,ECMASandbox,GenAILLM,HuggingFace,ImageGenerator,MCPClient,ServerlessCode,TavilyWebSearch};function normalizeEndpointName(name){return name.replace(/[^a-zA-Z0-9]/g,"_")}function Skill(settings,agent){const{name,process,inputs,...settingsWithoutName}=settings||{},dataObject={name:"APIEndpoint",process,settings:{...settingsWithoutName,endpoint:normalizeEndpointName(settings?.endpoint||settings?.name),ai_exposed:settings?.ai_exposed||!0,method:settings?.method||"POST"}},component=new ComponentWrapper(dataObject,agent);agent&&agent.structure.components.push(component);const _out=createSafeAccessor({headers:createSafeAccessor({},component,"headers"),body:createSafeAccessor({},component,"body"),query:createSafeAccessor({},component,"query")},component,""),_in={};return dataObject.outputs=_out,dataObject.inputs=_in,component.inputs(_in),component.outputPathRewrite=path2=>path2.startsWith("body.")?path2:`body.${path2}`,{out:_out,in:component.inputs.bind(component)}}const Component={...Components,Skill};class DummyAccountHelper{static addAgentToTeam(agentId,teamId){const accountConnector=ConnectorService.getAccountConnector();if(accountConnector instanceof DummyAccount)return accountConnector.data[teamId]||(accountConnector.data[teamId]={users:{},agents:{},settings:{}}),accountConnector.data[teamId].agents[agentId]||(accountConnector.data[teamId].agents[agentId]={settings:{}}),accountConnector.data[teamId].agents[agentId]}static addUserToTeam(userId,teamId){const accountConnector=ConnectorService.getAccountConnector();if(accountConnector instanceof DummyAccount)return accountConnector.data[teamId]||(accountConnector.data[teamId]={users:{},agents:{},settings:{}}),accountConnector.data[teamId].users[userId]||(accountConnector.data[teamId].users[userId]={settings:{}}),accountConnector.data[teamId].users[userId]}}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
const TStorageProvider={LocalStorage:"LocalStorage",S3:"S3"},console$2=SDKLog,HELP={SRE:{SECURITY_MODEL:""},SDK:{AGENT_STORAGE_ACCESS:"",AGENT_VECTORDB_ACCESS:"",CHAT_PERSISTENCE:""}};function showHelp(url,message="Learn more:"){url&&console$2.log(`${message} ${url}
`)}//!!! DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED !!!//
const TVectorDBProvider={Milvus:"Milvus",Pinecone:"Pinecone",RAMVec:"RAMVec"};var __defProp$9=Object.defineProperty,__defNormalProp$9=(obj,key,value)=>key in obj?__defProp$9(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$9=(obj,key,value)=>__defNormalProp$9(obj,typeof key!="symbol"?key+"":key,value);class VectorDBInstance extends SDKObject{constructor(providerId,VectorDBSettings,candidate){super(),this.providerId=providerId,this.VectorDBSettings=VectorDBSettings,__publicField$9(this,"_candidate"),__publicField$9(this,"_VectorDBRequest"),__publicField$9(this,"_namespace"),__publicField$9(this,"_teamId"),this._candidate=candidate||AccessCandidate.team(DEFAULT_TEAM_ID)}async init(){await super.init();let connector=ConnectorService.getVectorDBConnector(this.providerId);if(!connector?.valid&&(connector=ConnectorService.init(TConnectorService.VectorDB,this.providerId,this.providerId,{}),!connector.valid))throw console.error(`VectorDB connector ${this.providerId} is not available`),new Error(`VectorDB connector ${this.providerId} is not available`);const instance=connector.instance(this.VectorDBSettings);this._VectorDBRequest=instance.requester(this._candidate),this._namespace=this.VectorDBSettings.namespace}async namespaceExists(){return await this.ready,await this._VectorDBRequest.namespaceExists(this._namespace)}async ensureNamespaceExists(){await this.ready,await this._VectorDBRequest.namespaceExists(this._namespace)||await this._VectorDBRequest.createNamespace(this._namespace)}_normalizeName(name){return name.toLowerCase().replace(/[^a-z0-9]/g,"_")}async insertDoc(name,data,metadata){if(await this.ready,await this.ensureNamespaceExists(),typeof data=="string")return await this._VectorDBRequest.createDatasource(this._namespace,{text:data,id:this._normalizeName(name),label:name,metadata});{const doc=data,promises=[];for(let page of doc.pages){let rawPageText="";for(let content of page.content)content.text&&(rawPageText+=content.text+" ");promises.push(this._VectorDBRequest.createDatasource(this._namespace,{text:rawPageText,id:this._normalizeName(name),label:name,metadata:{...metadata,pageNumber:page.metadata?.pageNumber,docTitle:doc.title,author:doc.metadata?.author}}))}return await Promise.all(promises)}}async updateDoc(name,data,metadata){return await this.ready,await this.ensureNamespaceExists(),await this.insertDoc(name,data,metadata)}async deleteDoc(name){return await this.ready,await this.namespaceExists()?(await this._VectorDBRequest.deleteDatasource(this._namespace,this._normalizeName(name)),!0):!1}async search(query,options){return await this.ready,await this.namespaceExists()?(await this._VectorDBRequest.search(this._namespace,query,{topK:options?.topK||10,includeMetadata:!0})).map(result=>({embedding:options?.includeEmbeddings?result.values:void 0,text:result.metadata?.text,metadata:typeof result.metadata=="string"?JSON.parse(result.metadata):result.metadata})):[]}async purge(){await this.ready,await this.namespaceExists()&&await this._VectorDBRequest.deleteNamespace(this._namespace)}}var __defProp$8=Object.defineProperty,__defNormalProp$8=(obj,key,value)=>key in obj?__defProp$8(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$8=(obj,key,value)=>__defNormalProp$8(obj,typeof key!="symbol"?key+"":key,value);class Team{constructor(id){this.id=id,__publicField$8(this,"_storageProviders"),__publicField$8(this,"_vectorDBProviders")}addAgent(settings){return settings.teamId=this.id,new Agent(settings)}get storage(){if(!this._storageProviders){this._storageProviders={};for(const provider of Object.values(TStorageProvider))this._storageProviders[provider]=storageSettings=>new StorageInstance(provider,storageSettings,AccessCandidate.team(this.id))}return this._storageProviders}get vectorDB(){if(!this._vectorDBProviders){this._vectorDBProviders={};for(const provider of Object.values(TVectorDBProvider))this._vectorDBProviders[provider]=vectorDBSettings=>new VectorDBInstance(provider,vectorDBSettings,AccessCandidate.team(this.id))}return this._vectorDBProviders}}function adaptModelParams(modelSettings,fallbackProvider){const{model,provider,inputTokens,outputTokens,...params}=modelSettings,modelObject={provider:provider||fallbackProvider,modelId:model,model,tokens:inputTokens||32*1024,completionTokens:outputTokens};return modelObject.params=params,typeof modelObject?.params?.apiKey=="string"&&(modelObject.credentials={apiKey:modelObject?.params?.apiKey},delete modelObject?.params?.apiKey),modelObject.credentials||(modelObject.credentials=["vault"]),{model:modelObject}}var __defProp$7=Object.defineProperty,__defNormalProp$7=(obj,key,value)=>key in obj?__defProp$7(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$7=(obj,key,value)=>__defNormalProp$7(obj,key+"",value);class LLMCommand{constructor(_llm,_params,_options){this._llm=_llm,this._params=_params,this._options=_options}then(resolve,reject){return this.run().then(resolve,reject)}async getFiles(){let files=[];return this._options?.files&&(files=await Promise.all(this._options.files.map(async file=>{if(isFile(file)){const buffer=await fs.promises.readFile(file,null),binaryInput=BinaryInput.from(buffer);return await binaryInput.ready(),binaryInput}else return BinaryInput.from(file)}))),files.length>0?files:void 0}async run(){await this._llm.ready;let files=await this.getFiles();const params={...this._params,...this._llm.modelSettings,files},result=await this._llm.requester.request(params);return result.finishReason!=="stop"&&result.finishReason!=="end_turn"&&this._llm.emit("error",new Error("The model stopped before completing the response, this is usually due to output token limit reached.")),result?.content??""}async stream(){await this._llm.ready;const files=await this.getFiles(),params={...this._params,...this._llm.modelSettings,files};return await this._llm.requester.streamRequest(params)}}class LLMInstance extends SDKObject{constructor(_providerId,_modelSettings,_candidate2){super(),this._providerId=_providerId,this._modelSettings=_modelSettings,this._candidate=_candidate2,__publicField$7(this,"_llmRequester")}get modelSettings(){return this._modelSettings}get requester(){return this._llmRequester}async init(){await super.init();const llmConnector=ConnectorService.getLLMConnector(this._providerId);this._candidate=this._candidate||AccessCandidate.team(DEFAULT_TEAM_ID),this._llmRequester=llmConnector.user(this._candidate),this._modelSettings=adaptModelParams(this._modelSettings,this._providerId)}prompt(prompt,options){return new LLMCommand(this,{...this._modelSettings,messages:[{role:"user",content:prompt}]},options)}chat(options){const model=this._modelSettings.model;typeof options=="string"&&(options={id:options,persist:!0});const chatOptions={...options,candidate:this._candidate};return new Chat(chatOptions,model)}}var Scope=(Scope2=>(Scope2.AGENT="agent",Scope2.TEAM="team",Scope2))(Scope||{}),__defProp$6=Object.defineProperty,__defNormalProp$6=(obj,key,value)=>key in obj?__defProp$6(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$6=(obj,key,value)=>__defNormalProp$6(obj,typeof key!="symbol"?key+"":key,value),MCPTransport=(MCPTransport2=>(MCPTransport2.STDIO="stdio",MCPTransport2.SSE="sse",MCPTransport2))(MCPTransport||{});const DEFAULT_MCP_PORT=3388;class MCP{constructor(agent){this.agent=agent,__publicField$6(this,"clientTransports",new Map),__publicField$6(this,"_app"),__publicField$6(this,"_port"),__publicField$6(this,"_server"),__publicField$6(this,"getMCPServer",async(agentSource,transport,res)=>{let agentData;if(typeof agentSource=="string"){if(!fs__default.existsSync(agentSource))throw new Error(`File ${agentSource} does not exist`);agentData=JSON.parse(fs__default.readFileSync(agentSource,"utf8"))}else agentData=agentSource;const formattedAgentData={data:agentData},openAPISpec=await ConnectorService.getAgentDataConnector().getOpenAPIJSON(formattedAgentData,"http://localhost/",agentData.version,!0).catch(error=>(console.error("Failed to get OpenAPI JSON:",error),null));this._server=new Server({name:openAPISpec.info.title,version:openAPISpec.info.version},{capabilities:{tools:{}}});const tools=Object.entries(openAPISpec.paths).map(([path2,methods])=>{const method=Object.keys(methods)[0],endpoint=path2.split("/api/")[1],operation=methods[method],schema=this.extractMCPToolSchema(operation,method),properties=schema?.properties||{};for(const property in properties)properties[property].type==="array"&&(properties[property]={type:"array",items:{type:["string","number","boolean","object","array"]}});return{name:endpoint,description:operation.summary||`Endpoint that handles ${method.toUpperCase()} requests to ${endpoint}. ${schema?.description||""}`,inputSchema:{type:"object",properties,required:schema?.required||[]}}});if(this._server.setRequestHandler(ListToolsRequestSchema,async()=>({tools})),this._server.setRequestHandler(CallToolRequestSchema,async request=>{try{const{name,arguments:args}=request.params,result=await this.agent.call(name,args);return{content:[{type:"text",text:JSON.stringify(result)}],isError:!1}}catch(error){return{content:[{type:"text",text:`Error processing request: ${error.message}`}],isError:!0}}}),transport==="stdio"){const transport2=new StdioServerTransport;return await this._server.connect(transport2),this._server}if(transport==="sse"){const transport2=new SSEServerTransport("/message",res);return await this._server.connect(transport2),this.clientTransports.set(transport2.sessionId,{transport:transport2,server:this._server}),this._server}throw new Error(`Invalid MCP server transport: ${transport}`)})}async start(settings){if(settings.transport==="stdio")return await this.startStdioServer();if(settings.transport==="sse")return await this.starSSEpServer(settings.port)}async startStdioServer(){const agentData=this.agent.data;return await this.getMCPServer(agentData,"stdio",null),"stdio"}async starSSEpServer(port){const agentData=this.agent.data;return this._app=express(),this._app.use(express.json()),this._app.use(express.urlencoded({extended:!0})),this._app.get("/mcp",async(req,res)=>{await this.getMCPServer(agentData,"sse",res)}),this._app.post("/message",async(req,res)=>{const sessionId=req.query.sessionId,transport=this.clientTransports.get(sessionId)?.transport;if(!transport)return res.status(404).send({error:"Transport not found"});await transport.handlePostMessage(req,res,req.body)}),this._port=port||DEFAULT_MCP_PORT,new Promise(resolve=>{this._app.listen(this._port,()=>{resolve(`http://localhost:${this._port}/mcp`)})})}stop(){this._server.close()}extractMCPToolSchema(jsonSpec,method){if(method.toLowerCase()==="get"){const schema2=jsonSpec?.parameters;if(!schema2)return{};const properties={};let required=[];return schema2.forEach(param=>{param.in==="query"&&(properties[param.name]=param.schema,param.required&&required.push(param.name))}),required=[...new Set(required)],{type:"object",properties,required}}return jsonSpec?.requestBody?.content?.["application/json"]?.schema}}const Model={};for(const provider of Object.keys(TLLMProvider))Model[provider]=(modelIdOrParams,modelParams)=>typeof modelIdOrParams=="string"?adaptModelParams({model:modelIdOrParams,...modelParams},TLLMProvider[provider]).model:adaptModelParams(modelIdOrParams,TLLMProvider[provider]).model;function findClosestModelInfo(models,modelId){if(models[modelId])return models[modelId];const closestModelId=nGramSearch(modelId,Object.keys(models));if(closestModelId){const modelInfo=JSON.parse(JSON.stringify(models[closestModelId]));return modelInfo.enabled=!0,modelInfo.modelId=modelId,modelInfo.credentials=["internal","vault"],models[modelId]=modelInfo,modelInfo}return null}var __typeError=msg=>{throw TypeError(msg)},__accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg),__privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),member.set(obj,value),value),_candidate,_vaultRequester;class VaultInstance extends SDKObject{constructor(candidate){super(),__privateAdd(this,_candidate),__privateAdd(this,_vaultRequester),__privateSet(this,_candidate,candidate||AccessCandidate.team("default"))}async init(){SRE.initializing||SRE.init({}),await SRE.ready();const vaultConnector=ConnectorService.getVaultConnector();__privateSet(this,_vaultRequester,vaultConnector.requester(__privateGet(this,_candidate))),this._readyPromise.resolve(!0)}async get(key){return await __privateGet(this,_vaultRequester).get(key)}async listKeys(){return await __privateGet(this,_vaultRequester).listKeys()}}_candidate=new WeakMap,_vaultRequester=new WeakMap;var __defProp$5=Object.defineProperty,__defNormalProp$5=(obj,key,value)=>key in obj?__defProp$5(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$5=(obj,key,value)=>__defNormalProp$5(obj,typeof key!="symbol"?key+"":key,value);const console$1=SDKLog;class AgentCommand{constructor(prompt,agent,_options){this.prompt=prompt,this.agent=agent,this._options=_options}then(resolve,reject){return this.run().then(resolve,reject)}async getFiles(){let files=[];return this._options?.files&&(files=await Promise.all(this._options.files.map(async file=>{if(isFile(file)){const buffer=await fs__default.promises.readFile(file,null),binaryInput=BinaryInput.from(buffer);return await binaryInput.ready(),await binaryInput.upload(AccessCandidate.agent(this.agent.data.id)),binaryInput}else{const binaryInput=BinaryInput.from(file);return await binaryInput.ready(),await binaryInput.upload(AccessCandidate.agent(this.agent.data.id)),binaryInput}}))),files.length>0?files:void 0}async run(){await this.agent.ready;let files=await this.getFiles();const conversation=await prepareConversation(this.agent.data),hasBinarySkill=this.agent.data.components.find(c=>c.name==="APIEndpoint"&&c.inputs.find(i=>i.type==="Binary")),attachmentsPrompt=!files||files.length===0?"":`
----
Attachments: ${files.map(file=>` - ${file.url}`).join(`
`)}`;return await conversation.streamPrompt({message:this.prompt+attachmentsPrompt,files:hasBinarySkill?void 0:files}).catch(error=>(console$1.error("Error on streamPrompt: ",error),JSON.stringify({error})))}async stream(){await this.agent.ready;const files=await this.getFiles(),conversation=await prepareConversation(this.agent.data),eventEmitter=new EventEmitter$1,toolInfoHandler=toolInfo=>{eventEmitter.emit(TLLMEvent.ToolInfo,toolInfo),this.agent.emit(TLLMEvent.ToolInfo,toolInfo)},interruptedHandler=interrupted=>{eventEmitter.emit(TLLMEvent.Interrupted,interrupted),this.agent.emit(TLLMEvent.Interrupted,interrupted)},contentHandler=content=>{eventEmitter.emit(TLLMEvent.Content,content),this.agent.emit(TLLMEvent.Content,content)},toolCallHandler=toolCall=>{eventEmitter.emit(TLLMEvent.ToolCall,toolCall),this.agent.emit(TLLMEvent.ToolCall,toolCall)},toolResultHandler=toolResult=>{eventEmitter.emit(TLLMEvent.ToolResult,toolResult),this.agent.emit(TLLMEvent.ToolResult,toolResult)},endHandler=()=>{eventEmitter.emit(TLLMEvent.End),this.agent.emit(TLLMEvent.End),removeHandlers()},errorHandler=error=>{eventEmitter.emit(TLLMEvent.Error,error),this.agent.emit(TLLMEvent.Error,error),removeHandlers()},usageHandler=usage=>{eventEmitter.emit(TLLMEvent.Usage,usage),this.agent.emit(TLLMEvent.Usage,usage)},removeHandlers=()=>{conversation.off(TLLMEvent.ToolCall,toolCallHandler),conversation.off(TLLMEvent.ToolResult,toolResultHandler),conversation.off(TLLMEvent.Usage,usageHandler),conversation.off(TLLMEvent.End,endHandler),conversation.off(TLLMEvent.Error,errorHandler),conversation.off(TLLMEvent.Content,contentHandler),conversation.off(TLLMEvent.ToolInfo,toolInfoHandler),conversation.off(TLLMEvent.Interrupted,interruptedHandler)};return conversation.on(TLLMEvent.ToolCall,toolCallHandler),conversation.on(TLLMEvent.ToolResult,toolResultHandler),conversation.on(TLLMEvent.End,endHandler),conversation.on(TLLMEvent.Error,errorHandler),conversation.on(TLLMEvent.Content,contentHandler),conversation.on(TLLMEvent.ToolInfo,toolInfoHandler),conversation.on(TLLMEvent.Interrupted,interruptedHandler),conversation.streamPrompt({message:this.prompt,files}),conversation}}class Agent extends SDKObject{constructor(_settings){super(),this._settings=_settings,__publicField$5(this,"_hasExplicitId",!1),__publicField$5(this,"_warningDisplayed",{storage:!1,vectorDB:!1}),__publicField$5(this,"_data",{version:"1.0.0",name:"",behavior:"",defaultModel:"",id:"",teamId:DEFAULT_TEAM_ID,components:[],connections:[]}),__publicField$5(this,"structure",{components:[],connections:[]}),__publicField$5(this,"_team"),__publicField$5(this,"_llmProviders"),__publicField$5(this,"_storageProviders"),__publicField$5(this,"_vectorDBProviders"),__publicField$5(this,"_vault");const{model,...rest}=this._settings;this._data.defaultModel=model;for(let key in rest)this._data[key]=rest[key];if(!this._data.id)this._data.id=this._normalizeId(`${this._data.name?this._data.name+"-":""}${uid()}`);else{if(!this._validateId(this._data.id))throw new Error(`Invalid agent id: ${this._data.id}
Only alphanumeric, hyphens and underscores are allowed`);this._hasExplicitId=!0}if(!this._data.teamId){if(!this._validateId(this._data.id))throw new Error(`Invalid agent id: ${this._data.id}
Only alphanumeric, hyphens and underscores are allowed`);this._data.teamId=DEFAULT_TEAM_ID}this._data.teamId=this._data.teamId||DEFAULT_TEAM_ID,DummyAccountHelper.addAgentToTeam(this._data.id,this._data.teamId)}get team(){return this._team||(this._team=new Team(this._data.teamId)),this._team}get data(){const data={...JSON.parse(JSON.stringify(this._data))};for(let c of this.structure.components)data.components.push(c.data);for(let c of this.structure.connections)data.connections.push(c);return data}async init(){SRE.initializing||SRE.init({}),await SRE.ready();const model=this._data.defaultModel,models=await ConnectorService.getModelsProviderConnector().agent(this._data.id).getModels();if(typeof model=="string")this._data.defaultModel=findClosestModelInfo(models,model);else{this._data.defaultModel=model;const builtInModelInfo=findClosestModelInfo(models,model.modelId);builtInModelInfo&&(this._data.defaultModel={...builtInModelInfo,...this._data.defaultModel})}this._readyPromise.resolve(!0)}_validateId(id){return id.length>0&&id.length<=64&&/^[a-zA-Z0-9_-]+$/.test(id)}_normalizeId(name){return name.toLowerCase().replace(/[^a-z0-9]/g,"-")}static import(data,overrides){if(typeof data=="string"){if(!fs__default.existsSync(data))throw new Error(`File ${data} does not exist`);data=JSON.parse(fs__default.readFileSync(data,"utf8")),delete data.id,delete data.teamId}const _data={...data,...overrides};return new Agent(_data)}get llm(){if(!this._llmProviders){this._llmProviders={};for(const provider of Object.keys(TLLMProvider))this._llmProviders[provider]=(modelIdOrParams,modelParams)=>typeof modelIdOrParams=="string"?new LLMInstance(TLLMProvider[provider],{model:modelIdOrParams,...modelParams}):new LLMInstance(TLLMProvider[provider],modelIdOrParams)}return this._llmProviders}get storage(){if(!this._storageProviders){this._storageProviders={};for(const provider of Object.values(TStorageProvider))this._storageProviders[provider]=(storageSettings,scope)=>{scope!==Scope.TEAM&&!this._hasExplicitId&&!this._warningDisplayed.storage&&(this._warningDisplayed.storage=!0,console$1.warn(`You are performing storage operations with an unidentified agent.
The data will be associated with the agent's team (Team ID: "${this._data.teamId}"). If you want to associate the data with the agent, please set an explicit agent ID.
${HELP.SDK.AGENT_STORAGE_ACCESS}`));const candidate=scope!==Scope.TEAM&&this._hasExplicitId?AccessCandidate.agent(this._data.id):AccessCandidate.team(this._data.teamId);return new StorageInstance(provider,storageSettings,candidate)}}return this._storageProviders}get vectorDB(){if(!this._vectorDBProviders){this._vectorDBProviders={};for(const provider of Object.values(TVectorDBProvider))this._vectorDBProviders[provider]=(namespace,vectorDBSettings,scope)=>{scope!==Scope.TEAM&&!this._hasExplicitId&&!this._warningDisplayed.vectorDB&&(this._warningDisplayed.vectorDB=!0,console$1.warn(`You are performing vectorDB operations with an unidentified agent.
The vectors will be associated with the agent's team (Team ID: "${this._data.teamId}"). If you want to associate the vectors with the agent, please set an explicit agent ID.
${HELP.SDK.AGENT_VECTORDB_ACCESS}`));const candidate=scope!==Scope.TEAM&&this._hasExplicitId?AccessCandidate.agent(this._data.id):AccessCandidate.team(this._data.teamId);return new VectorDBInstance(provider,{...vectorDBSettings,namespace},candidate)}}return this._vectorDBProviders}get vault(){return this._vault||(this._vault=new VaultInstance(AccessCandidate.agent(this._data.id))),this._vault}addSkill(settings){return Component.Skill(settings,this)}async call(skillName,...args){try{const _agentData=this.data,skill=_agentData.components.find(c=>c.data.endpoint===skillName);if(skill?.process)return await(this.structure.components.find(c=>c?.internalData?.process&&c?.data?.data?.endpoint===skillName)?.internalData?.process||(()=>null))(...args);const filteredAgentData={..._agentData,components:_agentData.components.filter(c=>!c.process)},method=skill.data.method.toUpperCase(),path2=`/api/${skillName}`,headers={"Content-Type":"application/json"},input=args[0],body=method==="POST"?{...input}:void 0,query=method==="GET"?{...input}:void 0;return await AgentProcess.load(filteredAgentData).run({method,path:path2,body,query,headers})}catch(error){throw console$1.error(`Error executing skill '${skillName}':`,error.message),error}}prompt(prompt,options){return new AgentCommand(prompt,this,options)}chat(options){typeof options=="string"&&(options={id:options,persist:!0});const chatOptions={...options,candidate:this._hasExplicitId?AccessCandidate.agent(this._data.id):AccessCandidate.team(this._data.teamId)};return chatOptions.persist&&!this._hasExplicitId&&(console$1.warn("!! Persistance is disabled !! Reason: You are creating a chat session with an unidentified agent.",`
Set an explicit agent ID or set the shared option to true`),showHelp(HELP.SDK.CHAT_PERSISTENCE),chatOptions.persist=!1),new Chat(chatOptions,this._data.defaultModel,this.data,{agentId:this._data.id})}async mcp(transport,port=3388){return await new MCP(this).start({transport,port})}}var __defProp$4=Object.defineProperty,__defNormalProp$4=(obj,key,value)=>key in obj?__defProp$4(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$4=(obj,key,value)=>__defNormalProp$4(obj,typeof key!="symbol"?key+"":key,value);class DocParser{constructor(){__publicField$4(this,"supportedMimeTypes",[]),__publicField$4(this,"supportedExtensions",[])}async parse(source,params){return{title:"",metadata:{uri:"",author:"",date:"",tags:[]},pages:[{content:[{type:"text",data:"",text:""}],metadata:{}}]}}}var __defProp$3=Object.defineProperty,__defNormalProp$3=(obj,key,value)=>key in obj?__defProp$3(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$3=(obj,key,value)=>__defNormalProp$3(obj,typeof key!="symbol"?key+"":key,value);class TextParser extends DocParser{constructor(){super(...arguments),__publicField$3(this,"supportedMimeTypes",["text/plain","text/x-plain","text/x-txt"]),__publicField$3(this,"supportedExtensions",["txt"])}async parse(source,params){try{let textContent=source,isFilePath=!1;try{if(this.isLikelyFilePath(source)){const normalizedPath=path.resolve(source);existsSync(normalizedPath)&&(textContent=await readFile(normalizedPath,"utf-8"),isFilePath=!0)}}catch{isFilePath=!1}let title="Untitled";isFilePath&&(title=path.basename(source,path.extname(source))||"Untitled"),params?.title&&(title=params.title);const content=textContent.trim().length>0?[{type:"text",data:textContent,text:textContent}]:[],metadata={uri:isFilePath?source:"",author:params?.author||"",date:params?.date||"",tags:params?.tags||[]};return{title,metadata,pages:[{content,metadata:{pageNumber:1}}]}}catch(error){throw console.error("Text parsing error:",error),error}}isLikelyFilePath(source){return source.length<1e3&&!source.includes(`
`)&&!source.includes("\r")&&(source.includes("/")||source.includes("\\")||!!source.match(/^[a-zA-Z]:[\\\/]/)||source.endsWith(".txt")||source.endsWith(".md")||source.endsWith(".log")||source.endsWith(".csv")||source.endsWith(".json")||source.endsWith(".xml"))}}class AutoParser extends DocParser{constructor(){super()}isLikelyFilePath(source){return source.length<1e3&&!source.includes(`
`)&&!source.includes("\r")&&(source.includes("/")||source.includes("\\")||!!source.match(/^[a-zA-Z]:[\\\/]/)||existsSync(source))}async parse(source,params){if(!this.isLikelyFilePath(source))return new TextParser().parse(source,params);const mimeType=lookup(source),extension=extname(source).slice(1);let parser;const parsers=Object.entries(Doc).filter(([k