@mytecz/teczflow-cli 1.0.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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { TeczFlowEngine, parseErrorDescription } from '@mytecz/teczflow-core';
4
+ import { resolve } from 'node:path';
5
+ import { existsSync } from 'node:fs';
6
+ const program = new Command();
7
+ program
8
+ .name('teczflow')
9
+ .description('TeczFlow — AI API Intelligence Platform CLI')
10
+ .version('1.0.0')
11
+ .option('-c, --config <path>', 'Path to config.json')
12
+ .option('-t, --tenant <id>', 'Tenant ID');
13
+ function getEngine(opts) {
14
+ return new TeczFlowEngine(opts.config);
15
+ }
16
+ function detectFormat(path) {
17
+ if (path.includes('postman'))
18
+ return 'postman';
19
+ if (path.endsWith('.graphql') || path.endsWith('.gql'))
20
+ return 'graphql';
21
+ if (path.includes('git'))
22
+ return 'git';
23
+ if (path.includes('log') || path.includes('telemetry'))
24
+ return 'logs';
25
+ return 'openapi';
26
+ }
27
+ program
28
+ .command('load')
29
+ .description('Load an API spec or fixture into the knowledge graph')
30
+ .argument('<spec>', 'Path to spec file (OpenAPI, Postman, GraphQL, logs, git)')
31
+ .action(async (spec, _opts, cmd) => {
32
+ const globalOpts = cmd.parent?.opts() ?? {};
33
+ const engine = getEngine(globalOpts);
34
+ if (globalOpts.tenant)
35
+ engine.setActiveTenant(globalOpts.tenant);
36
+ const path = resolve(spec);
37
+ if (!existsSync(path)) {
38
+ console.error(`File not found: ${path}`);
39
+ process.exit(1);
40
+ }
41
+ const format = detectFormat(path);
42
+ const result = await engine.load({ type: 'file', path, format });
43
+ console.log(`Loaded ${format} spec: +${result.nodesAdded} nodes, +${result.edgesAdded} edges`);
44
+ });
45
+ program
46
+ .command('query')
47
+ .description('Search APIs using natural language')
48
+ .argument('<text>', 'Search query')
49
+ .action(async (text, _opts, cmd) => {
50
+ const globalOpts = cmd.parent?.opts() ?? {};
51
+ const engine = getEngine(globalOpts);
52
+ await bootstrapFixtures(engine);
53
+ if (globalOpts.tenant)
54
+ engine.setActiveTenant(globalOpts.tenant);
55
+ const results = engine.getServices().search.search(text);
56
+ if (results.length === 0) {
57
+ console.log('No results found.');
58
+ return;
59
+ }
60
+ for (const r of results) {
61
+ console.log(`[${r.score}] ${r.type}: ${r.label}`);
62
+ console.log(` ${r.snippet}`);
63
+ }
64
+ });
65
+ program
66
+ .command('debug')
67
+ .description('Explain an API error')
68
+ .argument('<description>', 'Error description e.g. "POST /order failed 400"')
69
+ .action(async (description, _opts, cmd) => {
70
+ const globalOpts = cmd.parent?.opts() ?? {};
71
+ const engine = getEngine(globalOpts);
72
+ await bootstrapFixtures(engine);
73
+ if (globalOpts.tenant)
74
+ engine.setActiveTenant(globalOpts.tenant);
75
+ const parsed = parseErrorDescription(description);
76
+ const result = engine.getServices().debug.explain(`${parsed.method ?? 'POST'} ${parsed.path ?? '/orders'}`, {}, { status: parsed.status ?? 400 });
77
+ console.log(`Conclusion (${result.confidence}): ${result.conclusion}`);
78
+ console.log('\nEvidence:');
79
+ for (const e of result.evidence) {
80
+ console.log(` - [${e.type}] ${e.detail}`);
81
+ }
82
+ if (result.suggestedNextSteps?.length) {
83
+ console.log('\nSuggested next steps:');
84
+ for (const s of result.suggestedNextSteps) {
85
+ console.log(` - ${s}`);
86
+ }
87
+ }
88
+ });
89
+ program
90
+ .command('workflow')
91
+ .description('Infer a business workflow')
92
+ .argument('<goal>', 'Workflow goal e.g. "checkout process"')
93
+ .action(async (goal, _opts, cmd) => {
94
+ const globalOpts = cmd.parent?.opts() ?? {};
95
+ const engine = getEngine(globalOpts);
96
+ await bootstrapFixtures(engine);
97
+ if (globalOpts.tenant)
98
+ engine.setActiveTenant(globalOpts.tenant);
99
+ const result = engine.getServices().workflow.infer(goal);
100
+ console.log(`${result.conclusion} (${result.confidence})`);
101
+ console.log('\nSteps:');
102
+ for (const step of result.steps) {
103
+ console.log(` ${step.order}. ${step.method} ${step.path} — ${step.reason}`);
104
+ }
105
+ });
106
+ program
107
+ .command('graph')
108
+ .description('Show API graph for a service or API')
109
+ .argument('<name>', 'API or service name')
110
+ .action(async (name, _opts, cmd) => {
111
+ const globalOpts = cmd.parent?.opts() ?? {};
112
+ const engine = getEngine(globalOpts);
113
+ await bootstrapFixtures(engine);
114
+ if (globalOpts.tenant)
115
+ engine.setActiveTenant(globalOpts.tenant);
116
+ const graph = engine.getServices().graphService.getApiGraph(name);
117
+ console.log(`Graph for: ${graph.api}`);
118
+ console.log(`Nodes: ${graph.nodes.length}, Edges: ${graph.edges.length}`);
119
+ console.log('\nNodes:');
120
+ for (const n of graph.nodes) {
121
+ console.log(` [${n?.type}] ${n?.label}`);
122
+ }
123
+ console.log('\nEdges:');
124
+ for (const e of graph.edges.slice(0, 20)) {
125
+ console.log(` ${e.source} --${e.type}--> ${e.target}`);
126
+ }
127
+ });
128
+ async function bootstrapFixtures(engine) {
129
+ const config = engine.getConfigManager();
130
+ const base = config.getBaseDir();
131
+ const fixtures = [
132
+ { path: resolve(base, 'fixtures/shopflow.openapi.yaml'), format: 'openapi' },
133
+ { path: resolve(base, 'fixtures/shopflow.postman.json'), format: 'postman' },
134
+ { path: resolve(base, 'fixtures/telemetry/checkout-errors.json'), format: 'logs' },
135
+ { path: resolve(base, 'fixtures/git/payment-schema-change.json'), format: 'git' }
136
+ ];
137
+ for (const f of fixtures) {
138
+ if (existsSync(f.path)) {
139
+ try {
140
+ await engine.load({ type: 'file', path: f.path, format: f.format });
141
+ }
142
+ catch {
143
+ // ignore duplicate loads
144
+ }
145
+ }
146
+ }
147
+ await engine.refreshTelemetry();
148
+ }
149
+ program.parse();
150
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;AAE5C,SAAS,SAAS,CAAC,IAAyB;IAC1C,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACzE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IACtE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sDAAsD,CAAC;KACnE,QAAQ,CAAC,QAAQ,EAAE,0DAA0D,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACzC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,UAAU,CAAC,MAAM;QAAE,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,WAAW,MAAM,CAAC,UAAU,YAAY,MAAM,CAAC,UAAU,QAAQ,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oCAAoC,CAAC;KACjD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACzC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM;QAAE,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sBAAsB,CAAC;KACnC,QAAQ,CAAC,eAAe,EAAE,iDAAiD,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAE,WAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAChD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM;QAAE,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAC/C,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,EAAE,EACxD,EAAE,EACF,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CACjC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,2BAA2B,CAAC;KACxC,QAAQ,CAAC,QAAQ,EAAE,uCAAuC,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACzC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM;QAAE,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qCAAqC,CAAC;KAClD,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACzC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM;QAAE,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,KAAK,UAAU,iBAAiB,CAAC,MAAsB;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG;QACf,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,gCAAgC,CAAC,EAAE,MAAM,EAAE,SAAkB,EAAE;QACrF,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,gCAAgC,CAAC,EAAE,MAAM,EAAE,SAAkB,EAAE;QACrF,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,yCAAyC,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE;QAC3F,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,yCAAyC,CAAC,EAAE,MAAM,EAAE,KAAc,EAAE;KAC3F,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAC;AAClC,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@mytecz/teczflow-cli",
3
+ "version": "1.0.0",
4
+ "description": "TeczFlow CLI — API intelligence from the command line",
5
+ "type": "module",
6
+ "bin": {
7
+ "teczflow": "./dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc -p tsconfig.json",
15
+ "start": "node dist/index.js",
16
+ "prepublishOnly": "npm run build"
17
+ },
18
+ "dependencies": {
19
+ "@mytecz/teczflow-core": "^1.0.0",
20
+ "commander": "^14.0.0"
21
+ },
22
+ "devDependencies": {
23
+ "@mytecz/teczflow-core": "*",
24
+ "@types/node": "^22.15.30",
25
+ "typescript": "^5.8.3"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/kalyanakkondapalli/teczflow.git",
33
+ "directory": "packages/cli"
34
+ },
35
+ "bugs": {
36
+ "url": "https://github.com/kalyanakkondapalli/teczflow/issues"
37
+ },
38
+ "homepage": "https://github.com/kalyanakkondapalli/teczflow#readme",
39
+ "keywords": [
40
+ "teczflow",
41
+ "cli",
42
+ "api-intelligence",
43
+ "openapi"
44
+ ],
45
+ "engines": {
46
+ "node": ">=20"
47
+ },
48
+ "license": "MIT"
49
+ }