@vfarcic/dot-ai 0.192.0 → 0.193.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/README.md +2 -0
- package/dist/core/base-vector-service.d.ts +6 -0
- package/dist/core/base-vector-service.d.ts.map +1 -1
- package/dist/core/base-vector-service.js +18 -8
- package/dist/core/capabilities.d.ts +12 -0
- package/dist/core/capabilities.d.ts.map +1 -1
- package/dist/core/capability-operations.d.ts +3 -0
- package/dist/core/capability-operations.d.ts.map +1 -1
- package/dist/core/capability-operations.js +88 -5
- package/dist/core/capability-scan-workflow.d.ts +35 -5
- package/dist/core/capability-scan-workflow.d.ts.map +1 -1
- package/dist/core/capability-scan-workflow.js +169 -145
- package/dist/core/capability-vector-service.d.ts +11 -2
- package/dist/core/capability-vector-service.d.ts.map +1 -1
- package/dist/core/capability-vector-service.js +50 -0
- package/dist/core/discovery.d.ts +34 -0
- package/dist/core/discovery.d.ts.map +1 -1
- package/dist/core/discovery.js +105 -19
- package/dist/core/kubectl-tools.d.ts +5 -0
- package/dist/core/kubectl-tools.d.ts.map +1 -1
- package/dist/core/kubectl-tools.js +74 -2
- package/dist/core/kubernetes-utils.d.ts +1 -0
- package/dist/core/kubernetes-utils.d.ts.map +1 -1
- package/dist/core/kubernetes-utils.js +92 -49
- package/dist/core/packaging.d.ts.map +1 -1
- package/dist/core/packaging.js +1 -0
- package/dist/core/resource-tools.d.ts +163 -1
- package/dist/core/resource-tools.d.ts.map +1 -1
- package/dist/core/resource-tools.js +343 -23
- package/dist/core/resource-vector-service.d.ts +17 -0
- package/dist/core/resource-vector-service.d.ts.map +1 -1
- package/dist/core/resource-vector-service.js +67 -3
- package/dist/core/vector-db-service.d.ts +7 -0
- package/dist/core/vector-db-service.d.ts.map +1 -1
- package/dist/core/vector-db-service.js +165 -61
- package/dist/core/visualization.d.ts +16 -1
- package/dist/core/visualization.d.ts.map +1 -1
- package/dist/core/visualization.js +64 -1
- package/dist/interfaces/rest-api.d.ts +63 -2
- package/dist/interfaces/rest-api.d.ts.map +1 -1
- package/dist/interfaces/rest-api.js +611 -51
- package/dist/tools/answer-question.d.ts.map +1 -1
- package/dist/tools/answer-question.js +18 -0
- package/dist/tools/choose-solution.d.ts.map +1 -1
- package/dist/tools/choose-solution.js +22 -1
- package/dist/tools/deploy-manifests.d.ts.map +1 -1
- package/dist/tools/deploy-manifests.js +16 -2
- package/dist/tools/generate-manifests.js +3 -3
- package/dist/tools/organizational-data.d.ts +1 -1
- package/dist/tools/organizational-data.d.ts.map +1 -1
- package/dist/tools/organizational-data.js +6 -0
- package/dist/tools/query.d.ts +2 -11
- package/dist/tools/query.d.ts.map +1 -1
- package/dist/tools/query.js +63 -44
- package/dist/tools/recommend.d.ts +18 -1
- package/dist/tools/recommend.d.ts.map +1 -1
- package/dist/tools/recommend.js +44 -10
- package/package.json +1 -1
- package/prompts/partials/query-simple-output.md +11 -0
- package/prompts/partials/visualization-output.md +93 -0
- package/prompts/query-system.md +8 -12
- package/prompts/resource-selection.md +4 -0
- package/prompts/visualize.md +1 -68
- package/scripts/reset-sync-and-scan-test-cluster.sh +120 -0
- package/shared-prompts/prd-create.md +1 -1
package/README.md
CHANGED
|
@@ -32,6 +32,8 @@
|
|
|
32
32
|
|
|
33
33
|
DevOps AI Toolkit brings AI-powered intelligence to platform engineering, Kubernetes operations, and development workflows. Built on the Model Context Protocol (MCP), it integrates seamlessly with Claude Code, Cursor, and VS Code.
|
|
34
34
|
|
|
35
|
+
> **Why use a specialized toolkit?** Learn what makes DevOps AI Toolkit different from general-purpose AI assistants: [Why DevOps AI Toolkit?](https://devopstoolkit.ai/docs/mcp/why-devops-ai-toolkit/)
|
|
36
|
+
|
|
35
37
|
**Key capabilities:**
|
|
36
38
|
- Natural language cluster querying and exploration
|
|
37
39
|
- Intelligent Kubernetes deployment recommendations
|
|
@@ -10,6 +10,7 @@ export interface BaseSearchOptions {
|
|
|
10
10
|
limit?: number;
|
|
11
11
|
scoreThreshold?: number;
|
|
12
12
|
keywordWeight?: number;
|
|
13
|
+
filter?: Record<string, any>;
|
|
13
14
|
}
|
|
14
15
|
export interface BaseSearchResult<T> {
|
|
15
16
|
data: T;
|
|
@@ -33,6 +34,10 @@ export declare abstract class BaseVectorService<T> {
|
|
|
33
34
|
* Initialize the collection
|
|
34
35
|
*/
|
|
35
36
|
initialize(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if collection exists without creating it
|
|
39
|
+
*/
|
|
40
|
+
collectionExists(): Promise<boolean>;
|
|
36
41
|
/**
|
|
37
42
|
* Health check for Vector DB connection
|
|
38
43
|
*/
|
|
@@ -86,6 +91,7 @@ export declare abstract class BaseVectorService<T> {
|
|
|
86
91
|
private hybridSearch;
|
|
87
92
|
/**
|
|
88
93
|
* Combine semantic and keyword results with hybrid ranking
|
|
94
|
+
* Keyword matches are prioritized for exact term matches
|
|
89
95
|
*/
|
|
90
96
|
private combineHybridResults;
|
|
91
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-vector-service.d.ts","sourceRoot":"","sources":["../../src/core/base-vector-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAkB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"base-vector-service.d.ts","sourceRoot":"","sources":["../../src/core/base-vector-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAkB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;CAC9C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,8BAAsB,iBAAiB,CAAC,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC;IACpC,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC7C,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;gBAErB,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAE,gBAAgB;IAMnG;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BvC;;OAEG;IACG,UAAU,CACd,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAyBjC;;OAEG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAW5C;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IASrE;;OAEG;IACG,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAS9C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAWrC;;OAEG;IACH,aAAa,IAAI,UAAU;IAU3B,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IACpD,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAC7C,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC9D,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAGjE,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAIlD;;OAEG;YACW,YAAY;IAoC1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CA4C7B"}
|
|
@@ -31,6 +31,12 @@ class BaseVectorService {
|
|
|
31
31
|
1536;
|
|
32
32
|
await this.vectorDB.initializeCollection(dimensions);
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if collection exists without creating it
|
|
36
|
+
*/
|
|
37
|
+
async collectionExists() {
|
|
38
|
+
return await this.vectorDB.collectionExists();
|
|
39
|
+
}
|
|
34
40
|
/**
|
|
35
41
|
* Health check for Vector DB connection
|
|
36
42
|
*/
|
|
@@ -86,7 +92,7 @@ class BaseVectorService {
|
|
|
86
92
|
const scoreThreshold = options.scoreThreshold || 0.01;
|
|
87
93
|
// Perform hybrid search (semantic + keyword)
|
|
88
94
|
try {
|
|
89
|
-
return await this.hybridSearch(query, queryKeywords, { limit, scoreThreshold });
|
|
95
|
+
return await this.hybridSearch(query, queryKeywords, { limit, scoreThreshold, filter: options.filter });
|
|
90
96
|
}
|
|
91
97
|
catch (error) {
|
|
92
98
|
// Fail immediately - no fallback to keyword-only search
|
|
@@ -183,28 +189,31 @@ class BaseVectorService {
|
|
|
183
189
|
// Semantic search using vector similarity
|
|
184
190
|
const semanticResults = await this.vectorDB.searchSimilar(queryEmbedding, {
|
|
185
191
|
limit: options.limit * 2, // Get more candidates for hybrid ranking
|
|
186
|
-
scoreThreshold: 0.1 // Very permissive threshold for single-word queries
|
|
192
|
+
scoreThreshold: 0.1, // Very permissive threshold for single-word queries
|
|
193
|
+
filter: options.filter
|
|
187
194
|
});
|
|
188
195
|
// Keyword search
|
|
189
196
|
const keywordResults = await this.vectorDB.searchByKeywords(queryKeywords, {
|
|
190
197
|
limit: options.limit * 2,
|
|
191
|
-
scoreThreshold: 0.1
|
|
198
|
+
scoreThreshold: 0.1,
|
|
199
|
+
filter: options.filter
|
|
192
200
|
});
|
|
193
201
|
// Combine and rank results
|
|
194
202
|
return this.combineHybridResults(semanticResults, keywordResults, queryKeywords, options);
|
|
195
203
|
}
|
|
196
204
|
/**
|
|
197
205
|
* Combine semantic and keyword results with hybrid ranking
|
|
206
|
+
* Keyword matches are prioritized for exact term matches
|
|
198
207
|
*/
|
|
199
208
|
combineHybridResults(semanticResults, keywordResults, queryKeywords, options) {
|
|
200
209
|
const combinedResults = new Map();
|
|
201
|
-
// Add semantic results
|
|
210
|
+
// Add semantic results with weighted score
|
|
202
211
|
for (const result of semanticResults) {
|
|
203
212
|
const data = this.payloadToData(result.payload);
|
|
204
213
|
data.id = result.id;
|
|
205
214
|
combinedResults.set(result.id, {
|
|
206
215
|
data,
|
|
207
|
-
score: result.score * 0.
|
|
216
|
+
score: result.score * 0.5, // Semantic gets 50% weight
|
|
208
217
|
matchType: 'semantic'
|
|
209
218
|
});
|
|
210
219
|
}
|
|
@@ -212,8 +221,9 @@ class BaseVectorService {
|
|
|
212
221
|
for (const result of keywordResults) {
|
|
213
222
|
const existing = combinedResults.get(result.id);
|
|
214
223
|
if (existing) {
|
|
215
|
-
//
|
|
216
|
-
|
|
224
|
+
// Hybrid match: ADD keyword score to semantic score (capped at 1.0)
|
|
225
|
+
// This ensures exact keyword matches rank higher
|
|
226
|
+
existing.score = Math.min(1.0, existing.score + result.score * 0.5);
|
|
217
227
|
existing.matchType = 'hybrid';
|
|
218
228
|
}
|
|
219
229
|
else {
|
|
@@ -221,7 +231,7 @@ class BaseVectorService {
|
|
|
221
231
|
data.id = result.id;
|
|
222
232
|
combinedResults.set(result.id, {
|
|
223
233
|
data,
|
|
224
|
-
score: result.score * 0.
|
|
234
|
+
score: result.score * 0.5, // Keyword-only gets 50% weight
|
|
225
235
|
matchType: 'keyword'
|
|
226
236
|
});
|
|
227
237
|
}
|
|
@@ -8,6 +8,17 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { Logger } from './error-handling';
|
|
10
10
|
import { AIProvider } from './ai-provider.interface';
|
|
11
|
+
/**
|
|
12
|
+
* Printer column definition from Kubernetes Table API
|
|
13
|
+
* Used for dynamic table column generation in UIs
|
|
14
|
+
*/
|
|
15
|
+
export interface PrinterColumn {
|
|
16
|
+
name: string;
|
|
17
|
+
type: string;
|
|
18
|
+
jsonPath: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
priority?: number;
|
|
21
|
+
}
|
|
11
22
|
/**
|
|
12
23
|
* Complete resource capability data structure for Vector DB storage
|
|
13
24
|
*/
|
|
@@ -22,6 +33,7 @@ export interface ResourceCapability {
|
|
|
22
33
|
complexity: 'low' | 'medium' | 'high';
|
|
23
34
|
description: string;
|
|
24
35
|
useCase: string;
|
|
36
|
+
printerColumns?: PrinterColumn[];
|
|
25
37
|
embedding?: number[];
|
|
26
38
|
analyzedAt: string;
|
|
27
39
|
confidence: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/core/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAEjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAGtC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAGhB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAGrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAa;gBAEnB,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAKlD;;;;;;;;;;OAUG;IACG,iBAAiB,CACrB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,cAAc,CAAC,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,CAAC;IAgC9B;;;;OAIG;YACW,WAAW;IA8BzB;;;;OAIG;YACW,oBAAoB;IAalC;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA+B/B;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;CAQ1D"}
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/core/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAEjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAGtC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAGhB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IAGjC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAGrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAa;gBAEnB,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAKlD;;;;;;;;;;OAUG;IACG,iBAAiB,CACrB,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,cAAc,CAAC,EAAE,MAAM,EACvB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,CAAC;IAgC9B;;;;OAIG;YACW,WAAW;IA8BzB;;;;OAIG;YACW,oBAAoB;IAalC;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA+B/B;;;OAGG;IACH,MAAM,CAAC,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;CAQ1D"}
|
|
@@ -17,6 +17,9 @@ export declare function getCapabilityService(collection?: string): Promise<Capab
|
|
|
17
17
|
export declare function handleCapabilityList(args: any, logger: Logger, requestId: string, capabilityService: CapabilityVectorService): Promise<any>;
|
|
18
18
|
/**
|
|
19
19
|
* Handle capability get operation
|
|
20
|
+
* Supports two ID formats:
|
|
21
|
+
* - Hashed ID: "a1b2c3d4-..." (existing format)
|
|
22
|
+
* - JSON format: '{"kind":"Deployment","apiVersion":"apps/v1"}' (new format for dashboard UI)
|
|
20
23
|
*/
|
|
21
24
|
export declare function handleCapabilityGet(args: any, logger: Logger, requestId: string, capabilityService: CapabilityVectorService): Promise<any>;
|
|
22
25
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-operations.d.ts","sourceRoot":"","sources":["../../src/core/capability-operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAUtE;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAahG;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,uBAAuB,GACzC,OAAO,CAAC,GAAG,CAAC,CA8Dd;AAED
|
|
1
|
+
{"version":3,"file":"capability-operations.d.ts","sourceRoot":"","sources":["../../src/core/capability-operations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAUtE;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAahG;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,uBAAuB,GACzC,OAAO,CAAC,GAAG,CAAC,CA8Dd;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,uBAAuB,GACzC,OAAO,CAAC,GAAG,CAAC,CA2Hd;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,uBAAuB,GACzC,OAAO,CAAC,GAAG,CAAC,CAuEd;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,uBAAuB,GACzC,OAAO,CAAC,GAAG,CAAC,CA2Dd;AAoCD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,CA4Nd;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,uBAAuB,GACzC,OAAO,CAAC,GAAG,CAAC,CAwFd;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,CAsFd"}
|
|
@@ -138,6 +138,9 @@ async function handleCapabilityList(args, logger, requestId, capabilityService)
|
|
|
138
138
|
}
|
|
139
139
|
/**
|
|
140
140
|
* Handle capability get operation
|
|
141
|
+
* Supports two ID formats:
|
|
142
|
+
* - Hashed ID: "a1b2c3d4-..." (existing format)
|
|
143
|
+
* - JSON format: '{"kind":"Deployment","apiVersion":"apps/v1"}' (new format for dashboard UI)
|
|
141
144
|
*/
|
|
142
145
|
async function handleCapabilityGet(args, logger, requestId, capabilityService) {
|
|
143
146
|
try {
|
|
@@ -150,12 +153,55 @@ async function handleCapabilityGet(args, logger, requestId, capabilityService) {
|
|
|
150
153
|
error: {
|
|
151
154
|
message: validation_1.VALIDATION_MESSAGES.MISSING_PARAMETER('id'),
|
|
152
155
|
details: 'Specify id to retrieve capability data',
|
|
153
|
-
example: { id: 'capability-id-example' }
|
|
156
|
+
example: { id: 'capability-id-example' },
|
|
157
|
+
alternativeFormat: {
|
|
158
|
+
description: 'You can also use JSON format for kind/apiVersion lookup',
|
|
159
|
+
example: '{"kind":"Deployment","apiVersion":"apps/v1"}'
|
|
160
|
+
}
|
|
154
161
|
}
|
|
155
162
|
};
|
|
156
163
|
}
|
|
157
|
-
|
|
158
|
-
|
|
164
|
+
let capability = null;
|
|
165
|
+
// Check if id is JSON format for kind/apiVersion lookup
|
|
166
|
+
if (typeof args.id === 'string' && args.id.trim().startsWith('{')) {
|
|
167
|
+
try {
|
|
168
|
+
const lookup = JSON.parse(args.id);
|
|
169
|
+
if (!lookup.kind || !lookup.apiVersion) {
|
|
170
|
+
return {
|
|
171
|
+
success: false,
|
|
172
|
+
operation: 'get',
|
|
173
|
+
dataType: 'capabilities',
|
|
174
|
+
error: {
|
|
175
|
+
message: 'Invalid JSON lookup format',
|
|
176
|
+
details: 'JSON format requires both "kind" and "apiVersion" fields',
|
|
177
|
+
example: { id: '{"kind":"Deployment","apiVersion":"apps/v1"}' }
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
logger.info('Looking up capability by kind/apiVersion', {
|
|
182
|
+
requestId,
|
|
183
|
+
kind: lookup.kind,
|
|
184
|
+
apiVersion: lookup.apiVersion
|
|
185
|
+
});
|
|
186
|
+
capability = await capabilityService.getCapabilityByKindApiVersion(lookup.kind, lookup.apiVersion);
|
|
187
|
+
}
|
|
188
|
+
catch (parseError) {
|
|
189
|
+
return {
|
|
190
|
+
success: false,
|
|
191
|
+
operation: 'get',
|
|
192
|
+
dataType: 'capabilities',
|
|
193
|
+
error: {
|
|
194
|
+
message: 'Invalid JSON format in id parameter',
|
|
195
|
+
details: parseError instanceof Error ? parseError.message : String(parseError),
|
|
196
|
+
example: { id: '{"kind":"Deployment","apiVersion":"apps/v1"}' }
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
// Existing hashed ID lookup
|
|
203
|
+
capability = await capabilityService.getCapability(args.id);
|
|
204
|
+
}
|
|
159
205
|
if (!capability) {
|
|
160
206
|
logger.warn('Capability not found', {
|
|
161
207
|
requestId,
|
|
@@ -639,9 +685,10 @@ async function handleCapabilitySearch(args, logger, requestId, capabilityService
|
|
|
639
685
|
* Handles list, get, search, delete, deleteAll operations with proper Vector DB setup
|
|
640
686
|
*/
|
|
641
687
|
async function handleCapabilityCRUD(operation, args, logger, requestId) {
|
|
642
|
-
// Create
|
|
688
|
+
// Create capability service for CRUD operations
|
|
643
689
|
// Use collection from args if provided, otherwise defaults to 'capabilities'
|
|
644
690
|
const capabilityService = new capability_vector_service_1.CapabilityVectorService(args.collection);
|
|
691
|
+
const isReadOperation = ['list', 'get', 'search'].includes(operation);
|
|
645
692
|
try {
|
|
646
693
|
const vectorDBHealthy = await capabilityService.healthCheck();
|
|
647
694
|
if (!vectorDBHealthy) {
|
|
@@ -659,7 +706,43 @@ async function handleCapabilityCRUD(operation, args, logger, requestId) {
|
|
|
659
706
|
}
|
|
660
707
|
};
|
|
661
708
|
}
|
|
662
|
-
|
|
709
|
+
// For read operations, check if collection exists without creating it
|
|
710
|
+
// For write operations, initialize (create if needed)
|
|
711
|
+
if (isReadOperation) {
|
|
712
|
+
const exists = await capabilityService.collectionExists();
|
|
713
|
+
if (!exists) {
|
|
714
|
+
// Return empty results for read operations on non-existent collection
|
|
715
|
+
if (operation === 'list') {
|
|
716
|
+
return {
|
|
717
|
+
success: true,
|
|
718
|
+
operation: 'list',
|
|
719
|
+
dataType: 'capabilities',
|
|
720
|
+
data: { capabilities: [], totalCount: 0, returnedCount: 0 },
|
|
721
|
+
message: 'No capabilities found (collection not initialized)'
|
|
722
|
+
};
|
|
723
|
+
}
|
|
724
|
+
else if (operation === 'get') {
|
|
725
|
+
return {
|
|
726
|
+
success: false,
|
|
727
|
+
operation: 'get',
|
|
728
|
+
dataType: 'capabilities',
|
|
729
|
+
error: { message: 'Capability not found' }
|
|
730
|
+
};
|
|
731
|
+
}
|
|
732
|
+
else if (operation === 'search') {
|
|
733
|
+
return {
|
|
734
|
+
success: true,
|
|
735
|
+
operation: 'search',
|
|
736
|
+
dataType: 'capabilities',
|
|
737
|
+
data: { query: args.id, results: [], resultCount: 0 },
|
|
738
|
+
message: 'No capabilities found (collection not initialized)'
|
|
739
|
+
};
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
else {
|
|
744
|
+
await capabilityService.initialize();
|
|
745
|
+
}
|
|
663
746
|
// Route to specific CRUD operation
|
|
664
747
|
switch (operation) {
|
|
665
748
|
case 'list':
|
|
@@ -6,10 +6,26 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { Logger } from './error-handling';
|
|
8
8
|
import { CapabilityVectorService } from './capability-vector-service';
|
|
9
|
+
import { KubernetesDiscovery } from './discovery';
|
|
10
|
+
import { CapabilityInferenceEngine } from './capabilities';
|
|
9
11
|
export type TransitionCapabilitySessionFn = (session: CapabilityScanSession, nextStep: CapabilityScanSession['currentStep'], updates: Partial<CapabilityScanSession>, args: any) => void;
|
|
10
12
|
export type CleanupCapabilitySessionFn = (session: CapabilityScanSession, args: any, logger: Logger, requestId: string) => void;
|
|
11
13
|
export type ParseNumericResponseFn = (response: string, validOptions: string[]) => string;
|
|
12
14
|
export type CreateCapabilityScanCompletionResponseFn = (sessionId: string, totalProcessed: number, successful: number, failed: number, processingTime: string, mode: 'auto' | 'manual', stopped?: boolean) => any;
|
|
15
|
+
interface PrinterColumnDef {
|
|
16
|
+
name: string;
|
|
17
|
+
type: string;
|
|
18
|
+
jsonPath: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
priority?: number;
|
|
21
|
+
}
|
|
22
|
+
interface ResourceMetadata {
|
|
23
|
+
apiVersion: string;
|
|
24
|
+
version: string;
|
|
25
|
+
group: string;
|
|
26
|
+
resourcePlural: string;
|
|
27
|
+
printerColumns?: PrinterColumnDef[];
|
|
28
|
+
}
|
|
13
29
|
interface CapabilityScanSession {
|
|
14
30
|
sessionId: string;
|
|
15
31
|
currentStep: 'resource-selection' | 'resource-specification' | 'scanning' | 'complete';
|
|
@@ -19,12 +35,26 @@ interface CapabilityScanSession {
|
|
|
19
35
|
progress?: any;
|
|
20
36
|
startedAt: string;
|
|
21
37
|
lastActivity: string;
|
|
22
|
-
resourceMetadata?: Record<string,
|
|
23
|
-
apiVersion: string;
|
|
24
|
-
version: string;
|
|
25
|
-
group: string;
|
|
26
|
-
}>;
|
|
38
|
+
resourceMetadata?: Record<string, ResourceMetadata>;
|
|
27
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Result of scanning a single resource
|
|
42
|
+
*/
|
|
43
|
+
interface ScanResourceResult {
|
|
44
|
+
success: boolean;
|
|
45
|
+
resource: string;
|
|
46
|
+
id?: string;
|
|
47
|
+
capabilities?: string[];
|
|
48
|
+
providers?: string[];
|
|
49
|
+
complexity?: string;
|
|
50
|
+
confidence?: number;
|
|
51
|
+
error?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Scan a single resource - fetches all data, runs AI inference, stores to DB
|
|
55
|
+
* This is the core function that both full scan and targeted scan call for each resource.
|
|
56
|
+
*/
|
|
57
|
+
export declare function scanSingleResource(resourceName: string, discovery: KubernetesDiscovery, engine: CapabilityInferenceEngine, capabilityService: CapabilityVectorService, logger: Logger, requestId: string, interactionId?: string): Promise<ScanResourceResult>;
|
|
28
58
|
/**
|
|
29
59
|
* Handle resource selection step
|
|
30
60
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capability-scan-workflow.d.ts","sourceRoot":"","sources":["../../src/core/capability-scan-workflow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"capability-scan-workflow.d.ts","sourceRoot":"","sources":["../../src/core/capability-scan-workflow.ts"],"names":[],"mappings":"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"}
|