@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.
Files changed (65) hide show
  1. package/README.md +2 -0
  2. package/dist/core/base-vector-service.d.ts +6 -0
  3. package/dist/core/base-vector-service.d.ts.map +1 -1
  4. package/dist/core/base-vector-service.js +18 -8
  5. package/dist/core/capabilities.d.ts +12 -0
  6. package/dist/core/capabilities.d.ts.map +1 -1
  7. package/dist/core/capability-operations.d.ts +3 -0
  8. package/dist/core/capability-operations.d.ts.map +1 -1
  9. package/dist/core/capability-operations.js +88 -5
  10. package/dist/core/capability-scan-workflow.d.ts +35 -5
  11. package/dist/core/capability-scan-workflow.d.ts.map +1 -1
  12. package/dist/core/capability-scan-workflow.js +169 -145
  13. package/dist/core/capability-vector-service.d.ts +11 -2
  14. package/dist/core/capability-vector-service.d.ts.map +1 -1
  15. package/dist/core/capability-vector-service.js +50 -0
  16. package/dist/core/discovery.d.ts +34 -0
  17. package/dist/core/discovery.d.ts.map +1 -1
  18. package/dist/core/discovery.js +105 -19
  19. package/dist/core/kubectl-tools.d.ts +5 -0
  20. package/dist/core/kubectl-tools.d.ts.map +1 -1
  21. package/dist/core/kubectl-tools.js +74 -2
  22. package/dist/core/kubernetes-utils.d.ts +1 -0
  23. package/dist/core/kubernetes-utils.d.ts.map +1 -1
  24. package/dist/core/kubernetes-utils.js +92 -49
  25. package/dist/core/packaging.d.ts.map +1 -1
  26. package/dist/core/packaging.js +1 -0
  27. package/dist/core/resource-tools.d.ts +163 -1
  28. package/dist/core/resource-tools.d.ts.map +1 -1
  29. package/dist/core/resource-tools.js +343 -23
  30. package/dist/core/resource-vector-service.d.ts +17 -0
  31. package/dist/core/resource-vector-service.d.ts.map +1 -1
  32. package/dist/core/resource-vector-service.js +67 -3
  33. package/dist/core/vector-db-service.d.ts +7 -0
  34. package/dist/core/vector-db-service.d.ts.map +1 -1
  35. package/dist/core/vector-db-service.js +165 -61
  36. package/dist/core/visualization.d.ts +16 -1
  37. package/dist/core/visualization.d.ts.map +1 -1
  38. package/dist/core/visualization.js +64 -1
  39. package/dist/interfaces/rest-api.d.ts +63 -2
  40. package/dist/interfaces/rest-api.d.ts.map +1 -1
  41. package/dist/interfaces/rest-api.js +611 -51
  42. package/dist/tools/answer-question.d.ts.map +1 -1
  43. package/dist/tools/answer-question.js +18 -0
  44. package/dist/tools/choose-solution.d.ts.map +1 -1
  45. package/dist/tools/choose-solution.js +22 -1
  46. package/dist/tools/deploy-manifests.d.ts.map +1 -1
  47. package/dist/tools/deploy-manifests.js +16 -2
  48. package/dist/tools/generate-manifests.js +3 -3
  49. package/dist/tools/organizational-data.d.ts +1 -1
  50. package/dist/tools/organizational-data.d.ts.map +1 -1
  51. package/dist/tools/organizational-data.js +6 -0
  52. package/dist/tools/query.d.ts +2 -11
  53. package/dist/tools/query.d.ts.map +1 -1
  54. package/dist/tools/query.js +63 -44
  55. package/dist/tools/recommend.d.ts +18 -1
  56. package/dist/tools/recommend.d.ts.map +1 -1
  57. package/dist/tools/recommend.js +44 -10
  58. package/package.json +1 -1
  59. package/prompts/partials/query-simple-output.md +11 -0
  60. package/prompts/partials/visualization-output.md +93 -0
  61. package/prompts/query-system.md +8 -12
  62. package/prompts/resource-selection.md +4 -0
  63. package/prompts/visualize.md +1 -68
  64. package/scripts/reset-sync-and-scan-test-cluster.sh +120 -0
  65. 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;CACxB;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,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;IAkC1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CA2C7B"}
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.7, // Weight semantic similarity
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
- // Boost score for hybrid match
216
- existing.score = Math.max(existing.score, result.score * 0.8);
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.6, // Weight keyword matching
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;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,uBAAuB,GACzC,OAAO,CAAC,GAAG,CAAC,CA+Ed;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,CAmDd"}
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
- // Get capability by ID
158
- const capability = await capabilityService.getCapability(args.id);
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 and initialize capability service for CRUD operations
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
- await capabilityService.initialize();
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":"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"}
1
+ {"version":3,"file":"capability-scan-workflow.d.ts","sourceRoot":"","sources":["../../src/core/capability-scan-workflow.ts"],"names":[],"mappings":"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"}