@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,462 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kit CLI Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Pure functions for executing Kit CLI commands with proper error handling.
|
|
5
|
+
* Uses Bun.spawnSync via shared helpers for synchronous execution to fit MCP tool patterns.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { TimeoutError, withTimeout } from '@side-quest/core/concurrency';
|
|
9
|
+
import { ensureCacheDir, isCachePopulated, withTempJsonFileSync, } from '@side-quest/core/fs';
|
|
10
|
+
import { buildEnhancedPath, ensureCommandAvailable, spawnSyncCollect, } from '@side-quest/core/spawn';
|
|
11
|
+
import { AST_SEARCH_TIMEOUT, ASTSearcher, } from './ast/index.js';
|
|
12
|
+
import { createErrorFromOutput, isSemanticUnavailableError, isTimeoutError, KitError, KitErrorType, SEMANTIC_INSTALL_HINT, } from './errors.js';
|
|
13
|
+
import { astLogger, createCorrelationId, grepLogger, semanticLogger, usagesLogger, } from './logger.js';
|
|
14
|
+
import { GREP_TIMEOUT, getDefaultKitPath, SEMANTIC_TIMEOUT, USAGES_TIMEOUT, } from './types.js';
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Kit CLI Execution
|
|
17
|
+
// ============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Check if Kit CLI is installed and available in PATH.
|
|
20
|
+
* @returns True if kit command is available
|
|
21
|
+
*/
|
|
22
|
+
export function isKitInstalled() {
|
|
23
|
+
try {
|
|
24
|
+
ensureCommandAvailable('kit');
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get Kit CLI version.
|
|
33
|
+
* @returns Version string or null if not installed
|
|
34
|
+
*/
|
|
35
|
+
export function getKitVersion() {
|
|
36
|
+
try {
|
|
37
|
+
const result = spawnSyncCollect(['kit', '--version'], {
|
|
38
|
+
env: {
|
|
39
|
+
...process.env,
|
|
40
|
+
PATH: buildEnhancedPath(),
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
if (result.exitCode === 0 && result.stdout) {
|
|
44
|
+
return result.stdout.trim();
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Execute a Kit CLI command.
|
|
54
|
+
* @param args - Arguments to pass to kit
|
|
55
|
+
* @param options - Execution options
|
|
56
|
+
* @returns Execution result with stdout, stderr, and exit code
|
|
57
|
+
*/
|
|
58
|
+
function executeKit(args, options = {}) {
|
|
59
|
+
const { cwd } = options;
|
|
60
|
+
const result = spawnSyncCollect(['kit', ...args], {
|
|
61
|
+
env: {
|
|
62
|
+
...process.env,
|
|
63
|
+
PATH: buildEnhancedPath(),
|
|
64
|
+
},
|
|
65
|
+
...(cwd && { cwd }),
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
stdout: result.stdout || '',
|
|
69
|
+
stderr: result.stderr || '',
|
|
70
|
+
exitCode: result.exitCode ?? 1,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Execute kit grep command.
|
|
75
|
+
* @param options - Grep options
|
|
76
|
+
* @returns Grep result or error
|
|
77
|
+
*/
|
|
78
|
+
export function executeKitGrep(options) {
|
|
79
|
+
const cid = createCorrelationId();
|
|
80
|
+
const startTime = Date.now();
|
|
81
|
+
// Check if Kit is installed
|
|
82
|
+
if (!isKitInstalled()) {
|
|
83
|
+
grepLogger.error('Kit not installed', { cid });
|
|
84
|
+
return new KitError(KitErrorType.KitNotInstalled).toJSON();
|
|
85
|
+
}
|
|
86
|
+
const { pattern, path = getDefaultKitPath(), caseSensitive = true, include, exclude, maxResults = 100, directory, } = options;
|
|
87
|
+
// Build command arguments
|
|
88
|
+
const args = ['grep', path, pattern];
|
|
89
|
+
// Add options
|
|
90
|
+
if (!caseSensitive) {
|
|
91
|
+
args.push('--ignore-case');
|
|
92
|
+
}
|
|
93
|
+
if (include) {
|
|
94
|
+
args.push('--include', include);
|
|
95
|
+
}
|
|
96
|
+
if (exclude) {
|
|
97
|
+
args.push('--exclude', exclude);
|
|
98
|
+
}
|
|
99
|
+
args.push('--max-results', String(maxResults));
|
|
100
|
+
if (directory) {
|
|
101
|
+
args.push('--directory', directory);
|
|
102
|
+
}
|
|
103
|
+
grepLogger.info('Executing kit grep', {
|
|
104
|
+
cid,
|
|
105
|
+
pattern,
|
|
106
|
+
path,
|
|
107
|
+
args,
|
|
108
|
+
});
|
|
109
|
+
try {
|
|
110
|
+
// Use temp file for JSON output with automatic cleanup
|
|
111
|
+
const rawMatches = withTempJsonFileSync(`kit-grep-${cid}`, (tempFile) => {
|
|
112
|
+
args.push('--output', tempFile);
|
|
113
|
+
const result = executeKit(args, { timeout: GREP_TIMEOUT });
|
|
114
|
+
return {
|
|
115
|
+
exitCode: result.exitCode,
|
|
116
|
+
stderr: result.stderr,
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
// Transform to our format
|
|
120
|
+
const matches = rawMatches.map((m) => ({
|
|
121
|
+
file: m.file,
|
|
122
|
+
line: m.line_number,
|
|
123
|
+
content: m.line_content,
|
|
124
|
+
}));
|
|
125
|
+
grepLogger.info('Grep completed', {
|
|
126
|
+
cid,
|
|
127
|
+
pattern,
|
|
128
|
+
matchCount: matches.length,
|
|
129
|
+
durationMs: Date.now() - startTime,
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
count: matches.length,
|
|
133
|
+
matches,
|
|
134
|
+
pattern,
|
|
135
|
+
path,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
140
|
+
grepLogger.error('Grep threw exception', { cid, error: message });
|
|
141
|
+
// Check if this is a Kit CLI error from withTempJsonFileSync
|
|
142
|
+
if (message.includes('Operation failed with exit code')) {
|
|
143
|
+
const exitCode = Number.parseInt(message.match(/exit code (\d+)/)?.[1] || '1', 10);
|
|
144
|
+
const stderr = message.split(': ').slice(2).join(': ') || message;
|
|
145
|
+
return createErrorFromOutput(stderr, exitCode).toJSON();
|
|
146
|
+
}
|
|
147
|
+
return new KitError(KitErrorType.KitCommandFailed, message).toJSON();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Execute kit semantic search command.
|
|
152
|
+
* @param options - Semantic search options
|
|
153
|
+
* @returns Semantic result or error (with fallback to grep)
|
|
154
|
+
*/
|
|
155
|
+
export function executeKitSemantic(options) {
|
|
156
|
+
const cid = createCorrelationId();
|
|
157
|
+
const startTime = Date.now();
|
|
158
|
+
// Check if Kit is installed
|
|
159
|
+
if (!isKitInstalled()) {
|
|
160
|
+
semanticLogger.error('Kit not installed', { cid });
|
|
161
|
+
return new KitError(KitErrorType.KitNotInstalled).toJSON();
|
|
162
|
+
}
|
|
163
|
+
const { query, path = getDefaultKitPath(), topK = 5, chunkBy = 'symbols', buildIndex = false, } = options;
|
|
164
|
+
// Pre-flight check: if index not built and not forcing build, tell user to build it first
|
|
165
|
+
if (!buildIndex && !isSemanticIndexBuilt(path)) {
|
|
166
|
+
semanticLogger.info('Semantic index not built, instructing user to build', {
|
|
167
|
+
cid,
|
|
168
|
+
path,
|
|
169
|
+
});
|
|
170
|
+
const buildCommand = `kit search-semantic "${path}" "${query}" --build-index`;
|
|
171
|
+
const error = new KitError(KitErrorType.SemanticIndexNotBuilt, `To use semantic search, build the vector index with:\n\n ${buildCommand}\n\nAfter building (one-time), semantic search will be fast and cached.`);
|
|
172
|
+
return error.toJSON();
|
|
173
|
+
}
|
|
174
|
+
// Get global cache directory for this repo's vector index
|
|
175
|
+
const persistDir = getSemanticCacheDir(path);
|
|
176
|
+
// Build command arguments
|
|
177
|
+
const args = [
|
|
178
|
+
'search-semantic',
|
|
179
|
+
path,
|
|
180
|
+
query,
|
|
181
|
+
'--top-k',
|
|
182
|
+
String(topK),
|
|
183
|
+
'--format',
|
|
184
|
+
'json',
|
|
185
|
+
'--chunk-by',
|
|
186
|
+
chunkBy,
|
|
187
|
+
'--persist-dir',
|
|
188
|
+
persistDir,
|
|
189
|
+
];
|
|
190
|
+
if (buildIndex) {
|
|
191
|
+
args.push('--build-index');
|
|
192
|
+
}
|
|
193
|
+
semanticLogger.info('Executing kit semantic search', {
|
|
194
|
+
cid,
|
|
195
|
+
query,
|
|
196
|
+
path,
|
|
197
|
+
topK,
|
|
198
|
+
chunkBy,
|
|
199
|
+
persistDir,
|
|
200
|
+
});
|
|
201
|
+
try {
|
|
202
|
+
const result = executeKit(args, { timeout: SEMANTIC_TIMEOUT });
|
|
203
|
+
// Check for semantic search unavailable (ML deps not installed)
|
|
204
|
+
// Note: kit writes error messages to stdout, not stderr
|
|
205
|
+
const combinedOutput = `${result.stdout}\n${result.stderr}`;
|
|
206
|
+
if (result.exitCode !== 0 && isSemanticUnavailableError(combinedOutput)) {
|
|
207
|
+
semanticLogger.warn('Semantic search unavailable, falling back to grep', {
|
|
208
|
+
cid,
|
|
209
|
+
output: combinedOutput.slice(0, 200),
|
|
210
|
+
});
|
|
211
|
+
// Fall back to grep search
|
|
212
|
+
return fallbackToGrep(query, path, topK, cid);
|
|
213
|
+
}
|
|
214
|
+
// Check for timeout - DO NOT fall back to grep as it would also timeout
|
|
215
|
+
if (result.exitCode !== 0 && isTimeoutError(combinedOutput)) {
|
|
216
|
+
semanticLogger.warn('Semantic search timed out on large repository', {
|
|
217
|
+
cid,
|
|
218
|
+
query,
|
|
219
|
+
durationMs: Date.now() - startTime,
|
|
220
|
+
});
|
|
221
|
+
return new KitError(KitErrorType.Timeout, `Semantic search timed out after ${SEMANTIC_TIMEOUT}ms. On first run, building the vector index may take longer. Try again to use the cached index.`).toJSON();
|
|
222
|
+
}
|
|
223
|
+
// Check for other errors
|
|
224
|
+
if (result.exitCode !== 0) {
|
|
225
|
+
semanticLogger.error('Semantic search failed', {
|
|
226
|
+
cid,
|
|
227
|
+
exitCode: result.exitCode,
|
|
228
|
+
output: combinedOutput.slice(0, 500),
|
|
229
|
+
durationMs: Date.now() - startTime,
|
|
230
|
+
});
|
|
231
|
+
return createErrorFromOutput(combinedOutput, result.exitCode).toJSON();
|
|
232
|
+
}
|
|
233
|
+
// Parse JSON output
|
|
234
|
+
let rawMatches;
|
|
235
|
+
try {
|
|
236
|
+
rawMatches = JSON.parse(result.stdout);
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
semanticLogger.error('Failed to parse semantic output', {
|
|
240
|
+
cid,
|
|
241
|
+
stdout: result.stdout,
|
|
242
|
+
});
|
|
243
|
+
return new KitError(KitErrorType.OutputParseError, 'Failed to parse semantic search JSON output').toJSON();
|
|
244
|
+
}
|
|
245
|
+
// Transform to our format
|
|
246
|
+
const matches = rawMatches.map((m) => ({
|
|
247
|
+
file: m.file,
|
|
248
|
+
chunk: m.code,
|
|
249
|
+
score: m.score,
|
|
250
|
+
startLine: m.start_line,
|
|
251
|
+
endLine: m.end_line,
|
|
252
|
+
}));
|
|
253
|
+
semanticLogger.info('Semantic search completed', {
|
|
254
|
+
cid,
|
|
255
|
+
query,
|
|
256
|
+
matchCount: matches.length,
|
|
257
|
+
durationMs: Date.now() - startTime,
|
|
258
|
+
});
|
|
259
|
+
return {
|
|
260
|
+
count: matches.length,
|
|
261
|
+
matches,
|
|
262
|
+
query,
|
|
263
|
+
path,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
268
|
+
semanticLogger.error('Semantic search threw exception', {
|
|
269
|
+
cid,
|
|
270
|
+
error: message,
|
|
271
|
+
});
|
|
272
|
+
return new KitError(KitErrorType.KitCommandFailed, message).toJSON();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Fall back to grep when semantic search is unavailable.
|
|
277
|
+
*/
|
|
278
|
+
function fallbackToGrep(query, path, limit, cid) {
|
|
279
|
+
// Extract keywords from the query for grep
|
|
280
|
+
const keywords = query
|
|
281
|
+
.split(/\s+/)
|
|
282
|
+
.filter((w) => w.length > 2)
|
|
283
|
+
.slice(0, 3);
|
|
284
|
+
const pattern = keywords.join('|');
|
|
285
|
+
semanticLogger.info('Fallback grep search', { cid, pattern, path });
|
|
286
|
+
const grepResult = executeKitGrep({
|
|
287
|
+
pattern,
|
|
288
|
+
path,
|
|
289
|
+
maxResults: limit,
|
|
290
|
+
caseSensitive: false,
|
|
291
|
+
});
|
|
292
|
+
if ('error' in grepResult) {
|
|
293
|
+
return grepResult;
|
|
294
|
+
}
|
|
295
|
+
// Convert grep matches to semantic format
|
|
296
|
+
// Score decreases by 0.05 per result, with minimum of 0.1 to avoid negative scores
|
|
297
|
+
const matches = grepResult.matches.map((m, idx) => ({
|
|
298
|
+
file: m.file,
|
|
299
|
+
chunk: m.content,
|
|
300
|
+
score: Math.max(0.1, 1 - idx * 0.05),
|
|
301
|
+
startLine: m.line,
|
|
302
|
+
endLine: m.line,
|
|
303
|
+
}));
|
|
304
|
+
return {
|
|
305
|
+
count: matches.length,
|
|
306
|
+
matches,
|
|
307
|
+
query,
|
|
308
|
+
path,
|
|
309
|
+
fallback: true,
|
|
310
|
+
installHint: SEMANTIC_INSTALL_HINT,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Execute kit usages command to find symbol definitions.
|
|
315
|
+
* @param options - Usages options
|
|
316
|
+
* @returns Usages result or error
|
|
317
|
+
*/
|
|
318
|
+
export function executeKitUsages(options) {
|
|
319
|
+
const cid = createCorrelationId();
|
|
320
|
+
const startTime = Date.now();
|
|
321
|
+
// Check if Kit is installed
|
|
322
|
+
if (!isKitInstalled()) {
|
|
323
|
+
usagesLogger.error('Kit not installed', { cid });
|
|
324
|
+
return new KitError(KitErrorType.KitNotInstalled).toJSON();
|
|
325
|
+
}
|
|
326
|
+
const { path = getDefaultKitPath(), symbolName, symbolType } = options;
|
|
327
|
+
if (!symbolName || symbolName.trim() === '') {
|
|
328
|
+
return new KitError(KitErrorType.InvalidInput, 'Symbol name is required').toJSON();
|
|
329
|
+
}
|
|
330
|
+
// Build command arguments
|
|
331
|
+
const args = ['usages', path, symbolName.trim()];
|
|
332
|
+
if (symbolType) {
|
|
333
|
+
args.push('--type', symbolType);
|
|
334
|
+
}
|
|
335
|
+
usagesLogger.info('Executing kit usages', {
|
|
336
|
+
cid,
|
|
337
|
+
path,
|
|
338
|
+
symbolName,
|
|
339
|
+
symbolType,
|
|
340
|
+
args,
|
|
341
|
+
});
|
|
342
|
+
try {
|
|
343
|
+
// Use temp file for JSON output with automatic cleanup
|
|
344
|
+
const rawUsages = withTempJsonFileSync(`kit-usages-${cid}`, (tempFile) => {
|
|
345
|
+
const argsWithOutput = [...args, '--output', tempFile];
|
|
346
|
+
const result = executeKit(argsWithOutput, { timeout: USAGES_TIMEOUT });
|
|
347
|
+
return {
|
|
348
|
+
exitCode: result.exitCode,
|
|
349
|
+
stderr: result.stderr,
|
|
350
|
+
};
|
|
351
|
+
});
|
|
352
|
+
// Transform to our format
|
|
353
|
+
const usages = rawUsages.map((u) => ({
|
|
354
|
+
file: u.file,
|
|
355
|
+
type: u.type,
|
|
356
|
+
name: u.name,
|
|
357
|
+
line: u.line,
|
|
358
|
+
context: u.context,
|
|
359
|
+
}));
|
|
360
|
+
usagesLogger.info('Usages completed', {
|
|
361
|
+
cid,
|
|
362
|
+
symbolName,
|
|
363
|
+
usageCount: usages.length,
|
|
364
|
+
durationMs: Date.now() - startTime,
|
|
365
|
+
});
|
|
366
|
+
return {
|
|
367
|
+
count: usages.length,
|
|
368
|
+
usages,
|
|
369
|
+
symbolName: symbolName.trim(),
|
|
370
|
+
path,
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
375
|
+
usagesLogger.error('Usages threw exception', { cid, error: message });
|
|
376
|
+
// Check if this is a Kit CLI error from withTempJsonFileSync
|
|
377
|
+
if (message.includes('Operation failed with exit code')) {
|
|
378
|
+
const exitCode = Number.parseInt(message.match(/exit code (\d+)/)?.[1] || '1', 10);
|
|
379
|
+
const stderr = message.split(': ').slice(2).join(': ') || message;
|
|
380
|
+
return createErrorFromOutput(stderr, exitCode).toJSON();
|
|
381
|
+
}
|
|
382
|
+
return new KitError(KitErrorType.KitCommandFailed, message).toJSON();
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
// ============================================================================
|
|
386
|
+
// AST Search Execution (tree-sitter powered)
|
|
387
|
+
// ============================================================================
|
|
388
|
+
/**
|
|
389
|
+
* Execute AST-based code search using tree-sitter.
|
|
390
|
+
*
|
|
391
|
+
* Unlike other Kit commands, this uses an internal tree-sitter
|
|
392
|
+
* implementation rather than shelling out to the Kit CLI.
|
|
393
|
+
*
|
|
394
|
+
* @param options - AST search options
|
|
395
|
+
* @returns AST search result or error
|
|
396
|
+
*/
|
|
397
|
+
export async function executeAstSearch(options) {
|
|
398
|
+
const cid = createCorrelationId();
|
|
399
|
+
const startTime = Date.now();
|
|
400
|
+
const { pattern, mode, filePattern, path, maxResults } = options;
|
|
401
|
+
astLogger.info('Executing AST search', {
|
|
402
|
+
cid,
|
|
403
|
+
pattern,
|
|
404
|
+
mode,
|
|
405
|
+
filePattern,
|
|
406
|
+
path,
|
|
407
|
+
maxResults,
|
|
408
|
+
});
|
|
409
|
+
try {
|
|
410
|
+
const searcher = new ASTSearcher(path);
|
|
411
|
+
// Use core timeout utility
|
|
412
|
+
const result = await withTimeout(searcher.searchPattern(options), AST_SEARCH_TIMEOUT, 'AST search timed out');
|
|
413
|
+
astLogger.info('AST search completed', {
|
|
414
|
+
cid,
|
|
415
|
+
pattern,
|
|
416
|
+
matchCount: result.count,
|
|
417
|
+
durationMs: Date.now() - startTime,
|
|
418
|
+
});
|
|
419
|
+
return result;
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
423
|
+
const timeoutInfo = error instanceof TimeoutError ? ` after ${error.timeoutMs}ms` : '';
|
|
424
|
+
astLogger.error('AST search failed', {
|
|
425
|
+
cid,
|
|
426
|
+
error: message + timeoutInfo,
|
|
427
|
+
});
|
|
428
|
+
return new KitError(KitErrorType.KitCommandFailed, message).toJSON();
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// ============================================================================
|
|
432
|
+
// Utilities
|
|
433
|
+
// ============================================================================
|
|
434
|
+
/**
|
|
435
|
+
* Get the persist directory for a repo's semantic search vector index.
|
|
436
|
+
* Creates the directory if it doesn't exist.
|
|
437
|
+
*
|
|
438
|
+
* Per-repo caching strategy: Each repository gets its own .kit/vector_db/
|
|
439
|
+
* directory for isolated, portable vector indexes. This ensures:
|
|
440
|
+
* - Cache is scoped to the repo being searched
|
|
441
|
+
* - No cross-contamination between different repos
|
|
442
|
+
* - Cache travels with the repo context in Claude Code sessions
|
|
443
|
+
* - Easy cleanup (delete .kit/ when done with project)
|
|
444
|
+
*
|
|
445
|
+
* Structure: <repo-path>/.kit/vector_db/
|
|
446
|
+
*
|
|
447
|
+
* @param repoPath - Absolute path to the repository
|
|
448
|
+
* @returns Path to the persist directory for this repo's vector index
|
|
449
|
+
*/
|
|
450
|
+
export function getSemanticCacheDir(repoPath) {
|
|
451
|
+
return ensureCacheDir(repoPath, 'vector_db');
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Check if semantic search vector index has been built for a repository.
|
|
455
|
+
* @param repoPath - Path to the repository
|
|
456
|
+
* @returns True if vector index exists and has been built
|
|
457
|
+
*/
|
|
458
|
+
export function isSemanticIndexBuilt(repoPath) {
|
|
459
|
+
const cacheDir = join(repoPath, '.kit', 'vector_db');
|
|
460
|
+
return isCachePopulated(cacheDir);
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=kit-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit-wrapper.js","sourceRoot":"","sources":["../../src/lib/kit-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kit Plugin Logger
|
|
3
|
+
*
|
|
4
|
+
* JSONL logging with LogTape for observability and debugging.
|
|
5
|
+
* Uses @sidequest/core logging factory for consistent log location.
|
|
6
|
+
*
|
|
7
|
+
* Log location: ~/.claude/logs/kit.jsonl
|
|
8
|
+
*
|
|
9
|
+
* Logging Level Convention:
|
|
10
|
+
* - DEBUG: Detailed diagnostic info (file counts, cache hits, parameter echo)
|
|
11
|
+
* - INFO: Normal operation events (start/complete, results summary)
|
|
12
|
+
* - WARN: Degraded operation (fallbacks, skipped files, soft failures)
|
|
13
|
+
* - ERROR: Operation failures (exceptions, command failures, parse errors)
|
|
14
|
+
*/
|
|
15
|
+
import { createCorrelationId } from '@side-quest/core/logging';
|
|
16
|
+
declare const initLogger: () => Promise<void>, logger: import("@logtape/logtape").Logger, logDir: string, logFile: string;
|
|
17
|
+
export { createCorrelationId, initLogger, logDir, logFile, logger };
|
|
18
|
+
/** Grep subsystem logger */
|
|
19
|
+
export declare const grepLogger: import("@logtape/logtape").Logger;
|
|
20
|
+
/** Semantic search subsystem logger */
|
|
21
|
+
export declare const semanticLogger: import("@logtape/logtape").Logger;
|
|
22
|
+
/** Usages subsystem logger */
|
|
23
|
+
export declare const usagesLogger: import("@logtape/logtape").Logger;
|
|
24
|
+
/** AST search subsystem logger */
|
|
25
|
+
export declare const astLogger: import("@logtape/logtape").Logger;
|
|
26
|
+
/** @deprecated Use astLogger directly */
|
|
27
|
+
export declare function getAstLogger(): import("@logtape/logtape").Logger;
|
|
28
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACN,mBAAmB,EAEnB,MAAM,0BAA0B,CAAA;AAEjC,QAAA,MACC,UAAU,uBACE,MAAM,qCAElB,MAAM,UACN,OAAO,QAIN,CAAA;AAMF,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AAEnE,4BAA4B;AAC5B,eAAO,MAAM,UAAU,mCAA6B,CAAA;AAEpD,uCAAuC;AACvC,eAAO,MAAM,cAAc,mCAAiC,CAAA;AAE5D,8BAA8B;AAC9B,eAAO,MAAM,YAAY,mCAA+B,CAAA;AAExD,kCAAkC;AAClC,eAAO,MAAM,SAAS,mCAA4B,CAAA;AAMlD,yCAAyC;AACzC,wBAAgB,YAAY,sCAE3B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kit Plugin Logger
|
|
3
|
+
*
|
|
4
|
+
* JSONL logging with LogTape for observability and debugging.
|
|
5
|
+
* Uses @sidequest/core logging factory for consistent log location.
|
|
6
|
+
*
|
|
7
|
+
* Log location: ~/.claude/logs/kit.jsonl
|
|
8
|
+
*
|
|
9
|
+
* Logging Level Convention:
|
|
10
|
+
* - DEBUG: Detailed diagnostic info (file counts, cache hits, parameter echo)
|
|
11
|
+
* - INFO: Normal operation events (start/complete, results summary)
|
|
12
|
+
* - WARN: Degraded operation (fallbacks, skipped files, soft failures)
|
|
13
|
+
* - ERROR: Operation failures (exceptions, command failures, parse errors)
|
|
14
|
+
*/
|
|
15
|
+
import { createCorrelationId, createPluginLogger, } from '@side-quest/core/logging';
|
|
16
|
+
const { initLogger, rootLogger: logger, getSubsystemLogger, logDir, logFile, } = createPluginLogger({
|
|
17
|
+
name: 'kit',
|
|
18
|
+
subsystems: ['grep', 'semantic', 'usages', 'ast'],
|
|
19
|
+
});
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Exports
|
|
22
|
+
// ============================================================================
|
|
23
|
+
export { createCorrelationId, initLogger, logDir, logFile, logger };
|
|
24
|
+
/** Grep subsystem logger */
|
|
25
|
+
export const grepLogger = getSubsystemLogger('grep');
|
|
26
|
+
/** Semantic search subsystem logger */
|
|
27
|
+
export const semanticLogger = getSubsystemLogger('semantic');
|
|
28
|
+
/** Usages subsystem logger */
|
|
29
|
+
export const usagesLogger = getSubsystemLogger('usages');
|
|
30
|
+
/** AST search subsystem logger */
|
|
31
|
+
export const astLogger = getSubsystemLogger('ast');
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Legacy getter functions (for backwards compatibility)
|
|
34
|
+
// ============================================================================
|
|
35
|
+
/** @deprecated Use astLogger directly */
|
|
36
|
+
export function getAstLogger() {
|
|
37
|
+
return astLogger;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACN,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,0BAA0B,CAAA;AAEjC,MAAM,EACL,UAAU,EACV,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAClB,MAAM,EACN,OAAO,GACP,GAAG,kBAAkB,CAAC;IACtB,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC;CACjD,CAAC,CAAA;AAEF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AAEnE,4BAA4B;AAC5B,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;AAEpD,uCAAuC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;AAE5D,8BAA8B;AAC9B,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;AAExD,kCAAkC;AAClC,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;AAElD,+EAA+E;AAC/E,wDAAwD;AACxD,+EAA+E;AAE/E,yCAAyC;AACzC,MAAM,UAAU,YAAY;IAC3B,OAAO,SAAS,CAAA;AACjB,CAAC"}
|