@runflow-ai/sdk 1.0.0 → 1.0.1

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.
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.RunflowAgent = void 0;
37
+ const runflow_sdk_1 = require("../runflow-sdk");
38
+ const anthropic_1 = require("@langchain/anthropic");
39
+ const openai_1 = require("@langchain/openai");
40
+ const messages_1 = require("@langchain/core/messages");
41
+ const agents_1 = require("langchain/agents");
42
+ const prompts_1 = require("@langchain/core/prompts");
43
+ const tools_1 = require("@langchain/core/tools");
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ class RunflowAgent {
47
+ constructor(config) {
48
+ this.tools = [];
49
+ this.systemPromptContent = '';
50
+ this.currentCompanyId = '';
51
+ this.config = config;
52
+ this.sdk = new runflow_sdk_1.RunflowSDK();
53
+ }
54
+ async initialize() {
55
+ if (this.llm)
56
+ return; // Já inicializado
57
+ // Buscar credencial
58
+ const credential = await this.sdk.getCredential(this.config.llm.credential);
59
+ const apiKey = credential.apiKey;
60
+ // Inicializar LLM
61
+ if (this.config.llm.provider === 'anthropic') {
62
+ this.llm = new anthropic_1.ChatAnthropic({
63
+ anthropicApiKey: apiKey,
64
+ modelName: this.config.llm.model,
65
+ temperature: this.config.llm.temperature || 0.7,
66
+ });
67
+ }
68
+ else if (this.config.llm.provider === 'openai') {
69
+ this.llm = new openai_1.ChatOpenAI({
70
+ openAIApiKey: apiKey,
71
+ modelName: this.config.llm.model,
72
+ temperature: this.config.llm.temperature || 0.7,
73
+ });
74
+ }
75
+ // Buscar system prompt
76
+ this.systemPromptContent = await this.sdk.getPrompt(this.config.systemPrompt);
77
+ // Carregar tools
78
+ await this.loadTools();
79
+ }
80
+ async loadTools() {
81
+ // Tool built-in para busca na base de conhecimento
82
+ if (this.config.tools?.includes('search-knowledge')) {
83
+ this.tools.push(new tools_1.DynamicTool({
84
+ name: 'search_knowledge',
85
+ description: 'Busca informações na base de conhecimento da empresa',
86
+ func: async (query) => {
87
+ try {
88
+ const vectorStores = await this.sdk.getAvailableVectorStores();
89
+ if (vectorStores.length > 0) {
90
+ const results = await this.sdk.searchVectorStore(vectorStores[0].name, query);
91
+ return JSON.stringify(results);
92
+ }
93
+ return 'Nenhuma base de conhecimento disponível';
94
+ }
95
+ catch (error) {
96
+ return `Erro na busca: ${error.message}`;
97
+ }
98
+ }
99
+ }));
100
+ }
101
+ // Carregar tools customizadas por auto-discovery
102
+ if (this.config.toolsPath) {
103
+ await this.loadCustomToolsFromPath(this.config.toolsPath);
104
+ }
105
+ // Carregar tools customizadas diretas
106
+ if (this.config.customTools) {
107
+ for (const [name, tool] of Object.entries(this.config.customTools)) {
108
+ this.tools.push(this.createDynamicTool(tool));
109
+ }
110
+ }
111
+ }
112
+ async loadCustomToolsFromPath(toolsPath) {
113
+ try {
114
+ const fullPath = path.resolve(toolsPath);
115
+ if (!fs.existsSync(fullPath))
116
+ return;
117
+ const files = fs.readdirSync(fullPath)
118
+ .filter(file => file.endsWith('.ts') || file.endsWith('.js'))
119
+ .filter(file => !file.endsWith('.d.ts'));
120
+ for (const file of files) {
121
+ try {
122
+ const toolModule = await Promise.resolve(`${path.join(fullPath, file)}`).then(s => __importStar(require(s)));
123
+ // Procurar exports que seguem o padrão RunflowTool
124
+ for (const [exportName, exportValue] of Object.entries(toolModule)) {
125
+ if (this.isRunflowTool(exportValue)) {
126
+ this.tools.push(this.createDynamicTool(exportValue));
127
+ }
128
+ }
129
+ }
130
+ catch (error) {
131
+ console.warn(`Erro ao carregar tool ${file}:`, error.message);
132
+ }
133
+ }
134
+ }
135
+ catch (error) {
136
+ console.warn(`Erro ao carregar tools de ${toolsPath}:`, error.message);
137
+ }
138
+ }
139
+ isRunflowTool(obj) {
140
+ return obj &&
141
+ typeof obj.name === 'string' &&
142
+ typeof obj.description === 'string' &&
143
+ typeof obj.execute === 'function' &&
144
+ obj.parameters;
145
+ }
146
+ createDynamicTool(tool) {
147
+ return new tools_1.DynamicTool({
148
+ name: tool.name,
149
+ description: tool.description,
150
+ func: async (input) => {
151
+ try {
152
+ // Parse input (assumindo JSON string ou string simples)
153
+ let params;
154
+ try {
155
+ params = JSON.parse(input);
156
+ }
157
+ catch {
158
+ // Se não for JSON, usar como string simples para primeiro parâmetro
159
+ const firstParam = Object.keys(tool.parameters)[0];
160
+ params = { [firstParam]: input };
161
+ }
162
+ const context = {
163
+ sdk: this.sdk,
164
+ companyId: this.currentCompanyId || '',
165
+ userId: this.currentUserId,
166
+ sessionId: this.currentSessionId
167
+ };
168
+ const result = await tool.execute(params, context);
169
+ return JSON.stringify(result);
170
+ }
171
+ catch (error) {
172
+ return `Erro na execução da tool ${tool.name}: ${error.message}`;
173
+ }
174
+ }
175
+ });
176
+ }
177
+ async process(input) {
178
+ await this.initialize();
179
+ // Armazenar context atual
180
+ this.currentCompanyId = input.companyId;
181
+ this.currentUserId = input.userId;
182
+ this.currentSessionId = input.sessionId;
183
+ try {
184
+ // Se não tem tools, usar LLM diretamente
185
+ if (this.tools.length === 0) {
186
+ const messages = [
187
+ new messages_1.SystemMessage(this.systemPromptContent),
188
+ new messages_1.HumanMessage(input.message)
189
+ ];
190
+ const response = await this.llm.invoke(messages);
191
+ // Log da interação
192
+ await this.sdk.log('agent-response', {
193
+ input: input.message,
194
+ output: response.content,
195
+ llmProvider: this.config.llm.provider,
196
+ model: this.config.llm.model,
197
+ companyId: input.companyId
198
+ });
199
+ return {
200
+ message: response.content,
201
+ metadata: {
202
+ llmProvider: this.config.llm.provider,
203
+ model: this.config.llm.model,
204
+ toolsUsed: []
205
+ }
206
+ };
207
+ }
208
+ // Usar agent executor com tools
209
+ const prompt = prompts_1.ChatPromptTemplate.fromMessages([
210
+ ['system', this.systemPromptContent],
211
+ ['human', '{input}'],
212
+ ['placeholder', '{agent_scratchpad}']
213
+ ]);
214
+ const agent = await (0, agents_1.createToolCallingAgent)({
215
+ llm: this.llm,
216
+ tools: this.tools,
217
+ prompt
218
+ });
219
+ const agentExecutor = new agents_1.AgentExecutor({
220
+ agent,
221
+ tools: this.tools,
222
+ verbose: false
223
+ });
224
+ const result = await agentExecutor.invoke({
225
+ input: input.message
226
+ });
227
+ // Log da interação
228
+ await this.sdk.log('agent-response', {
229
+ input: input.message,
230
+ output: result.output,
231
+ llmProvider: this.config.llm.provider,
232
+ model: this.config.llm.model,
233
+ toolsUsed: this.tools.map(t => t.name),
234
+ companyId: input.companyId
235
+ });
236
+ return {
237
+ message: result.output,
238
+ metadata: {
239
+ llmProvider: this.config.llm.provider,
240
+ model: this.config.llm.model,
241
+ toolsUsed: this.tools.map(t => t.name),
242
+ steps: result.intermediateSteps?.length || 0
243
+ }
244
+ };
245
+ }
246
+ catch (error) {
247
+ // Log do erro
248
+ await this.sdk.log('agent-error', {
249
+ input: input.message,
250
+ error: error.message,
251
+ companyId: input.companyId
252
+ });
253
+ throw new Error(`Erro no processamento do agente: ${error.message}`);
254
+ }
255
+ }
256
+ createHandler() {
257
+ return async (input) => {
258
+ return this.process(input);
259
+ };
260
+ }
261
+ }
262
+ exports.RunflowAgent = RunflowAgent;
263
+ //# sourceMappingURL=runflow-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runflow-agent.js","sourceRoot":"","sources":["../../src/agents/runflow-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import express from 'express';
2
+ import { RunflowAgentConfig } from './runflow-agent';
3
+ import { AgentInput } from '../types';
4
+ export interface AgentServerConfig extends RunflowAgentConfig {
5
+ port?: number;
6
+ cors?: boolean;
7
+ rateLimiting?: boolean;
8
+ middleware?: express.RequestHandler[];
9
+ }
10
+ export interface AgentServerOptions {
11
+ port?: number;
12
+ cors?: boolean;
13
+ rateLimiting?: boolean;
14
+ healthEndpoint?: boolean;
15
+ middleware?: express.RequestHandler[];
16
+ hooks?: {
17
+ beforeChat?: (req: express.Request, res: express.Response) => Promise<void> | void;
18
+ transformInput?: (raw: any) => AgentInput;
19
+ afterChat?: (input: AgentInput, output: any, ctx: {
20
+ req: express.Request;
21
+ res: express.Response;
22
+ startedAt: number;
23
+ durationMs: number;
24
+ }) => Promise<void> | void;
25
+ onChatError?: (input: AgentInput | null, error: any, ctx: {
26
+ req: express.Request;
27
+ res: express.Response;
28
+ startedAt: number;
29
+ durationMs: number;
30
+ }) => Promise<void> | void;
31
+ };
32
+ tracing?: boolean | 'verbose';
33
+ }
34
+ /**
35
+ * Cria um servidor Express simples para um agente Runflow
36
+ */
37
+ export declare function createAgentServer(config: RunflowAgentConfig, options?: AgentServerOptions): {
38
+ app: import("express-serve-static-core").Express;
39
+ start(port?: number): void;
40
+ };
41
+ /**
42
+ * Função ultra-simples que auto-descobre configuração e inicia servidor
43
+ */
44
+ export declare function startAgent(configPath?: string): void;
45
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/agents/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAgB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;IAEtC,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACnF,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,UAAU,CAAC;QAC1C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;YAAE,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;YAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAClK,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;YAAE,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;YAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC3K,CAAC;IAGF,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,kBAAkB,EAC1B,OAAO,GAAE,kBAAuB;;iBA4MjB,MAAM;EAWtB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,QAsE7C"}
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createAgentServer = createAgentServer;
40
+ exports.startAgent = startAgent;
41
+ const express_1 = __importDefault(require("express"));
42
+ const runflow_agent_1 = require("./runflow-agent");
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ /**
46
+ * Cria um servidor Express simples para um agente Runflow
47
+ */
48
+ function createAgentServer(config, options = {}) {
49
+ const agent = new runflow_agent_1.RunflowAgent(config);
50
+ const app = (0, express_1.default)();
51
+ // Middleware básico
52
+ app.use(express_1.default.json({ limit: '10mb' }));
53
+ // CORS se habilitado
54
+ if (options.cors !== false) {
55
+ app.use((req, res, next) => {
56
+ res.header('Access-Control-Allow-Origin', '*');
57
+ res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
58
+ res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
59
+ if (req.method === 'OPTIONS') {
60
+ res.sendStatus(200);
61
+ }
62
+ else {
63
+ next();
64
+ }
65
+ });
66
+ }
67
+ // Rate limiting básico se habilitado
68
+ if (options.rateLimiting) {
69
+ const requests = new Map();
70
+ app.use((req, res, next) => {
71
+ const ip = req.ip || req.connection.remoteAddress || 'unknown';
72
+ const now = Date.now();
73
+ const windowMs = 60000; // 1 minuto
74
+ const maxRequests = 30; // 30 requests por minuto
75
+ if (!requests.has(ip)) {
76
+ requests.set(ip, []);
77
+ }
78
+ const userRequests = requests.get(ip);
79
+ // Limpar requests antigas
80
+ const validRequests = userRequests.filter((time) => now - time < windowMs);
81
+ requests.set(ip, validRequests);
82
+ if (validRequests.length >= maxRequests) {
83
+ return res.status(429).json({
84
+ success: false,
85
+ error: 'Rate limit exceeded. Try again later.'
86
+ });
87
+ }
88
+ validRequests.push(now);
89
+ next();
90
+ });
91
+ }
92
+ // Middleware customizado
93
+ if (options.middleware) {
94
+ options.middleware.forEach(middleware => app.use(middleware));
95
+ }
96
+ // Endpoint principal do chat
97
+ app.post('/chat', async (req, res) => {
98
+ const startedAt = Date.now();
99
+ let input = null;
100
+ try {
101
+ // Hook opcional antes de processar
102
+ if (options.hooks?.beforeChat) {
103
+ await options.hooks.beforeChat(req, res);
104
+ if (res.headersSent)
105
+ return; // caso o hook finalize a resposta
106
+ }
107
+ const body = req.body || {};
108
+ const context = body.context || {};
109
+ // Normalização: aceitar top-level ou context
110
+ const normalized = {
111
+ message: body.message,
112
+ companyId: body.companyId ?? context.companyId,
113
+ userId: body.userId ?? context.userId,
114
+ sessionId: body.sessionId ?? context.sessionId,
115
+ channel: body.channel,
116
+ metadata: body.metadata,
117
+ tab: body.tab,
118
+ preChatInfo: body.preChatInfo,
119
+ };
120
+ // Validações mínimas padrão
121
+ if (!normalized.message || typeof normalized.message !== 'string') {
122
+ return res.status(400).json({ success: false, error: 'Campo "message" é obrigatório' });
123
+ }
124
+ if (!normalized.companyId) {
125
+ return res.status(400).json({ success: false, error: 'Campo "companyId" é obrigatório' });
126
+ }
127
+ // Transformação customizada opcional
128
+ input = options.hooks?.transformInput ? options.hooks.transformInput(req.body) : normalized;
129
+ const response = await agent.process(input);
130
+ const durationMs = Date.now() - startedAt;
131
+ res.json({
132
+ success: true,
133
+ data: response
134
+ });
135
+ // Pós-processamento customizado
136
+ if (options.hooks?.afterChat) {
137
+ await options.hooks.afterChat(input, response, { req, res, startedAt, durationMs });
138
+ }
139
+ // Tracing best-effort (DTO: { input: {type,content}[]; output: string; status: string })
140
+ if (options.tracing) {
141
+ try {
142
+ const sdkModule = await Promise.resolve().then(() => __importStar(require('../runflow-sdk')));
143
+ const sdk = new sdkModule.RunflowSDK();
144
+ const outputText = typeof response === 'string' ? response : (response?.message ?? '');
145
+ const tracePayload = {
146
+ input: [
147
+ { type: 'human', content: input.message }
148
+ ],
149
+ output: outputText,
150
+ status: 'success'
151
+ };
152
+ if (options.tracing === 'verbose') {
153
+ // eslint-disable-next-line no-console
154
+ console.log('[trace] sending', tracePayload);
155
+ }
156
+ const traceResp = await sdk.trace(tracePayload).catch(() => null);
157
+ if (options.tracing === 'verbose') {
158
+ // eslint-disable-next-line no-console
159
+ console.log('[trace] done', traceResp ? { traceId: traceResp.traceId } : { skipped: true });
160
+ }
161
+ }
162
+ catch { }
163
+ }
164
+ }
165
+ catch (error) {
166
+ console.error('Erro no processamento do agente:', error);
167
+ const durationMs = Date.now() - startedAt;
168
+ // Hook de erro customizado
169
+ if (options.hooks?.onChatError) {
170
+ try {
171
+ await options.hooks.onChatError(input, error, { req, res, startedAt, durationMs });
172
+ }
173
+ catch { }
174
+ }
175
+ // Tracing best-effort de erro (DTO)
176
+ if (options.tracing) {
177
+ try {
178
+ const sdkModule = await Promise.resolve().then(() => __importStar(require('../runflow-sdk')));
179
+ const sdk = new sdkModule.RunflowSDK();
180
+ const tracePayload = {
181
+ input: [
182
+ { type: 'user', message: input?.message || '' }
183
+ ],
184
+ output: error?.message || String(error),
185
+ status: 'error'
186
+ };
187
+ if (options.tracing === 'verbose') {
188
+ // eslint-disable-next-line no-console
189
+ console.log('[trace] sending', tracePayload);
190
+ }
191
+ const traceResp = await sdk.trace(tracePayload).catch(() => null);
192
+ if (options.tracing === 'verbose') {
193
+ // eslint-disable-next-line no-console
194
+ console.log('[trace] done', traceResp ? { traceId: traceResp.traceId } : { skipped: true });
195
+ }
196
+ }
197
+ catch { }
198
+ }
199
+ res.status(500).json({
200
+ success: false,
201
+ error: 'Erro interno do servidor',
202
+ details: process.env.NODE_ENV === 'development' ? error.message : undefined
203
+ });
204
+ }
205
+ });
206
+ // Health check
207
+ if (options.healthEndpoint !== false) {
208
+ app.get('/health', (req, res) => {
209
+ res.json({
210
+ status: 'ok',
211
+ timestamp: new Date().toISOString(),
212
+ agent: {
213
+ systemPrompt: config.systemPrompt,
214
+ llmProvider: config.llm.provider,
215
+ model: config.llm.model
216
+ }
217
+ });
218
+ });
219
+ }
220
+ // Endpoint de informações do agente
221
+ app.get('/agent-info', (req, res) => {
222
+ res.json({
223
+ systemPrompt: config.systemPrompt,
224
+ llm: {
225
+ provider: config.llm.provider,
226
+ model: config.llm.model
227
+ },
228
+ toolsEnabled: !!config.toolsPath || !!config.customTools,
229
+ sessionEnabled: config.session?.enabled || false
230
+ });
231
+ });
232
+ return {
233
+ app,
234
+ start(port) {
235
+ const serverPort = port || options.port || process.env.PORT || 3000;
236
+ app.listen(serverPort, () => {
237
+ console.log(`🤖 Runflow Agent Server running on port ${serverPort}`);
238
+ console.log(`📡 Chat endpoint: http://localhost:${serverPort}/chat`);
239
+ console.log(`❤️ Health check: http://localhost:${serverPort}/health`);
240
+ console.log(`ℹ️ Agent info: http://localhost:${serverPort}/agent-info`);
241
+ });
242
+ }
243
+ };
244
+ }
245
+ /**
246
+ * Função ultra-simples que auto-descobre configuração e inicia servidor
247
+ */
248
+ function startAgent(configPath) {
249
+ try {
250
+ // 1. Tentar carregar config de arquivo
251
+ let config;
252
+ if (configPath) {
253
+ config = require(path.resolve(configPath)).default || require(path.resolve(configPath));
254
+ }
255
+ else {
256
+ // Auto-discovery de config
257
+ const possibleConfigs = [
258
+ 'agent.config.ts',
259
+ 'agent.config.js',
260
+ 'runflow.config.ts',
261
+ 'runflow.config.js'
262
+ ];
263
+ let configFound = false;
264
+ for (const configFile of possibleConfigs) {
265
+ if (fs.existsSync(configFile)) {
266
+ try {
267
+ config = require(path.resolve(configFile)).default || require(path.resolve(configFile));
268
+ console.log(`📁 Config carregado: ${configFile}`);
269
+ configFound = true;
270
+ break;
271
+ }
272
+ catch (error) {
273
+ console.warn(`⚠️ Erro ao carregar ${configFile}:`, error.message);
274
+ }
275
+ }
276
+ }
277
+ if (!configFound) {
278
+ throw new Error(`
279
+ Nenhum arquivo de configuração encontrado.
280
+ Crie um dos seguintes arquivos:
281
+ - agent.config.ts
282
+ - agent.config.js
283
+ - runflow.config.ts
284
+ - runflow.config.js
285
+
286
+ Exemplo:
287
+ export default {
288
+ llm: {
289
+ provider: 'anthropic',
290
+ model: 'claude-3-sonnet',
291
+ credential: 'claude-api'
292
+ },
293
+ systemPrompt: 'customer-support',
294
+ toolsPath: './tools'
295
+ };
296
+ `);
297
+ }
298
+ }
299
+ if (!config) {
300
+ throw new Error('Configuração não pôde ser carregada');
301
+ }
302
+ // 2. Criar e iniciar servidor
303
+ const server = createAgentServer(config, {
304
+ cors: true,
305
+ rateLimiting: true,
306
+ healthEndpoint: true
307
+ });
308
+ server.start();
309
+ }
310
+ catch (error) {
311
+ console.error('❌ Erro ao iniciar agente:', error.message);
312
+ process.exit(1);
313
+ }
314
+ }
315
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/agents/server.ts"],"names":[],"mappings":"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"}