code-auditor-mcp 1.0.1 → 1.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/README.md +41 -0
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +3 -0
- package/dist/api/index.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +229 -22
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDb.d.ts +150 -0
- package/dist/codeIndexDb.d.ts.map +1 -0
- package/dist/codeIndexDb.js +847 -0
- package/dist/codeIndexDb.js.map +1 -0
- package/dist/codeIndexService.d.ts +66 -0
- package/dist/codeIndexService.d.ts.map +1 -0
- package/dist/codeIndexService.js +201 -0
- package/dist/codeIndexService.js.map +1 -0
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +17 -1
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +9 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +9 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -0
- package/dist/functionScanner.d.ts +30 -0
- package/dist/functionScanner.d.ts.map +1 -0
- package/dist/functionScanner.js +264 -0
- package/dist/functionScanner.js.map +1 -0
- package/dist/generators/AWSQConfigGenerator.d.ts +8 -0
- package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -0
- package/dist/generators/AWSQConfigGenerator.js +33 -0
- package/dist/generators/AWSQConfigGenerator.js.map +1 -0
- package/dist/generators/AiderConfigGenerator.d.ts +8 -0
- package/dist/generators/AiderConfigGenerator.d.ts.map +1 -0
- package/dist/generators/AiderConfigGenerator.js +23 -0
- package/dist/generators/AiderConfigGenerator.js.map +1 -0
- package/dist/generators/BaseConfigGenerator.d.ts +51 -0
- package/dist/generators/BaseConfigGenerator.d.ts.map +1 -0
- package/dist/generators/BaseConfigGenerator.js +67 -0
- package/dist/generators/BaseConfigGenerator.js.map +1 -0
- package/dist/generators/ClaudeConfigGenerator.d.ts +14 -0
- package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -0
- package/dist/generators/ClaudeConfigGenerator.js +70 -0
- package/dist/generators/ClaudeConfigGenerator.js.map +1 -0
- package/dist/generators/ClineConfigGenerator.d.ts +9 -0
- package/dist/generators/ClineConfigGenerator.d.ts.map +1 -0
- package/dist/generators/ClineConfigGenerator.js +26 -0
- package/dist/generators/ClineConfigGenerator.js.map +1 -0
- package/dist/generators/CodeiumConfigGenerator.d.ts +8 -0
- package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -0
- package/dist/generators/CodeiumConfigGenerator.js +30 -0
- package/dist/generators/CodeiumConfigGenerator.js.map +1 -0
- package/dist/generators/ConfigGeneratorFactory.d.ts +35 -0
- package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -0
- package/dist/generators/ConfigGeneratorFactory.js +77 -0
- package/dist/generators/ConfigGeneratorFactory.js.map +1 -0
- package/dist/generators/ContinueConfigGenerator.d.ts +12 -0
- package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -0
- package/dist/generators/ContinueConfigGenerator.js +99 -0
- package/dist/generators/ContinueConfigGenerator.js.map +1 -0
- package/dist/generators/CopilotConfigGenerator.d.ts +12 -0
- package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -0
- package/dist/generators/CopilotConfigGenerator.js +77 -0
- package/dist/generators/CopilotConfigGenerator.js.map +1 -0
- package/dist/generators/CursorConfigGenerator.d.ts +12 -0
- package/dist/generators/CursorConfigGenerator.d.ts.map +1 -0
- package/dist/generators/CursorConfigGenerator.js +80 -0
- package/dist/generators/CursorConfigGenerator.js.map +1 -0
- package/dist/generators/JetBrainsConfigGenerator.d.ts +8 -0
- package/dist/generators/JetBrainsConfigGenerator.d.ts.map +1 -0
- package/dist/generators/JetBrainsConfigGenerator.js +36 -0
- package/dist/generators/JetBrainsConfigGenerator.js.map +1 -0
- package/dist/generators/VSCodeConfigGenerator.d.ts +8 -0
- package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -0
- package/dist/generators/VSCodeConfigGenerator.js +29 -0
- package/dist/generators/VSCodeConfigGenerator.js.map +1 -0
- package/dist/generators/index.d.ts +13 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +14 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/mcp.js +483 -2
- package/dist/mcp.js.map +1 -1
- package/dist/search/QueryParser.d.ts +60 -0
- package/dist/search/QueryParser.d.ts.map +1 -0
- package/dist/search/QueryParser.js +330 -0
- package/dist/search/QueryParser.js.map +1 -0
- package/dist/search/index.d.ts +7 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +6 -0
- package/dist/search/index.js.map +1 -0
- package/dist/test-multi-strategy-search.d.ts +3 -0
- package/dist/test-multi-strategy-search.d.ts.map +1 -0
- package/dist/test-multi-strategy-search.js +170 -0
- package/dist/test-multi-strategy-search.js.map +1 -0
- package/dist/types.d.ts +136 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/InteractivePrompts.d.ts +37 -0
- package/dist/ui/InteractivePrompts.d.ts.map +1 -0
- package/dist/ui/InteractivePrompts.js +147 -0
- package/dist/ui/InteractivePrompts.js.map +1 -0
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/utils/jsDocParser.d.ts +84 -0
- package/dist/utils/jsDocParser.d.ts.map +1 -0
- package/dist/utils/jsDocParser.js +366 -0
- package/dist/utils/jsDocParser.js.map +1 -0
- package/package.json +31 -12
package/README.md
CHANGED
|
@@ -9,6 +9,10 @@ A comprehensive TypeScript/JavaScript code quality audit tool that analyzes your
|
|
|
9
9
|
- **Security Pattern Analysis** - Verify authentication, authorization, and rate limiting implementations
|
|
10
10
|
- **Component Architecture Review** - Analyze component structure, complexity, and best practices
|
|
11
11
|
- **Data Access Patterns** - Check for SQL injection risks, performance issues, and security patterns
|
|
12
|
+
- **Code Function Indexing** - Index and search functions across your codebase with intelligent tokenization
|
|
13
|
+
- **AI Tool Configuration** - Auto-generate configurations for 10+ AI coding assistants
|
|
14
|
+
- **Advanced Search** - Natural language search with synonym expansion and camelCase support
|
|
15
|
+
- **Index Maintenance** - Bulk cleanup and deep synchronization tools for accurate indexing
|
|
12
16
|
- **Multiple Output Formats** - Generate HTML, JSON, or CSV reports
|
|
13
17
|
- **Highly Configurable** - Customize thresholds, patterns, and analysis rules
|
|
14
18
|
- **Framework Support** - Built-in support for React, Vue, Angular, Svelte, and Node.js
|
|
@@ -357,21 +361,58 @@ If you prefer to configure Claude Desktop manually:
|
|
|
357
361
|
|
|
358
362
|
### Available MCP Tools
|
|
359
363
|
|
|
364
|
+
#### Code Analysis Tools
|
|
360
365
|
- **audit_run** - Run a comprehensive code audit
|
|
361
366
|
- **audit_analyze_file** - Analyze a specific file for issues
|
|
362
367
|
- **audit_check_health** - Get a quick health score for your codebase
|
|
363
368
|
- **audit_list_analyzers** - List all available analyzers and their capabilities
|
|
364
369
|
|
|
370
|
+
#### Code Index Tools
|
|
371
|
+
- **index_functions** - Index functions from TypeScript/JavaScript files
|
|
372
|
+
- **search_functions** - Search indexed functions with natural language queries
|
|
373
|
+
- **find_definition** - Find the exact definition of a specific function
|
|
374
|
+
- **register_functions** - Manually register functions with metadata
|
|
375
|
+
- **get_index_stats** - Get statistics about the code index
|
|
376
|
+
- **clear_index** - Clear all indexed functions
|
|
377
|
+
|
|
378
|
+
#### AI Configuration Tools
|
|
379
|
+
- **generate_ai_configs** - Generate configs for AI coding assistants (Cursor, Continue, Copilot, etc.)
|
|
380
|
+
- **list_ai_tools** - List all supported AI tools
|
|
381
|
+
- **get_ai_tool_info** - Get detailed info about a specific AI tool
|
|
382
|
+
- **validate_ai_config** - Validate an AI tool configuration
|
|
383
|
+
|
|
384
|
+
#### Maintenance Tools
|
|
385
|
+
- **bulk_cleanup** - Remove index entries for deleted files
|
|
386
|
+
- **deep_sync** - Deep synchronize all indexed files
|
|
387
|
+
|
|
365
388
|
### Usage Examples with Claude
|
|
366
389
|
|
|
367
390
|
```
|
|
391
|
+
# Code Analysis
|
|
368
392
|
"Run a code audit on my project and show me the critical issues"
|
|
369
393
|
"Check the health score of the src directory"
|
|
370
394
|
"Analyze my code for SOLID principle violations"
|
|
371
395
|
"Find security vulnerabilities in my authentication code"
|
|
372
396
|
"Show me all code duplication in the components folder"
|
|
397
|
+
|
|
398
|
+
# Code Search & Discovery
|
|
399
|
+
"Search for functions that validate email addresses"
|
|
400
|
+
"Find all user authentication functions"
|
|
401
|
+
"Show me any existing data table components"
|
|
402
|
+
"Search for functions that send notifications"
|
|
403
|
+
|
|
404
|
+
# AI Tool Configuration
|
|
405
|
+
"Generate AI configurations for Cursor and Claude"
|
|
406
|
+
"List all supported AI coding tools"
|
|
407
|
+
"Set up my AI tools to use the code index"
|
|
408
|
+
|
|
409
|
+
# Maintenance
|
|
410
|
+
"Clean up stale entries in the code index"
|
|
411
|
+
"Sync all indexed files to update function signatures"
|
|
373
412
|
```
|
|
374
413
|
|
|
414
|
+
See [TOOLS-DOCUMENTATION.md](TOOLS-DOCUMENTATION.md) for comprehensive documentation on all MCP tools.
|
|
415
|
+
|
|
375
416
|
## Contributing
|
|
376
417
|
|
|
377
418
|
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,mDAAmD"}
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
|
@@ -1,28 +1,43 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Code Auditor CLI
|
|
3
|
+
* Code Auditor CLI - Enhanced with AI Tool Integration
|
|
4
4
|
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import chalk from 'chalk';
|
|
5
7
|
import { createAuditRunner } from './auditRunner.js';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
8
|
+
import { readFileSync } from 'fs';
|
|
9
|
+
import { promises as fs } from 'fs';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { dirname, join, resolve } from 'path';
|
|
12
|
+
import { ConfigGeneratorFactory } from './generators/ConfigGeneratorFactory.js';
|
|
13
|
+
import { InteractivePrompts } from './ui/InteractivePrompts.js';
|
|
14
|
+
import { DEFAULT_SERVER_URL, DEFAULT_PORT } from './constants.js';
|
|
15
|
+
// Get package.json for version info
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
const packageJson = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
19
|
+
const program = new Command();
|
|
20
|
+
// Configure the main program
|
|
21
|
+
program
|
|
22
|
+
.name('code-auditor')
|
|
23
|
+
.description('TypeScript/JavaScript code quality auditor with AI tool integration')
|
|
24
|
+
.version(packageJson.version);
|
|
25
|
+
// Legacy audit command (default behavior)
|
|
26
|
+
program
|
|
27
|
+
.command('audit', { isDefault: true })
|
|
28
|
+
.description('Run code quality audit (default command)')
|
|
29
|
+
.option('-p, --path <path>', 'Path to audit', process.cwd())
|
|
30
|
+
.option('-c, --config <config>', 'Configuration name')
|
|
31
|
+
.option('-o, --output <dir>', 'Output directory for reports')
|
|
32
|
+
.action(async (options) => {
|
|
33
|
+
console.log(chalk.blue('🔍 Code Quality Audit Tool'));
|
|
34
|
+
console.log(chalk.gray('══════════════════════════════════════════════════'));
|
|
24
35
|
try {
|
|
25
|
-
const runner = createAuditRunner(
|
|
36
|
+
const runner = createAuditRunner({
|
|
37
|
+
projectRoot: options.path,
|
|
38
|
+
configName: options.config,
|
|
39
|
+
outputDirectory: options.output
|
|
40
|
+
});
|
|
26
41
|
const result = await runner.run();
|
|
27
42
|
console.log(`\nFound ${result.summary.totalViolations} violations`);
|
|
28
43
|
console.log(`Critical: ${result.summary.criticalIssues}`);
|
|
@@ -30,9 +45,201 @@ Options:
|
|
|
30
45
|
console.log(`Suggestions: ${result.summary.suggestions}`);
|
|
31
46
|
}
|
|
32
47
|
catch (error) {
|
|
33
|
-
console.error('Error:', error);
|
|
48
|
+
console.error(chalk.red('Error:'), error);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// Generate configuration command
|
|
53
|
+
program
|
|
54
|
+
.command('generate-config')
|
|
55
|
+
.alias('gen')
|
|
56
|
+
.description('Generate configuration for AI coding assistants')
|
|
57
|
+
.option('-t, --tool <tool>', 'Specific tool (cursor, continue, copilot, awsq, codeium, claude, all)')
|
|
58
|
+
.option('-o, --output <dir>', 'Output directory', '.')
|
|
59
|
+
.option('-s, --server-url <url>', 'MCP server URL', DEFAULT_SERVER_URL)
|
|
60
|
+
.option('-i, --interactive', 'Interactive mode for tool selection')
|
|
61
|
+
.option('-f, --force', 'Force overwrite existing files without confirmation')
|
|
62
|
+
.option('-y, --yes', 'Skip all confirmation prompts (same as --force)')
|
|
63
|
+
.action(async (options) => {
|
|
64
|
+
console.log(chalk.blue('🛠️ AI Tool Configuration Generator'));
|
|
65
|
+
console.log(chalk.gray('════════════════════════════════════════════════════'));
|
|
66
|
+
try {
|
|
67
|
+
await generateConfigurations(options);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error(chalk.red('Error:'), error);
|
|
34
71
|
process.exit(1);
|
|
35
72
|
}
|
|
73
|
+
});
|
|
74
|
+
// Start server command (placeholder - will be implemented later)
|
|
75
|
+
program
|
|
76
|
+
.command('start')
|
|
77
|
+
.description('Start the MCP server')
|
|
78
|
+
.option('-p, --port <port>', 'Server port', String(DEFAULT_PORT))
|
|
79
|
+
.option('-m, --mcp-mode', 'Start in MCP stdio mode')
|
|
80
|
+
.option('-r, --rest-api', 'Enable REST API endpoints')
|
|
81
|
+
.option('-i, --index <path>', 'Path to index on startup')
|
|
82
|
+
.action(async (options) => {
|
|
83
|
+
console.log(chalk.yellow('Server start will be implemented in a future task'));
|
|
84
|
+
console.log('Options:', options);
|
|
85
|
+
// TODO: Implement server start
|
|
86
|
+
});
|
|
87
|
+
// Index command (placeholder - will be implemented later)
|
|
88
|
+
program
|
|
89
|
+
.command('index <path>')
|
|
90
|
+
.description('Index a directory')
|
|
91
|
+
.option('-p, --pattern <pattern>', 'File pattern', '**/*.{js,ts,jsx,tsx}')
|
|
92
|
+
.action(async (path, options) => {
|
|
93
|
+
console.log(chalk.yellow('Index command will be implemented in a future task'));
|
|
94
|
+
console.log('Path:', path, 'Options:', options);
|
|
95
|
+
// TODO: Implement indexing
|
|
96
|
+
});
|
|
97
|
+
// Search command (placeholder - will be implemented later)
|
|
98
|
+
program
|
|
99
|
+
.command('search <query>')
|
|
100
|
+
.description('Search the code index')
|
|
101
|
+
.option('-f, --fuzzy', 'Use fuzzy search', true)
|
|
102
|
+
.option('-t, --type <type>', 'Symbol type filter')
|
|
103
|
+
.option('-l, --limit <limit>', 'Result limit', '20')
|
|
104
|
+
.action(async (query, options) => {
|
|
105
|
+
console.log(chalk.yellow('Search command will be implemented in a future task'));
|
|
106
|
+
console.log('Query:', query, 'Options:', options);
|
|
107
|
+
// TODO: Implement search
|
|
108
|
+
});
|
|
109
|
+
// Test command (placeholder - will be implemented later)
|
|
110
|
+
program
|
|
111
|
+
.command('test <tool>')
|
|
112
|
+
.description('Test connection to AI tool')
|
|
113
|
+
.action(async (tool) => {
|
|
114
|
+
console.log(chalk.yellow('Test command will be implemented in a future task'));
|
|
115
|
+
console.log('Tool:', tool);
|
|
116
|
+
// TODO: Implement connection testing
|
|
117
|
+
});
|
|
118
|
+
// Parse command line arguments
|
|
119
|
+
program.parse(process.argv);
|
|
120
|
+
// If no command was provided, show help
|
|
121
|
+
if (!process.argv.slice(2).length) {
|
|
122
|
+
program.outputHelp();
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate configurations for AI tools
|
|
126
|
+
*/
|
|
127
|
+
async function generateConfigurations(options) {
|
|
128
|
+
const prompts = new InteractivePrompts();
|
|
129
|
+
let tools = [];
|
|
130
|
+
let serverUrl = options.serverUrl;
|
|
131
|
+
let outputDir = options.output;
|
|
132
|
+
// Determine which tools to configure
|
|
133
|
+
if (options.interactive && !options.tool) {
|
|
134
|
+
// Interactive mode
|
|
135
|
+
tools = await prompts.selectTools();
|
|
136
|
+
if (!options.force && !options.yes) {
|
|
137
|
+
serverUrl = await prompts.confirmServerUrl(serverUrl);
|
|
138
|
+
outputDir = await prompts.selectOutputDirectory(outputDir);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else if (!options.tool) {
|
|
142
|
+
// No tool specified and not interactive - show available tools
|
|
143
|
+
const factory = new ConfigGeneratorFactory(serverUrl);
|
|
144
|
+
const availableTools = factory.getToolInfo();
|
|
145
|
+
console.log(chalk.yellow('No tool specified. Available tools:'));
|
|
146
|
+
availableTools.forEach(tool => {
|
|
147
|
+
console.log(chalk.gray(` • ${tool.name} - ${tool.displayName}`));
|
|
148
|
+
});
|
|
149
|
+
console.log(chalk.blue('\nUsage examples:'));
|
|
150
|
+
console.log(chalk.gray(' code-auditor gen --tool cursor'));
|
|
151
|
+
console.log(chalk.gray(' code-auditor gen --tool cursor,claude,continue'));
|
|
152
|
+
console.log(chalk.gray(' code-auditor gen --tool all'));
|
|
153
|
+
console.log(chalk.gray(' code-auditor gen --interactive'));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
// Command line mode
|
|
158
|
+
if (options.tool === 'all') {
|
|
159
|
+
const factory = new ConfigGeneratorFactory(serverUrl);
|
|
160
|
+
tools = factory.getAvailableTools();
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
tools = options.tool.split(',').map((t) => t.trim());
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
console.log(chalk.blue(`\nGenerating configurations for: ${tools.join(', ')}`));
|
|
167
|
+
console.log(chalk.gray(`Server URL: ${serverUrl}`));
|
|
168
|
+
console.log(chalk.gray(`Output directory: ${outputDir}\n`));
|
|
169
|
+
// Create factory
|
|
170
|
+
const factory = new ConfigGeneratorFactory(serverUrl);
|
|
171
|
+
const generatedFiles = [];
|
|
172
|
+
const errors = [];
|
|
173
|
+
// Check for existing files
|
|
174
|
+
const existingFiles = [];
|
|
175
|
+
for (const tool of tools) {
|
|
176
|
+
const generator = factory.createGenerator(tool);
|
|
177
|
+
if (generator) {
|
|
178
|
+
const config = generator.generateConfig();
|
|
179
|
+
const outputPath = resolve(outputDir, config.filename);
|
|
180
|
+
try {
|
|
181
|
+
await fs.access(outputPath);
|
|
182
|
+
existingFiles.push(config.filename);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// File doesn't exist, which is fine
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Confirm overwrite if needed
|
|
190
|
+
if (existingFiles.length > 0 && !options.force && !options.yes) {
|
|
191
|
+
const shouldOverwrite = await prompts.confirmOverwrite(existingFiles);
|
|
192
|
+
if (!shouldOverwrite) {
|
|
193
|
+
console.log(chalk.yellow('Operation cancelled.'));
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else if (existingFiles.length > 0 && (options.force || options.yes)) {
|
|
198
|
+
console.log(chalk.yellow(`Overwriting ${existingFiles.length} existing file(s)...`));
|
|
199
|
+
}
|
|
200
|
+
// Generate configurations
|
|
201
|
+
for (const tool of tools) {
|
|
202
|
+
try {
|
|
203
|
+
const generator = factory.createGenerator(tool);
|
|
204
|
+
if (!generator) {
|
|
205
|
+
errors.push(`Unknown tool: ${tool}`);
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const config = generator.generateConfig();
|
|
209
|
+
const outputPath = resolve(outputDir, config.filename);
|
|
210
|
+
// Ensure directory exists
|
|
211
|
+
await fs.mkdir(dirname(outputPath), { recursive: true });
|
|
212
|
+
// Write main config file
|
|
213
|
+
await fs.writeFile(outputPath, config.content);
|
|
214
|
+
generatedFiles.push(config.filename);
|
|
215
|
+
// Write additional files if any
|
|
216
|
+
if (config.additionalFiles) {
|
|
217
|
+
for (const additionalFile of config.additionalFiles) {
|
|
218
|
+
const additionalPath = resolve(outputDir, additionalFile.filename);
|
|
219
|
+
await fs.mkdir(dirname(additionalPath), { recursive: true });
|
|
220
|
+
await fs.writeFile(additionalPath, additionalFile.content);
|
|
221
|
+
generatedFiles.push(additionalFile.filename);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Show success and instructions
|
|
225
|
+
console.log(chalk.green(`✓ Generated ${generator.getToolName()} configuration: ${config.filename}`));
|
|
226
|
+
console.log(chalk.dim('Instructions:'));
|
|
227
|
+
console.log(chalk.gray(config.instructions.trim()));
|
|
228
|
+
console.log('');
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
errors.push(`Failed to generate config for ${tool}: ${error}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Show summary
|
|
235
|
+
if (generatedFiles.length > 0) {
|
|
236
|
+
prompts.displaySuccess(generatedFiles);
|
|
237
|
+
}
|
|
238
|
+
if (errors.length > 0) {
|
|
239
|
+
console.log(chalk.red('\nErrors:'));
|
|
240
|
+
errors.forEach(error => {
|
|
241
|
+
console.log(chalk.red(` • ${error}`));
|
|
242
|
+
});
|
|
243
|
+
}
|
|
36
244
|
}
|
|
37
|
-
main();
|
|
38
245
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Index Database using LokiJS + FlexSearch
|
|
3
|
+
* Pure JavaScript implementation with no native dependencies
|
|
4
|
+
*/
|
|
5
|
+
import { EnhancedFunctionMetadata, FunctionMetadata, SearchResult, SearchOptions } from './types.js';
|
|
6
|
+
export declare class CodeIndexDB {
|
|
7
|
+
private static instance;
|
|
8
|
+
private db;
|
|
9
|
+
private functionsCollection;
|
|
10
|
+
private searchIndex;
|
|
11
|
+
private dbPath;
|
|
12
|
+
private isInitialized;
|
|
13
|
+
constructor(dbPath?: string);
|
|
14
|
+
static getInstance(dbPath?: string): CodeIndexDB;
|
|
15
|
+
initialize(): Promise<void>;
|
|
16
|
+
private ensureInitialized;
|
|
17
|
+
/**
|
|
18
|
+
* Normalize function metadata for indexing
|
|
19
|
+
* Converts FunctionMetadata to have required fields for FlexSearch
|
|
20
|
+
*/
|
|
21
|
+
private normalizeFunctionData;
|
|
22
|
+
/**
|
|
23
|
+
* Tokenize function name for better search
|
|
24
|
+
* Splits camelCase, PascalCase, and snake_case into individual words
|
|
25
|
+
*/
|
|
26
|
+
private tokenizeFunctionName;
|
|
27
|
+
registerFunction(func: FunctionMetadata | EnhancedFunctionMetadata): Promise<void>;
|
|
28
|
+
registerFunctions(functions: (FunctionMetadata | EnhancedFunctionMetadata)[]): Promise<{
|
|
29
|
+
success: boolean;
|
|
30
|
+
registered: number;
|
|
31
|
+
failed: number;
|
|
32
|
+
errors?: Array<{
|
|
33
|
+
function: string;
|
|
34
|
+
error: string;
|
|
35
|
+
}>;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Synchronize file index - add new functions, update existing, remove deleted
|
|
39
|
+
* @param filePath The file path to synchronize
|
|
40
|
+
* @param currentFunctions The current functions found in the file
|
|
41
|
+
* @returns Sync statistics
|
|
42
|
+
*/
|
|
43
|
+
syncFileIndex(filePath: string, currentFunctions: (FunctionMetadata | EnhancedFunctionMetadata)[]): Promise<{
|
|
44
|
+
added: number;
|
|
45
|
+
updated: number;
|
|
46
|
+
removed: number;
|
|
47
|
+
}>;
|
|
48
|
+
searchFunctions(options: SearchOptions): Promise<SearchResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Execute multi-strategy search with different approaches
|
|
51
|
+
* @param parsedQuery The parsed query object
|
|
52
|
+
* @param searchScores Map to store relevance scores
|
|
53
|
+
* @returns Array of matching documents
|
|
54
|
+
*/
|
|
55
|
+
private executeMultiStrategySearch;
|
|
56
|
+
/**
|
|
57
|
+
* Search using FlexSearch and return document results
|
|
58
|
+
*/
|
|
59
|
+
private searchWithFlexSearch;
|
|
60
|
+
/**
|
|
61
|
+
* Merge search results with scoring
|
|
62
|
+
*/
|
|
63
|
+
private mergeSearchResults;
|
|
64
|
+
/**
|
|
65
|
+
* Calculate bonus score based on which fields matched
|
|
66
|
+
*/
|
|
67
|
+
private calculateFieldMatchScore;
|
|
68
|
+
/**
|
|
69
|
+
* Count how many terms match in a document
|
|
70
|
+
*/
|
|
71
|
+
private countMatchingTerms;
|
|
72
|
+
/**
|
|
73
|
+
* Get searchable text from document
|
|
74
|
+
*/
|
|
75
|
+
private getDocumentSearchText;
|
|
76
|
+
/**
|
|
77
|
+
* Get synonyms for a term using QueryParser
|
|
78
|
+
*/
|
|
79
|
+
private getSynonyms;
|
|
80
|
+
/**
|
|
81
|
+
* Exclude documents containing any of the excluded terms
|
|
82
|
+
*/
|
|
83
|
+
private excludeTermsFromResults;
|
|
84
|
+
/**
|
|
85
|
+
* Intersect multiple sets to find common elements
|
|
86
|
+
*/
|
|
87
|
+
private intersectSets;
|
|
88
|
+
/**
|
|
89
|
+
* Merge filters from options and parsed query
|
|
90
|
+
*/
|
|
91
|
+
private mergeFilters;
|
|
92
|
+
/**
|
|
93
|
+
* Apply filters to search results
|
|
94
|
+
*/
|
|
95
|
+
private applyFilters;
|
|
96
|
+
findDefinition(name: string, filePath?: string): Promise<EnhancedFunctionMetadata | null>;
|
|
97
|
+
getStats(): Promise<{
|
|
98
|
+
totalFunctions: number;
|
|
99
|
+
languages: Record<string, number>;
|
|
100
|
+
topDependencies: Array<{
|
|
101
|
+
name: string;
|
|
102
|
+
count: number;
|
|
103
|
+
}>;
|
|
104
|
+
filesIndexed: number;
|
|
105
|
+
lastUpdated: Date;
|
|
106
|
+
}>;
|
|
107
|
+
clearIndex(): Promise<void>;
|
|
108
|
+
close(): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Synchronize a single file's functions with the index
|
|
111
|
+
* Adds new functions, updates existing ones, and removes deleted ones
|
|
112
|
+
*/
|
|
113
|
+
synchronizeFile(filePath: string): Promise<{
|
|
114
|
+
added: number;
|
|
115
|
+
updated: number;
|
|
116
|
+
removed: number;
|
|
117
|
+
} | null>;
|
|
118
|
+
/**
|
|
119
|
+
* Performs bulk cleanup of the index by verifying all indexed files still exist
|
|
120
|
+
* and removing entries for deleted files
|
|
121
|
+
*/
|
|
122
|
+
bulkCleanup(): Promise<{
|
|
123
|
+
scannedCount: number;
|
|
124
|
+
removedCount: number;
|
|
125
|
+
removedFiles: string[];
|
|
126
|
+
errors: Array<{
|
|
127
|
+
file: string;
|
|
128
|
+
error: string;
|
|
129
|
+
}>;
|
|
130
|
+
}>;
|
|
131
|
+
/**
|
|
132
|
+
* Performs deep synchronization by re-scanning all indexed files
|
|
133
|
+
* Updates function signatures and removes stale entries
|
|
134
|
+
*/
|
|
135
|
+
deepSync(progressCallback?: (progress: {
|
|
136
|
+
current: number;
|
|
137
|
+
total: number;
|
|
138
|
+
file: string;
|
|
139
|
+
}) => void): Promise<{
|
|
140
|
+
syncedFiles: number;
|
|
141
|
+
addedFunctions: number;
|
|
142
|
+
updatedFunctions: number;
|
|
143
|
+
removedFunctions: number;
|
|
144
|
+
errors: Array<{
|
|
145
|
+
file: string;
|
|
146
|
+
error: string;
|
|
147
|
+
}>;
|
|
148
|
+
}>;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=codeIndexDB.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeIndexDB.d.ts","sourceRoot":"","sources":["../src/codeIndexDB.ts"],"names":[],"mappings":"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"}
|