@smythos/sre 1.7.5 → 1.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import dotenv from"dotenv";import Joi from"joi";import"dotenv/config";import winston from"winston";import Transport from"winston-transport";import pLimit from"p-limit";import axios,{AxiosHeaders}from"axios";import*as fs from"fs";import fs__default,{existsSync,mkdirSync,writeFileSync,readFileSync,unlinkSync}from"fs";import*as FileType from"file-type";import{fileTypeFromBuffer}from"file-type";import{isBinaryFileSync}from"isbinaryfile";import EventEmitter$1,{EventEmitter}from"events";import crypto$1,{createHash,randomUUID,createHmac,timingSafeEqual}from"crypto";import path from"path";import os from"os";import"process";import mime from"mime";import{encodeChat,encode}from"gpt-tokenizer";import{Readable}from"stream";import xxhash from"xxhashjs";import{jsonrepair}from"jsonrepair";import yaml from"js-yaml";import{EventSource}from"eventsource";import*as acorn from"acorn";import dayjs from"dayjs";import querystring from"querystring";import{HfInference}from"@huggingface/inference";import{Runware}from"@runware/sdk-js";import FormData from"form-data";import{SocksProxyAgent}from"socks-proxy-agent";import OAuth from"oauth-1.0a";import zl from"zip-lib";import{LambdaClient,GetFunctionCommand,UpdateFunctionCodeCommand,Runtime,InvokeCommand,UpdateFunctionConfigurationCommand,CreateFunctionCommand}from"@aws-sdk/client-lambda";import{IAMClient,GetRoleCommand,CreateRoleCommand}from"@aws-sdk/client-iam";import{Client}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport}from"@modelcontextprotocol/sdk/client/streamableHttp.js";import{findAll,isTag,removeElement,innerText}from"domutils";import{parseDocument}from"htmlparser2";import{GetBucketLifecycleConfigurationCommand,PutBucketLifecycleConfigurationCommand,S3Client,HeadObjectCommand,DeleteObjectCommand,GetObjectCommand,PutObjectCommand,PutObjectTaggingCommand,GetObjectTaggingCommand,CopyObjectCommand}from"@aws-sdk/client-s3";import{createServer}from"http";import{WebSocketServer}from"ws";import"ses";import imageSize from"image-size";import{execSync}from"child_process";import{Pinecone}from"@pinecone-database/pinecone";import OpenAI,{toFile,OpenAI as OpenAI$1}from"openai";import{GoogleGenAI as GoogleGenAI$1}from"@google/genai";import{MilvusClient,DataType,ErrorCode}from"@zilliz/milvus2-sdk-node";import{GoogleGenAI,FunctionCallingConfigMode,FileState}from"@google/genai/node";import Anthropic from"@anthropic-ai/sdk";import Groq from"groq-sdk";import{BedrockRuntimeClient,ConverseCommand,ConverseStreamCommand}from"@aws-sdk/client-bedrock-runtime";import{VertexAI}from"@google-cloud/vertexai";import{Ollama}from"ollama";import*as chokidar from"chokidar";import chokidar__default from"chokidar";import fs$1 from"fs/promises";import IORedis from"ioredis";import mysql from"mysql2/promise";import{SecretsManagerClient,ListSecretsCommand,GetSecretValueCommand,PutSecretValueCommand,CreateSecretCommand,DeleteSecretCommand}from"@aws-sdk/client-secrets-manager";import*as readlineSync from"readline-sync";var version="1.7.5",pkg={version};dotenv.config();const config={env:{LOG_LEVEL:process.env.LOG_LEVEL||"none",LOG_FILTER:process.env.LOG_FILTER||"",NODE_ENV:process.env?.NODE_ENV}},REQUEST_METHODS=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],REQUEST_CONTENT_TYPES={none:"none",urlEncodedFormData:"application/x-www-form-urlencoded",multipartFormData:"multipart/form-data",json:"application/json",text:"text/plain",xml:"application/xml",binary:"binary"};var EMBODIMENT_TYPES=(EMBODIMENT_TYPES2=>(EMBODIMENT_TYPES2.ChatBot="chatBot",EMBODIMENT_TYPES2.ChatGPT="chatGPT",EMBODIMENT_TYPES2))(EMBODIMENT_TYPES||{});const ERR_MSG_INVALID_IMAGE_SOURCE="Please provide a valid Image Source. Supported image sources are: HTTP(S) URL, Base64 string, Data URL, Output Image from other component(s).",ERR_MSG_INVALID_BINARY="Please provide a valid data that is either a Blob, SmythFileObject (Binary Output from any Component), ArrayBuffer, Buffer, Base64 string, Data URL, or HTTP(s) URL",ERR_MSG_MAX_DEPTH="The maximum depth has been exceeded for the provided array or object.",ERR_MSG_MAX_ARRAY_SIZE="The maximum array size has been exceeded for the provided array.",ERR_MSG_MAX_OBJECT_SIZE="The maximum object size has been exceeded for the provided object.",MAX_DEPTH=10,MAX_OBJECT_SIZE=1e3,MAX_ARRAY_SIZE=1e3,MAX_FILE_SIZE=10*1024*1024,MAX_FILE_COUNT=10,DEFAULT_MAX_TOKENS_FOR_LLM=2048,S3_DAILY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteDaily",S3_WEEKLY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteWeekly",S3_MONTHLY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteMonthly",TOOL_USE_DEFAULT_MODEL="gpt-4o-mini",COMP_NAMES={apiCall:"APICall",code:"Code",llmPrompt:"PromptGenerator",visionLLM:"VisionLLM"},JSON_RESPONSE_INSTRUCTION=`
1
+ import dotenv from"dotenv";import Joi from"joi";import"dotenv/config";import winston from"winston";import Transport from"winston-transport";import pLimit from"p-limit";import axios,{AxiosHeaders}from"axios";import*as fs from"fs";import fs__default,{existsSync,mkdirSync,writeFileSync,readFileSync,unlinkSync}from"fs";import*as FileType from"file-type";import{fileTypeFromBuffer}from"file-type";import{isBinaryFileSync}from"isbinaryfile";import EventEmitter$1,{EventEmitter}from"events";import crypto$1,{createHash,randomUUID,createHmac,timingSafeEqual}from"crypto";import path from"path";import os from"os";import"process";import mime from"mime";import{encodeChat,encode}from"gpt-tokenizer";import{Readable}from"stream";import xxhash from"xxhashjs";import{jsonrepair}from"jsonrepair";import yaml from"js-yaml";import{EventSource}from"eventsource";import*as acorn from"acorn";import dayjs from"dayjs";import querystring from"querystring";import{HfInference}from"@huggingface/inference";import{Runware}from"@runware/sdk-js";import FormData from"form-data";import{SocksProxyAgent}from"socks-proxy-agent";import OAuth from"oauth-1.0a";import zl from"zip-lib";import{LambdaClient,GetFunctionCommand,UpdateFunctionCodeCommand,Runtime,InvokeCommand,UpdateFunctionConfigurationCommand,CreateFunctionCommand}from"@aws-sdk/client-lambda";import{IAMClient,GetRoleCommand,CreateRoleCommand}from"@aws-sdk/client-iam";import{Client}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport}from"@modelcontextprotocol/sdk/client/streamableHttp.js";import{findAll,isTag,removeElement,innerText}from"domutils";import{parseDocument}from"htmlparser2";import{GetBucketLifecycleConfigurationCommand,PutBucketLifecycleConfigurationCommand,S3Client,HeadObjectCommand,DeleteObjectCommand,GetObjectCommand,PutObjectCommand,PutObjectTaggingCommand,GetObjectTaggingCommand,CopyObjectCommand}from"@aws-sdk/client-s3";import{createServer}from"http";import{WebSocketServer}from"ws";import"ses";import imageSize from"image-size";import{execSync}from"child_process";import{Pinecone}from"@pinecone-database/pinecone";import OpenAI,{toFile,OpenAI as OpenAI$1}from"openai";import{GoogleGenAI as GoogleGenAI$1}from"@google/genai";import{MilvusClient,DataType,ErrorCode}from"@zilliz/milvus2-sdk-node";import{GoogleGenAI,FunctionCallingConfigMode,FileState}from"@google/genai/node";import Anthropic from"@anthropic-ai/sdk";import Groq from"groq-sdk";import{BedrockRuntimeClient,ConverseCommand,ConverseStreamCommand}from"@aws-sdk/client-bedrock-runtime";import{VertexAI}from"@google-cloud/vertexai";import{Ollama}from"ollama";import*as chokidar from"chokidar";import chokidar__default from"chokidar";import fs$1 from"fs/promises";import IORedis from"ioredis";import mysql from"mysql2/promise";import{SecretsManagerClient,ListSecretsCommand,GetSecretValueCommand,PutSecretValueCommand,CreateSecretCommand,DeleteSecretCommand}from"@aws-sdk/client-secrets-manager";import*as readlineSync from"readline-sync";var version="1.7.7",pkg={version};dotenv.config();const config={env:{LOG_LEVEL:process.env.LOG_LEVEL||"none",LOG_FILTER:process.env.LOG_FILTER||"",NODE_ENV:process.env?.NODE_ENV}},REQUEST_METHODS=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],REQUEST_CONTENT_TYPES={none:"none",urlEncodedFormData:"application/x-www-form-urlencoded",multipartFormData:"multipart/form-data",json:"application/json",text:"text/plain",xml:"application/xml",binary:"binary"};var EMBODIMENT_TYPES=(EMBODIMENT_TYPES2=>(EMBODIMENT_TYPES2.ChatBot="chatBot",EMBODIMENT_TYPES2.ChatGPT="chatGPT",EMBODIMENT_TYPES2))(EMBODIMENT_TYPES||{});const ERR_MSG_INVALID_IMAGE_SOURCE="Please provide a valid Image Source. Supported image sources are: HTTP(S) URL, Base64 string, Data URL, Output Image from other component(s).",ERR_MSG_INVALID_BINARY="Please provide a valid data that is either a Blob, SmythFileObject (Binary Output from any Component), ArrayBuffer, Buffer, Base64 string, Data URL, or HTTP(s) URL",ERR_MSG_MAX_DEPTH="The maximum depth has been exceeded for the provided array or object.",ERR_MSG_MAX_ARRAY_SIZE="The maximum array size has been exceeded for the provided array.",ERR_MSG_MAX_OBJECT_SIZE="The maximum object size has been exceeded for the provided object.",MAX_DEPTH=10,MAX_OBJECT_SIZE=1e3,MAX_ARRAY_SIZE=1e3,MAX_FILE_SIZE=10*1024*1024,MAX_FILE_COUNT=10,DEFAULT_MAX_TOKENS_FOR_LLM=2048,S3_DAILY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteDaily",S3_WEEKLY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteWeekly",S3_MONTHLY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteMonthly",TOOL_USE_DEFAULT_MODEL="gpt-4o-mini",COMP_NAMES={apiCall:"APICall",code:"Code",llmPrompt:"PromptGenerator",visionLLM:"VisionLLM"},JSON_RESPONSE_INSTRUCTION=`
2
2
  Respond ONLY with a valid, parsable JSON object. Follow these strict guidelines:
3
3
  1. The response must begin with '{' and end with '}'.
4
4
  2. Use double quotes for all keys and string values.
@@ -15,7 +15,7 @@ Example of a valid response:
15
15
  `):void 0}get elapsedTime(){return Date.now()-this.startTime}log(...args){let module=this.labels?.module;const lastArg=args[args.length-1];lastArg instanceof AccessCandidate&&(module+=`,${lastArg.role}<${lastArg.id}>`,args.pop()),this._logger.log("info",formatLogMessage(...args),{...this.labels,module}),this.emit("logged",{level:"info",message:formatLogMessage(...args)})}warn(...args){let module=this.labels?.module;const lastArg=args[args.length-1];lastArg instanceof AccessCandidate&&(module+=`,${lastArg.role}<${lastArg.id}>`,args.pop()),this._logger.log("warn",formatLogMessage(...args),{...this.labels,module}),this.emit("logged",{level:"warn",message:formatLogMessage(...args)})}debug(...args){let module=this.labels?.module;const lastArg=args[args.length-1];lastArg instanceof AccessCandidate&&(module+=`,${lastArg.role}<${lastArg.id}>`,args.pop()),this._logger.log("debug",formatLogMessage(...args),{...this.labels,module}),this.emit("logged",{level:"debug",message:formatLogMessage(...args)})}info(...args){let module=this.labels?.module;const lastArg=args[args.length-1];lastArg instanceof AccessCandidate&&(module+=`,${lastArg.role}<${lastArg.id}>`,args.pop()),this._logger.log("info",formatLogMessage(...args),{...this.labels,module}),this.emit("logged",{level:"info",message:formatLogMessage(...args)})}verbose(...args){let module=this.labels?.module;const lastArg=args[args.length-1];lastArg instanceof AccessCandidate&&(module+=`,${lastArg.role}<${lastArg.id}>`,args.pop()),this._logger.log("verbose",formatLogMessage(...args),{...this.labels,module}),this.emit("logged",{level:"verbose",message:formatLogMessage(...args)})}error(...args){let module=this.labels?.module;const lastArg=args[args.length-1];lastArg instanceof AccessCandidate&&(module+=`,${lastArg.role}<${lastArg.id}>`,args.pop());const stack=`
16
16
  Call Stack:
17
17
  `+getFormattedStackTrace(10).join(`
18
- `);this._logger.log("error",formatLogMessage(...args),{...this.labels,stack,module}),this.emit("logged",{level:"error",message:formatLogMessage(...args)})}close(){this._logger.clear(),this._logger.close()}}winston.format.printf(info=>`${info.timestamp} ${winston.format.colorize().colorize(info.level,`${info.level}: ${info.message}`)}`);const MAX_LOG_MESSAGE_LENGTH=500;function redactLogMessage(logMessage){if(config.env.NODE_ENV!=="PROD"||logMessage.length>500)return logMessage;const sensitiveWords=["password","eyJ","token","email","secret","key","apikey","api_key","auth","credential"],obfuscatedString=" [!! SmythOS::REDACTED_DATA !!] ";for(const sensitiveWord of sensitiveWords){const regex=new RegExp(`(${sensitiveWord})((?:[^\\n]{0,29}(?=\\n))|(?:[^\\n]{30}\\S*))`,"gmi");logMessage=logMessage.replace(regex,`$1${obfuscatedString}`)}return logMessage}function createBaseLogger(memoryStore){const logger2=winston.createLogger({format:winston.format.combine(winston.format(info=>config.env.LOG_LEVEL=="none"||logLevel()=="none"||logLevel()==""?!1:(info.message=redactLogMessage(info.message),info))(),winston.format.timestamp(),winston.format.errors({stack:!0}),winston.format.splat(),winston.format.json()),transports:[new winston.transports.Console({level:"error",format:winston.format.combine(winston.format.printf(info=>{let message=info.message;return message=message?.length>MAX_LOG_MESSAGE_LENGTH?message.substring(0,MAX_LOG_MESSAGE_LENGTH)+"...":message,`${info.level}:${info.module||""} ${message} ${info.stack||""}`})),stderrLevels:["error"]}),new winston.transports.Console({level:logLevel(),format:winston.format.combine(namespaceFilter,winston.format.printf(info=>{const module=info.module?winston.format.colorize().colorize(info.level,` [${info.module}]`):"",ns=winston.format.colorize().colorize(info.level,`${info.level}${module}`);let message=info.message;return message=message?.length>MAX_LOG_MESSAGE_LENGTH?message.substring(0,MAX_LOG_MESSAGE_LENGTH)+"...":message,`${ns} - ${message}`}))})]});return Array.isArray(memoryStore)&&logger2.add(new ArrayTransport({level:"debug",logs:memoryStore})),logger2}function formatLogMessage(...args){return args.map(arg=>{if(typeof arg=="object"&&arg!==null&&!(arg instanceof Error))try{return JSON.stringify(arg,null,2)}catch{return String(arg)}return String(arg)}).join(" ")}function createLabeledLogger(labels,memoryStore){const _logger=createBaseLogger(memoryStore);return _logger.defaultMeta=labels,new LogHelper(_logger,memoryStore,labels)}function Logger(module,withMemoryStore=!1){return createLabeledLogger(typeof module=="string"?{module}:module,withMemoryStore?[]:void 0)}const DummyConnector=name=>{const logger2=Logger(`DummyConnector<${name}>`);return new Proxy({},{get:function(target,prop,receiver){return prop==="valid"?!1:typeof target[prop]=="function"?target[prop]:function(...args){const argsString=args.length>0?args.map(arg=>typeof arg=="object"?JSON.stringify(arg,null,0).slice(0,50)+"...":typeof arg=="string"?`"${arg.slice(0,50)}..."`:typeof arg=="number"||typeof arg=="boolean"||typeof arg=="function"||typeof arg=="symbol"?arg.toString():typeof arg>"u"?"undefined":String(arg)).join(", "):"(no arguments)";logger2.warn(`[!!] Unimplemented Connector tried to call: ${name}.${prop.toString()}(${argsString})`),printStackTrace(logger2,3,1)}}})};var __defProp$1S=Object.defineProperty,__defNormalProp$1S=(obj,key,value)=>key in obj?__defProp$1S(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1S=(obj,key,value)=>__defNormalProp$1S(obj,typeof key!="symbol"?key+"":key,value);class LocalCache{constructor(defaultTTL=60*60*1e3){__publicField$1S(this,"cache"),__publicField$1S(this,"expiryMap"),__publicField$1S(this,"timeouts"),__publicField$1S(this,"defaultTTL",60*60*1e3),this.defaultTTL=defaultTTL,this.cache=new Map,this.expiryMap=new Map,this.timeouts=new Map}set(key,value,ttlMs=this.defaultTTL){this.cache.set(key,value);const expiry=Date.now()+ttlMs;this.expiryMap.set(key,expiry),this.clearTimeout(key);const timeout=setTimeout(()=>{this.delete(key)},ttlMs);this.timeouts.set(key,timeout),timeout.unref()}updateTTL(key,ttlMs=this.defaultTTL){if(!this.has(key))return;const expiry=Date.now()+ttlMs;this.expiryMap.set(key,expiry),this.clearTimeout(key);const timeout=setTimeout(()=>{this.delete(key)},ttlMs);this.timeouts.set(key,timeout),timeout.unref()}get(key,ttlMs){if(!this.has(key))return;const value=this.cache.get(key);if(value!==void 0)return this.updateTTL(key,ttlMs),value}has(key){if(!this.cache.has(key))return!1;const expiry=this.expiryMap.get(key);return expiry&&Date.now()>expiry?(this.delete(key),!1):!0}delete(key){return this.clearTimeout(key),this.expiryMap.delete(key),this.cache.delete(key)}clear(){for(const key of this.cache.keys())this.clearTimeout(key);this.cache.clear(),this.expiryMap.clear(),this.timeouts.clear()}clearTimeout(key){const timeout=this.timeouts.get(key);timeout&&(clearTimeout(timeout),this.timeouts.delete(key))}}var __defProp$1R=Object.defineProperty,__defNormalProp$1R=(obj,key,value)=>key in obj?__defProp$1R(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1R=(obj,key,value)=>__defNormalProp$1R(obj,typeof key!="symbol"?key+"":key,value);const logger$g=Logger("Connector"),_Connector=class _Connector2{constructor(_settings){this._settings=_settings,__publicField$1R(this,"name"),__publicField$1R(this,"started",!1),__publicField$1R(this,"_interactionHandler"),__publicField$1R(this,"_readyPromise")}get settings(){return this._settings}get interactionHandler(){return this._interactionHandler}get valid(){return!0}setInteraction(handler){this._interactionHandler=handler}instance(settings){const configHash=createHash("sha256").update(JSON.stringify(settings||{})).digest("hex"),key=`${this.name}-${configHash}`;if(_Connector2.lCache.has(key))return _Connector2.lCache.get(key);const constructor=this.constructor,instance=new constructor(settings);return _Connector2.lCache.set(key,instance,60*60*1e3),instance}static isValid(connector){return connector.name!==void 0&&connector.name!==null&&connector.name!==""}async start(){logger$g.info(`Starting ${this.name} connector ...`),this.started=!0}async stop(){logger$g.info(`Stopping ${this.name} connector ...`)}ready(){return this._readyPromise||(this._readyPromise=new Promise(resolve=>{let maxWait=6e4;const tick=100;if(this.started)resolve(!0);else{const interval=setInterval(()=>{this.started&&(clearInterval(interval),resolve(!0)),maxWait-=tick,maxWait<=0&&(clearInterval(interval),resolve(!1))},tick)}})),this._readyPromise}requester(candidate){return null}user(candidate){return typeof candidate=="string"?this.requester(AccessCandidate.user(candidate)):this.requester(candidate)}team(teamId){return this.requester(AccessCandidate.team(teamId))}agent(agentId){return this.requester(AccessCandidate.agent(agentId))}handleEvent(eventName,data){logger$g.debug(`Connector ${this.name} received event ${eventName} `)}};__publicField$1R(_Connector,"lCache",new LocalCache);let Connector=_Connector;Logger("SystemEvents");const SystemEvents=new EventEmitter;var __defProp$1Q=Object.defineProperty,__defNormalProp$1Q=(obj,key,value)=>key in obj?__defProp$1Q(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1Q=(obj,key,value)=>__defNormalProp$1Q(obj,typeof key!="symbol"?key+"":key,value);const console$y=Logger("ConnectorService");let ServiceRegistry={},_ready=!1;SystemEvents.on("SRE:Booted",services=>{ServiceRegistry=services,_ready=!0});const _ConnectorService=class _ConnectorService2{static get ready(){return _ready}static get service(){return ServiceRegistry}static register(connectorType,connectorName,connectorConstructor){if(typeof connectorConstructor!="function"||!isSubclassOf(connectorConstructor,Connector)){console$y.error(`Invalid Connector ${connectorType}:${connectorName}`);return}_ConnectorService2.Connectors[connectorType]||(_ConnectorService2.Connectors[connectorType]={}),_ConnectorService2.Connectors[connectorType][connectorName]=connectorConstructor}static init(connectorType,connectorName,connectorId,settings={},isDefault=!1){if(_ConnectorService2.ConnectorInstances[connectorType]?.[connectorName])throw new Error(`Connector ${connectorType}:${connectorName} already initialized`);const entry=_ConnectorService2.Connectors[connectorType];if(!entry)return;const connectorConstructor=entry[connectorName];if(connectorConstructor){const connector=new connectorConstructor(settings);connector.interactionHandler&&connector.interactionHandler(),connector.start(),_ConnectorService2.ConnectorInstances[connectorType]||(_ConnectorService2.ConnectorInstances[connectorType]={});const id=connectorId||connectorName;return _ConnectorService2.ConnectorInstances[connectorType][id]=connector,!_ConnectorService2.ConnectorInstances[connectorType].default&&isDefault&&(_ConnectorService2.ConnectorInstances[connectorType].default=connector),connector}}static async _stop(){for(let connectorName in _ConnectorService2.ConnectorInstances){let allConnectors=Object.values(_ConnectorService2.ConnectorInstances[connectorName]);allConnectors=allConnectors.filter((value,index,self)=>self.indexOf(value)===index);for(let connector of allConnectors)connector.stop()}}static getInstance(connectorType,connectorName="default"){return _ConnectorService2.ConnectorInstances[connectorType]?.[connectorName||"default"]||(console$y.warn(`Connector ${connectorType} not initialized returning DummyConnector`),printStackTrace(console$y,5),DummyConnector(connectorType))}static getStorageConnector(name){return _ConnectorService2.getInstance(TConnectorService.Storage,name)}static getCacheConnector(name){return _ConnectorService2.getInstance(TConnectorService.Cache,name)}static getVectorDBConnector(name){return _ConnectorService2.getInstance(TConnectorService.VectorDB,name)}static getNKVConnector(name){return _ConnectorService2.getInstance(TConnectorService.NKV,name)}static getLLMConnector(name){return _ConnectorService2.getInstance(TConnectorService.LLM,name)}static getVaultConnector(name){return _ConnectorService2.getInstance(TConnectorService.Vault,name)}static getManagedVaultConnector(name){return _ConnectorService2.getInstance(TConnectorService.ManagedVault,name)}static getAccountConnector(name){return _ConnectorService2.getInstance(TConnectorService.Account,name)}static getAgentDataConnector(name){return _ConnectorService2.getInstance(TConnectorService.AgentData,name)}static getCLIConnector(name){return _ConnectorService2.getInstance(TConnectorService.CLI,name)}static getLogConnector(name){return _ConnectorService2.getInstance(TConnectorService.Log,name)}static getComponentConnector(name){return _ConnectorService2.getInstance(TConnectorService.Component,name)}static getModelsProviderConnector(name){return _ConnectorService2.getInstance(TConnectorService.ModelsProvider,name)}static hasInstance(connectorType,connectorName="default"){const instance=_ConnectorService2.ConnectorInstances[connectorType]?.[connectorName];return instance&&instance.valid}static getRouterConnector(name){return _ConnectorService2.getInstance(TConnectorService.Router,name)}static getCodeConnector(name){return _ConnectorService2.getInstance(TConnectorService.Code,name)}static getSchedulerConnector(name){return _ConnectorService2.getInstance(TConnectorService.Scheduler,name)}};__publicField$1Q(_ConnectorService,"Connectors",{}),__publicField$1Q(_ConnectorService,"ConnectorInstances",{});let ConnectorService=_ConnectorService;class ConnectorServiceProvider{init(){}constructor(){this.register()}}class VaultHelper{static async getTeamKey(key,teamId){return await ConnectorService.getVaultConnector().requester(AccessCandidate.team(teamId)).get(key)}static async getUserKey(key,userId){const vaultConnector=ConnectorService.getVaultConnector(),teamId=await ConnectorService.getAccountConnector().getCandidateTeam(AccessCandidate.user(userId));return await vaultConnector.requester(AccessCandidate.team(teamId)).get(key)}static async getAgentKey(key,agentId){const vaultConnector=ConnectorService.getVaultConnector(),teamId=await ConnectorService.getAccountConnector().getCandidateTeam(AccessCandidate.agent(agentId));return await vaultConnector.requester(AccessCandidate.team(teamId)).get(key)}}var __defProp$1P=Object.defineProperty,__defNormalProp$1P=(obj,key,value)=>key in obj?__defProp$1P(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1P=(obj,key,value)=>__defNormalProp$1P(obj,typeof key!="symbol"?key+"":key,value);const Match={default:/{{(.*?)}}/g,doubleCurly:/{{(.*?)}}/g,singleCurly:/{(.*?)}/g,doubleCurlyForSingleMatch:/{{(.*?)}}/,templateVariables:/{{([A-Z]+):([\w\s]+):[\[{](.*?)[\]}]}}/gm,prefix(prefix){return new RegExp(`{{${prefix}(.*?)}}`,"g")},suffix(suffix){return new RegExp(`{{(.*?)${suffix}}}`,"g")},prefSuf(prefix,suffix){return new RegExp(`{{${prefix}(.*?)${suffix}}}`,"g")},fn(name){return new RegExp(`{{${name}\\((.*?)\\)}}`,"g")}},TPLProcessor={vaultTeam(teamId){return async token=>{try{return await VaultHelper.getTeamKey(token,teamId)}catch{return token}}},componentTemplateVar(templateSettings){return async(token,matches)=>{try{const label=matches[2];if(!label)return token;const entry=Object.values(templateSettings).find(o=>o.label==label);return entry?`{{${entry.id}}}`:token}catch{return token}}}};class TemplateStringHelper{constructor(templateString){this.templateString=templateString,__publicField$1P(this,"_current"),__publicField$1P(this,"_promiseQueue",[]),this._current=templateString}get result(){if(this._promiseQueue.length<=0)return this._current;throw new Error("This template object has async results, you should use .asyncResult with await instead of .result")}get asyncResult(){return new Promise(async(resolve,reject)=>{await Promise.all(this._promiseQueue),resolve(this._current)})}static create(templateString){return new TemplateStringHelper(templateString)}parse(data,regex=Match.default,maxDepth=5){if(typeof this._current!="string"||typeof data!="object")return this;for(let i=0;i<maxDepth;i++){const previous=this._current;if(this._current=this._current.replace(regex,(match,token)=>{let val=data?.[token]??match;return data?.[token]||(val=JSONExpression$1(data,token)||`{{${token}}}`),typeof val=="object"?JSON.stringify(val):escapeJsonField(val)}),previous===this._current)break}return this}parseRaw(data,regex=Match.doubleCurlyForSingleMatch){if(typeof this._current!="string"||typeof data!="object")return this;const match=this._current.match(regex),key=match?match[1]:"";if(key){const value=data?.[key];this._current=value}return this}parseTeamKeysAsync(teamId){return this.process(TPLProcessor.vaultTeam(teamId),Match.fn("KEY"))}parseComponentTemplateVarsAsync(templateSettings){return this.process(TPLProcessor.componentTemplateVar(templateSettings),Match.templateVariables)}process(processor,regex=Match.default){if(typeof this._current!="string")return this;let tokens={},match;const prosessorPromises=[];for(;(match=regex.exec(this._current))!==null;){const token=match[1];tokens[token]=match[0];const _processor=processor(token,match);_processor instanceof Promise?(_processor.then(result=>{if(result===void 0)return match?.[0];tokens[token]=result}),prosessorPromises.push(_processor)):tokens[token]=_processor}return prosessorPromises.length>0?(new Promise(async(resolve,reject)=>{await Promise.all(prosessorPromises),this.parse(tokens,regex),resolve(!0)}),this._promiseQueue.push(Promise.all(prosessorPromises))):this.parse(tokens,regex),this}clean(regex=Match.default,replaceWith=""){return typeof this._current!="string"?this:(this._current=this._current.replace(regex,replaceWith),this)}}function JSONExpression$1(obj,propertyString){const properties=propertyString.split(/\.|\[|\]\.|\]\[|\]/).filter(Boolean);let currentProperty=obj;for(let property of properties){if(currentProperty==null)return;currentProperty=currentProperty[property]}return currentProperty}function escapeString(str){return str&&str.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}function escapeJsonField(str){return typeof str!="string"?str:str.replace(/\\"/g,'"').replace(/"/g,'\\"')}function TemplateString(templateString){return TemplateStringHelper.create(templateString)}var __defProp$1O=Object.defineProperty,__defNormalProp$1O=(obj,key,value)=>key in obj?__defProp$1O(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1O=(obj,key,value)=>__defNormalProp$1O(obj,typeof key!="symbol"?key+"":key,value);const console$x=Logger("AgentLogger.class");class LogTransaction{constructor(agent,trId){this.agent=agent,this.trId=trId,__publicField$1O(this,"_callId",""),__publicField$1O(this,"queue",[]),__publicField$1O(this,"_isProcessing",!1),__publicField$1O(this,"_lastPush",0),__publicField$1O(this,"storage"),this.storage=ConnectorService.getStorageConnector()}async getCallId(){return this._callId}push(logData){ConnectorService.getLogConnector().valid&&(this.queue.push(logData),this._lastPush=Date.now(),this.processQueue())}formatData(data,maxLength=1e3){if(!data)return;let result=typeof data=="string"?data:JSON.stringify(data);return result.length>maxLength&&(result=result.substr(0,maxLength)+"..."),result}getDataFilePath(data,maxLength=1e3){if(data){if((typeof data=="string"?data:JSON.stringify(data)).length>maxLength){const dayFolder=getDayFormattedDate(),trId="L"+uid().toUpperCase();return`${dayFolder}/${trId}`}return null}}prepareData(firstData){let sourceId=firstData.sourceId,componentId=firstData.componentId,input=firstData.input?{preview:this.formatData(firstData.input),full:this.getDataFilePath(firstData.input),action:firstData.input.__action,status:firstData.input.__status}:void 0,output=firstData.output?{preview:this.formatData(firstData.output),full:this.getDataFilePath(firstData.output)}:void 0,domain=firstData.domain,inputTimestamp=firstData.inputTimestamp,outputTimestamp=firstData.outputTimestamp,result=firstData.result?JSON.stringify({preview:this.formatData(firstData.result),full:this.getDataFilePath(firstData.result)}):void 0,sessionID=firstData.sessionID;const sourceData=this.agent.components[sourceId],componentData=this.agent.components[componentId],sourceCptName=sourceData?.name,componentCptName=componentData?.name,sourceName=sourceData?.displayName||sourceData?.name||sourceId,componentName=componentData?.displayName||componentData?.name||componentId,curStepOrder=firstData.step||this.agent?.agentRuntime?.curStep||"",nextStepOrder=curStepOrder+1;sourceCptName&&(sourceId+=`@${sourceCptName}@${curStepOrder}`),componentCptName&&(componentId+=`@${componentCptName}@${nextStepOrder}`);const inputTokens=void 0,outputTokens=void 0,tags=firstData.tags||"";let raw_error=firstData.error||firstData?.output?.error||firstData?.output?._error||firstData?.result?.error||firstData?.result?.result?.error||firstData?.result?._error||firstData?.result?.result?._error;const error=raw_error?JSON.stringify({preview:this.formatData(raw_error),full:this.getDataFilePath(raw_error)}):void 0;return{sourceId,componentId,domain,input,output,inputTimestamp,outputTimestamp,result,error,sourceName,componentName,sessionID,inputTokens,outputTokens,tags,workflowID:firstData.workflowID,processID:firstData.processID,raw_input:firstData.input,raw_output:firstData.output,raw_result:firstData.result,raw_error}}async storeLogData(filePath,content){const logConnector=ConnectorService.getLogConnector();if(!(!logConnector.valid||logConnector.name=="ConsoleLog")&&filePath)try{const body=typeof content=="string"?content:JSON.stringify(content),storagePath=path.posix.join("teams",this.agent.teamId,`logs/${this.agent.id}/${filePath}`),metadata={teamid:this.agent.teamId,agentid:this.agent.id,ContentType:"text/plain"};await this.storage.requester(AccessCandidate.agent(this.agent.id)).write(storagePath,body,void 0,metadata)}catch(error){console$x.error("Error storing Log File : ",filePath,error)}}async processQueue(){const logConnector=ConnectorService.getLogConnector();if(!(!logConnector.valid||this.queue.length<=0||this._isProcessing)){this._isProcessing=!0;try{if(this._callId)for(;this.queue.length>0;){const logData=this.queue.shift(),data=this.prepareData(logData);Object.keys(data).forEach(key=>{data[key]||delete data[key]});const raw_input=data.raw_input,raw_output=data.raw_output,raw_result=data.raw_result,raw_error=data.raw_error;delete data.raw_input,delete data.raw_output,delete data.raw_result,delete data.raw_error;const resultObj=data.result?JSON.parse(data.result):void 0,errorObj=data.error?JSON.parse(data.error):void 0;await this.storeLogData(data?.input?.full,raw_input),await this.storeLogData(data?.output?.full,raw_output),await this.storeLogData(resultObj?.full,raw_result),await this.storeLogData(errorObj?.full,raw_error),await logConnector.requester(AccessCandidate.agent(this.agent.id)).log(data,this._callId)}else{const firstData=this.queue.shift(),data=this.prepareData(firstData),raw_input=data.raw_input,raw_output=data.raw_output,raw_result=data.raw_result,raw_error=data.raw_error;delete data.raw_input,delete data.raw_output,delete data.raw_result,delete data.raw_error;const resultObj=data.result?JSON.parse(data.result):void 0,errorObj=data.error?JSON.parse(data.error):void 0;await this.storeLogData(data?.input?.full,raw_input),await this.storeLogData(data?.output?.full,raw_output),await this.storeLogData(resultObj?.full,raw_result),await this.storeLogData(errorObj?.full,raw_error);const logResult=await logConnector.requester(AccessCandidate.agent(this.agent.id)).log(data);this._callId=logResult?.data?.log?.id}}catch(error){console$x.error("Error processing log queue:",error?.response?.data?.message||error)}this._isProcessing=!1,debounce(this.processQueue.bind(this),1e3,{leading:!0,maxWait:1e4}),await delay(1e3),this.processQueue()}}canDelete(){return this.queue.length>0?(this.processQueue(),!1):this._lastPush!=0&&this._lastPush+1e3*60*60*1<Date.now()}}const _AgentLogger=class _AgentLogger2{constructor(agent){this.agent=agent}static async cleanup(){if(!ConnectorService.getLogConnector().valid)return;const trIds=Object.keys(_AgentLogger2.transactions);for(const trId of trIds)_AgentLogger2.transactions[trId].canDelete()&&delete _AgentLogger2.transactions[trId]}static log(agent,trId,logData){if(ConnectorService.getLogConnector().valid)return(agent?.agentRuntime?.debug||agent?.debugSessionEnabled)&&(logData.tags="DEBUG "),trId||(trId="log-"+uid()),this.transactions[trId]||(this.transactions[trId]=new LogTransaction(agent,trId)),this.transactions[trId].push(logData),debounce(this.cleanup.bind(this),1e3,{leading:!0,maxWait:1e4*1}),trId}static async logTask(agent,tasks){const logConnector=ConnectorService.getLogConnector();logConnector.valid&&(agent.usingTestDomain||await logConnector.requester(AccessCandidate.agent(agent.id)).logTask(tasks,agent.usingTestDomain),debounce(this.cleanup.bind(this),1e3,{leading:!0,maxWait:1e4*1}))}};__publicField$1O(_AgentLogger,"transactions",{}),__publicField$1O(_AgentLogger,"cleanupInterval");let AgentLogger=_AgentLogger;var __defProp$1N=Object.defineProperty,__defNormalProp$1N=(obj,key,value)=>key in obj?__defProp$1N(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1N=(obj,key,value)=>__defNormalProp$1N(obj,typeof key!="symbol"?key+"":key,value);class LLMCache{constructor(candidate,cacheId,ttl=1*60*60){__publicField$1N(this,"_cacheConnector"),__publicField$1N(this,"_cacheId"),__publicField$1N(this,"_ttl"),__publicField$1N(this,"_candidate"),this._cacheConnector=ConnectorService.getCacheConnector(),this._cacheId=cacheId||"llm_cache_"+uid(),this._ttl=ttl,this._candidate=candidate}get id(){return this._cacheId}async set(key,data){this._cacheConnector.valid&&await this._cacheConnector.requester(this._candidate).set(`${this._cacheId}:${key}`,typeof data=="object"?JSON.stringify(data):data,null,null,this._ttl)}async get(key,format="json"){if(!this._cacheConnector.valid)return;const obj=await this._cacheConnector.requester(this._candidate).get(`${this._cacheId}:${key}`);let result;if(format==="json")try{result=JSON.parse(obj)}catch{console.warn(`Invalid JSON data for key ${key}`),result=null}else result=obj;return result}async delete(key){this._cacheConnector.valid&&await this._cacheConnector.requester(this._candidate).delete(`${this._cacheId}:${key}`)}async clear(){this._cacheConnector.valid&&await this._cacheConnector.requester(this._candidate).delete(this._cacheId)}}var __defProp$1M=Object.defineProperty,__defNormalProp$1M=(obj,key,value)=>key in obj?__defProp$1M(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1M=(obj,key,value)=>__defNormalProp$1M(obj,typeof key!="symbol"?key+"":key,value);const console$w=Logger("RuntimeContext");class RuntimeContext extends EventEmitter$1{constructor(runtime){super(),this.runtime=runtime,__publicField$1M(this,"circularLimitReached",!1),__publicField$1M(this,"step",0),__publicField$1M(this,"sessionResult",!1),__publicField$1M(this,"sessionResults"),__publicField$1M(this,"components",{}),__publicField$1M(this,"checkRuntimeContext",null),__publicField$1M(this,"ctxFile",""),__publicField$1M(this,"_runtimeFileReady"),__publicField$1M(this,"_cacheConnector"),__publicField$1M(this,"_readyPromise"),__publicField$1M(this,"_lastCtxLength",0),__publicField$1M(this,"_syncQueue",Promise.resolve());const agent=runtime.agent;this._cacheConnector=ConnectorService.getCacheConnector();const reqId=(runtime.processID?.split(":")[0]||"")==runtime.xDebugId?"":"."+uid()+runtime.reqTag;this.ctxFile=`${runtime.xDebugId}${reqId}${agent.jobID?`-job-${agent.jobID}`:""}`,this._readyPromise=new Promise((resolve,reject)=>{let resolved=!1;this.on("ready",()=>{resolved=!0,resolve(!0)}),setTimeout(()=>{resolved||reject(new Error("Agent Runtime context initialization timeout"))},5*60*1e3).unref()}),this.initRuntimeContext()}serialize(){return{step:this.step,sessionResult:this.sessionResult,sessionResults:this.sessionResults,components:this.components}}deserialize(data){this.step=data.step,this.sessionResult=data.sessionResult,this.sessionResults=data.sessionResults,this.components=data.components}reset(){this.step=0,this.sessionResult=!1,this.sessionResults=null,this.components={}}initRuntimeContext(){if(this._runtimeFileReady)return;console$w.debug("Init Agent Context",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id));const agent=this.runtime.agent;let ctxData={};this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).get(this.ctxFile).then(async data=>{if(data)ctxData=JSON.parse(data),ctxData.step||(ctxData.step=0);else{ctxData=JSON.parse(JSON.stringify({components:agent.components,connections:agent.connections,timestamp:Date.now()})),ctxData.step||(ctxData.step=0);for(let cptId in ctxData.components)ctxData.components[cptId]={id:cptId,name:ctxData.components[cptId].name,ctx:{active:!1,name:ctxData.components[cptId].name}};await this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).set(this.ctxFile,JSON.stringify(ctxData),null,null,1*60*60)}this.deserialize(ctxData),this._runtimeFileReady=!0,this.emit("ready")})}async ready(){return this._runtimeFileReady?!0:this._readyPromise}async sync(){if(!this.ctxFile)return;this.emit("syncing");const deleteSession=this.runtime.sessionClosed,data=this.serialize();if(data){let serializedData=JSON.stringify(data);serializedData.length!=this._lastCtxLength&&(console$w.debug("Agent Context Size",this.ctxFile,serializedData.length,AccessCandidate.agent(this.runtime.agent.id)),this._lastCtxLength=serializedData.length),await this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).set(this.ctxFile,serializedData,null,null,3*60*60);const cooldown=serializedData.length/1024/1024/10*1e3;serializedData=null,await delay(cooldown)}deleteSession&&await this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).exists(this.ctxFile)&&(console$w.debug("Agent Context Delete",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id)),this.runtime.debug?this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).updateTTL(this.ctxFile,5*60):this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).delete(this.ctxFile),this.ctxFile=null)}enqueueSync(){this.ctxFile&&(this._syncQueue=this._syncQueue.then(()=>this.sync()).catch(err=>{console$w.error("Error syncing context",err)}))}incStep(){this.step++}updateComponent(componentId,data){const ctxData=this;if(!ctxData)return;const component=ctxData.components[componentId];component||(console$w.debug(">>>>>>> updateComponent Component debug data not found",componentId,component,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxFile",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxData",ctxData,AccessCandidate.agent(this.runtime.agent.id))),component.ctx||(component.ctx={active:!1,name:"",step:0}),Object.assign(component.ctx,data),component.ctx.step=this.step,this.enqueueSync()}resetComponent(componentId){const ctxData=this,component=ctxData.components[componentId];component||(console$w.debug(">>>>>>> resetComponent Component debug data not found",componentId,component,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxFile",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxData",ctxData,AccessCandidate.agent(this.runtime.agent.id))),component.ctx.runtimeData={},component.ctx.active=!1,this.runtime.debug||(component.ctx.input=void 0,component.ctx.output=void 0),this.enqueueSync()}getComponentData(componentId){const ctxData=this;if(!ctxData)return null;const component=ctxData.components[componentId];return component||(console$w.debug(">>>>>>> getComponentData Component debug data not found",componentId,component,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxFile",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxData",ctxData,AccessCandidate.agent(this.runtime.agent.id))),component.ctx}}var __defProp$1L=Object.defineProperty,__defNormalProp$1L=(obj,key,value)=>key in obj?__defProp$1L(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1L=(obj,key,value)=>__defNormalProp$1L(obj,typeof key!="symbol"?key+"":key,value);const console$v=Logger("AgentRuntime"),AgentRuntimeUnavailable=new Proxy({},{get:function(target,prop,receiver){return typeof target[prop]=="function"?target[prop]:function(){console$v.warn(`AgentRuntime Unavailable tried to call : ${prop.toString()}`)}}}),_AgentRuntime=class _AgentRuntime2{constructor(agent){this.agent=agent,__publicField$1L(this,"agentContext"),__publicField$1L(this,"llmCache"),__publicField$1L(this,"xDebugRun",""),__publicField$1L(this,"xDebugInject",""),__publicField$1L(this,"xDebugRead",""),__publicField$1L(this,"xDebugStop",""),__publicField$1L(this,"xDebugPendingInject",null),__publicField$1L(this,"xMockDataInject",null),__publicField$1L(this,"xDebugId",""),__publicField$1L(this,"xDebugCmd",""),__publicField$1L(this,"_debugActive",!1),__publicField$1L(this,"_runtimeFileReady",!1),__publicField$1L(this,"sessionClosed",!1),__publicField$1L(this,"reqTagOwner",!1),__publicField$1L(this,"reqTag"),__publicField$1L(this,"processID"),__publicField$1L(this,"workflowReqId"),__publicField$1L(this,"alwaysActiveComponents",{}),__publicField$1L(this,"exclusiveComponents",{}),__publicField$1L(this,"checkRuntimeContext",null),this.reqTag=agent.agentRequest.header("X-REQUEST-TAG");const isNestedProcess=!!this.reqTag;this.reqTag?(this.xDebugStop=void 0,this.xDebugRun=void 0,this.xDebugInject=void 0,this.xDebugRead=void 0):(this.xDebugStop=agent.agentRequest.header("X-DEBUG-STOP"),this.xDebugRun=agent.agentRequest.header("X-DEBUG-RUN"),this.xDebugInject=agent.agentRequest.header("X-DEBUG-INJ"),this.xDebugRead=agent.agentRequest.header("X-DEBUG-READ"),this.reqTag="xTAG-"+uid(),this.reqTagOwner=!0),this.xDebugId=this.xDebugStop||this.xDebugRun||this.xDebugRead,!this.xDebugId&&agent.agentRequest.body&&(this.xDebugInject!=null&&this.xDebugInject!=null?(this.xDebugPendingInject=agent.agentRequest.body,this.xDebugRun=this.xDebugInject||"inj-"+uid()):this.xDebugRun==""&&(this.xDebugRun="dbg-"+uid()),this.xDebugId=this.xDebugRun),agent.agentRequest.header("X-MOCK-DATA-INJ")!==void 0&&(this.xMockDataInject=agent.agentRequest.body),this.processID=this.xDebugId,this.xDebugId||(this.xDebugId=agent.sessionId,this.processID=this.reqTag),isNestedProcess&&(this.processID+=`:${Math.floor(1e3+Math.random()*9e3)}`),this.workflowReqId=this.xDebugRun||this.xDebugStop||this.reqTag,_AgentRuntime2.tagsData[this.reqTag]||(_AgentRuntime2.tagsData[this.reqTag]={}),_AgentRuntime2.processResults[this.processID]||(_AgentRuntime2.processResults[this.processID]={timestamp:Date.now(),errorResults:[],sessionResults:[]}),this.agentContext=new RuntimeContext(this),this.agentContext.on("ready",()=>{let method=(agent.agentRequest.method||"POST").toUpperCase();const endpoint=agent.endpoints?.[agent.agentRequest.path]?.[method],trigger=agent.triggers?.[agent.agentRequest.path],endpointDBGCall=this.xDebugId?.startsWith("dbg-");this.alwaysActiveComponents={},this.exclusiveComponents={};for(let component of this.agent.data.components){const cpt=this.agent.ComponentInstances[component.name];if(!cpt){console$v.warn(`Component ${component.name} Exists in agent but has no implementation`,AccessCandidate.agent(this.agent.id));continue}if(trigger&&trigger.id!=null&&component.id==trigger.id&&this.xDebugId?.startsWith("dbg-")&&this.updateComponent(component.id,{active:!0}),endpoint&&endpoint.id!=null&&component.id==endpoint.id&&endpointDBGCall&&this.updateComponent(component.id,{active:!0}),cpt.alwaysActive){this.alwaysActiveComponents[component.id]=cpt,this.updateComponent(component.id,{active:!0,alwaysActive:!0});const runtimeData={...this.getRuntimeData(component.id)};this.saveRuntimeComponentData(component.id,runtimeData)}if(cpt.exclusive){this.exclusiveComponents[component.id]=cpt,this.updateComponent(component.id,{exclusive:!0});const runtimeData={...this.getRuntimeData(component.id)};this.saveRuntimeComponentData(component.id,runtimeData)}}}),this._debugActive=this.xDebugId!=agent.sessionId;const xCacheId=agent.agentRequest.header("X-CACHE-ID")||"";this.llmCache=new LLMCache(AccessCandidate.agent(this.agent.id),xCacheId)}get circularLimitReached(){return this.agentContext?.circularLimitReached||!1}set circularLimitReached(value){this.agentContext&&(this.agentContext.circularLimitReached=value)}get debug(){return this._debugActive}get curStep(){return this.agentContext?.step||0}async ready(){return this.agentContext.ready()}destroy(){this.sessionClosed=!0,this.sync()}incTag(componentId){_AgentRuntime2.tagsData[this.reqTag][componentId]||(_AgentRuntime2.tagsData[this.reqTag][componentId]=0),_AgentRuntime2.tagsData[this.reqTag][componentId]++}async sync(){(this.reqTagOwner&&this.sessionClosed||this.circularLimitReached)&&delete _AgentRuntime2.tagsData[this.reqTag],this.agentContext.enqueueSync()}getWaitingComponents(){const ctxData=this.agentContext;return Object.values(ctxData?.components||[]).filter(c=>c?.ctx?.active==!0).filter(c=>c?.ctx?.status&&typeof c?.ctx?.output!==void 0)}getExclusiveActiveComponents(){const ctxData=this.agentContext;return Object.values(ctxData?.components||[]).filter(c=>c?.ctx?.active==!0).filter(c=>c?.ctx?.exclusive==!0)}readState(stateId,deltaOnly=!1){if(!this._debugActive||!stateId)return null;const runtime=this,agent=this.agent,ctxData=runtime.agentContext,dbgAllComponents=runtime.xDebugPendingInject||Object.values(ctxData?.components||[]);let dbgActiveComponents;dbgActiveComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0&&c?.ctx?.exclusive==!0),(!dbgActiveComponents||dbgActiveComponents.length==0)&&(dbgActiveComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0||!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0)),dbgAllComponents.filter(c=>c?.ctx?.active==!0&&c?.ctx?.status&&typeof c?.ctx?.output!==void 0),dbgAllComponents.filter(c=>c?.ctx?.active==!0&&!c?.ctx?.status);let state={};for(let dbgComponent of dbgAllComponents)state[dbgComponent.id]=dbgComponent.ctx;let dbgSession=stateId;(!dbgActiveComponents||dbgActiveComponents.length==0)&&(dbgSession=null,runtime.sessionClosed=!0);const remainingActiveComponents=Object.values(ctxData?.components||[]).filter(c=>c?.ctx?.active==!0&&!c?.ctx?.alwaysActive),activeAsyncComponents=Object.values(ctxData?.components||[]).filter(c=>!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0);if(remainingActiveComponents.length==0&&activeAsyncComponents.length==0&&(runtime.sessionClosed=!0),runtime.circularLimitReached){const error=`Circular Calls Limit Reached on ${runtime.checkCircularLimit()}. Current agent circular limit is ${agent.circularLimit}`;return runtime.sessionClosed=!0,{state,dbgSession,sessionClosed:runtime.sessionClosed,error}}const step=this.curStep>=1?this.curStep-1:0;if(deltaOnly){const delta={};for(let cptId in state){const cpt=state[cptId];cpt.step>=step&&(delta[cptId]=cpt)}state=delta}return{state,dbgSession,sessionClosed:runtime.sessionClosed,step}}async runCycle(){console$v.debug(`runCycle agentId=${this.agent.id} wfReqId=${this.workflowReqId} reqTag=${this.reqTag} session=${this.xDebugRun} cycleId=${this.processID}`,AccessCandidate.agent(this.agent.id));const runtime=this,agent=this.agent,ctxData=runtime.agentContext,dbgAllComponents=runtime.xDebugPendingInject||Object.values(ctxData?.components||[]);let dbgActiveComponents;dbgActiveComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0&&c?.ctx?.exclusive==!0),(!dbgActiveComponents||dbgActiveComponents.length==0)&&(dbgActiveComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0||!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0));const dbgActiveWaitingComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0&&c?.ctx?.status&&typeof c?.ctx?.output!==void 0),dbgActiveReadyComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0&&!c?.ctx?.status||!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0);let step;if((!dbgActiveComponents||dbgActiveComponents.length==0)&&(runtime.sessionClosed=!0,step={state:{sessionClosed:!0},dbgSession:null,expiredDbgSession:runtime.xDebugId,sessionClosed:!0}),!step&&dbgActiveComponents.length==dbgActiveWaitingComponents.length&&ctxData.sessionResult&&(runtime.sessionClosed=!0,step={state:{sessionClosed:!0},dbgSession:null,expiredDbgSession:runtime.xDebugId,sessionClosed:!0}),!step&&dbgActiveReadyComponents.length>0){const promises=[];for(let dbgComponent of dbgActiveReadyComponents){const injectInput=runtime.xDebugPendingInject?dbgComponent.ctx.input:void 0;promises.push(agent.callComponent(dbgComponent.ctx.sourceId,dbgComponent.id,injectInput))}const dbgResults=await Promise.all(promises),state=dbgResults.length==1?dbgResults[0]:dbgResults;runtime.xDebugPendingInject=null;const remainingActiveComponents=Object.values(ctxData?.components||[]).filter(c=>c?.ctx?.active==!0),activeAsyncComponents=Object.values(ctxData?.components||[]).filter(c=>!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0);dbgAllComponents.filter(c=>c?.ctx?.status&&typeof c?.ctx?.output!==void 0).length==remainingActiveComponents.length&&(ctxData.sessionResult=!0);const triggers=Object.values(agent.triggers);let triggersResults=dbgResults.flat().filter(e=>e.id&&e.result&&!e.result._missing_inputs&&!e.result._in_progress&&triggers.find(t=>t.id==e.id)),sessionResults=dbgResults.flat().filter(e=>e.id&&e.result&&!e.result._missing_inputs&&!agent.connections.find(c=>c.sourceId==e.id));sessionResults=sessionResults.concat(triggersResults);let errorResults=dbgResults.flat().filter(e=>e.id&&(e.error||e.result?._error));errorResults=errorResults.filter(e=>!ctxData?.components?.[e.id]?.ctx?.runtimeData?._ChildLoopData),ctxData.sessionResult&&sessionResults.length==0&&runtime.sessionClosed&&(sessionResults=errorResults),ctxData.sessionResults=sessionResults,step={state,dbgSession:runtime.xDebugRun,sessionResult:runtime.agentContext.sessionResult,sessionResults:runtime.agentContext.sessionResults,errorResults,sessionClosed:remainingActiveComponents.length==0&&activeAsyncComponents.length==0}}else runtime.sessionClosed=!0,step={state:{sessionClosed:!0},dbgSession:null,expiredDbgSession:runtime.xDebugId,sessionClosed:!0};if(this.checkCircularLimit(),step.sessionResults&&_AgentRuntime2.processResults[this.processID].sessionResults.push(step.sessionResults),step.errorResults&&_AgentRuntime2.processResults[this.processID].errorResults.push(step.errorResults),step?.sessionClosed||this.circularLimitReached){const finalResult=this.processResults();step.finalResult=finalResult,runtime.sessionClosed=!0}return this.incStep(),this.sync(),step}processResults(){let result={error:"Error processing results"};const sessionResults=_AgentRuntime2.processResults[this.processID].sessionResults,errorResults=_AgentRuntime2.processResults[this.processID].errorResults;if(this.circularLimitReached)result={error:`Circular Calls Limit Reached on ${this.circularLimitReached}. Current circular limit is ${this.agent.circularLimit}`};else{let _state=[sessionResults,errorResults].flat(1/0);(!_state||_state.length==0)&&(_state=errorResults.flat(1/0)),result=_state.reduce((acc,current)=>(acc.seen[current.id]||(acc.result.push(current),acc.seen[current.id]=!0),acc),{seen:{},result:[]}).result.filter(e=>!e.result?._exclude)}return delete _AgentRuntime2.processResults[this.processID],this.sync(),result}checkCircularLimit(){if(this.circularLimitReached)return this.agentContext.circularLimitReached;for(let componentId in _AgentRuntime2.tagsData[this.reqTag])if(_AgentRuntime2.tagsData[this.reqTag][componentId]>this.agent.circularLimit)return this.sessionClosed=!0,this.agentContext.circularLimitReached=componentId,componentId;return!1}async injectDebugOutput(componentId){let component={};if(this.xDebugPendingInject?component=this.xDebugPendingInject?.find(c=>c.id==componentId):this.xMockDataInject&&(component=this.xMockDataInject?.find(c=>c.id==componentId)),component?.ctx?.output){let allEmpty=!0;for(let key in component.ctx.output)if(component.ctx.output[key]!=""){allEmpty=!1;break}return allEmpty?null:component.ctx.output}}getRuntimeData(componentId){const componentData=this.getComponentData(componentId);return componentData?componentData.runtimeData||{}:{}}updateRuntimeData(componentId,data){const componentData=this.getComponentData(componentId);componentData&&(componentData.runtimeData={...componentData.runtimeData,...data},this.sync())}saveRuntimeComponentData(componentId,data){this.updateComponent(componentId,{runtimeData:data})}incStep(){this.agentContext.incStep()}updateComponent(componentId,data){this.agentContext.updateComponent(componentId,data)}resetComponent(componentId){this.agentContext.resetComponent(componentId)}getComponentData(componentId){return this.agentContext.getComponentData(componentId)}};__publicField$1L(_AgentRuntime,"processResults",{}),__publicField$1L(_AgentRuntime,"tagsData",{}),__publicField$1L(_AgentRuntime,"dummy",AgentRuntimeUnavailable);let AgentRuntime=_AgentRuntime;const OSResourceMonitor={mem:getMemoryUsage(),cpu:getCpuUsage()};function getCpuUsage(){const cpus=os.cpus();let user=0,nice=0,sys=0,idle=0,irq=0,total=0;for(let cpu of cpus)user+=cpu.times.user,nice+=cpu.times.nice,sys+=cpu.times.sys,idle+=cpu.times.idle,irq+=cpu.times.irq;return total=user+nice+sys+idle+irq,{user:user/total*100,sys:sys/total*100,idle:idle/total*100,load:100-idle/total*100}}function getMemoryUsage(){const totalMemory=os.totalmem(),freeMemory=os.freemem(),usedMemory=totalMemory-freeMemory;return{totalMemory:(totalMemory/1024**3).toFixed(2)+" GB",freeMemory:(freeMemory/1024**3).toFixed(2)+" GB",usedMemory:(usedMemory/1024**3).toFixed(2)+" GB",memoryUsagePercentage:(usedMemory/totalMemory*100).toFixed(2)}}var THook=(THook2=>(THook2.Blocking="blocking",THook2.NonBlocking="non-blocking",THook2))(THook||{});const blockingHooks={},nonBlockingHooks={},blockingAfterHooks={},nonBlockingAfterHooks={};class HookService{static register(hookName,callback,mode="blocking"){if(typeof callback!="function")throw new Error("Hook callback must be a function");mode==="non-blocking"?(nonBlockingHooks[hookName]||(nonBlockingHooks[hookName]=[]),nonBlockingHooks[hookName].push(callback)):(blockingHooks[hookName]||(blockingHooks[hookName]=[]),blockingHooks[hookName].push(callback))}static registerAfter(hookName,callback,mode="blocking"){if(typeof callback!="function")throw new Error("After-hook callback must be a function");mode==="non-blocking"?(nonBlockingAfterHooks[hookName]||(nonBlockingAfterHooks[hookName]=[]),nonBlockingAfterHooks[hookName].push(callback)):(blockingAfterHooks[hookName]||(blockingAfterHooks[hookName]=[]),blockingAfterHooks[hookName].push(callback))}static trigger(hookName,...args){blockingHooks[hookName]&&blockingHooks[hookName].forEach(callback=>callback(...args)),nonBlockingHooks[hookName]&&nonBlockingHooks[hookName].forEach(callback=>callback(...args))}static triggerAfter(hookName,result,args,error){const params={result,args,error};blockingAfterHooks[hookName]&&blockingAfterHooks[hookName].forEach(callback=>callback(params)),nonBlockingAfterHooks[hookName]&&nonBlockingAfterHooks[hookName].forEach(callback=>callback(params))}}function hook(hookName){return function(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=function(...args){return nonBlockingHooks[hookName]&&Promise.allSettled(nonBlockingHooks[hookName].map(callback=>Promise.resolve().then(()=>callback.apply(this,args)))),blockingHooks[hookName]&&blockingHooks[hookName].forEach(callback=>callback.apply(this,args)),originalMethod.apply(this,args)},descriptor}}function hookAsync(hookName,customContext){return function(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){let _context;typeof customContext=="function"?_context=await customContext(this):typeof customContext=="object"?_context=customContext:_context=this,nonBlockingHooks[hookName]&&Promise.allSettled(nonBlockingHooks[hookName].map(callback=>Promise.resolve(callback.apply(_context,args)))).catch(err=>console.error(`Non-blocking hook ${hookName} error:`,err));let result,error;try{blockingHooks[hookName]&&await Promise.all(blockingHooks[hookName].map(callback=>Promise.resolve(callback.apply(_context,args)))),result=await originalMethod.apply(this,args)}catch(err){error=err instanceof Error?err:new Error(String(err))}try{nonBlockingAfterHooks[hookName]&&Promise.allSettled(nonBlockingAfterHooks[hookName].map(callback=>Promise.resolve(callback.apply(_context,[{result,args,error}])))).catch(err=>console.error(`Non-blocking after-hook ${hookName} error:`,err)),blockingAfterHooks[hookName]&&await Promise.all(blockingAfterHooks[hookName].map(callback=>Promise.resolve(callback.apply(_context,[{result,args,error}]))))}catch(afterHookError){console.error("Error in after-hooks:",afterHookError)}if(error)throw error;return result},descriptor}}function hookAsyncWithContext(hookName,contextFn){return function(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){const contextualArgs=[typeof contextFn=="function"?await contextFn(this):{},...args];nonBlockingHooks[hookName]&&Promise.allSettled(nonBlockingHooks[hookName].map(callback=>Promise.resolve().then(()=>callback.apply(this,contextualArgs))));let result,error;try{blockingHooks[hookName]&&await Promise.all(blockingHooks[hookName].map(callback=>Promise.resolve(callback.apply(this,contextualArgs)))),result=await originalMethod.apply(this,args)}catch(err){error=err instanceof Error?err:new Error(String(err))}try{nonBlockingAfterHooks[hookName]&&Promise.allSettled(nonBlockingAfterHooks[hookName].map(callback=>Promise.resolve().then(()=>callback({result,args:contextualArgs,error})))),blockingAfterHooks[hookName]&&await Promise.all(blockingAfterHooks[hookName].map(callback=>Promise.resolve(callback({result,args:contextualArgs,error}))))}catch(afterHookError){console.error("Error in after-hooks:",afterHookError)}if(error)throw error;return result},descriptor}}var __defProp$1K=Object.defineProperty,__defNormalProp$1K=(obj,key,value)=>key in obj?__defProp$1K(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1K=(obj,key,value)=>__defNormalProp$1K(obj,key+"",value);class AgentSSE{constructor(agent){this.agent=agent,__publicField$1K(this,"connections",new Map)}add(res,monitorId){this.connections.set(monitorId,res)}[Symbol.iterator](){return this.connections.entries()}async send(_type,_data){if(!_type||!_data)return;const data=typeof _data=="string"?_data:JSON.stringify(_data),message=`event: ${_type}
18
+ `);this._logger.log("error",formatLogMessage(...args),{...this.labels,stack,module}),this.emit("logged",{level:"error",message:formatLogMessage(...args)})}close(){this._logger.clear(),this._logger.close()}}winston.format.printf(info=>`${info.timestamp} ${winston.format.colorize().colorize(info.level,`${info.level}: ${info.message}`)}`);const MAX_LOG_MESSAGE_LENGTH=500;function redactLogMessage(logMessage){if(config.env.NODE_ENV!=="PROD"||logMessage.length>500)return logMessage;const sensitiveWords=["password","eyJ","token","email","secret","key","apikey","api_key","auth","credential"],obfuscatedString=" [!! SmythOS::REDACTED_DATA !!] ";for(const sensitiveWord of sensitiveWords){const regex=new RegExp(`(${sensitiveWord})((?:[^\\n]{0,29}(?=\\n))|(?:[^\\n]{30}\\S*))`,"gmi");logMessage=logMessage.replace(regex,`$1${obfuscatedString}`)}return logMessage}function createBaseLogger(memoryStore){const logger2=winston.createLogger({format:winston.format.combine(winston.format(info=>config.env.LOG_LEVEL=="none"||logLevel()=="none"||logLevel()==""?!1:(info.message=redactLogMessage(info.message),info))(),winston.format.timestamp(),winston.format.errors({stack:!0}),winston.format.splat(),winston.format.json()),transports:[new winston.transports.Console({level:"error",format:winston.format.combine(winston.format.printf(info=>{let message=info.message;return message=message?.length>MAX_LOG_MESSAGE_LENGTH?message.substring(0,MAX_LOG_MESSAGE_LENGTH)+"...":message,`${info.level}:${info.module||""} ${message} ${info.stack||""}`})),stderrLevels:["error"]}),new winston.transports.Console({level:logLevel(),format:winston.format.combine(namespaceFilter,winston.format.printf(info=>{const module=info.module?winston.format.colorize().colorize(info.level,` [${info.module}]`):"",ns=winston.format.colorize().colorize(info.level,`${info.level}${module}`);let message=info.message;return message=message?.length>MAX_LOG_MESSAGE_LENGTH?message.substring(0,MAX_LOG_MESSAGE_LENGTH)+"...":message,`${ns} - ${message}`}))})]});return Array.isArray(memoryStore)&&logger2.add(new ArrayTransport({level:"debug",logs:memoryStore})),logger2}function formatLogMessage(...args){return args.map(arg=>{if(typeof arg=="object"&&arg!==null&&!(arg instanceof Error))try{return JSON.stringify(arg,null,2)}catch{return String(arg)}return String(arg)}).join(" ")}function createLabeledLogger(labels,memoryStore){const _logger=createBaseLogger(memoryStore);return _logger.defaultMeta=labels,new LogHelper(_logger,memoryStore,labels)}function Logger(module,withMemoryStore=!1){return createLabeledLogger(typeof module=="string"?{module}:module,withMemoryStore?[]:void 0)}const DummyConnector=name=>{const logger2=Logger(`DummyConnector<${name}>`);return new Proxy({},{get:function(target,prop,receiver){return prop==="valid"?!1:typeof target[prop]=="function"?target[prop]:function(...args){const argsString=args.length>0?args.map(arg=>typeof arg=="object"?JSON.stringify(arg,null,0).slice(0,50)+"...":typeof arg=="string"?`"${arg.slice(0,50)}..."`:typeof arg=="number"||typeof arg=="boolean"||typeof arg=="function"||typeof arg=="symbol"?arg.toString():typeof arg>"u"?"undefined":String(arg)).join(", "):"(no arguments)";logger2.warn(`[!!] Unimplemented Connector tried to call: ${name}.${prop.toString()}(${argsString})`),printStackTrace(logger2,3,1)}}})};var __defProp$1S=Object.defineProperty,__defNormalProp$1S=(obj,key,value)=>key in obj?__defProp$1S(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1S=(obj,key,value)=>__defNormalProp$1S(obj,typeof key!="symbol"?key+"":key,value);class LocalCache{constructor(defaultTTL=60*60*1e3){__publicField$1S(this,"cache"),__publicField$1S(this,"expiryMap"),__publicField$1S(this,"timeouts"),__publicField$1S(this,"defaultTTL",60*60*1e3),this.defaultTTL=defaultTTL,this.cache=new Map,this.expiryMap=new Map,this.timeouts=new Map}set(key,value,ttlMs=this.defaultTTL){this.cache.set(key,value);const expiry=Date.now()+ttlMs;this.expiryMap.set(key,expiry),this.clearTimeout(key);const timeout=setTimeout(()=>{this.delete(key)},ttlMs);this.timeouts.set(key,timeout),timeout.unref()}updateTTL(key,ttlMs=this.defaultTTL){if(!this.has(key))return;const expiry=Date.now()+ttlMs;this.expiryMap.set(key,expiry),this.clearTimeout(key);const timeout=setTimeout(()=>{this.delete(key)},ttlMs);this.timeouts.set(key,timeout),timeout.unref()}get(key,ttlMs){if(!this.has(key))return;const value=this.cache.get(key);if(value!==void 0)return this.updateTTL(key,ttlMs),value}has(key){if(!this.cache.has(key))return!1;const expiry=this.expiryMap.get(key);return expiry&&Date.now()>expiry?(this.delete(key),!1):!0}delete(key){return this.clearTimeout(key),this.expiryMap.delete(key),this.cache.delete(key)}clear(){for(const key of this.cache.keys())this.clearTimeout(key);this.cache.clear(),this.expiryMap.clear(),this.timeouts.clear()}clearTimeout(key){const timeout=this.timeouts.get(key);timeout&&(clearTimeout(timeout),this.timeouts.delete(key))}}var __defProp$1R=Object.defineProperty,__defNormalProp$1R=(obj,key,value)=>key in obj?__defProp$1R(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1R=(obj,key,value)=>__defNormalProp$1R(obj,typeof key!="symbol"?key+"":key,value);const logger$g=Logger("Connector"),_Connector=class _Connector2{constructor(_settings){this._settings=_settings,__publicField$1R(this,"name"),__publicField$1R(this,"started",!1),__publicField$1R(this,"_interactionHandler"),__publicField$1R(this,"_readyPromise")}get settings(){return this._settings}get interactionHandler(){return this._interactionHandler}get valid(){return!0}setInteraction(handler){this._interactionHandler=handler}instance(settings){const configHash=createHash("sha256").update(JSON.stringify(settings||{})).digest("hex"),key=`${this.name}-${configHash}`;if(_Connector2.lCache.has(key))return _Connector2.lCache.get(key);const constructor=this.constructor,instance=new constructor(settings);return _Connector2.lCache.set(key,instance,60*60*1e3),instance}static isValid(connector){return connector.name!==void 0&&connector.name!==null&&connector.name!==""}async start(){logger$g.info(`Starting ${this.name} connector ...`),this.started=!0}async stop(){logger$g.info(`Stopping ${this.name} connector ...`)}ready(){return this._readyPromise||(this._readyPromise=new Promise(resolve=>{let maxWait=6e4;const tick=100;if(this.started)resolve(!0);else{const interval=setInterval(()=>{this.started&&(clearInterval(interval),resolve(!0)),maxWait-=tick,maxWait<=0&&(clearInterval(interval),resolve(!1))},tick)}})),this._readyPromise}requester(candidate){return null}user(candidate){return typeof candidate=="string"?this.requester(AccessCandidate.user(candidate)):this.requester(candidate)}team(teamId){return this.requester(AccessCandidate.team(teamId))}agent(agentId){return this.requester(AccessCandidate.agent(agentId))}handleEvent(eventName,data){logger$g.debug(`Connector ${this.name} received event ${eventName} `)}};__publicField$1R(_Connector,"lCache",new LocalCache);let Connector=_Connector;Logger("SystemEvents");const SystemEvents=new EventEmitter;var __defProp$1Q=Object.defineProperty,__defNormalProp$1Q=(obj,key,value)=>key in obj?__defProp$1Q(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1Q=(obj,key,value)=>__defNormalProp$1Q(obj,typeof key!="symbol"?key+"":key,value);const console$y=Logger("ConnectorService"),SRE_CONNECTORS_GLOBAL_KEY=Symbol.for("SRE:ConnectorInstances");let ServiceRegistry={},_ready=!1;SystemEvents.on("SRE:Booted",services=>{ServiceRegistry=services,_ready=!0});const _ConnectorService=class _ConnectorService2{static get ConnectorInstances(){return global[SRE_CONNECTORS_GLOBAL_KEY]?global[SRE_CONNECTORS_GLOBAL_KEY]:(_ConnectorService2._instances={},global[SRE_CONNECTORS_GLOBAL_KEY]=_ConnectorService2._instances,_ConnectorService2._instances)}static get ready(){return _ready}static get service(){return ServiceRegistry}static register(connectorType,connectorName,connectorConstructor){if(typeof connectorConstructor!="function"||!isSubclassOf(connectorConstructor,Connector)){console$y.error(`Invalid Connector ${connectorType}:${connectorName}`);return}_ConnectorService2.Connectors[connectorType]||(_ConnectorService2.Connectors[connectorType]={}),_ConnectorService2.Connectors[connectorType][connectorName]=connectorConstructor}static init(connectorType,connectorName,connectorId,settings={},isDefault=!1){if(_ConnectorService2.ConnectorInstances[connectorType]?.[connectorName])throw new Error(`Connector ${connectorType}:${connectorName} already initialized`);const entry=_ConnectorService2.Connectors[connectorType];if(!entry)return;const connectorConstructor=entry[connectorName];if(connectorConstructor){const connector=new connectorConstructor(settings);connector.interactionHandler&&connector.interactionHandler(),connector.start(),_ConnectorService2.ConnectorInstances[connectorType]||(_ConnectorService2.ConnectorInstances[connectorType]={});const id=connectorId||connectorName;return _ConnectorService2.ConnectorInstances[connectorType][id]=connector,!_ConnectorService2.ConnectorInstances[connectorType].default&&isDefault&&(_ConnectorService2.ConnectorInstances[connectorType].default=connector),connector}}static async _stop(){for(let connectorName in _ConnectorService2.ConnectorInstances){let allConnectors=Object.values(_ConnectorService2.ConnectorInstances[connectorName]);allConnectors=allConnectors.filter((value,index,self)=>self.indexOf(value)===index);for(let connector of allConnectors)connector.stop()}}static getInstance(connectorType,connectorName="default"){return _ConnectorService2.ConnectorInstances[connectorType]?.[connectorName||"default"]||(console$y.warn(`Connector ${connectorType} not initialized returning DummyConnector`),printStackTrace(console$y,5),DummyConnector(connectorType))}static getStorageConnector(name){return _ConnectorService2.getInstance(TConnectorService.Storage,name)}static getCacheConnector(name){return _ConnectorService2.getInstance(TConnectorService.Cache,name)}static getVectorDBConnector(name){return _ConnectorService2.getInstance(TConnectorService.VectorDB,name)}static getNKVConnector(name){return _ConnectorService2.getInstance(TConnectorService.NKV,name)}static getLLMConnector(name){return _ConnectorService2.getInstance(TConnectorService.LLM,name)}static getVaultConnector(name){return _ConnectorService2.getInstance(TConnectorService.Vault,name)}static getManagedVaultConnector(name){return _ConnectorService2.getInstance(TConnectorService.ManagedVault,name)}static getAccountConnector(name){return _ConnectorService2.getInstance(TConnectorService.Account,name)}static getAgentDataConnector(name){return _ConnectorService2.getInstance(TConnectorService.AgentData,name)}static getCLIConnector(name){return _ConnectorService2.getInstance(TConnectorService.CLI,name)}static getLogConnector(name){return _ConnectorService2.getInstance(TConnectorService.Log,name)}static getComponentConnector(name){return _ConnectorService2.getInstance(TConnectorService.Component,name)}static getModelsProviderConnector(name){return _ConnectorService2.getInstance(TConnectorService.ModelsProvider,name)}static hasInstance(connectorType,connectorName="default"){const instance=_ConnectorService2.ConnectorInstances[connectorType]?.[connectorName];return instance&&instance.valid}static getRouterConnector(name){return _ConnectorService2.getInstance(TConnectorService.Router,name)}static getCodeConnector(name){return _ConnectorService2.getInstance(TConnectorService.Code,name)}static getSchedulerConnector(name){return _ConnectorService2.getInstance(TConnectorService.Scheduler,name)}};__publicField$1Q(_ConnectorService,"Connectors",{}),__publicField$1Q(_ConnectorService,"_instances",{});let ConnectorService=_ConnectorService;class ConnectorServiceProvider{init(){}constructor(){this.register()}}class VaultHelper{static async getTeamKey(key,teamId){return await ConnectorService.getVaultConnector().requester(AccessCandidate.team(teamId)).get(key)}static async getUserKey(key,userId){const vaultConnector=ConnectorService.getVaultConnector(),teamId=await ConnectorService.getAccountConnector().getCandidateTeam(AccessCandidate.user(userId));return await vaultConnector.requester(AccessCandidate.team(teamId)).get(key)}static async getAgentKey(key,agentId){const vaultConnector=ConnectorService.getVaultConnector(),teamId=await ConnectorService.getAccountConnector().getCandidateTeam(AccessCandidate.agent(agentId));return await vaultConnector.requester(AccessCandidate.team(teamId)).get(key)}}var __defProp$1P=Object.defineProperty,__defNormalProp$1P=(obj,key,value)=>key in obj?__defProp$1P(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1P=(obj,key,value)=>__defNormalProp$1P(obj,typeof key!="symbol"?key+"":key,value);const Match={default:/{{(.*?)}}/g,doubleCurly:/{{(.*?)}}/g,singleCurly:/{(.*?)}/g,doubleCurlyForSingleMatch:/{{(.*?)}}/,templateVariables:/{{([A-Z]+):([\w\s]+):[\[{](.*?)[\]}]}}/gm,prefix(prefix){return new RegExp(`{{${prefix}(.*?)}}`,"g")},suffix(suffix){return new RegExp(`{{(.*?)${suffix}}}`,"g")},prefSuf(prefix,suffix){return new RegExp(`{{${prefix}(.*?)${suffix}}}`,"g")},fn(name){return new RegExp(`{{${name}\\((.*?)\\)}}`,"g")}},TPLProcessor={vaultTeam(teamId){return async token=>{try{return await VaultHelper.getTeamKey(token,teamId)}catch{return token}}},componentTemplateVar(templateSettings){return async(token,matches)=>{try{const label=matches[2];if(!label)return token;const entry=Object.values(templateSettings).find(o=>o.label==label);return entry?`{{${entry.id}}}`:token}catch{return token}}}};class TemplateStringHelper{constructor(templateString){this.templateString=templateString,__publicField$1P(this,"_current"),__publicField$1P(this,"_promiseQueue",[]),this._current=templateString}get result(){if(this._promiseQueue.length<=0)return this._current;throw new Error("This template object has async results, you should use .asyncResult with await instead of .result")}get asyncResult(){return new Promise(async(resolve,reject)=>{await Promise.all(this._promiseQueue),resolve(this._current)})}static create(templateString){return new TemplateStringHelper(templateString)}parse(data,regex=Match.default,maxDepth=5){if(typeof this._current!="string"||typeof data!="object")return this;for(let i=0;i<maxDepth;i++){const previous=this._current;if(this._current=this._current.replace(regex,(match,token)=>{let val=data?.[token]??match;return data?.[token]||(val=JSONExpression$1(data,token)||`{{${token}}}`),typeof val=="object"?JSON.stringify(val):escapeJsonField(val)}),previous===this._current)break}return this}parseRaw(data,regex=Match.doubleCurlyForSingleMatch){if(typeof this._current!="string"||typeof data!="object")return this;const match=this._current.match(regex),key=match?match[1]:"";if(key){const value=data?.[key];this._current=value}return this}parseTeamKeysAsync(teamId){return this.process(TPLProcessor.vaultTeam(teamId),Match.fn("KEY"))}parseComponentTemplateVarsAsync(templateSettings){return this.process(TPLProcessor.componentTemplateVar(templateSettings),Match.templateVariables)}process(processor,regex=Match.default){if(typeof this._current!="string")return this;let tokens={},match;const prosessorPromises=[];for(;(match=regex.exec(this._current))!==null;){const token=match[1];tokens[token]=match[0];const _processor=processor(token,match);_processor instanceof Promise?(_processor.then(result=>{if(result===void 0)return match?.[0];tokens[token]=result}),prosessorPromises.push(_processor)):tokens[token]=_processor}return prosessorPromises.length>0?(new Promise(async(resolve,reject)=>{await Promise.all(prosessorPromises),this.parse(tokens,regex),resolve(!0)}),this._promiseQueue.push(Promise.all(prosessorPromises))):this.parse(tokens,regex),this}clean(regex=Match.default,replaceWith=""){return typeof this._current!="string"?this:(this._current=this._current.replace(regex,replaceWith),this)}}function JSONExpression$1(obj,propertyString){const properties=propertyString.split(/\.|\[|\]\.|\]\[|\]/).filter(Boolean);let currentProperty=obj;for(let property of properties){if(currentProperty==null)return;currentProperty=currentProperty[property]}return currentProperty}function escapeString(str){return str&&str.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}function escapeJsonField(str){return typeof str!="string"?str:str.replace(/\\"/g,'"').replace(/"/g,'\\"')}function TemplateString(templateString){return TemplateStringHelper.create(templateString)}var __defProp$1O=Object.defineProperty,__defNormalProp$1O=(obj,key,value)=>key in obj?__defProp$1O(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1O=(obj,key,value)=>__defNormalProp$1O(obj,typeof key!="symbol"?key+"":key,value);const console$x=Logger("AgentLogger.class");class LogTransaction{constructor(agent,trId){this.agent=agent,this.trId=trId,__publicField$1O(this,"_callId",""),__publicField$1O(this,"queue",[]),__publicField$1O(this,"_isProcessing",!1),__publicField$1O(this,"_lastPush",0),__publicField$1O(this,"storage"),this.storage=ConnectorService.getStorageConnector()}async getCallId(){return this._callId}push(logData){ConnectorService.getLogConnector().valid&&(this.queue.push(logData),this._lastPush=Date.now(),this.processQueue())}formatData(data,maxLength=1e3){if(!data)return;let result=typeof data=="string"?data:JSON.stringify(data);return result.length>maxLength&&(result=result.substr(0,maxLength)+"..."),result}getDataFilePath(data,maxLength=1e3){if(data){if((typeof data=="string"?data:JSON.stringify(data)).length>maxLength){const dayFolder=getDayFormattedDate(),trId="L"+uid().toUpperCase();return`${dayFolder}/${trId}`}return null}}prepareData(firstData){let sourceId=firstData.sourceId,componentId=firstData.componentId,input=firstData.input?{preview:this.formatData(firstData.input),full:this.getDataFilePath(firstData.input),action:firstData.input.__action,status:firstData.input.__status}:void 0,output=firstData.output?{preview:this.formatData(firstData.output),full:this.getDataFilePath(firstData.output)}:void 0,domain=firstData.domain,inputTimestamp=firstData.inputTimestamp,outputTimestamp=firstData.outputTimestamp,result=firstData.result?JSON.stringify({preview:this.formatData(firstData.result),full:this.getDataFilePath(firstData.result)}):void 0,sessionID=firstData.sessionID;const sourceData=this.agent.components[sourceId],componentData=this.agent.components[componentId],sourceCptName=sourceData?.name,componentCptName=componentData?.name,sourceName=sourceData?.displayName||sourceData?.name||sourceId,componentName=componentData?.displayName||componentData?.name||componentId,curStepOrder=firstData.step||this.agent?.agentRuntime?.curStep||"",nextStepOrder=curStepOrder+1;sourceCptName&&(sourceId+=`@${sourceCptName}@${curStepOrder}`),componentCptName&&(componentId+=`@${componentCptName}@${nextStepOrder}`);const inputTokens=void 0,outputTokens=void 0,tags=firstData.tags||"";let raw_error=firstData.error||firstData?.output?.error||firstData?.output?._error||firstData?.result?.error||firstData?.result?.result?.error||firstData?.result?._error||firstData?.result?.result?._error;const error=raw_error?JSON.stringify({preview:this.formatData(raw_error),full:this.getDataFilePath(raw_error)}):void 0;return{sourceId,componentId,domain,input,output,inputTimestamp,outputTimestamp,result,error,sourceName,componentName,sessionID,inputTokens,outputTokens,tags,workflowID:firstData.workflowID,processID:firstData.processID,raw_input:firstData.input,raw_output:firstData.output,raw_result:firstData.result,raw_error}}async storeLogData(filePath,content){const logConnector=ConnectorService.getLogConnector();if(!(!logConnector.valid||logConnector.name=="ConsoleLog")&&filePath)try{const body=typeof content=="string"?content:JSON.stringify(content),storagePath=path.posix.join("teams",this.agent.teamId,`logs/${this.agent.id}/${filePath}`),metadata={teamid:this.agent.teamId,agentid:this.agent.id,ContentType:"text/plain"};await this.storage.requester(AccessCandidate.agent(this.agent.id)).write(storagePath,body,void 0,metadata)}catch(error){console$x.error("Error storing Log File : ",filePath,error)}}async processQueue(){const logConnector=ConnectorService.getLogConnector();if(!(!logConnector.valid||this.queue.length<=0||this._isProcessing)){this._isProcessing=!0;try{if(this._callId)for(;this.queue.length>0;){const logData=this.queue.shift(),data=this.prepareData(logData);Object.keys(data).forEach(key=>{data[key]||delete data[key]});const raw_input=data.raw_input,raw_output=data.raw_output,raw_result=data.raw_result,raw_error=data.raw_error;delete data.raw_input,delete data.raw_output,delete data.raw_result,delete data.raw_error;const resultObj=data.result?JSON.parse(data.result):void 0,errorObj=data.error?JSON.parse(data.error):void 0;await this.storeLogData(data?.input?.full,raw_input),await this.storeLogData(data?.output?.full,raw_output),await this.storeLogData(resultObj?.full,raw_result),await this.storeLogData(errorObj?.full,raw_error),await logConnector.requester(AccessCandidate.agent(this.agent.id)).log(data,this._callId)}else{const firstData=this.queue.shift(),data=this.prepareData(firstData),raw_input=data.raw_input,raw_output=data.raw_output,raw_result=data.raw_result,raw_error=data.raw_error;delete data.raw_input,delete data.raw_output,delete data.raw_result,delete data.raw_error;const resultObj=data.result?JSON.parse(data.result):void 0,errorObj=data.error?JSON.parse(data.error):void 0;await this.storeLogData(data?.input?.full,raw_input),await this.storeLogData(data?.output?.full,raw_output),await this.storeLogData(resultObj?.full,raw_result),await this.storeLogData(errorObj?.full,raw_error);const logResult=await logConnector.requester(AccessCandidate.agent(this.agent.id)).log(data);this._callId=logResult?.data?.log?.id}}catch(error){console$x.error("Error processing log queue:",error?.response?.data?.message||error)}this._isProcessing=!1,debounce(this.processQueue.bind(this),1e3,{leading:!0,maxWait:1e4}),await delay(1e3),this.processQueue()}}canDelete(){return this.queue.length>0?(this.processQueue(),!1):this._lastPush!=0&&this._lastPush+1e3*60*60*1<Date.now()}}const _AgentLogger=class _AgentLogger2{constructor(agent){this.agent=agent}static async cleanup(){if(!ConnectorService.getLogConnector().valid)return;const trIds=Object.keys(_AgentLogger2.transactions);for(const trId of trIds)_AgentLogger2.transactions[trId].canDelete()&&delete _AgentLogger2.transactions[trId]}static log(agent,trId,logData){if(ConnectorService.getLogConnector().valid)return(agent?.agentRuntime?.debug||agent?.debugSessionEnabled)&&(logData.tags="DEBUG "),trId||(trId="log-"+uid()),this.transactions[trId]||(this.transactions[trId]=new LogTransaction(agent,trId)),this.transactions[trId].push(logData),debounce(this.cleanup.bind(this),1e3,{leading:!0,maxWait:1e4*1}),trId}static async logTask(agent,tasks){const logConnector=ConnectorService.getLogConnector();logConnector.valid&&(agent.usingTestDomain||await logConnector.requester(AccessCandidate.agent(agent.id)).logTask(tasks,agent.usingTestDomain),debounce(this.cleanup.bind(this),1e3,{leading:!0,maxWait:1e4*1}))}};__publicField$1O(_AgentLogger,"transactions",{}),__publicField$1O(_AgentLogger,"cleanupInterval");let AgentLogger=_AgentLogger;var __defProp$1N=Object.defineProperty,__defNormalProp$1N=(obj,key,value)=>key in obj?__defProp$1N(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1N=(obj,key,value)=>__defNormalProp$1N(obj,typeof key!="symbol"?key+"":key,value);class LLMCache{constructor(candidate,cacheId,ttl=1*60*60){__publicField$1N(this,"_cacheConnector"),__publicField$1N(this,"_cacheId"),__publicField$1N(this,"_ttl"),__publicField$1N(this,"_candidate"),this._cacheConnector=ConnectorService.getCacheConnector(),this._cacheId=cacheId||"llm_cache_"+uid(),this._ttl=ttl,this._candidate=candidate}get id(){return this._cacheId}async set(key,data){this._cacheConnector.valid&&await this._cacheConnector.requester(this._candidate).set(`${this._cacheId}:${key}`,typeof data=="object"?JSON.stringify(data):data,null,null,this._ttl)}async get(key,format="json"){if(!this._cacheConnector.valid)return;const obj=await this._cacheConnector.requester(this._candidate).get(`${this._cacheId}:${key}`);let result;if(format==="json")try{result=JSON.parse(obj)}catch{console.warn(`Invalid JSON data for key ${key}`),result=null}else result=obj;return result}async delete(key){this._cacheConnector.valid&&await this._cacheConnector.requester(this._candidate).delete(`${this._cacheId}:${key}`)}async clear(){this._cacheConnector.valid&&await this._cacheConnector.requester(this._candidate).delete(this._cacheId)}}var __defProp$1M=Object.defineProperty,__defNormalProp$1M=(obj,key,value)=>key in obj?__defProp$1M(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1M=(obj,key,value)=>__defNormalProp$1M(obj,typeof key!="symbol"?key+"":key,value);const console$w=Logger("RuntimeContext");class RuntimeContext extends EventEmitter$1{constructor(runtime){super(),this.runtime=runtime,__publicField$1M(this,"circularLimitReached",!1),__publicField$1M(this,"step",0),__publicField$1M(this,"sessionResult",!1),__publicField$1M(this,"sessionResults"),__publicField$1M(this,"components",{}),__publicField$1M(this,"checkRuntimeContext",null),__publicField$1M(this,"ctxFile",""),__publicField$1M(this,"_runtimeFileReady"),__publicField$1M(this,"_cacheConnector"),__publicField$1M(this,"_readyPromise"),__publicField$1M(this,"_lastCtxLength",0),__publicField$1M(this,"_syncQueue",Promise.resolve());const agent=runtime.agent;this._cacheConnector=ConnectorService.getCacheConnector();const reqId=(runtime.processID?.split(":")[0]||"")==runtime.xDebugId?"":"."+uid()+runtime.reqTag;this.ctxFile=`${runtime.xDebugId}${reqId}${agent.jobID?`-job-${agent.jobID}`:""}`,this._readyPromise=new Promise((resolve,reject)=>{let resolved=!1;this.on("ready",()=>{resolved=!0,resolve(!0)}),setTimeout(()=>{resolved||reject(new Error("Agent Runtime context initialization timeout"))},5*60*1e3).unref()}),this.initRuntimeContext()}serialize(){return{step:this.step,sessionResult:this.sessionResult,sessionResults:this.sessionResults,components:this.components}}deserialize(data){this.step=data.step,this.sessionResult=data.sessionResult,this.sessionResults=data.sessionResults,this.components=data.components}reset(){this.step=0,this.sessionResult=!1,this.sessionResults=null,this.components={}}initRuntimeContext(){if(this._runtimeFileReady)return;console$w.debug("Init Agent Context",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id));const agent=this.runtime.agent;let ctxData={};this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).get(this.ctxFile).then(async data=>{if(data)ctxData=JSON.parse(data),ctxData.step||(ctxData.step=0);else{ctxData=JSON.parse(JSON.stringify({components:agent.components,connections:agent.connections,timestamp:Date.now()})),ctxData.step||(ctxData.step=0);for(let cptId in ctxData.components)ctxData.components[cptId]={id:cptId,name:ctxData.components[cptId].name,ctx:{active:!1,name:ctxData.components[cptId].name}};await this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).set(this.ctxFile,JSON.stringify(ctxData),null,null,1*60*60)}this.deserialize(ctxData),this._runtimeFileReady=!0,this.emit("ready")})}async ready(){return this._runtimeFileReady?!0:this._readyPromise}async sync(){if(!this.ctxFile)return;this.emit("syncing");const deleteSession=this.runtime.sessionClosed,data=this.serialize();if(data){let serializedData=JSON.stringify(data);serializedData.length!=this._lastCtxLength&&(console$w.debug("Agent Context Size",this.ctxFile,serializedData.length,AccessCandidate.agent(this.runtime.agent.id)),this._lastCtxLength=serializedData.length),await this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).set(this.ctxFile,serializedData,null,null,3*60*60);const cooldown=serializedData.length/1024/1024/10*1e3;serializedData=null,await delay(cooldown)}deleteSession&&await this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).exists(this.ctxFile)&&(console$w.debug("Agent Context Delete",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id)),this.runtime.debug?this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).updateTTL(this.ctxFile,5*60):this._cacheConnector.requester(AccessCandidate.agent(this.runtime.agent.id)).delete(this.ctxFile),this.ctxFile=null)}enqueueSync(){this.ctxFile&&(this._syncQueue=this._syncQueue.then(()=>this.sync()).catch(err=>{console$w.error("Error syncing context",err)}))}incStep(){this.step++}updateComponent(componentId,data){const ctxData=this;if(!ctxData)return;const component=ctxData.components[componentId];component||(console$w.debug(">>>>>>> updateComponent Component debug data not found",componentId,component,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxFile",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxData",ctxData,AccessCandidate.agent(this.runtime.agent.id))),component.ctx||(component.ctx={active:!1,name:"",step:0}),Object.assign(component.ctx,data),component.ctx.step=this.step,this.enqueueSync()}resetComponent(componentId){const ctxData=this,component=ctxData.components[componentId];component||(console$w.debug(">>>>>>> resetComponent Component debug data not found",componentId,component,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxFile",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxData",ctxData,AccessCandidate.agent(this.runtime.agent.id))),component.ctx.runtimeData={},component.ctx.active=!1,this.runtime.debug||(component.ctx.input=void 0,component.ctx.output=void 0),this.enqueueSync()}getComponentData(componentId){const ctxData=this;if(!ctxData)return null;const component=ctxData.components[componentId];return component||(console$w.debug(">>>>>>> getComponentData Component debug data not found",componentId,component,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxFile",this.ctxFile,AccessCandidate.agent(this.runtime.agent.id)),console$w.debug(">>> ctxData",ctxData,AccessCandidate.agent(this.runtime.agent.id))),component.ctx}}var __defProp$1L=Object.defineProperty,__defNormalProp$1L=(obj,key,value)=>key in obj?__defProp$1L(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1L=(obj,key,value)=>__defNormalProp$1L(obj,typeof key!="symbol"?key+"":key,value);const console$v=Logger("AgentRuntime"),AgentRuntimeUnavailable=new Proxy({},{get:function(target,prop,receiver){return typeof target[prop]=="function"?target[prop]:function(){console$v.warn(`AgentRuntime Unavailable tried to call : ${prop.toString()}`)}}}),_AgentRuntime=class _AgentRuntime2{constructor(agent){this.agent=agent,__publicField$1L(this,"agentContext"),__publicField$1L(this,"llmCache"),__publicField$1L(this,"xDebugRun",""),__publicField$1L(this,"xDebugInject",""),__publicField$1L(this,"xDebugRead",""),__publicField$1L(this,"xDebugStop",""),__publicField$1L(this,"xDebugPendingInject",null),__publicField$1L(this,"xMockDataInject",null),__publicField$1L(this,"xDebugId",""),__publicField$1L(this,"xDebugCmd",""),__publicField$1L(this,"_debugActive",!1),__publicField$1L(this,"_runtimeFileReady",!1),__publicField$1L(this,"sessionClosed",!1),__publicField$1L(this,"reqTagOwner",!1),__publicField$1L(this,"reqTag"),__publicField$1L(this,"processID"),__publicField$1L(this,"workflowReqId"),__publicField$1L(this,"alwaysActiveComponents",{}),__publicField$1L(this,"exclusiveComponents",{}),__publicField$1L(this,"checkRuntimeContext",null),this.reqTag=agent.agentRequest.header("X-REQUEST-TAG");const isNestedProcess=!!this.reqTag;this.reqTag?(this.xDebugStop=void 0,this.xDebugRun=void 0,this.xDebugInject=void 0,this.xDebugRead=void 0):(this.xDebugStop=agent.agentRequest.header("X-DEBUG-STOP"),this.xDebugRun=agent.agentRequest.header("X-DEBUG-RUN"),this.xDebugInject=agent.agentRequest.header("X-DEBUG-INJ"),this.xDebugRead=agent.agentRequest.header("X-DEBUG-READ"),this.reqTag="xTAG-"+uid(),this.reqTagOwner=!0),this.xDebugId=this.xDebugStop||this.xDebugRun||this.xDebugRead,!this.xDebugId&&agent.agentRequest.body&&(this.xDebugInject!=null&&this.xDebugInject!=null?(this.xDebugPendingInject=agent.agentRequest.body,this.xDebugRun=this.xDebugInject||"inj-"+uid()):this.xDebugRun==""&&(this.xDebugRun="dbg-"+uid()),this.xDebugId=this.xDebugRun),agent.agentRequest.header("X-MOCK-DATA-INJ")!==void 0&&(this.xMockDataInject=agent.agentRequest.body),this.processID=this.xDebugId,this.xDebugId||(this.xDebugId=agent.sessionId,this.processID=this.reqTag),isNestedProcess&&(this.processID+=`:${Math.floor(1e3+Math.random()*9e3)}`),this.workflowReqId=this.xDebugRun||this.xDebugStop||this.reqTag,_AgentRuntime2.tagsData[this.reqTag]||(_AgentRuntime2.tagsData[this.reqTag]={}),_AgentRuntime2.processResults[this.processID]||(_AgentRuntime2.processResults[this.processID]={timestamp:Date.now(),errorResults:[],sessionResults:[]}),this.agentContext=new RuntimeContext(this),this.agentContext.on("ready",()=>{let method=(agent.agentRequest.method||"POST").toUpperCase();const endpoint=agent.endpoints?.[agent.agentRequest.path]?.[method],trigger=agent.triggers?.[agent.agentRequest.path],endpointDBGCall=this.xDebugId?.startsWith("dbg-");this.alwaysActiveComponents={},this.exclusiveComponents={};for(let component of this.agent.data.components){const cpt=this.agent.ComponentInstances[component.name];if(!cpt){console$v.warn(`Component ${component.name} Exists in agent but has no implementation`,AccessCandidate.agent(this.agent.id));continue}if(trigger&&trigger.id!=null&&component.id==trigger.id&&this.xDebugId?.startsWith("dbg-")&&this.updateComponent(component.id,{active:!0}),endpoint&&endpoint.id!=null&&component.id==endpoint.id&&endpointDBGCall&&this.updateComponent(component.id,{active:!0}),cpt.alwaysActive){this.alwaysActiveComponents[component.id]=cpt,this.updateComponent(component.id,{active:!0,alwaysActive:!0});const runtimeData={...this.getRuntimeData(component.id)};this.saveRuntimeComponentData(component.id,runtimeData)}if(cpt.exclusive){this.exclusiveComponents[component.id]=cpt,this.updateComponent(component.id,{exclusive:!0});const runtimeData={...this.getRuntimeData(component.id)};this.saveRuntimeComponentData(component.id,runtimeData)}}}),this._debugActive=this.xDebugId!=agent.sessionId;const xCacheId=agent.agentRequest.header("X-CACHE-ID")||"";this.llmCache=new LLMCache(AccessCandidate.agent(this.agent.id),xCacheId)}get circularLimitReached(){return this.agentContext?.circularLimitReached||!1}set circularLimitReached(value){this.agentContext&&(this.agentContext.circularLimitReached=value)}get debug(){return this._debugActive}get curStep(){return this.agentContext?.step||0}async ready(){return this.agentContext.ready()}destroy(){this.sessionClosed=!0,this.sync()}incTag(componentId){_AgentRuntime2.tagsData[this.reqTag][componentId]||(_AgentRuntime2.tagsData[this.reqTag][componentId]=0),_AgentRuntime2.tagsData[this.reqTag][componentId]++}async sync(){(this.reqTagOwner&&this.sessionClosed||this.circularLimitReached)&&delete _AgentRuntime2.tagsData[this.reqTag],this.agentContext.enqueueSync()}getWaitingComponents(){const ctxData=this.agentContext;return Object.values(ctxData?.components||[]).filter(c=>c?.ctx?.active==!0).filter(c=>c?.ctx?.status&&typeof c?.ctx?.output!==void 0)}getExclusiveActiveComponents(){const ctxData=this.agentContext;return Object.values(ctxData?.components||[]).filter(c=>c?.ctx?.active==!0).filter(c=>c?.ctx?.exclusive==!0)}readState(stateId,deltaOnly=!1){if(!this._debugActive||!stateId)return null;const runtime=this,agent=this.agent,ctxData=runtime.agentContext,dbgAllComponents=runtime.xDebugPendingInject||Object.values(ctxData?.components||[]);let dbgActiveComponents;dbgActiveComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0&&c?.ctx?.exclusive==!0),(!dbgActiveComponents||dbgActiveComponents.length==0)&&(dbgActiveComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0||!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0)),dbgAllComponents.filter(c=>c?.ctx?.active==!0&&c?.ctx?.status&&typeof c?.ctx?.output!==void 0),dbgAllComponents.filter(c=>c?.ctx?.active==!0&&!c?.ctx?.status);let state={};for(let dbgComponent of dbgAllComponents)state[dbgComponent.id]=dbgComponent.ctx;let dbgSession=stateId;(!dbgActiveComponents||dbgActiveComponents.length==0)&&(dbgSession=null,runtime.sessionClosed=!0);const remainingActiveComponents=Object.values(ctxData?.components||[]).filter(c=>c?.ctx?.active==!0&&!c?.ctx?.alwaysActive),activeAsyncComponents=Object.values(ctxData?.components||[]).filter(c=>!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0);if(remainingActiveComponents.length==0&&activeAsyncComponents.length==0&&(runtime.sessionClosed=!0),runtime.circularLimitReached){const error=`Circular Calls Limit Reached on ${runtime.checkCircularLimit()}. Current agent circular limit is ${agent.circularLimit}`;return runtime.sessionClosed=!0,{state,dbgSession,sessionClosed:runtime.sessionClosed,error}}const step=this.curStep>=1?this.curStep-1:0;if(deltaOnly){const delta={};for(let cptId in state){const cpt=state[cptId];cpt.step>=step&&(delta[cptId]=cpt)}state=delta}return{state,dbgSession,sessionClosed:runtime.sessionClosed,step}}async runCycle(){console$v.debug(`runCycle agentId=${this.agent.id} wfReqId=${this.workflowReqId} reqTag=${this.reqTag} session=${this.xDebugRun} cycleId=${this.processID}`,AccessCandidate.agent(this.agent.id));const runtime=this,agent=this.agent,ctxData=runtime.agentContext,dbgAllComponents=runtime.xDebugPendingInject||Object.values(ctxData?.components||[]);let dbgActiveComponents;dbgActiveComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0&&c?.ctx?.exclusive==!0),(!dbgActiveComponents||dbgActiveComponents.length==0)&&(dbgActiveComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0||!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0));const dbgActiveWaitingComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0&&c?.ctx?.status&&typeof c?.ctx?.output!==void 0),dbgActiveReadyComponents=dbgAllComponents.filter(c=>c?.ctx?.active==!0&&!c?.ctx?.status||!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0);let step;if((!dbgActiveComponents||dbgActiveComponents.length==0)&&(runtime.sessionClosed=!0,step={state:{sessionClosed:!0},dbgSession:null,expiredDbgSession:runtime.xDebugId,sessionClosed:!0}),!step&&dbgActiveComponents.length==dbgActiveWaitingComponents.length&&ctxData.sessionResult&&(runtime.sessionClosed=!0,step={state:{sessionClosed:!0},dbgSession:null,expiredDbgSession:runtime.xDebugId,sessionClosed:!0}),!step&&dbgActiveReadyComponents.length>0){const promises=[];for(let dbgComponent of dbgActiveReadyComponents){const injectInput=runtime.xDebugPendingInject?dbgComponent.ctx.input:void 0;promises.push(agent.callComponent(dbgComponent.ctx.sourceId,dbgComponent.id,injectInput))}const dbgResults=await Promise.all(promises),state=dbgResults.length==1?dbgResults[0]:dbgResults;runtime.xDebugPendingInject=null;const remainingActiveComponents=Object.values(ctxData?.components||[]).filter(c=>c?.ctx?.active==!0),activeAsyncComponents=Object.values(ctxData?.components||[]).filter(c=>!c?.ctx?.output?._error&&Array.isArray(c?.ctx?._job_components)&&c?.ctx?._job_components.length>0);dbgAllComponents.filter(c=>c?.ctx?.status&&typeof c?.ctx?.output!==void 0).length==remainingActiveComponents.length&&(ctxData.sessionResult=!0);const triggers=Object.values(agent.triggers);let triggersResults=dbgResults.flat().filter(e=>e.id&&e.result&&!e.result._missing_inputs&&!e.result._in_progress&&triggers.find(t=>t.id==e.id)),sessionResults=dbgResults.flat().filter(e=>e.id&&e.result&&!e.result._missing_inputs&&!agent.connections.find(c=>c.sourceId==e.id));sessionResults=sessionResults.concat(triggersResults);let errorResults=dbgResults.flat().filter(e=>e.id&&(e.error||e.result?._error));errorResults=errorResults.filter(e=>!ctxData?.components?.[e.id]?.ctx?.runtimeData?._ChildLoopData),ctxData.sessionResult&&sessionResults.length==0&&runtime.sessionClosed&&(sessionResults=errorResults),ctxData.sessionResults=sessionResults,step={state,dbgSession:runtime.xDebugRun,sessionResult:runtime.agentContext.sessionResult,sessionResults:runtime.agentContext.sessionResults,errorResults,sessionClosed:remainingActiveComponents.length==0&&activeAsyncComponents.length==0}}else runtime.sessionClosed=!0,step={state:{sessionClosed:!0},dbgSession:null,expiredDbgSession:runtime.xDebugId,sessionClosed:!0};if(this.checkCircularLimit(),step.sessionResults&&_AgentRuntime2.processResults[this.processID].sessionResults.push(step.sessionResults),step.errorResults&&_AgentRuntime2.processResults[this.processID].errorResults.push(step.errorResults),step?.sessionClosed||this.circularLimitReached){const finalResult=this.processResults();step.finalResult=finalResult,runtime.sessionClosed=!0}return this.incStep(),this.sync(),step}processResults(){let result={error:"Error processing results"};const sessionResults=_AgentRuntime2.processResults[this.processID].sessionResults,errorResults=_AgentRuntime2.processResults[this.processID].errorResults;if(this.circularLimitReached)result={error:`Circular Calls Limit Reached on ${this.circularLimitReached}. Current circular limit is ${this.agent.circularLimit}`};else{let _state=[sessionResults,errorResults].flat(1/0);(!_state||_state.length==0)&&(_state=errorResults.flat(1/0)),result=_state.reduce((acc,current)=>(acc.seen[current.id]||(acc.result.push(current),acc.seen[current.id]=!0),acc),{seen:{},result:[]}).result.filter(e=>!e.result?._exclude)}return delete _AgentRuntime2.processResults[this.processID],this.sync(),result}checkCircularLimit(){if(this.circularLimitReached)return this.agentContext.circularLimitReached;for(let componentId in _AgentRuntime2.tagsData[this.reqTag])if(_AgentRuntime2.tagsData[this.reqTag][componentId]>this.agent.circularLimit)return this.sessionClosed=!0,this.agentContext.circularLimitReached=componentId,componentId;return!1}async injectDebugOutput(componentId){let component={};if(this.xDebugPendingInject?component=this.xDebugPendingInject?.find(c=>c.id==componentId):this.xMockDataInject&&(component=this.xMockDataInject?.find(c=>c.id==componentId)),component?.ctx?.output){let allEmpty=!0;for(let key in component.ctx.output)if(component.ctx.output[key]!=""){allEmpty=!1;break}return allEmpty?null:component.ctx.output}}getRuntimeData(componentId){const componentData=this.getComponentData(componentId);return componentData?componentData.runtimeData||{}:{}}updateRuntimeData(componentId,data){const componentData=this.getComponentData(componentId);componentData&&(componentData.runtimeData={...componentData.runtimeData,...data},this.sync())}saveRuntimeComponentData(componentId,data){this.updateComponent(componentId,{runtimeData:data})}incStep(){this.agentContext.incStep()}updateComponent(componentId,data){this.agentContext.updateComponent(componentId,data)}resetComponent(componentId){this.agentContext.resetComponent(componentId)}getComponentData(componentId){return this.agentContext.getComponentData(componentId)}};__publicField$1L(_AgentRuntime,"processResults",{}),__publicField$1L(_AgentRuntime,"tagsData",{}),__publicField$1L(_AgentRuntime,"dummy",AgentRuntimeUnavailable);let AgentRuntime=_AgentRuntime;const OSResourceMonitor={mem:getMemoryUsage(),cpu:getCpuUsage()};function getCpuUsage(){const cpus=os.cpus();let user=0,nice=0,sys=0,idle=0,irq=0,total=0;for(let cpu of cpus)user+=cpu.times.user,nice+=cpu.times.nice,sys+=cpu.times.sys,idle+=cpu.times.idle,irq+=cpu.times.irq;return total=user+nice+sys+idle+irq,{user:user/total*100,sys:sys/total*100,idle:idle/total*100,load:100-idle/total*100}}function getMemoryUsage(){const totalMemory=os.totalmem(),freeMemory=os.freemem(),usedMemory=totalMemory-freeMemory;return{totalMemory:(totalMemory/1024**3).toFixed(2)+" GB",freeMemory:(freeMemory/1024**3).toFixed(2)+" GB",usedMemory:(usedMemory/1024**3).toFixed(2)+" GB",memoryUsagePercentage:(usedMemory/totalMemory*100).toFixed(2)}}var THook=(THook2=>(THook2.Blocking="blocking",THook2.NonBlocking="non-blocking",THook2))(THook||{});const blockingHooks={},nonBlockingHooks={},blockingAfterHooks={},nonBlockingAfterHooks={};class HookService{static register(hookName,callback,mode="blocking"){if(typeof callback!="function")throw new Error("Hook callback must be a function");mode==="non-blocking"?(nonBlockingHooks[hookName]||(nonBlockingHooks[hookName]=[]),nonBlockingHooks[hookName].push(callback)):(blockingHooks[hookName]||(blockingHooks[hookName]=[]),blockingHooks[hookName].push(callback))}static registerAfter(hookName,callback,mode="blocking"){if(typeof callback!="function")throw new Error("After-hook callback must be a function");mode==="non-blocking"?(nonBlockingAfterHooks[hookName]||(nonBlockingAfterHooks[hookName]=[]),nonBlockingAfterHooks[hookName].push(callback)):(blockingAfterHooks[hookName]||(blockingAfterHooks[hookName]=[]),blockingAfterHooks[hookName].push(callback))}static trigger(hookName,...args){blockingHooks[hookName]&&blockingHooks[hookName].forEach(callback=>callback(...args)),nonBlockingHooks[hookName]&&nonBlockingHooks[hookName].forEach(callback=>callback(...args))}static triggerAfter(hookName,result,args,error){const params={result,args,error};blockingAfterHooks[hookName]&&blockingAfterHooks[hookName].forEach(callback=>callback(params)),nonBlockingAfterHooks[hookName]&&nonBlockingAfterHooks[hookName].forEach(callback=>callback(params))}}function hook(hookName){return function(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=function(...args){return nonBlockingHooks[hookName]&&Promise.allSettled(nonBlockingHooks[hookName].map(callback=>Promise.resolve().then(()=>callback.apply(this,args)))),blockingHooks[hookName]&&blockingHooks[hookName].forEach(callback=>callback.apply(this,args)),originalMethod.apply(this,args)},descriptor}}function hookAsync(hookName,customContext){return function(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){let _context;typeof customContext=="function"?_context=await customContext(this):typeof customContext=="object"?_context=customContext:_context=this,nonBlockingHooks[hookName]&&Promise.allSettled(nonBlockingHooks[hookName].map(callback=>Promise.resolve(callback.apply(_context,args)))).catch(err=>console.error(`Non-blocking hook ${hookName} error:`,err));let result,error;try{blockingHooks[hookName]&&await Promise.all(blockingHooks[hookName].map(callback=>Promise.resolve(callback.apply(_context,args)))),result=await originalMethod.apply(this,args)}catch(err){error=err instanceof Error?err:new Error(String(err))}try{nonBlockingAfterHooks[hookName]&&Promise.allSettled(nonBlockingAfterHooks[hookName].map(callback=>Promise.resolve(callback.apply(_context,[{result,args,error}])))).catch(err=>console.error(`Non-blocking after-hook ${hookName} error:`,err)),blockingAfterHooks[hookName]&&await Promise.all(blockingAfterHooks[hookName].map(callback=>Promise.resolve(callback.apply(_context,[{result,args,error}]))))}catch(afterHookError){console.error("Error in after-hooks:",afterHookError)}if(error)throw error;return result},descriptor}}function hookAsyncWithContext(hookName,contextFn){return function(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){const contextualArgs=[typeof contextFn=="function"?await contextFn(this):{},...args];nonBlockingHooks[hookName]&&Promise.allSettled(nonBlockingHooks[hookName].map(callback=>Promise.resolve().then(()=>callback.apply(this,contextualArgs))));let result,error;try{blockingHooks[hookName]&&await Promise.all(blockingHooks[hookName].map(callback=>Promise.resolve(callback.apply(this,contextualArgs)))),result=await originalMethod.apply(this,args)}catch(err){error=err instanceof Error?err:new Error(String(err))}try{nonBlockingAfterHooks[hookName]&&Promise.allSettled(nonBlockingAfterHooks[hookName].map(callback=>Promise.resolve().then(()=>callback({result,args:contextualArgs,error})))),blockingAfterHooks[hookName]&&await Promise.all(blockingAfterHooks[hookName].map(callback=>Promise.resolve(callback({result,args:contextualArgs,error}))))}catch(afterHookError){console.error("Error in after-hooks:",afterHookError)}if(error)throw error;return result},descriptor}}var __defProp$1K=Object.defineProperty,__defNormalProp$1K=(obj,key,value)=>key in obj?__defProp$1K(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1K=(obj,key,value)=>__defNormalProp$1K(obj,key+"",value);class AgentSSE{constructor(agent){this.agent=agent,__publicField$1K(this,"connections",new Map)}add(res,monitorId){this.connections.set(monitorId,res)}[Symbol.iterator](){return this.connections.entries()}async send(_type,_data){if(!_type||!_data)return;const data=typeof _data=="string"?_data:JSON.stringify(_data),message=`event: ${_type}
19
19
  data: ${data}
20
20
 
21
21
  `;for(const[id,connection]of this.connections.entries())try{connection&&!connection.finished?connection.write(message):this.connections.delete(id)}catch(error){console.error(`Error sending SSE to connection ${id}:`,error),this.connections.delete(id)}}remove(connectionId){const connection=this.connections.get(connectionId);if(connection){try{connection&&!connection.finished&&connection.end()}catch(error){console.error(`Error closing connection ${connectionId}:`,error)}return this.connections.delete(connectionId)}return!1}async close(){for(const[id,connection]of this.connections.entries())try{connection&&!connection.finished&&(connection.end(),console.log("Delibertly shutting down sse connection with id: ",id))}catch(error){console.error(`Error closing connection ${id}:`,error)}this.connections.clear()}getConnectionCount(){return this.connections.size}}var __defProp$1J=Object.defineProperty,__getOwnPropDesc$z=Object.getOwnPropertyDescriptor,__defNormalProp$1J=(obj,key,value)=>key in obj?__defProp$1J(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$z=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$z(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$1J(target,key,result),result},__publicField$1J=(obj,key,value)=>__defNormalProp$1J(obj,typeof key!="symbol"?key+"":key,value);const console$u=Logger("Agent"),idPromise=id=>id,MAX_LATENCY=50;class Agent{constructor(id,agentData,agentSettings,agentRequest){this.id=id,this.agentSettings=agentSettings,__publicField$1J(this,"name"),__publicField$1J(this,"data"),__publicField$1J(this,"teamId"),__publicField$1J(this,"components"),__publicField$1J(this,"connections"),__publicField$1J(this,"endpoints",{}),__publicField$1J(this,"triggers",{}),__publicField$1J(this,"sessionId"),__publicField$1J(this,"sessionTag",""),__publicField$1J(this,"callerSessionId"),__publicField$1J(this,"apiBasePath","/api"),__publicField$1J(this,"triggerBasePath","/trigger"),__publicField$1J(this,"agentRuntime"),__publicField$1J(this,"usingTestDomain",!1),__publicField$1J(this,"domain",""),__publicField$1J(this,"debugSessionEnabled",!1),__publicField$1J(this,"circularLimit",100),__publicField$1J(this,"version",""),__publicField$1J(this,"agentVariables",{}),__publicField$1J(this,"_killReason",""),__publicField$1J(this,"async",!1),__publicField$1J(this,"jobID",""),__publicField$1J(this,"planInfo",{}),__publicField$1J(this,"callback"),__publicField$1J(this,"agentRequest"),__publicField$1J(this,"sse"),__publicField$1J(this,"modelsProvider"),__publicField$1J(this,"_componentInstance",{}),__publicField$1J(this,"_componentInstancesLoader",new ControlledPromise(()=>{}));const json=typeof agentData=="string"?JSON.parse(agentData):agentData;this.data=json.connections&&json.components?json:json.data,this.data||(this.data={name:"",connections:[],components:[]}),this.name=this.data.name,this.version=this.data.agentVersion||"",this.teamId=this.data.teamId,this.connections=this.data.connections,this.debugSessionEnabled=this.data.debugSessionEnabled,this.usingTestDomain=this.data.usingTestDomain,this.agentVariables=this.data.variables||{};const endpoints=this.data.components.filter(c=>c.name=="APIEndpoint");for(let endpoint of endpoints){let method=endpoint.data.method||"POST";method=method.toUpperCase(),this.endpoints[`${this.apiBasePath}/${endpoint.data.endpoint}`]||(this.endpoints[`${this.apiBasePath}/${endpoint.data.endpoint}`]={}),this.endpoints[`${this.apiBasePath}/${endpoint.data.endpoint}`][method]=endpoint}const triggers=this.data.components.filter(c=>typeof c.data?.triggerEndpoint=="string");for(let trigger of triggers)this.triggers[`${this.triggerBasePath}/${trigger.data.triggerEndpoint}`]=trigger;this.components={};for(let component of this.data.components)this.components[component.id]=component;for(let connection of this.data.connections){const sourceComponent=this.components[connection.sourceId],targetComponent=this.components[connection.targetId],sourceIndex=typeof connection.sourceIndex=="number"?connection.sourceIndex:sourceComponent.outputs.findIndex(o=>o.name==connection.sourceIndex),targetIndex=typeof connection.targetIndex=="number"?connection.targetIndex:targetComponent.inputs.findIndex(i=>i.name==connection.targetIndex);connection.sourceIndex=sourceIndex,connection.targetIndex=targetIndex;const output=sourceComponent.outputs[sourceIndex];if(output.index=sourceIndex,output.next||(output.next=[]),output.next.push(targetComponent.id),targetIndex>=0){const input=targetComponent.inputs[targetIndex];input&&(input.index=targetIndex,input.prev||(input.prev=[]),input.prev.push(sourceComponent.id))}else for(let input of targetComponent.inputs)input.prev||(input.prev=[]),input.prev.push(sourceComponent.id)}this.tagAsyncComponents(),agentRequest&&this.setRequest(agentRequest),this.sse=new AgentSSE(this);try{ConnectorService.getComponentConnector().requester(AccessCandidate.agent(id)).getAll().then(customComponents=>{this._componentInstance={...this._componentInstance,...customComponents},this._componentInstancesLoader.resolve(!0)})}catch{console$u.warn("Could not load custom components",AccessCandidate.agent(this.id)),this._componentInstancesLoader.reject("Could not load custom components")}const modelsProvider=ConnectorService.getModelsProviderConnector();modelsProvider.valid&&(this.modelsProvider=modelsProvider.agent(id))}get ComponentInstances(){return this._componentInstance}addSSE(sseSource,monitorId){if(sseSource instanceof AgentSSE)for(const[monitorId2,res]of sseSource)this.sse.add(res,monitorId2);else{const id=monitorId||Math.random().toString(36).substring(2,15);this.sse.add(sseSource,id)}}setRequest(agentRequest){if(this.agentRequest)return;this.agentRequest=agentRequest,this.agentRequest=agentRequest;const dateTime=getCurrentFormattedDate();this.sessionId="rt-"+(this.agentRequest.sessionID||dateTime+"."+uid());const sessionTags=this?.agentRequest?.headers["x-session-tag"];sessionTags&&(this.sessionTag+=this.sessionTag?`,${sessionTags}`:sessionTags);var regex=new RegExp(`^/v[0-9]+(.[0-9]+)?(${this.apiBasePath}|${this.triggerBasePath})/(.*)`);this.agentRequest?.path?.startsWith(`${this.apiBasePath}/`)||this.agentRequest?.path?.startsWith(`${this.triggerBasePath}/`)||this.agentRequest?.path?.match(regex)?(this.agentRuntime=new AgentRuntime(this),this.callerSessionId=this?.agentRequest?.headers["x-caller-session-id"]?.substring(0,256)||this.agentRuntime.workflowReqId||this.sessionId):this.agentRuntime=AgentRuntime.dummy}setCallback(callback){this.callback=callback}kill(reason="kill"){this._killReason=reason}isKilled(){return!!this._killReason}async parseVariables(){if(typeof this.agentVariables=="object")for(let key in this.agentVariables){const value=this.agentVariables[key];value.startsWith("{{")&&value.endsWith("}}")&&(this.agentVariables[key]=await TemplateString(value).parseTeamKeysAsync(this.teamId).asyncResult)}}async process(endpointPath,input){await this.agentRuntime.ready();let result,dbgSession=null,sessionClosed=!1;const eventId="e-"+uid(),startTime=Date.now();this.sse.send("agent",{eventId,action:"callStart",endpointPath,id:this.id,name:this.name,startTime,input});const logId=AgentLogger.log(this,null,{sourceId:endpointPath,componentId:"AGENT",domain:this.domain,input,workflowID:this.agentRuntime.workflowReqId,processID:this.agentRuntime.processID,inputTimestamp:new Date().toISOString(),sessionID:this.callerSessionId,tags:this.sessionTag}),method=this.agentRequest.method.toUpperCase(),endpoint=this.endpoints[endpointPath]?.[method]||this.triggers[endpointPath];if(this.agentRuntime.debug){if(!endpoint&&this.agentRequest.path!="/api/")throw logId&&AgentLogger.log(this,logId,{error:`Endpoint ${method} ${endpointPath} Not Found`}),new Error(`Endpoint ${method} ${endpointPath} Not Found`);let dbgResult;if(dbgResult||(dbgResult=await this.agentRuntime.runCycle()),dbgResult&&typeof dbgResult?.state<"u")return this.agentRuntime.sync(),dbgResult?.finalResult&&(dbgResult.finalResult=await this.postProcess(dbgResult.finalResult).catch(error=>({error}))),dbgResult}if(!endpoint){logId&&AgentLogger.log(this,logId,{error:`Endpoint ${method} ${endpointPath} Not Found`});const endTime2=Date.now(),duration2=endTime2-startTime;throw this.sse.send("agent",{eventId,action:"callStop",endpointPath,id:this.id,name:this.name,startTime,endTime:endTime2,duration:duration2,input,error:`Endpoint ${method} ${endpointPath} Not Found`}),new Error(`Endpoint ${method} ${endpointPath} Not Found`)}this.agentRuntime.updateComponent(endpoint.id,{active:!0,input,sourceId:null});let step;do{step=await this.agentRuntime.runCycle();const qosLatency=Math.floor(OSResourceMonitor.cpu.load*MAX_LATENCY||0);await delay(10+qosLatency)}while(!step?.finalResult&&!this._killReason);if(this._killReason){const endTime2=Date.now(),duration2=endTime2-startTime;return this.sse.send("agent",{eventId,action:"callStop",endpointPath,id:this.id,name:this.name,startTime,endTime:endTime2,duration:duration2,input,error:"Agent killed"}),console$u.warn(`Agent ${this.id} was killed`,AccessCandidate.agent(this.id)),{error:"AGENT_KILLED",reason:this._killReason}}if(result=await this.postProcess(step?.finalResult).catch(error=>({error})),this.agentRuntime.circularLimitReached){const circularLimitData=this.agentRuntime.circularLimitReached;result={error:`Circular Calls Limit Reached on ${circularLimitData}. Current circular limit is ${this.circularLimit}`};const endTime2=Date.now(),duration2=endTime2-startTime;throw this.sse.send("agent",{eventId,action:"callStop",endpointPath,id:this.id,name:this.name,startTime,endTime:endTime2,duration:duration2,input,error:result.error}),new Error(`Circular Calls Limit Reached on ${circularLimitData}. Current circular limit is ${this.circularLimit}`)}logId&&AgentLogger.log(this,logId,{outputTimestamp:""+Date.now(),result}),this.updateTasksCount();const endTime=Date.now(),duration=endTime-startTime;return this.sse.send("agent",{eventId,action:"callStop",endpointPath,id:this.id,name:this.name,startTime,endTime,duration,input,result}),this.agentRuntime.debug?{state:result,dbgSession,sessionClosed}:result}async updateTasksCount(){}async postProcess(result){Array.isArray(result)&&(result=result.flat(1/0)),Array.isArray(result)||(result=[result]),result=result.filter(r=>!(r?.result?._error&&r?.result?._error_handled));for(let i=0;i<result.length;i++){const _result=result[i];if(!_result)continue;_result._debug&&delete _result._debug,_result._debug_time&&delete _result._debug_time,_result.result?._debug&&delete _result.result._debug,_result.result?._debug_time&&delete _result.result._debug_time;const _componentData=this.components[_result.id];if(!_componentData)continue;const _component=this._componentInstance[_componentData.name];if(!_component)continue;const postProcessResult=await _component.postProcess(_result,_componentData,this).catch(error=>({error}));result[i]=postProcessResult}return result.length==1&&(result=result[0]),result}hasLoopAncestor(inputEntry){if(!inputEntry.prev)return!1;for(let prevId of inputEntry.prev){const prevComponentData=this.components[prevId];if(this.agentRuntime.getRuntimeData(prevId)?._LoopData)return!0;for(let inputEntry2 of prevComponentData.inputs)if(this.hasLoopAncestor(inputEntry2))return!0}return!1}clearChildLoopRuntimeComponentData(componentId){const componentData=this.components[componentId],runtimeData=this.agentRuntime.getRuntimeData(componentId);if(runtimeData._ChildLoopData)for(let inputEntry of componentData.inputs)this.hasLoopAncestor(inputEntry)&&delete runtimeData.input[inputEntry.name]}getComponentMissingInputs(componentId,_input){let missingInputs=[];const componentData=this.components[componentId];if(this._componentInstance[componentData.name].alwaysActive)return missingInputs;const readablePredecessors=this.findReadablePredecessors(componentId),readableInputNames={};for(let pred of readablePredecessors)pred&&(readableInputNames[pred.input.name]=pred);const allInputIndexes=this.connections.filter(c=>c.targetId==componentId).map(e=>e.targetIndex),allInputs=componentData.inputs.filter(r=>allInputIndexes.includes(r.index));if(Array.isArray(allInputs)&&allInputs.length>0){for(let input of allInputs)if(!input.optional){if(readableInputNames[input.name]){const pred=readableInputNames[input.name],component2=pred.component,predComponentData=this.components[pred.id];if(component2.hasOutput(pred.output.name,predComponentData,this))continue}typeof _input[input.name]>"u"&&missingInputs.push(input.name)}}return missingInputs}findReadablePredecessors(componentId){const componentData=this.components[componentId];return this._componentInstance[componentData.name],this.connections.filter(c=>c.targetId==componentId).map(c=>{const sourceComponentData=this.components[c.sourceId],sourceComponent=this._componentInstance[sourceComponentData.name],output=sourceComponentData.outputs[c.sourceIndex],input=componentData.inputs[c.targetIndex];return sourceComponent.hasReadOutput?{output,input,component:sourceComponent,id:c.sourceId}:null}).filter(e=>e!=null)}updateStep(sourceId,componentId){const agentRuntime=this.agentRuntime,step=agentRuntime.curStep;agentRuntime.updateComponent(componentId,{step})}async callComponent(sourceId,componentId,input){const startTime=Date.now(),agentRuntime=this.agentRuntime,componentData=this.components[componentId],component=this._componentInstance[componentData.name],eventId="e-"+uid();if(this.sse.send("component",{eventId,action:"callStart",sourceId,id:componentId,name:componentData.displayName,title:componentData.title,startTime,input}),this._killReason){console$u.warn(`Agent ${this.id} was killed, skipping component ${componentData.name}`,AccessCandidate.agent(this.id));const output2={id:componentData.id,name:componentData.displayName,result:null,error:"Agent killed"},endTime2=Date.now(),duration2=endTime2-startTime;return this.sse.send("component",{eventId,action:"callStop",sourceId,id:componentId,name:componentData.displayName,title:componentData.title,startTime,endTime:endTime2,duration:duration2,output:output2}),output2}if(!component){const endTime2=Date.now(),duration2=endTime2-startTime;throw this.sse.send("component",{eventId,action:"callStop",sourceId,id:componentId,name:componentData.displayName,title:componentData.title,startTime,endTime:endTime2,duration:duration2,output:{error:"Component not found"}}),new Error(`Component ${componentData.name} not found`)}if(this.agentRuntime.incTag(componentId),this.agentRuntime.checkCircularLimit(),this.agentRuntime.circularLimitReached){const endTime2=Date.now(),duration2=endTime2-startTime;return this.sse.send("component",{eventId,action:"callStop",sourceId,id:componentId,name:componentData.displayName,title:componentData.title,startTime,endTime:endTime2,duration:duration2,output:{error:"Circular Calls Reached"}}),{error:"Circular Calls Reached"}}agentRuntime.getComponentData(componentId)?.output?._missing_inputs&&agentRuntime.updateComponent(componentId,{output:{}});const _input=this.prepareComponentInput(componentId,input),logId=AgentLogger.log(this,null,{sourceId:sourceId||"AGENT",componentId,domain:this.domain,workflowID:this.agentRuntime.workflowReqId,processID:this.agentRuntime.processID,input:componentData.name=="APIEndpoint"?this.agentRequest.method=="GET"?this.agentRequest.query:this.agentRequest.body:_input,inputTimestamp:new Date().toISOString(),sessionID:this.callerSessionId,tags:this.sessionTag});let output=null,missingInputs=[];if(this.updateStep(sourceId,componentId),agentRuntime.debug&&(output=await agentRuntime.injectDebugOutput(componentId)),!output){if(missingInputs=this.getComponentMissingInputs(componentId,_input),missingInputs.length>0){agentRuntime.updateComponent(componentId,{active:!0,status:"waiting"});const connections=this.connections.filter(c=>c.sourceId==componentId)||[];for(let connection of connections)if(componentData.outputs[connection.sourceIndex].name=="_error")break;output={_error:"Missing inputs : "+JSON.stringify(missingInputs),_missing_inputs:missingInputs}}if(!output){const validationResult=await component.validateConfig(componentData);if(validationResult._error)output=validationResult;else try{await this.parseVariables(),output=await component.process({...this.agentVariables,..._input},{...componentData,eventId},this),console$u.debug(output,AccessCandidate.agent(this.id))}catch(error){console$u.error("Error on component process: ",{componentId,name:componentData.name,input:_input},error,AccessCandidate.agent(this.id)),error?.message?output={Response:void 0,_error:error.message,_debug:error.message}:output={Response:void 0,_error:error.toString(),_debug:error.toString()}}}}const runtimeData=this.agentRuntime.getRuntimeData(componentId);if(agentRuntime.updateComponent(componentId,{output}),output._in_progress&&agentRuntime.updateComponent(componentId,{active:!0,status:"in_progress"}),(output.error||output._error)&&(runtimeData?._ChildLoopData?._in_progress||this.agentRuntime.resetComponent(componentId),logId&&AgentLogger.log(this,logId,{error:output.error||output._error}),output.error)){const endTime2=Date.now(),duration2=endTime2-startTime;return this.sse.send("component",{eventId,action:"callStop",sourceId,id:componentId,name:componentData.displayName,title:componentData.title,startTime,endTime:endTime2,duration:duration2,output:{error:output.error||output._error}}),[{id:componentData.id,name:componentData.displayName,result:null,error:output.error||output._error,_debug:output.error||output._error}]}let results=[];if(output&&!output._missing_inputs){if(AgentLogger.logTask(this,1),results=await this.callNextComponents(componentId,output).catch(error=>({error,id:componentData.id,name:componentData.displayName})),runtimeData._LoopData&&output._in_progress&&runtimeData._LoopData.branches==null){const branches=Array.isArray(results)?results.length:1;output._in_progress&&(runtimeData._LoopData.branches=branches,agentRuntime.updateRuntimeData(componentId,{_LoopData:runtimeData._LoopData}))}if(results._is_leaf){delete results._is_leaf;const _ChildLoopData=runtimeData._ChildLoopData;if(_ChildLoopData&&_ChildLoopData.parentId){const parentId=_ChildLoopData.parentId,_LoopData=this.agentRuntime.getRuntimeData(parentId)._LoopData;if(_LoopData){_LoopData.result||(_LoopData.result=[]);let resultsCopy=JSON.parse(JSON.stringify(results));results.result&&(results.result._exclude=!0),resultsCopy=await component.postProcess(resultsCopy,componentData,this),_LoopData.result.push(resultsCopy),_LoopData.branches--,_LoopData.branches<=0&&agentRuntime.updateComponent(parentId,{active:!0,status:""}),agentRuntime.updateRuntimeData(parentId,{_LoopData})}}else{const _LoopData=this.agentRuntime.getRuntimeData(componentId)._LoopData;_LoopData&&_LoopData.loopIndex==1&&(_LoopData._in_progress=!1,output._in_progress=!1,agentRuntime.updateComponent(componentId,{active:!0,status:""}),agentRuntime.updateRuntimeData(componentId,{_LoopData}))}}}!output._missing_inputs&&!output._in_progress&&(runtimeData?._ChildLoopData?._in_progress&&runtimeData._ChildLoopData?.loopIndex<runtimeData._ChildLoopData?.loopLength?(this.clearChildLoopRuntimeComponentData(componentId),agentRuntime.updateComponent(componentId,{active:!0,status:"waiting"})):this.agentRuntime.resetComponent(componentId)),Array.isArray(results)&&(results=results.flat(1/0).filter(r=>r.result!=null)),logId&&AgentLogger.log(this,logId,{output,outputTimestamp:""+Date.now()});const endTime=Date.now(),duration=endTime-startTime;return this.sse.send("component",{eventId,action:"callStop",sourceId,id:componentId,name:componentData.displayName,title:componentData.title,startTime,endTime,duration,output}),[results,{id:componentData.id,name:componentData.displayName,result:output}]}JSONExpression(obj,propertyString){const properties=propertyString.split(/\.|\[|\]\.|\]\[|\]/).filter(Boolean);let currentProperty=obj;for(let property of properties){if(currentProperty==null)return;currentProperty=currentProperty[property]}return currentProperty}async callNextComponents(componentId,output){const agentRuntime=this.agentRuntime,componentData=this.components[componentId];this._componentInstance[componentData.name];let connections=this.connections.filter(c=>c.sourceId==componentId).map(c=>({...c,output,componentData}));const waitingComponents=agentRuntime.getWaitingComponents(),waitingComponentIds=waitingComponents.map(e=>e.id),alwaysActiveIds=Object.keys(this.agentRuntime.alwaysActiveComponents),alwaysActiveConnections=this.connections.filter(c=>alwaysActiveIds.includes(c.sourceId)&&waitingComponentIds.includes(c.targetId)).map(c=>{const output2={};waitingComponents.find(e=>e.id==c.targetId);const prevComponentData=this.components[c.sourceId],prevComponent=this._componentInstance[prevComponentData.name],outputEndpoint=prevComponentData.outputs[c.sourceIndex];return output2[outputEndpoint.name]=prevComponent.readOutput(outputEndpoint.name,prevComponentData,this),{...c,output:output2,componentData:this.components[c.sourceId]}});if(connections=[...connections,...alwaysActiveConnections],!Array.isArray(connections)||connections.length==0)return{id:componentData.id,name:componentData.name,result:output,_is_leaf:!0};const targetComponents=connections.reduce((acc,obj)=>{let key=obj.targetId;return acc[key]||(acc[key]=[]),acc[key].push(obj),acc},{}),promises=[];for(let targetId in targetComponents){const targetComponentData=this.components[targetId];if(!this.async&&targetComponentData.async&&targetComponentData.name!=="Async")continue;this._componentInstance[targetComponentData.name];const connections2=targetComponents[targetId];let _isErrorHandler=!1;if(Array.isArray(connections2)&&connections2.length>0){const nextInput={};for(let connection of connections2){const output2=connection.output,componentData2=connection.componentData,outputEndpoint=componentData2.outputs[connection.sourceIndex],inputEndpoint=targetComponentData.inputs[connection.targetIndex],outputExpression=outputEndpoint.expression||outputEndpoint.name,outputParts=outputExpression.split("."),defaultOutputs=componentData2.outputs.find(c=>c.default);let value;if(outputEndpoint.name=="_error"&&(_isErrorHandler=!0),outputEndpoint.default?value=output2[outputEndpoint.name]:defaultOutputs&&(value=output2[defaultOutputs.name]?.[outputEndpoint.name]),value===void 0&&outputParts.length>=1){let val=this.JSONExpression(output2,outputExpression);val!==void 0&&(value=val)}if(value!==void 0){let combinedInput=_mergeInputs(nextInput[inputEndpoint.name],value).filter(e=>e!==void 0);nextInput[inputEndpoint.name]=combinedInput.length===1?combinedInput[0]:combinedInput}}if(!nextInput||JSON.stringify(nextInput)=="{}")continue;const input=this.prepareComponentInput(targetId,nextInput),targetComponent2=this.components[targetId];_isErrorHandler&&targetComponent2&&(output._error_handled=!0);const status=this.getComponentMissingInputs(targetId,input).length>0?"waiting":void 0,sourceRuntimeData=this.agentRuntime.getRuntimeData(componentId);let _ChildLoopData=sourceRuntimeData._LoopData;(!_ChildLoopData||!_ChildLoopData._in_progress)&&(_ChildLoopData=sourceRuntimeData._ChildLoopData),agentRuntime.updateComponent(targetId,{active:!0,input:nextInput,sourceId:componentId,status}),agentRuntime.updateRuntimeData(targetId,{_ChildLoopData,_LoopData:null}),promises.push(idPromise({id:targetId,name:targetComponent2.name,inputs:nextInput})),status&&AgentLogger.log(this,null,{sourceId:componentId,componentId:targetId,step:this.agentRuntime.curStep+1,domain:this.domain,workflowID:this.agentRuntime.workflowReqId,processID:this.agentRuntime.processID,input:{__action:"status_update",__status:status,data:nextInput},inputTimestamp:new Date().toISOString(),sessionID:this.callerSessionId,tags:this.sessionTag})}}if(promises.length==0)return{id:componentData.id,name:componentData.name,result:output,_is_leaf:!0};const results=await Promise.all(promises);return results.length==1?results[0]:results}prepareComponentInput(targetId,inputs){const rData=this.agentRuntime.getRuntimeData(targetId),componentData=this.components[targetId],rDataInput=rData?.input||{};let _input={...rDataInput};if(inputs)for(let key in inputs){let value=inputs[key];_input[key]=_mergeInputs(rDataInput[key],value).filter(e=>e!==void 0),_input[key].length==1&&(_input[key]=_input[key][0])}const readablePredecessors=this.findReadablePredecessors(targetId);for(let c of readablePredecessors)if(c){const predComponentData=this.components[c.id],value=c.component.readOutput(c.output.name,predComponentData,this);value&&c.input?.name&&(_input||(_input={}),_input[c.input.name]=value)}this.agentRuntime.updateRuntimeData(targetId,{input:_input});for(let input of componentData.inputs)input.defaultVal&&_input[input.name]===void 0&&(_input[input.name]=TemplateString(input.defaultVal).parse(this.agentVariables).result);return _input}getConnectionSource(connection){return this.components[connection.sourceId].inputs.find(e=>e.index===connection.sourceIndex)}getConnectionTarget(connection){return this.components[connection.targetId].inputs.find(e=>e.index===connection.targetIndex)}recursiveTagAsyncComponents(component){const agent=this;for(let output of component.outputs){if(component.name=="Async"&&output.name==="JobID")continue;const connected=agent.connections.filter(c=>c.sourceId===component.id&&c.sourceIndex===output.index);if(connected)for(let con of connected){const targetComponent=agent.components[con.targetId];targetComponent&&(targetComponent.async=!0,this.recursiveTagAsyncComponents(targetComponent))}}}tagAsyncComponents(){const AsyncComponents=Object.values(this.components).filter(c=>c.name==="Async");if(!(!AsyncComponents||AsyncComponents.length==0))for(let AsyncComponent of AsyncComponents)AsyncComponent.async=!0,this.recursiveTagAsyncComponents(AsyncComponent)}}__decorateClass$z([hookAsync("SREAgent.process")],Agent.prototype,"process"),__decorateClass$z([hookAsync("SREAgent.postProcess")],Agent.prototype,"postProcess"),__decorateClass$z([hookAsync("SREAgent.callComponent")],Agent.prototype,"callComponent"),__decorateClass$z([hookAsync("SREAgent.callNextComponents")],Agent.prototype,"callNextComponents");function _mergeInputs(existing,newValue){return existing===void 0?[newValue]:(Array.isArray(existing)||(existing=[existing]),[...existing,newValue])}var __defProp$1I=Object.defineProperty,__defNormalProp$1I=(obj,key,value)=>key in obj?__defProp$1I(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1I=(obj,key,value)=>__defNormalProp$1I(obj,typeof key!="symbol"?key+"":key,value);class AgentRequest{constructor(req){if(__publicField$1I(this,"headers"),__publicField$1I(this,"body"),__publicField$1I(this,"query"),__publicField$1I(this,"params"),__publicField$1I(this,"method","GET"),__publicField$1I(this,"path",""),__publicField$1I(this,"sessionID",""),__publicField$1I(this,"res",null),__publicField$1I(this,"req",null),__publicField$1I(this,"files",[]),__publicField$1I(this,"_agent_authinfo"),!req)return;this.headers=JSON.parse(JSON.stringify(req.headers||{})),this.body=JSON.parse(JSON.stringify(req.body||req.data||{})),this.query=JSON.parse(JSON.stringify(req.query||{})),this.params=JSON.parse(JSON.stringify(req.params||{}));const lowerCaseHeaders=Object.fromEntries(Object.entries(this.headers).map(([key,value])=>[key.toLowerCase(),value]));if(this.headers={...lowerCaseHeaders,...this.headers},req?.url)try{const url=new URL(req.url);this.path=url.pathname,this.query={...this.query,...Object.fromEntries(url.searchParams)}}catch{}req?.path&&(this.path=req.path),this.method=req.method,this.sessionID=req.sessionID,this.files=req.files||[],this._agent_authinfo=req._agent_authinfo,this.req=req instanceof AgentRequest?req?.req:req,this.res=req?.res||null}header(name){return this.headers[name.toLowerCase()]}}var __defProp$1H=Object.defineProperty,__defNormalProp$1H=(obj,key,value)=>key in obj?__defProp$1H(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1H=(obj,key,value)=>__defNormalProp$1H(obj,typeof key!="symbol"?key+"":key,value);Logger("EmbodimentSettings");class EmbodimentSettings{constructor(agentId){__publicField$1H(this,"_embodiments"),__publicField$1H(this,"_ready",!1),this.init(agentId)}async init(agentId){const agentDataConnector=ConnectorService.getAgentDataConnector();this._embodiments=await agentDataConnector.getAgentEmbodiments(agentId).catch(error=>[]),this._ready=!0}ready(maxWait=1e4){return new Promise((resolve,reject)=>{const interval=setInterval(()=>{this._ready&&(clearInterval(interval),resolve(!0)),maxWait-=100},100);setTimeout(()=>{clearInterval(interval),reject(!1)},maxWait)})}get(embodimentType,key){if(!this._embodiments)return;const _embodiment=this._embodiments.find(embodiment=>embodiment.type?.toLowerCase()===embodimentType.toLowerCase());return key?_embodiment?.properties?.[key]:_embodiment?.properties}}var __defProp$1G=Object.defineProperty,__defNormalProp$1G=(obj,key,value)=>key in obj?__defProp$1G(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1G=(obj,key,value)=>__defNormalProp$1G(obj,typeof key!="symbol"?key+"":key,value);Logger("AgentSettings");class AgentSettings{constructor(agentId){__publicField$1G(this,"_settings"),__publicField$1G(this,"embodiments"),__publicField$1G(this,"_ready",!1),agentId&&this.init(agentId)}async init(agentId){this.embodiments=new EmbodimentSettings(agentId);const agentDataConnector=ConnectorService.getAgentDataConnector();this._settings=await agentDataConnector.getAgentSettings(agentId).catch(e=>{})||{},this._ready=!0}ready(maxWait=1e4){return new Promise((resolve,reject)=>{const interval=setInterval(()=>{this._ready&&(clearInterval(interval),resolve(!0)),maxWait-=100},100);setTimeout(()=>{clearInterval(interval),reject(!1)},maxWait)})}get(key){return this._settings?.[key]||""}set(key,value){this._settings[key]=value}has(key){return this._settings[key]}}var __defProp$1F=Object.defineProperty,__defNormalProp$1F=(obj,key,value)=>key in obj?__defProp$1F(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1F=(obj,key,value)=>__defNormalProp$1F(obj,typeof key!="symbol"?key+"":key,value);class AgentProcess{constructor(agentData,agentVersion){this.agentData=agentData,this.agentVersion=agentVersion,__publicField$1F(this,"agent"),__publicField$1F(this,"_loadPromise"),this.initAgent(agentData,agentVersion)}async initAgent(agentData,agentVersion){let data,agentId;if(typeof agentData=="object")data=agentData,data.components&&data.connections&&(data={data,version:"1.0"}),agentId=data.data.id||"tmp-"+uid();else{const jsonRegex=/^{.*}$/g,jsonData=agentData.match(jsonRegex)?.[0],idRegex=/^[a-zA-Z0-9\-]+$/g;agentId=agentData.match(idRegex)?.[0],agentId&&(data=await ConnectorService.getAgentDataConnector().getAgentData(agentId,agentVersion)),!data&&jsonData&&(data=JSON.parse(jsonData),agentId=data.id||"tmp-"+uid(),data.components&&data.connections&&(data={data,version:"1.0"}))}const agentSettings=new AgentSettings(agentId);this.agent=new Agent(agentId,data,agentSettings)}async ready(){return this._loadPromise?this._loadPromise:this._loadPromise=new Promise(resolve=>{let maxWait=1e4;const itv=setInterval(()=>{this.agent&&(clearInterval(itv),resolve(!0)),maxWait-=100,maxWait<=0&&(clearInterval(itv),resolve(!1))},100)})}static load(agentData,agentVersion){return new AgentProcess(agentData,agentVersion)}async run(reqConfig,callback){if(await this.ready(),!this.agent)throw new Error("Failed to load agent");let request=this.parseReqConfig(reqConfig);this.agent.setRequest(request),typeof callback=="function"&&this.agent.setCallback(callback);const pathMatches=request.path.match(/(^\/v[0-9]+\.[0-9]+?)?(\/(api|trigger)\/(.+)?)/);if(!pathMatches||!pathMatches[2])return{status:404,data:{error:"Endpoint not found"}};const endpointPath=pathMatches[2],input=request.method=="GET"?request.query:request.body;return{data:await this.agent.process(endpointPath,input).catch(error=>({error:error.message}))}}reset(){this.initAgent(this.agentData)}parseReqConfig(reqConfig){return reqConfig instanceof AgentRequest?reqConfig:Array.isArray(reqConfig)?this.parseCLI(reqConfig):new AgentRequest(reqConfig)}parseCLI(argList){const cliConnector=ConnectorService.getCLIConnector(),methods=["get","post","put","delete","patch","head","options"],cli=cliConnector.parse(argList,["endpoint","post","get","put","delete","patch","head","options","headers","session"]),usedMethod=methods.find(method=>cli[method]),req=new AgentRequest;switch(req.method=usedMethod?.toUpperCase()||"GET",req.body={},req.query={},usedMethod){case"get":case"delete":case"head":case"options":req.query=cli[usedMethod];break;case"post":case"put":case"patch":req.body=cli[usedMethod];break}req.path=`/api/${cli.endpoint}`,req.params=cli.endpoint?.split("/"),req.headers=cli.headers||{};for(let key in req.headers)req.headers[key.toLowerCase()]=req.headers[key],delete req.headers[key];if(req.sessionID=cli.session||uid(),req.files=[],req.body)for(let entry in req.body){let value=req.body[entry];const filePath=path.join(process.cwd(),value),fileName=path.basename(filePath);if(fs__default.existsSync(filePath))try{const fileBuffer=fs__default.readFileSync(filePath),ext=fileName.split(".").pop(),fileObj={fieldname:entry,originalname:fileName,buffer:fileBuffer,mimetype:mime.getType(ext)||"application/octet-stream"};delete req.body[entry],req.files.push(fileObj),FileType.fileTypeFromBuffer(fileBuffer).then(fileType=>{fileType&&(fileObj.mimetype=fileType.mime)})}catch(error){console.warn("Coud not read file",filePath,error.message)}}return req}async post(path2,input,headers){return this.run({method:"POST",path:path2,body:input||{},headers})}async get(path2,query,headers){return this.run({method:"GET",path:path2,query,headers})}async readDebugState(stateId,reqConfig){if(await this.ready(),!this.agent)throw new Error("Failed to load agent");let request=this.parseReqConfig(reqConfig);return this.agent.setRequest(request),await this.agent.agentRuntime.ready(),this.agent.agentRuntime.readState(stateId,!0)}}function isAgent(agent){return typeof agent=="object"&&agent.id&&typeof agent.callComponent=="function"}var __defProp$1E=Object.defineProperty,__defNormalProp$1E=(obj,key,value)=>key in obj?__defProp$1E(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1E=(obj,key,value)=>__defNormalProp$1E(obj,typeof key!="symbol"?key+"":key,value);const ACLHashAlgo={none:source=>source,xxh3:source=>{const h64=xxhash.h64();return source?h64.update(source.toString()).digest().toString(16):null}};class ACL{constructor(acl){__publicField$1E(this,"hashAlgorithm"),__publicField$1E(this,"entries"),__publicField$1E(this,"migrated"),typeof acl=="string"?this.deserializeACL(acl):(this.hashAlgorithm=acl?.hashAlgorithm,this.entries=acl?.entries?JSON.parse(JSON.stringify(acl?.entries)):{},this.migrated=acl?.migrated),this.hashAlgorithm||(this.hashAlgorithm="xxh3"),this.entries||(this.entries={})}get ACL(){return{hashAlgorithm:this.hashAlgorithm,entries:JSON.parse(JSON.stringify(this.entries)),migrated:this.migrated}}get serializedACL(){return this.serializeACL(this)}static from(acl){return new ACL(acl)}checkExactAccess(acRequest){if(!this?.entries)return!1;const role=this?.entries[acRequest.candidate.role];if(!role)return!1;let entryId=acRequest.candidate.id;if(!ACLHashAlgo[this.hashAlgorithm])throw new Error(`Hash algorithm ${this.hashAlgorithm} not supported`);entryId=ACLHashAlgo[this.hashAlgorithm](entryId);const access=role[entryId];return access?(Array.isArray(acRequest.level)?acRequest.level:[acRequest.level]).every(level=>access.includes(level)):!1}addPublicAccess(level){if(this?.entries[TAccessRole.Public]||(this.entries[TAccessRole.Public]={}),!ACLHashAlgo[this.hashAlgorithm])throw new Error(`Hash algorithm ${this.hashAlgorithm} not supported`);const ownerId=TAccessRole.Public,hashedOwner=ACLHashAlgo[this.hashAlgorithm](ownerId);this?.entries[TAccessRole.Public][hashedOwner]||(this.entries[TAccessRole.Public][hashedOwner]=[]);const curLevel=this.entries[TAccessRole.Public][hashedOwner];return this.entries[TAccessRole.Public][hashedOwner]=[...curLevel,...level],this}removePublicAccess(level){if(!this?.entries[TAccessRole.Public])return this;const ownerId=TAccessRole.Public,hashedOwner=ACLHashAlgo[this.hashAlgorithm](ownerId),curLevel=this[TAccessRole.Public][hashedOwner];return this[TAccessRole.Public][hashedOwner]=curLevel.filter(l=>!level.includes(l)),this}addAccess(role,ownerId,level){if(role===TAccessRole.Public)throw new Error("Adding public access using addAccess method is not allowed. Use addPublicAccess method instead.");const _level=Array.isArray(level)?level:[level];if(this?.entries[role]||(this.entries[role]={}),!ACLHashAlgo[this.hashAlgorithm])throw new Error(`Hash algorithm ${this.hashAlgorithm} not supported`);const hashedOwner=ACLHashAlgo[this.hashAlgorithm](ownerId);if(!hashedOwner)throw new Error(`Invalid ownerId: ${role}:${ownerId}`);this?.entries[role][hashedOwner]||(this.entries[role][hashedOwner]=[]);const curLevel=this.entries[role][hashedOwner];return this.entries[role][hashedOwner]=[...curLevel,..._level],this}static addAccess(role,ownerId,level){return ACL.from().addAccess(role,ownerId,level)}removeAccess(role,ownerId,level){const _level=Array.isArray(level)?level:[level];if(!this[role])return this;if(!this[role][ownerId])return this;const curLevel=this[role][ownerId];return this[role][ownerId]=curLevel.filter(l=>!_level.includes(l)),this}serializeACL(tacl){let compressed="";if(tacl.hashAlgorithm&&(compressed+=`h:${tacl.hashAlgorithm}|`),tacl.entries)for(const[role,entries]of Object.entries(tacl.entries)){const roleShort=RoleMap[role],entriesArray=[];for(const[hashedOwnerKey,accessLevels]of Object.entries(entries||{}))if(accessLevels){const accessLevelsShort=accessLevels.map(level=>LevelMap[level]).join("");entriesArray.push(`${hashedOwnerKey}/${accessLevelsShort}`)}entriesArray.length>0&&(compressed+=`${roleShort}:${entriesArray.join(",")}|`)}return compressed.endsWith("|")&&(compressed=compressed.slice(0,-1)),compressed}deserializeACL(compressed){const parts=compressed.split("|");this.hashAlgorithm="",this.entries={};for(const part of parts)if(part.startsWith("h:"))this.hashAlgorithm=part.substring(2);else{const[roleShort,entries]=part.split(":"),role=ReverseRoleMap[roleShort];if(role){const entriesObj={},entriesArray=entries.split(",");for(const entry of entriesArray){const[hashedOwnerKey,accessLevelsShort]=entry.split("/"),accessLevels=accessLevelsShort.split("").map(short=>ReverseLevelMap[short]);entriesObj[hashedOwnerKey]=accessLevels}this.entries[role]=entriesObj}}}}const console$t=Logger("SecureConnector");class SecureConnector extends Connector{async start(){console$t.info(`Starting ${this.name} connector ...`)}async stop(){console$t.info(`Stopping ${this.name} connector ...`)}async hasAccess(acRequest){const aclHelper=await this.getResourceACL(acRequest.resourceId,acRequest.candidate).catch(error=>(console$t.error(`Error getting ACL for ${acRequest.resourceId}: ${error}`),null));if(!aclHelper)return!1;if(aclHelper.checkExactAccess(acRequest))return!0;const ownerRequest=AccessRequest.clone(acRequest).setLevel(TAccessLevel.Owner);if(aclHelper.checkExactAccess(ownerRequest))return!0;const publicRequest=AccessRequest.clone(acRequest).setCandidate(AccessCandidate.public());if(aclHelper.checkExactAccess(publicRequest))return!0;const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(acRequest.candidate),teamRequest=AccessRequest.clone(acRequest).setCandidate(AccessCandidate.team(teamId));if(aclHelper.checkExactAccess(teamRequest))return!0;const teamOwnerRequest=AccessRequest.clone(teamRequest).setLevel(TAccessLevel.Owner);return!!aclHelper.checkExactAccess(teamOwnerRequest)}async getAccessTicket(resourceId,request){const sysAcRequest=AccessRequest.clone(request).resource(resourceId);return{request,access:await this.hasAccess(sysAcRequest)?TAccessResult.Granted:TAccessResult.Denied}}static AccessControl(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){const[acRequest,resourceId]=args;if(resourceId!==void 0&&(await this.getAccessTicket(resourceId,acRequest)).access!==TAccessResult.Granted)throw console$t.error(`Access denied for ${acRequest.candidate.id} on ${resourceId}`),new ACLAccessDeniedError("Access Denied");return originalMethod.apply(this,args)},descriptor}}class StorageConnector extends SecureConnector{requester(candidate){return{write:async(resourceId,value,acl,metadata)=>await this.write(candidate.writeRequest,resourceId,value,acl,metadata),read:async resourceId=>await this.read(candidate.readRequest,resourceId),delete:async resourceId=>{await this.delete(candidate.readRequest,resourceId)},exists:async resourceId=>await this.exists(candidate.readRequest,resourceId),getMetadata:async resourceId=>await this.getMetadata(candidate.readRequest,resourceId),setMetadata:async(resourceId,metadata)=>{await this.setMetadata(candidate.writeRequest,resourceId,metadata)},getACL:async resourceId=>await this.getACL(candidate.readRequest,resourceId),setACL:async(resourceId,acl)=>await this.setACL(candidate.writeRequest,resourceId,acl),expire:async(resourceId,ttl)=>await this.expire(candidate.writeRequest,resourceId,ttl)}}}class CacheConnector extends SecureConnector{requester(candidate){return{get:async key=>await this.get(candidate.readRequest,key),set:async(key,data,acl,metadata,ttl)=>await this.set(candidate.writeRequest,key,data,acl,metadata,ttl),delete:async key=>{await this.delete(candidate.writeRequest,key)},exists:async key=>await this.exists(candidate.readRequest,key),getMetadata:async key=>await this.getMetadata(candidate.readRequest,key),setMetadata:async(key,metadata)=>{await this.setMetadata(candidate.writeRequest,key,metadata)},updateTTL:async(key,ttl)=>{await this.updateTTL(candidate.writeRequest,key,ttl)},getTTL:async key=>await this.getTTL(candidate.readRequest,key),getACL:async key=>await this.getACL(candidate.readRequest,key),setACL:async(key,acl)=>{await this.setACL(candidate.writeRequest,key,acl)}}}}var __defProp$1D=Object.defineProperty,__defNormalProp$1D=(obj,key,value)=>key in obj?__defProp$1D(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1D=(obj,key,value)=>__defNormalProp$1D(obj,key+"",value);class JSONContentHelper{constructor(dataString){this.dataString=dataString,__publicField$1D(this,"_current"),this._current=dataString}get result(){return this._current}static create(dataString){return new JSONContentHelper(dataString)}tryParse(){const strInput=this._current;if(!isValidString(strInput)||isDigits(strInput)||isSafeNumber(strInput))return strInput;let str=strInput.trim();if(str.startsWith("{")&&str.endsWith("}")||str.startsWith("[")&&str.endsWith("]"))try{return JSON.parse(str)}catch{try{const repairedJson=jsonrepair(str);return JSON.parse(repairedJson)}catch{}}if(str=(this.extractJsonFromString(strInput)||strInput).trim(),isDigits(str)&&!isSafeNumber(str)||!str.startsWith("{")&&!str.startsWith("["))return str;try{return JSON.parse(str)}catch{try{const repairedJson=jsonrepair(str);return JSON.parse(repairedJson)}catch{return strInput}}}tryFullParse(){const str=this._current;if(!str||isDigits(str)&&!isSafeNumber(str)||!str.startsWith("{")&&!str.startsWith("["))return str;try{return JSON.parse(str)}catch{try{return JSON.parse(jsonrepair(str))}catch(e2){return console.warn("Error on parseJson: ",e2.toString()),console.warn(" Tried to parse: ",str),{result:str,error:e2.toString()}}}}extractJsonFromString(str){try{const regex=/(\{.*\})/s;return str.match(regex)?.[1]}catch{return null}}}function JSONContent(dataString){return JSONContentHelper.create(dataString)}var __defProp$1C=Object.defineProperty,__defNormalProp$1C=(obj,key,value)=>key in obj?__defProp$1C(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1C=(obj,key,value)=>__defNormalProp$1C(obj,typeof key!="symbol"?key+"":key,value);const _SmythFS=class _SmythFS2{constructor(storage,cache){this.storage=storage,this.cache=cache,__publicField$1C(this,"hash"),this.hash=_SmythFS2.generateInstanceHash(this.storage.name,this.cache.name)}static generateInstanceHash(storageName,cacheName){const instanceProps=`${storageName}:${cacheName}`;return crypto$1.createHash("sha256").update(instanceProps).digest("hex").substring(0,6)}static get Instance(){return _SmythFS2.getInstance()}static getInstance(storageProvider="",cacheProvider=""){const storage=storageProvider instanceof StorageConnector?storageProvider:ConnectorService.getStorageConnector(storageProvider),cache=cacheProvider instanceof CacheConnector?cacheProvider:ConnectorService.getCacheConnector(cacheProvider),hash=_SmythFS2.generateInstanceHash(storage.name,cache.name);if(_SmythFS2.instances[hash])return _SmythFS2.instances[hash];const instance=new _SmythFS2(storage,cache),router=ConnectorService.getRouterConnector();return router&&router?.get instanceof Function&&(router.get(`/_temp/${hash}/:uid`,instance.serveTempContent.bind(instance)),router.get(`/storage/${hash}/:file_id`,instance.serveResource.bind(instance))),_SmythFS2.instances[hash]=instance,instance}getBaseUri(candidate){return`smythfs://${candidate.id}.${candidate.role}`}async read(uri,candidate){const smythURI=await this.URIParser(uri);if(!smythURI)throw new Error("Invalid Resource URI");if(candidate=candidate||smythURI.defaultCandidate,!await ConnectorService.getAccountConnector().isTeamMember(smythURI.team,candidate))throw new Error("Access Denied");const resourceId=`teams/${smythURI.team}${smythURI.path}`,_candidate=candidate instanceof AccessCandidate?candidate:new AccessCandidate(candidate),data=await this.storage.requester(_candidate).read(resourceId);return data?this.toBuffer(data):null}async getMetadata(uri,candidate){const smythURI=await this.URIParser(uri);if(!smythURI)throw new Error("Invalid Resource URI");if(candidate=candidate||smythURI.defaultCandidate,!await ConnectorService.getAccountConnector().isTeamMember(smythURI.team,candidate))throw new Error("Access Denied");const resourceId=`teams/${smythURI.team}${smythURI.path}`,_candidate=candidate instanceof AccessCandidate?candidate:new AccessCandidate(candidate);return await this.storage.requester(_candidate).getMetadata(resourceId)}async write(uri,data,candidate,metadata,ttl){const smythURI=await this.URIParser(uri);if(!smythURI)throw new Error("Invalid Resource URI");if(candidate=candidate||smythURI.defaultCandidate,!await ConnectorService.getAccountConnector().isTeamMember(smythURI.team,candidate))throw new Error("Access Denied");const resourceId=`teams/${smythURI.team}${smythURI.path}`,_candidate=candidate instanceof AccessCandidate?candidate:new AccessCandidate(candidate);let acl;if(smythURI.team&&smythURI.team!==DEFAULT_TEAM_ID&&(acl=new ACL().addAccess(TAccessRole.Team,smythURI.team,TAccessLevel.Read).ACL),metadata||(metadata={}),!metadata?.ContentType&&(metadata.ContentType=await getMimeType(data),!metadata.ContentType)){const ext=uri.split(".").pop();ext&&(metadata.ContentType=mime.getType(ext)||"application/octet-stream")}await this.storage.requester(_candidate).write(resourceId,data,acl,metadata),ttl&&await this.storage.requester(_candidate).expire(resourceId,ttl)}async delete(uri,candidate){const smythURI=await this.URIParser(uri);if(!smythURI)throw new Error("Invalid Resource URI");if(candidate=candidate||smythURI.defaultCandidate,!await ConnectorService.getAccountConnector().isTeamMember(smythURI.team,candidate))throw new Error("Access Denied");const resourceId=`teams/${smythURI.team}${smythURI.path}`,_candidate=candidate instanceof AccessCandidate?candidate:new AccessCandidate(candidate);await this.storage.requester(_candidate).delete(resourceId)}async exists(uri,candidate){const smythURI=await this.URIParser(uri);if(!smythURI)throw new Error("Invalid Resource URI");if(candidate=candidate||smythURI.defaultCandidate,!await ConnectorService.getAccountConnector().isTeamMember(smythURI.team,candidate))throw new Error("Access Denied");const resourceId=`teams/${smythURI.team}${smythURI.path}`,_candidate=candidate instanceof AccessCandidate?candidate:new AccessCandidate(candidate);return await this.storage.requester(_candidate).exists(resourceId)}async genTempUrl(uri,candidate,ttlSeconds=3600){const smythURI=await this.URIParser(uri);if(!smythURI)throw new Error("Invalid Resource URI");if(candidate=candidate||smythURI.defaultCandidate,!await ConnectorService.getAccountConnector().isTeamMember(smythURI.team,candidate))throw new Error("Access Denied");if(!await this.exists(uri,candidate))throw new Error("Resource does not exist");const _candidate=candidate instanceof AccessCandidate?candidate:new AccessCandidate(candidate),resourceId=`teams/${smythURI.team}${smythURI.path}`,resourceMetadata=await this.storage.requester(_candidate).getMetadata(resourceId),uid2=crypto$1.randomUUID(),tempUserCandidate=AccessCandidate.user(`system-${uid2}`);return await this.cache.requester(tempUserCandidate).set(`pub_url:${uid2}`,JSON.stringify({accessCandidate:_candidate,uri,contentType:resourceMetadata?.ContentType}),void 0,void 0,ttlSeconds),`${ConnectorService.getRouterConnector().baseUrl}/_temp/${this.hash}/${uid2}`}async destroyTempUrl(url,{delResource}={delResource:!1}){const tempPath=url.split("/_temp/")[1];if(!tempPath)throw new Error("Invalid Temp URL format");const uid2=tempPath.split("/")[1]?.split("?")[0];if(!uid2)throw new Error("Invalid Temp URL format");let cacheVal=await this.cache.requester(AccessCandidate.user(`system-${uid2}`)).get(`pub_url:${uid2}`);if(!cacheVal)throw new Error("Invalid Temp URL");cacheVal=JSONContentHelper.create(cacheVal).tryParse(),await this.cache.requester(AccessCandidate.user(`system-${uid2}`)).delete(`pub_url:${uid2}`),delResource&&await this.delete(cacheVal.uri,AccessCandidate.clone(cacheVal.accessCandidate))}async serveTempContent(req,res){try{const{uid:uid2}=req.params;let cacheVal=await this.cache.requester(AccessCandidate.user(`system-${uid2}`)).get(`pub_url:${uid2}`);if(!cacheVal){res.writeHead(404,{"Content-Type":"text/plain"}),res.end("Invalid Temp URL");return}cacheVal=JSONContentHelper.create(cacheVal).tryParse();const content=await this.read(cacheVal.uri,AccessCandidate.clone(cacheVal.accessCandidate)),contentBuffer=Buffer.isBuffer(content)?content:Buffer.from(content,"binary"),contentType=cacheVal.contentType||"application/octet-stream";res.writeHead(200,{"Content-Type":contentType,"Content-Disposition":"inline","Content-Length":contentBuffer.length}),res.end(contentBuffer)}catch(error){console.error("Error serving temp content:",error),res.writeHead(500,{"Content-Type":"text/plain"}),res.end("Internal Server Error")}}async genResourceUrl(uri,candidate){const smythURI=await this.URIParser(uri);if(!smythURI)throw new Error("Invalid Resource URI");if(candidate=candidate||smythURI.defaultCandidate,!await ConnectorService.getAccountConnector().isTeamMember(smythURI.team,candidate))throw new Error("Access Denied");if(!await this.exists(uri,candidate))throw new Error("Resource does not exist");const _candidate=candidate instanceof AccessCandidate?candidate:new AccessCandidate(candidate);if(_candidate.role!==TAccessRole.Agent)throw new Error("Only agents can generate resource urls");const agentId=_candidate.id,resourceId=`teams/${smythURI.team}${smythURI.path}`,resourceMetadata=await this.storage.requester(_candidate).getMetadata(resourceId),uid2=crypto$1.randomUUID(),tempUserCandidate=AccessCandidate.user(`system-${uid2}`);await this.cache.requester(tempUserCandidate).set(`storage_url-${uid2}`,JSON.stringify({accessCandidate:_candidate,uri,contentType:resourceMetadata?.ContentType}),void 0,void 0);const contentType=resourceMetadata?.ContentType,ext=contentType?mime.getExtension(contentType):void 0,agentDataConnector=ConnectorService.getAgentDataConnector(),baseUrl=ConnectorService.getRouterConnector().baseUrl;return`${agentDataConnector.getAgentConfig(agentId)?.agentStageDomain?`https://${agentDataConnector.getAgentConfig(agentId).agentStageDomain}`:baseUrl}/storage/${this.hash}/${uid2}${ext?`.${ext}`:""}`}async destroyResourceUrl(url,{delResource}={delResource:!1}){}async serveResource(req,res){try{const{file_id}=req.params,[uid2,extention]=file_id.split(".");let cacheVal=await this.cache.requester(AccessCandidate.user(`system-${uid2}`)).get(`storage_url-${uid2}`);if(!cacheVal){res.writeHead(404,{"Content-Type":"text/plain"}),res.end("Invalid Resource URL");return}cacheVal=JSONContentHelper.create(cacheVal).tryParse();const content=await this.read(cacheVal.uri,AccessCandidate.clone(cacheVal.accessCandidate)),contentBuffer=Buffer.isBuffer(content)?content:Buffer.from(content,"binary"),contentType=cacheVal.contentType||"application/octet-stream";res.writeHead(200,{"Content-Type":contentType,"Content-Disposition":"inline","Content-Length":contentBuffer.length}),res.end(contentBuffer)}catch(error){console.error("Error serving storage resource content:",error),res.writeHead(500,{"Content-Type":"text/plain"}),res.end("Internal Server Error")}}async URIParser(uri){const parts=uri.split("://");if(parts.length!==2||parts[0].toLowerCase()!=="smythfs")return;const parsed=this.CaseSensitiveURL(`http://${parts[1]}`),tld=parsed.hostname.split(".").pop();if(tld!=="team"&&tld!=="user"&&tld!=="agent"&&tld!=="smyth")throw new Error("Invalid Resource URI");let team=tld==="team"?parsed.hostname.replace(`.${tld}`,""):void 0;const user=tld==="user"?parsed.hostname.replace(`.${tld}`,""):void 0,agent=tld==="agent"?parsed.hostname.replace(`.${tld}`,""):void 0,smyth=tld==="smyth"?parsed.hostname.replace(`.${tld}`,""):void 0;let basePath="";if(!team){let candidate;user?(candidate=AccessCandidate.user(user),basePath=".user/"+user):agent&&(candidate=AccessCandidate.agent(agent),basePath=".agent/"+agent),candidate&&(team=await ConnectorService.getAccountConnector().getCandidateTeam(candidate))}let defaultCandidate;return team?defaultCandidate=AccessCandidate.team(team):user?defaultCandidate=AccessCandidate.user(user):agent&&(defaultCandidate=AccessCandidate.agent(agent)),{hash:parsed.hash,team,user,agent,smyth,defaultCandidate,path:basePath+parsed.pathname}}CaseSensitiveURL(urlString){const parts=urlString.split("://");if(parts.length!==2)return null;const afterProtocol=parts[1],hostnameEnd=Math.min(...[afterProtocol.indexOf("/"),afterProtocol.indexOf("?"),afterProtocol.indexOf("#"),afterProtocol.length].filter(i=>i>=0)),originalHostnamePart=afterProtocol.substring(0,hostnameEnd),[originalHostname,originalPort]=originalHostnamePart.split(":"),parsed=new URL(urlString);return{protocol:parsed.protocol,hostname:originalHostname,port:parsed.port,pathname:parsed.pathname,search:parsed.search,searchParams:parsed.searchParams,hash:parsed.hash,href:parsed.href,origin:parsed.origin,host:originalHostname+(parsed.port?`:${parsed.port}`:""),originalPort:originalPort||null}}async toBuffer(data){if(Buffer.isBuffer(data))return data;if(typeof data=="string")return Buffer.from(data,"utf-8");if(data instanceof Uint8Array)return Buffer.from(data);if(data instanceof Readable)return new Promise((resolve,reject)=>{const chunks=[];data.on("data",chunk=>{chunks.push(Buffer.isBuffer(chunk)?chunk:Buffer.from(chunk))}),data.on("end",()=>{resolve(Buffer.concat(chunks))}),data.on("error",err=>{reject(err)})});throw new Error("Unsupported data type")}};__publicField$1C(_SmythFS,"instances",{});let SmythFS=_SmythFS;var __defProp$1B=Object.defineProperty,__defNormalProp$1B=(obj,key,value)=>key in obj?__defProp$1B(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1B=(obj,key,value)=>__defNormalProp$1B(obj,typeof key!="symbol"?key+"":key,value);class BinaryInput{constructor(data,_name,mimetype,candidate){this._name=_name,this.mimetype=mimetype,this.candidate=candidate,__publicField$1B(this,"size"),__publicField$1B(this,"url"),__publicField$1B(this,"_ready"),__publicField$1B(this,"_readyPromise"),__publicField$1B(this,"_source"),__publicField$1B(this,"_uploading",!1),_name||(_name=uid()),this._name=_name,this.load(data,_name,mimetype,candidate)}async ready(){return this._ready?!0:(this._readyPromise||(this._readyPromise=new Promise(resolve=>{const interval=setInterval(()=>{this._ready&&(clearInterval(interval),resolve(!0))},100)})),this._readyPromise)}async load(data,name,mimetype,candidate){const ext=name.split(".")?.length>1?name.split(".").pop():"";if(this.mimetype=mimetype||mime.getType(ext)||"",this.url="",typeof data=="object"&&data.url&&data.mimetype&&data.size){this.mimetype=data.mimetype,this.size=data.size,this.url=data.url;const ext2=mime.getExtension(this.mimetype);this._name.endsWith(`.${ext2}`)||(this._name+=`.${ext2}`),candidate?this._source=await SmythFS.Instance.read(this.url,candidate).finally(()=>{this._ready=!0}):this._ready=!0;return}if(typeof data=="string"&&data.startsWith("smythfs://")){if(this.url=data,candidate)try{this._source=await SmythFS.Instance.read(this.url,candidate),this.mimetype=await getMimeType(this._source),this.size=this._source.byteLength,this.mimetype||(this.mimetype=mime.getType(this.url)||mime.getType(this._name)||"");const ext2=mime.getExtension(this.mimetype);this._name.endsWith(`.${ext2}`)||(this._name+=`.${ext2}`)}finally{this._ready=!0}else{const ext2=this.url.split(".").pop();this.mimetype=mime.getType(ext2)||"",this._ready=!0}return}if(isUrl(data)){try{const response=await axios({method:"get",url:data,responseType:"arraybuffer"});this.size=response.data.byteLength,this._source=Buffer.from(response.data,"binary");let mimetype2=response.headers?.["content-type"]||"";const urlPath=new URL(data).pathname;let extension=urlPath.split(".")?.length>1?urlPath.split(".").pop():"";(!mimetype2||mimetype2.startsWith("binary/octet-stream"))&&(mimetype2=extension?mime.getType(extension):""),mimetype2||(mimetype2=(await fileTypeFromBuffer(this._source))?.mime||""),this.mimetype=mimetype2,extension=extension||mime.getExtension(this.mimetype),this._name.endsWith(`.${extension}`)||(this._name+=`.${extension}`)}catch(error){console.error("Error loading binary data from url:",data.url,error)}this._ready=!0;return}const base64FileInfo=await getBase64FileInfo(data);if(base64FileInfo){this.mimetype||(this.mimetype=base64FileInfo.mimetype),this.size=base64FileInfo.size,this._source=Buffer.from(base64FileInfo.data,"base64");const ext2=mime.getExtension(this.mimetype);this._name.endsWith(`.${ext2}`)||(this._name+=`.${ext2}`),this._ready=!0;return}if(typeof data=="string"){this._source=Buffer.from(data),this.size=data.length,this.mimetype="text/plain",this._name.endsWith(".txt")||(this._name+=".txt"),this._ready=!0;return}if(Buffer.isBuffer(data)){this._source=data,this.size=getSizeFromBinary(data),this.mimetype||(this.mimetype=await getMimeType(data));const ext2=mime.getExtension(this.mimetype);this._name.endsWith(`.${ext2}`)||(this._name+=`.${ext2}`),this._ready=!0;return}if(data instanceof Blob){this._source=Buffer.from(await data.arrayBuffer()),this.size=data.size,this.mimetype=data.type,this._ready=!0;return}}async getUrlInfo(url){try{const response=await axios.get(url),contentType=response.headers["content-type"],contentLength=response.headers["content-length"];return{contentType,contentLength}}catch{return{contentType:"",contentLength:0}}}static from(source,name,mimetype,candidate){return source instanceof BinaryInput?source:new BinaryInput(source,name,mimetype,candidate)}async upload(candidate,ttl){if(await this.ready(),!this._uploading)try{if(this._uploading=!0,this.url)this._uploading=!1;else{const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate);this.url=`smythfs://${teamId}.team/${candidate.id}/_temp/${this._name}`,await SmythFS.Instance.write(this.url,this._source,candidate,void 0,ttl),this._uploading=!1}}catch(error){console.error("Error uploading binary data:",error),this._uploading=!1}}async getJsonData(candidate,ttl){return await this.upload(candidate,ttl),{mimetype:this.mimetype,size:this.size,url:this.url,name:this._name}}async readData(candidate){if(await this.ready(),!this.url)throw new Error("Binary data not ready");return await SmythFS.Instance.read(this.url,candidate)}async getName(){return await this.ready(),this._name}async getBuffer(){return await this.ready(),this._source}async getReadStream(){return await this.ready(),Readable.from(this._source)}}var TLLMCredentials=(TLLMCredentials2=>(TLLMCredentials2.Vault="vault",TLLMCredentials2.Internal="internal",TLLMCredentials2.BedrockVault="bedrock_vault",TLLMCredentials2.VertexAIVault="vertexai_vault",TLLMCredentials2.None="none",TLLMCredentials2))(TLLMCredentials||{}),LLMInterface=(LLMInterface2=>(LLMInterface2.ChatCompletions="chat.completions",LLMInterface2.Responses="responses",LLMInterface2.GenerateContent="generateContent",LLMInterface2.GenerateImages="generateImages",LLMInterface2))(LLMInterface||{});const BuiltinLLMProviders={Echo:"Echo",OpenAI:"OpenAI",DeepSeek:"DeepSeek",GoogleAI:"GoogleAI",Anthropic:"Anthropic",Groq:"Groq",TogetherAI:"TogetherAI",Bedrock:"Bedrock",VertexAI:"VertexAI",xAI:"xAI",Perplexity:"Perplexity",Ollama:"Ollama"},TLLMProvider=BuiltinLLMProviders;var TLLMMessageRole=(TLLMMessageRole2=>(TLLMMessageRole2.User="user",TLLMMessageRole2.Assistant="assistant",TLLMMessageRole2.System="system",TLLMMessageRole2.Model="model",TLLMMessageRole2.Tool="tool",TLLMMessageRole2.Function="function",TLLMMessageRole2))(TLLMMessageRole||{}),APIKeySource=(APIKeySource2=>(APIKeySource2.Smyth="smyth-managed",APIKeySource2.User="user-managed",APIKeySource2.Custom="custom",APIKeySource2))(APIKeySource||{}),TLLMEvent=(TLLMEvent2=>(TLLMEvent2.Data="data",TLLMEvent2.Content="content",TLLMEvent2.Thinking="thinking",TLLMEvent2.End="end",TLLMEvent2.Error="error",TLLMEvent2.ToolInfo="toolInfo",TLLMEvent2.ToolCall="toolCall",TLLMEvent2.ToolResult="toolResult",TLLMEvent2.Usage="usage",TLLMEvent2.Interrupted="interrupted",TLLMEvent2.Fallback="fallback",TLLMEvent2))(TLLMEvent||{}),__defProp$1A=Object.defineProperty,__defNormalProp$1A=(obj,key,value)=>key in obj?__defProp$1A(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1A=(obj,key,value)=>__defNormalProp$1A(obj,typeof key!="symbol"?key+"":key,value);const console$s=Logger("LLMInference");let LLMInference$1=class LLMInference{constructor(){__publicField$1A(this,"model"),__publicField$1A(this,"llmConnector"),__publicField$1A(this,"modelProviderReq"),__publicField$1A(this,"teamId")}static async getInstance(model,candidate){const modelsProvider=ConnectorService.getModelsProviderConnector();if(!modelsProvider.valid)throw new Error("Model provider Not available, cannot create LLM instance");const teamId=await ConnectorService.getAccountConnector().requester(candidate).getTeam(),llmInference=new LLMInference;llmInference.teamId=teamId,llmInference.modelProviderReq=modelsProvider.requester(candidate);const llmProvider=await llmInference.modelProviderReq.getProvider(model);return llmProvider&&(llmInference.llmConnector=ConnectorService.getLLMConnector(llmProvider)),llmInference.llmConnector||console$s.error(`Model ${model} unavailable for team ${teamId}`),llmInference.model=model,llmInference}static user(candidate){}get connector(){return this.llmConnector}async prompt({query,contextWindow,files,params,onFallback=()=>{}},isInFallback=!1){let messages=contextWindow||[];if(query){const content=this.llmConnector.enhancePrompt(query,params);messages.push({role:TLLMMessageRole.User,content})}params.model=this.model,params.messages=messages,params.files=files,isInFallback&&typeof onFallback=="function"&&onFallback({model:this.model});try{let response=await this.llmConnector.requester(AccessCandidate.agent(params.agentId)).request(params);const result=this.llmConnector.postProcess(response?.content);if(result.error)throw response.finishReason!=="stop"?new Error("The model stopped before completing the response, this is usually due to output token limit reached."):new Error(result.error);return result}catch(error){if(!isInFallback)try{const fallbackParams=await this.getSafeFallbackParams(params),fallbackResult=await this.executeFallback("prompt",{query,contextWindow,files,params:fallbackParams,onFallback});if(fallbackResult!==null)return fallbackResult}catch(fallbackError){console$s.warn("Fallback also failed:",fallbackError)}throw console$s.error("Error in chatRequest: ",error),error}}async promptStream({query,contextWindow,files,params,onFallback=()=>{}},isInFallback=!1){let messages=contextWindow||[];if(query){const content=this.llmConnector.enhancePrompt(query,params);messages.push({role:TLLMMessageRole.User,content})}params.model=this.model,params.messages=messages,params.files=files,isInFallback&&typeof onFallback=="function"&&onFallback({model:this.model});try{return await this.llmConnector.user(AccessCandidate.agent(params.agentId)).streamRequest(params)}catch(error){if(!isInFallback)try{const fallbackParams=await this.getSafeFallbackParams(params),fallbackResult=await this.executeFallback("promptStream",{query,contextWindow,files,params:fallbackParams,onFallback});if(fallbackResult!==null)return fallbackResult}catch(fallbackError){console$s.warn("Fallback also failed:",fallbackError)}console$s.error("Error in streamRequest:",error);const dummyEmitter=new EventEmitter;return process.nextTick(()=>{dummyEmitter.emit("error",error),dummyEmitter.emit("end")}),dummyEmitter}}async getSafeFallbackParams(params){return{agentId:params.agentId,model:params.model,maxContextWindowLength:params.maxContextWindowLength,maxTokens:params.maxTokens,messages:params.messages,passthrough:params.passthrough,useContextWindow:params.useContextWindow}}async executeFallback(methodName,args){const isCustomModel=await this.modelProviderReq.isUserCustomLLM(this.model),fallbackModel=await this.modelProviderReq.getFallbackLLM(this.model);if(!isCustomModel||!fallbackModel)return null;console$s.info(`Attempting fallback from ${this.model} to ${fallbackModel}`),this.model=fallbackModel;const llmProvider=await this.modelProviderReq.getProvider(fallbackModel);return llmProvider&&(this.llmConnector=ConnectorService.getLLMConnector(llmProvider)),methodName==="prompt"?await this.prompt(args,!0):await this.promptStream(args,!0)}async imageGenRequest({query,files,params}){return params.prompt=query,this.llmConnector.user(AccessCandidate.agent(params.agentId)).imageGenRequest(params)}async imageEditRequest({query,files,params}){return params.prompt=query,params.files=files,this.llmConnector.user(AccessCandidate.agent(params.agentId)).imageEditRequest(params)}async streamRequest(params,agent){const agentId=isAgent(agent)?agent.id:agent;try{if(!params.messages||!params.messages?.length)throw new Error("Input messages are required.");const model=params.model||this.model;return await this.llmConnector.user(AccessCandidate.agent(agentId)).streamRequest({...params,model})}catch(error){console$s.error("Error in streamRequest:",error);const dummyEmitter=new EventEmitter;return process.nextTick(()=>{dummyEmitter.emit("error",error),dummyEmitter.emit("end")}),dummyEmitter}}async multimodalStreamRequest(params,fileSources,agent){const agentId=isAgent(agent)?agent.id:agent,promises=[],_fileSources=[];for(let file of fileSources){const binaryInput=BinaryInput.from(file);_fileSources.push(binaryInput),promises.push(binaryInput.upload(AccessCandidate.agent(agentId)))}await Promise.all(promises),params.fileSources=_fileSources;try{const prompt=(Array.isArray(params.messages)?params.messages.pop():{})?.content||"",model=params.model||this.model;return await this.llmConnector.user(AccessCandidate.agent(agentId)).multimodalStreamRequest(prompt,{...params,model})}catch(error){throw console$s.error("Error in multimodalRequest: ",error),error}}async multimodalStreamRequestLegacy(prompt,files,config2={},agent){const agentId=isAgent(agent)?agent.id:agent,promises=[],_files=[];for(let file of files){const binaryInput=BinaryInput.from(file);_files.push(binaryInput),promises.push(binaryInput.upload(AccessCandidate.agent(agentId)))}await Promise.all(promises);const params=config2.data;params.files=_files;try{prompt=this.llmConnector.enhancePrompt(prompt,config2);const model=params.model||this.model;return await this.llmConnector.user(AccessCandidate.agent(agentId)).multimodalStreamRequest(prompt,{...params,model})}catch(error){throw console$s.error("Error in multimodalRequest: ",error),error}}async getContextWindow(systemPrompt,_messages,maxTokens,maxOutputTokens=1024){const modelInfo=await this.modelProviderReq.getModelInfo(this.model,!0);let maxModelContext=modelInfo?.tokens,maxModelOutputTokens=modelInfo?.completionTokens||modelInfo?.tokens,maxInputContext=Math.min(maxTokens,maxModelContext),maxOutputContext=Math.min(maxOutputTokens,maxModelOutputTokens||0);maxInputContext+maxOutputContext>maxModelContext&&(maxInputContext-=maxInputContext+maxOutputContext-maxModelContext),maxInputContext<=0&&console$s.warn("Max input context is 0, returning empty context window, This usually indicates a wrong model configuration"),console$s.debug(`Context Window Configuration: Max Input Tokens: ${maxInputContext}, Max Output Tokens: ${maxOutputContext}, Max Model Tokens: ${maxModelContext}`);const systemMessage={role:"system",content:systemPrompt};let smythContextWindow=[],tokensCount=encodeChat([systemMessage],"gpt-4o").length;for(let i=_messages?.length-1;i>=0;i--){const curMessage=_messages[i];if(curMessage.role!=="system"){if(tokensCount=0,curMessage?.content&&(tokensCount+=countTokens(curMessage.content)),curMessage?.messageBlock?.content&&(tokensCount+=countTokens(curMessage.messageBlock.content)),curMessage.toolsData)for(let tool of curMessage.toolsData)tokensCount+=countTokens(tool.result);if(tokensCount>maxInputContext)break;smythContextWindow.unshift(curMessage)}}smythContextWindow.unshift(systemMessage);let modelContextWindow=[];for(let message of smythContextWindow)if(message.role&&message.content&&modelContextWindow.push({role:message.role,content:message.content}),message.messageBlock&&message.toolsData){const internal_message=this.connector.transformToolMessageBlocks({messageBlock:message?.messageBlock,toolsData:message?.toolsData});modelContextWindow.push(...internal_message)}return modelContextWindow=this.connector.getConsistentMessages(modelContextWindow),modelContextWindow}};function countTokens(content,model="gpt-4o"){try{const _stringifiedContent=typeof content=="string"?content:JSON.stringify(content);return encodeChat([{role:"user",content:_stringifiedContent}],model).length}catch(error){return console$s.warn("Error in countTokens: ",error),0}}var __defProp$1z=Object.defineProperty,__defNormalProp$1z=(obj,key,value)=>key in obj?__defProp$1z(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1z=(obj,key,value)=>__defNormalProp$1z(obj,typeof key!="symbol"?key+"":key,value);class LLMContext{constructor(llmInference,_systemPrompt="",llmContextStore){this.llmInference=llmInference,__publicField$1z(this,"_systemPrompt",""),__publicField$1z(this,"_llmContextStore"),__publicField$1z(this,"_llmCache"),__publicField$1z(this,"contextLength"),__publicField$1z(this,"_messages",[]),this._llmCache=new LLMCache(AccessCandidate.team(this.llmInference.teamId)),this.systemPrompt=_systemPrompt,llmContextStore&&(this._llmContextStore=llmContextStore,this._llmContextStore.load().then(messages=>{this._messages=messages,this._llmCache.set("messages",this._messages)}))}get systemPrompt(){return this._systemPrompt}set systemPrompt(systemPrompt){this._systemPrompt=systemPrompt,this._llmCache?.set("systemPrompt",this.systemPrompt)}get llmCache(){return this._llmCache}get messages(){return this._messages}get model(){return this.llmInference.model}push(...message){this._messages.push(...message),this._llmContextStore&&this._llmContextStore.save(this._messages),this._llmCache.set("messages",this._messages)}addUserMessage(content,message_id,metadata){const lastMessage=this._messages[this._messages.length-1];lastMessage&&(lastMessage.__smyth_data__?.next||(lastMessage.__smyth_data__.next=[]),lastMessage.__smyth_data__.next.push(message_id));const prev=lastMessage?.__smyth_data__?.message_id,next=[];this.push({role:"user",content,__smyth_data__:{message_id,...metadata,prev,next}})}addAssistantMessage(content,message_id,metadata){const lastMessage=this._messages[this._messages.length-1];lastMessage&&(lastMessage.__smyth_data__?.next||(lastMessage.__smyth_data__.next=[]),lastMessage.__smyth_data__.next.push(message_id));const prev=lastMessage?.__smyth_data__?.message_id,next=[];this.push({role:"assistant",content,__smyth_data__:{message_id,...metadata,prev,next}})}addToolMessage(messageBlock,toolsData,message_id,metadata){const lastMessage=this._messages[this._messages.length-1];lastMessage&&(lastMessage.__smyth_data__?.next||(lastMessage.__smyth_data__.next=[]),lastMessage.__smyth_data__.next.push(message_id));const prev=lastMessage?.__smyth_data__?.message_id,next=[];this.push({messageBlock,toolsData,__smyth_data__:{message_id,...metadata,prev,next}})}async getContextWindow(maxTokens,maxOutputTokens=1024){const messages=JSON.parse(JSON.stringify(this._messages));return this.llmInference.getContextWindow(this.systemPrompt,messages,maxTokens,maxOutputTokens)}}const dereferenceSchema=async(schema,root=schema)=>{if(typeof schema!="object"||schema===null)return schema;if(schema.$ref){const ref=schema.$ref,path2=ref.replace(/^#\//,"").split("/");let resolved=root;for(const segment of path2){if(resolved[segment]===void 0)throw new Error(`Could not resolve $ref: ${ref}`);resolved=resolved[segment]}return dereferenceSchema(resolved,root)}if(Array.isArray(schema))return Promise.all(schema.map(item=>dereferenceSchema(item,root)));const result={};for(const key of Object.keys(schema))result[key]=await dereferenceSchema(schema[key],root);return result};class OpenAPIParser{static mapReqMethods(paths){const methods=new Map;for(const path2 in paths){const pathData=paths[path2];for(const method in pathData){const data=pathData[method];REQUEST_METHODS.includes(method.toUpperCase())&&methods.set(data?.operationId,method)}}return methods}static mapEndpoints(paths){const operationIds=new Map;for(const path2 in paths){const pathData=paths[path2];for(const method in pathData){const data=pathData[method];REQUEST_METHODS.includes(method.toUpperCase())&&operationIds.set(data?.operationId,path2)}}return operationIds}static async yamlToJson(yamlData){const data=yaml.load(yamlData);return await dereferenceSchema(data)}static async getJson(data){try{let parsedData=data;return typeof data=="string"&&(parsedData=JSON.parse(data)),await dereferenceSchema(parsedData)}catch{try{return await OpenAPIParser.yamlToJson(data)}catch{throw new Error("Invalid OpenAPI specification or JSON data format")}}}static async getJsonFromUrl(url){const data=(await axios.get(url)).data;return OpenAPIParser.getJson(data)}static isValidOpenAPI(data){return data?.openapi&&data?.paths&&data?.servers}}var __defProp$1y=Object.defineProperty,__getOwnPropDesc$y=Object.getOwnPropertyDescriptor,__defNormalProp$1y=(obj,key,value)=>key in obj?__defProp$1y(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$y=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$y(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$1y(target,key,result),result},__publicField$1y=(obj,key,value)=>__defNormalProp$1y(obj,typeof key!="symbol"?key+"":key,value);const console$r=Logger("ConversationHelper");class Conversation extends EventEmitter$1{constructor(_model,_specSource,_settings){super(),this._model=_model,this._specSource=_specSource,this._settings=_settings,__publicField$1y(this,"_agentId",""),__publicField$1y(this,"_systemPrompt"),__publicField$1y(this,"userDefinedSystemPrompt",""),__publicField$1y(this,"toolChoice","auto"),__publicField$1y(this,"assistantName"),__publicField$1y(this,"_reqMethods"),__publicField$1y(this,"_toolsConfig"),__publicField$1y(this,"_toolStatusMap",{}),__publicField$1y(this,"_endpoints"),__publicField$1y(this,"_baseUrl"),__publicField$1y(this,"_status",""),__publicField$1y(this,"_currentWaitPromise"),__publicField$1y(this,"_llmContextStore"),__publicField$1y(this,"_context"),__publicField$1y(this,"_maxContextSize",1024*128),__publicField$1y(this,"_maxOutputTokens",1024*8),__publicField$1y(this,"_teamId"),__publicField$1y(this,"_agentVersion"),__publicField$1y(this,"agentData"),__publicField$1y(this,"_lastError"),__publicField$1y(this,"_spec"),__publicField$1y(this,"_customToolsDeclarations",[]),__publicField$1y(this,"_customToolsHandlers",{}),__publicField$1y(this,"stop",!1),this.on("error",error=>{this._lastError=error,console$r.warn("Conversation Error: ",error?.message)}),this._maxContextSize=_settings?.maxContextSize||this._model.tokens||this._model.keyOptions?.tokens||this._maxContextSize,this._maxOutputTokens=_settings?.maxOutputTokens||this._model.completionTokens||this._model.keyOptions?.completionTokens||this._maxOutputTokens,_settings?.systemPrompt&&(this.userDefinedSystemPrompt=_settings.systemPrompt),_settings?.toolChoice&&(this.toolChoice=_settings.toolChoice),_settings?.store&&(this._llmContextStore=_settings.store),this._baseUrl=_settings?.baseUrl,this._agentVersion=_settings?.agentVersion,(async()=>_specSource?this.loadSpecFromSource(_specSource).then(async spec=>{if(!spec)throw this._status="error",this.emit("error","Unable to parse OpenAPI specifications"),new Error("Invalid OpenAPI specification data format");this._spec=spec,!this._agentId&&_settings?.agentId&&(this._agentId=_settings.agentId),this._agentId||(this._agentId="FAKE-AGENT-ID"),await this.assignTeamIdFromAgentId(this._agentId),await this.updateModel(this._model),this._status="ready"}).catch(error=>{this._status="error",this.emit("error",error)}):(await this.updateModel(this._model),this._status="ready"))()}get systemPrompt(){return this._systemPrompt}set systemPrompt(systemPrompt){this._systemPrompt=systemPrompt,this._context&&(this._context.systemPrompt=systemPrompt)}get context(){return this._context}set spec(specSource){this.ready.then(()=>{this._status="",this._currentWaitPromise=void 0,this.loadSpecFromSource(specSource).then(async spec=>{if(!spec)throw this._status="error",this.emit("error","Invalid OpenAPI specification data format"),new Error("Invalid OpenAPI specification data format");this._spec=spec,await this.assignTeamIdFromAgentId(this._agentId),await this.updateModel(this._model),this._status="ready"})})}set model(model){this.ready.then(async()=>{this._status="",await this.updateModel(model),this._status="ready"})}get model(){return this._model}get ready(){return this._currentWaitPromise?this._currentWaitPromise:(this._currentWaitPromise=new Promise((resolve,reject)=>{if(this._status)return resolve(this._status);const maxWaitTime=3e4;let waitTime=0;const interval=100,wait=setInterval(()=>{if(this._status)return clearInterval(wait),resolve(this._status);if(waitTime+=interval,waitTime>=maxWaitTime)return clearInterval(wait),reject("Timeout: Failed to prepare data")},interval)}),this._currentWaitPromise)}async prompt(message,toolHeaders={},concurrentToolCalls=4,abortSignal){let error=null;const errListener=err=>error=err;this.once("error",errListener);const result=await this.streamPrompt(message,toolHeaders,concurrentToolCalls,abortSignal);if(error)throw error;return this.removeListener("error",errListener),result}async streamPrompt(message,toolHeaders={},concurrentToolCalls=4,abortSignal){let options=typeof message=="object"?message:{message};message=options?.message;const files=options?.files;if(message&&(this.stop=!1),this.stop){this.emit("interrupted","interrupted"),this.emit("end");return}await this.ready,abortSignal&&abortSignal.addEventListener("abort",()=>{this.emit("aborted","Aborted by user!")});const passThroughtContinueMessage="Continue with the next tool call if there are any, or just inform the user that you are done";let _content="";const reqMethods=this._reqMethods,toolsConfig=this._toolsConfig,endpoints=this._endpoints,baseUrl=this._baseUrl,message_id="msg_"+randomUUID();toolHeaders["X-DEBUG"];const llmInference=await LLMInference$1.getInstance(this.model,AccessCandidate.team(this._teamId));message&&this._context.addUserMessage(message,message_id);const contextWindow=await this._context.getContextWindow(this._maxContextSize,this._maxOutputTokens);let maxTokens=this._maxOutputTokens;typeof this.model=="object"&&this.model?.params?.maxTokens&&(maxTokens=this.model.params.maxTokens);const eventEmitter=await llmInference.promptStream({contextWindow,files,params:{model:this.model,toolsConfig:this._settings?.toolsStrategy?this._settings.toolsStrategy(toolsConfig):toolsConfig,maxTokens,cache:this._settings?.experimentalCache,agentId:this._agentId,abortSignal}}).catch(error=>{console$r.error("Error on promptStream: ",error),this.emit(TLLMEvent.Error,error)});if(abortSignal&&abortSignal.addEventListener("abort",()=>{eventEmitter.removeAllListeners()}),!eventEmitter||eventEmitter.error)throw new Error("[LLM Request Error]");message&&this.emit("start"),eventEmitter.on("data",data=>{this.stop||this.emit("data",data)}),eventEmitter.on(TLLMEvent.Thinking,thinking=>{this.stop||this.emit(TLLMEvent.Thinking,thinking)}),eventEmitter.on(TLLMEvent.Data,data=>{this.stop||this.emit(TLLMEvent.Data,data)}),eventEmitter.on(TLLMEvent.Content,content=>{this.stop||(_content+=content,this.emit(TLLMEvent.Content,content))});let finishReason="stop";const toolsContent=await new Promise((resolve,reject)=>{let hasTools=!1,hasError=!1,passThroughContent="";eventEmitter.on(TLLMEvent.Error,error=>{hasError=!0,reject(error)}),eventEmitter.on(TLLMEvent.ToolInfo,async(toolsData,thinkingBlocks=[])=>{if(this.stop)return;hasTools=!0;let llmMessage={role:"assistant",content:_content,tool_calls:[]};thinkingBlocks?.length>0&&(this.emit("thoughtProcess",thinkingBlocks.filter(block=>block.type==="thinking").map(block=>block.thinking||"").join(`
@@ -226,5 +226,5 @@ ${error}
226
226
  const result = await main(${getParametersString(parameters,inputs)});
227
227
  return result;
228
228
  })();
229
- `}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$2=Logger("ECMASandbox");class ECMASandbox2 extends CodeConnector{constructor(config2){super(config2),__publicField$5(this,"name","ECMASandbox"),__publicField$5(this,"sandboxUrl"),this.sandboxUrl=config2.sandboxUrl}async prepare(acRequest,codeUID,input,config2){return{prepared:!0,errors:[],warnings:[]}}async deploy(acRequest,codeUID,input,config2){return{id:codeUID,runtime:config2.runtime,createdAt:new Date,status:"Deployed"}}async execute(acRequest,codeUID,inputs,config2){try{const{isValid,error,parameters}=validateAsyncMainFunction(inputs.code);if(!isValid)return{output:void 0,executionTime:0,success:!1,errors:[error]};const executableCode=generateExecutableCode(inputs.code,parameters,inputs.inputs);if(this.sandboxUrl){console$2.debug("Running code in remote sandbox");const executionStartTime=Date.now(),result=await axios.post(this.sandboxUrl,{code:executableCode}).catch(error2=>({error:error2})),executionTime=Date.now()-executionStartTime;if(result.error){const error2=result.error?.response?.data||result.error?.message||result.error.toString()||"Unknown error";return console$2.error(`Error running code: ${JSON.stringify(error2,null,2)}`),{output:void 0,executionTime,success:!1,errors:[error2]}}else return console$2.debug(`Code result: ${result?.data?.Output}`),{output:result.data?.Output,executionTime,success:!0,errors:[]}}else{console$2.debug("Running code in isolated vm");const executionStartTime=Date.now(),result=await runJs(executableCode),executionTime=Date.now()-executionStartTime;return console$2.debug(`Code result: ${result}`),{output:result,executionTime,success:!0,errors:[]}}}catch(error){return console$2.error(`Error running code: ${error}`),{output:void 0,executionTime:0,success:!1,errors:[error]}}}async executeDeployment(acRequest,codeUID,deploymentId,inputs,config2){return await this.execute(acRequest,codeUID,inputs,config2)}async listDeployments(acRequest,codeUID,config2){return[]}async getDeployment(acRequest,codeUID,deploymentId,config2){return null}async deleteDeployment(acRequest,codeUID,deploymentId){}async getResourceACL(resourceId,candidate){const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}class CodeService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Code,"AWSLambda",AWSLambdaCode),ConnectorService.register(TConnectorService.Code,"ECMASandbox",ECMASandbox2)}}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,key+"",value);class SchedulerConnector extends SecureConnector{constructor(settings){super(settings),__publicField$4(this,"_eventEmitter"),this._eventEmitter=new EventEmitter$1}requester(candidate){return{list:async()=>await this.list(candidate.readRequest),add:async(jobId,job,schedule)=>{const accountConnector=ConnectorService.getAccountConnector(),agentTeam=await accountConnector.getCandidateTeam(AccessCandidate.agent(job.agentId)),candidateTeam=await accountConnector.getCandidateTeam(candidate);if(agentTeam!==candidateTeam)throw new Error(`Candidate ${candidate.id} is not authorized to schedule a job for agent ${job.agentId}`);await this.add(candidate.writeRequest,jobId,job,schedule)},delete:async jobId=>{await this.delete(candidate.writeRequest,jobId)},get:async jobId=>await this.get(candidate.readRequest,jobId),pause:async jobId=>{await this.pause(candidate.writeRequest,jobId)},resume:async jobId=>{await this.resume(candidate.writeRequest,jobId)},on:(event,listener)=>{this.on(event,listener)},off:(event,listener)=>{this.off(event,listener)}}}constructJobKey(candidate,jobId){return`${candidate.role}_${candidate.id}_${jobId}`}emit(event,...args){return this._eventEmitter.emit(event,...args)}on(event,listener){return this._eventEmitter.on(event,listener),this}off(event,listener){return this._eventEmitter.off(event,listener),this}}var __defProp$3=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__defNormalProp$3=(obj,key,value)=>key in obj?__defProp$3(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$1=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$1(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$3(target,key,result),result},__publicField$3=(obj,key,value)=>__defNormalProp$3(obj,typeof key!="symbol"?key+"":key,value);const logger$2=Logger("LocalScheduler"),_LocalScheduler=class _LocalScheduler2 extends SchedulerConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$3(this,"name","LocalScheduler"),__publicField$3(this,"id","local"),__publicField$3(this,"folder"),__publicField$3(this,"jobsPrefix","jobs"),__publicField$3(this,"runtimePrefix",".jobs.runtime"),__publicField$3(this,"isInitialized",!1),__publicField$3(this,"config"),this.config={folder:_settings?.folder||"",runJobs:_settings?.runJobs!==!1,persistExecutionHistory:_settings?.persistExecutionHistory!==!1,maxHistoryEntries:_settings?.maxHistoryEntries||100},this.folder=this.findSchedulerFolder(this.config.folder),this.initialize(),fs__default.existsSync(this.folder)||logger$2.warn(`Invalid folder provided: ${this.folder}`)}findSchedulerFolder(folder){let _schedulerFolder=folder;return _schedulerFolder&&fs__default.existsSync(_schedulerFolder)?_schedulerFolder:(_schedulerFolder=findSmythPath("scheduler"),fs__default.existsSync(_schedulerFolder)?(logger$2.warn("Using alternative scheduler folder found in : ",_schedulerFolder),_schedulerFolder):(logger$2.warn("!!! All attempts to find an existing scheduler folder failed !!!"),logger$2.warn("!!! I will use this folder: ",_schedulerFolder),_schedulerFolder))}async initialize(){const jobsFolderPath=path.join(this.folder,this.jobsPrefix);fs__default.existsSync(jobsFolderPath)||(fs__default.mkdirSync(jobsFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(jobsFolderPath,"README_IMPORTANT.txt"),"This folder contains scheduler job configurations. Do not delete it."));const runtimeFolderPath=path.join(this.folder,this.runtimePrefix);fs__default.existsSync(runtimeFolderPath)||(fs__default.mkdirSync(runtimeFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(runtimeFolderPath,"README_IMPORTANT.txt"),"This folder contains scheduler runtime data and execution history. Safe to delete if needed.")),this.config.runJobs&&await this.loadJobsFromDisk(),this.isInitialized=!0,logger$2.info(`LocalScheduler initialized (runJobs: ${this.config.runJobs})`)}getCandidateFolderName(candidate){return`${candidate.id}.${candidate.role}`}getJobFilePath(candidate,jobId,createFoldersIfNotExists=!1){const candidateFolder=this.getCandidateFolderName(candidate),jobFilename=jobId,fullPath=path.join(this.folder,this.jobsPrefix,candidateFolder,`${jobFilename}.json`);if(createFoldersIfNotExists){const folder=path.dirname(fullPath);fs__default.existsSync(folder)||fs__default.mkdirSync(folder,{recursive:!0})}return fullPath}getRuntimeFilePath(candidate,jobId,createFoldersIfNotExists=!1){const candidateFolder=this.getCandidateFolderName(candidate),jobFilename=jobId,fullPath=path.join(this.folder,this.runtimePrefix,candidateFolder,`${jobFilename}.json`);if(createFoldersIfNotExists){const folder=path.dirname(fullPath);fs__default.existsSync(folder)||fs__default.mkdirSync(folder,{recursive:!0})}return fullPath}async loadJobsFromDisk(){try{const jobsFolderPath=path.join(this.folder,this.jobsPrefix);if(!fs__default.existsSync(jobsFolderPath))return;const candidateFolders=fs__default.readdirSync(jobsFolderPath).filter(f=>{const fullPath=path.join(jobsFolderPath,f);return fs__default.statSync(fullPath).isDirectory()});for(const candidateFolder of candidateFolders){const lastDotIndex=candidateFolder.lastIndexOf(".");if(lastDotIndex===-1){logger$2.warn(`Invalid candidate folder format: ${candidateFolder}`);continue}const candidateId=candidateFolder.substring(0,lastDotIndex),candidateRole=candidateFolder.substring(lastDotIndex+1),candidate={id:candidateId,role:candidateRole},candidatePath=path.join(jobsFolderPath,candidateFolder),jobFiles=fs__default.readdirSync(candidatePath).filter(f=>f.endsWith(".json"));for(const file of jobFiles)try{const filePath=path.join(candidatePath,file),data=fs__default.readFileSync(filePath,"utf-8"),jobConfig=JSON.parse(data),runtimeData=await this.loadRuntimeDataFromDisk(candidate,jobConfig.id),jobData={...jobConfig,...runtimeData,candidateRole:candidate.role,candidateId:candidate.id},jobKey=this.constructJobKey(candidate,jobData.id);_LocalScheduler2.jobs.set(jobKey,jobData),jobData.status==="active"&&(logger$2.info(`Job ${jobData.id} loaded from ${candidateFolder} and scheduled for execution`),await this.scheduleJob(jobData))}catch(error){logger$2.warn(`Error loading job file ${file} from ${candidateFolder}:`,error)}}logger$2.info(`Loaded ${_LocalScheduler2.jobs.size} jobs from disk`)}catch(error){logger$2.warn("Error loading jobs from disk",error)}}async saveJobToDisk(candidate,jobData){try{const filePath=this.getJobFilePath(candidate,jobData.id,!0),{executionHistory,lastRun,nextRun,candidateRole,candidateId,createdBy,...configData}=jobData;fs__default.writeFileSync(filePath,JSON.stringify(configData,null,2),"utf-8")}catch(error){throw logger$2.warn(`Error saving job ${jobData.id} to disk`,error),error}}async saveRuntimeDataToDisk(candidate,jobData){try{const filePath=this.getRuntimeFilePath(candidate,jobData.id,!0),runtimeData={executionHistory:jobData.executionHistory||[],lastRun:jobData.lastRun,nextRun:jobData.nextRun};fs__default.writeFileSync(filePath,JSON.stringify(runtimeData,null,2),"utf-8")}catch(error){logger$2.warn(`Error saving runtime data for job ${jobData.id}`,error);return}}async loadRuntimeDataFromDisk(candidate,jobId){try{const filePath=this.getRuntimeFilePath(candidate,jobId);if(!fs__default.existsSync(filePath))return{};const data=fs__default.readFileSync(filePath,"utf-8");return JSON.parse(data)}catch(error){return logger$2.warn(`Error loading runtime data for job ${jobId}`,error),{}}}async deleteJobFromDisk(candidate,jobId){try{const jobFilePath=this.getJobFilePath(candidate,jobId);fs__default.existsSync(jobFilePath)&&fs__default.unlinkSync(jobFilePath);const runtimeFilePath=this.getRuntimeFilePath(candidate,jobId);fs__default.existsSync(runtimeFilePath)&&fs__default.unlinkSync(runtimeFilePath)}catch(error){logger$2.warn(`Error deleting job ${jobId} from disk`,error);return}}async scheduleJob(jobData){if(jobData.status!=="active")return;const validation=Schedule.fromJSON(jobData.schedule).validate();if(!validation.valid)throw logger$2.warn(`Invalid schedule for job ${jobData.id}: ${validation.error}`),new Error(`Invalid schedule for job ${jobData.id}: ${validation.error}`);const jobKey=this.constructJobKey({role:jobData.candidateRole,id:jobData.candidateId},jobData.id),existingTimer=_LocalScheduler2.timers.get(jobKey);if(existingTimer&&(logger$2.info(`Clearing existing timer for job ${jobData.id} (overwriting duplicate schedule)`),clearInterval(existingTimer),_LocalScheduler2.timers.delete(jobKey)),jobData.schedule.interval){const intervalMs=Schedule.parseInterval(jobData.schedule.interval),timer=setInterval(async()=>{await this.executeJob(jobData)},intervalMs);timer.unref(),_LocalScheduler2.timers.set(jobKey,timer)}if(jobData.schedule.cron)throw logger$2.warn(`Cron scheduling not yet implemented for job ${jobData.id}`),new Error(`Cron scheduling not yet implemented for job ${jobData.id}`)}async unscheduleJob(jobKey){const timer=_LocalScheduler2.timers.get(jobKey);timer&&(clearInterval(timer),_LocalScheduler2.timers.delete(jobKey))}async executeJob(jobData){if(!jobData.jobConfig){logger$2.warn(`Skipping execution of job ${jobData.id}: job configuration not available.`);return}const schedule=Schedule.fromJSON(jobData.schedule);if(!schedule.shouldRun()){logger$2.info(`Job ${jobData.id} skipped - outside schedule window`);return}const job=Job.fromJSON(jobData.jobConfig);logger$2.debug(`Executing job ${jobData.id} with metadata:`,JSON.stringify(jobData.jobConfig.metadata));const owner=jobData.createdBy;this.emit("executing",{id:jobData.id,job,owner});const result=await job.executeWithRetry();this.emit("executed",{id:jobData.id,job,owner,result}),jobData.lastRun=new Date().toISOString();const nextRun=schedule.calculateNextRun(new Date(jobData.lastRun));jobData.nextRun=nextRun?nextRun.toISOString():void 0,result.success||logger$2.warn(`Job ${jobData.id} failed:`,result.error?.message),this.config.persistExecutionHistory&&(jobData.executionHistory||(jobData.executionHistory=[]),jobData.executionHistory.unshift({timestamp:new Date().toISOString(),success:result.success,error:result.error?.message,executionTime:result.executionTime,retries:result.retries}),jobData.executionHistory.length>this.config.maxHistoryEntries&&(jobData.executionHistory=jobData.executionHistory.slice(0,this.config.maxHistoryEntries)));const candidate={role:jobData.candidateRole,id:jobData.candidateId};await this.saveJobToDisk(candidate,jobData),this.config.persistExecutionHistory&&await this.saveRuntimeDataToDisk(candidate,jobData)}async getResourceACL(resourceId,candidate){this.isInitialized||await this.initialize();const accountConnector=ConnectorService.getAccountConnector(),teamId=await accountConnector.getCandidateTeam(candidate),jobKey=this.constructJobKey(candidate,resourceId),jobData=_LocalScheduler2.jobs.get(jobKey),jobAgentTeamId=jobData?.jobConfig?.agentId?await accountConnector.getCandidateTeam(AccessCandidate.agent(jobData?.jobConfig?.agentId)):null;return jobAgentTeamId&&teamId!==jobAgentTeamId?new ACL:jobData?ACL.from(jobData.acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async list(acRequest){this.isInitialized||await this.initialize();const result=[];for(const[key,jobData]of _LocalScheduler2.jobs)if(jobData.candidateRole===acRequest.candidate.role&&jobData.candidateId===acRequest.candidate.id){const{candidateRole,candidateId,...serializableData}=jobData;result.push(serializableData)}return result}async add(acRequest,jobId,job,schedule){this.isInitialized||await this.initialize();const validation=schedule.validate();if(!validation.valid){logger$2.warn(`Invalid schedule: ${validation.error}`);return}const jobKey=this.constructJobKey(acRequest.candidate,jobId),existingJob=_LocalScheduler2.jobs.get(jobKey);let acl;existingJob?acl=ACL.from(existingJob.acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner):acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner);const nextRun=schedule.calculateNextRun(),jobData={id:jobId,schedule:schedule.toJSON(),jobConfig:job.toJSON(),acl:acl.ACL,status:"active",nextRun:nextRun?nextRun.toISOString():void 0,createdBy:{role:acRequest.candidate.role,id:acRequest.candidate.id},candidateRole:acRequest.candidate.role,candidateId:acRequest.candidate.id,executionHistory:existingJob?.executionHistory||[]};existingJob&&await this.unscheduleJob(jobKey),_LocalScheduler2.jobs.set(jobKey,jobData),await this.saveJobToDisk(acRequest.candidate,jobData),this.config.runJobs&&await this.scheduleJob(jobData),logger$2.info(`Job ${jobId} added successfully`)}async delete(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId);if(!_LocalScheduler2.jobs.get(jobKey)){logger$2.warn(`Job ${jobId} not found`);return}await this.unscheduleJob(jobKey),_LocalScheduler2.jobs.delete(jobKey),await this.deleteJobFromDisk(acRequest.candidate,jobId),logger$2.info(`Job ${jobId} deleted successfully`)}async get(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData)return;const{candidateRole,candidateId,...serializableData}=jobData;return serializableData}async pause(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData){logger$2.warn(`Job ${jobId} not found`);return}jobData.status!=="paused"&&(await this.unscheduleJob(jobKey),jobData.status="paused",await this.saveJobToDisk(acRequest.candidate,jobData),logger$2.info(`Job ${jobId} paused`))}async resume(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData){logger$2.warn(`Job ${jobId} not found`);return}jobData.status==="paused"&&(jobData.status="active",await this.saveJobToDisk(acRequest.candidate,jobData),this.config.runJobs&&await this.scheduleJob(jobData),logger$2.info(`Job ${jobId} resumed`))}async shutdown(){logger$2.info("Shutting down LocalScheduler...");const timerCount=_LocalScheduler2.timers.size;for(const[jobKey,timer]of _LocalScheduler2.timers)clearInterval(timer);_LocalScheduler2.timers.clear(),logger$2.info(`LocalScheduler shutdown complete (cleared ${timerCount} timers)`)}};__publicField$3(_LocalScheduler,"jobs",new Map),__publicField$3(_LocalScheduler,"timers",new Map),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"list"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"add"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"delete"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"get"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"pause"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"resume");let LocalScheduler=_LocalScheduler;class SchedulerService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Scheduler,"LocalScheduler",LocalScheduler)}}const console$1=Logger("Boot");let _booted=!1;function boot(){if(_booted){console$1.warn("SRE already booted");return}_booted=!0,SystemEvents.emit("SRE:BootStart"),console$1.debug("SRE Boot sequence started");const service={};service.NKV=new NKVService,service.Account=new AccountService,service.Vault=new VaultService,service.ManagedVault=new ManagedVaultService,service.Cache=new CacheService,service.Storage=new StorageService,service.ModelsProvider=new ModelsProviderService,service.LLM=new LLMService,service.AgentData=new AgentDataService,service.CLI=new CLIService,service.VectorDB=new VectorDBService,service.Router=new RouterService,service.Log=new LogService,service.Component=new ComponentService,service.Code=new CodeService,service.Scheduler=new SchedulerService,SystemEvents.on("SRE:Initialized",()=>{console$1.debug("SRE Initialized");for(let key in service)service[key].init();SystemEvents.emit("SRE:Booted",service),console$1.debug("SRE Boot sequence completed")})}function generateServiceKey(serviceName){const secret=process.env.SRE_SECRET;if(!secret||secret.trim().length<32)throw new Error("SRE_SECRET must be at least 32 characters");return createHmac("sha256",secret).update(`sre-service:${serviceName}`).digest("hex")}function validateServiceKey(serviceName,providedKey){try{const expectedKey=generateServiceKey(serviceName);return timingSafeEqual(Buffer.from(expectedKey),Buffer.from(providedKey))}catch{return!1}}var __defProp$2=Object.defineProperty,__defNormalProp$2=(obj,key,value)=>key in obj?__defProp$2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$2=(obj,key,value)=>__defNormalProp$2(obj,typeof key!="symbol"?key+"":key,value);const logger$1=Logger("ExternalEventsReceiver");class ExternalEventsReceiver{constructor(config2){if(__publicField$2(this,"server",null),__publicField$2(this,"wss",null),__publicField$2(this,"config"),__publicField$2(this,"isRunning",!1),this.config={enableHttp:!0,enableWebSocket:!0,path:"/ws",...config2},!this.config.authTokens||this.config.authTokens.length===0)throw logger$1.warn("At least one authentication token must be provided"),new Error("At least one authentication token must be provided")}async start(){if(this.isRunning){logger$1.warn("Server is already running");return}return this.server=createServer((req,res)=>this.handleHttpRequest(req,res)),this.config.enableWebSocket&&(this.wss=new WebSocketServer({server:this.server,path:this.config.path}),this.wss.on("connection",(ws,req)=>{this.handleWebSocketConnection(ws,req)})),new Promise((resolve,reject)=>{this.server.listen(this.config.port,"127.0.0.1",()=>{this.isRunning=!0,logger$1.debug(`Server started on port ${this.config.port}`+(this.config.enableHttp?" [HTTP]":"")+(this.config.enableWebSocket?` [WebSocket: ${this.config.path}]`:"")),resolve()}),this.server.on("error",error=>{logger$1.error("Server error",error),reject(error)})})}async stop(){if(this.isRunning)return new Promise((resolve,reject)=>{this.wss&&this.wss.close(err=>{err&&logger$1.error("Error closing WebSocket server",err)}),this.server?this.server.close(err=>{err?(logger$1.error("Error closing HTTP server",err),reject(err)):(this.isRunning=!1,logger$1.debug("Server stopped"),resolve())}):resolve()})}handleHttpRequest(req,res){if(!this.config.enableHttp){this.sendResponse(res,404,{error:"HTTP endpoint is disabled"});return}if(req.method!=="POST"){this.sendResponse(res,405,{error:"Method not allowed. Only POST requests are accepted."});return}const authResult=this.validateAuth(req.headers);if(!authResult.valid){this.sendResponse(res,401,{error:authResult.error});return}const connectorName=this.getConnectorName(req.headers);if(!connectorName){this.sendResponse(res,400,{error:"Missing x-connector-name header"});return}let body="";req.on("data",chunk=>{body+=chunk.toString()}),req.on("end",()=>{try{const data=body?JSON.parse(body):{};this.emitExternalEvent(connectorName,data),this.sendResponse(res,200,{success:!0,message:`Event EXT:${connectorName} emitted successfully`})}catch(error){logger$1.error("Error processing HTTP request",error),this.sendResponse(res,400,{error:"Invalid JSON payload"})}}),req.on("error",error=>{logger$1.error("HTTP request error",error),this.sendResponse(res,500,{error:"Internal server error"})})}handleWebSocketConnection(ws,req){logger$1.debug("New WebSocket connection");const authResult=this.validateAuth(req.headers);if(!authResult.valid){ws.close(1008,authResult.error);return}let connectorName=this.getConnectorName(req.headers);ws.on("message",message=>{try{const data=JSON.parse(message.toString());if(!connectorName&&(connectorName=data.connectorName||data["x-connector-name"],!connectorName)){ws.send(JSON.stringify({error:"Missing connector name in headers or message"}));return}this.emitExternalEvent(connectorName,data),ws.send(JSON.stringify({success:!0,message:`Event EXT:${connectorName} emitted successfully`}))}catch(error){logger$1.error("Error processing WebSocket message",error),ws.send(JSON.stringify({error:"Invalid JSON message"}))}}),ws.on("error",error=>{logger$1.error("WebSocket error",error)}),ws.on("close",()=>{logger$1.debug("WebSocket connection closed")})}validateAuth(headers){const authHeader=headers.authorization||headers.Authorization,serviceName=headers["x-service-name"]||headers["X-Service-Name"];if(!authHeader)return logger$1.warn("Missing Authorization header"),{valid:!1,error:"Missing Authorization header"};if(!serviceName||typeof serviceName!="string")return logger$1.warn("Missing or invalid X-Service-Name header"),{valid:!1,error:"Missing X-Service-Name header"};const token=authHeader.replace(/^Bearer\s+/i,"");return token?validateServiceKey(serviceName,token)?(logger$1.debug(`Authenticated service: ${serviceName}`),{valid:!0,serviceName}):(logger$1.warn(`Invalid key for service: ${serviceName}`),{valid:!1,error:"Invalid authentication"}):{valid:!1,error:"Invalid Authorization header format"}}getConnectorName(headers){const connectorName=headers["x-connector-name"]||headers["X-Connector-Name"];return typeof connectorName=="string"?connectorName:connectorName?.[0]||null}emitExternalEvent(connectorName,data){const eventName=`EXT:${connectorName}`,connector=ConnectorService.getInstance(TConnectorService[connectorName]);connector&&connector.handleEvent(eventName,data)}sendResponse(res,statusCode,body){res.statusCode=statusCode,res.setHeader("Content-Type","application/json"),res.end(JSON.stringify(body))}getStatus(){return{running:this.isRunning,port:this.config.port,config:this.config}}}var __defProp$1=Object.defineProperty,__defNormalProp$1=(obj,key,value)=>key in obj?__defProp$1(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1=(obj,key,value)=>__defNormalProp$1(obj,typeof key!="symbol"?key+"":key,value);const logger=Logger("SRE"),SRE_GLOBAL_KEY=Symbol.for("SRE@singleton"),_SmythRuntime=class _SmythRuntime2{constructor(){__publicField$1(this,"started",!1),__publicField$1(this,"_smythDir"),__publicField$1(this,"_readyPromise"),__publicField$1(this,"_readyResolve"),__publicField$1(this,"defaultConfig",{Vault:{Connector:"JSONFileVault",Settings:{shared:"default"}},Account:{Connector:"DummyAccount"},Cache:{Connector:"RAM"},Storage:{Connector:"LocalStorage"},Code:{Connector:"DummyConnector"},NKV:{Connector:"LocalStorage"},VectorDB:{Connector:"RAMVec"},ModelsProvider:{Connector:"JSONModelsProvider"},AgentData:{Connector:"NullAgentData"},Component:{Connector:"LocalComponent"},ManagedVault:{Connector:"NullManagedVault"},Log:{Connector:"ConsoleLog"},Router:{Connector:"NullRouter"},Scheduler:{Connector:"LocalScheduler",Settings:{runJobs:!0,persistExecutionHistory:!0}}}),__publicField$1(this,"_initializing",!1),__publicField$1(this,"_initialized",!1),__publicField$1(this,"_stopping",!1),this.started=!0,this._readyPromise=new Promise(resolve=>{this._readyResolve=resolve})}get smythDir(){return this._smythDir}get version(){return pkg.version}static get Instance(){return global[SRE_GLOBAL_KEY]?global[SRE_GLOBAL_KEY]:(_SmythRuntime2.instance=new _SmythRuntime2,global[SRE_GLOBAL_KEY]=_SmythRuntime2.instance,_SmythRuntime2.instance)}get initializing(){return this._initializing}init(_config){if(logger.info(`SRE v${this.version} initializing...`),(!_config||JSON.stringify(_config)==="{}")&&(this._smythDir=findSmythPath(),logger.info(".smyth directory found in:",this._smythDir)),this._initializing){console.warn("You tried to initialize SRE while it is already initializing ... skipping");return}if(this._initialized)throw new Error("SRE already initialized");this._initializing=!0,SystemEvents.on("SRE:Booted",()=>{this._readyResolve(!0)}),boot();const config2=this.autoConf(_config);for(let connectorType in config2)for(let configEntry of config2[connectorType])ConnectorService.init(connectorType,configEntry.Connector,configEntry.Id,configEntry.Settings,configEntry.Default)||logger.warn(`Failed to initialize connector ${connectorType}:${configEntry.Id||configEntry.Connector}`);return this._initialized=!0,SystemEvents.emit("SRE:Initialized",_SmythRuntime2.Instance),_SmythRuntime2.Instance}autoConf(config2={}){const defaultConfig=JSON.parse(JSON.stringify(this.defaultConfig)),keys=Object.keys({...defaultConfig,...config2}),newConfig={};for(let connectorType of keys){newConfig[connectorType]=[];let entry=config2[connectorType]||defaultConfig[connectorType];Array.isArray(entry)||(entry=[entry]);let hasDefault=!1;for(let connector of entry){if(!connector.Connector){logger.warn(`Missing Connector Name in ${connectorType} entry ... it will be ignored`);continue}connector.Default&&(hasDefault&&logger.warn(`Entry ${connectorType} has more than one default Connector ... only the first one will be used`),hasDefault=!0),newConfig[connectorType].push(connector)}!hasDefault&&newConfig[connectorType].length>0&&(newConfig[connectorType][0].Default=!0)}return newConfig}ready(){return this._readyPromise}async _stop(){this._stopping||(this._stopping=!0,logger.info("Sending Shutdown Signals To All Subsystems..."),await ConnectorService._stop(),_SmythRuntime2.instance=void 0,this.started=!1)}};__publicField$1(_SmythRuntime,"instance");let SmythRuntime=_SmythRuntime;const SRE=SmythRuntime.Instance;let shuttingDown=!1;async function shutdown(reason){if(SmythRuntime.Instance.started&&!shuttingDown&&(shuttingDown=!0,logger.info(`Caught ${reason} ... Attempting graceful shutdown`),SmythRuntime.Instance))try{await SmythRuntime.Instance._stop()}catch(err){logger.error("Shutdown error:",err)}}["SIGINT","SIGTERM"].forEach(signal=>{process.on(signal,async()=>{await shutdown(signal),process.exit(0)})});process.on("beforeExit",code=>{shutdown("beforeExit")});process.on("exit",code=>{logger.info("Goodbye!")});class SmythURI{static agent(id){return`smyth:agent:${id}`}}class LLMMemoryConnector extends SecureConnector{requester(candidate){return{load:async messages=>await this.load(candidate.readRequest,messages)}}}var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp(target,key,result),result},__publicField=(obj,key,value)=>__defNormalProp(obj,key+"",value);Logger("HashicorpVault");class HashicorpVault extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField(this,"name","HashicorpVault")}async get(acRequest,keyId){return null}async exists(acRequest,keyId){return!1}async listKeys(acRequest){return[]}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Owner).addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(TAccessRole.Team,teamId,TAccessLevel.Write),acl}}__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"get"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"exists"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"listKeys");export{ACL,ACLAccessDeniedError,APICall,APIEndpoint,APIKeySource,APIOutput,AWSLambdaCode,AccessCandidate,AccessRequest,AccountConnector,AccountService,Agent,AgentDataConnector,AgentDataService,AgentLogger,AgentPlugin,AgentProcess,AgentRequest,AgentRuntime,AgentSSE,AgentSettings,AnthropicConnector,Async,Await,BUILT_IN_MODEL_PREFIX,BaseEmbedding,BedrockConnector,BinaryInput,BuiltinLLMProviders,CLIAgentDataConnector,CLIConnector,CLIService,COMP_NAMES,CacheConnector,CacheService,Classifier,CodeConnector,CodeService,Component,ComponentConnector,ComponentHost,ComponentInputType,ComponentInstances,ComponentService,Connector,ConnectorService,ConnectorServiceProvider,ConsoleLog,Conversation,Credentials,DEFAULT_MAX_TOKENS_FOR_LLM,DEFAULT_SMYTHOS_LLM_PROVIDERS_SETTINGS,DEFAULT_TEAM_ID,DataSourceCleaner,DataSourceIndexer,DataSourceLookup,DummyAccount,DummyConnector,EMBODIMENT_TYPES,ENTERPRISE_MODELS_SETTING_KEY,ERR_MSG_INVALID_BINARY,ERR_MSG_INVALID_IMAGE_SOURCE,ERR_MSG_MAX_ARRAY_SIZE,ERR_MSG_MAX_DEPTH,ERR_MSG_MAX_OBJECT_SIZE,EchoConnector,EmbeddingsFactory,EmbodimentSettings,ExpressRouter,ExternalEventsReceiver,FEncDec,FHash,FSign,FSleep,FTimestamp,FileStore,ForEach,ForkedAgent,GPTPlugin,GenAILLM,GmailTrigger,GoogleAIConnector,GoogleEmbeds,GroqConnector,HashicorpVault,HookService,HuggingFace,ImageGenerator,ImageSettingsConfig,JSONContent,JSONContentHelper,JSONExpression$1 as JSONExpression,JSONFileAccount,JSONFileVault,JSONFilter,JSONModelsProvider,JSON_RESPONSE_INSTRUCTION,Job,JobSchedulerTrigger,LLMAssistant,LLMCache,LLMConnector,LLMContext,LLMHelper,LLMInference$1 as LLMInference,LLMInterface,LLMMemoryConnector,LLMService,LLMStream,LevelMap,LocalAgentDataConnector,LocalCache,LocalComponentConnector,LocalScheduler,LocalStorage,LocalStorageCache,LogConnector,LogHelper,LogService,Logger,LogicAND,LogicAtLeast,LogicAtMost,LogicOR,LogicXOR,MAX_ARRAY_SIZE,MAX_DEPTH,MAX_FILE_COUNT,MAX_FILE_SIZE,MAX_OBJECT_SIZE,MCPClient,MODELS_WITHOUT_JSON_RESPONSE_SUPPORT,MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT,ManagedOAuth2Credentials,ManagedVaultConnector,ManagedVaultService,Match,MemoryDeleteKeyVal,MemoryReadKeyVal,MemoryWriteKeyVal,MemoryWriteObject,MilvusVectorDB,ModelsProviderConnector,ModelsProviderService,MultimodalLLM,MySQLAccount,NKVConnector,NKVLocalStorage,NKVRAM,NKVRedis,NKVService,NullAgentData,NullManagedVault,NullRouter,NullVault,O3_AND_O4_MODELS,O3_AND_O4_MODELS_PATTERN,OSResourceMonitor,OllamaConnector,OpenAIConnector,OpenAIEmbeds,OpenAPIParser,PerplexityConnector,PineconeVectorDB,PromptGenerator,RAMCache,RAMVectorDB,REQUEST_CONTENT_TYPES,REQUEST_METHODS,RedisCache,ReverseLevelMap,ReverseRoleMap,RoleMap,RouterConnector,RouterService,RuntimeContext,S3Cache,S3Storage,S3_DAILY_PURGE_LIFECYCLE_TAG,S3_MONTHLY_PURGE_LIFECYCLE_TAG,S3_WEEKLY_PURGE_LIFECYCLE_TAG,SEARCH_TOOL_COSTS,SRE,SUPPORTED_MIME_TYPES_MAP,Schedule,SchedulerConnector,SchedulerService,ScrapflyWebScrape,SecretManagerManagedVault,SecretsManager,SecureConnector,ServerlessCode,SmythFS,SmythRuntime,SmythURI,StorageConnector,StorageService,SystemEvents,TAccessLevel,TAccessResult,TAccessRole,TConnectorService,THook,TLLMCredentials,TLLMEvent,TLLMMessageRole,TLLMProvider,TOOL_USE_DEFAULT_MODEL,TPLProcessor,TToolType,TavilyWebSearch,TemplateString,TemplateStringHelper,Trigger,USER_CUSTOM_MODELS_SETTING_KEY,VaultConnector,VaultHelper,VaultService,VectorDBConnector,VectorDBService,VertexAIConnector,VisionLLM,WhatsAppTrigger,ZapierAction,boot,buildOAuth1Header,cachePrefix,cacheTTL,calculateExecutionCost,checkAndInstallLifecycleRules,createOrUpdateLambdaFunction,customModels,destroyPublicUrls,escapeJsonField,escapeString,extractAdditionalParamsForOAuth1,extractAllKeyNamesFromTemplateVars,extractKeyFromTemplateVar,findSmythPath,findValidResourcePath,generateCodeFromLegacyComponent,generateCodeHash,generateExecutableCode,generateExpiryMetadata,generateLambdaCode,generateLifecycleRules,generateServiceKey,getCredentials,getCurrentEnvironmentVariables,getDeployedCodeHash,getDeployedFunction,getLLMCredentials,getLambdaCredentials,getLambdaFunctionName,getLambdaRolePolicy,getNonExistingRules,getSanitizeCodeHash,getSortedObjectValues,handleOAuthHeaders,hook,hookAsync,hookAsyncWithContext,inputErrMsg,invokeLambdaFunction,isAgent,isValidGroqReasoningEffort,isValidOpenAIReasoningEffort,models,parseArrayBufferResponse,parseData,parseHeaders,parseProxy,parseSmythFsUrl,parseUrl,performTypeInference,reportUsage,retrieveOAuthTokens,runJs,setDeployedCodeHash,ttlToExpiryDays,updateDeployedCodeTTL,validateAsyncMainFunction,validateServiceKey,verifyFunctionDeploymentStatus,version,waitForRoleDeploymentStatus,xAIConnector,zipCode};
229
+ `}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$2=Logger("ECMASandbox");class ECMASandbox2 extends CodeConnector{constructor(config2){super(config2),__publicField$5(this,"name","ECMASandbox"),__publicField$5(this,"sandboxUrl"),this.sandboxUrl=config2.sandboxUrl}async prepare(acRequest,codeUID,input,config2){return{prepared:!0,errors:[],warnings:[]}}async deploy(acRequest,codeUID,input,config2){return{id:codeUID,runtime:config2.runtime,createdAt:new Date,status:"Deployed"}}async execute(acRequest,codeUID,inputs,config2){try{const{isValid,error,parameters}=validateAsyncMainFunction(inputs.code);if(!isValid)return{output:void 0,executionTime:0,success:!1,errors:[error]};const executableCode=generateExecutableCode(inputs.code,parameters,inputs.inputs);if(this.sandboxUrl){console$2.debug("Running code in remote sandbox");const executionStartTime=Date.now(),result=await axios.post(this.sandboxUrl,{code:executableCode}).catch(error2=>({error:error2})),executionTime=Date.now()-executionStartTime;if(result.error){const error2=result.error?.response?.data||result.error?.message||result.error.toString()||"Unknown error";return console$2.error(`Error running code: ${JSON.stringify(error2,null,2)}`),{output:void 0,executionTime,success:!1,errors:[error2]}}else return console$2.debug(`Code result: ${result?.data?.Output}`),{output:result.data?.Output,executionTime,success:!0,errors:[]}}else{console$2.debug("Running code in isolated vm");const executionStartTime=Date.now(),result=await runJs(executableCode),executionTime=Date.now()-executionStartTime;return console$2.debug(`Code result: ${result}`),{output:result,executionTime,success:!0,errors:[]}}}catch(error){return console$2.error(`Error running code: ${error}`),{output:void 0,executionTime:0,success:!1,errors:[error]}}}async executeDeployment(acRequest,codeUID,deploymentId,inputs,config2){return await this.execute(acRequest,codeUID,inputs,config2)}async listDeployments(acRequest,codeUID,config2){return[]}async getDeployment(acRequest,codeUID,deploymentId,config2){return null}async deleteDeployment(acRequest,codeUID,deploymentId){}async getResourceACL(resourceId,candidate){const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}class CodeService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Code,"AWSLambda",AWSLambdaCode),ConnectorService.register(TConnectorService.Code,"ECMASandbox",ECMASandbox2)}}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,key+"",value);class SchedulerConnector extends SecureConnector{constructor(settings){super(settings),__publicField$4(this,"_eventEmitter"),this._eventEmitter=new EventEmitter$1}requester(candidate){return{list:async()=>await this.list(candidate.readRequest),add:async(jobId,job,schedule)=>{const accountConnector=ConnectorService.getAccountConnector(),agentTeam=await accountConnector.getCandidateTeam(AccessCandidate.agent(job.agentId)),candidateTeam=await accountConnector.getCandidateTeam(candidate);if(agentTeam!==candidateTeam)throw new Error(`Candidate ${candidate.id} is not authorized to schedule a job for agent ${job.agentId}`);await this.add(candidate.writeRequest,jobId,job,schedule)},delete:async jobId=>{await this.delete(candidate.writeRequest,jobId)},get:async jobId=>await this.get(candidate.readRequest,jobId),pause:async jobId=>{await this.pause(candidate.writeRequest,jobId)},resume:async jobId=>{await this.resume(candidate.writeRequest,jobId)},on:(event,listener)=>{this.on(event,listener)},off:(event,listener)=>{this.off(event,listener)}}}constructJobKey(candidate,jobId){return`${candidate.role}_${candidate.id}_${jobId}`}emit(event,...args){return this._eventEmitter.emit(event,...args)}on(event,listener){return this._eventEmitter.on(event,listener),this}off(event,listener){return this._eventEmitter.off(event,listener),this}}var __defProp$3=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__defNormalProp$3=(obj,key,value)=>key in obj?__defProp$3(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$1=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$1(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$3(target,key,result),result},__publicField$3=(obj,key,value)=>__defNormalProp$3(obj,typeof key!="symbol"?key+"":key,value);const logger$2=Logger("LocalScheduler"),_LocalScheduler=class _LocalScheduler2 extends SchedulerConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$3(this,"name","LocalScheduler"),__publicField$3(this,"id","local"),__publicField$3(this,"folder"),__publicField$3(this,"jobsPrefix","jobs"),__publicField$3(this,"runtimePrefix",".jobs.runtime"),__publicField$3(this,"isInitialized",!1),__publicField$3(this,"config"),this.config={folder:_settings?.folder||"",runJobs:_settings?.runJobs!==!1,persistExecutionHistory:_settings?.persistExecutionHistory!==!1,maxHistoryEntries:_settings?.maxHistoryEntries||100},this.folder=this.findSchedulerFolder(this.config.folder),this.initialize(),fs__default.existsSync(this.folder)||logger$2.warn(`Invalid folder provided: ${this.folder}`)}findSchedulerFolder(folder){let _schedulerFolder=folder;return _schedulerFolder&&fs__default.existsSync(_schedulerFolder)?_schedulerFolder:(_schedulerFolder=findSmythPath("scheduler"),fs__default.existsSync(_schedulerFolder)?(logger$2.warn("Using alternative scheduler folder found in : ",_schedulerFolder),_schedulerFolder):(logger$2.warn("!!! All attempts to find an existing scheduler folder failed !!!"),logger$2.warn("!!! I will use this folder: ",_schedulerFolder),_schedulerFolder))}async initialize(){const jobsFolderPath=path.join(this.folder,this.jobsPrefix);fs__default.existsSync(jobsFolderPath)||(fs__default.mkdirSync(jobsFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(jobsFolderPath,"README_IMPORTANT.txt"),"This folder contains scheduler job configurations. Do not delete it."));const runtimeFolderPath=path.join(this.folder,this.runtimePrefix);fs__default.existsSync(runtimeFolderPath)||(fs__default.mkdirSync(runtimeFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(runtimeFolderPath,"README_IMPORTANT.txt"),"This folder contains scheduler runtime data and execution history. Safe to delete if needed.")),this.config.runJobs&&await this.loadJobsFromDisk(),this.isInitialized=!0,logger$2.info(`LocalScheduler initialized (runJobs: ${this.config.runJobs})`)}getCandidateFolderName(candidate){return`${candidate.id}.${candidate.role}`}getJobFilePath(candidate,jobId,createFoldersIfNotExists=!1){const candidateFolder=this.getCandidateFolderName(candidate),jobFilename=jobId,fullPath=path.join(this.folder,this.jobsPrefix,candidateFolder,`${jobFilename}.json`);if(createFoldersIfNotExists){const folder=path.dirname(fullPath);fs__default.existsSync(folder)||fs__default.mkdirSync(folder,{recursive:!0})}return fullPath}getRuntimeFilePath(candidate,jobId,createFoldersIfNotExists=!1){const candidateFolder=this.getCandidateFolderName(candidate),jobFilename=jobId,fullPath=path.join(this.folder,this.runtimePrefix,candidateFolder,`${jobFilename}.json`);if(createFoldersIfNotExists){const folder=path.dirname(fullPath);fs__default.existsSync(folder)||fs__default.mkdirSync(folder,{recursive:!0})}return fullPath}async loadJobsFromDisk(){try{const jobsFolderPath=path.join(this.folder,this.jobsPrefix);if(!fs__default.existsSync(jobsFolderPath))return;const candidateFolders=fs__default.readdirSync(jobsFolderPath).filter(f=>{const fullPath=path.join(jobsFolderPath,f);return fs__default.statSync(fullPath).isDirectory()});for(const candidateFolder of candidateFolders){const lastDotIndex=candidateFolder.lastIndexOf(".");if(lastDotIndex===-1){logger$2.warn(`Invalid candidate folder format: ${candidateFolder}`);continue}const candidateId=candidateFolder.substring(0,lastDotIndex),candidateRole=candidateFolder.substring(lastDotIndex+1),candidate={id:candidateId,role:candidateRole},candidatePath=path.join(jobsFolderPath,candidateFolder),jobFiles=fs__default.readdirSync(candidatePath).filter(f=>f.endsWith(".json"));for(const file of jobFiles)try{const filePath=path.join(candidatePath,file),data=fs__default.readFileSync(filePath,"utf-8"),jobConfig=JSON.parse(data),runtimeData=await this.loadRuntimeDataFromDisk(candidate,jobConfig.id),jobData={...jobConfig,...runtimeData,candidateRole:candidate.role,candidateId:candidate.id},jobKey=this.constructJobKey(candidate,jobData.id);_LocalScheduler2.jobs.set(jobKey,jobData),jobData.status==="active"&&(logger$2.info(`Job ${jobData.id} loaded from ${candidateFolder} and scheduled for execution`),await this.scheduleJob(jobData))}catch(error){logger$2.warn(`Error loading job file ${file} from ${candidateFolder}:`,error)}}logger$2.info(`Loaded ${_LocalScheduler2.jobs.size} jobs from disk`)}catch(error){logger$2.warn("Error loading jobs from disk",error)}}async saveJobToDisk(candidate,jobData){try{const filePath=this.getJobFilePath(candidate,jobData.id,!0),{executionHistory,lastRun,nextRun,candidateRole,candidateId,createdBy,...configData}=jobData;fs__default.writeFileSync(filePath,JSON.stringify(configData,null,2),"utf-8")}catch(error){throw logger$2.warn(`Error saving job ${jobData.id} to disk`,error),error}}async saveRuntimeDataToDisk(candidate,jobData){try{const filePath=this.getRuntimeFilePath(candidate,jobData.id,!0),runtimeData={executionHistory:jobData.executionHistory||[],lastRun:jobData.lastRun,nextRun:jobData.nextRun};fs__default.writeFileSync(filePath,JSON.stringify(runtimeData,null,2),"utf-8")}catch(error){logger$2.warn(`Error saving runtime data for job ${jobData.id}`,error);return}}async loadRuntimeDataFromDisk(candidate,jobId){try{const filePath=this.getRuntimeFilePath(candidate,jobId);if(!fs__default.existsSync(filePath))return{};const data=fs__default.readFileSync(filePath,"utf-8");return JSON.parse(data)}catch(error){return logger$2.warn(`Error loading runtime data for job ${jobId}`,error),{}}}async deleteJobFromDisk(candidate,jobId){try{const jobFilePath=this.getJobFilePath(candidate,jobId);fs__default.existsSync(jobFilePath)&&fs__default.unlinkSync(jobFilePath);const runtimeFilePath=this.getRuntimeFilePath(candidate,jobId);fs__default.existsSync(runtimeFilePath)&&fs__default.unlinkSync(runtimeFilePath)}catch(error){logger$2.warn(`Error deleting job ${jobId} from disk`,error);return}}async scheduleJob(jobData){if(jobData.status!=="active")return;const validation=Schedule.fromJSON(jobData.schedule).validate();if(!validation.valid)throw logger$2.warn(`Invalid schedule for job ${jobData.id}: ${validation.error}`),new Error(`Invalid schedule for job ${jobData.id}: ${validation.error}`);const jobKey=this.constructJobKey({role:jobData.candidateRole,id:jobData.candidateId},jobData.id),existingTimer=_LocalScheduler2.timers.get(jobKey);if(existingTimer&&(logger$2.info(`Clearing existing timer for job ${jobData.id} (overwriting duplicate schedule)`),clearInterval(existingTimer),_LocalScheduler2.timers.delete(jobKey)),jobData.schedule.interval){const intervalMs=Schedule.parseInterval(jobData.schedule.interval),timer=setInterval(async()=>{await this.executeJob(jobData)},intervalMs);timer.unref(),_LocalScheduler2.timers.set(jobKey,timer)}if(jobData.schedule.cron)throw logger$2.warn(`Cron scheduling not yet implemented for job ${jobData.id}`),new Error(`Cron scheduling not yet implemented for job ${jobData.id}`)}async unscheduleJob(jobKey){const timer=_LocalScheduler2.timers.get(jobKey);timer&&(clearInterval(timer),_LocalScheduler2.timers.delete(jobKey))}async executeJob(jobData){if(!jobData.jobConfig){logger$2.warn(`Skipping execution of job ${jobData.id}: job configuration not available.`);return}const schedule=Schedule.fromJSON(jobData.schedule);if(!schedule.shouldRun()){logger$2.info(`Job ${jobData.id} skipped - outside schedule window`);return}const job=Job.fromJSON(jobData.jobConfig);logger$2.debug(`Executing job ${jobData.id} with metadata:`,JSON.stringify(jobData.jobConfig.metadata));const owner=jobData.createdBy;this.emit("executing",{id:jobData.id,job,owner});const result=await job.executeWithRetry();this.emit("executed",{id:jobData.id,job,owner,result}),jobData.lastRun=new Date().toISOString();const nextRun=schedule.calculateNextRun(new Date(jobData.lastRun));jobData.nextRun=nextRun?nextRun.toISOString():void 0,result.success||logger$2.warn(`Job ${jobData.id} failed:`,result.error?.message),this.config.persistExecutionHistory&&(jobData.executionHistory||(jobData.executionHistory=[]),jobData.executionHistory.unshift({timestamp:new Date().toISOString(),success:result.success,error:result.error?.message,executionTime:result.executionTime,retries:result.retries}),jobData.executionHistory.length>this.config.maxHistoryEntries&&(jobData.executionHistory=jobData.executionHistory.slice(0,this.config.maxHistoryEntries)));const candidate={role:jobData.candidateRole,id:jobData.candidateId};await this.saveJobToDisk(candidate,jobData),this.config.persistExecutionHistory&&await this.saveRuntimeDataToDisk(candidate,jobData)}async getResourceACL(resourceId,candidate){this.isInitialized||await this.initialize();const accountConnector=ConnectorService.getAccountConnector(),teamId=await accountConnector.getCandidateTeam(candidate),jobKey=this.constructJobKey(candidate,resourceId),jobData=_LocalScheduler2.jobs.get(jobKey),jobAgentTeamId=jobData?.jobConfig?.agentId?await accountConnector.getCandidateTeam(AccessCandidate.agent(jobData?.jobConfig?.agentId)):null;return jobAgentTeamId&&teamId!==jobAgentTeamId?new ACL:jobData?ACL.from(jobData.acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async list(acRequest){this.isInitialized||await this.initialize();const result=[];for(const[key,jobData]of _LocalScheduler2.jobs)if(jobData.candidateRole===acRequest.candidate.role&&jobData.candidateId===acRequest.candidate.id){const{candidateRole,candidateId,...serializableData}=jobData;result.push(serializableData)}return result}async add(acRequest,jobId,job,schedule){this.isInitialized||await this.initialize();const validation=schedule.validate();if(!validation.valid){logger$2.warn(`Invalid schedule: ${validation.error}`);return}const jobKey=this.constructJobKey(acRequest.candidate,jobId),existingJob=_LocalScheduler2.jobs.get(jobKey);let acl;existingJob?acl=ACL.from(existingJob.acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner):acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner);const nextRun=schedule.calculateNextRun(),jobData={id:jobId,schedule:schedule.toJSON(),jobConfig:job.toJSON(),acl:acl.ACL,status:"active",nextRun:nextRun?nextRun.toISOString():void 0,createdBy:{role:acRequest.candidate.role,id:acRequest.candidate.id},candidateRole:acRequest.candidate.role,candidateId:acRequest.candidate.id,executionHistory:existingJob?.executionHistory||[]};existingJob&&await this.unscheduleJob(jobKey),_LocalScheduler2.jobs.set(jobKey,jobData),await this.saveJobToDisk(acRequest.candidate,jobData),this.config.runJobs&&await this.scheduleJob(jobData),logger$2.info(`Job ${jobId} added successfully`)}async delete(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId);if(!_LocalScheduler2.jobs.get(jobKey)){logger$2.warn(`Job ${jobId} not found`);return}await this.unscheduleJob(jobKey),_LocalScheduler2.jobs.delete(jobKey),await this.deleteJobFromDisk(acRequest.candidate,jobId),logger$2.info(`Job ${jobId} deleted successfully`)}async get(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData)return;const{candidateRole,candidateId,...serializableData}=jobData;return serializableData}async pause(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData){logger$2.warn(`Job ${jobId} not found`);return}jobData.status!=="paused"&&(await this.unscheduleJob(jobKey),jobData.status="paused",await this.saveJobToDisk(acRequest.candidate,jobData),logger$2.info(`Job ${jobId} paused`))}async resume(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData){logger$2.warn(`Job ${jobId} not found`);return}jobData.status==="paused"&&(jobData.status="active",await this.saveJobToDisk(acRequest.candidate,jobData),this.config.runJobs&&await this.scheduleJob(jobData),logger$2.info(`Job ${jobId} resumed`))}async shutdown(){logger$2.info("Shutting down LocalScheduler...");const timerCount=_LocalScheduler2.timers.size;for(const[jobKey,timer]of _LocalScheduler2.timers)clearInterval(timer);_LocalScheduler2.timers.clear(),logger$2.info(`LocalScheduler shutdown complete (cleared ${timerCount} timers)`)}};__publicField$3(_LocalScheduler,"jobs",new Map),__publicField$3(_LocalScheduler,"timers",new Map),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"list"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"add"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"delete"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"get"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"pause"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"resume");let LocalScheduler=_LocalScheduler;class SchedulerService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Scheduler,"LocalScheduler",LocalScheduler)}}const console$1=Logger("Boot");let _booted=!1;function boot(){if(_booted){console$1.warn("SRE already booted");return}_booted=!0,SystemEvents.emit("SRE:BootStart"),console$1.debug("SRE Boot sequence started");const service={};service.NKV=new NKVService,service.Account=new AccountService,service.Vault=new VaultService,service.ManagedVault=new ManagedVaultService,service.Cache=new CacheService,service.Storage=new StorageService,service.ModelsProvider=new ModelsProviderService,service.LLM=new LLMService,service.AgentData=new AgentDataService,service.CLI=new CLIService,service.VectorDB=new VectorDBService,service.Router=new RouterService,service.Log=new LogService,service.Component=new ComponentService,service.Code=new CodeService,service.Scheduler=new SchedulerService,SystemEvents.on("SRE:Initialized",()=>{console$1.debug("SRE Initialized");for(let key in service)service[key].init();SystemEvents.emit("SRE:Booted",service),console$1.debug("SRE Boot sequence completed")})}function generateServiceKey(serviceName){const secret=process.env.SRE_SECRET;if(!secret||secret.trim().length<32)throw new Error("SRE_SECRET must be at least 32 characters");return createHmac("sha256",secret).update(`sre-service:${serviceName}`).digest("hex")}function validateServiceKey(serviceName,providedKey){try{const expectedKey=generateServiceKey(serviceName);return timingSafeEqual(Buffer.from(expectedKey),Buffer.from(providedKey))}catch{return!1}}var __defProp$2=Object.defineProperty,__defNormalProp$2=(obj,key,value)=>key in obj?__defProp$2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$2=(obj,key,value)=>__defNormalProp$2(obj,typeof key!="symbol"?key+"":key,value);const logger$1=Logger("ExternalEventsReceiver");class ExternalEventsReceiver{constructor(config2){if(__publicField$2(this,"server",null),__publicField$2(this,"wss",null),__publicField$2(this,"config"),__publicField$2(this,"isRunning",!1),this.config={enableHttp:!0,enableWebSocket:!0,path:"/ws",...config2},!this.config.authTokens||this.config.authTokens.length===0)throw logger$1.warn("At least one authentication token must be provided"),new Error("At least one authentication token must be provided")}async start(){if(this.isRunning){logger$1.warn("Server is already running");return}return this.server=createServer((req,res)=>this.handleHttpRequest(req,res)),this.config.enableWebSocket&&(this.wss=new WebSocketServer({server:this.server,path:this.config.path}),this.wss.on("connection",(ws,req)=>{this.handleWebSocketConnection(ws,req)})),new Promise((resolve,reject)=>{this.server.listen(this.config.port,"127.0.0.1",()=>{this.isRunning=!0,logger$1.debug(`Server started on port ${this.config.port}`+(this.config.enableHttp?" [HTTP]":"")+(this.config.enableWebSocket?` [WebSocket: ${this.config.path}]`:"")),resolve()}),this.server.on("error",error=>{logger$1.error("Server error",error),reject(error)})})}async stop(){if(this.isRunning)return new Promise((resolve,reject)=>{this.wss&&this.wss.close(err=>{err&&logger$1.error("Error closing WebSocket server",err)}),this.server?this.server.close(err=>{err?(logger$1.error("Error closing HTTP server",err),reject(err)):(this.isRunning=!1,logger$1.debug("Server stopped"),resolve())}):resolve()})}handleHttpRequest(req,res){if(!this.config.enableHttp){this.sendResponse(res,404,{error:"HTTP endpoint is disabled"});return}if(req.method!=="POST"){this.sendResponse(res,405,{error:"Method not allowed. Only POST requests are accepted."});return}const authResult=this.validateAuth(req.headers);if(!authResult.valid){this.sendResponse(res,401,{error:authResult.error});return}const connectorName=this.getConnectorName(req.headers);if(!connectorName){this.sendResponse(res,400,{error:"Missing x-connector-name header"});return}let body="";req.on("data",chunk=>{body+=chunk.toString()}),req.on("end",()=>{try{const data=body?JSON.parse(body):{};this.emitExternalEvent(connectorName,data),this.sendResponse(res,200,{success:!0,message:`Event EXT:${connectorName} emitted successfully`})}catch(error){logger$1.error("Error processing HTTP request",error),this.sendResponse(res,400,{error:"Invalid JSON payload"})}}),req.on("error",error=>{logger$1.error("HTTP request error",error),this.sendResponse(res,500,{error:"Internal server error"})})}handleWebSocketConnection(ws,req){logger$1.debug("New WebSocket connection");const authResult=this.validateAuth(req.headers);if(!authResult.valid){ws.close(1008,authResult.error);return}let connectorName=this.getConnectorName(req.headers);ws.on("message",message=>{try{const data=JSON.parse(message.toString());if(!connectorName&&(connectorName=data.connectorName||data["x-connector-name"],!connectorName)){ws.send(JSON.stringify({error:"Missing connector name in headers or message"}));return}this.emitExternalEvent(connectorName,data),ws.send(JSON.stringify({success:!0,message:`Event EXT:${connectorName} emitted successfully`}))}catch(error){logger$1.error("Error processing WebSocket message",error),ws.send(JSON.stringify({error:"Invalid JSON message"}))}}),ws.on("error",error=>{logger$1.error("WebSocket error",error)}),ws.on("close",()=>{logger$1.debug("WebSocket connection closed")})}validateAuth(headers){const authHeader=headers.authorization||headers.Authorization,serviceName=headers["x-service-name"]||headers["X-Service-Name"];if(!authHeader)return logger$1.warn("Missing Authorization header"),{valid:!1,error:"Missing Authorization header"};if(!serviceName||typeof serviceName!="string")return logger$1.warn("Missing or invalid X-Service-Name header"),{valid:!1,error:"Missing X-Service-Name header"};const token=authHeader.replace(/^Bearer\s+/i,"");return token?validateServiceKey(serviceName,token)?(logger$1.debug(`Authenticated service: ${serviceName}`),{valid:!0,serviceName}):(logger$1.warn(`Invalid key for service: ${serviceName}`),{valid:!1,error:"Invalid authentication"}):{valid:!1,error:"Invalid Authorization header format"}}getConnectorName(headers){const connectorName=headers["x-connector-name"]||headers["X-Connector-Name"];return typeof connectorName=="string"?connectorName:connectorName?.[0]||null}emitExternalEvent(connectorName,data){const eventName=`EXT:${connectorName}`,connector=ConnectorService.getInstance(TConnectorService[connectorName]);connector&&connector.handleEvent(eventName,data)}sendResponse(res,statusCode,body){res.statusCode=statusCode,res.setHeader("Content-Type","application/json"),res.end(JSON.stringify(body))}getStatus(){return{running:this.isRunning,port:this.config.port,config:this.config}}}var __defProp$1=Object.defineProperty,__defNormalProp$1=(obj,key,value)=>key in obj?__defProp$1(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1=(obj,key,value)=>__defNormalProp$1(obj,typeof key!="symbol"?key+"":key,value);const logger=Logger("SRE"),SRE_GLOBAL_KEY=Symbol.for("SRE:Instance"),_SmythRuntime=class _SmythRuntime2{constructor(){__publicField$1(this,"started",!1),__publicField$1(this,"_smythDir"),__publicField$1(this,"_readyPromise"),__publicField$1(this,"_readyResolve"),__publicField$1(this,"defaultConfig",{Vault:{Connector:"JSONFileVault",Settings:{shared:"default"}},Account:{Connector:"DummyAccount"},Cache:{Connector:"RAM"},Storage:{Connector:"LocalStorage"},Code:{Connector:"DummyConnector"},NKV:{Connector:"LocalStorage"},VectorDB:{Connector:"RAMVec"},ModelsProvider:{Connector:"JSONModelsProvider"},AgentData:{Connector:"NullAgentData"},Component:{Connector:"LocalComponent"},ManagedVault:{Connector:"NullManagedVault"},Log:{Connector:"ConsoleLog"},Router:{Connector:"NullRouter"},Scheduler:{Connector:"LocalScheduler",Settings:{runJobs:!0,persistExecutionHistory:!0}}}),__publicField$1(this,"_initializing",!1),__publicField$1(this,"_initialized",!1),__publicField$1(this,"_stopping",!1),this.started=!0,this._readyPromise=new Promise(resolve=>{this._readyResolve=resolve})}get smythDir(){return this._smythDir}get version(){return pkg.version}static get Instance(){return global[SRE_GLOBAL_KEY]?global[SRE_GLOBAL_KEY]:(_SmythRuntime2.instance=new _SmythRuntime2,global[SRE_GLOBAL_KEY]=_SmythRuntime2.instance,_SmythRuntime2.instance)}get initializing(){return this._initializing}init(_config){if(logger.info(`SRE v${this.version} initializing...`),(!_config||JSON.stringify(_config)==="{}")&&(this._smythDir=findSmythPath(),logger.info(".smyth directory found in:",this._smythDir)),this._initializing){console.warn("You tried to initialize SRE while it is already initializing ... skipping");return}if(this._initialized)throw new Error("SRE already initialized");this._initializing=!0,SystemEvents.on("SRE:Booted",()=>{this._readyResolve(!0)}),boot();const config2=this.autoConf(_config);for(let connectorType in config2)for(let configEntry of config2[connectorType])ConnectorService.init(connectorType,configEntry.Connector,configEntry.Id,configEntry.Settings,configEntry.Default)||logger.warn(`Failed to initialize connector ${connectorType}:${configEntry.Id||configEntry.Connector}`);return this._initialized=!0,SystemEvents.emit("SRE:Initialized",_SmythRuntime2.Instance),this.setupShutdownHandlers(),_SmythRuntime2.Instance}autoConf(config2={}){const defaultConfig=JSON.parse(JSON.stringify(this.defaultConfig)),keys=Object.keys({...defaultConfig,...config2}),newConfig={};for(let connectorType of keys){newConfig[connectorType]=[];let entry=config2[connectorType]||defaultConfig[connectorType];Array.isArray(entry)||(entry=[entry]);let hasDefault=!1;for(let connector of entry){if(!connector.Connector){logger.warn(`Missing Connector Name in ${connectorType} entry ... it will be ignored`);continue}connector.Default&&(hasDefault&&logger.warn(`Entry ${connectorType} has more than one default Connector ... only the first one will be used`),hasDefault=!0),newConfig[connectorType].push(connector)}!hasDefault&&newConfig[connectorType].length>0&&(newConfig[connectorType][0].Default=!0)}return newConfig}ready(){return this._readyPromise}async _stop(){this._stopping||(this._stopping=!0,logger.info("Sending Shutdown Signals To All Subsystems..."),await ConnectorService._stop(),_SmythRuntime2.instance=void 0,this.started=!1)}setupShutdownHandlers(){["SIGINT","SIGTERM"].forEach(signal=>{process.on(signal,async()=>{await shutdown(signal),process.exit(0)})}),process.on("beforeExit",code=>{shutdown("beforeExit")}),process.on("exit",code=>{logger.info("Goodbye!")})}};__publicField$1(_SmythRuntime,"instance");let SmythRuntime=_SmythRuntime;const SRE=SmythRuntime.Instance;let shuttingDown=!1;async function shutdown(reason){if(SmythRuntime.Instance.started&&!shuttingDown&&(shuttingDown=!0,logger.info(`Caught ${reason} ... Attempting graceful shutdown`),SmythRuntime.Instance))try{await SmythRuntime.Instance._stop()}catch(err){logger.error("Shutdown error:",err)}}class SmythURI{static agent(id){return`smyth:agent:${id}`}}class LLMMemoryConnector extends SecureConnector{requester(candidate){return{load:async messages=>await this.load(candidate.readRequest,messages)}}}var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp(target,key,result),result},__publicField=(obj,key,value)=>__defNormalProp(obj,key+"",value);Logger("HashicorpVault");class HashicorpVault extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField(this,"name","HashicorpVault")}async get(acRequest,keyId){return null}async exists(acRequest,keyId){return!1}async listKeys(acRequest){return[]}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Owner).addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(TAccessRole.Team,teamId,TAccessLevel.Write),acl}}__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"get"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"exists"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"listKeys");export{ACL,ACLAccessDeniedError,APICall,APIEndpoint,APIKeySource,APIOutput,AWSLambdaCode,AccessCandidate,AccessRequest,AccountConnector,AccountService,Agent,AgentDataConnector,AgentDataService,AgentLogger,AgentPlugin,AgentProcess,AgentRequest,AgentRuntime,AgentSSE,AgentSettings,AnthropicConnector,Async,Await,BUILT_IN_MODEL_PREFIX,BaseEmbedding,BedrockConnector,BinaryInput,BuiltinLLMProviders,CLIAgentDataConnector,CLIConnector,CLIService,COMP_NAMES,CacheConnector,CacheService,Classifier,CodeConnector,CodeService,Component,ComponentConnector,ComponentHost,ComponentInputType,ComponentInstances,ComponentService,Connector,ConnectorService,ConnectorServiceProvider,ConsoleLog,Conversation,Credentials,DEFAULT_MAX_TOKENS_FOR_LLM,DEFAULT_SMYTHOS_LLM_PROVIDERS_SETTINGS,DEFAULT_TEAM_ID,DataSourceCleaner,DataSourceIndexer,DataSourceLookup,DummyAccount,DummyConnector,EMBODIMENT_TYPES,ENTERPRISE_MODELS_SETTING_KEY,ERR_MSG_INVALID_BINARY,ERR_MSG_INVALID_IMAGE_SOURCE,ERR_MSG_MAX_ARRAY_SIZE,ERR_MSG_MAX_DEPTH,ERR_MSG_MAX_OBJECT_SIZE,EchoConnector,EmbeddingsFactory,EmbodimentSettings,ExpressRouter,ExternalEventsReceiver,FEncDec,FHash,FSign,FSleep,FTimestamp,FileStore,ForEach,ForkedAgent,GPTPlugin,GenAILLM,GmailTrigger,GoogleAIConnector,GoogleEmbeds,GroqConnector,HashicorpVault,HookService,HuggingFace,ImageGenerator,ImageSettingsConfig,JSONContent,JSONContentHelper,JSONExpression$1 as JSONExpression,JSONFileAccount,JSONFileVault,JSONFilter,JSONModelsProvider,JSON_RESPONSE_INSTRUCTION,Job,JobSchedulerTrigger,LLMAssistant,LLMCache,LLMConnector,LLMContext,LLMHelper,LLMInference$1 as LLMInference,LLMInterface,LLMMemoryConnector,LLMService,LLMStream,LevelMap,LocalAgentDataConnector,LocalCache,LocalComponentConnector,LocalScheduler,LocalStorage,LocalStorageCache,LogConnector,LogHelper,LogService,Logger,LogicAND,LogicAtLeast,LogicAtMost,LogicOR,LogicXOR,MAX_ARRAY_SIZE,MAX_DEPTH,MAX_FILE_COUNT,MAX_FILE_SIZE,MAX_OBJECT_SIZE,MCPClient,MODELS_WITHOUT_JSON_RESPONSE_SUPPORT,MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT,ManagedOAuth2Credentials,ManagedVaultConnector,ManagedVaultService,Match,MemoryDeleteKeyVal,MemoryReadKeyVal,MemoryWriteKeyVal,MemoryWriteObject,MilvusVectorDB,ModelsProviderConnector,ModelsProviderService,MultimodalLLM,MySQLAccount,NKVConnector,NKVLocalStorage,NKVRAM,NKVRedis,NKVService,NullAgentData,NullManagedVault,NullRouter,NullVault,O3_AND_O4_MODELS,O3_AND_O4_MODELS_PATTERN,OSResourceMonitor,OllamaConnector,OpenAIConnector,OpenAIEmbeds,OpenAPIParser,PerplexityConnector,PineconeVectorDB,PromptGenerator,RAMCache,RAMVectorDB,REQUEST_CONTENT_TYPES,REQUEST_METHODS,RedisCache,ReverseLevelMap,ReverseRoleMap,RoleMap,RouterConnector,RouterService,RuntimeContext,S3Cache,S3Storage,S3_DAILY_PURGE_LIFECYCLE_TAG,S3_MONTHLY_PURGE_LIFECYCLE_TAG,S3_WEEKLY_PURGE_LIFECYCLE_TAG,SEARCH_TOOL_COSTS,SRE,SUPPORTED_MIME_TYPES_MAP,Schedule,SchedulerConnector,SchedulerService,ScrapflyWebScrape,SecretManagerManagedVault,SecretsManager,SecureConnector,ServerlessCode,SmythFS,SmythRuntime,SmythURI,StorageConnector,StorageService,SystemEvents,TAccessLevel,TAccessResult,TAccessRole,TConnectorService,THook,TLLMCredentials,TLLMEvent,TLLMMessageRole,TLLMProvider,TOOL_USE_DEFAULT_MODEL,TPLProcessor,TToolType,TavilyWebSearch,TemplateString,TemplateStringHelper,Trigger,USER_CUSTOM_MODELS_SETTING_KEY,VaultConnector,VaultHelper,VaultService,VectorDBConnector,VectorDBService,VertexAIConnector,VisionLLM,WhatsAppTrigger,ZapierAction,boot,buildOAuth1Header,cachePrefix,cacheTTL,calculateExecutionCost,checkAndInstallLifecycleRules,createOrUpdateLambdaFunction,customModels,destroyPublicUrls,escapeJsonField,escapeString,extractAdditionalParamsForOAuth1,extractAllKeyNamesFromTemplateVars,extractKeyFromTemplateVar,findSmythPath,findValidResourcePath,generateCodeFromLegacyComponent,generateCodeHash,generateExecutableCode,generateExpiryMetadata,generateLambdaCode,generateLifecycleRules,generateServiceKey,getCredentials,getCurrentEnvironmentVariables,getDeployedCodeHash,getDeployedFunction,getLLMCredentials,getLambdaCredentials,getLambdaFunctionName,getLambdaRolePolicy,getNonExistingRules,getSanitizeCodeHash,getSortedObjectValues,handleOAuthHeaders,hook,hookAsync,hookAsyncWithContext,inputErrMsg,invokeLambdaFunction,isAgent,isValidGroqReasoningEffort,isValidOpenAIReasoningEffort,models,parseArrayBufferResponse,parseData,parseHeaders,parseProxy,parseSmythFsUrl,parseUrl,performTypeInference,reportUsage,retrieveOAuthTokens,runJs,setDeployedCodeHash,ttlToExpiryDays,updateDeployedCodeTTL,validateAsyncMainFunction,validateServiceKey,verifyFunctionDeploymentStatus,version,waitForRoleDeploymentStatus,xAIConnector,zipCode};
230
230
  //# sourceMappingURL=index.js.map