@runflow-ai/cli 0.2.7 โ 0.2.8
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.
|
@@ -12,7 +12,7 @@ export declare class TestCommand extends CommandRunner {
|
|
|
12
12
|
parsePort(val: string): number;
|
|
13
13
|
parseHost(val: string): string;
|
|
14
14
|
parseOpen(): boolean;
|
|
15
|
-
parseVerbose(): boolean;
|
|
15
|
+
parseVerbose(val: string): boolean;
|
|
16
16
|
private loadRunflowConfig;
|
|
17
17
|
private ensureDependencies;
|
|
18
18
|
private startTestServer;
|
|
@@ -61,45 +61,59 @@ let TestCommand = class TestCommand extends nest_commander_1.CommandRunner {
|
|
|
61
61
|
this.frontend = null;
|
|
62
62
|
}
|
|
63
63
|
async run(passedParam, options) {
|
|
64
|
-
const port = options?.port || 8547;
|
|
65
|
-
const host = options?.host || 'localhost';
|
|
66
|
-
const shouldOpen = options?.open !== false;
|
|
67
|
-
const verbose = options?.verbose || false;
|
|
68
|
-
console.log(chalk_1.default.cyan.bold('๐งช Runflow Test Server'));
|
|
69
|
-
console.log(chalk_1.default.gray('Starting local development environment...\n'));
|
|
70
|
-
const validation = (0, validator_1.validateForTest)();
|
|
71
|
-
if (!validation.isValid) {
|
|
72
|
-
console.error(chalk_1.default.red('\nโ Project validation failed!'));
|
|
73
|
-
validation.errors.forEach(error => {
|
|
74
|
-
console.error(chalk_1.default.red(` โข ${error}`));
|
|
75
|
-
});
|
|
76
|
-
console.error(chalk_1.default.gray('\n๐ Documentation: https://docs.runflow.ai\n'));
|
|
77
|
-
process.exit(1);
|
|
78
|
-
}
|
|
79
|
-
const mainFile = validation.mainFile;
|
|
80
|
-
const spinner = (0, ora_1.default)('Initializing...').start();
|
|
81
64
|
try {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
65
|
+
const port = options?.port || 8547;
|
|
66
|
+
const host = options?.host || 'localhost';
|
|
67
|
+
const shouldOpen = options?.open !== false;
|
|
68
|
+
const verbose = true;
|
|
69
|
+
console.log('๐ [DEBUG] Options received:', options);
|
|
70
|
+
console.log('๐ [DEBUG] Verbose flag:', verbose);
|
|
71
|
+
console.log(chalk_1.default.cyan.bold('๐งช Runflow Test Server'));
|
|
72
|
+
console.log(chalk_1.default.gray('Starting local development environment...\n'));
|
|
73
|
+
const validation = (0, validator_1.validateForTest)();
|
|
74
|
+
if (!validation.isValid) {
|
|
75
|
+
console.error(chalk_1.default.red('\nโ Project validation failed!'));
|
|
76
|
+
validation.errors.forEach((error) => {
|
|
77
|
+
console.error(chalk_1.default.red(` โข ${error}`));
|
|
78
|
+
});
|
|
79
|
+
console.error(chalk_1.default.gray('\n๐ Documentation: https://docs.runflow.ai\n'));
|
|
80
|
+
process.exit(1);
|
|
88
81
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
82
|
+
const mainFile = validation.mainFile;
|
|
83
|
+
const spinner = verbose ? null : (0, ora_1.default)('Initializing...').start();
|
|
84
|
+
try {
|
|
85
|
+
await this.ensureDependencies(spinner);
|
|
86
|
+
await this.startTestServer(port, mainFile, verbose, spinner);
|
|
87
|
+
await this.startFrontend(port + 1000, port, verbose, spinner);
|
|
88
|
+
if (spinner) {
|
|
89
|
+
spinner.succeed('Ready!');
|
|
90
|
+
}
|
|
91
|
+
if (!verbose) {
|
|
92
|
+
console.clear();
|
|
93
|
+
}
|
|
94
|
+
console.log(chalk_1.default.green.bold('โ
Test Interface Running!'));
|
|
95
|
+
console.log('');
|
|
96
|
+
console.log(chalk_1.default.cyan(`๐ Open: http://${host}:${port + 1000}`));
|
|
97
|
+
console.log(chalk_1.default.gray(`๐ Testing: ${mainFile}`));
|
|
98
|
+
console.log('');
|
|
99
|
+
console.log(chalk_1.default.gray('Press Ctrl+C to stop'));
|
|
100
|
+
if (shouldOpen) {
|
|
101
|
+
this.openBrowser(`http://${host}:${port + 1000}`);
|
|
102
|
+
}
|
|
103
|
+
this.setupCleanupHandlers();
|
|
104
|
+
await this.keepAlive();
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (spinner) {
|
|
108
|
+
spinner.fail('Failed to start test environment');
|
|
109
|
+
}
|
|
110
|
+
console.error(chalk_1.default.red(`โ Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
111
|
+
await this.cleanup();
|
|
112
|
+
process.exit(1);
|
|
97
113
|
}
|
|
98
|
-
this.setupCleanupHandlers();
|
|
99
|
-
await this.keepAlive();
|
|
100
114
|
}
|
|
101
115
|
catch (error) {
|
|
102
|
-
|
|
116
|
+
console.log('deu erro aqui');
|
|
103
117
|
console.error(chalk_1.default.red(`โ Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
104
118
|
await this.cleanup();
|
|
105
119
|
process.exit(1);
|
|
@@ -118,7 +132,8 @@ let TestCommand = class TestCommand extends nest_commander_1.CommandRunner {
|
|
|
118
132
|
parseOpen() {
|
|
119
133
|
return false;
|
|
120
134
|
}
|
|
121
|
-
parseVerbose() {
|
|
135
|
+
parseVerbose(val) {
|
|
136
|
+
console.log('๐ [PARSER] parseVerbose called with:', val);
|
|
122
137
|
return true;
|
|
123
138
|
}
|
|
124
139
|
loadRunflowConfig() {
|
|
@@ -134,19 +149,34 @@ let TestCommand = class TestCommand extends nest_commander_1.CommandRunner {
|
|
|
134
149
|
return null;
|
|
135
150
|
}
|
|
136
151
|
async ensureDependencies(spinner) {
|
|
137
|
-
spinner
|
|
152
|
+
if (spinner) {
|
|
153
|
+
spinner.text = 'Checking dependencies...';
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log('๐ Checking dependencies...');
|
|
157
|
+
}
|
|
138
158
|
const packageJsonPath = path.join(process.cwd(), 'package.json');
|
|
139
159
|
if (!fs.existsSync(packageJsonPath)) {
|
|
140
|
-
throw new Error(
|
|
160
|
+
throw new Error("No package.json found. Make sure you're in a valid Node.js project.");
|
|
141
161
|
}
|
|
142
162
|
const nodeModulesPath = path.join(process.cwd(), 'node_modules');
|
|
143
163
|
if (!fs.existsSync(nodeModulesPath)) {
|
|
144
|
-
spinner
|
|
164
|
+
if (spinner) {
|
|
165
|
+
spinner.text = 'Installing dependencies...';
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.log('๐ฆ Installing dependencies...');
|
|
169
|
+
}
|
|
145
170
|
await this.runCommand('npm', ['install'], { stdio: 'pipe' });
|
|
146
171
|
}
|
|
147
172
|
}
|
|
148
173
|
async startTestServer(port, mainFile, verbose, spinner) {
|
|
149
|
-
spinner
|
|
174
|
+
if (spinner) {
|
|
175
|
+
spinner.text = 'Starting test server...';
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
console.log('๐ Starting test server...');
|
|
179
|
+
}
|
|
150
180
|
const serverCliDir = path.join(__dirname, '..', '..', '..');
|
|
151
181
|
const serverTemplatePath = path.join(serverCliDir, 'static', 'test-server-template.js');
|
|
152
182
|
if (!fs.existsSync(serverTemplatePath)) {
|
|
@@ -154,29 +184,49 @@ let TestCommand = class TestCommand extends nest_commander_1.CommandRunner {
|
|
|
154
184
|
}
|
|
155
185
|
const scenariosPath = path.join(serverCliDir, 'scenarios');
|
|
156
186
|
this.server = (0, child_process_1.spawn)('node', [serverTemplatePath], {
|
|
157
|
-
stdio:
|
|
187
|
+
stdio: 'pipe',
|
|
158
188
|
env: {
|
|
159
189
|
...process.env,
|
|
160
190
|
NODE_ENV: 'development',
|
|
161
191
|
RUNFLOW_PORT: port.toString(),
|
|
162
192
|
RUNFLOW_MAIN_FILE: mainFile,
|
|
163
|
-
RUNFLOW_SCENARIOS_PATH: scenariosPath
|
|
193
|
+
RUNFLOW_SCENARIOS_PATH: scenariosPath,
|
|
194
|
+
RUNFLOW_VERBOSE: verbose ? 'true' : 'false',
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
if (verbose) {
|
|
198
|
+
console.log(chalk_1.default.gray('[DEBUG] Verbose mode enabled - attaching log listeners'));
|
|
199
|
+
}
|
|
200
|
+
this.server.stdout?.on('data', (data) => {
|
|
201
|
+
const output = data.toString();
|
|
202
|
+
if (verbose) {
|
|
203
|
+
process.stdout.write(`[SERVER] ${output}`);
|
|
164
204
|
}
|
|
165
205
|
});
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
206
|
+
this.server.stderr?.on('data', (data) => {
|
|
207
|
+
const error = data.toString();
|
|
208
|
+
if (verbose) {
|
|
209
|
+
process.stderr.write(`[SERVER-ERR] ${error}`);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
const trimmed = error.trim();
|
|
213
|
+
if (trimmed.includes('Error:') || trimmed.includes('EADDRINUSE')) {
|
|
214
|
+
console.error(chalk_1.default.red(`Server Error: ${trimmed}`));
|
|
173
215
|
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
this.server.on('error', (error) => {
|
|
219
|
+
console.error(chalk_1.default.red(`Failed to start server: ${error.message}`));
|
|
220
|
+
});
|
|
176
221
|
await this.waitForServer(port, 10000);
|
|
177
222
|
}
|
|
178
223
|
async startFrontend(frontendPort, backendPort, verbose, spinner) {
|
|
179
|
-
spinner
|
|
224
|
+
if (spinner) {
|
|
225
|
+
spinner.text = 'Starting frontend...';
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
console.log('๐จ Starting frontend...');
|
|
229
|
+
}
|
|
180
230
|
const cliRootDir = path.join(__dirname, '..', '..', '..');
|
|
181
231
|
const staticDir = path.join(cliRootDir, 'static');
|
|
182
232
|
if (!fs.existsSync(staticDir)) {
|
|
@@ -200,14 +250,27 @@ let TestCommand = class TestCommand extends nest_commander_1.CommandRunner {
|
|
|
200
250
|
throw new Error('Frontend server template not found. Please ensure the CLI is properly installed.');
|
|
201
251
|
}
|
|
202
252
|
this.frontend = (0, child_process_1.spawn)('node', [frontendTemplatePath], {
|
|
203
|
-
stdio:
|
|
253
|
+
stdio: 'pipe',
|
|
204
254
|
env: {
|
|
205
255
|
...process.env,
|
|
206
256
|
NODE_ENV: 'development',
|
|
207
257
|
RUNFLOW_FRONTEND_PORT: frontendPort.toString(),
|
|
208
|
-
RUNFLOW_STATIC_DIR: frontendDir
|
|
258
|
+
RUNFLOW_STATIC_DIR: frontendDir,
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
this.frontend.stdout?.on('data', (data) => {
|
|
262
|
+
if (verbose) {
|
|
263
|
+
process.stdout.write(data.toString());
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
this.frontend.stderr?.on('data', (data) => {
|
|
267
|
+
if (verbose) {
|
|
268
|
+
process.stderr.write(data.toString());
|
|
209
269
|
}
|
|
210
270
|
});
|
|
271
|
+
this.frontend.on('error', (error) => {
|
|
272
|
+
console.error(chalk_1.default.red(`Failed to start frontend: ${error.message}`));
|
|
273
|
+
});
|
|
211
274
|
await this.waitForServer(frontendPort, 5000);
|
|
212
275
|
}
|
|
213
276
|
async waitForServer(port, timeout) {
|
|
@@ -221,7 +284,7 @@ let TestCommand = class TestCommand extends nest_commander_1.CommandRunner {
|
|
|
221
284
|
}
|
|
222
285
|
catch (error) {
|
|
223
286
|
}
|
|
224
|
-
await new Promise(resolve => setTimeout(resolve, 500));
|
|
287
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
225
288
|
}
|
|
226
289
|
throw new Error(`Server on port ${port} failed to start`);
|
|
227
290
|
}
|
|
@@ -240,9 +303,12 @@ let TestCommand = class TestCommand extends nest_commander_1.CommandRunner {
|
|
|
240
303
|
});
|
|
241
304
|
}
|
|
242
305
|
openBrowser(url) {
|
|
243
|
-
const start = process.platform === 'darwin' ? 'open' :
|
|
244
|
-
|
|
245
|
-
(
|
|
306
|
+
const start = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
307
|
+
const spawnOptions = { detached: true, stdio: 'ignore' };
|
|
308
|
+
if (process.platform === 'win32') {
|
|
309
|
+
spawnOptions.shell = true;
|
|
310
|
+
}
|
|
311
|
+
(0, child_process_1.spawn)(start, [url], spawnOptions);
|
|
246
312
|
}
|
|
247
313
|
setupCleanupHandlers() {
|
|
248
314
|
const cleanup = async () => {
|
|
@@ -301,7 +367,7 @@ __decorate([
|
|
|
301
367
|
__decorate([
|
|
302
368
|
(0, nest_commander_1.Option)({
|
|
303
369
|
flags: '--no-open',
|
|
304
|
-
description:
|
|
370
|
+
description: "Don't open browser automatically",
|
|
305
371
|
}),
|
|
306
372
|
__metadata("design:type", Function),
|
|
307
373
|
__metadata("design:paramtypes", []),
|
|
@@ -313,14 +379,14 @@ __decorate([
|
|
|
313
379
|
description: 'Show detailed logs',
|
|
314
380
|
}),
|
|
315
381
|
__metadata("design:type", Function),
|
|
316
|
-
__metadata("design:paramtypes", []),
|
|
382
|
+
__metadata("design:paramtypes", [String]),
|
|
317
383
|
__metadata("design:returntype", Boolean)
|
|
318
384
|
], TestCommand.prototype, "parseVerbose", null);
|
|
319
385
|
exports.TestCommand = TestCommand = __decorate([
|
|
320
386
|
(0, common_1.Injectable)(),
|
|
321
387
|
(0, nest_commander_1.Command)({
|
|
322
388
|
name: 'test',
|
|
323
|
-
description: '๐งช Start local test server for Runflow agents with live reload'
|
|
389
|
+
description: '๐งช Start local test server for Runflow agents with live reload',
|
|
324
390
|
})
|
|
325
391
|
], TestCommand);
|
|
326
392
|
//# sourceMappingURL=test.command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.command.js","sourceRoot":"","sources":["../../../src/commands/test/test.command.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"test.command.js","sourceRoot":"","sources":["../../../src/commands/test/test.command.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runflow-ai/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "Official CLI for RunFlow AI platform - manage agents, deploy code, and interact with AI workflows from your terminal",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -11,35 +11,43 @@ app.use(express.json());
|
|
|
11
11
|
// Configuraรงรฃo serรก injetada pela CLI
|
|
12
12
|
const CONFIG = {
|
|
13
13
|
port: process.env.RUNFLOW_PORT || 8547,
|
|
14
|
-
mainFile: process.env.RUNFLOW_MAIN_FILE || 'main.ts'
|
|
14
|
+
mainFile: process.env.RUNFLOW_MAIN_FILE || 'main.ts',
|
|
15
|
+
verbose: process.env.RUNFLOW_VERBOSE === 'true',
|
|
15
16
|
};
|
|
16
17
|
|
|
18
|
+
// Log de inicializaรงรฃo
|
|
19
|
+
console.log('๐ [INIT] Test server starting...');
|
|
20
|
+
console.log('๐ง [CONFIG]', CONFIG);
|
|
21
|
+
if (CONFIG.verbose) {
|
|
22
|
+
console.log('๐ [VERBOSE] Verbose mode is ENABLED');
|
|
23
|
+
}
|
|
24
|
+
|
|
17
25
|
// ============================================================================
|
|
18
26
|
// Load rf.json (agent configuration)
|
|
19
27
|
// ============================================================================
|
|
20
28
|
|
|
21
29
|
function loadRfConfig() {
|
|
22
30
|
const rfConfigPath = path.join(process.cwd(), '.runflow', 'rf.json');
|
|
23
|
-
|
|
31
|
+
|
|
24
32
|
if (fs.existsSync(rfConfigPath)) {
|
|
25
33
|
try {
|
|
26
34
|
const config = JSON.parse(fs.readFileSync(rfConfigPath, 'utf8'));
|
|
27
35
|
console.log('โ
Loaded rf.json:', {
|
|
28
36
|
agentId: config.agentId,
|
|
29
37
|
tenantId: config.tenantId,
|
|
30
|
-
apiUrl: config.apiUrl
|
|
38
|
+
apiUrl: config.apiUrl,
|
|
31
39
|
});
|
|
32
40
|
return config;
|
|
33
41
|
} catch (error) {
|
|
34
42
|
console.warn('โ ๏ธ Could not parse rf.json:', error.message);
|
|
35
43
|
}
|
|
36
44
|
}
|
|
37
|
-
|
|
45
|
+
|
|
38
46
|
console.warn('โ ๏ธ No rf.json found - using defaults');
|
|
39
47
|
return {
|
|
40
48
|
agentId: 'local-agent',
|
|
41
49
|
tenantId: 'test-local',
|
|
42
|
-
apiUrl: 'http://localhost:3001'
|
|
50
|
+
apiUrl: 'http://localhost:3001',
|
|
43
51
|
};
|
|
44
52
|
}
|
|
45
53
|
|
|
@@ -59,34 +67,34 @@ function generateRandomId() {
|
|
|
59
67
|
|
|
60
68
|
function generateThreadId(input) {
|
|
61
69
|
const companyId = input.companyId || 'test';
|
|
62
|
-
|
|
70
|
+
|
|
63
71
|
// 1. Explicit
|
|
64
72
|
if (input.entityType && input.entityValue) {
|
|
65
73
|
const cleanValue = String(input.entityValue).replace(/[^a-zA-Z0-9]/g, '_');
|
|
66
74
|
return `${input.entityType}_${companyId}_${cleanValue}`;
|
|
67
75
|
}
|
|
68
|
-
|
|
76
|
+
|
|
69
77
|
// 2. SessionId
|
|
70
78
|
if (input.sessionId) {
|
|
71
79
|
return `session_${companyId}_${input.sessionId}`;
|
|
72
80
|
}
|
|
73
|
-
|
|
81
|
+
|
|
74
82
|
// 3. Phone (WhatsApp/Twilio)
|
|
75
83
|
if (input.metadata?.phone || input.metadata?.From) {
|
|
76
84
|
const phone = (input.metadata.phone || input.metadata.From).replace(/\D/g, '');
|
|
77
85
|
return `phone_${companyId}_${phone}`;
|
|
78
86
|
}
|
|
79
|
-
|
|
87
|
+
|
|
80
88
|
// 4. Email
|
|
81
89
|
if (input.metadata?.email) {
|
|
82
90
|
return `email_${companyId}_${input.metadata.email}`;
|
|
83
91
|
}
|
|
84
|
-
|
|
92
|
+
|
|
85
93
|
// 5. ContactId (HubSpot)
|
|
86
94
|
if (input.metadata?.contactId) {
|
|
87
95
|
return `hubspot_contact_${companyId}_${input.metadata.contactId}`;
|
|
88
96
|
}
|
|
89
|
-
|
|
97
|
+
|
|
90
98
|
// 6. Fallback
|
|
91
99
|
return `thread_${companyId}_${Date.now()}_${generateRandomId()}`;
|
|
92
100
|
}
|
|
@@ -130,11 +138,11 @@ app.post('/api/chat', async (req, res) => {
|
|
|
130
138
|
try {
|
|
131
139
|
console.log('\n๐ฅ [Test] Received:', req.body.message);
|
|
132
140
|
console.log('๐ [Reload] Loading fresh code from', CONFIG.mainFile + '...');
|
|
133
|
-
|
|
141
|
+
|
|
134
142
|
// ============================================================================
|
|
135
143
|
// Generate Execution Context (simula Execution Engine)
|
|
136
144
|
// ============================================================================
|
|
137
|
-
|
|
145
|
+
|
|
138
146
|
const input = {
|
|
139
147
|
message: req.body.message,
|
|
140
148
|
sessionId: req.body.sessionId || `test_session_${Date.now()}`,
|
|
@@ -142,15 +150,15 @@ app.post('/api/chat', async (req, res) => {
|
|
|
142
150
|
userId: req.body.userId,
|
|
143
151
|
channel: req.body.channel || 'test',
|
|
144
152
|
metadata: req.body.metadata || {},
|
|
145
|
-
timestamp: new Date().toISOString()
|
|
153
|
+
timestamp: new Date().toISOString(),
|
|
146
154
|
};
|
|
147
|
-
|
|
155
|
+
|
|
148
156
|
const executionId = generateExecutionId();
|
|
149
157
|
const threadId = generateThreadId(input);
|
|
150
158
|
const entityType = inferEntityType(input);
|
|
151
159
|
const entityValue = inferEntityValue(input);
|
|
152
160
|
const userId = inferUserId(input);
|
|
153
|
-
|
|
161
|
+
|
|
154
162
|
console.log('๐ [Context Generated]:', {
|
|
155
163
|
executionId,
|
|
156
164
|
threadId,
|
|
@@ -158,12 +166,25 @@ app.post('/api/chat', async (req, res) => {
|
|
|
158
166
|
entityValue: entityValue || '(none)',
|
|
159
167
|
userId: userId || '(none)',
|
|
160
168
|
});
|
|
161
|
-
|
|
169
|
+
|
|
162
170
|
// Executar TypeScript diretamente com tsx
|
|
163
171
|
const inputData = JSON.stringify(input);
|
|
164
172
|
|
|
165
|
-
|
|
166
|
-
|
|
173
|
+
if (CONFIG.verbose) {
|
|
174
|
+
console.log('\n๐ [Verbose] Executing:', CONFIG.mainFile);
|
|
175
|
+
console.log('๐ [Verbose] Input:', input);
|
|
176
|
+
console.log('๐ [Verbose] Working Directory:', process.cwd());
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Criar arquivo temporรกrio para execuรงรฃo (mais confiรกvel que --eval)
|
|
180
|
+
const tempDir = path.join(process.cwd(), '.runflow');
|
|
181
|
+
if (!fs.existsSync(tempDir)) {
|
|
182
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const tempFile = path.join(tempDir, `exec_${Date.now()}.ts`);
|
|
186
|
+
const tsxCode = `
|
|
187
|
+
import { main } from '../${CONFIG.mainFile}';
|
|
167
188
|
|
|
168
189
|
const input = ${inputData};
|
|
169
190
|
|
|
@@ -174,11 +195,20 @@ main(input).then(result => {
|
|
|
174
195
|
process.exit(0);
|
|
175
196
|
}).catch(error => {
|
|
176
197
|
console.log('๐ด RUNFLOW_ERROR_START');
|
|
177
|
-
console.log(JSON.stringify({ error: error.message }));
|
|
198
|
+
console.log(JSON.stringify({ error: error.message, stack: error.stack }));
|
|
178
199
|
console.log('๐ด RUNFLOW_ERROR_END');
|
|
179
200
|
process.exit(1);
|
|
180
201
|
});
|
|
181
|
-
|
|
202
|
+
`;
|
|
203
|
+
|
|
204
|
+
fs.writeFileSync(tempFile, tsxCode);
|
|
205
|
+
|
|
206
|
+
if (CONFIG.verbose) {
|
|
207
|
+
console.log('\n๐ [TSX Code written to]:', tempFile);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const tsxProcess = spawn('npx', ['tsx', tempFile], {
|
|
211
|
+
cwd: process.cwd(), // Executar no diretรณrio do projeto
|
|
182
212
|
env: {
|
|
183
213
|
...process.env,
|
|
184
214
|
// โ
Passar context via env (igual Execution Engine)
|
|
@@ -191,9 +221,29 @@ main(input).then(result => {
|
|
|
191
221
|
RUNFLOW_LOCAL_TRACES: 'true',
|
|
192
222
|
RUNFLOW_ENV: 'development',
|
|
193
223
|
},
|
|
194
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
224
|
+
stdio: ['pipe', 'pipe', 'pipe'], // Sempre pipe para capturar resultado
|
|
225
|
+
// No Windows, npx precisa de shell: true
|
|
226
|
+
shell: process.platform === 'win32',
|
|
195
227
|
});
|
|
196
|
-
|
|
228
|
+
|
|
229
|
+
if (CONFIG.verbose) {
|
|
230
|
+
console.log('๐ [Process] tsx spawned with PID:', tsxProcess.pid);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Cleanup: remover arquivo temporรกrio apรณs execuรงรฃo
|
|
234
|
+
const cleanupTempFile = () => {
|
|
235
|
+
try {
|
|
236
|
+
if (fs.existsSync(tempFile)) {
|
|
237
|
+
fs.unlinkSync(tempFile);
|
|
238
|
+
if (CONFIG.verbose) {
|
|
239
|
+
console.log('๐๏ธ [Cleanup] Temp file removed');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
} catch (e) {
|
|
243
|
+
// Ignorar erros de cleanup
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
|
|
197
247
|
let output = '';
|
|
198
248
|
let errorOutput = '';
|
|
199
249
|
let hasResponded = false;
|
|
@@ -201,7 +251,7 @@ main(input).then(result => {
|
|
|
201
251
|
let isCapturingError = false;
|
|
202
252
|
let resultLines = [];
|
|
203
253
|
let errorLines = [];
|
|
204
|
-
|
|
254
|
+
|
|
205
255
|
// Processar saรญda linha por linha
|
|
206
256
|
const processLine = (line) => {
|
|
207
257
|
if (line.includes('๐ต RUNFLOW_RESULT_START')) {
|
|
@@ -209,15 +259,15 @@ main(input).then(result => {
|
|
|
209
259
|
resultLines = [];
|
|
210
260
|
return;
|
|
211
261
|
}
|
|
212
|
-
|
|
262
|
+
|
|
213
263
|
if (line.includes('๐ต RUNFLOW_RESULT_END')) {
|
|
214
264
|
isCapturingResult = false;
|
|
215
|
-
|
|
265
|
+
|
|
216
266
|
if (!hasResponded && resultLines.length > 0) {
|
|
217
267
|
try {
|
|
218
268
|
const jsonResult = JSON.parse(resultLines.join('\n'));
|
|
219
269
|
console.log('โ
[Result Captured]:', jsonResult);
|
|
220
|
-
|
|
270
|
+
|
|
221
271
|
res.json({
|
|
222
272
|
success: true,
|
|
223
273
|
data: jsonResult,
|
|
@@ -229,7 +279,7 @@ main(input).then(result => {
|
|
|
229
279
|
entityValue,
|
|
230
280
|
userId,
|
|
231
281
|
},
|
|
232
|
-
timestamp: new Date().toISOString()
|
|
282
|
+
timestamp: new Date().toISOString(),
|
|
233
283
|
});
|
|
234
284
|
hasResponded = true;
|
|
235
285
|
console.log('โ
[Response] Sent to frontend successfully');
|
|
@@ -239,25 +289,25 @@ main(input).then(result => {
|
|
|
239
289
|
}
|
|
240
290
|
return;
|
|
241
291
|
}
|
|
242
|
-
|
|
292
|
+
|
|
243
293
|
if (line.includes('๐ด RUNFLOW_ERROR_START')) {
|
|
244
294
|
isCapturingError = true;
|
|
245
295
|
errorLines = [];
|
|
246
296
|
return;
|
|
247
297
|
}
|
|
248
|
-
|
|
298
|
+
|
|
249
299
|
if (line.includes('๐ด RUNFLOW_ERROR_END')) {
|
|
250
300
|
isCapturingError = false;
|
|
251
|
-
|
|
301
|
+
|
|
252
302
|
if (!hasResponded && errorLines.length > 0) {
|
|
253
303
|
try {
|
|
254
304
|
const errorResult = JSON.parse(errorLines.join('\n'));
|
|
255
305
|
console.log('โ [Error Captured]:', errorResult);
|
|
256
|
-
|
|
306
|
+
|
|
257
307
|
res.status(500).json({
|
|
258
308
|
success: false,
|
|
259
309
|
error: errorResult.error,
|
|
260
|
-
timestamp: new Date().toISOString()
|
|
310
|
+
timestamp: new Date().toISOString(),
|
|
261
311
|
});
|
|
262
312
|
hasResponded = true;
|
|
263
313
|
} catch (e) {
|
|
@@ -266,7 +316,7 @@ main(input).then(result => {
|
|
|
266
316
|
}
|
|
267
317
|
return;
|
|
268
318
|
}
|
|
269
|
-
|
|
319
|
+
|
|
270
320
|
if (isCapturingResult) {
|
|
271
321
|
resultLines.push(line);
|
|
272
322
|
} else if (isCapturingError) {
|
|
@@ -274,35 +324,58 @@ main(input).then(result => {
|
|
|
274
324
|
}
|
|
275
325
|
};
|
|
276
326
|
|
|
277
|
-
|
|
327
|
+
// Sempre capturar output, mas sรณ mostrar logs detalhados se verbose
|
|
328
|
+
tsxProcess.stdout?.on('data', (data) => {
|
|
278
329
|
const chunk = data.toString();
|
|
279
|
-
|
|
330
|
+
if (CONFIG.verbose) {
|
|
331
|
+
console.log('๐ค [TSX stdout]:', chunk.trim());
|
|
332
|
+
}
|
|
280
333
|
output += chunk;
|
|
281
|
-
|
|
334
|
+
|
|
282
335
|
const lines = chunk.split('\n');
|
|
283
|
-
lines.forEach(line => {
|
|
336
|
+
lines.forEach((line) => {
|
|
284
337
|
if (line.trim()) {
|
|
285
338
|
processLine(line.trim());
|
|
286
339
|
}
|
|
287
340
|
});
|
|
288
341
|
});
|
|
289
|
-
|
|
290
|
-
tsxProcess.stderr
|
|
342
|
+
|
|
343
|
+
tsxProcess.stderr?.on('data', (data) => {
|
|
291
344
|
const chunk = data.toString();
|
|
292
|
-
|
|
345
|
+
if (CONFIG.verbose) {
|
|
346
|
+
console.log('๐ค [TSX stderr]:', chunk.trim());
|
|
347
|
+
}
|
|
293
348
|
errorOutput += chunk;
|
|
294
349
|
});
|
|
295
350
|
|
|
351
|
+
tsxProcess.on('error', (error) => {
|
|
352
|
+
console.error('โ [Process Error]:', error.message);
|
|
353
|
+
if (!hasResponded) {
|
|
354
|
+
res.status(500).json({
|
|
355
|
+
success: false,
|
|
356
|
+
error: `Failed to execute: ${error.message}`,
|
|
357
|
+
timestamp: new Date().toISOString(),
|
|
358
|
+
});
|
|
359
|
+
hasResponded = true;
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
|
|
296
363
|
tsxProcess.on('close', (code) => {
|
|
297
|
-
|
|
298
|
-
|
|
364
|
+
cleanupTempFile(); // Limpar arquivo temporรกrio
|
|
365
|
+
|
|
366
|
+
if (CONFIG.verbose) {
|
|
367
|
+
console.log('๐ [Process] Closed with code:', code);
|
|
368
|
+
console.log('๐ [Captured Output]:', output.substring(0, 500)); // Primeiros 500 chars
|
|
369
|
+
console.log('๐ [Captured Error]:', errorOutput.substring(0, 500));
|
|
370
|
+
}
|
|
371
|
+
|
|
299
372
|
if (!hasResponded) {
|
|
300
373
|
console.log('โ ๏ธ [Fallback] No structured response captured');
|
|
301
|
-
|
|
374
|
+
|
|
302
375
|
if (code === 0) {
|
|
303
376
|
const lines = output.trim().split('\n');
|
|
304
377
|
let jsonResult = null;
|
|
305
|
-
|
|
378
|
+
|
|
306
379
|
for (let i = lines.length - 1; i >= 0; i--) {
|
|
307
380
|
const line = lines[i].trim();
|
|
308
381
|
if (line.startsWith('{') && line.endsWith('}')) {
|
|
@@ -315,48 +388,47 @@ main(input).then(result => {
|
|
|
315
388
|
}
|
|
316
389
|
}
|
|
317
390
|
}
|
|
318
|
-
|
|
391
|
+
|
|
319
392
|
if (jsonResult) {
|
|
320
393
|
res.json({
|
|
321
394
|
success: true,
|
|
322
395
|
data: jsonResult,
|
|
323
|
-
timestamp: new Date().toISOString()
|
|
396
|
+
timestamp: new Date().toISOString(),
|
|
324
397
|
});
|
|
325
398
|
} else {
|
|
326
399
|
res.json({
|
|
327
400
|
success: true,
|
|
328
401
|
data: { message: 'Process completed but no result captured' },
|
|
329
|
-
timestamp: new Date().toISOString()
|
|
402
|
+
timestamp: new Date().toISOString(),
|
|
330
403
|
});
|
|
331
404
|
}
|
|
332
405
|
} else {
|
|
333
406
|
res.status(500).json({
|
|
334
407
|
success: false,
|
|
335
408
|
error: errorOutput || `Process failed with code ${code}`,
|
|
336
|
-
timestamp: new Date().toISOString()
|
|
409
|
+
timestamp: new Date().toISOString(),
|
|
337
410
|
});
|
|
338
411
|
}
|
|
339
412
|
}
|
|
340
413
|
});
|
|
341
|
-
|
|
342
414
|
} catch (error) {
|
|
343
415
|
console.error('โ [Test] Error:', error.message);
|
|
344
|
-
|
|
416
|
+
|
|
345
417
|
res.status(500).json({
|
|
346
418
|
success: false,
|
|
347
419
|
error: error.message,
|
|
348
|
-
timestamp: new Date().toISOString()
|
|
420
|
+
timestamp: new Date().toISOString(),
|
|
349
421
|
});
|
|
350
422
|
}
|
|
351
423
|
});
|
|
352
424
|
|
|
353
425
|
// Health check
|
|
354
426
|
app.get('/api/health', (req, res) => {
|
|
355
|
-
res.json({
|
|
356
|
-
status: 'ok',
|
|
427
|
+
res.json({
|
|
428
|
+
status: 'ok',
|
|
357
429
|
timestamp: new Date().toISOString(),
|
|
358
430
|
agent: CONFIG.mainFile,
|
|
359
|
-
type: 'test-
|
|
431
|
+
type: 'test-servers',
|
|
360
432
|
});
|
|
361
433
|
});
|
|
362
434
|
|
|
@@ -364,17 +436,17 @@ app.get('/api/health', (req, res) => {
|
|
|
364
436
|
app.get('/api/scenarios', (req, res) => {
|
|
365
437
|
const fs = require('fs');
|
|
366
438
|
const path = require('path');
|
|
367
|
-
|
|
439
|
+
|
|
368
440
|
const scenarios = [];
|
|
369
|
-
|
|
441
|
+
|
|
370
442
|
// 1. Load CLI default scenarios
|
|
371
443
|
try {
|
|
372
444
|
const cliScenariosPath = process.env.RUNFLOW_SCENARIOS_PATH;
|
|
373
|
-
|
|
445
|
+
|
|
374
446
|
if (cliScenariosPath && fs.existsSync(cliScenariosPath)) {
|
|
375
|
-
const files = fs.readdirSync(cliScenariosPath).filter(f => f.endsWith('.json'));
|
|
376
|
-
|
|
377
|
-
files.forEach(file => {
|
|
447
|
+
const files = fs.readdirSync(cliScenariosPath).filter((f) => f.endsWith('.json'));
|
|
448
|
+
|
|
449
|
+
files.forEach((file) => {
|
|
378
450
|
try {
|
|
379
451
|
const content = JSON.parse(fs.readFileSync(path.join(cliScenariosPath, file), 'utf8'));
|
|
380
452
|
scenarios.push({ ...content, source: 'cli', id: file.replace('.json', '') });
|
|
@@ -386,15 +458,17 @@ app.get('/api/scenarios', (req, res) => {
|
|
|
386
458
|
} catch (error) {
|
|
387
459
|
console.error('Error loading CLI scenarios:', error.message);
|
|
388
460
|
}
|
|
389
|
-
|
|
461
|
+
|
|
390
462
|
// 2. Load project custom scenarios
|
|
391
463
|
try {
|
|
392
464
|
const projectScenariosPath = path.join(process.cwd(), 'test-scenarios');
|
|
393
465
|
if (fs.existsSync(projectScenariosPath)) {
|
|
394
|
-
const files = fs.readdirSync(projectScenariosPath).filter(f => f.endsWith('.json'));
|
|
395
|
-
files.forEach(file => {
|
|
466
|
+
const files = fs.readdirSync(projectScenariosPath).filter((f) => f.endsWith('.json'));
|
|
467
|
+
files.forEach((file) => {
|
|
396
468
|
try {
|
|
397
|
-
const content = JSON.parse(
|
|
469
|
+
const content = JSON.parse(
|
|
470
|
+
fs.readFileSync(path.join(projectScenariosPath, file), 'utf8'),
|
|
471
|
+
);
|
|
398
472
|
scenarios.push({ ...content, source: 'project', id: file.replace('.json', '') });
|
|
399
473
|
} catch (e) {
|
|
400
474
|
console.error('Error loading project scenario ' + file + ':', e.message);
|
|
@@ -404,7 +478,7 @@ app.get('/api/scenarios', (req, res) => {
|
|
|
404
478
|
} catch (error) {
|
|
405
479
|
console.error('Error loading project scenarios:', error.message);
|
|
406
480
|
}
|
|
407
|
-
|
|
481
|
+
|
|
408
482
|
res.json({ scenarios });
|
|
409
483
|
});
|
|
410
484
|
|
|
@@ -419,22 +493,22 @@ app.get('/api/scenarios', (req, res) => {
|
|
|
419
493
|
app.get('/api/traces', (req, res) => {
|
|
420
494
|
try {
|
|
421
495
|
const tracesFile = path.join(process.cwd(), '.runflow', 'traces.json');
|
|
422
|
-
|
|
496
|
+
|
|
423
497
|
if (!fs.existsSync(tracesFile)) {
|
|
424
|
-
return res.json({
|
|
425
|
-
threads: [],
|
|
498
|
+
return res.json({
|
|
499
|
+
threads: [],
|
|
426
500
|
total: 0,
|
|
427
|
-
message: 'No traces yet. Run your agent to generate traces.'
|
|
501
|
+
message: 'No traces yet. Run your agent to generate traces.',
|
|
428
502
|
});
|
|
429
503
|
}
|
|
430
|
-
|
|
504
|
+
|
|
431
505
|
const data = JSON.parse(fs.readFileSync(tracesFile, 'utf-8'));
|
|
432
|
-
|
|
506
|
+
|
|
433
507
|
// Group executions by threadId
|
|
434
508
|
const threadMap = {};
|
|
435
|
-
Object.values(data.executions || {}).forEach(execution => {
|
|
509
|
+
Object.values(data.executions || {}).forEach((execution) => {
|
|
436
510
|
const threadId = execution.threadId || 'unknown';
|
|
437
|
-
|
|
511
|
+
|
|
438
512
|
if (!threadMap[threadId]) {
|
|
439
513
|
threadMap[threadId] = {
|
|
440
514
|
threadId,
|
|
@@ -445,23 +519,24 @@ app.get('/api/traces', (req, res) => {
|
|
|
445
519
|
lastActivity: execution.startedAt,
|
|
446
520
|
};
|
|
447
521
|
}
|
|
448
|
-
|
|
522
|
+
|
|
449
523
|
threadMap[threadId].executions.push(execution);
|
|
450
524
|
threadMap[threadId].totalTraces += execution.traces?.length || 0;
|
|
451
|
-
|
|
525
|
+
|
|
452
526
|
// Update last activity
|
|
453
527
|
if (execution.startedAt > threadMap[threadId].lastActivity) {
|
|
454
528
|
threadMap[threadId].lastActivity = execution.startedAt;
|
|
455
529
|
}
|
|
456
530
|
});
|
|
457
|
-
|
|
458
|
-
const threads = Object.values(threadMap)
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
531
|
+
|
|
532
|
+
const threads = Object.values(threadMap).sort(
|
|
533
|
+
(a, b) => new Date(b.lastActivity) - new Date(a.lastActivity),
|
|
534
|
+
);
|
|
535
|
+
|
|
536
|
+
res.json({
|
|
462
537
|
threads,
|
|
463
538
|
total: threads.length,
|
|
464
|
-
totalTraces: data.traces?.length || 0
|
|
539
|
+
totalTraces: data.traces?.length || 0,
|
|
465
540
|
});
|
|
466
541
|
} catch (error) {
|
|
467
542
|
console.error('โ Error reading traces:', error);
|
|
@@ -476,27 +551,27 @@ app.get('/api/traces', (req, res) => {
|
|
|
476
551
|
app.get('/api/traces/executions/:executionId', (req, res) => {
|
|
477
552
|
try {
|
|
478
553
|
const tracesFile = path.join(process.cwd(), '.runflow', 'traces.json');
|
|
479
|
-
|
|
554
|
+
|
|
480
555
|
if (!fs.existsSync(tracesFile)) {
|
|
481
556
|
return res.status(404).json({ error: 'Execution not found' });
|
|
482
557
|
}
|
|
483
|
-
|
|
558
|
+
|
|
484
559
|
const data = JSON.parse(fs.readFileSync(tracesFile, 'utf-8'));
|
|
485
560
|
const execution = data.executions?.[req.params.executionId];
|
|
486
|
-
|
|
561
|
+
|
|
487
562
|
if (!execution) {
|
|
488
563
|
return res.status(404).json({ error: 'Execution not found' });
|
|
489
564
|
}
|
|
490
|
-
|
|
565
|
+
|
|
491
566
|
// Build hierarchy of traces
|
|
492
567
|
const traceMap = new Map();
|
|
493
568
|
const rootTraces = [];
|
|
494
|
-
|
|
495
|
-
execution.traces.forEach(trace => {
|
|
569
|
+
|
|
570
|
+
execution.traces.forEach((trace) => {
|
|
496
571
|
traceMap.set(trace.traceId, { ...trace, children: [] });
|
|
497
572
|
});
|
|
498
|
-
|
|
499
|
-
execution.traces.forEach(trace => {
|
|
573
|
+
|
|
574
|
+
execution.traces.forEach((trace) => {
|
|
500
575
|
const node = traceMap.get(trace.traceId);
|
|
501
576
|
if (trace.parentTraceId) {
|
|
502
577
|
const parent = traceMap.get(trace.parentTraceId);
|
|
@@ -509,7 +584,7 @@ app.get('/api/traces/executions/:executionId', (req, res) => {
|
|
|
509
584
|
rootTraces.push(node);
|
|
510
585
|
}
|
|
511
586
|
});
|
|
512
|
-
|
|
587
|
+
|
|
513
588
|
res.json({
|
|
514
589
|
execution: {
|
|
515
590
|
executionId: execution.executionId,
|
|
@@ -535,15 +610,15 @@ app.get('/api/traces/executions/:executionId', (req, res) => {
|
|
|
535
610
|
app.delete('/api/traces', (req, res) => {
|
|
536
611
|
try {
|
|
537
612
|
const tracesFile = path.join(process.cwd(), '.runflow', 'traces.json');
|
|
538
|
-
|
|
613
|
+
|
|
539
614
|
if (fs.existsSync(tracesFile)) {
|
|
540
615
|
fs.unlinkSync(tracesFile);
|
|
541
616
|
console.log('๐๏ธ Local traces cleared');
|
|
542
617
|
}
|
|
543
|
-
|
|
544
|
-
res.json({
|
|
618
|
+
|
|
619
|
+
res.json({
|
|
545
620
|
success: true,
|
|
546
|
-
message: 'Local traces cleared successfully'
|
|
621
|
+
message: 'Local traces cleared successfully',
|
|
547
622
|
});
|
|
548
623
|
} catch (error) {
|
|
549
624
|
console.error('โ Error clearing traces:', error);
|
|
@@ -552,7 +627,12 @@ app.delete('/api/traces', (req, res) => {
|
|
|
552
627
|
});
|
|
553
628
|
|
|
554
629
|
app.listen(CONFIG.port, () => {
|
|
555
|
-
console.log('โ
Test server ready on port', CONFIG.port);
|
|
630
|
+
console.log('โ
[READY] Test server ready on port', CONFIG.port);
|
|
631
|
+
console.log('๐ [CWD]', process.cwd());
|
|
632
|
+
console.log('๐ [MAIN]', CONFIG.mainFile);
|
|
633
|
+
if (CONFIG.verbose) {
|
|
634
|
+
console.log('๐ [VERBOSE] All logs will be shown');
|
|
635
|
+
}
|
|
556
636
|
});
|
|
557
637
|
|
|
558
638
|
process.on('SIGINT', () => {
|