@mytecz/teczflow-core 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.
Files changed (62) hide show
  1. package/assets/config.json +32 -0
  2. package/assets/fixtures/git/payment-schema-change.json +14 -0
  3. package/assets/fixtures/shopflow.openapi.yaml +178 -0
  4. package/assets/fixtures/shopflow.postman.json +60 -0
  5. package/assets/fixtures/telemetry/checkout-errors.json +87 -0
  6. package/dist/adapters/git.adapter.d.ts +11 -0
  7. package/dist/adapters/git.adapter.d.ts.map +1 -0
  8. package/dist/adapters/git.adapter.js +61 -0
  9. package/dist/adapters/git.adapter.js.map +1 -0
  10. package/dist/adapters/graphql.adapter.d.ts +11 -0
  11. package/dist/adapters/graphql.adapter.d.ts.map +1 -0
  12. package/dist/adapters/graphql.adapter.js +86 -0
  13. package/dist/adapters/graphql.adapter.js.map +1 -0
  14. package/dist/adapters/logs.adapter.d.ts +11 -0
  15. package/dist/adapters/logs.adapter.d.ts.map +1 -0
  16. package/dist/adapters/logs.adapter.js +47 -0
  17. package/dist/adapters/logs.adapter.js.map +1 -0
  18. package/dist/adapters/openapi.adapter.d.ts +12 -0
  19. package/dist/adapters/openapi.adapter.d.ts.map +1 -0
  20. package/dist/adapters/openapi.adapter.js +143 -0
  21. package/dist/adapters/openapi.adapter.js.map +1 -0
  22. package/dist/adapters/postman.adapter.d.ts +11 -0
  23. package/dist/adapters/postman.adapter.d.ts.map +1 -0
  24. package/dist/adapters/postman.adapter.js +91 -0
  25. package/dist/adapters/postman.adapter.js.map +1 -0
  26. package/dist/adapters/telemetry.adapter.d.ts +32 -0
  27. package/dist/adapters/telemetry.adapter.d.ts.map +1 -0
  28. package/dist/adapters/telemetry.adapter.js +61 -0
  29. package/dist/adapters/telemetry.adapter.js.map +1 -0
  30. package/dist/core/config.manager.d.ts +17 -0
  31. package/dist/core/config.manager.d.ts.map +1 -0
  32. package/dist/core/config.manager.js +133 -0
  33. package/dist/core/config.manager.js.map +1 -0
  34. package/dist/core/graph.engine.d.ts +29 -0
  35. package/dist/core/graph.engine.d.ts.map +1 -0
  36. package/dist/core/graph.engine.js +207 -0
  37. package/dist/core/graph.engine.js.map +1 -0
  38. package/dist/core/graph.store.d.ts +10 -0
  39. package/dist/core/graph.store.d.ts.map +1 -0
  40. package/dist/core/graph.store.js +17 -0
  41. package/dist/core/graph.store.js.map +1 -0
  42. package/dist/core/reasoning.engine.d.ts +37 -0
  43. package/dist/core/reasoning.engine.d.ts.map +1 -0
  44. package/dist/core/reasoning.engine.js +265 -0
  45. package/dist/core/reasoning.engine.js.map +1 -0
  46. package/dist/core/telemetry.normalizer.d.ts +11 -0
  47. package/dist/core/telemetry.normalizer.d.ts.map +1 -0
  48. package/dist/core/telemetry.normalizer.js +87 -0
  49. package/dist/core/telemetry.normalizer.js.map +1 -0
  50. package/dist/index.d.ts +47 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +136 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/services/index.d.ts +70 -0
  55. package/dist/services/index.d.ts.map +1 -0
  56. package/dist/services/index.js +181 -0
  57. package/dist/services/index.js.map +1 -0
  58. package/dist/types/index.d.ts +187 -0
  59. package/dist/types/index.d.ts.map +1 -0
  60. package/dist/types/index.js +2 -0
  61. package/dist/types/index.js.map +1 -0
  62. package/package.json +55 -0
@@ -0,0 +1,187 @@
1
+ export type NodeType = 'API' | 'Endpoint' | 'Schema' | 'Service' | 'Auth' | 'Workflow' | 'Tag' | 'Parameter' | 'Response';
2
+ export type EdgeType = 'depends_on' | 'calls' | 'uses_schema' | 'belongs_to' | 'triggers' | 'observed_calls' | 'observed_error' | 'monitored_by' | 'tagged_with' | 'implements';
3
+ export interface GraphNode {
4
+ id: string;
5
+ type: NodeType;
6
+ label: string;
7
+ properties: Record<string, unknown>;
8
+ }
9
+ export interface GraphEdge {
10
+ id: string;
11
+ source: string;
12
+ target: string;
13
+ type: EdgeType;
14
+ properties?: Record<string, unknown>;
15
+ }
16
+ export interface GraphSnapshot {
17
+ tenantId: string;
18
+ nodes: GraphNode[];
19
+ edges: GraphEdge[];
20
+ updatedAt: string;
21
+ }
22
+ export interface TenantContext {
23
+ tenantId: string;
24
+ }
25
+ export interface Evidence {
26
+ type: 'schema' | 'graph' | 'telemetry' | 'rule' | 'tag' | 'git' | 'log';
27
+ detail: string;
28
+ nodeId?: string;
29
+ source?: string;
30
+ }
31
+ export type Confidence = 'high' | 'medium' | 'low';
32
+ export interface ReasoningResult {
33
+ conclusion: string;
34
+ confidence: Confidence;
35
+ evidence: Evidence[];
36
+ suggestedNextSteps?: string[];
37
+ }
38
+ export interface WorkflowStep {
39
+ order: number;
40
+ endpointId: string;
41
+ method: string;
42
+ path: string;
43
+ label: string;
44
+ reason: string;
45
+ }
46
+ export interface WorkflowResult extends ReasoningResult {
47
+ steps: WorkflowStep[];
48
+ goal: string;
49
+ }
50
+ export interface ImpactItem {
51
+ nodeId: string;
52
+ type: NodeType;
53
+ label: string;
54
+ impact: string;
55
+ severity: 'high' | 'medium' | 'low';
56
+ }
57
+ export interface ImpactResult extends ReasoningResult {
58
+ changedNodeId: string;
59
+ affected: ImpactItem[];
60
+ }
61
+ export interface ApiSummary {
62
+ apiId: string;
63
+ name: string;
64
+ description?: string;
65
+ endpointCount: number;
66
+ services: string[];
67
+ tags: string[];
68
+ authSchemes: string[];
69
+ }
70
+ export interface EndpointInfo {
71
+ id: string;
72
+ method: string;
73
+ path: string;
74
+ operationId?: string;
75
+ summary?: string;
76
+ tags: string[];
77
+ apiId: string;
78
+ }
79
+ export interface SearchResult {
80
+ nodeId: string;
81
+ type: NodeType;
82
+ label: string;
83
+ score: number;
84
+ snippet: string;
85
+ }
86
+ export interface NormalizedLogEvent {
87
+ timestamp: string;
88
+ method?: string;
89
+ path?: string;
90
+ status?: number;
91
+ latencyMs?: number;
92
+ message?: string;
93
+ service?: string;
94
+ requestId?: string;
95
+ }
96
+ export interface NormalizedMetricPoint {
97
+ name: string;
98
+ value: number;
99
+ unit?: string;
100
+ timestamp: string;
101
+ tags?: Record<string, string>;
102
+ }
103
+ export interface NormalizedSpan {
104
+ traceId: string;
105
+ spanId: string;
106
+ parentSpanId?: string;
107
+ serviceName: string;
108
+ operationName: string;
109
+ httpMethod?: string;
110
+ httpRoute?: string;
111
+ statusCode?: number;
112
+ durationMs: number;
113
+ timestamp: string;
114
+ }
115
+ export interface NormalizedSignals {
116
+ logs: NormalizedLogEvent[];
117
+ metrics: NormalizedMetricPoint[];
118
+ traces: NormalizedSpan[];
119
+ }
120
+ export interface TelemetryQuery {
121
+ window?: string;
122
+ endpoint?: string;
123
+ service?: string;
124
+ }
125
+ export interface IngestResult {
126
+ nodesAdded: number;
127
+ edgesAdded: number;
128
+ source: string;
129
+ }
130
+ export interface AdapterInput {
131
+ type: 'file' | 'content';
132
+ path?: string;
133
+ content?: string;
134
+ format?: 'openapi' | 'postman' | 'graphql' | 'logs' | 'git' | 'telemetry';
135
+ }
136
+ export interface SourceAdapter {
137
+ name: string;
138
+ format: string;
139
+ canHandle(input: AdapterInput): boolean;
140
+ ingest(input: AdapterInput, ctx: TenantContext): Promise<IngestResult>;
141
+ }
142
+ export interface TelemetryProviderConfig {
143
+ id: string;
144
+ type: 'mock' | 'logfile' | 'otlp' | 'aws-cloudwatch' | 'azure-monitor';
145
+ enabled: boolean;
146
+ fixture?: string;
147
+ path?: string;
148
+ parser?: string;
149
+ endpoint?: string;
150
+ headers?: Record<string, string>;
151
+ }
152
+ export interface FeatureFlags {
153
+ openapi: boolean;
154
+ postman: boolean;
155
+ graphql: boolean;
156
+ logs: boolean;
157
+ git: boolean;
158
+ observability: boolean;
159
+ workflow_inference: boolean;
160
+ impact_analysis: boolean;
161
+ telemetry: boolean;
162
+ }
163
+ export interface TenantConfig {
164
+ telemetry?: {
165
+ providers?: TelemetryProviderConfig[];
166
+ };
167
+ }
168
+ export interface TeczFlowConfig {
169
+ tenantMode: boolean;
170
+ defaultTenant: string;
171
+ features: FeatureFlags;
172
+ telemetry: {
173
+ enabled: boolean;
174
+ defaultWindow: string;
175
+ providers: TelemetryProviderConfig[];
176
+ };
177
+ telemetryProviders?: Record<string, {
178
+ enabled: boolean;
179
+ }>;
180
+ tenants?: Record<string, TenantConfig>;
181
+ }
182
+ export interface GraphStore {
183
+ load(tenantId: string): Promise<GraphSnapshot | null>;
184
+ save(tenantId: string, snapshot: GraphSnapshot): Promise<void>;
185
+ delete(tenantId: string): Promise<void>;
186
+ }
187
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@mytecz/teczflow-core",
3
+ "version": "1.0.0",
4
+ "description": "TeczFlow core — graph, reasoning, adapters, services",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "assets"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc -p tsconfig.json",
20
+ "test": "vitest run",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "dependencies": {
24
+ "@apidevtools/swagger-parser": "^10.1.1",
25
+ "yaml": "^2.8.0",
26
+ "zod": "^3.25.76"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^22.15.30",
30
+ "typescript": "^5.8.3"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/kalyanakkondapalli/teczflow.git",
38
+ "directory": "packages/core"
39
+ },
40
+ "bugs": {
41
+ "url": "https://github.com/kalyanakkondapalli/teczflow/issues"
42
+ },
43
+ "homepage": "https://github.com/kalyanakkondapalli/teczflow#readme",
44
+ "keywords": [
45
+ "teczflow",
46
+ "api-intelligence",
47
+ "openapi",
48
+ "knowledge-graph",
49
+ "mcp"
50
+ ],
51
+ "engines": {
52
+ "node": ">=20"
53
+ },
54
+ "license": "MIT"
55
+ }