@vfarcic/dot-ai 0.179.0 → 0.181.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/generic-session-manager.d.ts +5 -0
- package/dist/core/generic-session-manager.d.ts.map +1 -1
- package/dist/core/generic-session-manager.js +8 -1
- package/dist/core/mermaid-tools.d.ts +27 -0
- package/dist/core/mermaid-tools.d.ts.map +1 -0
- package/dist/core/mermaid-tools.js +115 -0
- package/dist/core/providers/vercel-provider.d.ts.map +1 -1
- package/dist/core/providers/vercel-provider.js +14 -13
- package/dist/core/visualization.d.ts +77 -0
- package/dist/core/visualization.d.ts.map +1 -0
- package/dist/core/visualization.js +80 -0
- package/dist/interfaces/rest-api.d.ts +19 -2
- package/dist/interfaces/rest-api.d.ts.map +1 -1
- package/dist/interfaces/rest-api.js +120 -47
- package/dist/tools/generate-manifests.d.ts.map +1 -1
- package/dist/tools/generate-manifests.js +93 -23
- package/dist/tools/operate-analysis.d.ts.map +1 -1
- package/dist/tools/operate-analysis.js +5 -0
- package/dist/tools/operate.d.ts +4 -1
- package/dist/tools/operate.d.ts.map +1 -1
- package/dist/tools/operate.js +9 -1
- package/dist/tools/organizational-data.d.ts +1 -1
- package/dist/tools/query.d.ts +2 -1
- package/dist/tools/query.d.ts.map +1 -1
- package/dist/tools/query.js +4 -15
- package/dist/tools/recommend.d.ts +22 -0
- package/dist/tools/recommend.d.ts.map +1 -1
- package/dist/tools/recommend.js +41 -16
- package/dist/tools/remediate.d.ts +3 -1
- package/dist/tools/remediate.d.ts.map +1 -1
- package/dist/tools/remediate.js +31 -12
- package/dist/tools/version.d.ts +16 -0
- package/dist/tools/version.d.ts.map +1 -1
- package/dist/tools/version.js +55 -29
- package/package.json +2 -1
- package/prompts/visualize.md +86 -0
- package/scripts/dot-ai.nu +43 -5
- package/prompts/visualize-query.md +0 -116
package/dist/tools/query.js
CHANGED
|
@@ -50,6 +50,7 @@ const capability_tools_1 = require("../core/capability-tools");
|
|
|
50
50
|
const resource_tools_1 = require("../core/resource-tools");
|
|
51
51
|
const kubectl_tools_1 = require("../core/kubectl-tools");
|
|
52
52
|
const generic_session_manager_1 = require("../core/generic-session-manager");
|
|
53
|
+
const visualization_1 = require("../core/visualization");
|
|
53
54
|
const fs = __importStar(require("fs"));
|
|
54
55
|
const path = __importStar(require("path"));
|
|
55
56
|
// Tool metadata for MCP registration
|
|
@@ -60,19 +61,6 @@ exports.QUERY_TOOL_INPUT_SCHEMA = {
|
|
|
60
61
|
intent: zod_1.z.string().min(1).max(1000).describe('Natural language query about the cluster'),
|
|
61
62
|
interaction_id: zod_1.z.string().optional().describe('INTERNAL ONLY - Do not populate. Used for evaluation dataset generation.')
|
|
62
63
|
};
|
|
63
|
-
/**
|
|
64
|
-
* Get visualization URL if WEB_UI_BASE_URL is configured
|
|
65
|
-
* PRD #317: Feature toggle - only include URL when env var is set
|
|
66
|
-
*/
|
|
67
|
-
function getVisualizationUrl(sessionId) {
|
|
68
|
-
const baseUrl = process.env.WEB_UI_BASE_URL;
|
|
69
|
-
if (!baseUrl) {
|
|
70
|
-
return undefined;
|
|
71
|
-
}
|
|
72
|
-
// Remove trailing slash if present, then append /v/{sessionId}
|
|
73
|
-
const normalizedBaseUrl = baseUrl.replace(/\/$/, '');
|
|
74
|
-
return `${normalizedBaseUrl}/v/${sessionId}`;
|
|
75
|
-
}
|
|
76
64
|
/**
|
|
77
65
|
* Parse the AI's final JSON response for summary only
|
|
78
66
|
*/
|
|
@@ -193,9 +181,10 @@ async function handleQueryTool(args) {
|
|
|
193
181
|
iterations: result.iterations,
|
|
194
182
|
toolsUsed
|
|
195
183
|
});
|
|
196
|
-
// Store session for visualization (PRD #317)
|
|
184
|
+
// Store session for visualization (PRD #317, PRD #320)
|
|
197
185
|
const sessionManager = new generic_session_manager_1.GenericSessionManager('qry');
|
|
198
186
|
const session = sessionManager.createSession({
|
|
187
|
+
toolName: 'query', // PRD #320: Tool identifier for visualization endpoint
|
|
199
188
|
intent,
|
|
200
189
|
summary,
|
|
201
190
|
toolsUsed,
|
|
@@ -203,7 +192,7 @@ async function handleQueryTool(args) {
|
|
|
203
192
|
toolCallsExecuted: result.toolCallsExecuted
|
|
204
193
|
});
|
|
205
194
|
// PRD #317: Include visualization URL when WEB_UI_BASE_URL is configured
|
|
206
|
-
const visualizationUrl = getVisualizationUrl(session.sessionId);
|
|
195
|
+
const visualizationUrl = (0, visualization_1.getVisualizationUrl)(session.sessionId);
|
|
207
196
|
logger.info('Session created for visualization', {
|
|
208
197
|
requestId,
|
|
209
198
|
sessionId: session.sessionId,
|
|
@@ -17,6 +17,8 @@ export declare const RECOMMEND_TOOL_INPUT_SCHEMA: {
|
|
|
17
17
|
interaction_id: z.ZodOptional<z.ZodString>;
|
|
18
18
|
};
|
|
19
19
|
export interface SolutionData {
|
|
20
|
+
toolName: 'recommend';
|
|
21
|
+
stage?: string;
|
|
20
22
|
intent: string;
|
|
21
23
|
type: string;
|
|
22
24
|
score: number;
|
|
@@ -39,6 +41,26 @@ export interface SolutionData {
|
|
|
39
41
|
answers: Record<string, any>;
|
|
40
42
|
timestamp: string;
|
|
41
43
|
appliedPatterns?: string[];
|
|
44
|
+
generatedManifests?: {
|
|
45
|
+
type: 'raw' | 'helm' | 'kustomize';
|
|
46
|
+
outputPath?: string;
|
|
47
|
+
files?: Array<{
|
|
48
|
+
relativePath: string;
|
|
49
|
+
content: string;
|
|
50
|
+
}>;
|
|
51
|
+
valuesYaml?: string;
|
|
52
|
+
helmCommand?: string;
|
|
53
|
+
chart?: {
|
|
54
|
+
repository: string;
|
|
55
|
+
repositoryName: string;
|
|
56
|
+
chartName: string;
|
|
57
|
+
version: string;
|
|
58
|
+
};
|
|
59
|
+
releaseName?: string;
|
|
60
|
+
namespace?: string;
|
|
61
|
+
validationAttempts?: number;
|
|
62
|
+
packagingAttempts?: number;
|
|
63
|
+
};
|
|
42
64
|
}
|
|
43
65
|
/**
|
|
44
66
|
* 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,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
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,EAAE,MAAM,eAAe,CAAC;AACtC,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,CA+WxD"}
|
package/dist/tools/recommend.js
CHANGED
|
@@ -16,6 +16,7 @@ const generate_manifests_1 = require("./generate-manifests");
|
|
|
16
16
|
const deploy_manifests_1 = require("./deploy-manifests");
|
|
17
17
|
const shared_prompt_loader_1 = require("../core/shared-prompt-loader");
|
|
18
18
|
const platform_utils_1 = require("../core/platform-utils");
|
|
19
|
+
const visualization_1 = require("../core/visualization");
|
|
19
20
|
const artifacthub_1 = require("../core/artifacthub");
|
|
20
21
|
// Intent refinement heuristic constants
|
|
21
22
|
const VAGUE_INTENT_THRESHOLD = 100; // Characters - intents below this trigger guidance
|
|
@@ -202,6 +203,7 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
|
|
|
202
203
|
// Find the original chart data from ArtifactHub results
|
|
203
204
|
const originalChart = charts.find(c => c.name === aiSolution.chartName);
|
|
204
205
|
const solutionData = {
|
|
206
|
+
toolName: 'recommend',
|
|
205
207
|
intent: args.intent,
|
|
206
208
|
type: 'helm',
|
|
207
209
|
score: aiSolution.score,
|
|
@@ -232,6 +234,9 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
|
|
|
232
234
|
reasons: aiSolution.reasons
|
|
233
235
|
});
|
|
234
236
|
}
|
|
237
|
+
// PRD #320: Generate visualization URL with all solution session IDs
|
|
238
|
+
const helmSessionIds = helmSolutionSummaries.map(s => s.solutionId);
|
|
239
|
+
const helmVisualizationUrl = (0, visualization_1.getVisualizationUrl)(helmSessionIds);
|
|
235
240
|
// Build Helm solutions response
|
|
236
241
|
const helmResponse = {
|
|
237
242
|
intent: args.intent,
|
|
@@ -239,19 +244,27 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
|
|
|
239
244
|
helmInstallation: true,
|
|
240
245
|
nextAction: 'Call recommend tool with stage: chooseSolution and your preferred solutionId',
|
|
241
246
|
guidance: '🔴 CRITICAL: Present these Helm chart options to the user and ask them to choose. DO NOT automatically call chooseSolution() without user input. Show the chart details (repository, version, official status) to help users decide.',
|
|
242
|
-
timestamp
|
|
247
|
+
timestamp,
|
|
248
|
+
...(helmVisualizationUrl && { visualizationUrl: helmVisualizationUrl })
|
|
243
249
|
};
|
|
244
250
|
logger.info('Helm solutions prepared', {
|
|
245
251
|
requestId,
|
|
246
252
|
solutionCount: helmSolutionSummaries.length,
|
|
247
|
-
topScore: helmSolutionSummaries[0]?.score
|
|
253
|
+
topScore: helmSolutionSummaries[0]?.score,
|
|
254
|
+
...(helmVisualizationUrl && { visualizationUrl: helmVisualizationUrl })
|
|
248
255
|
});
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
256
|
+
// PRD #320: Return two content blocks - JSON for REST API, text instruction for MCP agents
|
|
257
|
+
const content = [{
|
|
258
|
+
type: 'text',
|
|
259
|
+
text: JSON.stringify(helmResponse, null, 2)
|
|
260
|
+
}];
|
|
261
|
+
if (helmVisualizationUrl) {
|
|
262
|
+
content.push({
|
|
263
|
+
type: 'text',
|
|
264
|
+
text: `📊 **View visualization**: ${helmVisualizationUrl}`
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
return { content };
|
|
255
268
|
}
|
|
256
269
|
const solutions = solutionResult.solutions;
|
|
257
270
|
logger.info('Recommendation process completed', {
|
|
@@ -267,6 +280,7 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
|
|
|
267
280
|
for (const solution of topSolutions) {
|
|
268
281
|
// Create complete solution data
|
|
269
282
|
const solutionData = {
|
|
283
|
+
toolName: 'recommend',
|
|
270
284
|
intent: args.intent,
|
|
271
285
|
type: solution.type,
|
|
272
286
|
score: solution.score,
|
|
@@ -309,6 +323,9 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
|
|
|
309
323
|
const patternsUsedCount = solutionSummaries.filter(s => s.appliedPatterns && s.appliedPatterns.length > 0).length;
|
|
310
324
|
const totalPatterns = solutionSummaries.reduce((count, s) => count + (s.appliedPatterns?.length || 0), 0);
|
|
311
325
|
const totalPolicies = solutionSummaries.reduce((count, s) => count + (s.relevantPolicies?.length || 0), 0);
|
|
326
|
+
// PRD #320: Generate visualization URL with all solution session IDs
|
|
327
|
+
const sessionIds = solutionSummaries.map(s => s.solutionId);
|
|
328
|
+
const visualizationUrl = (0, visualization_1.getVisualizationUrl)(sessionIds);
|
|
312
329
|
// Build new response format
|
|
313
330
|
const response = {
|
|
314
331
|
intent: args.intent,
|
|
@@ -323,18 +340,26 @@ async function handleRecommendTool(args, dotAI, logger, requestId) {
|
|
|
323
340
|
},
|
|
324
341
|
nextAction: "Call recommend tool with stage: chooseSolution and your preferred solutionId",
|
|
325
342
|
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.",
|
|
326
|
-
timestamp
|
|
343
|
+
timestamp,
|
|
344
|
+
...(visualizationUrl && { visualizationUrl })
|
|
327
345
|
};
|
|
328
346
|
logger.info('Solution sessions created and response prepared', {
|
|
329
347
|
requestId,
|
|
330
|
-
solutionCount: solutionSummaries.length
|
|
348
|
+
solutionCount: solutionSummaries.length,
|
|
349
|
+
...(visualizationUrl && { visualizationUrl })
|
|
331
350
|
});
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
351
|
+
// PRD #320: Return two content blocks - JSON for REST API, text instruction for MCP agents
|
|
352
|
+
const content = [{
|
|
353
|
+
type: 'text',
|
|
354
|
+
text: JSON.stringify(response, null, 2)
|
|
355
|
+
}];
|
|
356
|
+
if (visualizationUrl) {
|
|
357
|
+
content.push({
|
|
358
|
+
type: 'text',
|
|
359
|
+
text: `📊 **View visualization**: ${visualizationUrl}`
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
return { content };
|
|
338
363
|
}, {
|
|
339
364
|
operation: 'recommend_tool',
|
|
340
365
|
component: 'RecommendTool',
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Remediate Tool - AI-powered Kubernetes issue analysis and remediation
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
+
import { BaseVisualizationData } from '../core/visualization';
|
|
5
6
|
export declare const REMEDIATE_TOOL_NAME = "remediate";
|
|
6
7
|
export declare const REMEDIATE_TOOL_DESCRIPTION = "AI-powered Kubernetes issue analysis that provides root cause identification and actionable remediation steps. Unlike basic kubectl commands, this tool performs multi-step investigation, correlates cluster data, and generates intelligent solutions. Use when users want to understand WHY something is broken, not just see raw status. Ideal for: troubleshooting failures, diagnosing performance issues, analyzing pod problems, investigating networking/storage issues, or any \"what's wrong\" questions.";
|
|
7
8
|
export declare const REMEDIATE_TOOL_INPUT_SCHEMA: {
|
|
@@ -31,7 +32,8 @@ export interface RemediateInput {
|
|
|
31
32
|
executedCommands?: string[];
|
|
32
33
|
interaction_id?: string;
|
|
33
34
|
}
|
|
34
|
-
export interface RemediateSessionData {
|
|
35
|
+
export interface RemediateSessionData extends BaseVisualizationData {
|
|
36
|
+
toolName: 'remediate';
|
|
35
37
|
issue: string;
|
|
36
38
|
mode: 'manual' | 'automatic';
|
|
37
39
|
interaction_id?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediate.d.ts","sourceRoot":"","sources":["../../src/tools/remediate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"remediate.d.ts","sourceRoot":"","sources":["../../src/tools/remediate.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/remediate.js
CHANGED
|
@@ -45,6 +45,7 @@ const ai_provider_factory_1 = require("../core/ai-provider-factory");
|
|
|
45
45
|
const generic_session_manager_1 = require("../core/generic-session-manager");
|
|
46
46
|
const kubectl_tools_1 = require("../core/kubectl-tools");
|
|
47
47
|
const index_1 = require("../core/index");
|
|
48
|
+
const visualization_1 = require("../core/visualization");
|
|
48
49
|
const fs = __importStar(require("fs"));
|
|
49
50
|
const path = __importStar(require("path"));
|
|
50
51
|
// PRD #143 Milestone 1: Hybrid approach - AI can use kubectl_api_resources tool OR continue with JSON dataRequests
|
|
@@ -596,7 +597,9 @@ async function handleRemediateTool(args) {
|
|
|
596
597
|
throw error_handling_1.ErrorHandler.createError(error_handling_1.ErrorCategory.VALIDATION, error_handling_1.ErrorSeverity.HIGH, 'Issue description is required for new investigations', { operation: 'input_validation', component: 'RemediateTool' });
|
|
597
598
|
}
|
|
598
599
|
// Create initial session using session manager
|
|
600
|
+
// PRD #320: Include toolName for visualization prompt selection
|
|
599
601
|
const session = sessionManager.createSession({
|
|
602
|
+
toolName: 'remediate',
|
|
600
603
|
issue: validatedInput.issue,
|
|
601
604
|
mode: validatedInput.mode || 'manual',
|
|
602
605
|
interaction_id: validatedInput.interaction_id,
|
|
@@ -622,14 +625,22 @@ async function handleRemediateTool(args) {
|
|
|
622
625
|
sessionId: session.sessionId,
|
|
623
626
|
status: finalAnalysis.status
|
|
624
627
|
});
|
|
625
|
-
//
|
|
628
|
+
// PRD #320: Generate visualization URL for resolved issues
|
|
629
|
+
const visualizationUrl = (0, visualization_1.getVisualizationUrl)(session.sessionId);
|
|
630
|
+
// PRD #320: Append visualization URL to message so agents display it to users
|
|
631
|
+
const messageWithVisualization = visualizationUrl
|
|
632
|
+
? `${finalAnalysis.message}\n\n📊 View visualization: ${visualizationUrl}`
|
|
633
|
+
: finalAnalysis.message;
|
|
634
|
+
// PRD #320: Return JSON with visualization URL in message (for agents) and visualizationUrl field (for REST API)
|
|
626
635
|
return {
|
|
627
|
-
content: [
|
|
628
|
-
{
|
|
636
|
+
content: [{
|
|
629
637
|
type: 'text',
|
|
630
|
-
text: JSON.stringify(
|
|
631
|
-
|
|
632
|
-
|
|
638
|
+
text: JSON.stringify({
|
|
639
|
+
...finalAnalysis,
|
|
640
|
+
message: messageWithVisualization,
|
|
641
|
+
...(visualizationUrl && { visualizationUrl })
|
|
642
|
+
}, null, 2)
|
|
643
|
+
}]
|
|
633
644
|
};
|
|
634
645
|
}
|
|
635
646
|
// Make execution decision based on mode and thresholds
|
|
@@ -673,14 +684,22 @@ async function handleRemediateTool(args) {
|
|
|
673
684
|
// Execute commands and return the complete result (includes post-execution validation)
|
|
674
685
|
return await executeRemediationCommands(session, sessionManager, logger, requestId, validatedInput.interaction_id);
|
|
675
686
|
}
|
|
676
|
-
//
|
|
687
|
+
// PRD #320: Generate visualization URL for analysis response
|
|
688
|
+
const visualizationUrl = (0, visualization_1.getVisualizationUrl)(session.sessionId);
|
|
689
|
+
// PRD #320: Append visualization URL to message so agents display it to users
|
|
690
|
+
const messageWithVisualization = visualizationUrl
|
|
691
|
+
? `${finalResult.message}\n\n📊 View visualization: ${visualizationUrl}`
|
|
692
|
+
: finalResult.message;
|
|
693
|
+
// PRD #320: Return JSON with visualization URL in message (for agents) and visualizationUrl field (for REST API)
|
|
677
694
|
return {
|
|
678
|
-
content: [
|
|
679
|
-
{
|
|
695
|
+
content: [{
|
|
680
696
|
type: 'text',
|
|
681
|
-
text: JSON.stringify(
|
|
682
|
-
|
|
683
|
-
|
|
697
|
+
text: JSON.stringify({
|
|
698
|
+
...finalResult,
|
|
699
|
+
message: messageWithVisualization,
|
|
700
|
+
...(visualizationUrl && { visualizationUrl })
|
|
701
|
+
}, null, 2)
|
|
702
|
+
}]
|
|
684
703
|
};
|
|
685
704
|
}
|
|
686
705
|
catch (error) {
|
package/dist/tools/version.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
8
|
import { Logger } from '../core/error-handling';
|
|
9
|
+
import { BaseVisualizationData } from '../core/visualization';
|
|
9
10
|
export declare const VERSION_TOOL_NAME = "version";
|
|
10
11
|
export declare const VERSION_TOOL_DESCRIPTION = "Get comprehensive system health and diagnostics";
|
|
11
12
|
export declare const VERSION_TOOL_INPUT_SCHEMA: {
|
|
@@ -91,6 +92,21 @@ export interface SystemStatus {
|
|
|
91
92
|
initialized: boolean;
|
|
92
93
|
};
|
|
93
94
|
}
|
|
95
|
+
export interface VersionSessionData extends BaseVisualizationData {
|
|
96
|
+
toolName: 'version';
|
|
97
|
+
system: SystemStatus;
|
|
98
|
+
summary: {
|
|
99
|
+
overall: 'healthy' | 'degraded';
|
|
100
|
+
patternSearch: string;
|
|
101
|
+
capabilityScanning: string;
|
|
102
|
+
kubernetesAccess: string;
|
|
103
|
+
policyIntentManagement: string;
|
|
104
|
+
kyvernoPolicyGeneration: string;
|
|
105
|
+
capabilities: string[];
|
|
106
|
+
};
|
|
107
|
+
timestamp: string;
|
|
108
|
+
status: 'success' | 'error';
|
|
109
|
+
}
|
|
94
110
|
/**
|
|
95
111
|
* Test Kyverno installation and readiness for policy generation using shared client
|
|
96
112
|
*/
|
|
@@ -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":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAOhD,OAAO,EAAuB,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnF,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,wBAAwB,oDAAoD,CAAC;AAC1F,eAAO,MAAM,yBAAyB;;CAErC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE;QACR,SAAS,EAAE,OAAO,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,EAAE;YACX,QAAQ,EAAE;gBACR,MAAM,EAAE,OAAO,CAAC;gBAChB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;YACF,QAAQ,EAAE;gBACR,MAAM,EAAE,OAAO,CAAC;gBAChB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;YACF,YAAY,EAAE;gBACZ,MAAM,EAAE,OAAO,CAAC;gBAChB,cAAc,CAAC,EAAE,MAAM,CAAC;gBACxB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;SACH,CAAC;KACH,CAAC;IACF,SAAS,EAAE;QACT,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,EAAE;QACZ,WAAW,EAAE,OAAO,CAAC;QACrB,eAAe,EAAE,OAAO,CAAC;QACzB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,OAAO,EAAE;QACP,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,qBAAqB,EAAE,OAAO,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAGD,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE;QACP,OAAO,EAAE,SAAS,GAAG,UAAU,CAAC;QAChC,aAAa,EAAE,MAAM,CAAC;QACtB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,gBAAgB,EAAE,MAAM,CAAC;QACzB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,uBAAuB,EAAE,MAAM,CAAC;QAChC,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CAC7B;AA4PD;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAoIzE;AAiJD;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAqB5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAAC,SAAS,CAAC,CAW1D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,CA8Hd"}
|
package/dist/tools/version.js
CHANGED
|
@@ -53,6 +53,8 @@ const discovery_1 = require("../core/discovery");
|
|
|
53
53
|
const kubernetes_utils_1 = require("../core/kubernetes-utils");
|
|
54
54
|
const tracing_1 = require("../core/tracing");
|
|
55
55
|
const config_1 = require("../core/tracing/config");
|
|
56
|
+
const generic_session_manager_1 = require("../core/generic-session-manager");
|
|
57
|
+
const visualization_1 = require("../core/visualization");
|
|
56
58
|
exports.VERSION_TOOL_NAME = 'version';
|
|
57
59
|
exports.VERSION_TOOL_DESCRIPTION = 'Get comprehensive system health and diagnostics';
|
|
58
60
|
exports.VERSION_TOOL_INPUT_SCHEMA = {
|
|
@@ -603,36 +605,60 @@ async function handleVersionTool(args, logger, requestId) {
|
|
|
603
605
|
});
|
|
604
606
|
// Check if we should show feedback message
|
|
605
607
|
const feedbackMessage = (0, index_1.maybeGetFeedbackMessage)();
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
608
|
+
// Build summary object
|
|
609
|
+
const summary = {
|
|
610
|
+
overall: (vectorDBStatus.connected && aiProviderStatus.connected && kubernetesStatus.connected && capabilityStatus.systemReady ? 'healthy' : 'degraded'),
|
|
611
|
+
patternSearch: embeddingStatus.available ? 'semantic+keyword' : 'keyword-only',
|
|
612
|
+
capabilityScanning: capabilityStatus.systemReady && kubernetesStatus.connected ? 'ready' : 'not-ready',
|
|
613
|
+
kubernetesAccess: kubernetesStatus.connected ? 'connected' : 'disconnected',
|
|
614
|
+
policyIntentManagement: vectorDBStatus.connected && embeddingStatus.available ? 'ready' : 'not-ready',
|
|
615
|
+
kyvernoPolicyGeneration: kyvernoStatus.policyGenerationReady ? 'ready' : 'not-ready',
|
|
616
|
+
capabilities: [
|
|
617
|
+
vectorDBStatus.connected && vectorDBStatus.collections.patterns.exists ? 'pattern-management' : null,
|
|
618
|
+
// Policy intent management is available if Vector DB and embedding service are ready
|
|
619
|
+
vectorDBStatus.connected && embeddingStatus.available ? 'policy-intent-management' : null,
|
|
620
|
+
capabilityStatus.systemReady && kubernetesStatus.connected ? 'capability-scanning' : null,
|
|
621
|
+
embeddingStatus.available ? 'semantic-search' : null,
|
|
622
|
+
aiProviderStatus.connected ? 'ai-recommendations' : null,
|
|
623
|
+
kubernetesStatus.connected ? 'kubernetes-integration' : null,
|
|
624
|
+
// Kyverno policy generation is only available when Kyverno is installed
|
|
625
|
+
kyvernoStatus.policyGenerationReady ? 'kyverno-policy-generation' : null
|
|
626
|
+
].filter(Boolean)
|
|
627
|
+
};
|
|
628
|
+
const timestamp = new Date().toISOString();
|
|
629
|
+
// PRD #320: Create session for visualization
|
|
630
|
+
const sessionManager = new generic_session_manager_1.GenericSessionManager('ver');
|
|
631
|
+
const session = sessionManager.createSession({
|
|
632
|
+
toolName: 'version',
|
|
633
|
+
system: systemStatus,
|
|
634
|
+
summary,
|
|
635
|
+
timestamp,
|
|
636
|
+
status: 'success'
|
|
637
|
+
});
|
|
638
|
+
// PRD #320: Generate visualization URL if configured
|
|
639
|
+
const visualizationUrl = (0, visualization_1.getVisualizationUrl)(session.sessionId);
|
|
640
|
+
// PRD #320: Build response with visualization instruction for agents
|
|
641
|
+
const responseData = {
|
|
642
|
+
status: 'success',
|
|
643
|
+
system: systemStatus,
|
|
644
|
+
summary,
|
|
645
|
+
timestamp,
|
|
646
|
+
...(feedbackMessage ? { message: feedbackMessage } : {}),
|
|
647
|
+
...(visualizationUrl ? { visualizationUrl } : {})
|
|
635
648
|
};
|
|
649
|
+
// PRD #320: Return two content blocks - JSON for REST API, text instruction for MCP agents
|
|
650
|
+
const content = [{
|
|
651
|
+
type: 'text',
|
|
652
|
+
text: JSON.stringify(responseData, null, 2)
|
|
653
|
+
}];
|
|
654
|
+
// Add visualization instruction as second content block so agents display it to users
|
|
655
|
+
if (visualizationUrl) {
|
|
656
|
+
content.push({
|
|
657
|
+
type: 'text',
|
|
658
|
+
text: `📊 **View visualization**: ${visualizationUrl}`
|
|
659
|
+
});
|
|
660
|
+
}
|
|
661
|
+
return { content };
|
|
636
662
|
}
|
|
637
663
|
catch (error) {
|
|
638
664
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vfarcic/dot-ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.181.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",
|
|
@@ -114,6 +114,7 @@
|
|
|
114
114
|
"@qdrant/js-client-rest": "^1.15.0",
|
|
115
115
|
"ai": "^5.0.60",
|
|
116
116
|
"handlebars": "^4.7.8",
|
|
117
|
+
"mermaid": "^11.12.2",
|
|
117
118
|
"yaml": "^2.8.0",
|
|
118
119
|
"zod-to-json-schema": "^3.24.6"
|
|
119
120
|
},
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Visualization Generator
|
|
2
|
+
|
|
3
|
+
You are a Kubernetes visualization expert. Analyze the provided data and generate visualizations that reveal valuable insights.
|
|
4
|
+
|
|
5
|
+
## User Intent
|
|
6
|
+
|
|
7
|
+
{{{intent}}}
|
|
8
|
+
|
|
9
|
+
## Data
|
|
10
|
+
|
|
11
|
+
{{{data}}}
|
|
12
|
+
|
|
13
|
+
## Your Task
|
|
14
|
+
|
|
15
|
+
**Start with the provided data**: Analyze this data thoroughly first to create visualizations that surface everything valuable.
|
|
16
|
+
|
|
17
|
+
If the provided data isn't sufficient for deep analysis, **actively use tools** to gather additional information. Don't just note uncertainties - investigate them.
|
|
18
|
+
|
|
19
|
+
## Output Format
|
|
20
|
+
|
|
21
|
+
Respond with ONLY a JSON object (no markdown code fences, no extra text):
|
|
22
|
+
|
|
23
|
+
{
|
|
24
|
+
"title": "Descriptive title based on what was found",
|
|
25
|
+
"visualizations": [...],
|
|
26
|
+
"insights": [...]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
## Visualization Types
|
|
30
|
+
|
|
31
|
+
Generate as many or as few visualizations as add value. You can:
|
|
32
|
+
- Include multiple visualizations of the same type
|
|
33
|
+
- Skip any type entirely if it doesn't add value for this data
|
|
34
|
+
- Use whatever combination best represents what you found
|
|
35
|
+
|
|
36
|
+
Each visualization:
|
|
37
|
+
```
|
|
38
|
+
{
|
|
39
|
+
"id": "unique-id",
|
|
40
|
+
"label": "Tab Label",
|
|
41
|
+
"type": "mermaid" | "table" | "cards" | "code",
|
|
42
|
+
"content": <type-specific-content>
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### mermaid
|
|
47
|
+
- `content`: Valid Mermaid diagram string
|
|
48
|
+
- Use `graph TD` or `graph LR` depending on relationship type
|
|
49
|
+
- Use subgraphs to group related items
|
|
50
|
+
- Arrows: `-->` for direct relationships, `-.->` for indirect/inferred
|
|
51
|
+
- **Syntax rules**:
|
|
52
|
+
- Node names in `class` statements MUST be comma-separated: `class a,b,c style` (not space-separated)
|
|
53
|
+
- If using `classDef`, ALWAYS specify both `fill` AND `color` (text) with sufficient contrast
|
|
54
|
+
- Truncate UUIDs to first 8 characters (e.g., `pvc-508555a4...`)
|
|
55
|
+
- Keep node labels under 30 characters when possible
|
|
56
|
+
|
|
57
|
+
### table
|
|
58
|
+
- `content`: `{ "headers": ["Col1", "Col2"], "rows": [["val1", "val2"]] }`
|
|
59
|
+
- Choose columns relevant to the data present
|
|
60
|
+
- Include status/condition information when available
|
|
61
|
+
|
|
62
|
+
### cards
|
|
63
|
+
- `content`: `[{ "id": "unique", "title": "Name", "subtitle": "Type or status", "description": "Details", "tags": ["tag1"] }]`
|
|
64
|
+
- Use for items where individual status or comparison matters
|
|
65
|
+
- Tags should reflect actual state from the data
|
|
66
|
+
|
|
67
|
+
### code
|
|
68
|
+
- `content`: `{ "language": "yaml" | "json" | "bash", "code": "..." }`
|
|
69
|
+
- Use sparingly - only when raw output adds value
|
|
70
|
+
|
|
71
|
+
## Insights
|
|
72
|
+
|
|
73
|
+
Generate insights that add value beyond what someone could see by just reading the raw data. Prioritize non-obvious findings over summaries.
|
|
74
|
+
|
|
75
|
+
Each insight should:
|
|
76
|
+
- Reference specific items from the data
|
|
77
|
+
- Explain WHY it matters, not just WHAT you found
|
|
78
|
+
- Be actionable when highlighting issues
|
|
79
|
+
|
|
80
|
+
## Rules
|
|
81
|
+
|
|
82
|
+
1. **Data-driven only** - Base visualizations on actual data present
|
|
83
|
+
2. **Skip empty visualizations** - Don't include visualizations with no meaningful content
|
|
84
|
+
3. **Valid output** - Ensure Mermaid syntax is correct and JSON is valid
|
|
85
|
+
4. **JSON only** - No markdown fences, no explanations outside the JSON structure
|
|
86
|
+
5. **Use validate_mermaid** - Before returning any Mermaid diagrams, validate them using the validate_mermaid tool
|