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.
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +36 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dev.d.ts +3 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +478 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +91 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inspect.d.ts +3 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +73 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/memory.d.ts +3 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +96 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +54 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/simulate-workflow.d.ts +46 -0
- package/dist/commands/simulate-workflow.d.ts.map +1 -0
- package/dist/commands/simulate-workflow.js +671 -0
- package/dist/commands/simulate-workflow.js.map +1 -0
- package/dist/commands/simulate.d.ts +3 -0
- package/dist/commands/simulate.d.ts.map +1 -0
- package/dist/commands/simulate.js +482 -0
- package/dist/commands/simulate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/package.json +30 -0
- package/src/commands/config.ts +36 -0
- package/src/commands/dev.ts +451 -0
- package/src/commands/init.ts +64 -0
- package/src/commands/inspect.ts +47 -0
- package/src/commands/memory.ts +71 -0
- package/src/commands/scan.ts +22 -0
- package/src/commands/simulate-workflow.ts +794 -0
- package/src/commands/simulate.ts +512 -0
- package/src/index.ts +26 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|