@vfarcic/dot-ai 1.23.1 → 1.24.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 (63) hide show
  1. package/dist/core/index.d.ts +0 -5
  2. package/dist/core/index.d.ts.map +1 -1
  3. package/dist/core/index.js +2 -11
  4. package/dist/core/knowledge-migration.d.ts +30 -0
  5. package/dist/core/knowledge-migration.d.ts.map +1 -0
  6. package/dist/core/knowledge-migration.js +289 -0
  7. package/dist/core/knowledge-service.d.ts +46 -0
  8. package/dist/core/knowledge-service.d.ts.map +1 -0
  9. package/dist/core/knowledge-service.js +185 -0
  10. package/dist/core/knowledge-types.d.ts +14 -0
  11. package/dist/core/knowledge-types.d.ts.map +1 -1
  12. package/dist/core/schema.d.ts +13 -12
  13. package/dist/core/schema.d.ts.map +1 -1
  14. package/dist/core/schema.js +105 -170
  15. package/dist/core/user-prompts-loader.d.ts.map +1 -1
  16. package/dist/core/user-prompts-loader.js +13 -6
  17. package/dist/interfaces/rest-api.d.ts.map +1 -1
  18. package/dist/interfaces/rest-api.js +7 -6
  19. package/dist/mcp/server.js +12 -0
  20. package/dist/tools/manage-knowledge.d.ts +0 -22
  21. package/dist/tools/manage-knowledge.d.ts.map +1 -1
  22. package/dist/tools/manage-knowledge.js +71 -131
  23. package/dist/tools/operate-analysis.d.ts.map +1 -1
  24. package/dist/tools/operate-analysis.js +7 -6
  25. package/dist/tools/operate.d.ts +23 -11
  26. package/dist/tools/operate.d.ts.map +1 -1
  27. package/dist/tools/operate.js +40 -58
  28. package/dist/tools/organizational-data.d.ts +5 -8
  29. package/dist/tools/organizational-data.d.ts.map +1 -1
  30. package/dist/tools/organizational-data.js +19 -74
  31. package/dist/tools/query.d.ts +17 -0
  32. package/dist/tools/query.d.ts.map +1 -1
  33. package/dist/tools/query.js +36 -1
  34. package/dist/tools/version.d.ts +1 -12
  35. package/dist/tools/version.d.ts.map +1 -1
  36. package/dist/tools/version.js +10 -19
  37. package/package.json +2 -2
  38. package/prompts/knowledge-classification.md +24 -0
  39. package/prompts/operate-user.md +7 -8
  40. package/dist/core/organizational-types.d.ts +0 -43
  41. package/dist/core/organizational-types.d.ts.map +0 -1
  42. package/dist/core/organizational-types.js +0 -8
  43. package/dist/core/pattern-operations.d.ts +0 -50
  44. package/dist/core/pattern-operations.d.ts.map +0 -1
  45. package/dist/core/pattern-operations.js +0 -445
  46. package/dist/core/pattern-types.d.ts +0 -8
  47. package/dist/core/pattern-types.d.ts.map +0 -1
  48. package/dist/core/pattern-types.js +0 -8
  49. package/dist/core/pattern-vector-service.d.ts +0 -27
  50. package/dist/core/pattern-vector-service.d.ts.map +0 -1
  51. package/dist/core/pattern-vector-service.js +0 -65
  52. package/dist/core/policy-operations.d.ts +0 -136
  53. package/dist/core/policy-operations.d.ts.map +0 -1
  54. package/dist/core/policy-operations.js +0 -623
  55. package/dist/core/policy-vector-service.d.ts +0 -27
  56. package/dist/core/policy-vector-service.d.ts.map +0 -1
  57. package/dist/core/policy-vector-service.js +0 -64
  58. package/dist/core/unified-creation-session.d.ts +0 -88
  59. package/dist/core/unified-creation-session.d.ts.map +0 -1
  60. package/dist/core/unified-creation-session.js +0 -948
  61. package/dist/core/unified-creation-types.d.ts +0 -68
  62. package/dist/core/unified-creation-types.d.ts.map +0 -1
  63. package/dist/core/unified-creation-types.js +0 -61
@@ -170,12 +170,11 @@ export declare class ManifestValidator {
170
170
  /**
171
171
  * ResourceRecommender determines which resources best meet user needs using AI
172
172
  * PRD #359: Uses unified plugin registry for kubectl operations
173
+ * PRD #375: Uses unified knowledge-base collection instead of separate pattern/policy collections
173
174
  */
174
175
  export declare class ResourceRecommender {
175
176
  private aiProvider;
176
- private patternService?;
177
177
  private capabilityService?;
178
- private policyService?;
179
178
  constructor(aiProvider?: AIProvider);
180
179
  /**
181
180
  * Execute kubectl via plugin system
@@ -188,6 +187,7 @@ export declare class ResourceRecommender {
188
187
  findBestSolutions(intent: string, _explainResource: (resource: string) => Promise<string>, interaction_id?: string): Promise<SolutionResult>;
189
188
  /**
190
189
  * Phase 2: AI assembles and ranks complete solutions (replaces separate selection + ranking)
190
+ * PRD #375: Uses unified knowledge chunks (policy + pattern + general) instead of structured patterns.
191
191
  */
192
192
  private assembleAndRankSolutions;
193
193
  /**
@@ -195,15 +195,12 @@ export declare class ResourceRecommender {
195
195
  */
196
196
  private parseSimpleSolutionResponse;
197
197
  /**
198
- * Load and format solution assembly prompt from file
198
+ * Load and format solution assembly prompt from file.
199
+ * PRD #375: Uses unified knowledge chunks instead of structured OrganizationalPattern objects.
199
200
  */
200
201
  private loadSolutionAssemblyPrompt;
201
202
  /**
202
- * Add pattern-suggested resources that are missing from capability search results
203
- */
204
- private addMissingPatternResources;
205
- /**
206
- * Infer cloud providers from resource name
203
+ * PRD #375: Infer cloud providers from resource name (kept for use in capability processing)
207
204
  */
208
205
  private inferProvidersFromResourceName;
209
206
  /**
@@ -215,10 +212,13 @@ export declare class ResourceRecommender {
215
212
  */
216
213
  private extractGroupFromResourceName;
217
214
  /**
218
- * Phase 0: Search for relevant organizational patterns using multi-concept approach
219
- * Returns empty array if Vector DB is not available - this is completely optional
215
+ * Phase 0: Search unified knowledge base for relevant organizational knowledge.
216
+ * Returns empty array if knowledge base is empty or unavailable (non-blocking).
217
+ *
218
+ * PRD #375: Replaces separate searchRelevantPatterns() + policy search.
219
+ * Results include tags so AI can distinguish policy vs pattern vs general content.
220
220
  */
221
- private searchRelevantPatterns;
221
+ private searchRelevantKnowledge;
222
222
  /**
223
223
  * Phase 2: Fetch detailed schemas for selected candidates
224
224
  */
@@ -233,7 +233,8 @@ export declare class ResourceRecommender {
233
233
  */
234
234
  private formatClusterOptionsText;
235
235
  /**
236
- * Generate contextual questions using AI based on user intent and solution resources
236
+ * Generate contextual questions using AI based on user intent and solution resources.
237
+ * PRD #375: Uses unified knowledge base instead of separate policy service.
237
238
  */
238
239
  private generateQuestionsWithAI;
239
240
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAUrD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA6B7C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,WAAW,SAAS;IACxB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAGD,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,OAAO,EAAE,SAAS,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE;QACX,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CAElB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAQpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,QAOlC,CAAC;AAwBF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;IAC/B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC/C;AAKD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,CAAC,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;CACrD;AA8GD;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,wBAAwB,CAAC,WAAW,EAAE,mBAAmB,GAAG,cAAc;IAuD1E;;OAEG;IACH,OAAO,CAAC,cAAc;IA4BtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB;CA2D3E;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;;IAKH;;;OAGG;YACW,uBAAuB;IAuCrC;;;;OAIG;IACG,gBAAgB,CACpB,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,GAC5C,OAAO,CAAC,gBAAgB,CAAC;IAqF5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAqBhC;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAuB;IAC9C,OAAO,CAAC,iBAAiB,CAAC,CAA0B;IACpD,OAAO,CAAC,aAAa,CAAC,CAAsB;gBAEhC,UAAU,CAAC,EAAE,UAAU;IAqDnC;;;OAGG;YACW,uBAAuB;IAuCrC;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EACvD,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,cAAc,CAAC;IA+G1B;;OAEG;YACW,wBAAwB;IAwBtC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA4EnC;;OAEG;YACW,0BAA0B;IA2CxC;;OAEG;YACW,0BAA0B;IAyExC;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAQtC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAanC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAYpC;;;OAGG;YACW,sBAAsB;IA8BpC;;OAEG;YACW,oBAAoB;IAsElC;;;OAGG;YACW,sBAAsB;IAuGpC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC;;OAEG;YACW,uBAAuB;IA2OrC;;OAEG;IACG,6BAA6B,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,aAAa,CAAC;IAgJzB;;OAEG;IACG,qBAAqB,CACzB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CA4CnD"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
@@ -41,12 +41,11 @@ var __importStar = (this && this.__importStar) || (function () {
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.ResourceRecommender = exports.ManifestValidator = exports.SchemaParser = exports.OUTPUT_PATH_QUESTION = exports.OUTPUT_FORMAT_QUESTION = void 0;
43
43
  const plugin_registry_1 = require("./plugin-registry");
44
- const pattern_vector_service_1 = require("./pattern-vector-service");
45
44
  const capability_vector_service_1 = require("./capability-vector-service");
46
- const policy_vector_service_1 = require("./policy-vector-service");
47
45
  const shared_prompt_loader_1 = require("./shared-prompt-loader");
48
46
  const platform_utils_1 = require("./platform-utils");
49
47
  const constants_1 = require("./constants");
48
+ const knowledge_service_1 = require("./knowledge-service");
50
49
  // PRD #343: Inline sanitization (helm-utils.ts removed)
51
50
  function sanitizeShellArg(arg, fieldName = 'argument') {
52
51
  if (!/^[a-zA-Z0-9\-_./:\\@]+$/.test(arg)) {
@@ -381,12 +380,11 @@ exports.ManifestValidator = ManifestValidator;
381
380
  /**
382
381
  * ResourceRecommender determines which resources best meet user needs using AI
383
382
  * PRD #359: Uses unified plugin registry for kubectl operations
383
+ * PRD #375: Uses unified knowledge-base collection instead of separate pattern/policy collections
384
384
  */
385
385
  class ResourceRecommender {
386
386
  aiProvider;
387
- patternService;
388
387
  capabilityService;
389
- policyService;
390
388
  constructor(aiProvider) {
391
389
  // Use provided AI provider or create from environment
392
390
  this.aiProvider =
@@ -408,24 +406,8 @@ class ResourceRecommender {
408
406
  console.warn('⚠️ Vector service initialization failed, capabilities disabled:', error);
409
407
  this.capabilityService = undefined;
410
408
  }
411
- // Initialize pattern service
412
- try {
413
- this.patternService = new pattern_vector_service_1.PatternVectorService('patterns');
414
- console.log('✅ Pattern service initialized');
415
- }
416
- catch (error) {
417
- console.warn('⚠️ Vector service initialization failed, patterns disabled:', error);
418
- this.patternService = undefined;
419
- }
420
- // Initialize policy service
421
- try {
422
- this.policyService = new policy_vector_service_1.PolicyVectorService();
423
- console.log('✅ Policy service initialized');
424
- }
425
- catch (error) {
426
- console.warn('⚠️ Vector service initialization failed, policies disabled:', error);
427
- this.policyService = undefined;
428
- }
409
+ // PRD #375: Pattern and policy services removed — use unified knowledge-base collection
410
+ // searchKnowledgeBase() is called directly when needed
429
411
  }
430
412
  /**
431
413
  * Execute kubectl via plugin system
@@ -466,8 +448,9 @@ class ResourceRecommender {
466
448
  throw new Error(constants_1.AI_SERVICE_ERROR_TEMPLATES.PROVIDER_NOT_INITIALIZED('AI-powered resource ranking'));
467
449
  }
468
450
  try {
469
- // Phase 0: Search for relevant organizational patterns
470
- const relevantPatterns = await this.searchRelevantPatterns(intent);
451
+ // Phase 0: Search unified knowledge base for relevant organizational knowledge
452
+ // PRD #375: Single search replaces separate pattern + policy searches
453
+ const relevantKnowledge = await this.searchRelevantKnowledge(intent);
471
454
  // Phase 1a: Replace mass resource discovery with capability-based pre-filtering
472
455
  if (!this.capabilityService) {
473
456
  // Capability service not available - fail fast with clear guidance
@@ -509,10 +492,9 @@ class ResourceRecommender {
509
492
  resourceName: cap.data.resourceName,
510
493
  capabilities: cap.data, // Include capability data for AI decision-making (includes namespaced, etc.)
511
494
  }));
512
- // Phase 1: Add missing pattern-suggested resources to available resources list
513
- const enhancedResources = await this.addMissingPatternResources(capabilityFilteredResources, relevantPatterns);
514
- // Phase 2: AI assembles and ranks complete solutions (replaces separate selection + ranking phases)
515
- const solutionResult = await this.assembleAndRankSolutions(intent, enhancedResources, relevantPatterns, interaction_id);
495
+ // Phase 2: AI assembles and ranks complete solutions
496
+ // PRD #375: Pass unified knowledge chunks (includes policy+pattern+general) to AI context
497
+ const solutionResult = await this.assembleAndRankSolutions(intent, capabilityFilteredResources, relevantKnowledge, interaction_id);
516
498
  // If Helm is recommended, return early - questions will be generated from Helm chart values later
517
499
  if (solutionResult.helmRecommendation) {
518
500
  console.log(`🎯 Helm installation recommended for "${intent}": ${solutionResult.helmRecommendation.suggestedTool}`);
@@ -530,9 +512,10 @@ class ResourceRecommender {
530
512
  }
531
513
  /**
532
514
  * Phase 2: AI assembles and ranks complete solutions (replaces separate selection + ranking)
515
+ * PRD #375: Uses unified knowledge chunks (policy + pattern + general) instead of structured patterns.
533
516
  */
534
- async assembleAndRankSolutions(intent, availableResources, patterns, interaction_id) {
535
- const prompt = await this.loadSolutionAssemblyPrompt(intent, availableResources, patterns);
517
+ async assembleAndRankSolutions(intent, availableResources, knowledgeChunks, interaction_id) {
518
+ const prompt = await this.loadSolutionAssemblyPrompt(intent, availableResources, knowledgeChunks);
536
519
  const response = await this.aiProvider.sendMessage(prompt, 'recommend-solution-assembly', {
537
520
  user_intent: intent
538
521
  ? `Kubernetes solution assembly for: ${intent}`
@@ -603,9 +586,10 @@ class ResourceRecommender {
603
586
  }
604
587
  }
605
588
  /**
606
- * Load and format solution assembly prompt from file
589
+ * Load and format solution assembly prompt from file.
590
+ * PRD #375: Uses unified knowledge chunks instead of structured OrganizationalPattern objects.
607
591
  */
608
- async loadSolutionAssemblyPrompt(intent, resources, patterns) {
592
+ async loadSolutionAssemblyPrompt(intent, resources, knowledgeChunks) {
609
593
  // Format resources for the prompt with capability information
610
594
  const resourcesText = resources
611
595
  .map((resource, index) => {
@@ -621,83 +605,30 @@ class ResourceRecommender {
621
605
  Confidence: ${resource.capabilities.confidence || 1.0}`;
622
606
  })
623
607
  .join('\n\n');
624
- // Format organizational patterns for AI context
625
- const patternsContext = patterns.length > 0
626
- ? patterns
627
- .map(pattern => `- ID: ${pattern.id}
628
- Description: ${pattern.description}
629
- Suggested Resources: ${pattern.suggestedResources?.join(', ') || 'Not specified'}
630
- Rationale: ${pattern.rationale}
631
- Triggers: ${pattern.triggers?.join(', ') || 'None'}`)
632
- .join('\n')
633
- : 'No organizational patterns found for this request.';
608
+ // Format unified knowledge context for AI (replaces structured patterns)
609
+ // Tags indicate content type: "policy" = enforcement rule, "pattern" = reusable architecture
610
+ const patternsContext = knowledgeChunks.length > 0
611
+ ? knowledgeChunks
612
+ .map(chunk => {
613
+ const typeLabel = chunk.tags.length > 0
614
+ ? `[${chunk.tags.join(', ')}]`
615
+ : '[general]';
616
+ return `- ${typeLabel} ${chunk.content.substring(0, 300)}${chunk.content.length > 300 ? '...' : ''}
617
+ Source: ${chunk.uri}`;
618
+ })
619
+ .join('\n\n')
620
+ : 'No organizational knowledge found for this request.';
634
621
  return (0, shared_prompt_loader_1.loadPrompt)('resource-selection', {
635
622
  intent,
636
623
  resources: resourcesText,
637
- patterns: patternsContext,
624
+ patterns: patternsContext, // Template variable name kept for backward compat
638
625
  });
639
626
  }
627
+ // PRD #375: addMissingPatternResources() removed — structured OrganizationalPattern.suggestedResources
628
+ // no longer exist. Knowledge is stored as text chunks with tags in the unified knowledge-base.
629
+ // The AI reasoning layer interprets knowledge chunk content directly.
640
630
  /**
641
- * Add pattern-suggested resources that are missing from capability search results
642
- */
643
- async addMissingPatternResources(capabilityResources, patterns) {
644
- if (!patterns.length) {
645
- return capabilityResources;
646
- }
647
- // Extract all resource names already in capability results
648
- const existingResourceNames = new Set(capabilityResources.map(r => r.resourceName));
649
- // Collect missing pattern resources
650
- const missingPatternResources = [];
651
- for (const pattern of patterns) {
652
- if (pattern.suggestedResources) {
653
- for (const suggestedResource of pattern.suggestedResources) {
654
- // Skip null/undefined resources
655
- if (!suggestedResource || typeof suggestedResource !== 'string') {
656
- continue;
657
- }
658
- // Convert pattern resource format to resource name (e.g., "resourcegroups.azure.upbound.io" -> resourceName)
659
- const resourceName = suggestedResource.includes('.')
660
- ? suggestedResource
661
- : `${suggestedResource}.core`;
662
- // Only add if not already present in capability results
663
- if (!existingResourceNames.has(resourceName)) {
664
- try {
665
- // Parse resource components
666
- const parts = suggestedResource.split('.');
667
- const kind = parts[0]; // Use resource name as-is: resourcegroups, servicemonitors, etc.
668
- const group = parts.length > 1 ? parts.slice(1).join('.') : '';
669
- missingPatternResources.push({
670
- kind,
671
- group,
672
- resourceName,
673
- capabilities: {
674
- resourceName,
675
- description: `Resource suggested by organizational pattern: ${pattern.description}`,
676
- capabilities: [
677
- `organizational pattern`,
678
- pattern.description.toLowerCase(),
679
- ],
680
- providers: this.inferProvidersFromResourceName(suggestedResource),
681
- complexity: 'medium',
682
- useCase: `Pattern-suggested resource for: ${pattern.rationale}`,
683
- confidence: 1.0, // High confidence since it's from organizational pattern
684
- source: 'organizational-pattern',
685
- patternId: pattern.id,
686
- },
687
- });
688
- existingResourceNames.add(resourceName);
689
- }
690
- catch (error) {
691
- console.warn(`Failed to parse pattern resource ${suggestedResource}:`, error);
692
- }
693
- }
694
- }
695
- }
696
- }
697
- return [...capabilityResources, ...missingPatternResources];
698
- }
699
- /**
700
- * Infer cloud providers from resource name
631
+ * PRD #375: Infer cloud providers from resource name (kept for use in capability processing)
701
632
  */
702
633
  inferProvidersFromResourceName(resourceName) {
703
634
  if (resourceName.includes('azure'))
@@ -735,25 +666,25 @@ class ResourceRecommender {
735
666
  // Note: constructApiVersionFromResourceName method removed - no longer needed
736
667
  // API versions are extracted from kubectl explain schema content during manifest generation
737
668
  /**
738
- * Phase 0: Search for relevant organizational patterns using multi-concept approach
739
- * Returns empty array if Vector DB is not available - this is completely optional
669
+ * Phase 0: Search unified knowledge base for relevant organizational knowledge.
670
+ * Returns empty array if knowledge base is empty or unavailable (non-blocking).
671
+ *
672
+ * PRD #375: Replaces separate searchRelevantPatterns() + policy search.
673
+ * Results include tags so AI can distinguish policy vs pattern vs general content.
740
674
  */
741
- async searchRelevantPatterns(intent) {
742
- // If pattern service is not available, skip pattern search entirely
743
- if (!this.patternService) {
744
- console.log('📋 Pattern service unavailable, skipping pattern search - using pure AI recommendations');
745
- return [];
746
- }
675
+ async searchRelevantKnowledge(intent) {
747
676
  try {
748
- // Search patterns directly with user intent (vector search handles semantic concepts)
749
- const patternResults = await this.patternService.searchPatterns(intent, {
750
- limit: 5,
751
- });
752
- return patternResults.map(result => result.data);
677
+ const result = await (0, knowledge_service_1.searchKnowledgeBase)({ query: intent, limit: 10 });
678
+ if (result.success && result.chunks.length > 0) {
679
+ console.log(`📋 Found ${result.chunks.length} relevant knowledge chunks for recommend (unified KB)`);
680
+ return result.chunks;
681
+ }
682
+ console.log('📋 No relevant knowledge found in knowledge base - using pure AI recommendations');
683
+ return [];
753
684
  }
754
685
  catch (error) {
755
- // Pattern search is non-blocking - if it fails, continue without patterns
756
- console.warn('❌ Pattern search failed, continuing without patterns:', error);
686
+ // Knowledge search is non-blocking - if it fails, continue without context
687
+ console.warn('❌ Knowledge base search failed, continuing without organizational context:', error);
757
688
  return [];
758
689
  }
759
690
  }
@@ -920,33 +851,31 @@ Available Ingress Classes: ${formatResourceList(clusterOptions.ingressClasses)}
920
851
  Available Node Labels: ${clusterOptions.nodeLabels.length > 0 ? clusterOptions.nodeLabels.slice(0, 10).join(', ') : 'None discovered'}`;
921
852
  }
922
853
  /**
923
- * Generate contextual questions using AI based on user intent and solution resources
854
+ * Generate contextual questions using AI based on user intent and solution resources.
855
+ * PRD #375: Uses unified knowledge base instead of separate policy service.
924
856
  */
925
857
  async generateQuestionsWithAI(intent, solution, _explainResource, interaction_id) {
926
858
  try {
927
859
  // Discover cluster options for dynamic questions
928
860
  const clusterOptions = await this.discoverClusterOptions();
929
- // Search for relevant policy intents based on the selected resources
930
- let relevantPolicyResults = [];
931
- if (this.policyService) {
932
- try {
933
- const resourceContext = solution.resources
934
- .map(r => `${r.kind} ${r.description}`)
935
- .join(' ');
936
- const policyResults = await this.policyService.searchPolicyIntents(`${intent} ${resourceContext}`, { limit: 50 });
937
- relevantPolicyResults = policyResults.map(result => ({
938
- policy: result.data,
939
- score: result.score,
940
- matchType: result.matchType,
941
- }));
942
- console.log(`🛡️ Found ${relevantPolicyResults.length} relevant policy intents for question generation`);
943
- }
944
- catch (error) {
945
- console.warn('⚠️ Policy search failed during question generation, proceeding without policies:', error);
861
+ // Search unified knowledge base for relevant policy/pattern guidance
862
+ // PRD #375: Replaces separate policyService.searchPolicyIntents() call
863
+ let knowledgeChunks = [];
864
+ try {
865
+ const resourceContext = solution.resources
866
+ .map(r => `${r.kind} ${r.description}`)
867
+ .join(' ');
868
+ const knowledgeResult = await (0, knowledge_service_1.searchKnowledgeBase)({
869
+ query: `${intent} ${resourceContext}`,
870
+ limit: 10,
871
+ });
872
+ if (knowledgeResult.success) {
873
+ knowledgeChunks = knowledgeResult.chunks;
874
+ console.log(`🛡️ Found ${knowledgeChunks.length} relevant knowledge chunks for question generation (unified KB)`);
946
875
  }
947
876
  }
948
- else {
949
- console.log('🛡️ Policy service unavailable, skipping policy search - proceeding without policy guidance');
877
+ catch (error) {
878
+ console.warn('⚠️ Knowledge base search failed during question generation, proceeding without context:', error);
950
879
  }
951
880
  // Fetch resource schemas for each resource in the solution
952
881
  const resourcesWithSchemas = await Promise.all(solution.resources.map(async (resource) => {
@@ -998,16 +927,19 @@ ${properties}`;
998
927
  .join('\n\n');
999
928
  // Format cluster options for the prompt
1000
929
  const clusterOptionsText = this.formatClusterOptionsText(clusterOptions);
1001
- // Format organizational policies for AI context with relevance scores
1002
- const policyContextText = relevantPolicyResults.length > 0
1003
- ? relevantPolicyResults
1004
- .map(result => `- ID: ${result.policy.id}
1005
- Description: ${result.policy.description}
1006
- Rationale: ${result.policy.rationale}
1007
- Triggers: ${result.policy.triggers?.join(', ') || 'None'}
1008
- Score: ${result.score.toFixed(3)} (${result.matchType})`)
930
+ // Format unified knowledge context for AI (replaces separate policy formatting)
931
+ // PRD #375: Tags distinguish policy, pattern, and general content
932
+ const policyContextText = knowledgeChunks.length > 0
933
+ ? knowledgeChunks
934
+ .map(chunk => {
935
+ const typeLabel = chunk.tags.length > 0
936
+ ? `[${chunk.tags.join(', ')}]`
937
+ : '[general]';
938
+ return `- ${typeLabel} ${chunk.content.substring(0, 200)}${chunk.content.length > 200 ? '...' : ''}
939
+ Source: ${chunk.uri}`;
940
+ })
1009
941
  .join('\n')
1010
- : 'No organizational policies found for this request.';
942
+ : 'No organizational knowledge found for this request.';
1011
943
  // Build source_material for capabilities (Kubernetes resource-based solutions)
1012
944
  const sourceMaterial = `## Source Material
1013
945
  You are generating questions for Kubernetes resources. The schemas below define the available configuration options.
@@ -1107,22 +1039,22 @@ ${resourceDetails}`;
1107
1039
  const { valuesYaml, readme } = await this.fetchHelmChartContent(chart);
1108
1040
  // Discover cluster options for dynamic questions
1109
1041
  const clusterOptions = await this.discoverClusterOptions();
1110
- // Search for relevant policy intents
1111
- let relevantPolicyResults = [];
1112
- if (this.policyService) {
1113
- try {
1114
- const policyResults = await this.policyService.searchPolicyIntents(`${intent} ${chart.chartName} helm chart installation`, { limit: 50 });
1115
- relevantPolicyResults = policyResults.map(result => ({
1116
- policy: result.data,
1117
- score: result.score,
1118
- matchType: result.matchType,
1119
- }));
1120
- console.log(`🛡️ Found ${relevantPolicyResults.length} relevant policy intents for Helm question generation`);
1121
- }
1122
- catch (error) {
1123
- console.warn('⚠️ Policy search failed during Helm question generation:', error);
1042
+ // Search unified knowledge base for relevant policy/pattern guidance
1043
+ // PRD #375: Replaces separate policyService.searchPolicyIntents() call
1044
+ let helmKnowledgeChunks = [];
1045
+ try {
1046
+ const helmKnowledgeResult = await (0, knowledge_service_1.searchKnowledgeBase)({
1047
+ query: `${intent} ${chart.chartName} helm chart installation`,
1048
+ limit: 10,
1049
+ });
1050
+ if (helmKnowledgeResult.success) {
1051
+ helmKnowledgeChunks = helmKnowledgeResult.chunks;
1052
+ console.log(`🛡️ Found ${helmKnowledgeChunks.length} relevant knowledge chunks for Helm question generation (unified KB)`);
1124
1053
  }
1125
1054
  }
1055
+ catch (error) {
1056
+ console.warn('⚠️ Knowledge base search failed during Helm question generation:', error);
1057
+ }
1126
1058
  // Build source_material for Helm chart
1127
1059
  const sourceMaterial = `## Source Material
1128
1060
  You are generating questions for a Helm chart installation. The values.yaml and README below define the available configuration options.
@@ -1139,16 +1071,19 @@ ${valuesYaml || '# No values.yaml available'}
1139
1071
 
1140
1072
  ## README
1141
1073
  ${readme || 'No README available'}`;
1142
- // Format organizational policies
1143
- const policyContextText = relevantPolicyResults.length > 0
1144
- ? relevantPolicyResults
1145
- .map(result => `- ID: ${result.policy.id}
1146
- Description: ${result.policy.description}
1147
- Rationale: ${result.policy.rationale}
1148
- Triggers: ${result.policy.triggers?.join(', ') || 'None'}
1149
- Score: ${result.score.toFixed(3)} (${result.matchType})`)
1074
+ // Format unified knowledge context (replaces policy formatting)
1075
+ // PRD #375: Tags distinguish policy, pattern, and general content
1076
+ const policyContextText = helmKnowledgeChunks.length > 0
1077
+ ? helmKnowledgeChunks
1078
+ .map(chunk => {
1079
+ const typeLabel = chunk.tags.length > 0
1080
+ ? `[${chunk.tags.join(', ')}]`
1081
+ : '[general]';
1082
+ return `- ${typeLabel} ${chunk.content.substring(0, 200)}${chunk.content.length > 200 ? '...' : ''}
1083
+ Source: ${chunk.uri}`;
1084
+ })
1150
1085
  .join('\n')
1151
- : 'No organizational policies found for this request.';
1086
+ : 'No organizational knowledge found for this request.';
1152
1087
  // Format cluster options for the prompt
1153
1088
  const clusterOptionsText = this.formatClusterOptionsText(clusterOptions);
1154
1089
  // Generate questions using the shared prompt
@@ -1 +1 @@
1
- {"version":3,"file":"user-prompts-loader.d.ts","sourceRoot":"","sources":["../../src/core/user-prompts-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-prompts-loader.d.ts","sourceRoot":"","sources":["../../src/core/user-prompts-loader.ts"],"names":[],"mappings":"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"}
@@ -165,8 +165,7 @@ function getIngestedCacheRoot() {
165
165
  * writeFileSync calls to follow (TOCTOU) — the same hardening the token-bearing
166
166
  * clone path uses in createIsolatedCloneRoot.
167
167
  */
168
- function createIngestedStagingDir() {
169
- const root = getIngestedCacheRoot();
168
+ function createIngestedStagingDir(root) {
170
169
  fs.mkdirSync(root, { recursive: true });
171
170
  const dir = fs.mkdtempSync(path.join(root, `staging-${crypto.randomUUID()}-`));
172
171
  try {
@@ -333,8 +332,13 @@ function ingestPromptsSource(input, logger) {
333
332
  // EISDIR, disk full, …) NEVER destroys the previously-cached entry — the old
334
333
  // slot is removed only on the success path, and the in-memory registry is
335
334
  // updated last.
336
- const finalDir = path.join(getIngestedCacheRoot(), crypto.createHash('sha256').update(identifier).digest('hex'));
337
- const stagingDir = createIngestedStagingDir();
335
+ // PRD #647 F3 — resolve the cache root ONCE so the staging dir and the final
336
+ // slot are guaranteed to live on the same filesystem. getIngestedCacheRoot()
337
+ // can otherwise resolve to a different device between calls (project tmp vs the
338
+ // os.tmpdir() fallback), which made the promote rename fail with EXDEV.
339
+ const cacheRoot = getIngestedCacheRoot();
340
+ const finalDir = path.join(cacheRoot, crypto.createHash('sha256').update(identifier).digest('hex'));
341
+ const stagingDir = createIngestedStagingDir(cacheRoot);
338
342
  // PRD #647 N3 — count DISTINCT written paths: two manifest entries that
339
343
  // sanitize to the same path collapse to one file on disk, so fileCount must
340
344
  // not double-count them.
@@ -573,8 +577,11 @@ function getCacheDirectory() {
573
577
  if (!fs.existsSync(parentTmp)) {
574
578
  fs.mkdirSync(parentTmp, { recursive: true });
575
579
  }
576
- // Test if we can write to it
577
- const testFile = path.join(parentTmp, '.write-test');
580
+ // Test if we can write to it. Use a unique probe name so concurrent callers
581
+ // never unlink each other's probe — a shared name races (one caller's unlink
582
+ // makes another's write/unlink throw), wrongly forcing the os.tmpdir()
583
+ // fallback and splitting a single ingest's writes across filesystems.
584
+ const testFile = path.join(parentTmp, `.write-test-${process.pid}-${crypto.randomUUID()}`);
578
585
  fs.writeFileSync(testFile, 'test');
579
586
  fs.unlinkSync(testFile);
580
587
  return projectTmp;
@@ -1 +1 @@
1
- {"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../../src/interfaces/rest-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest-api.d.ts","sourceRoot":"","sources":["../../src/interfaces/rest-api.ts"],"names":[],"mappings":"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"}
@@ -61,7 +61,7 @@ const capability_tools_1 = require("../core/capability-tools");
61
61
  const resource_tools_1 = require("../core/resource-tools");
62
62
  const mermaid_tools_1 = require("../core/mermaid-tools");
63
63
  const plugin_registry_1 = require("../core/plugin-registry");
64
- const manage_knowledge_1 = require("../tools/manage-knowledge");
64
+ const knowledge_service_1 = require("../core/knowledge-service");
65
65
  const user_management_1 = require("./oauth/user-management");
66
66
  const request_context_1 = require("./request-context");
67
67
  const rbac_1 = require("../core/rbac");
@@ -106,13 +106,14 @@ function sanitizeRequestUrlForLogging(url) {
106
106
  try {
107
107
  // req.url is path-relative; provide a dummy base for URL parsing.
108
108
  const parsed = new node_url_1.URL(url, 'http://internal.invalid');
109
+ // Both `?repo=` and `?source=` are scrubbed with the deep helper (userinfo +
110
+ // credential-bearing query params) so a token embedded anywhere in the URL —
111
+ // e.g. `?repo=https://user:tok@host` or `?source=...?token=...` — never
112
+ // appears unscrubbed in the log.
109
113
  const repo = parsed.searchParams.get('repo');
110
114
  if (repo) {
111
- parsed.searchParams.set('repo', (0, user_prompts_loader_1.sanitizeUrlForLogging)(repo));
115
+ parsed.searchParams.set('repo', (0, user_prompts_loader_1.scrubSourceUrl)(repo));
112
116
  }
113
- // PRD #647 M5 (F2): `?source=` is scrubbed with the same deep helper used
114
- // for the echoed `source` (userinfo + credential-bearing query params), so
115
- // `?source=https://user:tok@host` never appears unscrubbed in the log.
116
117
  const source = parsed.searchParams.get('source');
117
118
  if (source) {
118
119
  parsed.searchParams.set('source', (0, user_prompts_loader_1.scrubSourceUrl)(source));
@@ -2136,7 +2137,7 @@ class RestApiRouter {
2136
2137
  };
2137
2138
  }
2138
2139
  const searchInput = input;
2139
- const result = await (0, manage_knowledge_1.searchKnowledgeBase)({
2140
+ const result = await (0, knowledge_service_1.searchKnowledgeBase)({
2140
2141
  query: searchInput.query,
2141
2142
  limit,
2142
2143
  uriFilter,