@milo4jo/contextkit 0.5.0 → 0.5.6

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.
Files changed (59) hide show
  1. package/README.md +59 -1
  2. package/dist/commands/cache.d.ts +3 -0
  3. package/dist/commands/cache.d.ts.map +1 -0
  4. package/dist/commands/cache.js +50 -0
  5. package/dist/commands/cache.js.map +1 -0
  6. package/dist/commands/doctor.d.ts +3 -0
  7. package/dist/commands/doctor.d.ts.map +1 -0
  8. package/dist/commands/doctor.js +254 -0
  9. package/dist/commands/doctor.js.map +1 -0
  10. package/dist/commands/graph.d.ts +10 -0
  11. package/dist/commands/graph.d.ts.map +1 -0
  12. package/dist/commands/graph.js +289 -0
  13. package/dist/commands/graph.js.map +1 -0
  14. package/dist/commands/select.d.ts.map +1 -1
  15. package/dist/commands/select.js +11 -0
  16. package/dist/commands/select.js.map +1 -1
  17. package/dist/commands/symbol.d.ts +9 -0
  18. package/dist/commands/symbol.d.ts.map +1 -0
  19. package/dist/commands/symbol.js +420 -0
  20. package/dist/commands/symbol.js.map +1 -0
  21. package/dist/db/index.d.ts +48 -0
  22. package/dist/db/index.d.ts.map +1 -1
  23. package/dist/db/index.js +99 -0
  24. package/dist/db/index.js.map +1 -1
  25. package/dist/index.js +12 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/indexer/chunker.d.ts +25 -3
  28. package/dist/indexer/chunker.d.ts.map +1 -1
  29. package/dist/indexer/chunker.js +344 -4
  30. package/dist/indexer/chunker.js.map +1 -1
  31. package/dist/indexer/index.d.ts.map +1 -1
  32. package/dist/indexer/index.js +3 -2
  33. package/dist/indexer/index.js.map +1 -1
  34. package/dist/mcp-server.js +0 -0
  35. package/dist/parsers/index.d.ts +65 -0
  36. package/dist/parsers/index.d.ts.map +1 -0
  37. package/dist/parsers/index.js +130 -0
  38. package/dist/parsers/index.js.map +1 -0
  39. package/dist/parsers/markdown.d.ts +29 -0
  40. package/dist/parsers/markdown.d.ts.map +1 -0
  41. package/dist/parsers/markdown.js +142 -0
  42. package/dist/parsers/markdown.js.map +1 -0
  43. package/dist/parsers/tree-sitter.d.ts +32 -0
  44. package/dist/parsers/tree-sitter.d.ts.map +1 -0
  45. package/dist/parsers/tree-sitter.js +356 -0
  46. package/dist/parsers/tree-sitter.js.map +1 -0
  47. package/dist/parsers/typescript.d.ts +43 -0
  48. package/dist/parsers/typescript.d.ts.map +1 -0
  49. package/dist/parsers/typescript.js +306 -0
  50. package/dist/parsers/typescript.js.map +1 -0
  51. package/dist/selector/formatter.d.ts +4 -1
  52. package/dist/selector/formatter.d.ts.map +1 -1
  53. package/dist/selector/formatter.js +214 -6
  54. package/dist/selector/formatter.js.map +1 -1
  55. package/dist/selector/index.d.ts +8 -0
  56. package/dist/selector/index.d.ts.map +1 -1
  57. package/dist/selector/index.js +37 -2
  58. package/dist/selector/index.js.map +1 -1
  59. package/package.json +6 -1
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![npm downloads](https://img.shields.io/npm/dw/@milo4jo/contextkit)](https://www.npmjs.com/package/@milo4jo/contextkit)
8
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
9
9
 
10
- **šŸ†• v0.5:** Import-aware scoring — files that import your selected code get boosted automatically!
10
+ **šŸ†• v0.5.5:** Symbol search & call graph! Find code by name, trace dependencies across your codebase.
11
11
 
12
12
  ---
13
13
 
@@ -185,10 +185,57 @@ contextkit select "query" --format plain # Plain text, no formatting
185
185
  # Include imported files (follows dependency graph)
186
186
  contextkit select "query" --include-imports
187
187
 
188
+ # Repo map mode (signatures only, saves tokens)
189
+ contextkit select "query" --mode map
190
+
188
191
  # Pipe to clipboard (macOS)
189
192
  contextkit select "query" --format plain | pbcopy
190
193
  ```
191
194
 
195
+ ### `contextkit symbol`
196
+
197
+ Search for code by symbol name (faster than semantic search when you know the name).
198
+
199
+ ```bash
200
+ # Find a function or class by name
201
+ contextkit symbol "UserService"
202
+
203
+ # Exact match only
204
+ contextkit symbol "handleAuth" --exact
205
+
206
+ # Limit results
207
+ contextkit symbol "parse" --limit 10
208
+ ```
209
+
210
+ **Output:**
211
+ ```
212
+ šŸ“„ src/services/user.ts
213
+ │ ā—† UserService (line 12)
214
+ │ export class UserService
215
+ ```
216
+
217
+ ### `contextkit graph`
218
+
219
+ Show call relationships for a function.
220
+
221
+ ```bash
222
+ contextkit graph "handlePayment"
223
+ ```
224
+
225
+ **Output:**
226
+ ```
227
+ šŸŽÆ Call graph for: handlePayment
228
+
229
+ šŸ“„ Callers (2):
230
+ ← processOrder (src/orders/service.ts:45)
231
+ ← checkout (src/cart/checkout.ts:89)
232
+
233
+ šŸ“¤ Calls (3):
234
+ → validateCard (src/payments/validation.ts)
235
+ → chargeCard (src/payments/stripe.ts)
236
+ → sendReceipt (src/notifications/email.ts)
237
+ ```
238
+
192
239
  ---
193
240
 
194
241
  ## šŸ¤– MCP Server (Claude Desktop Integration)
@@ -294,6 +341,17 @@ settings:
294
341
 
295
342
  ---
296
343
 
344
+ ## šŸ“š Documentation
345
+
346
+ - **[Getting Started Guide](./docs/getting-started.md)** — Detailed walkthrough
347
+ - **[MCP Setup Guide](./docs/mcp-setup.md)** — Claude Desktop integration
348
+ - **[Examples](./examples/README.md)** — Real-world use cases
349
+ - [Bug Investigation](./examples/bug-investigation.md)
350
+ - [Scripting & Automation](./examples/scripting.md)
351
+ - **[Architecture](./docs/ARCHITECTURE.md)** — How ContextKit works
352
+
353
+ ---
354
+
297
355
  ## Technical Details
298
356
 
299
357
  ### How Selection Works
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const cacheCommand: Command;
3
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SACW,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { Command } from 'commander';
2
+ import { ensureInitialized } from '../config/index.js';
3
+ import { openDatabase, clearCache, getCacheStats } from '../db/index.js';
4
+ import { writeData, writeMessage, writeSuccess } from '../utils/streams.js';
5
+ import { getGlobalOpts } from '../utils/cli.js';
6
+ export const cacheCommand = new Command('cache')
7
+ .description('Manage query cache');
8
+ cacheCommand
9
+ .command('clear')
10
+ .description('Clear all cached query results')
11
+ .action(() => {
12
+ ensureInitialized();
13
+ const db = openDatabase();
14
+ try {
15
+ const cleared = clearCache(db);
16
+ writeSuccess(`Cleared ${cleared} cached ${cleared === 1 ? 'entry' : 'entries'}`);
17
+ }
18
+ finally {
19
+ db.close();
20
+ }
21
+ });
22
+ cacheCommand
23
+ .command('stats')
24
+ .description('Show cache statistics')
25
+ .action(() => {
26
+ ensureInitialized();
27
+ const opts = getGlobalOpts(cacheCommand);
28
+ const db = openDatabase();
29
+ try {
30
+ const stats = getCacheStats(db);
31
+ if (opts.json) {
32
+ writeData(JSON.stringify(stats, null, 2));
33
+ }
34
+ else {
35
+ writeMessage('');
36
+ writeMessage(`šŸ“Š Cache Statistics`);
37
+ writeMessage(` Entries: ${stats.entryCount}`);
38
+ writeMessage(` Total hits: ${stats.totalHits}`);
39
+ if (stats.oldestEntry) {
40
+ writeMessage(` Oldest: ${stats.oldestEntry}`);
41
+ writeMessage(` Newest: ${stats.newestEntry}`);
42
+ }
43
+ writeMessage('');
44
+ }
45
+ }
46
+ finally {
47
+ db.close();
48
+ }
49
+ });
50
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,oBAAoB,CAAC,CAAC;AAErC,YAAY;KACT,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,GAAG,EAAE;IACX,iBAAiB,EAAE,CAAC;IAEpB,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,YAAY,CAAC,WAAW,OAAO,WAAW,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACnF,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,YAAY;KACT,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,GAAG,EAAE;IACX,iBAAiB,EAAE,CAAC;IAEpB,MAAM,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAE1B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,YAAY,CAAC,qBAAqB,CAAC,CAAC;YACpC,YAAY,CAAC,mBAAmB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YACpD,YAAY,CAAC,mBAAmB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACnD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,YAAY,CAAC,mBAAmB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBACrD,YAAY,CAAC,mBAAmB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,YAAY,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const doctorCommand: Command;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmSpC,eAAO,MAAM,aAAa,SAGN,CAAC"}
@@ -0,0 +1,254 @@
1
+ import { Command } from 'commander';
2
+ import { existsSync, statSync } from 'fs';
3
+ import { join } from 'path';
4
+ import chalk from 'chalk';
5
+ import { loadConfig, getDbPath } from '../config/index.js';
6
+ import { openDatabase } from '../db/index.js';
7
+ import { writeMessage } from '../utils/streams.js';
8
+ const CHECK_OK = chalk.green('āœ“');
9
+ const CHECK_WARN = chalk.yellow('⚠');
10
+ const CHECK_ERROR = chalk.red('āœ—');
11
+ function formatResult(result) {
12
+ const icon = result.status === 'ok' ? CHECK_OK : result.status === 'warn' ? CHECK_WARN : CHECK_ERROR;
13
+ let output = `${icon} ${result.name}: ${result.message}`;
14
+ if (result.detail) {
15
+ output += chalk.dim(`\n ${result.detail}`);
16
+ }
17
+ return output;
18
+ }
19
+ async function checkNodeVersion() {
20
+ const version = process.version;
21
+ const major = parseInt(version.slice(1).split('.')[0], 10);
22
+ if (major >= 18) {
23
+ return {
24
+ name: 'Node.js version',
25
+ status: 'ok',
26
+ message: version,
27
+ };
28
+ }
29
+ return {
30
+ name: 'Node.js version',
31
+ status: 'error',
32
+ message: `${version} (requires >= 18)`,
33
+ detail: 'Upgrade Node.js: https://nodejs.org/',
34
+ };
35
+ }
36
+ async function checkConfig() {
37
+ try {
38
+ const config = await loadConfig();
39
+ const sourceCount = config.sources?.length || 0;
40
+ if (sourceCount === 0) {
41
+ return {
42
+ name: 'Configuration',
43
+ status: 'warn',
44
+ message: 'No sources configured',
45
+ detail: 'Run: contextkit source add ./src',
46
+ };
47
+ }
48
+ return {
49
+ name: 'Configuration',
50
+ status: 'ok',
51
+ message: `${sourceCount} source(s) configured`,
52
+ };
53
+ }
54
+ catch {
55
+ return {
56
+ name: 'Configuration',
57
+ status: 'error',
58
+ message: 'Not initialized',
59
+ detail: 'Run: contextkit init',
60
+ };
61
+ }
62
+ }
63
+ async function checkDatabase() {
64
+ try {
65
+ const dbPath = getDbPath();
66
+ if (!existsSync(dbPath)) {
67
+ return {
68
+ name: 'Index database',
69
+ status: 'warn',
70
+ message: 'Not indexed yet',
71
+ detail: 'Run: contextkit index',
72
+ };
73
+ }
74
+ const stats = statSync(dbPath);
75
+ const sizeMB = (stats.size / 1024 / 1024).toFixed(2);
76
+ const db = openDatabase();
77
+ const chunks = db.prepare('SELECT COUNT(*) as count FROM chunks').get();
78
+ const files = db.prepare('SELECT COUNT(*) as count FROM files').get();
79
+ db.close();
80
+ return {
81
+ name: 'Index database',
82
+ status: 'ok',
83
+ message: `${chunks.count} chunks, ${files.count} files (${sizeMB} MB)`,
84
+ };
85
+ }
86
+ catch (error) {
87
+ return {
88
+ name: 'Index database',
89
+ status: 'error',
90
+ message: 'Database error',
91
+ detail: error instanceof Error ? error.message : 'Unknown error',
92
+ };
93
+ }
94
+ }
95
+ async function checkEmbeddings() {
96
+ try {
97
+ const dbPath = getDbPath();
98
+ if (!existsSync(dbPath)) {
99
+ return {
100
+ name: 'Embeddings',
101
+ status: 'warn',
102
+ message: 'No index yet',
103
+ };
104
+ }
105
+ const db = openDatabase();
106
+ const result = db.prepare('SELECT COUNT(*) as count FROM chunks WHERE embedding IS NOT NULL').get();
107
+ const total = db.prepare('SELECT COUNT(*) as count FROM chunks').get();
108
+ db.close();
109
+ if (result.count === 0) {
110
+ return {
111
+ name: 'Embeddings',
112
+ status: 'warn',
113
+ message: 'No embeddings generated',
114
+ detail: 'Run: contextkit index --full',
115
+ };
116
+ }
117
+ const coverage = ((result.count / total.count) * 100).toFixed(0);
118
+ return {
119
+ name: 'Embeddings',
120
+ status: 'ok',
121
+ message: `${result.count}/${total.count} chunks (${coverage}%)`,
122
+ };
123
+ }
124
+ catch (error) {
125
+ return {
126
+ name: 'Embeddings',
127
+ status: 'error',
128
+ message: 'Error checking embeddings',
129
+ detail: error instanceof Error ? error.message : 'Unknown error',
130
+ };
131
+ }
132
+ }
133
+ async function checkDiskSpace() {
134
+ try {
135
+ const dbPath = getDbPath();
136
+ const dir = join(dbPath, '..');
137
+ if (!existsSync(dir)) {
138
+ return {
139
+ name: 'Disk space',
140
+ status: 'ok',
141
+ message: 'Not yet initialized',
142
+ };
143
+ }
144
+ // Simple check - just report db size
145
+ if (existsSync(dbPath)) {
146
+ const stats = statSync(dbPath);
147
+ const sizeMB = stats.size / 1024 / 1024;
148
+ if (sizeMB > 500) {
149
+ return {
150
+ name: 'Disk space',
151
+ status: 'warn',
152
+ message: `Database is ${sizeMB.toFixed(0)} MB`,
153
+ detail: 'Consider: contextkit cache clear',
154
+ };
155
+ }
156
+ }
157
+ return {
158
+ name: 'Disk space',
159
+ status: 'ok',
160
+ message: 'OK',
161
+ };
162
+ }
163
+ catch {
164
+ return {
165
+ name: 'Disk space',
166
+ status: 'ok',
167
+ message: 'Could not check',
168
+ };
169
+ }
170
+ }
171
+ async function checkQueryCache() {
172
+ try {
173
+ const dbPath = getDbPath();
174
+ if (!existsSync(dbPath)) {
175
+ return {
176
+ name: 'Query cache',
177
+ status: 'ok',
178
+ message: 'No cache yet',
179
+ };
180
+ }
181
+ const db = openDatabase();
182
+ // Check if query_cache table exists
183
+ const tableExists = db
184
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='query_cache'")
185
+ .get();
186
+ if (!tableExists) {
187
+ db.close();
188
+ return {
189
+ name: 'Query cache',
190
+ status: 'ok',
191
+ message: 'Not enabled',
192
+ };
193
+ }
194
+ const result = db.prepare('SELECT COUNT(*) as count FROM query_cache').get();
195
+ db.close();
196
+ return {
197
+ name: 'Query cache',
198
+ status: 'ok',
199
+ message: `${result.count} cached queries`,
200
+ };
201
+ }
202
+ catch {
203
+ return {
204
+ name: 'Query cache',
205
+ status: 'ok',
206
+ message: 'Could not check',
207
+ };
208
+ }
209
+ }
210
+ async function runDoctor(options) {
211
+ const checks = [];
212
+ writeMessage(chalk.bold('\n🩺 ContextKit Doctor\n'));
213
+ writeMessage('Running diagnostics...\n');
214
+ // Run all checks
215
+ checks.push(await checkNodeVersion());
216
+ checks.push(await checkConfig());
217
+ checks.push(await checkDatabase());
218
+ checks.push(await checkEmbeddings());
219
+ checks.push(await checkQueryCache());
220
+ checks.push(await checkDiskSpace());
221
+ if (options.json) {
222
+ console.log(JSON.stringify(checks, null, 2));
223
+ return;
224
+ }
225
+ // Output results
226
+ for (const result of checks) {
227
+ writeMessage(formatResult(result));
228
+ }
229
+ // Summary
230
+ const errors = checks.filter((c) => c.status === 'error').length;
231
+ const warnings = checks.filter((c) => c.status === 'warn').length;
232
+ writeMessage('');
233
+ if (errors > 0) {
234
+ writeMessage(chalk.red(`\n${errors} error(s) found. Fix these issues to use ContextKit.`));
235
+ process.exit(1);
236
+ }
237
+ else if (warnings > 0) {
238
+ writeMessage(chalk.yellow(`\n${warnings} warning(s). ContextKit will work but may be limited.`));
239
+ }
240
+ else {
241
+ writeMessage(chalk.green('\nāœ“ All checks passed! ContextKit is ready to use.'));
242
+ }
243
+ // Quick tips
244
+ writeMessage(chalk.dim('\nQuick commands:'));
245
+ writeMessage(chalk.dim(' contextkit init # Initialize project'));
246
+ writeMessage(chalk.dim(' contextkit source add . # Add sources'));
247
+ writeMessage(chalk.dim(' contextkit index # Build index'));
248
+ writeMessage(chalk.dim(' contextkit select "query" # Find context\n'));
249
+ }
250
+ export const doctorCommand = new Command('doctor')
251
+ .description('Diagnose ContextKit setup and configuration')
252
+ .option('--json', 'Output as JSON')
253
+ .action(runDoctor);
254
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Call Graph Command
3
+ *
4
+ * Analyze function call relationships:
5
+ * - What functions call a given function (callers)
6
+ * - What functions a given function calls (callees)
7
+ */
8
+ import { Command } from 'commander';
9
+ export declare const graphCommand: Command;
10
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsUpC,eAAO,MAAM,YAAY,SA4BrB,CAAC"}