@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.
- package/README.md +6 -6
- package/dist/core/agent-display.d.ts +2 -4
- package/dist/core/agent-display.d.ts.map +1 -1
- package/dist/core/agent-display.js +4 -12
- package/dist/core/base-vector-service.d.ts +6 -0
- package/dist/core/base-vector-service.d.ts.map +1 -1
- package/dist/core/base-vector-service.js +18 -8
- package/dist/core/capabilities.d.ts +12 -0
- package/dist/core/capabilities.d.ts.map +1 -1
- package/dist/core/capability-operations.d.ts +3 -0
- package/dist/core/capability-operations.d.ts.map +1 -1
- package/dist/core/capability-operations.js +88 -5
- package/dist/core/capability-scan-workflow.d.ts +35 -5
- package/dist/core/capability-scan-workflow.d.ts.map +1 -1
- package/dist/core/capability-scan-workflow.js +169 -145
- package/dist/core/capability-vector-service.d.ts +11 -2
- package/dist/core/capability-vector-service.d.ts.map +1 -1
- package/dist/core/capability-vector-service.js +50 -0
- package/dist/core/discovery.d.ts +34 -0
- package/dist/core/discovery.d.ts.map +1 -1
- package/dist/core/discovery.js +105 -19
- package/dist/core/index.d.ts +0 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -6
- package/dist/core/kubectl-tools.d.ts +5 -0
- package/dist/core/kubectl-tools.d.ts.map +1 -1
- package/dist/core/kubectl-tools.js +74 -2
- package/dist/core/kubernetes-utils.d.ts +1 -0
- package/dist/core/kubernetes-utils.d.ts.map +1 -1
- package/dist/core/kubernetes-utils.js +92 -49
- package/dist/core/packaging.d.ts.map +1 -1
- package/dist/core/packaging.js +1 -0
- package/dist/core/resource-tools.d.ts +163 -1
- package/dist/core/resource-tools.d.ts.map +1 -1
- package/dist/core/resource-tools.js +343 -23
- package/dist/core/resource-vector-service.d.ts +17 -0
- package/dist/core/resource-vector-service.d.ts.map +1 -1
- package/dist/core/resource-vector-service.js +67 -3
- package/dist/core/telemetry/client.d.ts +16 -0
- package/dist/core/telemetry/client.d.ts.map +1 -0
- package/dist/core/telemetry/client.js +293 -0
- package/dist/core/telemetry/config.d.ts +12 -0
- package/dist/core/telemetry/config.d.ts.map +1 -0
- package/dist/core/telemetry/config.js +130 -0
- package/dist/core/telemetry/index.d.ts +30 -0
- package/dist/core/telemetry/index.d.ts.map +1 -0
- package/dist/core/telemetry/index.js +49 -0
- package/dist/core/telemetry/types.d.ts +125 -0
- package/dist/core/telemetry/types.d.ts.map +1 -0
- package/dist/core/telemetry/types.js +7 -0
- package/dist/core/tracing/index.d.ts +1 -1
- package/dist/core/tracing/index.d.ts.map +1 -1
- package/dist/core/tracing/tool-tracing.d.ts +11 -2
- package/dist/core/tracing/tool-tracing.d.ts.map +1 -1
- package/dist/core/tracing/tool-tracing.js +17 -3
- package/dist/core/vector-db-service.d.ts +7 -0
- package/dist/core/vector-db-service.d.ts.map +1 -1
- package/dist/core/vector-db-service.js +165 -61
- package/dist/core/visualization.d.ts +16 -1
- package/dist/core/visualization.d.ts.map +1 -1
- package/dist/core/visualization.js +64 -1
- package/dist/interfaces/mcp.d.ts +6 -0
- package/dist/interfaces/mcp.d.ts.map +1 -1
- package/dist/interfaces/mcp.js +36 -7
- package/dist/interfaces/rest-api.d.ts +63 -2
- package/dist/interfaces/rest-api.d.ts.map +1 -1
- package/dist/interfaces/rest-api.js +611 -51
- package/dist/mcp/server.js +55 -9
- package/dist/tools/answer-question.d.ts.map +1 -1
- package/dist/tools/answer-question.js +18 -0
- package/dist/tools/choose-solution.d.ts.map +1 -1
- package/dist/tools/choose-solution.js +22 -1
- package/dist/tools/deploy-manifests.d.ts.map +1 -1
- package/dist/tools/deploy-manifests.js +16 -2
- package/dist/tools/generate-manifests.d.ts.map +1 -1
- package/dist/tools/generate-manifests.js +12 -18
- package/dist/tools/operate.d.ts.map +1 -1
- package/dist/tools/operate.js +3 -11
- package/dist/tools/organizational-data.d.ts +1 -1
- package/dist/tools/organizational-data.d.ts.map +1 -1
- package/dist/tools/organizational-data.js +8 -17
- package/dist/tools/project-setup.d.ts.map +1 -1
- package/dist/tools/project-setup.js +5 -18
- package/dist/tools/query.d.ts +2 -11
- package/dist/tools/query.d.ts.map +1 -1
- package/dist/tools/query.js +63 -44
- package/dist/tools/recommend.d.ts +18 -1
- package/dist/tools/recommend.d.ts.map +1 -1
- package/dist/tools/recommend.js +44 -10
- package/dist/tools/remediate.d.ts.map +1 -1
- package/dist/tools/remediate.js +2 -24
- package/dist/tools/version.d.ts.map +1 -1
- package/dist/tools/version.js +4 -7
- package/package.json +2 -1
- package/prompts/partials/query-simple-output.md +11 -0
- package/prompts/partials/visualization-output.md +93 -0
- package/prompts/query-system.md +8 -12
- package/prompts/resource-selection.md +4 -0
- package/prompts/visualize.md +1 -68
- package/scripts/dot-ai.nu +1 -0
- package/scripts/reset-sync-and-scan-test-cluster.sh +120 -0
- package/shared-prompts/prd-create.md +1 -1
- package/dist/core/feedback.d.ts +0 -43
- package/dist/core/feedback.d.ts.map +0 -1
- package/dist/core/feedback.js +0 -98
package/dist/tools/query.js
CHANGED
|
@@ -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
|
|
55
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
135
|
-
|
|
136
|
-
|
|
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
|
|
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?:
|
|
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,
|
|
1
|
+
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/tools/recommend.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/recommend.js
CHANGED
|
@@ -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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"}
|
package/dist/tools/remediate.js
CHANGED
|
@@ -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(
|
|
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(
|
|
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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"}
|
package/dist/tools/version.js
CHANGED
|
@@ -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
|
|
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
|
|
687
|
-
const agentDisplayBlock = (0, index_1.buildAgentDisplayBlock)({ visualizationUrl
|
|
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.
|
|
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,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
|
package/prompts/query-system.md
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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": [
|