codeprobe 0.1.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.
Files changed (38) hide show
  1. package/README.md +19 -0
  2. package/dist/cli.js +6 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/ab.js +6 -6
  5. package/dist/commands/ab.js.map +1 -1
  6. package/dist/commands/export.d.ts +12 -0
  7. package/dist/commands/export.d.ts.map +1 -0
  8. package/dist/commands/export.js +420 -0
  9. package/dist/commands/export.js.map +1 -0
  10. package/dist/commands/quality.d.ts +10 -0
  11. package/dist/commands/quality.d.ts.map +1 -0
  12. package/dist/commands/quality.js +86 -0
  13. package/dist/commands/quality.js.map +1 -0
  14. package/dist/commands/score.js +2 -2
  15. package/dist/commands/score.js.map +1 -1
  16. package/dist/commands/serve.d.ts +11 -0
  17. package/dist/commands/serve.d.ts.map +1 -0
  18. package/dist/commands/serve.js +259 -0
  19. package/dist/commands/serve.js.map +1 -0
  20. package/dist/core/__tests__/promptRunner.test.js +12 -12
  21. package/dist/core/__tests__/promptRunner.test.js.map +1 -1
  22. package/dist/core/contextQuality.d.ts +33 -0
  23. package/dist/core/contextQuality.d.ts.map +1 -0
  24. package/dist/core/contextQuality.js +399 -0
  25. package/dist/core/contextQuality.js.map +1 -0
  26. package/dist/core/datasetRunner.js +1 -1
  27. package/dist/core/datasetRunner.js.map +1 -1
  28. package/dist/core/promptRunner.d.ts +1 -1
  29. package/dist/core/promptRunner.d.ts.map +1 -1
  30. package/dist/core/promptRunner.js +53 -3
  31. package/dist/core/promptRunner.js.map +1 -1
  32. package/dist/core/scorer.d.ts +1 -1
  33. package/dist/core/scorer.d.ts.map +1 -1
  34. package/dist/core/scorer.js +4 -4
  35. package/dist/core/scorer.js.map +1 -1
  36. package/dist/types/prompt.d.ts +5 -0
  37. package/dist/types/prompt.d.ts.map +1 -1
  38. package/package.json +2 -2
@@ -0,0 +1,86 @@
1
+ /**
2
+ * `codeprobe quality [path]` — Score the context quality of a repository.
3
+ *
4
+ * Evaluates signal-to-noise ratio, file diversity, documentation coverage,
5
+ * redundancy, context window utilization, and AI tool readiness. All scoring
6
+ * is offline (no API calls required).
7
+ */
8
+ import { stat } from 'node:fs/promises';
9
+ import { resolvePath } from '../utils/paths.js';
10
+ import { setLogLevel } from '../utils/logger.js';
11
+ import { scoreContextQuality } from '../core/contextQuality.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Helpers
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * Render an ASCII bar for a percentage score.
17
+ */
18
+ function renderBar(score, width = 20) {
19
+ const filled = Math.round((score / 100) * width);
20
+ const empty = width - filled;
21
+ return '\u2588'.repeat(filled) + '\u2591'.repeat(empty);
22
+ }
23
+ // ---------------------------------------------------------------------------
24
+ // Command registration
25
+ // ---------------------------------------------------------------------------
26
+ export function registerQualityCommand(program) {
27
+ program
28
+ .command('quality [path]')
29
+ .description('Score context quality — signal-to-noise, diversity, docs, redundancy, AI readiness')
30
+ .option('--json', 'Output as JSON')
31
+ .action(async (pathArg, options) => {
32
+ if (options.json) {
33
+ setLogLevel('silent');
34
+ }
35
+ const chalk = (await import('chalk')).default;
36
+ const targetPath = resolvePath(pathArg ?? '.');
37
+ try {
38
+ await stat(targetPath);
39
+ }
40
+ catch {
41
+ console.error(chalk.red(`Error: path not found: ${targetPath}`));
42
+ process.exitCode = 1;
43
+ return;
44
+ }
45
+ const report = await scoreContextQuality(targetPath);
46
+ // JSON output
47
+ if (options.json) {
48
+ console.log(JSON.stringify(report, null, 2));
49
+ return;
50
+ }
51
+ // Pretty output
52
+ console.log('');
53
+ console.log(chalk.bold('Context Quality Score'));
54
+ console.log('');
55
+ const overallColor = report.overallScore >= 90
56
+ ? chalk.green
57
+ : report.overallScore >= 70
58
+ ? chalk.yellow
59
+ : chalk.red;
60
+ console.log(` Overall: ${overallColor(`${report.overallScore} (${report.grade})`)}`);
61
+ console.log('');
62
+ // Criterion bars
63
+ for (const c of report.criteria) {
64
+ const name = c.name.padEnd(20);
65
+ const bar = renderBar(c.score);
66
+ const pct = `${c.score}%`.padStart(4);
67
+ const weight = `(${c.weight.toFixed(2)}w)`;
68
+ const barColor = c.score >= 80
69
+ ? chalk.green
70
+ : c.score >= 60
71
+ ? chalk.yellow
72
+ : chalk.red;
73
+ console.log(` ${name} ${barColor(bar)} ${pct} ${chalk.dim(weight)}`);
74
+ }
75
+ // Recommendations
76
+ if (report.recommendations.length > 0) {
77
+ console.log('');
78
+ console.log(chalk.bold(' Recommendations:'));
79
+ for (const rec of report.recommendations) {
80
+ console.log(` * ${rec}`);
81
+ }
82
+ }
83
+ console.log('');
84
+ });
85
+ }
86
+ //# sourceMappingURL=quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/commands/quality.ts"],"names":[],"mappings":"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"}
@@ -74,7 +74,7 @@ export function registerScoreCommand(program) {
74
74
  const scoredResults = [];
75
75
  for (const test of tests) {
76
76
  const result = await runSingleTest(spec, test, runOpts);
77
- const scoreResult = scoreOutput(result.output, spec, test);
77
+ const scoreResult = await scoreOutput(result.output, spec, test);
78
78
  const scored = {
79
79
  testName: result.testName,
80
80
  promptName: result.promptName,
@@ -158,7 +158,7 @@ export function registerScoreCommand(program) {
158
158
  const fullSpec = await parsePromptSpec(specFiles.find((f) => f.includes(ps.name)) ?? specFiles[0]);
159
159
  const fullTest = fullSpec.tests?.find((t) => t.name === r.testName);
160
160
  const fullScore = fullTest
161
- ? scoreOutput(r.output, fullSpec, fullTest)
161
+ ? await scoreOutput(r.output, fullSpec, fullTest)
162
162
  : null;
163
163
  const fullCrit = fullScore?.criteria.find((fc) => fc.name === c.name);
164
164
  const details = fullCrit?.details ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"score.js","sourceRoot":"","sources":["../../src/commands/score.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"score.js","sourceRoot":"","sources":["../../src/commands/score.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `codeprobe serve` — Start as an MCP (Model Context Protocol) server.
3
+ *
4
+ * Exposes codeprobe analysis tools to AI assistants (Claude, Cursor, etc.)
5
+ * via the MCP stdio transport using raw JSON-RPC 2.0 over stdin/stdout.
6
+ *
7
+ * No external MCP SDK dependency required.
8
+ */
9
+ import { Command } from 'commander';
10
+ export declare function registerServeCommand(program: Command): void;
11
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6QpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB3D"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * `codeprobe serve` — Start as an MCP (Model Context Protocol) server.
3
+ *
4
+ * Exposes codeprobe analysis tools to AI assistants (Claude, Cursor, etc.)
5
+ * via the MCP stdio transport using raw JSON-RPC 2.0 over stdin/stdout.
6
+ *
7
+ * No external MCP SDK dependency required.
8
+ */
9
+ import { createInterface } from 'node:readline';
10
+ import { analyzeContext } from '../core/contextAnalyzer.js';
11
+ import { scanForClaudeAssets } from '../core/agentTracer.js';
12
+ import { estimateTokens } from '../tokenizers/claudeTokenizer.js';
13
+ import { lintDirectory } from '../core/promptLinter.js';
14
+ import { scanSecurity } from '../core/securityScanner.js';
15
+ import { getAllModels, estimateCost } from '../core/modelRegistry.js';
16
+ // ---------------------------------------------------------------------------
17
+ // MCP tool definitions
18
+ // ---------------------------------------------------------------------------
19
+ const TOOLS = [
20
+ {
21
+ name: 'analyze_context',
22
+ description: 'Analyze repository context — token counts, file breakdown, context window fit estimates',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {
26
+ path: {
27
+ type: 'string',
28
+ description: 'Path to analyze (default: current directory)',
29
+ },
30
+ },
31
+ },
32
+ },
33
+ {
34
+ name: 'scan_assets',
35
+ description: 'Scan for AI coding tool configurations — Claude, Cursor, Windsurf, Copilot, Aider, etc.',
36
+ inputSchema: {
37
+ type: 'object',
38
+ properties: {
39
+ path: {
40
+ type: 'string',
41
+ description: 'Path to scan',
42
+ },
43
+ },
44
+ },
45
+ },
46
+ {
47
+ name: 'estimate_tokens',
48
+ description: 'Estimate token count for a text string',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {
52
+ text: {
53
+ type: 'string',
54
+ description: 'Text to count tokens for',
55
+ },
56
+ },
57
+ required: ['text'],
58
+ },
59
+ },
60
+ {
61
+ name: 'lint_prompts',
62
+ description: 'Lint prompt spec files for quality issues',
63
+ inputSchema: {
64
+ type: 'object',
65
+ properties: {
66
+ path: {
67
+ type: 'string',
68
+ description: 'Path to lint',
69
+ },
70
+ },
71
+ },
72
+ },
73
+ {
74
+ name: 'security_scan',
75
+ description: 'Scan prompt files for injection vulnerabilities and leaked secrets',
76
+ inputSchema: {
77
+ type: 'object',
78
+ properties: {
79
+ path: {
80
+ type: 'string',
81
+ description: 'Path to scan',
82
+ },
83
+ },
84
+ },
85
+ },
86
+ {
87
+ name: 'list_models',
88
+ description: 'List all supported AI models with context windows and pricing',
89
+ inputSchema: {
90
+ type: 'object',
91
+ properties: {},
92
+ },
93
+ },
94
+ {
95
+ name: 'estimate_cost',
96
+ description: 'Estimate the cost of sending a repository as context to a model',
97
+ inputSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ path: {
101
+ type: 'string',
102
+ description: 'Path to analyze',
103
+ },
104
+ model: {
105
+ type: 'string',
106
+ description: 'Model ID (e.g., claude-sonnet-4-6)',
107
+ },
108
+ },
109
+ },
110
+ },
111
+ ];
112
+ // ---------------------------------------------------------------------------
113
+ // Request handler
114
+ // ---------------------------------------------------------------------------
115
+ async function handleRequest(req) {
116
+ // ---- MCP lifecycle: initialize ----
117
+ if (req.method === 'initialize') {
118
+ return {
119
+ jsonrpc: '2.0',
120
+ id: req.id,
121
+ result: {
122
+ protocolVersion: '2024-11-05',
123
+ capabilities: { tools: {} },
124
+ serverInfo: { name: 'codeprobe', version: '0.1.0' },
125
+ },
126
+ };
127
+ }
128
+ // ---- MCP lifecycle: notifications/initialized ----
129
+ if (req.method === 'notifications/initialized') {
130
+ return { jsonrpc: '2.0', id: req.id, result: {} };
131
+ }
132
+ // ---- tools/list ----
133
+ if (req.method === 'tools/list') {
134
+ return {
135
+ jsonrpc: '2.0',
136
+ id: req.id,
137
+ result: { tools: TOOLS },
138
+ };
139
+ }
140
+ // ---- tools/call ----
141
+ if (req.method === 'tools/call') {
142
+ const params = req.params;
143
+ const toolName = params.name;
144
+ const args = params.arguments ?? {};
145
+ const path = args.path ?? process.cwd();
146
+ try {
147
+ let result;
148
+ switch (toolName) {
149
+ case 'analyze_context': {
150
+ const analysis = await analyzeContext(path);
151
+ result = {
152
+ totalFiles: analysis.totalFiles,
153
+ estimatedTokens: analysis.estimatedTokens,
154
+ totalBytes: analysis.totalBytes,
155
+ extensionBreakdown: analysis.extensionBreakdown.slice(0, 10),
156
+ fitEstimates: analysis.fitEstimates,
157
+ largestFiles: analysis.largestFiles.slice(0, 10),
158
+ };
159
+ break;
160
+ }
161
+ case 'scan_assets': {
162
+ const assets = await scanForClaudeAssets(path);
163
+ result = assets;
164
+ break;
165
+ }
166
+ case 'estimate_tokens': {
167
+ const text = args.text;
168
+ result = { tokens: estimateTokens(text), characters: text.length };
169
+ break;
170
+ }
171
+ case 'lint_prompts': {
172
+ const warnings = await lintDirectory(path);
173
+ result = warnings;
174
+ break;
175
+ }
176
+ case 'security_scan': {
177
+ const findings = await scanSecurity(path);
178
+ result = findings;
179
+ break;
180
+ }
181
+ case 'list_models': {
182
+ result = getAllModels();
183
+ break;
184
+ }
185
+ case 'estimate_cost': {
186
+ const analysis = await analyzeContext(path);
187
+ const model = args.model ?? 'claude-sonnet-4-6';
188
+ const inputCost = estimateCost(model, analysis.estimatedTokens, 0);
189
+ const outputCost = estimateCost(model, 0, 1000);
190
+ result = {
191
+ model,
192
+ tokens: analysis.estimatedTokens,
193
+ inputCost,
194
+ outputCost1k: outputCost,
195
+ };
196
+ break;
197
+ }
198
+ default:
199
+ return {
200
+ jsonrpc: '2.0',
201
+ id: req.id,
202
+ error: {
203
+ code: -32601,
204
+ message: `Unknown tool: ${toolName}`,
205
+ },
206
+ };
207
+ }
208
+ return {
209
+ jsonrpc: '2.0',
210
+ id: req.id,
211
+ result: {
212
+ content: [
213
+ { type: 'text', text: JSON.stringify(result, null, 2) },
214
+ ],
215
+ },
216
+ };
217
+ }
218
+ catch (err) {
219
+ return {
220
+ jsonrpc: '2.0',
221
+ id: req.id,
222
+ error: {
223
+ code: -32000,
224
+ message: err instanceof Error ? err.message : String(err),
225
+ },
226
+ };
227
+ }
228
+ }
229
+ // ---- Unknown method ----
230
+ return {
231
+ jsonrpc: '2.0',
232
+ id: req.id,
233
+ error: { code: -32601, message: `Unknown method: ${req.method}` },
234
+ };
235
+ }
236
+ // ---------------------------------------------------------------------------
237
+ // Command registration
238
+ // ---------------------------------------------------------------------------
239
+ export function registerServeCommand(program) {
240
+ program
241
+ .command('serve')
242
+ .description('Start as MCP server — expose codeprobe tools to AI assistants')
243
+ .option('--stdio', 'Use stdio transport (default)', true)
244
+ .action(async () => {
245
+ // Read JSON-RPC messages from stdin, one per line, write responses to stdout
246
+ const rl = createInterface({ input: process.stdin });
247
+ rl.on('line', async (line) => {
248
+ try {
249
+ const request = JSON.parse(line);
250
+ const response = await handleRequest(request);
251
+ process.stdout.write(JSON.stringify(response) + '\n');
252
+ }
253
+ catch {
254
+ // Ignore malformed input lines
255
+ }
256
+ });
257
+ });
258
+ }
259
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
@@ -16,41 +16,41 @@ describe('parsePromptSpec', () => {
16
16
  });
17
17
  });
18
18
  describe('evaluateAssertions', () => {
19
- it('contains: passes when output includes the string', () => {
19
+ it('contains: passes when output includes the string', async () => {
20
20
  const expectations = { contains: ['hello'] };
21
- const results = evaluateAssertions('hello world', expectations);
21
+ const results = await evaluateAssertions('hello world', expectations);
22
22
  expect(results).toHaveLength(1);
23
23
  expect(results[0].passed).toBe(true);
24
24
  });
25
- it('contains: fails when output does not include the string', () => {
25
+ it('contains: fails when output does not include the string', async () => {
26
26
  const expectations = { contains: ['goodbye'] };
27
- const results = evaluateAssertions('hello world', expectations);
27
+ const results = await evaluateAssertions('hello world', expectations);
28
28
  expect(results).toHaveLength(1);
29
29
  expect(results[0].passed).toBe(false);
30
30
  });
31
- it('notContains: passes when output does not include the string', () => {
31
+ it('notContains: passes when output does not include the string', async () => {
32
32
  const expectations = { notContains: ['goodbye'] };
33
- const results = evaluateAssertions('hello world', expectations);
33
+ const results = await evaluateAssertions('hello world', expectations);
34
34
  expect(results).toHaveLength(1);
35
35
  expect(results[0].passed).toBe(true);
36
36
  });
37
- it('regex: passes when pattern matches (with m flag)', () => {
37
+ it('regex: passes when pattern matches (with m flag)', async () => {
38
38
  const expectations = { regex: ['^- '] };
39
39
  const output = '- bullet point one\n- bullet point two';
40
- const results = evaluateAssertions(output, expectations);
40
+ const results = await evaluateAssertions(output, expectations);
41
41
  expect(results).toHaveLength(1);
42
42
  expect(results[0].passed).toBe(true);
43
43
  });
44
- it('regex: fails when pattern does not match', () => {
44
+ it('regex: fails when pattern does not match', async () => {
45
45
  const expectations = { regex: ['^\\d{4}-\\d{2}-\\d{2}$'] };
46
46
  const output = 'no date here';
47
- const results = evaluateAssertions(output, expectations);
47
+ const results = await evaluateAssertions(output, expectations);
48
48
  expect(results).toHaveLength(1);
49
49
  expect(results[0].passed).toBe(false);
50
50
  });
51
- it('equals: passes on exact match (trimmed)', () => {
51
+ it('equals: passes on exact match (trimmed)', async () => {
52
52
  const expectations = { equals: 'exact match' };
53
- const results = evaluateAssertions(' exact match ', expectations);
53
+ const results = await evaluateAssertions(' exact match ', expectations);
54
54
  expect(results).toHaveLength(1);
55
55
  expect(results[0].passed).toBe(true);
56
56
  });
@@ -1 +1 @@
1
- {"version":3,"file":"promptRunner.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/promptRunner.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promptRunner.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/promptRunner.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Context quality scoring — evaluates a repository's readiness for AI tools.
3
+ *
4
+ * All scoring is offline (no API calls). Produces a 0-100 score with an A-F
5
+ * grade across six criteria: signal-to-noise, file diversity, documentation
6
+ * coverage, redundancy, context window utilization, and AI tool readiness.
7
+ */
8
+ import type { CodeprobeConfig } from '../types/config.js';
9
+ export interface ContextQualityCriterion {
10
+ name: string;
11
+ score: number;
12
+ weight: number;
13
+ details: string;
14
+ }
15
+ export interface ContextQualityReport {
16
+ overallScore: number;
17
+ grade: string;
18
+ criteria: ContextQualityCriterion[];
19
+ recommendations: string[];
20
+ }
21
+ /**
22
+ * Score the context quality of a repository at the given path.
23
+ *
24
+ * Criteria and weights:
25
+ * 1. Signal-to-noise ratio (0.25)
26
+ * 2. File diversity (0.15)
27
+ * 3. Documentation coverage (0.15)
28
+ * 4. Redundancy (0.15)
29
+ * 5. Window utilization (0.15)
30
+ * 6. AI tool readiness (0.15)
31
+ */
32
+ export declare function scoreContextQuality(rootPath: string, _config?: CodeprobeConfig): Promise<ContextQualityReport>;
33
+ //# sourceMappingURL=contextQuality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextQuality.d.ts","sourceRoot":"","sources":["../../src/core/contextQuality.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAM1D,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAiZD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAiC/B"}