@vfarcic/dot-ai 0.192.0 → 0.194.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 (105) hide show
  1. package/README.md +6 -6
  2. package/dist/core/agent-display.d.ts +2 -4
  3. package/dist/core/agent-display.d.ts.map +1 -1
  4. package/dist/core/agent-display.js +4 -12
  5. package/dist/core/base-vector-service.d.ts +6 -0
  6. package/dist/core/base-vector-service.d.ts.map +1 -1
  7. package/dist/core/base-vector-service.js +18 -8
  8. package/dist/core/capabilities.d.ts +12 -0
  9. package/dist/core/capabilities.d.ts.map +1 -1
  10. package/dist/core/capability-operations.d.ts +3 -0
  11. package/dist/core/capability-operations.d.ts.map +1 -1
  12. package/dist/core/capability-operations.js +88 -5
  13. package/dist/core/capability-scan-workflow.d.ts +35 -5
  14. package/dist/core/capability-scan-workflow.d.ts.map +1 -1
  15. package/dist/core/capability-scan-workflow.js +169 -145
  16. package/dist/core/capability-vector-service.d.ts +11 -2
  17. package/dist/core/capability-vector-service.d.ts.map +1 -1
  18. package/dist/core/capability-vector-service.js +50 -0
  19. package/dist/core/discovery.d.ts +34 -0
  20. package/dist/core/discovery.d.ts.map +1 -1
  21. package/dist/core/discovery.js +105 -19
  22. package/dist/core/index.d.ts +0 -1
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/index.js +1 -6
  25. package/dist/core/kubectl-tools.d.ts +5 -0
  26. package/dist/core/kubectl-tools.d.ts.map +1 -1
  27. package/dist/core/kubectl-tools.js +74 -2
  28. package/dist/core/kubernetes-utils.d.ts +1 -0
  29. package/dist/core/kubernetes-utils.d.ts.map +1 -1
  30. package/dist/core/kubernetes-utils.js +92 -49
  31. package/dist/core/packaging.d.ts.map +1 -1
  32. package/dist/core/packaging.js +1 -0
  33. package/dist/core/resource-tools.d.ts +163 -1
  34. package/dist/core/resource-tools.d.ts.map +1 -1
  35. package/dist/core/resource-tools.js +343 -23
  36. package/dist/core/resource-vector-service.d.ts +17 -0
  37. package/dist/core/resource-vector-service.d.ts.map +1 -1
  38. package/dist/core/resource-vector-service.js +67 -3
  39. package/dist/core/telemetry/client.d.ts +16 -0
  40. package/dist/core/telemetry/client.d.ts.map +1 -0
  41. package/dist/core/telemetry/client.js +293 -0
  42. package/dist/core/telemetry/config.d.ts +12 -0
  43. package/dist/core/telemetry/config.d.ts.map +1 -0
  44. package/dist/core/telemetry/config.js +130 -0
  45. package/dist/core/telemetry/index.d.ts +30 -0
  46. package/dist/core/telemetry/index.d.ts.map +1 -0
  47. package/dist/core/telemetry/index.js +49 -0
  48. package/dist/core/telemetry/types.d.ts +125 -0
  49. package/dist/core/telemetry/types.d.ts.map +1 -0
  50. package/dist/core/telemetry/types.js +7 -0
  51. package/dist/core/tracing/index.d.ts +1 -1
  52. package/dist/core/tracing/index.d.ts.map +1 -1
  53. package/dist/core/tracing/tool-tracing.d.ts +11 -2
  54. package/dist/core/tracing/tool-tracing.d.ts.map +1 -1
  55. package/dist/core/tracing/tool-tracing.js +17 -3
  56. package/dist/core/vector-db-service.d.ts +7 -0
  57. package/dist/core/vector-db-service.d.ts.map +1 -1
  58. package/dist/core/vector-db-service.js +165 -61
  59. package/dist/core/visualization.d.ts +16 -1
  60. package/dist/core/visualization.d.ts.map +1 -1
  61. package/dist/core/visualization.js +64 -1
  62. package/dist/interfaces/mcp.d.ts +6 -0
  63. package/dist/interfaces/mcp.d.ts.map +1 -1
  64. package/dist/interfaces/mcp.js +36 -7
  65. package/dist/interfaces/rest-api.d.ts +63 -2
  66. package/dist/interfaces/rest-api.d.ts.map +1 -1
  67. package/dist/interfaces/rest-api.js +611 -51
  68. package/dist/mcp/server.js +55 -9
  69. package/dist/tools/answer-question.d.ts.map +1 -1
  70. package/dist/tools/answer-question.js +18 -0
  71. package/dist/tools/choose-solution.d.ts.map +1 -1
  72. package/dist/tools/choose-solution.js +22 -1
  73. package/dist/tools/deploy-manifests.d.ts.map +1 -1
  74. package/dist/tools/deploy-manifests.js +16 -2
  75. package/dist/tools/generate-manifests.d.ts.map +1 -1
  76. package/dist/tools/generate-manifests.js +12 -18
  77. package/dist/tools/operate.d.ts.map +1 -1
  78. package/dist/tools/operate.js +3 -11
  79. package/dist/tools/organizational-data.d.ts +1 -1
  80. package/dist/tools/organizational-data.d.ts.map +1 -1
  81. package/dist/tools/organizational-data.js +8 -17
  82. package/dist/tools/project-setup.d.ts.map +1 -1
  83. package/dist/tools/project-setup.js +5 -18
  84. package/dist/tools/query.d.ts +2 -11
  85. package/dist/tools/query.d.ts.map +1 -1
  86. package/dist/tools/query.js +63 -44
  87. package/dist/tools/recommend.d.ts +18 -1
  88. package/dist/tools/recommend.d.ts.map +1 -1
  89. package/dist/tools/recommend.js +44 -10
  90. package/dist/tools/remediate.d.ts.map +1 -1
  91. package/dist/tools/remediate.js +2 -24
  92. package/dist/tools/version.d.ts.map +1 -1
  93. package/dist/tools/version.js +4 -7
  94. package/package.json +2 -1
  95. package/prompts/partials/query-simple-output.md +11 -0
  96. package/prompts/partials/visualization-output.md +93 -0
  97. package/prompts/query-system.md +8 -12
  98. package/prompts/resource-selection.md +4 -0
  99. package/prompts/visualize.md +1 -68
  100. package/scripts/dot-ai.nu +1 -0
  101. package/scripts/reset-sync-and-scan-test-cluster.sh +120 -0
  102. package/shared-prompts/prd-create.md +1 -1
  103. package/dist/core/feedback.d.ts +0 -43
  104. package/dist/core/feedback.d.ts.map +0 -1
  105. package/dist/core/feedback.js +0 -98
@@ -7,39 +7,6 @@
7
7
  *
8
8
  * PRD #291: Cluster Query Tool - Natural Language Cluster Intelligence
9
9
  */
10
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- var desc = Object.getOwnPropertyDescriptor(m, k);
13
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
- desc = { enumerable: true, get: function() { return m[k]; } };
15
- }
16
- Object.defineProperty(o, k2, desc);
17
- }) : (function(o, m, k, k2) {
18
- if (k2 === undefined) k2 = k;
19
- o[k2] = m[k];
20
- }));
21
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
- Object.defineProperty(o, "default", { enumerable: true, value: v });
23
- }) : function(o, v) {
24
- o["default"] = v;
25
- });
26
- var __importStar = (this && this.__importStar) || (function () {
27
- var ownKeys = function(o) {
28
- ownKeys = Object.getOwnPropertyNames || function (o) {
29
- var ar = [];
30
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
- return ar;
32
- };
33
- return ownKeys(o);
34
- };
35
- return function (mod) {
36
- if (mod && mod.__esModule) return mod;
37
- var result = {};
38
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
- __setModuleDefault(result, mod);
40
- return result;
41
- };
42
- })();
43
10
  Object.defineProperty(exports, "__esModule", { value: true });
44
11
  exports.QUERY_TOOL_INPUT_SCHEMA = exports.QUERY_TOOL_DESCRIPTION = exports.QUERY_TOOL_NAME = void 0;
45
12
  exports.handleQueryTool = handleQueryTool;
@@ -51,8 +18,8 @@ const resource_tools_1 = require("../core/resource-tools");
51
18
  const kubectl_tools_1 = require("../core/kubectl-tools");
52
19
  const generic_session_manager_1 = require("../core/generic-session-manager");
53
20
  const visualization_1 = require("../core/visualization");
54
- const fs = __importStar(require("fs"));
55
- const path = __importStar(require("path"));
21
+ const mermaid_tools_1 = require("../core/mermaid-tools");
22
+ const shared_prompt_loader_1 = require("../core/shared-prompt-loader");
56
23
  // Tool metadata for MCP registration
57
24
  exports.QUERY_TOOL_NAME = 'query';
58
25
  exports.QUERY_TOOL_DESCRIPTION = 'Natural language query interface for Kubernetes cluster intelligence. Ask any questions about your cluster resources, capabilities, and status in plain English. Examples: "What databases are running?", "Describe the nginx deployment", "Show me pods in the kube-system namespace", "What operators are installed?", "Is my-postgres healthy?"';
@@ -123,17 +90,25 @@ async function handleQueryTool(args) {
123
90
  const logger = new error_handling_1.ConsoleLogger('QueryTool');
124
91
  try {
125
92
  // Validate input
126
- const intent = args.intent;
93
+ let intent = args.intent;
127
94
  if (!intent || typeof intent !== 'string') {
128
95
  throw error_handling_1.ErrorHandler.createError(error_handling_1.ErrorCategory.VALIDATION, error_handling_1.ErrorSeverity.MEDIUM, 'Intent is required and must be a string', { operation: 'input_validation', component: 'QueryTool' });
129
96
  }
130
- logger.info('Processing query', { requestId, intent });
97
+ // Detect visualization mode and strip prefix
98
+ const visualizationMode = intent.startsWith(visualization_1.VISUALIZATION_PREFIX);
99
+ if (visualizationMode) {
100
+ intent = intent.slice(visualization_1.VISUALIZATION_PREFIX.length).trim();
101
+ }
102
+ logger.info('Processing query', { requestId, intent, visualizationMode });
131
103
  // Initialize AI provider
132
104
  const aiProvider = (0, ai_provider_factory_1.createAIProvider)();
133
- // Load system prompt
134
- const promptPath = path.join(__dirname, '..', '..', 'prompts', 'query-system.md');
135
- const systemPrompt = fs.readFileSync(promptPath, 'utf8');
136
- // Combined tool executor for capability, resource, and kubectl tools
105
+ // Load system prompt with appropriate output instructions
106
+ const systemPrompt = (0, shared_prompt_loader_1.loadPrompt)('query-system', {
107
+ outputInstructions: visualizationMode
108
+ ? (0, shared_prompt_loader_1.loadPrompt)('partials/visualization-output')
109
+ : (0, shared_prompt_loader_1.loadPrompt)('partials/query-simple-output')
110
+ });
111
+ // Combined tool executor for capability, resource, kubectl, and mermaid tools
137
112
  const executeQueryTools = async (toolName, input) => {
138
113
  // Route to appropriate executor based on tool name
139
114
  if (toolName.startsWith('search_capabilities') || toolName.startsWith('query_capabilities')) {
@@ -145,6 +120,9 @@ async function handleQueryTool(args) {
145
120
  if (toolName.startsWith('kubectl_')) {
146
121
  return (0, kubectl_tools_1.executeKubectlTools)(toolName, input);
147
122
  }
123
+ if (toolName === 'validate_mermaid') {
124
+ return (0, mermaid_tools_1.executeMermaidTools)(toolName, input);
125
+ }
148
126
  return {
149
127
  success: false,
150
128
  error: `Unknown tool: ${toolName}`,
@@ -160,11 +138,15 @@ async function handleQueryTool(args) {
160
138
  kubectl_tools_1.KUBECTL_EVENTS_TOOL,
161
139
  kubectl_tools_1.KUBECTL_GET_CRD_SCHEMA_TOOL
162
140
  ];
141
+ // Build tool list - add mermaid tools when in visualization mode
142
+ const tools = visualizationMode
143
+ ? [...capability_tools_1.CAPABILITY_TOOLS, ...resource_tools_1.RESOURCE_TOOLS, ...KUBECTL_READONLY_TOOLS, ...mermaid_tools_1.MERMAID_TOOLS]
144
+ : [...capability_tools_1.CAPABILITY_TOOLS, ...resource_tools_1.RESOURCE_TOOLS, ...KUBECTL_READONLY_TOOLS];
163
145
  // Execute tool loop with capability, resource, and kubectl tools
164
146
  const result = await aiProvider.toolLoop({
165
147
  systemPrompt,
166
148
  userMessage: intent,
167
- tools: [...capability_tools_1.CAPABILITY_TOOLS, ...resource_tools_1.RESOURCE_TOOLS, ...KUBECTL_READONLY_TOOLS],
149
+ tools,
168
150
  toolExecutor: executeQueryTools,
169
151
  maxIterations: 30,
170
152
  operation: 'query',
@@ -175,12 +157,49 @@ async function handleQueryTool(args) {
175
157
  });
176
158
  // Extract data from execution record (reliable, not AI self-reporting)
177
159
  const toolsUsed = [...new Set(result.toolCallsExecuted.map(tc => tc.tool))];
178
- const summary = parseSummary(result.finalMessage);
179
160
  logger.info('Query completed', {
180
161
  requestId,
181
162
  iterations: result.iterations,
182
- toolsUsed
163
+ toolsUsed,
164
+ visualizationMode
183
165
  });
166
+ // Handle visualization mode - return visualization response with sessionId for caching
167
+ if (visualizationMode) {
168
+ const visualizationResponse = (0, visualization_1.parseVisualizationResponse)(result.finalMessage, toolsUsed);
169
+ // Create session with cached visualization for URL caching/bookmarking (PRD #328)
170
+ const sessionManager = new generic_session_manager_1.GenericSessionManager('qry');
171
+ const session = sessionManager.createSession({
172
+ toolName: 'query',
173
+ intent,
174
+ summary: visualizationResponse.title, // Use title as summary for visualization sessions
175
+ toolsUsed,
176
+ iterations: result.iterations,
177
+ toolCallsExecuted: result.toolCallsExecuted,
178
+ cachedVisualization: {
179
+ title: visualizationResponse.title,
180
+ visualizations: visualizationResponse.visualizations,
181
+ insights: visualizationResponse.insights,
182
+ generatedAt: new Date().toISOString()
183
+ }
184
+ });
185
+ logger.info('Visualization session created', {
186
+ requestId,
187
+ sessionId: session.sessionId
188
+ });
189
+ return {
190
+ content: [
191
+ {
192
+ type: 'text',
193
+ text: JSON.stringify({
194
+ sessionId: session.sessionId,
195
+ ...visualizationResponse
196
+ }, null, 2)
197
+ }
198
+ ]
199
+ };
200
+ }
201
+ // Normal mode - return summary with session for later visualization
202
+ const summary = parseSummary(result.finalMessage);
184
203
  // Store session for visualization (PRD #317, PRD #320)
185
204
  const sessionManager = new generic_session_manager_1.GenericSessionManager('qry');
186
205
  const session = sessionManager.createSession({
@@ -18,7 +18,7 @@ export declare const RECOMMEND_TOOL_INPUT_SCHEMA: {
18
18
  };
19
19
  export interface SolutionData {
20
20
  toolName: 'recommend';
21
- stage?: string;
21
+ stage?: 'solutions' | 'questions' | 'manifests' | 'deployed';
22
22
  intent: string;
23
23
  type: string;
24
24
  score: number;
@@ -61,6 +61,23 @@ export interface SolutionData {
61
61
  validationAttempts?: number;
62
62
  packagingAttempts?: number;
63
63
  };
64
+ currentQuestionStage?: 'required' | 'basic' | 'advanced' | 'open';
65
+ nextQuestionStage?: string | null;
66
+ allSolutions?: Array<{
67
+ solutionId: string;
68
+ type: string;
69
+ score: number;
70
+ description: string;
71
+ reasons: string[];
72
+ }>;
73
+ organizationalContext?: {
74
+ solutionsUsingPatterns: number;
75
+ totalSolutions: number;
76
+ totalPatterns: number;
77
+ totalPolicies: number;
78
+ patternsAvailable: string;
79
+ policiesAvailable: string;
80
+ };
64
81
  }
65
82
  /**
66
83
  * Direct MCP tool handler for recommend functionality (unified with stage routing)
@@ -1 +1 @@
1
- {"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/tools/recommend.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,KAAK,EAA0B,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAWhD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,0BAA0B,yXAAyX,CAAC;AAGja,eAAO,MAAM,2BAA2B;;;;;;;;CAWvC,CAAC;AAIF,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE;QACT,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QACd,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B,kBAAkB,CAAC,EAAE;QACnB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,WAAW,CAAC;QACnC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzD,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE;YACN,UAAU,EAAE,MAAM,CAAC;YACnB,cAAc,EAAE,MAAM,CAAC;YACvB,SAAS,EAAE,MAAM,CAAC;YAClB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;QACF,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAiCD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CA6WxD"}
1
+ {"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/tools/recommend.ts"],"names":[],"mappings":"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"}
@@ -221,7 +221,8 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
221
221
  },
222
222
  questions: { required: [], basic: [], advanced: [] }, // Will be generated from chart values later
223
223
  answers: {},
224
- timestamp
224
+ timestamp,
225
+ stage: 'solutions' // UI page refresh support
225
226
  };
226
227
  const session = sessionManager.createSession(solutionData);
227
228
  const solutionId = session.sessionId;
@@ -235,6 +236,18 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
235
236
  reasons: aiSolution.reasons
236
237
  });
237
238
  }
239
+ // Update all sessions with allSolutions context for UI page refresh
240
+ for (const summary of helmSolutionSummaries) {
241
+ sessionManager.updateSession(summary.solutionId, {
242
+ allSolutions: helmSolutionSummaries.map(s => ({
243
+ solutionId: s.solutionId,
244
+ type: s.type,
245
+ score: s.score,
246
+ description: s.description,
247
+ reasons: s.reasons
248
+ }))
249
+ });
250
+ }
238
251
  // PRD #320: Generate visualization URL with all solution session IDs
239
252
  const helmSessionIds = helmSolutionSummaries.map(s => s.solutionId);
240
253
  const helmVisualizationUrl = (0, visualization_1.getVisualizationUrl)(helmSessionIds);
@@ -295,7 +308,8 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
295
308
  questions: solution.questions, // Includes relevantPolicies from question generation
296
309
  answers: {}, // Empty initially - will be filled by answerQuestion tool
297
310
  timestamp,
298
- appliedPatterns: solution.appliedPatterns || []
311
+ appliedPatterns: solution.appliedPatterns || [],
312
+ stage: 'solutions' // UI page refresh support
299
313
  };
300
314
  // Create solution session
301
315
  const session = sessionManager.createSession(solutionData);
@@ -319,10 +333,37 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
319
333
  relevantPolicies: solution.questions?.relevantPolicies || []
320
334
  });
321
335
  }
336
+ // Update all sessions with allSolutions context for UI page refresh
337
+ for (const summary of solutionSummaries) {
338
+ sessionManager.updateSession(summary.solutionId, {
339
+ allSolutions: solutionSummaries.map(s => ({
340
+ solutionId: s.solutionId,
341
+ type: s.type,
342
+ score: s.score,
343
+ description: s.description,
344
+ reasons: s.reasons
345
+ }))
346
+ });
347
+ }
322
348
  // Analyze pattern/policy usage across all solutions
323
349
  const patternsUsedCount = solutionSummaries.filter(s => s.appliedPatterns && s.appliedPatterns.length > 0).length;
324
350
  const totalPatterns = solutionSummaries.reduce((count, s) => count + (s.appliedPatterns?.length || 0), 0);
325
351
  const totalPolicies = solutionSummaries.reduce((count, s) => count + (s.relevantPolicies?.length || 0), 0);
352
+ // Build organizational context for storage and response
353
+ const organizationalContext = {
354
+ solutionsUsingPatterns: patternsUsedCount,
355
+ totalSolutions: solutionSummaries.length,
356
+ totalPatterns: totalPatterns,
357
+ totalPolicies: totalPolicies,
358
+ patternsAvailable: totalPatterns > 0 ? "Yes" : "None found or pattern search failed",
359
+ policiesAvailable: totalPolicies > 0 ? "Yes" : "None found or policy search failed"
360
+ };
361
+ // Update all sessions with organizationalContext for UI page refresh
362
+ for (const summary of solutionSummaries) {
363
+ sessionManager.updateSession(summary.solutionId, {
364
+ organizationalContext
365
+ });
366
+ }
326
367
  // PRD #320: Generate visualization URL with all solution session IDs
327
368
  const sessionIds = solutionSummaries.map(s => s.solutionId);
328
369
  const visualizationUrl = (0, visualization_1.getVisualizationUrl)(sessionIds);
@@ -330,14 +371,7 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
330
371
  const response = {
331
372
  intent: args.intent,
332
373
  solutions: solutionSummaries,
333
- organizationalContext: {
334
- solutionsUsingPatterns: patternsUsedCount,
335
- totalSolutions: solutionSummaries.length,
336
- totalPatterns: totalPatterns,
337
- totalPolicies: totalPolicies,
338
- patternsAvailable: totalPatterns > 0 ? "Yes" : "None found or pattern search failed",
339
- policiesAvailable: totalPolicies > 0 ? "Yes" : "None found or policy search failed"
340
- },
374
+ organizationalContext,
341
375
  nextAction: "Call recommend tool with stage: chooseSolution and your preferred solutionId",
342
376
  guidance: "🔴 CRITICAL: You MUST present these solutions to the user and ask them to choose. DO NOT automatically call chooseSolution() without user input. Stop here and wait for user selection. IMPORTANT: Show the list of Kubernetes resources (from the 'resources' field) that each solution will use - this helps users understand what gets deployed. ALSO: Include pattern usage information in your response - show which solutions used organizational patterns and which did not.",
343
377
  timestamp,
@@ -1 +1 @@
1
- {"version":3,"file":"remediate.d.ts","sourceRoot":"","sources":["../../src/tools/remediate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remediate.d.ts","sourceRoot":"","sources":["../../src/tools/remediate.ts"],"names":[],"mappings":"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"}
@@ -485,23 +485,12 @@ IMPORTANT: You MUST respond with the final JSON analysis format as specified in
485
485
  summary: 'Validation confirmed issue resolution'
486
486
  }
487
487
  };
488
- // Build response with optional feedback message in JSON
489
- const feedbackMessage = (0, index_1.maybeGetFeedbackMessage)();
490
- const responseWithFeedback = {
491
- ...successResponse,
492
- ...(feedbackMessage ? { feedbackMessage } : {})
493
- };
494
488
  const content = [
495
489
  {
496
490
  type: 'text',
497
- text: JSON.stringify(responseWithFeedback, null, 2)
491
+ text: JSON.stringify(successResponse, null, 2)
498
492
  }
499
493
  ];
500
- // Add agent instruction block if feedback message is present
501
- const agentDisplayBlock = (0, index_1.buildAgentDisplayBlock)({ feedbackMessage });
502
- if (agentDisplayBlock) {
503
- content.push(agentDisplayBlock);
504
- }
505
494
  return { content };
506
495
  }
507
496
  catch (error) {
@@ -568,23 +557,12 @@ IMPORTANT: You MUST respond with the final JSON analysis format as specified in
568
557
  successfulActions: results.filter(r => r.success).length,
569
558
  failedActions: results.filter(r => !r.success).length
570
559
  });
571
- // Build response with optional feedback message in JSON (only on success)
572
- const executionFeedbackMessage = overallSuccess ? (0, index_1.maybeGetFeedbackMessage)() : '';
573
- const responseWithFeedback = {
574
- ...response,
575
- ...(executionFeedbackMessage ? { feedbackMessage: executionFeedbackMessage } : {})
576
- };
577
560
  const content = [
578
561
  {
579
562
  type: 'text',
580
- text: JSON.stringify(responseWithFeedback, null, 2)
563
+ text: JSON.stringify(response, null, 2)
581
564
  }
582
565
  ];
583
- // Add agent instruction block if feedback message is present
584
- const agentDisplayBlock = (0, index_1.buildAgentDisplayBlock)({ feedbackMessage: executionFeedbackMessage });
585
- if (agentDisplayBlock) {
586
- content.push(agentDisplayBlock);
587
- }
588
566
  return { content };
589
567
  }
590
568
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/tools/version.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/tools/version.ts"],"names":[],"mappings":"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"}
@@ -635,8 +635,6 @@ async function handleVersionTool(args, logger, requestId) {
635
635
  capabilitySystemReady: capabilityStatus.systemReady,
636
636
  kyvernoReady: kyvernoStatus.policyGenerationReady
637
637
  });
638
- // Check if we should show feedback message
639
- const feedbackMessage = (0, index_1.maybeGetFeedbackMessage)();
640
638
  // Build summary object
641
639
  const summary = {
642
640
  overall: (vectorDBStatus.connected && aiProviderStatus.connected && kubernetesStatus.connected && capabilityStatus.systemReady ? 'healthy' : 'degraded'),
@@ -669,22 +667,21 @@ async function handleVersionTool(args, logger, requestId) {
669
667
  });
670
668
  // PRD #320: Generate visualization URL if configured
671
669
  const visualizationUrl = (0, visualization_1.getVisualizationUrl)(session.sessionId);
672
- // Build response with optional visualization URL and feedback message in JSON
670
+ // Build response with optional visualization URL in JSON
673
671
  const responseData = {
674
672
  status: 'success',
675
673
  system: systemStatus,
676
674
  summary,
677
675
  timestamp,
678
- ...(visualizationUrl ? { visualizationUrl } : {}),
679
- ...(feedbackMessage ? { feedbackMessage } : {})
676
+ ...(visualizationUrl ? { visualizationUrl } : {})
680
677
  };
681
678
  // Build content blocks - JSON for REST API, agent instruction for MCP agents
682
679
  const content = [{
683
680
  type: 'text',
684
681
  text: JSON.stringify(responseData, null, 2)
685
682
  }];
686
- // Add agent instruction block if visualization URL or feedback message is present
687
- const agentDisplayBlock = (0, index_1.buildAgentDisplayBlock)({ visualizationUrl, feedbackMessage });
683
+ // Add agent instruction block if visualization URL is present
684
+ const agentDisplayBlock = (0, index_1.buildAgentDisplayBlock)({ visualizationUrl });
688
685
  if (agentDisplayBlock) {
689
686
  content.push(agentDisplayBlock);
690
687
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vfarcic/dot-ai",
3
- "version": "0.192.0",
3
+ "version": "0.194.0",
4
4
  "description": "AI-powered development productivity platform that enhances software development workflows through intelligent automation and AI-driven assistance",
5
5
  "mcpName": "io.github.vfarcic/dot-ai",
6
6
  "main": "dist/index.js",
@@ -115,6 +115,7 @@
115
115
  "ai": "^5.0.60",
116
116
  "handlebars": "^4.7.8",
117
117
  "mermaid": "^11.12.2",
118
+ "posthog-node": "^5.23.0",
118
119
  "yaml": "^2.8.0",
119
120
  "zod-to-json-schema": "^3.24.6"
120
121
  },
@@ -0,0 +1,11 @@
1
+ ## Output Format
2
+
3
+ When you have gathered sufficient information, respond with ONLY this JSON:
4
+
5
+ ```json
6
+ {
7
+ "summary": "Human-readable summary of what was found"
8
+ }
9
+ ```
10
+
11
+ No text before or after the JSON.
@@ -0,0 +1,93 @@
1
+ ## Output Format
2
+
3
+ When you have gathered sufficient information, respond with ONLY a JSON object (no markdown code fences, no extra text):
4
+
5
+ {
6
+ "title": "Descriptive title based on what was found",
7
+ "visualizations": [...],
8
+ "insights": [...]
9
+ }
10
+
11
+ **If you cannot fulfill the user's request**, return (still as raw JSON, no code fences):
12
+
13
+ {
14
+ "title": "Unable to Perform Operation",
15
+ "visualizations": [],
16
+ "insights": ["Explanation of why the request cannot be fulfilled and what tool or action should be used instead."],
17
+ "status": "error"
18
+ }
19
+
20
+ ## Visualization Types
21
+
22
+ Generate as many or as few visualizations as add value. You can:
23
+ - Include multiple visualizations of the same type
24
+ - Skip any type entirely if it doesn't add value for this data
25
+ - Use whatever combination best represents what you found
26
+
27
+ Each visualization:
28
+ ```
29
+ {
30
+ "id": "unique-id",
31
+ "label": "Tab Label",
32
+ "type": "mermaid" | "table" | "cards" | "code" | "bar-chart",
33
+ "content": <type-specific-content>
34
+ }
35
+ ```
36
+
37
+ ### mermaid
38
+ - `content`: Valid Mermaid diagram string
39
+ - Use `graph TD` or `graph LR` depending on relationship type
40
+ - Use subgraphs to group related items
41
+ - Arrows: `-->` for direct relationships, `-.->` for indirect/inferred
42
+ - **Styling rules**:
43
+ - Only style nodes that represent errors or problems
44
+ - For error nodes: `style NodeId fill:#ef4444,stroke:#dc2626,color:#ffffff` (white text on red background)
45
+ - **CRITICAL: Text contrast** - Always ensure text is readable against the background:
46
+ - Dark backgrounds (red, gray, etc.) → use `color:#ffffff` (white text)
47
+ - Light backgrounds → use `color:#ffffff` or `color:#000000` depending on shade
48
+ - NEVER use similar colors for text and background (e.g., red text on pink background)
49
+ - Do NOT add colors or styling to healthy/normal nodes - use default Mermaid styling
50
+ - Truncate UUIDs to first 8 characters (e.g., `pvc-508555a4...`)
51
+ - Keep node labels under 30 characters when possible
52
+
53
+ ### table
54
+ - `content`: `{ "headers": ["Col1", "Col2"], "rows": [["val1", "val2"]], "rowStatuses": ["error", null, "ok"] }`
55
+ - Choose columns relevant to the data present
56
+ - Include status/condition information when available
57
+ - Optional `rowStatuses` array: Indicate row-level status. Values: `"error"`, `"warning"`, `"ok"`, or `null`. Array length should match rows.
58
+
59
+ ### cards
60
+ - `content`: `[{ "id": "unique", "title": "Name", "subtitle": "Type or status", "description": "Details", "tags": ["tag1"], "status": "error" }]`
61
+ - Use for items where individual status or comparison matters
62
+ - Tags should reflect actual state from the data
63
+ - Optional `status` field: Indicate item status. Values: `"error"`, `"warning"`, `"ok"`. Omit for neutral items.
64
+
65
+ ### code
66
+ - `content`: `{ "language": "yaml" | "json" | "bash", "code": "..." }`
67
+ - Use sparingly - only when raw output adds value
68
+
69
+ ### bar-chart
70
+ - `content`: `{ "data": [{ "label": "...", "value": 8.5, "max": 10, "status": "ok" }], "unit": "Gi", "orientation": "horizontal" }`
71
+ - `data[].label`: Category label
72
+ - `data[].value`: Numeric value
73
+ - `data[].max`: Optional maximum for percentage calculation
74
+ - `data[].status`: Optional `"error"`, `"warning"`, `"ok"`. Omit for neutral items.
75
+ - `unit`: Optional unit label
76
+ - `orientation`: Optional `"horizontal"` (default) or `"vertical"`
77
+
78
+ ## Insights
79
+
80
+ Generate insights that add value beyond what someone could see by just reading the raw data. Prioritize non-obvious findings over summaries.
81
+
82
+ Each insight should:
83
+ - Reference specific items from the data
84
+ - Explain WHY it matters, not just WHAT you found
85
+ - Be actionable when highlighting issues
86
+
87
+ ## Rules
88
+
89
+ 1. **Data-driven only** - Base visualizations on actual data present
90
+ 2. **Skip empty visualizations** - Don't include visualizations with no meaningful content
91
+ 3. **Valid output** - Ensure Mermaid syntax is correct and JSON is valid
92
+ 4. **JSON only** - No markdown fences, no explanations outside the JSON structure
93
+ 5. **Use validate_mermaid** - Before returning any Mermaid diagrams, validate them using the validate_mermaid tool
@@ -1,6 +1,12 @@
1
1
  # Kubernetes Cluster Query Agent
2
2
 
3
- You are a Kubernetes cluster analyst. Use the available tools to answer the user's query.
3
+ You are a read-only Kubernetes cluster analyst. Use the available tools to answer questions about cluster state, resources, and capabilities.
4
+
5
+ ## Critical Constraint: Read-Only Operations
6
+
7
+ You can ONLY query information. You CANNOT modify the cluster (scale, create, update, delete, restart, patch, rollback, etc.).
8
+
9
+ If the user requests a modification, immediately return a response (following the output format below) explaining that you can only query cluster information and they should use the `operate` tool instead. Do not investigate or ask clarifying questions about modification requests.
4
10
 
5
11
  ## Thoroughness
6
12
 
@@ -8,14 +14,4 @@ You are a Kubernetes cluster analyst. Use the available tools to answer the user
8
14
  - For conceptual queries, check ALL resource kinds returned by capability search
9
15
  - When in doubt, search more rather than less
10
16
 
11
- ## Output Format
12
-
13
- When you have gathered sufficient information, respond with ONLY this JSON:
14
-
15
- ```json
16
- {
17
- "summary": "Human-readable summary of what was found"
18
- }
19
- ```
20
-
21
- No text before or after the JSON.
17
+ {{{outputInstructions}}}
@@ -86,6 +86,10 @@ Respond with ONLY a JSON object. The format depends on whether capabilities can
86
86
 
87
87
  Return solutions with resources. Include the `resourceName` field for each resource (extract from Available Resources list).
88
88
 
89
+ **Solution type field (REQUIRED):**
90
+ - `"type": "single"` - when the solution uses exactly ONE resource
91
+ - `"type": "combination"` - when the solution uses TWO OR MORE resources together
92
+
89
93
  ```json
90
94
  {
91
95
  "solutions": [