jetic-cli 0.1.0

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 (47) hide show
  1. package/dist/commands/config.d.ts +3 -0
  2. package/dist/commands/config.d.ts.map +1 -0
  3. package/dist/commands/config.js +36 -0
  4. package/dist/commands/config.js.map +1 -0
  5. package/dist/commands/dev.d.ts +3 -0
  6. package/dist/commands/dev.d.ts.map +1 -0
  7. package/dist/commands/dev.js +478 -0
  8. package/dist/commands/dev.js.map +1 -0
  9. package/dist/commands/init.d.ts +3 -0
  10. package/dist/commands/init.d.ts.map +1 -0
  11. package/dist/commands/init.js +91 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/inspect.d.ts +3 -0
  14. package/dist/commands/inspect.d.ts.map +1 -0
  15. package/dist/commands/inspect.js +73 -0
  16. package/dist/commands/inspect.js.map +1 -0
  17. package/dist/commands/memory.d.ts +3 -0
  18. package/dist/commands/memory.d.ts.map +1 -0
  19. package/dist/commands/memory.js +96 -0
  20. package/dist/commands/memory.js.map +1 -0
  21. package/dist/commands/scan.d.ts +3 -0
  22. package/dist/commands/scan.d.ts.map +1 -0
  23. package/dist/commands/scan.js +54 -0
  24. package/dist/commands/scan.js.map +1 -0
  25. package/dist/commands/simulate-workflow.d.ts +46 -0
  26. package/dist/commands/simulate-workflow.d.ts.map +1 -0
  27. package/dist/commands/simulate-workflow.js +671 -0
  28. package/dist/commands/simulate-workflow.js.map +1 -0
  29. package/dist/commands/simulate.d.ts +3 -0
  30. package/dist/commands/simulate.d.ts.map +1 -0
  31. package/dist/commands/simulate.js +482 -0
  32. package/dist/commands/simulate.js.map +1 -0
  33. package/dist/index.d.ts +3 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +25 -0
  36. package/dist/index.js.map +1 -0
  37. package/package.json +30 -0
  38. package/src/commands/config.ts +36 -0
  39. package/src/commands/dev.ts +451 -0
  40. package/src/commands/init.ts +64 -0
  41. package/src/commands/inspect.ts +47 -0
  42. package/src/commands/memory.ts +71 -0
  43. package/src/commands/scan.ts +22 -0
  44. package/src/commands/simulate-workflow.ts +794 -0
  45. package/src/commands/simulate.ts +512 -0
  46. package/src/index.ts +26 -0
  47. package/tsconfig.json +8 -0
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const configCommand: Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,aAAa,SAetB,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configCommand = void 0;
4
+ const commander_1 = require("commander");
5
+ const core_1 = require("@jetic/core");
6
+ exports.configCommand = new commander_1.Command('config')
7
+ .description('Manage Jetic configuration')
8
+ .action(() => {
9
+ const config = (0, core_1.loadConfig)();
10
+ console.log('\n\x1b[1mJetic Configuration\x1b[0m\n');
11
+ const tableData = [
12
+ { Key: 'Project Root', Value: config.projectRoot },
13
+ { Key: 'Jetic Directory', Value: config.jeticDir },
14
+ { Key: 'AI Provider', Value: config.ai?.provider || 'Not set' },
15
+ { Key: 'AI Model', Value: config.ai?.model || 'Not set' },
16
+ { Key: 'API Key Env Var', Value: config.ai?.apiKeyEnvVar || 'Not set' }
17
+ ];
18
+ console.table(tableData, ['Key', 'Value']);
19
+ });
20
+ exports.configCommand
21
+ .command('ai')
22
+ .description('Configure the AI provider and model')
23
+ .requiredOption('-p, --provider <provider>', 'AI Provider (e.g. openai)')
24
+ .requiredOption('-m, --model <model>', 'Model name (e.g. gpt-4o)')
25
+ .requiredOption('-k, --key-env <envvar>', 'Environment variable containing the API key (e.g. OPENAI_API_KEY)')
26
+ .action((options) => {
27
+ const config = (0, core_1.loadConfig)();
28
+ config.ai = {
29
+ provider: options.provider,
30
+ model: options.model,
31
+ apiKeyEnvVar: options.keyEnv
32
+ };
33
+ (0, core_1.saveConfig)(config);
34
+ console.log('AI configuration saved successfully.');
35
+ });
36
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,sCAAqD;AAExC,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,MAAM,GAAG,IAAA,iBAAU,GAAE,CAAC;IAE5B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG;QAChB,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE;QAClD,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;QAClD,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,IAAI,SAAS,EAAE;QAC/D,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,SAAS,EAAE;QACzD,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,IAAI,SAAS,EAAE;KACxE,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEL,qBAAa;KACV,OAAO,CAAC,IAAI,CAAC;KACb,WAAW,CAAC,qCAAqC,CAAC;KAClD,cAAc,CAAC,2BAA2B,EAAE,2BAA2B,CAAC;KACxE,cAAc,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;KACjE,cAAc,CAAC,wBAAwB,EAAE,mEAAmE,CAAC;KAC7G,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,MAAM,GAAG,IAAA,iBAAU,GAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,GAAG;QACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,OAAO,CAAC,MAAM;KAC7B,CAAC;IACF,IAAA,iBAAU,EAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const devCommand: Command;
3
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,UAAU,SAqbnB,CAAC"}
@@ -0,0 +1,478 @@
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.devCommand = void 0;
40
+ const commander_1 = require("commander");
41
+ const express_1 = __importDefault(require("express"));
42
+ const path_1 = __importDefault(require("path"));
43
+ const fs_1 = __importDefault(require("fs"));
44
+ const memory_1 = require("@jetic/memory");
45
+ exports.devCommand = new commander_1.Command('dev')
46
+ .description('Start the Jetic local dashboard')
47
+ .option('-p, --port <number>', 'Port to run the dashboard on', '8787')
48
+ .action(async (options) => {
49
+ const port = parseInt(options.port, 10);
50
+ const app = (0, express_1.default)();
51
+ app.use(express_1.default.json());
52
+ // Allow dashboard dev server to call the API during development
53
+ app.use((_req, res, next) => {
54
+ res.setHeader('Access-Control-Allow-Origin', '*');
55
+ res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS');
56
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
57
+ if (_req.method === 'OPTIONS')
58
+ return res.sendStatus(204);
59
+ next();
60
+ });
61
+ // ─── Model API ───────────────────────────────────────────────────────
62
+ app.get('/api/model', (_req, res) => {
63
+ const modelPath = path_1.default.join(process.cwd(), '.jetic', 'model.json');
64
+ try {
65
+ if (!fs_1.default.existsSync(modelPath))
66
+ return res.json(null);
67
+ res.json(JSON.parse(fs_1.default.readFileSync(modelPath, 'utf8')));
68
+ }
69
+ catch (err) {
70
+ res.status(500).json({ error: err.message });
71
+ }
72
+ });
73
+ app.put('/api/model/endpoint/:id', (req, res) => {
74
+ const modelPath = path_1.default.join(process.cwd(), '.jetic', 'model.json');
75
+ try {
76
+ if (!fs_1.default.existsSync(modelPath))
77
+ return res.status(404).json({ error: 'model.json not found' });
78
+ const model = JSON.parse(fs_1.default.readFileSync(modelPath, 'utf8'));
79
+ const idx = model.endpoints.findIndex((e) => e.id === req.params.id);
80
+ if (idx === -1)
81
+ return res.status(404).json({ error: 'Endpoint not found' });
82
+ model.endpoints[idx] = { ...model.endpoints[idx], ...req.body };
83
+ fs_1.default.writeFileSync(modelPath, JSON.stringify(model, null, 2), 'utf8');
84
+ res.json({ ok: true, endpoint: model.endpoints[idx] });
85
+ }
86
+ catch (err) {
87
+ res.status(500).json({ error: err.message });
88
+ }
89
+ });
90
+ app.post('/api/model/scan', async (_req, res) => {
91
+ try {
92
+ const { loadConfig, writeJsonSync, ensureDirSync } = await Promise.resolve().then(() => __importStar(require('@jetic/core')));
93
+ const { ExpressScanner } = await Promise.resolve().then(() => __importStar(require('@jetic/scanner')));
94
+ const config = loadConfig();
95
+ ensureDirSync(config.jeticDir);
96
+ const scanner = new ExpressScanner(config);
97
+ const model = await scanner.scan();
98
+ const modelPath = path_1.default.join(config.jeticDir, 'model.json');
99
+ writeJsonSync(modelPath, model);
100
+ res.json({ ok: true, endpointCount: model.endpoints.length, model });
101
+ }
102
+ catch (err) {
103
+ res.status(500).json({ error: err.message });
104
+ }
105
+ });
106
+ // ─── Source viewer ────────────────────────────────────────────────────
107
+ app.get('/api/model/source', (req, res) => {
108
+ const file = req.query.file;
109
+ const line = parseInt(req.query.line, 10) || 1;
110
+ if (!file)
111
+ return res.status(400).json({ error: 'file is required' });
112
+ try {
113
+ // Resolve relative to cwd
114
+ const resolved = path_1.default.isAbsolute(file) ? file : path_1.default.join(process.cwd(), file);
115
+ if (!fs_1.default.existsSync(resolved)) {
116
+ return res.status(404).json({ error: `File not found: ${resolved}` });
117
+ }
118
+ const content = fs_1.default.readFileSync(resolved, 'utf8');
119
+ const lines = content.split('\n');
120
+ // Return ~40 lines centred on the handler line
121
+ const start = Math.max(0, line - 5);
122
+ const end = Math.min(lines.length, line + 35);
123
+ const snippet = lines.slice(start, end).join('\n');
124
+ res.json({ source: snippet, startLine: start + 1, totalLines: lines.length, file: resolved });
125
+ }
126
+ catch (err) {
127
+ res.status(500).json({ error: err.message });
128
+ }
129
+ });
130
+ // ─── Related files ────────────────────────────────────────────────────
131
+ app.get('/api/model/related', (req, res) => {
132
+ const id = req.query.id;
133
+ if (!id)
134
+ return res.status(400).json({ error: 'id is required' });
135
+ try {
136
+ const modelPath = path_1.default.join(process.cwd(), '.jetic', 'model.json');
137
+ if (!fs_1.default.existsSync(modelPath))
138
+ return res.json({ files: [] });
139
+ const model = JSON.parse(fs_1.default.readFileSync(modelPath, 'utf8'));
140
+ const endpoint = (model.endpoints || []).find((e) => e.id === id);
141
+ if (!endpoint || !endpoint.source?.file)
142
+ return res.json({ files: [] });
143
+ const sourceFile = path_1.default.isAbsolute(endpoint.source.file)
144
+ ? endpoint.source.file
145
+ : path_1.default.join(process.cwd(), endpoint.source.file);
146
+ if (!fs_1.default.existsSync(sourceFile))
147
+ return res.json({ files: [] });
148
+ // Parse import/require statements from the source file
149
+ const content = fs_1.default.readFileSync(sourceFile, 'utf8');
150
+ const importRegex = /(?:import\s+.*?from\s+['"](.+?)['"]|require\(['"](.+?)['"]\))/g;
151
+ const relatedFiles = [];
152
+ const sourceDir = path_1.default.dirname(sourceFile);
153
+ let match;
154
+ while ((match = importRegex.exec(content)) !== null) {
155
+ const importPath = match[1] || match[2];
156
+ if (!importPath || importPath.startsWith('@') || !importPath.startsWith('.'))
157
+ continue;
158
+ const exts = ['', '.ts', '.js', '.tsx', '.jsx'];
159
+ for (const ext of exts) {
160
+ const candidate = path_1.default.resolve(sourceDir, importPath + ext);
161
+ if (fs_1.default.existsSync(candidate)) {
162
+ // Return path relative to cwd
163
+ relatedFiles.push(path_1.default.relative(process.cwd(), candidate));
164
+ break;
165
+ }
166
+ }
167
+ }
168
+ // Also include the source file itself if not already there
169
+ const relSelf = path_1.default.relative(process.cwd(), sourceFile);
170
+ const files = [relSelf, ...relatedFiles.filter(f => f !== relSelf)];
171
+ res.json({ files });
172
+ }
173
+ catch (err) {
174
+ res.status(500).json({ error: err.message });
175
+ }
176
+ });
177
+ // ─── Workflows API ───────────────────────────────────────────────────
178
+ app.get('/api/workflows', (_req, res) => {
179
+ const jeticDir = path_1.default.join(process.cwd(), '.jetic');
180
+ try {
181
+ if (!fs_1.default.existsSync(jeticDir))
182
+ return res.json([]);
183
+ const files = fs_1.default.readdirSync(jeticDir).filter(f => f.endsWith('.json') && f !== 'model.json' && f !== 'memory.json');
184
+ const workflows = [];
185
+ for (const file of files) {
186
+ try {
187
+ const data = JSON.parse(fs_1.default.readFileSync(path_1.default.join(jeticDir, file), 'utf8'));
188
+ if (data.steps && Array.isArray(data.steps))
189
+ workflows.push({ _file: file, ...data });
190
+ }
191
+ catch { }
192
+ }
193
+ res.json(workflows);
194
+ }
195
+ catch (err) {
196
+ res.status(500).json({ error: err.message });
197
+ }
198
+ });
199
+ // ─── Workflow run – Server-Sent Events stream ─────────────────────────
200
+ app.post('/api/workflows/run', async (req, res) => {
201
+ const { file } = req.body;
202
+ if (!file) {
203
+ return res.status(400).json({ error: 'file is required' });
204
+ }
205
+ const jeticDir = path_1.default.join(process.cwd(), '.jetic');
206
+ const wfPath = path_1.default.join(jeticDir, file);
207
+ if (!fs_1.default.existsSync(wfPath)) {
208
+ return res.status(404).json({ error: 'workflow file not found' });
209
+ }
210
+ let workflow;
211
+ try {
212
+ workflow = JSON.parse(fs_1.default.readFileSync(wfPath, 'utf8'));
213
+ }
214
+ catch (e) {
215
+ return res.status(400).json({ error: e.message });
216
+ }
217
+ // ── Pre-load async imports BEFORE opening the SSE stream so that
218
+ // the async yield doesn't trigger req 'close' before the loop runs ──
219
+ const { JeticMemory: Mem } = await Promise.resolve().then(() => __importStar(require('@jetic/memory')));
220
+ const { faker } = await Promise.resolve().then(() => __importStar(require('@faker-js/faker')));
221
+ // SSE headers – opened AFTER imports so aborted stays false
222
+ res.setHeader('Content-Type', 'text/event-stream');
223
+ res.setHeader('Cache-Control', 'no-cache');
224
+ res.setHeader('Connection', 'keep-alive');
225
+ res.flushHeaders();
226
+ const send = (type, data) => {
227
+ res.write(`data: ${JSON.stringify({ type, ...data })}\n\n`);
228
+ };
229
+ // Resolve base URL from model
230
+ let baseUrl = 'http://localhost:4000';
231
+ const modelPath = path_1.default.join(jeticDir, 'model.json');
232
+ if (fs_1.default.existsSync(modelPath)) {
233
+ try {
234
+ const model = JSON.parse(fs_1.default.readFileSync(modelPath, 'utf8'));
235
+ const localEnv = (model.environments || []).find((e) => e.name === 'local');
236
+ if (localEnv)
237
+ baseUrl = localEnv.baseUrl;
238
+ }
239
+ catch { }
240
+ }
241
+ send('start', { name: workflow.name, totalSteps: workflow.steps.length, baseUrl });
242
+ // Register close handler AFTER flushing start — any close before this is irrelevant
243
+ let aborted = false;
244
+ req.on('close', () => { aborted = true; });
245
+ // ── inline the minimal executor (avoids importing CLI internals) ──
246
+ function deepGet(obj, dotPath) {
247
+ return dotPath.replace(/\[(\d+)\]/g, '.$1').split('.').reduce((o, k) => o?.[k], obj);
248
+ }
249
+ async function resolveTemplate(value) {
250
+ return value.replace(/\{\{([^}]+)\}\}/g, (_, expr) => {
251
+ expr = expr.trim();
252
+ if (expr.startsWith('faker.')) {
253
+ try {
254
+ let fn = faker;
255
+ for (const part of expr.split('.').slice(1))
256
+ fn = fn[part];
257
+ return typeof fn === 'function' ? String(fn()) : String(fn);
258
+ }
259
+ catch {
260
+ return expr;
261
+ }
262
+ }
263
+ return _; // memory refs handled below via async
264
+ });
265
+ // Note: memory template refs ({{scope:key}}) require async — handled separately
266
+ }
267
+ async function resolveMemoryTemplates(value) {
268
+ const matches = [...value.matchAll(/\{\{([^}]+)\}\}/g)];
269
+ let result = value;
270
+ for (const [placeholder, expr] of matches.map(m => [m[0], m[1].trim()])) {
271
+ if (expr.includes(':') && !expr.startsWith('faker.')) {
272
+ const [scope, key] = expr.split(':', 2);
273
+ const mem = new Mem({ scope });
274
+ const val = await mem.get(key);
275
+ result = result.replace(placeholder, val != null ? String(val) : '');
276
+ }
277
+ }
278
+ return result;
279
+ }
280
+ async function resolveStr(v) {
281
+ let s = await resolveTemplate(v);
282
+ s = await resolveMemoryTemplates(s);
283
+ return s;
284
+ }
285
+ async function executeStep(step) {
286
+ const startTime = Date.now();
287
+ const headers = { 'Content-Type': 'application/json' };
288
+ const bodyExtra = {};
289
+ // Resolve inject
290
+ for (const [target, memKeyOrTpl] of Object.entries(step.inject ?? {})) {
291
+ const strVal = memKeyOrTpl.includes('{{')
292
+ ? await resolveStr(memKeyOrTpl)
293
+ : await (async () => {
294
+ const [scope, key] = memKeyOrTpl.includes(':') ? memKeyOrTpl.split(':', 2) : ['workflow', memKeyOrTpl];
295
+ const val = await new Mem({ scope }).get(key);
296
+ return val != null ? String(val) : '';
297
+ })();
298
+ if (!strVal)
299
+ continue;
300
+ if (target.startsWith('body:'))
301
+ bodyExtra[target.slice(5)] = strVal;
302
+ else
303
+ headers[target.startsWith('header:') ? target.slice(7) : target] = strVal;
304
+ }
305
+ // Resolve body templates
306
+ const resolvedBody = {};
307
+ for (const [k, v] of Object.entries(step.body ?? {})) {
308
+ resolvedBody[k] = typeof v === 'string' ? await resolveStr(v) : v;
309
+ }
310
+ const requestBody = { ...bodyExtra, ...resolvedBody };
311
+ // captureInput
312
+ for (const [memKey, bodyField] of Object.entries(step.captureInput ?? {})) {
313
+ const val = requestBody[bodyField];
314
+ if (val != null) {
315
+ const [scope, key] = memKey.includes(':') ? memKey.split(':', 2) : ['workflow', memKey];
316
+ await new Mem({ scope }).set(key, val);
317
+ }
318
+ }
319
+ // Resolve path params
320
+ let resolvedPath = step.path.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, (_, p) => requestBody[p] !== undefined ? String(requestBody[p]) : `:${p}`);
321
+ // Also resolve {{}} in path
322
+ resolvedPath = await resolveStr(resolvedPath);
323
+ const finalUrl = `${baseUrl.replace(/\/$/, '')}${resolvedPath}`;
324
+ const expectedStatus = step.expectStatus ?? 200;
325
+ try {
326
+ const isBodyMethod = !['GET', 'HEAD'].includes(step.method.toUpperCase());
327
+ const fetchOpts = { method: step.method.toUpperCase(), headers };
328
+ if (isBodyMethod && Object.keys(requestBody).length > 0) {
329
+ fetchOpts.body = JSON.stringify(requestBody);
330
+ }
331
+ else if (!isBodyMethod && Object.keys(requestBody).length > 0) {
332
+ const params = new URLSearchParams();
333
+ for (const [k, v] of Object.entries(requestBody))
334
+ if (v != null)
335
+ params.set(k, String(v));
336
+ // Don't append query params for now — keep simple
337
+ }
338
+ const response = await fetch(finalUrl, fetchOpts);
339
+ const durationMs = Date.now() - startTime;
340
+ let responseBody = null;
341
+ const ct = response.headers.get('content-type') ?? '';
342
+ if (ct.includes('application/json')) {
343
+ try {
344
+ responseBody = await response.json();
345
+ }
346
+ catch { }
347
+ }
348
+ else {
349
+ responseBody = await response.text();
350
+ }
351
+ const passed = response.status === expectedStatus ||
352
+ (response.status >= 200 && response.status < 300 && expectedStatus >= 200 && expectedStatus < 300);
353
+ // Capture
354
+ const captured = [];
355
+ if (passed) {
356
+ for (const [memKey, responsePath] of Object.entries(step.capture ?? {})) {
357
+ const val = deepGet(responseBody, responsePath);
358
+ if (val != null) {
359
+ const [scope, key] = memKey.includes(':') ? memKey.split(':', 2) : ['workflow', memKey];
360
+ await new Mem({ scope }).set(key, val);
361
+ captured.push(`${memKey} ← ${responsePath}`);
362
+ }
363
+ }
364
+ }
365
+ return { status: response.status, passed, durationMs, captured, injected: headers, responseBody, error: null };
366
+ }
367
+ catch (err) {
368
+ return { status: 0, passed: false, durationMs: Date.now() - startTime, captured: [], injected: headers, responseBody: null, error: err.message };
369
+ }
370
+ }
371
+ // ── Execute steps, emitting SSE events ──
372
+ let passed = 0;
373
+ let failed = 0;
374
+ for (let i = 0; i < workflow.steps.length; i++) {
375
+ if (aborted)
376
+ break;
377
+ const step = workflow.steps[i];
378
+ send('step_start', { index: i, step: { name: step.name, method: step.method, path: step.path } });
379
+ const result = await executeStep(step);
380
+ if (result.passed)
381
+ passed++;
382
+ else
383
+ failed++;
384
+ send('step_result', {
385
+ index: i,
386
+ step: { name: step.name, method: step.method, path: step.path, description: step.description },
387
+ status: result.status,
388
+ passed: result.passed,
389
+ durationMs: result.durationMs,
390
+ captured: result.captured,
391
+ injected: result.injected,
392
+ responseBody: result.responseBody,
393
+ error: result.error,
394
+ });
395
+ // Only abort the chain if the step explicitly failed AND continueOnFailure is not set
396
+ // AND the failure is a hard error (not just a bad status code)
397
+ if (!result.passed && !step.continueOnFailure && result.error) {
398
+ send('aborted', { index: i, reason: result.error ?? `Status ${result.status} ≠ ${step.expectStatus ?? 200}` });
399
+ res.end();
400
+ return;
401
+ }
402
+ }
403
+ send('done', { passed, failed, total: workflow.steps.length });
404
+ res.end();
405
+ });
406
+ // Memory API
407
+ app.get('/api/memory', (_req, res) => {
408
+ try {
409
+ const allMemory = memory_1.JeticMemory.getAllMemory();
410
+ const entries = [];
411
+ for (const scope in allMemory) {
412
+ for (const key in allMemory[scope]) {
413
+ entries.push({ key: `${scope}:${key}`, value: allMemory[scope][key] });
414
+ }
415
+ }
416
+ res.json(entries);
417
+ }
418
+ catch (err) {
419
+ res.status(500).json({ error: err.message });
420
+ }
421
+ });
422
+ app.post('/api/memory', async (req, res) => {
423
+ const { key: rawKey, value } = req.body;
424
+ if (!rawKey || value === undefined) {
425
+ return res.status(400).json({ error: 'key and value are required' });
426
+ }
427
+ const parts = rawKey.split(':');
428
+ const scope = parts.length > 1 ? parts[0] : 'global';
429
+ const key = parts.length > 1 ? parts.slice(1).join(':') : parts[0];
430
+ const memory = new memory_1.JeticMemory({ scope });
431
+ await memory.set(key, value);
432
+ res.json({ ok: true });
433
+ });
434
+ app.delete('/api/memory', async (req, res) => {
435
+ const { key: rawKey } = req.body;
436
+ if (!rawKey) {
437
+ return res.status(400).json({ error: 'key is required' });
438
+ }
439
+ const parts = rawKey.split(':');
440
+ const scope = parts.length > 1 ? parts[0] : 'global';
441
+ const key = parts.length > 1 ? parts.slice(1).join(':') : parts[0];
442
+ const memory = new memory_1.JeticMemory({ scope });
443
+ await memory.delete(key);
444
+ res.json({ ok: true });
445
+ });
446
+ // We use the dashboard dist folder from the workspace node_modules
447
+ // since we've added @jetic/dashboard as a dependency.
448
+ try {
449
+ const dashboardPackagePath = require.resolve('@jetic/dashboard/package.json');
450
+ const dashboardDistPath = path_1.default.join(path_1.default.dirname(dashboardPackagePath), 'dist');
451
+ if (!fs_1.default.existsSync(dashboardDistPath)) {
452
+ console.warn(`Dashboard build not found at ${dashboardDistPath}. Please build the dashboard first.`);
453
+ }
454
+ // Serve static files
455
+ app.use(express_1.default.static(dashboardDistPath));
456
+ // SPA fallback
457
+ app.get('*', (req, res) => {
458
+ const indexPath = path_1.default.join(dashboardDistPath, 'index.html');
459
+ if (fs_1.default.existsSync(indexPath)) {
460
+ res.sendFile(indexPath);
461
+ }
462
+ else {
463
+ res.status(404).send('Dashboard not built yet.');
464
+ }
465
+ });
466
+ }
467
+ catch (e) {
468
+ console.error('Could not find @jetic/dashboard. Ensure it is installed and built.', e);
469
+ }
470
+ app.listen(port, () => {
471
+ const url = `http://localhost:${port}`;
472
+ console.log(`\n🚀 Jetic Studio is running at ${url}\n`);
473
+ const { exec } = require('child_process');
474
+ const start = (process.platform == 'darwin' ? 'open' : process.platform == 'win32' ? 'start' : 'xdg-open');
475
+ exec(`${start} ${url}`);
476
+ });
477
+ });
478
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const initCommand: Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SA0DpB,CAAC"}