@prodisco/k8s-mcp 0.1.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/LICENSE +21 -0
- package/README.md +226 -0
- package/dist/codegen/generateTypes.d.ts +8 -0
- package/dist/codegen/generateTypes.d.ts.map +1 -0
- package/dist/codegen/generateTypes.js +96 -0
- package/dist/codegen/generateTypes.js.map +1 -0
- package/dist/codegen/interfaceGenerator.d.ts +9 -0
- package/dist/codegen/interfaceGenerator.d.ts.map +1 -0
- package/dist/codegen/interfaceGenerator.js +185 -0
- package/dist/codegen/interfaceGenerator.js.map +1 -0
- package/dist/codegen/toolMapping.d.ts +11 -0
- package/dist/codegen/toolMapping.d.ts.map +1 -0
- package/dist/codegen/toolMapping.js +78 -0
- package/dist/codegen/toolMapping.js.map +1 -0
- package/dist/codegen/typeExtractor.d.ts +23 -0
- package/dist/codegen/typeExtractor.d.ts.map +1 -0
- package/dist/codegen/typeExtractor.js +112 -0
- package/dist/codegen/typeExtractor.js.map +1 -0
- package/dist/kube/client.d.ts +37 -0
- package/dist/kube/client.d.ts.map +1 -0
- package/dist/kube/client.js +161 -0
- package/dist/kube/client.js.map +1 -0
- package/dist/kube/types.d.ts +27 -0
- package/dist/kube/types.d.ts.map +1 -0
- package/dist/kube/types.js +2 -0
- package/dist/kube/types.js.map +1 -0
- package/dist/resources/filesystem.d.ts +15 -0
- package/dist/resources/filesystem.d.ts.map +1 -0
- package/dist/resources/filesystem.js +54 -0
- package/dist/resources/filesystem.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +127 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/kubernetes/index.d.ts +5 -0
- package/dist/tools/kubernetes/index.d.ts.map +1 -0
- package/dist/tools/kubernetes/index.js +6 -0
- package/dist/tools/kubernetes/index.js.map +1 -0
- package/dist/tools/kubernetes/metadata.d.ts +110 -0
- package/dist/tools/kubernetes/metadata.d.ts.map +1 -0
- package/dist/tools/kubernetes/metadata.js +19 -0
- package/dist/tools/kubernetes/metadata.js.map +1 -0
- package/dist/tools/kubernetes/searchTools-old.d.ts +35 -0
- package/dist/tools/kubernetes/searchTools-old.d.ts.map +1 -0
- package/dist/tools/kubernetes/searchTools-old.js +414 -0
- package/dist/tools/kubernetes/searchTools-old.js.map +1 -0
- package/dist/tools/kubernetes/searchTools-v2.d.ts +35 -0
- package/dist/tools/kubernetes/searchTools-v2.d.ts.map +1 -0
- package/dist/tools/kubernetes/searchTools-v2.js +269 -0
- package/dist/tools/kubernetes/searchTools-v2.js.map +1 -0
- package/dist/tools/kubernetes/searchTools.d.ts +87 -0
- package/dist/tools/kubernetes/searchTools.d.ts.map +1 -0
- package/dist/tools/kubernetes/searchTools.js +529 -0
- package/dist/tools/kubernetes/searchTools.js.map +1 -0
- package/dist/tools/kubernetes/typeDefinitions.d.ts +24 -0
- package/dist/tools/kubernetes/typeDefinitions.d.ts.map +1 -0
- package/dist/tools/kubernetes/typeDefinitions.js +518 -0
- package/dist/tools/kubernetes/typeDefinitions.js.map +1 -0
- package/dist/tools/types.d.ts +10 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/util/manifest.d.ts +5 -0
- package/dist/util/manifest.d.ts.map +1 -0
- package/dist/util/manifest.js +31 -0
- package/dist/util/manifest.js.map +1 -0
- package/dist/util/paths.d.ts +7 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +14 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/summary.d.ts +403 -0
- package/dist/util/summary.d.ts.map +1 -0
- package/dist/util/summary.js +211 -0
- package/dist/util/summary.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import * as ts from 'typescript';
|
|
3
|
+
import { readFileSync, existsSync } from 'fs';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
const GetTypeDefinitionInputSchema = z.object({
|
|
6
|
+
types: z
|
|
7
|
+
.array(z.string())
|
|
8
|
+
.describe('Array of Kubernetes type names or paths to get definitions for (e.g., ["V1Pod", "V1Deployment.spec", "V1Deployment.spec.template.spec"])'),
|
|
9
|
+
depth: z
|
|
10
|
+
.number()
|
|
11
|
+
.int()
|
|
12
|
+
.positive()
|
|
13
|
+
.max(2)
|
|
14
|
+
.default(1)
|
|
15
|
+
.optional()
|
|
16
|
+
.describe('Depth of nested type definitions to include (default: 1, max: 2)'),
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Extract JSDoc comment from a node
|
|
20
|
+
*/
|
|
21
|
+
function getJSDocDescription(node, _sourceFile) {
|
|
22
|
+
const jsDocComments = ts.getJSDocCommentsAndTags(node);
|
|
23
|
+
for (const comment of jsDocComments) {
|
|
24
|
+
if (ts.isJSDoc(comment) && comment.comment) {
|
|
25
|
+
if (typeof comment.comment === 'string') {
|
|
26
|
+
return comment.comment;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Extract type definition from TypeScript declaration file using TypeScript compiler API
|
|
34
|
+
*/
|
|
35
|
+
function extractTypeDefinitionWithTS(typeName, filePath) {
|
|
36
|
+
const sourceCode = readFileSync(filePath, 'utf-8');
|
|
37
|
+
const sourceFile = ts.createSourceFile(filePath, sourceCode, ts.ScriptTarget.Latest, true);
|
|
38
|
+
let typeInfo = null;
|
|
39
|
+
const nestedTypes = new Set();
|
|
40
|
+
function visit(node) {
|
|
41
|
+
// Check if this is the class or interface we're looking for
|
|
42
|
+
if ((ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) && node.name && node.name.text === typeName) {
|
|
43
|
+
const properties = [];
|
|
44
|
+
const description = getJSDocDescription(node, sourceFile);
|
|
45
|
+
// Extract properties/members
|
|
46
|
+
node.members?.forEach((member) => {
|
|
47
|
+
if (ts.isPropertySignature(member) || ts.isPropertyDeclaration(member)) {
|
|
48
|
+
if (member.name) {
|
|
49
|
+
const propName = member.name.getText(sourceFile);
|
|
50
|
+
const propType = member.type?.getText(sourceFile) || 'any';
|
|
51
|
+
const isOptional = !!member.questionToken;
|
|
52
|
+
const propDescription = getJSDocDescription(member, sourceFile);
|
|
53
|
+
properties.push({
|
|
54
|
+
name: propName.replace(/['"]/g, ''),
|
|
55
|
+
type: propType,
|
|
56
|
+
optional: isOptional,
|
|
57
|
+
description: propDescription,
|
|
58
|
+
});
|
|
59
|
+
// Extract nested type references
|
|
60
|
+
const typeRefs = extractNestedTypeRefs(propType);
|
|
61
|
+
typeRefs.forEach(ref => {
|
|
62
|
+
if (ref !== typeName) {
|
|
63
|
+
nestedTypes.add(ref);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
typeInfo = {
|
|
70
|
+
name: typeName,
|
|
71
|
+
properties,
|
|
72
|
+
description,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
ts.forEachChild(node, visit);
|
|
76
|
+
}
|
|
77
|
+
visit(sourceFile);
|
|
78
|
+
if (!typeInfo) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
typeInfo,
|
|
83
|
+
nestedTypes: Array.from(nestedTypes),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Extract nested type references from a type string
|
|
88
|
+
*/
|
|
89
|
+
function extractNestedTypeRefs(typeStr) {
|
|
90
|
+
const refs = [];
|
|
91
|
+
const typeRefRegex = /\b([VK]\d+[A-Z][a-zA-Z0-9]*|Core[A-Z][a-zA-Z0-9]*)\b/g;
|
|
92
|
+
let match;
|
|
93
|
+
while ((match = typeRefRegex.exec(typeStr)) !== null) {
|
|
94
|
+
const ref = match[1];
|
|
95
|
+
if (ref && !refs.includes(ref)) {
|
|
96
|
+
refs.push(ref);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return refs;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Extract the main type identifier from a TypeScript type node using native TS compiler API
|
|
103
|
+
* Handles: Array<V1Pod>, V1PodSpec | undefined, V1Container[], etc.
|
|
104
|
+
*/
|
|
105
|
+
function extractTypeIdentifier(typeNode) {
|
|
106
|
+
// Handle union types (e.g., V1PodSpec | undefined)
|
|
107
|
+
if (ts.isUnionTypeNode(typeNode)) {
|
|
108
|
+
for (const type of typeNode.types) {
|
|
109
|
+
// Skip undefined/null types
|
|
110
|
+
if (type.kind === ts.SyntaxKind.UndefinedKeyword || type.kind === ts.SyntaxKind.NullKeyword) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
return extractTypeIdentifier(type);
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
// Handle array types (e.g., V1Container[])
|
|
118
|
+
if (ts.isArrayTypeNode(typeNode)) {
|
|
119
|
+
return extractTypeIdentifier(typeNode.elementType);
|
|
120
|
+
}
|
|
121
|
+
// Handle type references (e.g., Array<V1Pod>, V1PodSpec)
|
|
122
|
+
if (ts.isTypeReferenceNode(typeNode)) {
|
|
123
|
+
const typeName = typeNode.typeName.getText();
|
|
124
|
+
// Handle Array<T> or other generic types
|
|
125
|
+
if (typeName === 'Array' && typeNode.typeArguments && typeNode.typeArguments.length > 0) {
|
|
126
|
+
const firstArg = typeNode.typeArguments[0];
|
|
127
|
+
if (firstArg) {
|
|
128
|
+
return extractTypeIdentifier(firstArg);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Return the type name directly
|
|
132
|
+
return typeName;
|
|
133
|
+
}
|
|
134
|
+
// Handle indexed access types (e.g., { [key: string]: V1Pod })
|
|
135
|
+
if (ts.isTypeLiteralNode(typeNode)) {
|
|
136
|
+
// For now, return null for complex literal types
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolve a property path like "V1Deployment.spec.template.spec" to get the final type
|
|
143
|
+
* Returns the type name of the property at the end of the path
|
|
144
|
+
*/
|
|
145
|
+
function _resolvePropertyPath(rootTypeName, propertyPath, basePath) {
|
|
146
|
+
let currentType = rootTypeName;
|
|
147
|
+
const resolvedPath = [rootTypeName];
|
|
148
|
+
for (const propName of propertyPath) {
|
|
149
|
+
const filePath = findTypeDefinitionFile(currentType, basePath);
|
|
150
|
+
if (!filePath) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
const sourceCode = readFileSync(filePath, 'utf-8');
|
|
154
|
+
const sourceFile = ts.createSourceFile(filePath, sourceCode, ts.ScriptTarget.Latest, true);
|
|
155
|
+
let foundType = null;
|
|
156
|
+
function visit(node) {
|
|
157
|
+
if ((ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) &&
|
|
158
|
+
node.name && node.name.text === currentType) {
|
|
159
|
+
node.members?.forEach((member) => {
|
|
160
|
+
if ((ts.isPropertySignature(member) || ts.isPropertyDeclaration(member)) && member.name) {
|
|
161
|
+
const memberName = member.name.getText(sourceFile).replace(/['"]/g, '');
|
|
162
|
+
if (memberName === propName && member.type) {
|
|
163
|
+
// Use native TypeScript API to extract type
|
|
164
|
+
const typeIdentifier = extractTypeIdentifier(member.type);
|
|
165
|
+
if (typeIdentifier) {
|
|
166
|
+
foundType = typeIdentifier;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
if (!foundType) {
|
|
173
|
+
ts.forEachChild(node, visit);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
visit(sourceFile);
|
|
177
|
+
if (!foundType) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
currentType = foundType;
|
|
181
|
+
resolvedPath.push(propName);
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
typeName: currentType,
|
|
185
|
+
fullPath: resolvedPath.join('.'),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Format type info as a readable string (concise version)
|
|
190
|
+
*/
|
|
191
|
+
function formatTypeInfo(typeInfo, maxProperties = 20) {
|
|
192
|
+
let result = `${typeInfo.name} {\n`;
|
|
193
|
+
// Limit properties to avoid huge outputs
|
|
194
|
+
const propsToShow = typeInfo.properties.slice(0, maxProperties);
|
|
195
|
+
const hasMore = typeInfo.properties.length > maxProperties;
|
|
196
|
+
for (const prop of propsToShow) {
|
|
197
|
+
const optionalMarker = prop.optional ? '?' : '';
|
|
198
|
+
result += ` ${prop.name}${optionalMarker}: ${prop.type}\n`;
|
|
199
|
+
}
|
|
200
|
+
if (hasMore) {
|
|
201
|
+
result += ` ... ${typeInfo.properties.length - maxProperties} more properties\n`;
|
|
202
|
+
}
|
|
203
|
+
result += `}`;
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Find type definition file in Kubernetes client-node package
|
|
208
|
+
*/
|
|
209
|
+
function findTypeDefinitionFile(typeName, basePath) {
|
|
210
|
+
const k8sPath = join(basePath, 'node_modules', '@kubernetes', 'client-node', 'dist', 'gen', 'models');
|
|
211
|
+
const filePath = join(k8sPath, `${typeName}.d.ts`);
|
|
212
|
+
if (existsSync(filePath)) {
|
|
213
|
+
return filePath;
|
|
214
|
+
}
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Parse a type path into base type and property path
|
|
219
|
+
* e.g., "V1Deployment.spec.template" -> { baseType: "V1Deployment", path: ["spec", "template"] }
|
|
220
|
+
*/
|
|
221
|
+
function parseTypePath(typePath) {
|
|
222
|
+
const parts = typePath.split('.');
|
|
223
|
+
const baseType = parts[0];
|
|
224
|
+
if (!baseType) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
const path = parts.slice(1);
|
|
228
|
+
return { baseType, path };
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Navigate through type properties to find a subtype
|
|
232
|
+
* Returns the property info and the type name for the subproperty
|
|
233
|
+
*/
|
|
234
|
+
function navigateToSubtype(typeInfo, propertyPath, basePath, cache) {
|
|
235
|
+
if (propertyPath.length === 0) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
let currentTypeInfo = typeInfo;
|
|
239
|
+
let currentTypeName = typeInfo.name;
|
|
240
|
+
const pathSegments = [currentTypeName];
|
|
241
|
+
for (let i = 0; i < propertyPath.length; i++) {
|
|
242
|
+
const propertyName = propertyPath[i];
|
|
243
|
+
if (!propertyName) {
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
const property = currentTypeInfo.properties.find(p => p.name === propertyName);
|
|
247
|
+
if (!property) {
|
|
248
|
+
return null; // Property not found
|
|
249
|
+
}
|
|
250
|
+
pathSegments.push(propertyName);
|
|
251
|
+
// Now we need to get the actual TypeScript type node for this property
|
|
252
|
+
// We'll need to re-parse to get the type node
|
|
253
|
+
const filePath = findTypeDefinitionFile(currentTypeName, basePath);
|
|
254
|
+
if (!filePath) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
const sourceCode = readFileSync(filePath, 'utf-8');
|
|
258
|
+
const sourceFile = ts.createSourceFile(filePath, sourceCode, ts.ScriptTarget.Latest, true);
|
|
259
|
+
let propertyTypeNode = null;
|
|
260
|
+
function findPropertyType(node) {
|
|
261
|
+
if ((ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) &&
|
|
262
|
+
node.name && node.name.text === currentTypeName) {
|
|
263
|
+
node.members?.forEach((member) => {
|
|
264
|
+
if ((ts.isPropertySignature(member) || ts.isPropertyDeclaration(member)) &&
|
|
265
|
+
member.name && member.type) {
|
|
266
|
+
const memberName = member.name.getText(sourceFile).replace(/['"]/g, '');
|
|
267
|
+
if (memberName === propertyName) {
|
|
268
|
+
propertyTypeNode = member.type;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
if (!propertyTypeNode) {
|
|
274
|
+
ts.forEachChild(node, findPropertyType);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
findPropertyType(sourceFile);
|
|
278
|
+
if (!propertyTypeNode) {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
// Use native TypeScript API to extract the type
|
|
282
|
+
const nextTypeName = extractTypeIdentifier(propertyTypeNode);
|
|
283
|
+
if (!nextTypeName) {
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
// If this is the last segment, we found what we're looking for
|
|
287
|
+
if (i === propertyPath.length - 1) {
|
|
288
|
+
return {
|
|
289
|
+
typeInfo: currentTypeInfo,
|
|
290
|
+
propertyPath: pathSegments.join('.'),
|
|
291
|
+
typeName: nextTypeName,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
// Check cache first
|
|
295
|
+
let nextTypeInfo = cache.get(nextTypeName);
|
|
296
|
+
if (!nextTypeInfo) {
|
|
297
|
+
// Load the type definition
|
|
298
|
+
const filePath = findTypeDefinitionFile(nextTypeName, basePath);
|
|
299
|
+
if (!filePath) {
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
const extracted = extractTypeDefinitionWithTS(nextTypeName, filePath);
|
|
303
|
+
if (!extracted) {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
nextTypeInfo = extracted.typeInfo;
|
|
307
|
+
cache.set(nextTypeName, nextTypeInfo);
|
|
308
|
+
}
|
|
309
|
+
currentTypeInfo = nextTypeInfo;
|
|
310
|
+
currentTypeName = nextTypeName;
|
|
311
|
+
}
|
|
312
|
+
return null;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get type information for a subtype at a specific path
|
|
316
|
+
*/
|
|
317
|
+
function getSubtypeInfo(baseTypeName, propertyPath, basePath, cache) {
|
|
318
|
+
// First, get the base type
|
|
319
|
+
let baseTypeInfo = cache.get(baseTypeName);
|
|
320
|
+
if (!baseTypeInfo) {
|
|
321
|
+
const filePath = findTypeDefinitionFile(baseTypeName, basePath);
|
|
322
|
+
if (!filePath) {
|
|
323
|
+
return null;
|
|
324
|
+
}
|
|
325
|
+
const extracted = extractTypeDefinitionWithTS(baseTypeName, filePath);
|
|
326
|
+
if (!extracted) {
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
baseTypeInfo = extracted.typeInfo;
|
|
330
|
+
cache.set(baseTypeName, baseTypeInfo);
|
|
331
|
+
}
|
|
332
|
+
// If no path, return the base type
|
|
333
|
+
if (propertyPath.length === 0) {
|
|
334
|
+
return {
|
|
335
|
+
typeInfo: baseTypeInfo,
|
|
336
|
+
fullPath: baseTypeName,
|
|
337
|
+
originalType: baseTypeName,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
// Navigate to the subtype
|
|
341
|
+
const result = navigateToSubtype(baseTypeInfo, propertyPath, basePath, cache);
|
|
342
|
+
if (!result) {
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
// Now load the actual type definition for the target property
|
|
346
|
+
const targetTypeName = result.typeName;
|
|
347
|
+
let targetTypeInfo = cache.get(targetTypeName);
|
|
348
|
+
if (!targetTypeInfo) {
|
|
349
|
+
const filePath = findTypeDefinitionFile(targetTypeName, basePath);
|
|
350
|
+
if (filePath) {
|
|
351
|
+
const extracted = extractTypeDefinitionWithTS(targetTypeName, filePath);
|
|
352
|
+
if (extracted) {
|
|
353
|
+
targetTypeInfo = extracted.typeInfo;
|
|
354
|
+
cache.set(targetTypeName, targetTypeInfo);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// If we couldn't load the type, create a synthetic one showing just the property
|
|
359
|
+
if (!targetTypeInfo) {
|
|
360
|
+
const lastProp = propertyPath[propertyPath.length - 1];
|
|
361
|
+
if (!lastProp) {
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
const property = result.typeInfo.properties.find(p => p.name === lastProp);
|
|
365
|
+
if (property) {
|
|
366
|
+
targetTypeInfo = {
|
|
367
|
+
name: `${result.propertyPath}`,
|
|
368
|
+
properties: [{
|
|
369
|
+
name: lastProp,
|
|
370
|
+
type: property.type,
|
|
371
|
+
optional: property.optional,
|
|
372
|
+
description: property.description || undefined,
|
|
373
|
+
}],
|
|
374
|
+
description: `Property type: ${property.type}`,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
return null;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return {
|
|
382
|
+
typeInfo: targetTypeInfo,
|
|
383
|
+
fullPath: result.propertyPath,
|
|
384
|
+
originalType: targetTypeName,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
export const getTypeDefinitionTool = {
|
|
388
|
+
name: 'kubernetes.getTypeDefinition',
|
|
389
|
+
description: 'Get TypeScript type definitions for Kubernetes types. ' +
|
|
390
|
+
'Use this to understand the structure of request/response objects like V1Pod, V1PodList, V1Event, etc. ' +
|
|
391
|
+
'Returns the interface definition with nested types up to specified depth.',
|
|
392
|
+
schema: GetTypeDefinitionInputSchema,
|
|
393
|
+
async execute(input) {
|
|
394
|
+
const { types, depth = 2 } = input;
|
|
395
|
+
const basePath = process.cwd();
|
|
396
|
+
const results = {};
|
|
397
|
+
const typesToProcess = new Set(types);
|
|
398
|
+
const processedTypes = new Set();
|
|
399
|
+
let currentDepth = 0;
|
|
400
|
+
while (typesToProcess.size > 0 && currentDepth < depth) {
|
|
401
|
+
const currentBatch = Array.from(typesToProcess);
|
|
402
|
+
typesToProcess.clear();
|
|
403
|
+
for (const typePath of currentBatch) {
|
|
404
|
+
if (processedTypes.has(typePath)) {
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
processedTypes.add(typePath);
|
|
408
|
+
// Check if this is a dot-notation path (e.g., "V1Deployment.spec")
|
|
409
|
+
const parsedPath = parseTypePath(typePath);
|
|
410
|
+
if (!parsedPath) {
|
|
411
|
+
results[typePath] = {
|
|
412
|
+
name: typePath,
|
|
413
|
+
definition: `// Invalid type path: ${typePath}`,
|
|
414
|
+
file: 'error',
|
|
415
|
+
nestedTypes: [],
|
|
416
|
+
};
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
const { baseType, path: propertyPath } = parsedPath;
|
|
420
|
+
// If this is a property path (has dots), use getSubtypeInfo
|
|
421
|
+
if (propertyPath.length > 0) {
|
|
422
|
+
const cache = new Map();
|
|
423
|
+
const subtypeInfo = getSubtypeInfo(baseType, propertyPath, basePath, cache);
|
|
424
|
+
if (subtypeInfo) {
|
|
425
|
+
const definition = formatTypeInfo(subtypeInfo.typeInfo);
|
|
426
|
+
results[typePath] = {
|
|
427
|
+
name: subtypeInfo.typeInfo.name,
|
|
428
|
+
definition,
|
|
429
|
+
file: findTypeDefinitionFile(subtypeInfo.originalType, basePath)?.replace(basePath, '.') || 'resolved',
|
|
430
|
+
nestedTypes: [],
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
results[typePath] = {
|
|
435
|
+
name: typePath,
|
|
436
|
+
definition: `// Could not resolve property path: ${typePath}`,
|
|
437
|
+
file: 'not found',
|
|
438
|
+
nestedTypes: [],
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
// Regular type name (no dots)
|
|
444
|
+
const filePath = findTypeDefinitionFile(baseType, basePath);
|
|
445
|
+
if (filePath) {
|
|
446
|
+
try {
|
|
447
|
+
const extracted = extractTypeDefinitionWithTS(baseType, filePath);
|
|
448
|
+
if (extracted) {
|
|
449
|
+
const definition = formatTypeInfo(extracted.typeInfo);
|
|
450
|
+
results[typePath] = {
|
|
451
|
+
name: baseType,
|
|
452
|
+
definition,
|
|
453
|
+
file: filePath.replace(basePath, '.'),
|
|
454
|
+
nestedTypes: extracted.nestedTypes,
|
|
455
|
+
};
|
|
456
|
+
// Add nested types to process if within depth limit
|
|
457
|
+
if (currentDepth < depth - 1) {
|
|
458
|
+
for (const nestedType of extracted.nestedTypes) {
|
|
459
|
+
if (!processedTypes.has(nestedType)) {
|
|
460
|
+
typesToProcess.add(nestedType);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
results[typePath] = {
|
|
467
|
+
name: baseType,
|
|
468
|
+
definition: `// Type ${baseType} not found in file ${filePath}`,
|
|
469
|
+
file: filePath.replace(basePath, '.'),
|
|
470
|
+
nestedTypes: [],
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
catch (error) {
|
|
475
|
+
results[typePath] = {
|
|
476
|
+
name: baseType,
|
|
477
|
+
definition: `// Error extracting type ${baseType}: ${error instanceof Error ? error.message : String(error)}`,
|
|
478
|
+
file: filePath.replace(basePath, '.'),
|
|
479
|
+
nestedTypes: [],
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
results[typePath] = {
|
|
485
|
+
name: baseType,
|
|
486
|
+
definition: `// Type ${baseType} not found in @kubernetes/client-node type definitions`,
|
|
487
|
+
file: 'not found',
|
|
488
|
+
nestedTypes: [],
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
currentDepth++;
|
|
494
|
+
}
|
|
495
|
+
// Create summary
|
|
496
|
+
const foundCount = Object.values(results).filter(r => r.file !== 'not found').length;
|
|
497
|
+
const totalTypes = Object.keys(results).length;
|
|
498
|
+
let summary = `Fetched ${foundCount} type definition(s)`;
|
|
499
|
+
if (totalTypes > types.length) {
|
|
500
|
+
summary += ` (${types.length} requested, ${totalTypes - types.length} nested)\n\n`;
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
summary += `\n\n`;
|
|
504
|
+
}
|
|
505
|
+
// Only show requested types in summary, not all nested ones
|
|
506
|
+
for (const typeName of types) {
|
|
507
|
+
const typeInfo = results[typeName];
|
|
508
|
+
if (typeInfo && typeInfo.file !== 'not found') {
|
|
509
|
+
summary += `${typeName}: ${typeInfo.nestedTypes.length} nested type(s)\n`;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
return {
|
|
513
|
+
summary,
|
|
514
|
+
types: results,
|
|
515
|
+
};
|
|
516
|
+
},
|
|
517
|
+
};
|
|
518
|
+
//# sourceMappingURL=typeDefinitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeDefinitions.js","sourceRoot":"","sources":["../../../src/tools/kubernetes/typeDefinitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
export interface ToolDefinition<TResult = unknown, TSchema extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
schema: TSchema;
|
|
6
|
+
resultSchema?: z.ZodTypeAny;
|
|
7
|
+
execute: (input: z.infer<TSchema>) => Promise<TResult>;
|
|
8
|
+
}
|
|
9
|
+
export type AnyToolDefinition = ToolDefinition<any, any>;
|
|
10
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IAC5F,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;IAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACxD;AAGD,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { KubernetesObject } from '@kubernetes/client-node';
|
|
2
|
+
type ManifestInput = string | KubernetesObject | Record<string, unknown> | Array<KubernetesObject | Record<string, unknown>>;
|
|
3
|
+
export declare function parseManifests(input: ManifestInput): KubernetesObject[];
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/util/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,KAAK,aAAa,GACd,MAAM,GACN,gBAAgB,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEtD,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAWvE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { parseAllDocuments } from 'yaml';
|
|
2
|
+
export function parseManifests(input) {
|
|
3
|
+
if (typeof input === 'string') {
|
|
4
|
+
const docs = parseAllDocuments(input).map((doc) => doc.toJSON());
|
|
5
|
+
return docs.filter(isKubernetesObject).map(normalizeManifest);
|
|
6
|
+
}
|
|
7
|
+
if (Array.isArray(input)) {
|
|
8
|
+
return input.filter(isKubernetesObject).map(normalizeManifest);
|
|
9
|
+
}
|
|
10
|
+
return [normalizeManifest(input)];
|
|
11
|
+
}
|
|
12
|
+
function normalizeManifest(manifest) {
|
|
13
|
+
if (!isKubernetesObject(manifest)) {
|
|
14
|
+
throw new Error('Manifest is missing apiVersion or kind fields');
|
|
15
|
+
}
|
|
16
|
+
if (!manifest.metadata) {
|
|
17
|
+
throw new Error('Manifest metadata is required');
|
|
18
|
+
}
|
|
19
|
+
if (!manifest.metadata.name) {
|
|
20
|
+
throw new Error('Manifest metadata.name is required');
|
|
21
|
+
}
|
|
22
|
+
return manifest;
|
|
23
|
+
}
|
|
24
|
+
function isKubernetesObject(value) {
|
|
25
|
+
if (!value || typeof value !== 'object') {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const candidate = value;
|
|
29
|
+
return typeof candidate.apiVersion === 'string' && typeof candidate.kind === 'string';
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/util/manifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAQzC,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,iBAAiB,CAAuD,QAAW;IAC1F,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,OAAO,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED,eAAO,MAAM,YAAY,QAAmB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
/**
|
|
4
|
+
* Get the package root directory.
|
|
5
|
+
* This works for both ESM and when compiled to dist/.
|
|
6
|
+
*/
|
|
7
|
+
export function getPackageRoot() {
|
|
8
|
+
// When this file is in dist/util/paths.js, we go up 2 levels to get to the package root
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = path.dirname(__filename);
|
|
11
|
+
return path.resolve(__dirname, '../..');
|
|
12
|
+
}
|
|
13
|
+
export const PACKAGE_ROOT = getPackageRoot();
|
|
14
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,wFAAwF;IACxF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC"}
|