@side-quest/kit 0.0.0 → 0.2.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/CHANGELOG.md +36 -0
- package/README.md +54 -352
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +156 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -2509
- package/dist/index.js.map +1 -0
- package/dist/lib/ast/index.d.ts +11 -0
- package/dist/lib/ast/index.d.ts.map +1 -0
- package/dist/lib/ast/index.js +15 -0
- package/dist/lib/ast/index.js.map +1 -0
- package/dist/lib/ast/languages.d.ts +55 -0
- package/dist/lib/ast/languages.d.ts.map +1 -0
- package/dist/lib/ast/languages.js +146 -0
- package/dist/lib/ast/languages.js.map +1 -0
- package/dist/lib/ast/pattern.d.ts +84 -0
- package/dist/lib/ast/pattern.d.ts.map +1 -0
- package/dist/lib/ast/pattern.js +268 -0
- package/dist/lib/ast/pattern.js.map +1 -0
- package/dist/lib/ast/searcher.d.ts +89 -0
- package/dist/lib/ast/searcher.d.ts.map +1 -0
- package/dist/lib/ast/searcher.js +316 -0
- package/dist/lib/ast/searcher.js.map +1 -0
- package/dist/lib/ast/types.d.ts +93 -0
- package/dist/lib/ast/types.d.ts.map +1 -0
- package/dist/lib/ast/types.js +23 -0
- package/dist/lib/ast/types.js.map +1 -0
- package/dist/lib/commands/callers.d.ts +20 -0
- package/dist/lib/commands/callers.d.ts.map +1 -0
- package/dist/lib/commands/callers.js +162 -0
- package/dist/lib/commands/callers.js.map +1 -0
- package/dist/lib/commands/find.d.ts +15 -0
- package/dist/lib/commands/find.d.ts.map +1 -0
- package/dist/lib/commands/find.js +113 -0
- package/dist/lib/commands/find.js.map +1 -0
- package/dist/lib/commands/overview.d.ts +6 -0
- package/dist/lib/commands/overview.d.ts.map +1 -0
- package/dist/lib/commands/overview.js +52 -0
- package/dist/lib/commands/overview.js.map +1 -0
- package/dist/lib/commands/prime.d.ts +16 -0
- package/dist/lib/commands/prime.d.ts.map +1 -0
- package/dist/lib/commands/prime.js +168 -0
- package/dist/lib/commands/prime.js.map +1 -0
- package/dist/lib/commands/search.d.ts +20 -0
- package/dist/lib/commands/search.d.ts.map +1 -0
- package/dist/lib/commands/search.js +111 -0
- package/dist/lib/commands/search.js.map +1 -0
- package/dist/lib/errors.d.ts +80 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +189 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/formatters/output.d.ts +5 -0
- package/dist/lib/formatters/output.d.ts.map +1 -0
- package/dist/lib/formatters/output.js +5 -0
- package/dist/lib/formatters/output.js.map +1 -0
- package/dist/lib/formatters.d.ts +29 -0
- package/dist/lib/formatters.d.ts.map +1 -0
- package/dist/lib/formatters.js +141 -0
- package/dist/lib/formatters.js.map +1 -0
- package/dist/lib/index-tools.d.ts +108 -0
- package/dist/lib/index-tools.d.ts.map +1 -0
- package/dist/lib/index-tools.js +311 -0
- package/dist/lib/index-tools.js.map +1 -0
- package/dist/lib/index.d.ts +21 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +42 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/kit-wrapper.d.ts +70 -0
- package/dist/lib/kit-wrapper.d.ts.map +1 -0
- package/dist/lib/kit-wrapper.js +462 -0
- package/dist/lib/kit-wrapper.js.map +1 -0
- package/dist/lib/logger.d.ts +28 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +39 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/types.d.ts +179 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +48 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils/args.d.ts +40 -0
- package/dist/lib/utils/args.d.ts.map +1 -0
- package/dist/lib/utils/args.js +58 -0
- package/dist/lib/utils/args.js.map +1 -0
- package/dist/lib/utils/git.d.ts +23 -0
- package/dist/lib/utils/git.d.ts.map +1 -0
- package/dist/lib/utils/git.js +50 -0
- package/dist/lib/utils/git.js.map +1 -0
- package/dist/lib/utils/index-parser.d.ts +155 -0
- package/dist/lib/utils/index-parser.d.ts.map +1 -0
- package/dist/lib/utils/index-parser.js +252 -0
- package/dist/lib/utils/index-parser.js.map +1 -0
- package/dist/lib/validators.d.ts +138 -0
- package/dist/lib/validators.d.ts.map +1 -0
- package/dist/lib/validators.js +302 -0
- package/dist/lib/validators.js.map +1 -0
- package/dist/mcp/index.d.ts +19 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +769 -0
- package/dist/mcp/index.js.map +1 -0
- package/package.json +5 -2
- package/src/cli.ts +170 -0
- package/src/lib/ast/index.ts +32 -0
- package/src/lib/ast/languages.ts +172 -0
- package/src/lib/ast/pattern.ts +299 -0
- package/src/lib/ast/searcher.ts +381 -0
- package/src/lib/ast/types.ts +99 -0
- package/src/lib/commands/callers.ts +226 -0
- package/src/lib/commands/find.ts +159 -0
- package/src/lib/commands/overview.ts +73 -0
- package/src/lib/commands/prime.ts +271 -0
- package/src/lib/commands/search.ts +146 -0
- package/src/lib/errors.ts +221 -0
- package/src/lib/formatters/output.ts +9 -0
- package/src/lib/formatters.ts +189 -0
- package/src/lib/index-tools.ts +471 -0
- package/src/lib/index.ts +122 -0
- package/src/lib/kit-wrapper.ts +675 -0
- package/src/lib/logger.ts +57 -0
- package/src/lib/types.ts +228 -0
- package/src/lib/utils/args.ts +72 -0
- package/src/lib/utils/git.ts +65 -0
- package/src/lib/utils/index-parser.ts +350 -0
- package/src/lib/validators.ts +437 -0
- package/src/mcp/index.ts +144 -79
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kit Plugin Validators
|
|
3
|
+
*
|
|
4
|
+
* Input validation and security utilities for safe Kit CLI operations.
|
|
5
|
+
*/
|
|
6
|
+
import { normalizePath, pathExistsSync, statSync } from '@side-quest/core/fs';
|
|
7
|
+
import { validateGlob, validateInteger, validateRegex, } from '@side-quest/core/validation';
|
|
8
|
+
import { getDefaultKitPath } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Validate a path for Kit operations.
|
|
11
|
+
*
|
|
12
|
+
* Checks:
|
|
13
|
+
* - Path exists
|
|
14
|
+
* - Path is a directory (for search operations)
|
|
15
|
+
* - No path traversal attacks (.. sequences escaping base)
|
|
16
|
+
*
|
|
17
|
+
* @param inputPath - Path to validate
|
|
18
|
+
* @param options - Validation options
|
|
19
|
+
* @returns Validation result with normalized path or error
|
|
20
|
+
*/
|
|
21
|
+
export function validatePath(inputPath, options = {}) {
|
|
22
|
+
const { basePath, mustBeDirectory = true, mustExist = true } = options;
|
|
23
|
+
// Empty path check
|
|
24
|
+
if (!inputPath || inputPath.trim() === '') {
|
|
25
|
+
return { valid: false, error: 'Path cannot be empty' };
|
|
26
|
+
}
|
|
27
|
+
// Normalize the path
|
|
28
|
+
const normalizedPath = normalizePath(inputPath, basePath);
|
|
29
|
+
// Path traversal check - if basePath is specified, ensure we stay within it
|
|
30
|
+
if (basePath) {
|
|
31
|
+
const normalizedBase = normalizePath(basePath);
|
|
32
|
+
if (!normalizedPath.startsWith(normalizedBase)) {
|
|
33
|
+
return {
|
|
34
|
+
valid: false,
|
|
35
|
+
error: 'Path traversal detected: path escapes base directory',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Existence check
|
|
40
|
+
if (mustExist && !pathExistsSync(normalizedPath)) {
|
|
41
|
+
return { valid: false, error: `Path does not exist: ${normalizedPath}` };
|
|
42
|
+
}
|
|
43
|
+
// Directory check
|
|
44
|
+
if (mustExist && mustBeDirectory) {
|
|
45
|
+
try {
|
|
46
|
+
const stats = statSync(normalizedPath);
|
|
47
|
+
if (!stats.isDirectory()) {
|
|
48
|
+
return {
|
|
49
|
+
valid: false,
|
|
50
|
+
error: `Path is not a directory: ${normalizedPath}`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return { valid: false, error: `Cannot access path: ${normalizedPath}` };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { valid: true, path: normalizedPath };
|
|
59
|
+
}
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Integer Validation
|
|
62
|
+
// ============================================================================
|
|
63
|
+
/**
|
|
64
|
+
* Validate a number is a positive integer within bounds.
|
|
65
|
+
* @deprecated Use validateInteger from @sidequest/core/validation instead
|
|
66
|
+
* @param value - Value to validate
|
|
67
|
+
* @param options - Validation options
|
|
68
|
+
* @returns Validation result
|
|
69
|
+
*/
|
|
70
|
+
export function validatePositiveInt(value, options) {
|
|
71
|
+
// Delegate to core validateInteger with backward-compatible defaults
|
|
72
|
+
return validateInteger(value, {
|
|
73
|
+
name: options.name,
|
|
74
|
+
min: options.min ?? 1,
|
|
75
|
+
max: options.max ?? 10000,
|
|
76
|
+
defaultValue: options.defaultValue,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Composite Validators
|
|
81
|
+
// ============================================================================
|
|
82
|
+
/**
|
|
83
|
+
* Validate all inputs for a grep search operation.
|
|
84
|
+
* @param inputs - Grep inputs to validate
|
|
85
|
+
* @returns Combined validation result
|
|
86
|
+
*/
|
|
87
|
+
export function validateGrepInputs(inputs) {
|
|
88
|
+
const errors = [];
|
|
89
|
+
// Validate pattern - core returns ValidationResult<RegExp>
|
|
90
|
+
const patternResult = validateRegex(inputs.pattern);
|
|
91
|
+
if (!patternResult.valid) {
|
|
92
|
+
errors.push(patternResult.error);
|
|
93
|
+
}
|
|
94
|
+
// Validate path
|
|
95
|
+
const pathResult = validatePath(inputs.path || getDefaultKitPath());
|
|
96
|
+
if (!pathResult.valid) {
|
|
97
|
+
errors.push(pathResult.error);
|
|
98
|
+
}
|
|
99
|
+
// Validate include glob (optional)
|
|
100
|
+
let validatedInclude;
|
|
101
|
+
if (inputs.include) {
|
|
102
|
+
const includeResult = validateGlob(inputs.include);
|
|
103
|
+
if (!includeResult.valid) {
|
|
104
|
+
errors.push(`Include pattern: ${includeResult.error}`);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
validatedInclude = includeResult.value;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Validate exclude glob (optional)
|
|
111
|
+
let validatedExclude;
|
|
112
|
+
if (inputs.exclude) {
|
|
113
|
+
const excludeResult = validateGlob(inputs.exclude);
|
|
114
|
+
if (!excludeResult.valid) {
|
|
115
|
+
errors.push(`Exclude pattern: ${excludeResult.error}`);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
validatedExclude = excludeResult.value;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Validate maxResults
|
|
122
|
+
const maxResultsResult = validatePositiveInt(inputs.maxResults, {
|
|
123
|
+
name: 'maxResults',
|
|
124
|
+
min: 1,
|
|
125
|
+
max: 1000,
|
|
126
|
+
defaultValue: 100,
|
|
127
|
+
});
|
|
128
|
+
if (!maxResultsResult.valid) {
|
|
129
|
+
errors.push(maxResultsResult.error);
|
|
130
|
+
}
|
|
131
|
+
if (errors.length > 0) {
|
|
132
|
+
return { valid: false, errors };
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
valid: true,
|
|
136
|
+
errors: [],
|
|
137
|
+
validated: {
|
|
138
|
+
pattern: patternResult.value.source, // Extract source from compiled RegExp
|
|
139
|
+
path: pathResult.path,
|
|
140
|
+
include: validatedInclude,
|
|
141
|
+
exclude: validatedExclude,
|
|
142
|
+
maxResults: maxResultsResult.value,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Validate all inputs for a semantic search operation.
|
|
148
|
+
* @param inputs - Semantic search inputs to validate
|
|
149
|
+
* @returns Combined validation result
|
|
150
|
+
*/
|
|
151
|
+
export function validateSemanticInputs(inputs) {
|
|
152
|
+
const errors = [];
|
|
153
|
+
// Validate query (not a regex, just non-empty)
|
|
154
|
+
if (!inputs.query || inputs.query.trim() === '') {
|
|
155
|
+
errors.push('Query cannot be empty');
|
|
156
|
+
}
|
|
157
|
+
// Validate path
|
|
158
|
+
const pathResult = validatePath(inputs.path || getDefaultKitPath());
|
|
159
|
+
if (!pathResult.valid) {
|
|
160
|
+
errors.push(pathResult.error);
|
|
161
|
+
}
|
|
162
|
+
// Validate topK
|
|
163
|
+
const topKResult = validatePositiveInt(inputs.topK, {
|
|
164
|
+
name: 'topK',
|
|
165
|
+
min: 1,
|
|
166
|
+
max: 50,
|
|
167
|
+
defaultValue: 5,
|
|
168
|
+
});
|
|
169
|
+
if (!topKResult.valid) {
|
|
170
|
+
errors.push(topKResult.error);
|
|
171
|
+
}
|
|
172
|
+
if (errors.length > 0) {
|
|
173
|
+
return { valid: false, errors };
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
valid: true,
|
|
177
|
+
errors: [],
|
|
178
|
+
validated: {
|
|
179
|
+
query: inputs.query.trim(),
|
|
180
|
+
path: pathResult.path,
|
|
181
|
+
topK: topKResult.value,
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Validate all inputs for a symbol usages operation.
|
|
187
|
+
* @param inputs - Usages inputs to validate
|
|
188
|
+
* @returns Combined validation result
|
|
189
|
+
*/
|
|
190
|
+
export function validateUsagesInputs(inputs) {
|
|
191
|
+
const errors = [];
|
|
192
|
+
// Validate path
|
|
193
|
+
const pathResult = validatePath(inputs.path || getDefaultKitPath());
|
|
194
|
+
if (!pathResult.valid) {
|
|
195
|
+
errors.push(pathResult.error);
|
|
196
|
+
}
|
|
197
|
+
// Validate symbol name
|
|
198
|
+
if (!inputs.symbolName || inputs.symbolName.trim() === '') {
|
|
199
|
+
errors.push('Symbol name is required');
|
|
200
|
+
}
|
|
201
|
+
// Validate symbol type (optional)
|
|
202
|
+
let validatedSymbolType;
|
|
203
|
+
if (inputs.symbolType) {
|
|
204
|
+
const sanitized = inputs.symbolType.trim().toLowerCase();
|
|
205
|
+
const validTypes = [
|
|
206
|
+
'function',
|
|
207
|
+
'class',
|
|
208
|
+
'variable',
|
|
209
|
+
'type',
|
|
210
|
+
'interface',
|
|
211
|
+
'method',
|
|
212
|
+
'property',
|
|
213
|
+
'constant',
|
|
214
|
+
];
|
|
215
|
+
if (sanitized && !validTypes.includes(sanitized)) {
|
|
216
|
+
errors.push(`Invalid symbol type: ${inputs.symbolType}. Valid types: ${validTypes.join(', ')}`);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
validatedSymbolType = sanitized || undefined;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (errors.length > 0) {
|
|
223
|
+
return { valid: false, errors };
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
valid: true,
|
|
227
|
+
errors: [],
|
|
228
|
+
validated: {
|
|
229
|
+
path: pathResult.path,
|
|
230
|
+
symbolName: inputs.symbolName.trim(),
|
|
231
|
+
symbolType: validatedSymbolType,
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Validate all inputs for an AST search operation.
|
|
237
|
+
* @param inputs - AST search inputs to validate
|
|
238
|
+
* @returns Combined validation result
|
|
239
|
+
*/
|
|
240
|
+
export function validateAstSearchInputs(inputs) {
|
|
241
|
+
const errors = [];
|
|
242
|
+
// Validate pattern
|
|
243
|
+
if (!inputs.pattern || inputs.pattern.trim() === '') {
|
|
244
|
+
errors.push('Pattern cannot be empty');
|
|
245
|
+
}
|
|
246
|
+
// Validate mode
|
|
247
|
+
const validModes = ['simple', 'pattern'];
|
|
248
|
+
const mode = (inputs.mode || 'simple').toLowerCase();
|
|
249
|
+
if (!validModes.includes(mode)) {
|
|
250
|
+
errors.push(`Invalid mode: ${inputs.mode}. Valid modes: ${validModes.join(', ')}`);
|
|
251
|
+
}
|
|
252
|
+
// Validate pattern mode JSON if mode is 'pattern'
|
|
253
|
+
if (mode === 'pattern' && inputs.pattern) {
|
|
254
|
+
try {
|
|
255
|
+
JSON.parse(inputs.pattern);
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// Allow non-JSON patterns - they'll be treated as textMatch
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Validate file pattern (optional glob)
|
|
262
|
+
let validatedFilePattern;
|
|
263
|
+
if (inputs.filePattern) {
|
|
264
|
+
const patternResult = validateGlob(inputs.filePattern);
|
|
265
|
+
if (!patternResult.valid) {
|
|
266
|
+
errors.push(`File pattern: ${patternResult.error}`);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
validatedFilePattern = patternResult.value;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Validate path
|
|
273
|
+
const pathResult = validatePath(inputs.path || getDefaultKitPath());
|
|
274
|
+
if (!pathResult.valid) {
|
|
275
|
+
errors.push(pathResult.error);
|
|
276
|
+
}
|
|
277
|
+
// Validate maxResults
|
|
278
|
+
const maxResultsResult = validatePositiveInt(inputs.maxResults, {
|
|
279
|
+
name: 'maxResults',
|
|
280
|
+
min: 1,
|
|
281
|
+
max: 500,
|
|
282
|
+
defaultValue: 100,
|
|
283
|
+
});
|
|
284
|
+
if (!maxResultsResult.valid) {
|
|
285
|
+
errors.push(maxResultsResult.error);
|
|
286
|
+
}
|
|
287
|
+
if (errors.length > 0) {
|
|
288
|
+
return { valid: false, errors };
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
valid: true,
|
|
292
|
+
errors: [],
|
|
293
|
+
validated: {
|
|
294
|
+
pattern: inputs.pattern.trim(),
|
|
295
|
+
mode: mode,
|
|
296
|
+
filePattern: validatedFilePattern,
|
|
297
|
+
path: pathResult.path,
|
|
298
|
+
maxResults: maxResultsResult.value,
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/lib/validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* Kit MCP Server (Slim)
|
|
4
|
+
*
|
|
5
|
+
* 7 focused tools for token-efficient codebase navigation using Kit CLI.
|
|
6
|
+
*
|
|
7
|
+
* Tools:
|
|
8
|
+
* 1. kit_prime - Generate/refresh PROJECT_INDEX.json
|
|
9
|
+
* 2. kit_find - Symbol lookup + file overview (merged)
|
|
10
|
+
* 3. kit_references - Callers + usages (merged)
|
|
11
|
+
* 4. kit_semantic - Vector search with grep fallback
|
|
12
|
+
* 5. kit_ast_search - Tree-sitter structural search
|
|
13
|
+
* 6. kit_context - Extract enclosing definition around file:line
|
|
14
|
+
* 7. kit_chunk - Split file into LLM-friendly chunks
|
|
15
|
+
*
|
|
16
|
+
* Observability: JSONL file logging to ~/.claude/logs/kit.jsonl
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;GAeG"}
|