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,91 @@
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.initCommand = void 0;
37
+ const commander_1 = require("commander");
38
+ const core_1 = require("@jetic/core");
39
+ const readline = __importStar(require("readline/promises"));
40
+ const process_1 = require("process");
41
+ exports.initCommand = new commander_1.Command('init')
42
+ .description('Initialize Jetic in the current directory')
43
+ .action(async () => {
44
+ const config = (0, core_1.loadConfig)();
45
+ (0, core_1.ensureDirSync)(config.jeticDir);
46
+ console.log('\x1b[36mWelcome to Jetic Initialization\x1b[0m\n');
47
+ const rl = readline.createInterface({ input: process_1.stdin, output: process_1.stdout });
48
+ const providerInput = await rl.question('AI Provider [default: openrouter]: ');
49
+ const modelInput = await rl.question('Model name [default: meta-llama/llama-3.1-8b-instruct]: ');
50
+ const apiKeyInput = await rl.question('API Key: ');
51
+ rl.close();
52
+ const provider = providerInput.trim() || 'openrouter';
53
+ const envVarName = `${provider.toUpperCase()}_API_KEY`;
54
+ config.ai = {
55
+ provider: provider,
56
+ model: modelInput.trim() || 'meta-llama/llama-3.1-8b-instruct',
57
+ apiKeyEnvVar: envVarName
58
+ };
59
+ (0, core_1.saveConfig)(config);
60
+ if (apiKeyInput.trim()) {
61
+ const fs = require('fs');
62
+ const envPath = require('path').join(process.cwd(), '.env');
63
+ const envContent = `\n${envVarName}=${apiKeyInput.trim()}\n`;
64
+ fs.appendFileSync(envPath, envContent);
65
+ console.log(`\n\x1b[32m✓\x1b[0m Saved API key to .env file as ${envVarName}`);
66
+ console.log(`(Alternatively, you can run: set ${envVarName}=${apiKeyInput.trim()})\n`);
67
+ }
68
+ const banner = `
69
+ \x1b[36m
70
+ __ __ _ _____
71
+ \\ \\ / /__| | ___ ___ _ __ ___ ___ |_ _|__
72
+ \\ \\ /\\ / / _ \\ |/ __/ _ \\| '_ \` _ \\ / _ \\ | |/ _ \\
73
+ \\ V V / __/ | (_| (_) | | | | | | __/ | | (_) |
74
+ \\_/\\_/ \\___|_|\\___\\___/|_| |_| |_|\\___| |_|\\___/
75
+
76
+ _ _____ _____ ___ ___
77
+ | | ____|_ _|_ _/ __|
78
+ _ | | _| | | | | |
79
+ | |_| | |___ | | | | |__
80
+ \\___/|_____| |_| |___\\___|
81
+ \x1b[0m`;
82
+ console.log(banner);
83
+ console.log(`\x1b[32m✓\x1b[0m Successfully initialized Jetic in \x1b[1m${config.jeticDir}\x1b[0m\n`);
84
+ console.log('Available Commands:');
85
+ console.log(' \x1b[36mjetic init\x1b[0m Initialize Jetic in the current directory');
86
+ console.log(' \x1b[36mjetic scan\x1b[0m Scan the project for API routes and generate behavioral model');
87
+ console.log(' \x1b[36mjetic inspect\x1b[0m Inspect discovered endpoints and details');
88
+ console.log(' \x1b[36mjetic config\x1b[0m Manage Jetic AI provider and settings');
89
+ console.log('');
90
+ });
91
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,sCAAoE;AACpE,4DAA8C;AAC9C,qCAA2D;AAE9C,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,IAAA,iBAAU,GAAE,CAAC;IAC5B,IAAA,oBAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAEhE,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAL,eAAK,EAAE,MAAM,EAAN,gBAAM,EAAE,CAAC,CAAC;IAEvD,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC,CAAC;IACjG,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEnD,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC;IACtD,MAAM,UAAU,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IAEvD,MAAM,CAAC,EAAE,GAAG;QACV,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,kCAAkC;QAC9D,YAAY,EAAE,UAAU;KACzB,CAAC;IACF,IAAA,iBAAU,EAAC,MAAM,CAAC,CAAC;IAEnB,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,KAAK,UAAU,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;QAC7D,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,oDAAoD,UAAU,EAAE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,oCAAoC,UAAU,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,MAAM,GAAG;;;;;;;;;;;;;QAaX,CAAC;IAEL,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,6DAA6D,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAC;IAC7G,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const inspectCommand: Command;
3
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,cAAc,SAkBvB,CAAC"}
@@ -0,0 +1,73 @@
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.inspectCommand = void 0;
37
+ const commander_1 = require("commander");
38
+ const core_1 = require("@jetic/core");
39
+ const path = __importStar(require("path"));
40
+ exports.inspectCommand = new commander_1.Command('inspect')
41
+ .description('Inspect the discovered API model')
42
+ .action(() => {
43
+ const config = (0, core_1.loadConfig)();
44
+ const modelPath = path.join(config.jeticDir, 'model.json');
45
+ const model = (0, core_1.readJsonSync)(modelPath);
46
+ if (!model) {
47
+ console.error('No behavioral model found. Run `jetic scan` first.');
48
+ return;
49
+ }
50
+ console.log(`Model Version: ${model.version}`);
51
+ console.log(`Endpoints (${model.endpoints.length}):\n`);
52
+ for (const ep of model.endpoints) {
53
+ console.log(`${ep.method} ${ep.path}`);
54
+ }
55
+ });
56
+ exports.inspectCommand
57
+ .command('endpoint <method> <path>')
58
+ .description('Inspect a specific endpoint')
59
+ .action((method, urlPath) => {
60
+ const config = (0, core_1.loadConfig)();
61
+ const modelPath = path.join(config.jeticDir, 'model.json');
62
+ const model = (0, core_1.readJsonSync)(modelPath);
63
+ if (!model)
64
+ return;
65
+ const ep = model.endpoints.find(e => e.method.toLowerCase() === method.toLowerCase() && e.path === urlPath);
66
+ if (!ep) {
67
+ console.error('Endpoint not found');
68
+ return;
69
+ }
70
+ console.log(`${ep.method} ${ep.path}\n`);
71
+ console.log(`Source:\n ${ep.source.file}:${ep.source.line}`);
72
+ });
73
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,sCAAuD;AAEvD,2CAA6B;AAEhB,QAAA,cAAc,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,MAAM,GAAG,IAAA,iBAAU,GAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAA,mBAAY,EAAkB,SAAS,CAAC,CAAC;IAEvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,CAAC;IAExD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,sBAAc;KACX,OAAO,CAAC,0BAA0B,CAAC;KACnC,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,IAAA,iBAAU,GAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAA,mBAAY,EAAkB,SAAS,CAAC,CAAC;IAEvD,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAC3E,CAAC;IAEF,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACpC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const memoryCommand: Command;
3
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SA0BtB,CAAC"}
@@ -0,0 +1,96 @@
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.memoryCommand = void 0;
37
+ const commander_1 = require("commander");
38
+ const memory_1 = require("@jetic/memory");
39
+ const readline = __importStar(require("readline/promises"));
40
+ const process_1 = require("process");
41
+ exports.memoryCommand = new commander_1.Command('memory')
42
+ .description('Manage Jetic memory state')
43
+ .action(() => {
44
+ const allMemory = memory_1.JeticMemory.getAllMemory();
45
+ let sn = 1;
46
+ const tableData = [];
47
+ for (const scope in allMemory) {
48
+ for (const key in allMemory[scope]) {
49
+ const value = allMemory[scope][key];
50
+ const text = typeof value === 'object' ? JSON.stringify(value) : String(value);
51
+ tableData.push({
52
+ 'S/N': sn++,
53
+ 'KEY': `${scope}:${key}`,
54
+ 'TEXT': text.length > 50 ? text.substring(0, 47) + '...' : text
55
+ });
56
+ }
57
+ }
58
+ if (tableData.length === 0) {
59
+ console.log('Memory is empty.');
60
+ }
61
+ else {
62
+ console.table(tableData, ['S/N', 'KEY', 'TEXT']);
63
+ }
64
+ });
65
+ exports.memoryCommand
66
+ .command('add')
67
+ .description('Add a new entry to memory interactively')
68
+ .action(async () => {
69
+ const rl = readline.createInterface({ input: process_1.stdin, output: process_1.stdout });
70
+ const keyInput = await rl.question('Key/Identifier: ');
71
+ if (!keyInput.trim()) {
72
+ console.log('Key is required.');
73
+ rl.close();
74
+ return;
75
+ }
76
+ const textInput = await rl.question('Text: ');
77
+ rl.close();
78
+ const parts = keyInput.trim().split(':');
79
+ let scope = 'global';
80
+ let key = parts[0];
81
+ if (parts.length > 1) {
82
+ scope = parts[0];
83
+ key = parts.slice(1).join(':');
84
+ }
85
+ const memory = new memory_1.JeticMemory({ scope });
86
+ await memory.set(key, textInput);
87
+ console.log(`\x1b[32m✓\x1b[0m Successfully added ${keyInput.trim()} to memory.`);
88
+ });
89
+ exports.memoryCommand
90
+ .command('clear')
91
+ .description('Clear memory')
92
+ .action(() => {
93
+ memory_1.JeticMemory.clearAllMemory();
94
+ console.log('Memory cleared.');
95
+ });
96
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const scanCommand: Command;
3
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAgBpB,CAAC"}
@@ -0,0 +1,54 @@
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.scanCommand = void 0;
37
+ const commander_1 = require("commander");
38
+ const core_1 = require("@jetic/core");
39
+ const scanner_1 = require("@jetic/scanner");
40
+ const path = __importStar(require("path"));
41
+ exports.scanCommand = new commander_1.Command('scan')
42
+ .description('Scan the project for API routes')
43
+ .action(async () => {
44
+ console.log('Jetic API Intelligence\nScanning project...\n');
45
+ const config = (0, core_1.loadConfig)();
46
+ (0, core_1.ensureDirSync)(config.jeticDir);
47
+ const scanner = new scanner_1.ExpressScanner(config);
48
+ const model = await scanner.scan();
49
+ const modelPath = path.join(config.jeticDir, 'model.json');
50
+ (0, core_1.writeJsonSync)(modelPath, model);
51
+ console.log(`✓ Discovered ${model.endpoints.length} endpoints`);
52
+ console.log(`Behavioral model generated at ${modelPath}`);
53
+ });
54
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,sCAAuE;AACvE,4CAAgD;AAChD,2CAA6B;AAEhB,QAAA,WAAW,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,IAAA,iBAAU,GAAE,CAAC;IAC5B,IAAA,oBAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/B,MAAM,OAAO,GAAG,IAAI,wBAAc,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC3D,IAAA,oBAAa,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,SAAS,CAAC,MAAM,YAAY,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { Command } from 'commander';
2
+ export interface WorkflowStepDef {
3
+ /** Step label e.g. "Register User" */
4
+ name: string;
5
+ /** HTTP method */
6
+ method: string;
7
+ /** Endpoint path from the model e.g. "/api/auth/register" */
8
+ path: string;
9
+ /** Description of what this step does */
10
+ description?: string;
11
+ /**
12
+ * Memory keys to read and inject before executing this step.
13
+ * Format: { "Authorization": "workflow:accessToken" } means read
14
+ * key `accessToken` from scope `workflow` and set request header `Authorization`.
15
+ * Prefix with `header:` for headers, `body:` for body fields (default: header).
16
+ */
17
+ inject?: Record<string, string>;
18
+ /**
19
+ * Response fields to capture into Jetic memory after a successful step.
20
+ * Format: { "workflow:accessToken": "data.accessToken" } means read
21
+ * `data.accessToken` from the response body and store it under key
22
+ * `accessToken` in scope `workflow`.
23
+ */
24
+ capture?: Record<string, string>;
25
+ /**
26
+ * Request body fields to capture into Jetic memory BEFORE the HTTP call.
27
+ * Useful for saving faker-generated values (email, password, etc.) so that
28
+ * later steps can reference them via {{workflow:key}}.
29
+ * Format: { "workflow:adminEmail": "admin_email" } reads the resolved
30
+ * request body field `admin_email` and stores it as `workflow:adminEmail`.
31
+ */
32
+ captureInput?: Record<string, string>;
33
+ /** Expected HTTP status code (default 200) */
34
+ expectStatus?: number;
35
+ /** Hardcoded request body overrides */
36
+ body?: Record<string, any>;
37
+ }
38
+ export interface WorkflowDef {
39
+ name: string;
40
+ description?: string;
41
+ generatedAt: string;
42
+ environment?: string;
43
+ steps: WorkflowStepDef[];
44
+ }
45
+ export declare const simulateWorkflowCommand: Command;
46
+ //# sourceMappingURL=simulate-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulate-workflow.d.ts","sourceRoot":"","sources":["../../src/commands/simulate-workflow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyDpC,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAwgBD,eAAO,MAAM,uBAAuB,SA2KhC,CAAC"}