codingbuddy 0.0.0-canary.20251219012535.c6f28a6 → 0.0.0-canary.20251219030126.ebde4da
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 +132 -8
- package/dist/src/cli/cli.d.ts +10 -0
- package/dist/src/cli/cli.js +98 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/cli/cli.spec.d.ts +1 -0
- package/dist/src/cli/cli.spec.js +84 -0
- package/dist/src/cli/cli.spec.js.map +1 -0
- package/dist/src/cli/cli.types.d.ts +18 -0
- package/dist/src/cli/cli.types.js +3 -0
- package/dist/src/cli/cli.types.js.map +1 -0
- package/dist/src/cli/index.d.ts +6 -0
- package/dist/src/cli/index.js +15 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/init/config.generator.d.ts +16 -0
- package/dist/src/cli/init/config.generator.js +70 -0
- package/dist/src/cli/init/config.generator.js.map +1 -0
- package/dist/src/cli/init/config.generator.spec.d.ts +1 -0
- package/dist/src/cli/init/config.generator.spec.js +182 -0
- package/dist/src/cli/init/config.generator.spec.js.map +1 -0
- package/dist/src/cli/init/config.writer.d.ts +10 -0
- package/dist/src/cli/init/config.writer.js +40 -0
- package/dist/src/cli/init/config.writer.js.map +1 -0
- package/dist/src/cli/init/config.writer.spec.d.ts +1 -0
- package/dist/src/cli/init/config.writer.spec.js +112 -0
- package/dist/src/cli/init/config.writer.spec.js.map +1 -0
- package/dist/src/cli/init/index.d.ts +5 -0
- package/dist/src/cli/init/index.js +16 -0
- package/dist/src/cli/init/index.js.map +1 -0
- package/dist/src/cli/init/init.command.d.ts +3 -0
- package/dist/src/cli/init/init.command.js +80 -0
- package/dist/src/cli/init/init.command.js.map +1 -0
- package/dist/src/cli/init/init.command.spec.d.ts +1 -0
- package/dist/src/cli/init/init.command.spec.js +227 -0
- package/dist/src/cli/init/init.command.spec.js.map +1 -0
- package/dist/src/cli/init/prompt.builder.d.ts +7 -0
- package/dist/src/cli/init/prompt.builder.js +222 -0
- package/dist/src/cli/init/prompt.builder.js.map +1 -0
- package/dist/src/cli/init/prompt.builder.spec.d.ts +1 -0
- package/dist/src/cli/init/prompt.builder.spec.js +199 -0
- package/dist/src/cli/init/prompt.builder.spec.js.map +1 -0
- package/dist/src/cli/utils/console.d.ts +18 -0
- package/dist/src/cli/utils/console.js +83 -0
- package/dist/src/cli/utils/console.js.map +1 -0
- package/dist/src/cli/utils/console.spec.d.ts +1 -0
- package/dist/src/cli/utils/console.spec.js +100 -0
- package/dist/src/cli/utils/console.spec.js.map +1 -0
- package/dist/src/cli/utils/index.d.ts +2 -0
- package/dist/src/cli/utils/index.js +7 -0
- package/dist/src/cli/utils/index.js.map +1 -0
- package/dist/src/config/config.schema.d.ts +30 -30
- package/dist/src/main.js +0 -0
- package/dist/src/mcp/mcp.module.js +2 -1
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/mcp/mcp.service.d.ts +10 -1
- package/dist/src/mcp/mcp.service.js +139 -64
- package/dist/src/mcp/mcp.service.js.map +1 -1
- package/dist/src/mcp/mcp.service.spec.d.ts +1 -0
- package/dist/src/mcp/mcp.service.spec.js +262 -0
- package/dist/src/mcp/mcp.service.spec.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -5
package/README.md
CHANGED
|
@@ -1,12 +1,49 @@
|
|
|
1
|
-
# Codingbuddy
|
|
1
|
+
# Codingbuddy MCP Server
|
|
2
2
|
|
|
3
|
-
A NestJS-based Model Context Protocol (MCP) server that
|
|
3
|
+
A NestJS-based Model Context Protocol (MCP) server that provides AI coding assistants with project-specific context and rules.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Initialize project configuration (AI-powered)
|
|
9
|
+
npx codingbuddy init
|
|
10
|
+
|
|
11
|
+
# This analyzes your project and creates codingbuddy.config.js
|
|
12
|
+
```
|
|
4
13
|
|
|
5
14
|
## Features
|
|
6
15
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
16
|
+
### CLI Commands
|
|
17
|
+
|
|
18
|
+
| Command | Description |
|
|
19
|
+
|---------|-------------|
|
|
20
|
+
| `codingbuddy init` | Analyze project and generate configuration |
|
|
21
|
+
| `codingbuddy --help` | Show help |
|
|
22
|
+
| `codingbuddy --version` | Show version |
|
|
23
|
+
|
|
24
|
+
### MCP Resources
|
|
25
|
+
|
|
26
|
+
| Resource | Description |
|
|
27
|
+
|----------|-------------|
|
|
28
|
+
| `config://project` | Project configuration (tech stack, architecture, language) |
|
|
29
|
+
| `rules://rules/core.md` | Core workflow rules |
|
|
30
|
+
| `rules://rules/project.md` | Project setup rules |
|
|
31
|
+
| `rules://agents/{name}.json` | Specialist agent definitions |
|
|
32
|
+
|
|
33
|
+
### MCP Tools
|
|
34
|
+
|
|
35
|
+
| Tool | Description |
|
|
36
|
+
|------|-------------|
|
|
37
|
+
| `get_project_config` | Get project configuration settings |
|
|
38
|
+
| `search_rules` | Search through rules and guidelines |
|
|
39
|
+
| `get_agent_details` | Get detailed profile of a specialist agent |
|
|
40
|
+
| `parse_mode` | Parse PLAN/ACT/EVAL workflow mode (includes language setting) |
|
|
41
|
+
|
|
42
|
+
### MCP Prompts
|
|
43
|
+
|
|
44
|
+
| Prompt | Description |
|
|
45
|
+
|--------|-------------|
|
|
46
|
+
| `activate_agent` | Activate a specialist agent with project context |
|
|
10
47
|
|
|
11
48
|
## Prerequisites
|
|
12
49
|
|
|
@@ -26,12 +63,14 @@ Add the following configuration to your Claude Desktop config:
|
|
|
26
63
|
"mcpServers": {
|
|
27
64
|
"codingbuddy-rules": {
|
|
28
65
|
"command": "npx",
|
|
29
|
-
"args": ["codingbuddy"]
|
|
66
|
+
"args": ["codingbuddy-mcp"]
|
|
30
67
|
}
|
|
31
68
|
}
|
|
32
69
|
}
|
|
33
70
|
```
|
|
34
71
|
|
|
72
|
+
> **Note**: Use `codingbuddy-mcp` for the MCP server. The `codingbuddy` command is for CLI operations like `init`.
|
|
73
|
+
|
|
35
74
|
### Option 2: Global Installation
|
|
36
75
|
|
|
37
76
|
```bash
|
|
@@ -63,7 +102,7 @@ yarn build
|
|
|
63
102
|
"mcpServers": {
|
|
64
103
|
"codingbuddy-rules": {
|
|
65
104
|
"command": "node",
|
|
66
|
-
"args": ["/ABSOLUTE/PATH/TO/codingbuddy/mcp-server/dist/main.js"]
|
|
105
|
+
"args": ["/ABSOLUTE/PATH/TO/codingbuddy/mcp-server/dist/src/main.js"]
|
|
67
106
|
}
|
|
68
107
|
}
|
|
69
108
|
}
|
|
@@ -100,6 +139,91 @@ The server will start in SSE mode, exposing:
|
|
|
100
139
|
| `MCP_TRANSPORT` | Transport mode (`stdio` or `sse`) | `stdio` |
|
|
101
140
|
| `PORT` | HTTP port for SSE mode | `3000` |
|
|
102
141
|
| `CODINGBUDDY_RULES_DIR` | Custom path to `.ai-rules` directory | Auto-detected |
|
|
142
|
+
| `CODINGBUDDY_PROJECT_ROOT` | Project root for config loading | Current directory |
|
|
143
|
+
| `ANTHROPIC_API_KEY` | API key for `codingbuddy init` | Required for init |
|
|
144
|
+
|
|
145
|
+
## Project Configuration
|
|
146
|
+
|
|
147
|
+
### Initialize Configuration
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# Basic usage (requires ANTHROPIC_API_KEY env var)
|
|
151
|
+
npx codingbuddy init
|
|
152
|
+
|
|
153
|
+
# With options
|
|
154
|
+
npx codingbuddy init --format json # Output as JSON instead of JS
|
|
155
|
+
npx codingbuddy init --force # Overwrite existing config
|
|
156
|
+
npx codingbuddy init /path/to/project # Specify project path
|
|
157
|
+
npx codingbuddy init --api-key sk-... # Pass API key directly
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Configuration File
|
|
161
|
+
|
|
162
|
+
The `codingbuddy init` command creates a `codingbuddy.config.js` file:
|
|
163
|
+
|
|
164
|
+
```javascript
|
|
165
|
+
module.exports = {
|
|
166
|
+
// Response language (ko, en, ja, etc.)
|
|
167
|
+
language: 'ko',
|
|
168
|
+
|
|
169
|
+
// Project metadata
|
|
170
|
+
projectName: 'my-awesome-app',
|
|
171
|
+
description: 'A modern web application',
|
|
172
|
+
|
|
173
|
+
// Technology stack
|
|
174
|
+
techStack: {
|
|
175
|
+
languages: ['TypeScript'],
|
|
176
|
+
frontend: ['React', 'Next.js', 'Tailwind CSS'],
|
|
177
|
+
backend: ['Node.js', 'Prisma'],
|
|
178
|
+
database: ['PostgreSQL'],
|
|
179
|
+
tools: ['ESLint', 'Prettier', 'Vitest'],
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
// Architecture pattern
|
|
183
|
+
architecture: {
|
|
184
|
+
pattern: 'feature-sliced-design',
|
|
185
|
+
structure: ['app', 'widgets', 'features', 'entities', 'shared'],
|
|
186
|
+
},
|
|
187
|
+
|
|
188
|
+
// Coding conventions
|
|
189
|
+
conventions: {
|
|
190
|
+
style: 'airbnb',
|
|
191
|
+
naming: {
|
|
192
|
+
files: 'kebab-case',
|
|
193
|
+
components: 'PascalCase',
|
|
194
|
+
functions: 'camelCase',
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
|
|
198
|
+
// Testing strategy
|
|
199
|
+
testStrategy: {
|
|
200
|
+
approach: 'tdd',
|
|
201
|
+
frameworks: ['Vitest', 'Playwright'],
|
|
202
|
+
coverage: 80,
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### File Structure
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
my-project/
|
|
211
|
+
├── codingbuddy.config.js # Main configuration
|
|
212
|
+
├── .codingignore # Files to ignore (gitignore syntax)
|
|
213
|
+
└── .codingbuddy/ # Additional context (optional)
|
|
214
|
+
└── context/
|
|
215
|
+
├── architecture.md # Architecture documentation
|
|
216
|
+
└── api-guide.md # API usage guide
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### How AI Uses Configuration
|
|
220
|
+
|
|
221
|
+
When you use an AI assistant with this MCP server:
|
|
222
|
+
|
|
223
|
+
1. **Language**: AI responds in your configured language
|
|
224
|
+
2. **Tech Stack**: AI provides code examples using your frameworks
|
|
225
|
+
3. **Architecture**: AI suggests structures following your patterns
|
|
226
|
+
4. **Conventions**: AI follows your naming and style rules
|
|
103
227
|
|
|
104
228
|
## Development
|
|
105
229
|
|
|
@@ -119,7 +243,7 @@ The [MCP Inspector](https://github.com/modelcontextprotocol/inspector) is a web-
|
|
|
119
243
|
yarn build
|
|
120
244
|
|
|
121
245
|
# Run with Inspector
|
|
122
|
-
npx @modelcontextprotocol/inspector node dist/main.js
|
|
246
|
+
npx @modelcontextprotocol/inspector node dist/src/main.js
|
|
123
247
|
```
|
|
124
248
|
|
|
125
249
|
### 2. Manual Test Script
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import type { InitOptions } from './cli.types';
|
|
3
|
+
export interface ParsedArgs {
|
|
4
|
+
command: 'init' | 'help' | 'version';
|
|
5
|
+
options: Partial<InitOptions>;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseArgs(args: string[]): ParsedArgs;
|
|
8
|
+
export declare function printUsage(): void;
|
|
9
|
+
export declare function printVersion(): void;
|
|
10
|
+
export declare function main(args?: string[]): Promise<void>;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.parseArgs = parseArgs;
|
|
5
|
+
exports.printUsage = printUsage;
|
|
6
|
+
exports.printVersion = printVersion;
|
|
7
|
+
exports.main = main;
|
|
8
|
+
const init_1 = require("./init");
|
|
9
|
+
const VERSION = '1.0.0';
|
|
10
|
+
function parseArgs(args) {
|
|
11
|
+
const options = {
|
|
12
|
+
projectRoot: process.cwd(),
|
|
13
|
+
format: 'js',
|
|
14
|
+
force: false,
|
|
15
|
+
};
|
|
16
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
17
|
+
return { command: 'help', options };
|
|
18
|
+
}
|
|
19
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
20
|
+
return { command: 'version', options };
|
|
21
|
+
}
|
|
22
|
+
const command = args[0];
|
|
23
|
+
if (command !== 'init') {
|
|
24
|
+
return { command: 'help', options };
|
|
25
|
+
}
|
|
26
|
+
for (let i = 1; i < args.length; i++) {
|
|
27
|
+
const arg = args[i];
|
|
28
|
+
if (arg === '--force' || arg === '-f') {
|
|
29
|
+
options.force = true;
|
|
30
|
+
}
|
|
31
|
+
else if (arg === '--format') {
|
|
32
|
+
const format = args[++i];
|
|
33
|
+
if (format === 'js' || format === 'json') {
|
|
34
|
+
options.format = format;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else if (arg === '--api-key') {
|
|
38
|
+
options.apiKey = args[++i];
|
|
39
|
+
}
|
|
40
|
+
else if (!arg.startsWith('-')) {
|
|
41
|
+
options.projectRoot = arg;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return { command: 'init', options };
|
|
45
|
+
}
|
|
46
|
+
function printUsage() {
|
|
47
|
+
const usage = `
|
|
48
|
+
CodingBuddy CLI - AI-powered project configuration generator
|
|
49
|
+
|
|
50
|
+
Usage:
|
|
51
|
+
codingbuddy init [path] [options] Initialize configuration
|
|
52
|
+
codingbuddy --help Show this help
|
|
53
|
+
codingbuddy --version Show version
|
|
54
|
+
|
|
55
|
+
Options:
|
|
56
|
+
--format <js|json> Output format (default: js)
|
|
57
|
+
--force, -f Overwrite existing config
|
|
58
|
+
--api-key <key> Anthropic API key (or set ANTHROPIC_API_KEY env)
|
|
59
|
+
|
|
60
|
+
Examples:
|
|
61
|
+
codingbuddy init Initialize in current directory
|
|
62
|
+
codingbuddy init ./my-project Initialize in specific directory
|
|
63
|
+
codingbuddy init --format json Generate JSON config
|
|
64
|
+
codingbuddy init --force Overwrite existing config
|
|
65
|
+
|
|
66
|
+
Environment:
|
|
67
|
+
ANTHROPIC_API_KEY API key for AI generation
|
|
68
|
+
`;
|
|
69
|
+
process.stdout.write(usage + '\n');
|
|
70
|
+
}
|
|
71
|
+
function printVersion() {
|
|
72
|
+
process.stdout.write(`codingbuddy v${VERSION}\n`);
|
|
73
|
+
}
|
|
74
|
+
async function main(args = process.argv.slice(2)) {
|
|
75
|
+
const { command, options } = parseArgs(args);
|
|
76
|
+
switch (command) {
|
|
77
|
+
case 'help':
|
|
78
|
+
printUsage();
|
|
79
|
+
break;
|
|
80
|
+
case 'version':
|
|
81
|
+
printVersion();
|
|
82
|
+
break;
|
|
83
|
+
case 'init': {
|
|
84
|
+
const result = await (0, init_1.runInit)(options);
|
|
85
|
+
if (!result.success) {
|
|
86
|
+
process.exitCode = 1;
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (require.main === module) {
|
|
93
|
+
main().catch((error) => {
|
|
94
|
+
console.error('Fatal error:', error);
|
|
95
|
+
process.exitCode = 1;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const cli_1 = require("./cli");
|
|
5
|
+
(0, vitest_1.describe)('cli', () => {
|
|
6
|
+
(0, vitest_1.describe)('parseArgs', () => {
|
|
7
|
+
(0, vitest_1.it)('should parse init command', () => {
|
|
8
|
+
const result = (0, cli_1.parseArgs)(['init']);
|
|
9
|
+
(0, vitest_1.expect)(result.command).toBe('init');
|
|
10
|
+
});
|
|
11
|
+
(0, vitest_1.it)('should parse init with --force flag', () => {
|
|
12
|
+
const result = (0, cli_1.parseArgs)(['init', '--force']);
|
|
13
|
+
(0, vitest_1.expect)(result.command).toBe('init');
|
|
14
|
+
(0, vitest_1.expect)(result.options.force).toBe(true);
|
|
15
|
+
});
|
|
16
|
+
(0, vitest_1.it)('should parse init with --format option', () => {
|
|
17
|
+
const result = (0, cli_1.parseArgs)(['init', '--format', 'json']);
|
|
18
|
+
(0, vitest_1.expect)(result.command).toBe('init');
|
|
19
|
+
(0, vitest_1.expect)(result.options.format).toBe('json');
|
|
20
|
+
});
|
|
21
|
+
(0, vitest_1.it)('should parse init with --api-key option', () => {
|
|
22
|
+
const result = (0, cli_1.parseArgs)(['init', '--api-key', 'test-key']);
|
|
23
|
+
(0, vitest_1.expect)(result.command).toBe('init');
|
|
24
|
+
(0, vitest_1.expect)(result.options.apiKey).toBe('test-key');
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.it)('should parse help command', () => {
|
|
27
|
+
const result = (0, cli_1.parseArgs)(['--help']);
|
|
28
|
+
(0, vitest_1.expect)(result.command).toBe('help');
|
|
29
|
+
});
|
|
30
|
+
(0, vitest_1.it)('should parse version command', () => {
|
|
31
|
+
const result = (0, cli_1.parseArgs)(['--version']);
|
|
32
|
+
(0, vitest_1.expect)(result.command).toBe('version');
|
|
33
|
+
});
|
|
34
|
+
(0, vitest_1.it)('should return help for empty args', () => {
|
|
35
|
+
const result = (0, cli_1.parseArgs)([]);
|
|
36
|
+
(0, vitest_1.expect)(result.command).toBe('help');
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.it)('should return help for unknown command', () => {
|
|
39
|
+
const result = (0, cli_1.parseArgs)(['unknown']);
|
|
40
|
+
(0, vitest_1.expect)(result.command).toBe('help');
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)('should use current directory as default projectRoot', () => {
|
|
43
|
+
const result = (0, cli_1.parseArgs)(['init']);
|
|
44
|
+
(0, vitest_1.expect)(result.options.projectRoot).toBe(process.cwd());
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.it)('should parse custom project root', () => {
|
|
47
|
+
const result = (0, cli_1.parseArgs)(['init', '/custom/path']);
|
|
48
|
+
(0, vitest_1.expect)(result.options.projectRoot).toBe('/custom/path');
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
(0, vitest_1.describe)('printUsage', () => {
|
|
52
|
+
let stdoutWrite;
|
|
53
|
+
(0, vitest_1.beforeEach)(() => {
|
|
54
|
+
stdoutWrite = vitest_1.vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.afterEach)(() => {
|
|
57
|
+
vitest_1.vi.restoreAllMocks();
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)('should print usage information', () => {
|
|
60
|
+
(0, cli_1.printUsage)();
|
|
61
|
+
(0, vitest_1.expect)(stdoutWrite).toHaveBeenCalled();
|
|
62
|
+
const output = stdoutWrite.mock.calls.map((c) => c[0]).join('');
|
|
63
|
+
(0, vitest_1.expect)(output).toContain('codingbuddy');
|
|
64
|
+
(0, vitest_1.expect)(output).toContain('init');
|
|
65
|
+
(0, vitest_1.expect)(output).toContain('--help');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
(0, vitest_1.describe)('printVersion', () => {
|
|
69
|
+
let stdoutWrite;
|
|
70
|
+
(0, vitest_1.beforeEach)(() => {
|
|
71
|
+
stdoutWrite = vitest_1.vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
72
|
+
});
|
|
73
|
+
(0, vitest_1.afterEach)(() => {
|
|
74
|
+
vitest_1.vi.restoreAllMocks();
|
|
75
|
+
});
|
|
76
|
+
(0, vitest_1.it)('should print version', () => {
|
|
77
|
+
(0, cli_1.printVersion)();
|
|
78
|
+
(0, vitest_1.expect)(stdoutWrite).toHaveBeenCalled();
|
|
79
|
+
const output = stdoutWrite.mock.calls.map((c) => c[0]).join('');
|
|
80
|
+
(0, vitest_1.expect)(output).toMatch(/\d+\.\d+\.\d+/);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=cli.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.spec.js","sourceRoot":"","sources":["../../../src/cli/cli.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type CommandHandler = (args: string[]) => Promise<void>;
|
|
2
|
+
export interface CliCommand {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
handler: CommandHandler;
|
|
6
|
+
}
|
|
7
|
+
export interface InitOptions {
|
|
8
|
+
projectRoot: string;
|
|
9
|
+
format: 'js' | 'json';
|
|
10
|
+
force: boolean;
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface InitResult {
|
|
14
|
+
success: boolean;
|
|
15
|
+
configPath?: string;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
export type LogLevel = 'info' | 'success' | 'warn' | 'error';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.types.js","sourceRoot":"","sources":["../../../src/cli/cli.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { main, parseArgs, printUsage, printVersion } from './cli';
|
|
2
|
+
export type { ParsedArgs } from './cli';
|
|
3
|
+
export type { InitOptions, InitResult, CliCommand, CommandHandler, LogLevel } from './cli.types';
|
|
4
|
+
export { runInit, getApiKey } from './init';
|
|
5
|
+
export { createConsoleUtils, consoleUtils } from './utils';
|
|
6
|
+
export type { ConsoleUtils } from './utils';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.consoleUtils = exports.createConsoleUtils = exports.getApiKey = exports.runInit = exports.printVersion = exports.printUsage = exports.parseArgs = exports.main = void 0;
|
|
4
|
+
var cli_1 = require("./cli");
|
|
5
|
+
Object.defineProperty(exports, "main", { enumerable: true, get: function () { return cli_1.main; } });
|
|
6
|
+
Object.defineProperty(exports, "parseArgs", { enumerable: true, get: function () { return cli_1.parseArgs; } });
|
|
7
|
+
Object.defineProperty(exports, "printUsage", { enumerable: true, get: function () { return cli_1.printUsage; } });
|
|
8
|
+
Object.defineProperty(exports, "printVersion", { enumerable: true, get: function () { return cli_1.printVersion; } });
|
|
9
|
+
var init_1 = require("./init");
|
|
10
|
+
Object.defineProperty(exports, "runInit", { enumerable: true, get: function () { return init_1.runInit; } });
|
|
11
|
+
Object.defineProperty(exports, "getApiKey", { enumerable: true, get: function () { return init_1.getApiKey; } });
|
|
12
|
+
var utils_1 = require("./utils");
|
|
13
|
+
Object.defineProperty(exports, "createConsoleUtils", { enumerable: true, get: function () { return utils_1.createConsoleUtils; } });
|
|
14
|
+
Object.defineProperty(exports, "consoleUtils", { enumerable: true, get: function () { return utils_1.consoleUtils; } });
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":";;;AAAA,6BAAkE;AAAzD,2FAAA,IAAI,OAAA;AAAE,gGAAA,SAAS,OAAA;AAAE,iGAAA,UAAU,OAAA;AAAE,mGAAA,YAAY,OAAA;AAGlD,+BAA4C;AAAnC,+FAAA,OAAO,OAAA;AAAE,iGAAA,SAAS,OAAA;AAC3B,iCAA2D;AAAlD,2GAAA,kBAAkB,OAAA;AAAE,qGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ProjectAnalysis } from '../../analyzer';
|
|
2
|
+
import type { CodingBuddyConfig } from '../../config';
|
|
3
|
+
export interface ConfigGeneratorOptions {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
model?: string;
|
|
6
|
+
maxTokens?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function extractJsonFromResponse(response: string): string | null;
|
|
9
|
+
export declare function parseJsonResponse(response: string): CodingBuddyConfig;
|
|
10
|
+
export declare class ConfigGenerator {
|
|
11
|
+
private client;
|
|
12
|
+
private model;
|
|
13
|
+
private maxTokens;
|
|
14
|
+
constructor(options: ConfigGeneratorOptions);
|
|
15
|
+
generate(analysis: ProjectAnalysis): Promise<CodingBuddyConfig>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigGenerator = void 0;
|
|
4
|
+
exports.extractJsonFromResponse = extractJsonFromResponse;
|
|
5
|
+
exports.parseJsonResponse = parseJsonResponse;
|
|
6
|
+
const sdk_1 = require("@anthropic-ai/sdk");
|
|
7
|
+
const config_schema_1 = require("../../config/config.schema");
|
|
8
|
+
const prompt_builder_1 = require("./prompt.builder");
|
|
9
|
+
const DEFAULT_MODEL = 'claude-sonnet-4-20250514';
|
|
10
|
+
const DEFAULT_MAX_TOKENS = 4096;
|
|
11
|
+
function extractJsonFromResponse(response) {
|
|
12
|
+
const codeBlockMatch = response.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
13
|
+
if (codeBlockMatch) {
|
|
14
|
+
return codeBlockMatch[1].trim();
|
|
15
|
+
}
|
|
16
|
+
const jsonMatch = response.match(/\{[\s\S]*\}/);
|
|
17
|
+
if (jsonMatch) {
|
|
18
|
+
return jsonMatch[0];
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
function parseJsonResponse(response) {
|
|
23
|
+
const jsonString = extractJsonFromResponse(response);
|
|
24
|
+
if (!jsonString) {
|
|
25
|
+
throw new Error('No valid JSON found in response');
|
|
26
|
+
}
|
|
27
|
+
let parsed;
|
|
28
|
+
try {
|
|
29
|
+
parsed = JSON.parse(jsonString);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
throw new Error(`Invalid JSON in response: ${jsonString.substring(0, 100)}...`);
|
|
33
|
+
}
|
|
34
|
+
const validation = (0, config_schema_1.validateConfig)(parsed);
|
|
35
|
+
if (!validation.success) {
|
|
36
|
+
console.warn('Config validation warnings:', validation.errors);
|
|
37
|
+
}
|
|
38
|
+
return validation.data ?? parsed;
|
|
39
|
+
}
|
|
40
|
+
class ConfigGenerator {
|
|
41
|
+
constructor(options) {
|
|
42
|
+
this.client = new sdk_1.default({
|
|
43
|
+
apiKey: options.apiKey,
|
|
44
|
+
});
|
|
45
|
+
this.model = options.model ?? DEFAULT_MODEL;
|
|
46
|
+
this.maxTokens = options.maxTokens ?? DEFAULT_MAX_TOKENS;
|
|
47
|
+
}
|
|
48
|
+
async generate(analysis) {
|
|
49
|
+
const systemPrompt = (0, prompt_builder_1.buildSystemPrompt)();
|
|
50
|
+
const userPrompt = (0, prompt_builder_1.buildAnalysisPrompt)(analysis);
|
|
51
|
+
const response = await this.client.messages.create({
|
|
52
|
+
model: this.model,
|
|
53
|
+
max_tokens: this.maxTokens,
|
|
54
|
+
system: systemPrompt,
|
|
55
|
+
messages: [
|
|
56
|
+
{
|
|
57
|
+
role: 'user',
|
|
58
|
+
content: userPrompt,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
});
|
|
62
|
+
const textContent = response.content.find((block) => block.type === 'text');
|
|
63
|
+
if (!textContent || textContent.type !== 'text') {
|
|
64
|
+
throw new Error('No text content in AI response');
|
|
65
|
+
}
|
|
66
|
+
return parseJsonResponse(textContent.text);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.ConfigGenerator = ConfigGenerator;
|
|
70
|
+
//# sourceMappingURL=config.generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.generator.js","sourceRoot":"","sources":["../../../../src/cli/init/config.generator.ts"],"names":[],"mappings":";;;AAqCA,0DAcC;AAKD,8CAwBC;AA1ED,2CAA0C;AAG1C,8DAA4D;AAC5D,qDAA0E;AAiB1E,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAKjD,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAKhC,SAAgB,uBAAuB,CAAC,QAAgB;IAEtD,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACtE,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAGD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAChD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAKD,SAAgB,iBAAiB,CAAC,QAAgB;IAChD,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6BAA6B,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IAGD,MAAM,UAAU,GAAG,IAAA,8BAAc,EAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAGxB,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,IAAK,MAA4B,CAAC;AAC1D,CAAC;AAKD,MAAa,eAAe;IAK1B,YAAY,OAA+B;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAS,CAAC;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC3D,CAAC;IAKD,KAAK,CAAC,QAAQ,CAAC,QAAyB;QACtC,MAAM,YAAY,GAAG,IAAA,kCAAiB,GAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAA,oCAAmB,EAAC,QAAQ,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,UAAU;iBACpB;aACF;SACF,CAAC,CAAC;QAGH,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAE5E,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;CACF;AAzCD,0CAyCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|