@agenticflow/cli 0.0.1-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +125 -0
  2. package/TECHNICAL_DEBT.md +121 -0
  3. package/dist/builder/bundler.d.ts +17 -0
  4. package/dist/builder/bundler.d.ts.map +1 -0
  5. package/dist/builder/bundler.js +170 -0
  6. package/dist/builder/bundler.js.map +1 -0
  7. package/dist/builder/index.d.ts +6 -0
  8. package/dist/builder/index.d.ts.map +1 -0
  9. package/dist/builder/index.js +6 -0
  10. package/dist/builder/index.js.map +1 -0
  11. package/dist/builder/packager.d.ts +41 -0
  12. package/dist/builder/packager.d.ts.map +1 -0
  13. package/dist/builder/packager.js +145 -0
  14. package/dist/builder/packager.js.map +1 -0
  15. package/dist/builder/security.d.ts +26 -0
  16. package/dist/builder/security.d.ts.map +1 -0
  17. package/dist/builder/security.js +204 -0
  18. package/dist/builder/security.js.map +1 -0
  19. package/dist/builder/stripper.d.ts +19 -0
  20. package/dist/builder/stripper.d.ts.map +1 -0
  21. package/dist/builder/stripper.js +100 -0
  22. package/dist/builder/stripper.js.map +1 -0
  23. package/dist/builder/validator.d.ts +33 -0
  24. package/dist/builder/validator.d.ts.map +1 -0
  25. package/dist/builder/validator.js +150 -0
  26. package/dist/builder/validator.js.map +1 -0
  27. package/dist/cli/build.d.ts +3 -0
  28. package/dist/cli/build.d.ts.map +1 -0
  29. package/dist/cli/build.js +167 -0
  30. package/dist/cli/build.js.map +1 -0
  31. package/dist/cli/categories.d.ts +40 -0
  32. package/dist/cli/categories.d.ts.map +1 -0
  33. package/dist/cli/categories.js +101 -0
  34. package/dist/cli/categories.js.map +1 -0
  35. package/dist/cli/dev.d.ts +3 -0
  36. package/dist/cli/dev.d.ts.map +1 -0
  37. package/dist/cli/dev.js +226 -0
  38. package/dist/cli/dev.js.map +1 -0
  39. package/dist/cli/handler-types.d.ts +34 -0
  40. package/dist/cli/handler-types.d.ts.map +1 -0
  41. package/dist/cli/handler-types.js +67 -0
  42. package/dist/cli/handler-types.js.map +1 -0
  43. package/dist/cli/index.d.ts +3 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/dist/cli/index.js +24 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/cli/init.d.ts +3 -0
  48. package/dist/cli/init.d.ts.map +1 -0
  49. package/dist/cli/init.js +264 -0
  50. package/dist/cli/init.js.map +1 -0
  51. package/dist/cli/login.d.ts +3 -0
  52. package/dist/cli/login.d.ts.map +1 -0
  53. package/dist/cli/login.js +10 -0
  54. package/dist/cli/login.js.map +1 -0
  55. package/dist/cli/publish.d.ts +5 -0
  56. package/dist/cli/publish.d.ts.map +1 -0
  57. package/dist/cli/publish.js +120 -0
  58. package/dist/cli/publish.js.map +1 -0
  59. package/dist/cli/template-processor.d.ts +35 -0
  60. package/dist/cli/template-processor.d.ts.map +1 -0
  61. package/dist/cli/template-processor.js +82 -0
  62. package/dist/cli/template-processor.js.map +1 -0
  63. package/dist/cli/test.d.ts +3 -0
  64. package/dist/cli/test.d.ts.map +1 -0
  65. package/dist/cli/test.js +12 -0
  66. package/dist/cli/test.js.map +1 -0
  67. package/dist/dev/decorators.d.ts +10 -0
  68. package/dist/dev/decorators.d.ts.map +1 -0
  69. package/dist/dev/decorators.js +26 -0
  70. package/dist/dev/decorators.js.map +1 -0
  71. package/dist/dev/executor.d.ts +22 -0
  72. package/dist/dev/executor.d.ts.map +1 -0
  73. package/dist/dev/executor.js +243 -0
  74. package/dist/dev/executor.js.map +1 -0
  75. package/dist/dev/extractor.d.ts +15 -0
  76. package/dist/dev/extractor.d.ts.map +1 -0
  77. package/dist/dev/extractor.js +224 -0
  78. package/dist/dev/extractor.js.map +1 -0
  79. package/dist/dev/index.d.ts +3 -0
  80. package/dist/dev/index.d.ts.map +1 -0
  81. package/dist/dev/index.js +4 -0
  82. package/dist/dev/index.js.map +1 -0
  83. package/dist/dev/server.d.ts +91 -0
  84. package/dist/dev/server.d.ts.map +1 -0
  85. package/dist/dev/server.js +507 -0
  86. package/dist/dev/server.js.map +1 -0
  87. package/dist/dev/ui-dist/assets/index-BkKxvzfq.js +246 -0
  88. package/dist/dev/ui-dist/assets/index-DTO1qt7B.css +1 -0
  89. package/dist/dev/ui-dist/index.html +14 -0
  90. package/dist/dev/ui-dist/monkey.svg +3 -0
  91. package/dist/dev/ui-dist/package.json +27 -0
  92. package/dist/templates/_shared/.env.template +16 -0
  93. package/dist/templates/_shared/.gitignore.template +46 -0
  94. package/dist/templates/_shared/LICENSE.template +21 -0
  95. package/dist/templates/_shared/src/utils.ts.template +29 -0
  96. package/dist/templates/_shared/tsconfig.json.template +23 -0
  97. package/dist/templates/stateful/manifest.json.template +63 -0
  98. package/dist/templates/stateful/package.json.template +23 -0
  99. package/dist/templates/stateful/src/index.ts.template +147 -0
  100. package/dist/templates/stateless/docs/README.md.template +102 -0
  101. package/dist/templates/stateless/manifest.json.template +63 -0
  102. package/dist/templates/stateless/package.json.template +23 -0
  103. package/dist/templates/stateless/src/index.ts.template +103 -0
  104. package/package.json +51 -0
  105. package/vitest.config.ts +15 -0
@@ -0,0 +1,507 @@
1
+ import express from 'express';
2
+ import { WebSocketServer, WebSocket } from 'ws';
3
+ import { createServer } from 'http';
4
+ import * as path from 'path';
5
+ import * as fs from 'fs';
6
+ import { EventEmitter } from 'events';
7
+ import { extractTestValuesFromSource, extractHandlerMetadata, extractInputMetadata } from './extractor.js';
8
+ import { executeHandler } from './executor.js';
9
+ export class DevServer extends EventEmitter {
10
+ options;
11
+ app;
12
+ httpServer;
13
+ wss;
14
+ clients = new Set();
15
+ manifest = null;
16
+ testValues = {};
17
+ projectDir;
18
+ handlerMetadata = {};
19
+ inputMetadata = {};
20
+ testHistory = [];
21
+ constructor(options) {
22
+ super();
23
+ this.options = options;
24
+ this.projectDir = options.projectDir;
25
+ this.app = express();
26
+ this.httpServer = createServer(this.app);
27
+ this.wss = new WebSocketServer({ server: this.httpServer });
28
+ this.setupMiddleware();
29
+ this.setupRoutes();
30
+ this.setupWebSocket();
31
+ }
32
+ setupMiddleware() {
33
+ this.app.use(express.json());
34
+ // CORS for dev UI
35
+ this.app.use((req, res, next) => {
36
+ res.header('Access-Control-Allow-Origin', '*');
37
+ res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
38
+ res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
39
+ if (req.method === 'OPTIONS') {
40
+ return res.sendStatus(200);
41
+ }
42
+ next();
43
+ });
44
+ }
45
+ setupRoutes() {
46
+ // Health check
47
+ this.app.get('/api/health', (req, res) => {
48
+ res.json({ status: 'ok', timestamp: new Date().toISOString() });
49
+ });
50
+ // Get manifest (merged with extracted input metadata from source)
51
+ this.app.get('/api/manifest', (req, res) => {
52
+ if (!this.manifest) {
53
+ return res.status(404).json({ error: 'Manifest not loaded' });
54
+ }
55
+ // Merge manifest inputs with extracted inputs from source code
56
+ const mergedManifest = this.getMergedManifest();
57
+ res.json(mergedManifest);
58
+ });
59
+ // Get test values
60
+ this.app.get('/api/test-values', (req, res) => {
61
+ res.json(this.testValues);
62
+ });
63
+ // Get saved test data
64
+ this.app.get('/api/saved-test-data', (req, res) => {
65
+ const testDataPath = path.join(this.projectDir, '.afh', 'test-data.json');
66
+ if (fs.existsSync(testDataPath)) {
67
+ const data = JSON.parse(fs.readFileSync(testDataPath, 'utf-8'));
68
+ res.json(data);
69
+ }
70
+ else {
71
+ res.json({});
72
+ }
73
+ });
74
+ // Save test data
75
+ this.app.post('/api/saved-test-data', (req, res) => {
76
+ const afhDir = path.join(this.projectDir, '.afh');
77
+ if (!fs.existsSync(afhDir)) {
78
+ fs.mkdirSync(afhDir, { recursive: true });
79
+ }
80
+ const testDataPath = path.join(afhDir, 'test-data.json');
81
+ fs.writeFileSync(testDataPath, JSON.stringify(req.body, null, 2));
82
+ res.json({ success: true });
83
+ });
84
+ // Execute handler test - REAL EXECUTION
85
+ this.app.post('/api/execute', async (req, res) => {
86
+ const { inputs } = req.body;
87
+ this.broadcast('test:start', { inputs, timestamp: new Date().toISOString() });
88
+ try {
89
+ // Execute the handler for real using tsx
90
+ const result = await executeHandler(this.projectDir, {
91
+ inputs,
92
+ testValues: this.testValues,
93
+ timeout: 30000
94
+ });
95
+ this.testHistory.push(result);
96
+ if (result.success) {
97
+ this.broadcast('test:complete', result);
98
+ }
99
+ else {
100
+ this.broadcast('test:error', result);
101
+ }
102
+ res.json(result);
103
+ }
104
+ catch (error) {
105
+ const testResult = {
106
+ success: false,
107
+ duration: 0,
108
+ error: {
109
+ message: error instanceof Error ? error.message : String(error),
110
+ stack: error instanceof Error ? error.stack : undefined
111
+ },
112
+ logs: [],
113
+ timestamp: new Date().toISOString()
114
+ };
115
+ this.testHistory.push(testResult);
116
+ this.broadcast('test:error', testResult);
117
+ res.json(testResult);
118
+ }
119
+ });
120
+ // Get test history
121
+ this.app.get('/api/test-history', (req, res) => {
122
+ res.json(this.testHistory);
123
+ });
124
+ // Clear test history
125
+ this.app.delete('/api/test-history', (req, res) => {
126
+ this.testHistory = [];
127
+ res.json({ success: true });
128
+ });
129
+ // Get handler info (for inspector)
130
+ this.app.get('/api/handler-info', (req, res) => {
131
+ const srcPath = path.join(this.projectDir, 'src', 'index.ts');
132
+ const info = {
133
+ className: this.handlerMetadata.className || 'Unknown',
134
+ properties: Object.keys(this.inputMetadata),
135
+ methods: ['execute', 'success', 'failure'],
136
+ metadata: this.handlerMetadata,
137
+ testValues: this.testValues,
138
+ inputMetadata: this.inputMetadata
139
+ };
140
+ res.json(info);
141
+ });
142
+ // Get README content (for docs tab)
143
+ this.app.get('/api/docs/readme', (req, res) => {
144
+ const readmePath = path.join(this.projectDir, 'docs', 'README.md');
145
+ if (fs.existsSync(readmePath)) {
146
+ res.json({ content: fs.readFileSync(readmePath, 'utf-8') });
147
+ }
148
+ else {
149
+ // Try root README
150
+ const rootReadme = path.join(this.projectDir, 'README.md');
151
+ if (fs.existsSync(rootReadme)) {
152
+ res.json({ content: fs.readFileSync(rootReadme, 'utf-8') });
153
+ }
154
+ else {
155
+ res.json({ content: '# No README found\n\nCreate a `docs/README.md` file.' });
156
+ }
157
+ }
158
+ });
159
+ // Get examples
160
+ this.app.get('/api/examples', (req, res) => {
161
+ const examplesDir = path.join(this.projectDir, 'examples');
162
+ if (!fs.existsSync(examplesDir)) {
163
+ return res.json([]);
164
+ }
165
+ const examples = fs.readdirSync(examplesDir)
166
+ .filter(f => f.endsWith('.json'))
167
+ .map(f => ({
168
+ name: f.replace('.json', ''),
169
+ path: f,
170
+ content: JSON.parse(fs.readFileSync(path.join(examplesDir, f), 'utf-8'))
171
+ }));
172
+ res.json(examples);
173
+ });
174
+ // Validation endpoint (for build tab)
175
+ this.app.get('/api/validate', (req, res) => {
176
+ const checks = this.runValidation();
177
+ res.json(checks);
178
+ });
179
+ // Build endpoint - trigger real build
180
+ this.app.post('/api/build', async (req, res) => {
181
+ const { minify = true, skipSecurity = false } = req.body || {};
182
+ this.broadcast('build:start', { timestamp: new Date().toISOString() });
183
+ try {
184
+ // Import builder modules dynamically
185
+ const { validateProject, stripDevCodeFromDirectory, bundleHandler, minifyCode, scanBundledCode, createPackage } = await import('../builder/index.js');
186
+ const steps = [];
187
+ const startTime = Date.now();
188
+ // Step 1: Validate
189
+ const stepStart1 = Date.now();
190
+ const validation = await validateProject(this.projectDir);
191
+ steps.push({
192
+ step: 'Validate project',
193
+ status: validation.valid ? 'pass' : 'fail',
194
+ message: validation.valid ? undefined : 'Validation errors found',
195
+ duration: Date.now() - stepStart1
196
+ });
197
+ if (!validation.valid) {
198
+ const errors = [
199
+ ...validation.manifest.errors,
200
+ ...validation.files.errors,
201
+ ...validation.typescript.errors
202
+ ];
203
+ this.broadcast('build:error', { errors });
204
+ return res.json({
205
+ success: false,
206
+ steps,
207
+ errors
208
+ });
209
+ }
210
+ // Step 2: Strip dev code
211
+ const stepStart2 = Date.now();
212
+ const strippedDir = path.join(this.projectDir, '.afh', 'stripped');
213
+ if (fs.existsSync(strippedDir)) {
214
+ fs.rmSync(strippedDir, { recursive: true });
215
+ }
216
+ const srcDir = path.join(this.projectDir, 'src');
217
+ const stripResult = stripDevCodeFromDirectory(srcDir, strippedDir);
218
+ steps.push({
219
+ step: 'Strip dev code',
220
+ status: 'pass',
221
+ message: `Stripped ${stripResult.totalDecorators} decorator(s), ${stripResult.totalImports} import(s)`,
222
+ duration: Date.now() - stepStart2
223
+ });
224
+ // Step 3: Bundle
225
+ const stepStart3 = Date.now();
226
+ const bundleResult = await bundleHandler(this.projectDir, strippedDir);
227
+ if (bundleResult.errors.length > 0) {
228
+ steps.push({
229
+ step: 'Bundle handler',
230
+ status: 'fail',
231
+ message: bundleResult.errors.join(', '),
232
+ duration: Date.now() - stepStart3
233
+ });
234
+ this.broadcast('build:error', { errors: bundleResult.errors });
235
+ return res.json({
236
+ success: false,
237
+ steps,
238
+ errors: bundleResult.errors
239
+ });
240
+ }
241
+ steps.push({
242
+ step: 'Bundle handler',
243
+ status: 'pass',
244
+ duration: Date.now() - stepStart3
245
+ });
246
+ // Step 4: Minify (optional)
247
+ let finalCode = bundleResult.code;
248
+ if (minify) {
249
+ const stepStart4 = Date.now();
250
+ const originalSize = Buffer.byteLength(finalCode, 'utf-8');
251
+ finalCode = minifyCode(finalCode);
252
+ const minifiedSize = Buffer.byteLength(finalCode, 'utf-8');
253
+ const reduction = ((1 - minifiedSize / originalSize) * 100).toFixed(1);
254
+ steps.push({
255
+ step: 'Minify',
256
+ status: 'pass',
257
+ message: `${reduction}% reduction`,
258
+ duration: Date.now() - stepStart4
259
+ });
260
+ }
261
+ // Step 5: Security scan
262
+ if (!skipSecurity) {
263
+ const stepStart5 = Date.now();
264
+ const securityResult = scanBundledCode(finalCode);
265
+ if (securityResult.errors.length > 0) {
266
+ steps.push({
267
+ step: 'Security scan',
268
+ status: 'fail',
269
+ message: securityResult.errors.join(', '),
270
+ duration: Date.now() - stepStart5
271
+ });
272
+ this.broadcast('build:error', { errors: securityResult.errors });
273
+ return res.json({
274
+ success: false,
275
+ steps,
276
+ errors: securityResult.errors
277
+ });
278
+ }
279
+ steps.push({
280
+ step: 'Security scan',
281
+ status: securityResult.warnings.length > 0 ? 'warn' : 'pass',
282
+ message: securityResult.warnings.length > 0 ? securityResult.warnings.join(', ') : undefined,
283
+ duration: Date.now() - stepStart5
284
+ });
285
+ }
286
+ // Step 6: Create package
287
+ const stepStart6 = Date.now();
288
+ const outputDir = path.join(this.projectDir, '.afh', 'build');
289
+ const packageInfo = await createPackage(this.projectDir, finalCode, outputDir);
290
+ steps.push({
291
+ step: 'Create package',
292
+ status: 'pass',
293
+ message: `${packageInfo.id}-${packageInfo.version}.afh (${this.formatSize(packageInfo.size)})`,
294
+ duration: Date.now() - stepStart6
295
+ });
296
+ const totalDuration = Date.now() - startTime;
297
+ this.broadcast('build:complete', {
298
+ packageInfo,
299
+ duration: totalDuration
300
+ });
301
+ res.json({
302
+ success: true,
303
+ steps,
304
+ packageInfo,
305
+ duration: totalDuration
306
+ });
307
+ }
308
+ catch (error) {
309
+ this.broadcast('build:error', {
310
+ error: error instanceof Error ? error.message : String(error)
311
+ });
312
+ res.json({
313
+ success: false,
314
+ error: error instanceof Error ? error.message : String(error)
315
+ });
316
+ }
317
+ });
318
+ }
319
+ formatSize(bytes) {
320
+ if (bytes < 1024)
321
+ return bytes + ' B';
322
+ if (bytes < 1024 * 1024)
323
+ return (bytes / 1024).toFixed(1) + ' KB';
324
+ return (bytes / (1024 * 1024)).toFixed(2) + ' MB';
325
+ }
326
+ runValidation() {
327
+ const checks = [];
328
+ // Check manifest
329
+ const manifestPath = path.join(this.projectDir, 'manifest.json');
330
+ if (fs.existsSync(manifestPath)) {
331
+ checks.push({ name: 'Manifest exists', status: 'pass' });
332
+ try {
333
+ JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
334
+ checks.push({ name: 'Manifest valid JSON', status: 'pass' });
335
+ }
336
+ catch {
337
+ checks.push({ name: 'Manifest valid JSON', status: 'fail', message: 'Invalid JSON' });
338
+ }
339
+ }
340
+ else {
341
+ checks.push({ name: 'Manifest exists', status: 'fail', message: 'manifest.json not found' });
342
+ }
343
+ // Check source
344
+ const srcIndex = path.join(this.projectDir, 'src', 'index.ts');
345
+ if (fs.existsSync(srcIndex)) {
346
+ checks.push({ name: 'Source file exists', status: 'pass' });
347
+ }
348
+ else {
349
+ checks.push({ name: 'Source file exists', status: 'fail', message: 'src/index.ts not found' });
350
+ }
351
+ // Check icon
352
+ const iconPath = path.join(this.projectDir, 'assets', 'icon.png');
353
+ if (fs.existsSync(iconPath)) {
354
+ checks.push({ name: 'Icon exists', status: 'pass' });
355
+ }
356
+ else {
357
+ checks.push({ name: 'Icon exists', status: 'warn', message: 'assets/icon.png not found' });
358
+ }
359
+ // Check docs
360
+ const docsReadme = path.join(this.projectDir, 'docs', 'README.md');
361
+ if (fs.existsSync(docsReadme)) {
362
+ checks.push({ name: 'Documentation exists', status: 'pass' });
363
+ }
364
+ else {
365
+ checks.push({ name: 'Documentation exists', status: 'warn', message: 'docs/README.md not found' });
366
+ }
367
+ // Check LICENSE
368
+ const licensePath = path.join(this.projectDir, 'LICENSE');
369
+ if (fs.existsSync(licensePath)) {
370
+ checks.push({ name: 'License file exists', status: 'pass' });
371
+ }
372
+ else {
373
+ checks.push({ name: 'License file exists', status: 'warn', message: 'LICENSE not found' });
374
+ }
375
+ return checks;
376
+ }
377
+ setupWebSocket() {
378
+ this.wss.on('connection', (ws) => {
379
+ this.clients.add(ws);
380
+ console.log('Client connected');
381
+ // Send initial state
382
+ ws.send(JSON.stringify({
383
+ type: 'init',
384
+ data: {
385
+ manifest: this.getMergedManifest(),
386
+ testValues: this.testValues
387
+ }
388
+ }));
389
+ ws.on('close', () => {
390
+ this.clients.delete(ws);
391
+ console.log('Client disconnected');
392
+ });
393
+ ws.on('error', (err) => {
394
+ console.error('WebSocket error:', err);
395
+ this.clients.delete(ws);
396
+ });
397
+ });
398
+ }
399
+ /**
400
+ * Merge manifest.json inputs with dynamically extracted inputs from source code.
401
+ * This ensures all @Input decorated properties are shown in the UI, even if
402
+ * they're not in manifest.json yet.
403
+ */
404
+ getMergedManifest() {
405
+ if (!this.manifest)
406
+ return null;
407
+ // Get properties defined in manifest
408
+ const manifestInputs = new Map((this.manifest.inputs || []).map(input => [input.property, input]));
409
+ // Get properties extracted from source code
410
+ const sourceInputs = this.inputMetadata;
411
+ // Merge: source inputs take priority for metadata, but manifest provides defaults
412
+ const mergedInputs = [];
413
+ const seenProperties = new Set();
414
+ // First, add all inputs from source code (they're the source of truth for decorators)
415
+ for (const [property, meta] of Object.entries(sourceInputs)) {
416
+ seenProperties.add(property);
417
+ const manifestInput = manifestInputs.get(property);
418
+ mergedInputs.push({
419
+ property,
420
+ type: meta.type || manifestInput?.type || 'string',
421
+ source: meta.source || manifestInput?.source || 'config',
422
+ required: meta.required ?? manifestInput?.required ?? false,
423
+ description: meta.description || manifestInput?.description || '',
424
+ placeholder: manifestInput?.placeholder || '',
425
+ default: manifestInput?.default,
426
+ // Include if there's a test value
427
+ hasTestValue: this.testValues[property] !== undefined
428
+ });
429
+ }
430
+ // Then, add any inputs that are only in manifest (not in source - maybe commented out)
431
+ for (const [property, manifestInput] of manifestInputs) {
432
+ if (!seenProperties.has(property)) {
433
+ mergedInputs.push({
434
+ ...manifestInput,
435
+ hasTestValue: this.testValues[property] !== undefined
436
+ });
437
+ }
438
+ }
439
+ return {
440
+ ...this.manifest,
441
+ inputs: mergedInputs
442
+ };
443
+ }
444
+ broadcast(type, data) {
445
+ const message = JSON.stringify({ type, data, timestamp: Date.now() });
446
+ for (const client of this.clients) {
447
+ if (client.readyState === WebSocket.OPEN) {
448
+ client.send(message);
449
+ }
450
+ }
451
+ }
452
+ async loadHandler() {
453
+ // Load manifest
454
+ const manifestPath = path.join(this.projectDir, 'manifest.json');
455
+ if (!fs.existsSync(manifestPath)) {
456
+ throw new Error('manifest.json not found in ' + this.projectDir);
457
+ }
458
+ this.manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
459
+ // Load .env if exists
460
+ const envPath = path.join(this.projectDir, '.env');
461
+ if (fs.existsSync(envPath)) {
462
+ const dotenv = await import('dotenv');
463
+ dotenv.config({ path: envPath });
464
+ }
465
+ // Load handler data
466
+ await this.reloadHandler();
467
+ }
468
+ async reloadHandler() {
469
+ const srcPath = path.join(this.projectDir, 'src', 'index.ts');
470
+ if (!fs.existsSync(srcPath)) {
471
+ throw new Error('src/index.ts not found');
472
+ }
473
+ try {
474
+ // Extract test values and metadata from source code
475
+ this.testValues = extractTestValuesFromSource(srcPath);
476
+ this.handlerMetadata = extractHandlerMetadata(srcPath);
477
+ this.inputMetadata = extractInputMetadata(srcPath);
478
+ console.log(`Handler loaded: ${this.handlerMetadata.className || 'Unknown'}`);
479
+ console.log(`Test values found: ${Object.keys(this.testValues).length}`);
480
+ this.broadcast('handler:reload', {
481
+ manifest: this.manifest,
482
+ testValues: this.testValues
483
+ });
484
+ }
485
+ catch (error) {
486
+ console.error('Failed to load handler:', error);
487
+ this.broadcast('handler:error', {
488
+ message: error instanceof Error ? error.message : String(error)
489
+ });
490
+ throw error;
491
+ }
492
+ }
493
+ async start() {
494
+ await this.loadHandler();
495
+ return new Promise((resolve) => {
496
+ this.httpServer.listen(this.options.port, () => {
497
+ console.log(`API server running on http://localhost:${this.options.port}`);
498
+ resolve();
499
+ });
500
+ });
501
+ }
502
+ stop() {
503
+ this.wss.close();
504
+ this.httpServer.close();
505
+ }
506
+ }
507
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dev/server.ts"],"names":[],"mappings":"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"}