codingbuddy 0.0.0-canary.20251219151055.e4122b3 → 0.0.0-dev.20251217095837.0d8312e

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 (100) hide show
  1. package/README.md +16 -140
  2. package/dist/src/keyword/keyword.module.js.map +1 -1
  3. package/dist/src/keyword/keyword.service.spec.d.ts +1 -0
  4. package/dist/src/keyword/keyword.service.spec.js +225 -0
  5. package/dist/src/keyword/keyword.service.spec.js.map +1 -0
  6. package/dist/src/main.js +0 -0
  7. package/dist/src/mcp/mcp.module.js +1 -2
  8. package/dist/src/mcp/mcp.module.js.map +1 -1
  9. package/dist/src/mcp/mcp.service.d.ts +7 -16
  10. package/dist/src/mcp/mcp.service.js +65 -140
  11. package/dist/src/mcp/mcp.service.js.map +1 -1
  12. package/dist/src/rules/rules.service.js +2 -2
  13. package/dist/src/rules/rules.service.js.map +1 -1
  14. package/dist/tsconfig.tsbuildinfo +1 -0
  15. package/package.json +7 -22
  16. package/dist/src/analyzer/analyzer.module.d.ts +0 -2
  17. package/dist/src/analyzer/analyzer.module.js +0 -21
  18. package/dist/src/analyzer/analyzer.module.js.map +0 -1
  19. package/dist/src/analyzer/analyzer.service.d.ts +0 -10
  20. package/dist/src/analyzer/analyzer.service.js +0 -74
  21. package/dist/src/analyzer/analyzer.service.js.map +0 -1
  22. package/dist/src/analyzer/analyzer.types.d.ts +0 -70
  23. package/dist/src/analyzer/analyzer.types.js +0 -3
  24. package/dist/src/analyzer/analyzer.types.js.map +0 -1
  25. package/dist/src/analyzer/code.sampler.d.ts +0 -7
  26. package/dist/src/analyzer/code.sampler.js +0 -161
  27. package/dist/src/analyzer/code.sampler.js.map +0 -1
  28. package/dist/src/analyzer/config.analyzer.d.ts +0 -7
  29. package/dist/src/analyzer/config.analyzer.js +0 -182
  30. package/dist/src/analyzer/config.analyzer.js.map +0 -1
  31. package/dist/src/analyzer/directory.analyzer.d.ts +0 -12
  32. package/dist/src/analyzer/directory.analyzer.js +0 -156
  33. package/dist/src/analyzer/directory.analyzer.js.map +0 -1
  34. package/dist/src/analyzer/index.d.ts +0 -7
  35. package/dist/src/analyzer/index.js +0 -32
  36. package/dist/src/analyzer/index.js.map +0 -1
  37. package/dist/src/analyzer/package.analyzer.d.ts +0 -12
  38. package/dist/src/analyzer/package.analyzer.js +0 -126
  39. package/dist/src/analyzer/package.analyzer.js.map +0 -1
  40. package/dist/src/cli/cli.d.ts +0 -10
  41. package/dist/src/cli/cli.js +0 -98
  42. package/dist/src/cli/cli.js.map +0 -1
  43. package/dist/src/cli/cli.types.d.ts +0 -18
  44. package/dist/src/cli/cli.types.js +0 -3
  45. package/dist/src/cli/cli.types.js.map +0 -1
  46. package/dist/src/cli/index.d.ts +0 -6
  47. package/dist/src/cli/index.js +0 -15
  48. package/dist/src/cli/index.js.map +0 -1
  49. package/dist/src/cli/init/config.generator.d.ts +0 -16
  50. package/dist/src/cli/init/config.generator.js +0 -70
  51. package/dist/src/cli/init/config.generator.js.map +0 -1
  52. package/dist/src/cli/init/config.writer.d.ts +0 -10
  53. package/dist/src/cli/init/config.writer.js +0 -43
  54. package/dist/src/cli/init/config.writer.js.map +0 -1
  55. package/dist/src/cli/init/index.d.ts +0 -5
  56. package/dist/src/cli/init/index.js +0 -16
  57. package/dist/src/cli/init/index.js.map +0 -1
  58. package/dist/src/cli/init/init.command.d.ts +0 -3
  59. package/dist/src/cli/init/init.command.js +0 -80
  60. package/dist/src/cli/init/init.command.js.map +0 -1
  61. package/dist/src/cli/init/prompt.builder.d.ts +0 -7
  62. package/dist/src/cli/init/prompt.builder.js +0 -225
  63. package/dist/src/cli/init/prompt.builder.js.map +0 -1
  64. package/dist/src/cli/utils/console.d.ts +0 -11
  65. package/dist/src/cli/utils/console.js +0 -33
  66. package/dist/src/cli/utils/console.js.map +0 -1
  67. package/dist/src/cli/utils/index.d.ts +0 -2
  68. package/dist/src/cli/utils/index.js +0 -7
  69. package/dist/src/cli/utils/index.js.map +0 -1
  70. package/dist/src/config/config.loader.d.ts +0 -22
  71. package/dist/src/config/config.loader.js +0 -105
  72. package/dist/src/config/config.loader.js.map +0 -1
  73. package/dist/src/config/config.module.d.ts +0 -2
  74. package/dist/src/config/config.module.js +0 -21
  75. package/dist/src/config/config.module.js.map +0 -1
  76. package/dist/src/config/config.schema.d.ts +0 -544
  77. package/dist/src/config/config.schema.js +0 -98
  78. package/dist/src/config/config.schema.js.map +0 -1
  79. package/dist/src/config/config.service.d.ts +0 -33
  80. package/dist/src/config/config.service.js +0 -126
  81. package/dist/src/config/config.service.js.map +0 -1
  82. package/dist/src/config/config.types.d.ts +0 -2
  83. package/dist/src/config/config.types.js +0 -6
  84. package/dist/src/config/config.types.js.map +0 -1
  85. package/dist/src/config/context.loader.d.ts +0 -23
  86. package/dist/src/config/context.loader.js +0 -146
  87. package/dist/src/config/context.loader.js.map +0 -1
  88. package/dist/src/config/ignore.parser.d.ts +0 -12
  89. package/dist/src/config/ignore.parser.js +0 -132
  90. package/dist/src/config/ignore.parser.js.map +0 -1
  91. package/dist/src/config/index.d.ts +0 -13
  92. package/dist/src/config/index.js +0 -41
  93. package/dist/src/config/index.js.map +0 -1
  94. package/dist/src/shared/file.utils.d.ts +0 -4
  95. package/dist/src/shared/file.utils.js +0 -37
  96. package/dist/src/shared/file.utils.js.map +0 -1
  97. package/dist/src/shared/path.utils.d.ts +0 -2
  98. package/dist/src/shared/path.utils.js +0 -14
  99. package/dist/src/shared/path.utils.js.map +0 -1
  100. package/dist/tsconfig.build.tsbuildinfo +0 -1
package/README.md CHANGED
@@ -1,49 +1,12 @@
1
- # Codingbuddy MCP Server
1
+ # Codebuddy Rules MCP Server
2
2
 
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
- ```
3
+ A NestJS-based Model Context Protocol (MCP) server that exposes the Multi-AI Rules System (`.ai-rules/`) to AI clients.
13
4
 
14
5
  ## Features
15
6
 
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 |
7
+ - **Resources**: Access rule files directly (`rules://core`, `rules://agents/frontend-developer`, etc.)
8
+ - **Tools**: Search rules (`search_rules`) and get agent profiles (`get_agent_details`).
9
+ - **Prompts**: Activate agents with context (`activate_agent`).
47
10
 
48
11
  ## Prerequisites
49
12
 
@@ -61,16 +24,14 @@ Add the following configuration to your Claude Desktop config:
61
24
  ```json
62
25
  {
63
26
  "mcpServers": {
64
- "codingbuddy-rules": {
27
+ "codebuddy-rules": {
65
28
  "command": "npx",
66
- "args": ["codingbuddy-mcp"]
29
+ "args": ["codingbuddy"]
67
30
  }
68
31
  }
69
32
  }
70
33
  ```
71
34
 
72
- > **Note**: Use `codingbuddy-mcp` for the MCP server. The `codingbuddy` command is for CLI operations like `init`.
73
-
74
35
  ### Option 2: Global Installation
75
36
 
76
37
  ```bash
@@ -82,8 +43,8 @@ Then configure Claude Desktop:
82
43
  ```json
83
44
  {
84
45
  "mcpServers": {
85
- "codingbuddy-rules": {
86
- "command": "codingbuddy-mcp"
46
+ "codebuddy-rules": {
47
+ "command": "codebuddy-mcp"
87
48
  }
88
49
  }
89
50
  }
@@ -100,9 +61,9 @@ yarn build
100
61
  ```json
101
62
  {
102
63
  "mcpServers": {
103
- "codingbuddy-rules": {
64
+ "codebuddy-rules": {
104
65
  "command": "node",
105
- "args": ["/ABSOLUTE/PATH/TO/codingbuddy/mcp-server/dist/src/main.js"]
66
+ "args": ["/ABSOLUTE/PATH/TO/codebuddy/mcp-server/dist/main.js"]
106
67
  }
107
68
  }
108
69
  }
@@ -115,8 +76,8 @@ Replace `/ABSOLUTE/PATH/TO` with your actual path.
115
76
  Build the Docker image from the **repository root**:
116
77
 
117
78
  ```bash
118
- # Run from codingbuddy root
119
- docker build -f mcp-server/Dockerfile -t codingbuddy-rules-mcp .
79
+ # Run from codebuddy root
80
+ docker build -f mcp-server/Dockerfile -t codebuddy-rules-mcp .
120
81
  ```
121
82
 
122
83
  Run the container:
@@ -125,7 +86,7 @@ Run the container:
125
86
  docker run -p 3000:3000 \
126
87
  -e MCP_TRANSPORT=sse \
127
88
  -e PORT=3000 \
128
- codingbuddy-rules-mcp
89
+ codebuddy-rules-mcp
129
90
  ```
130
91
 
131
92
  The server will start in SSE mode, exposing:
@@ -138,92 +99,7 @@ The server will start in SSE mode, exposing:
138
99
  |----------|-------------|---------|
139
100
  | `MCP_TRANSPORT` | Transport mode (`stdio` or `sse`) | `stdio` |
140
101
  | `PORT` | HTTP port for SSE mode | `3000` |
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
102
+ | `CODEBUDDY_RULES_DIR` | Custom path to `.ai-rules` directory | Auto-detected |
227
103
 
228
104
  ## Development
229
105
 
@@ -243,7 +119,7 @@ The [MCP Inspector](https://github.com/modelcontextprotocol/inspector) is a web-
243
119
  yarn build
244
120
 
245
121
  # Run with Inspector
246
- npx @modelcontextprotocol/inspector node dist/src/main.js
122
+ npx @modelcontextprotocol/inspector node dist/main.js
247
123
  ```
248
124
 
249
125
  ### 2. Manual Test Script
@@ -1 +1 @@
1
- {"version":3,"file":"keyword.module.js","sourceRoot":"","sources":["../../../src/keyword/keyword.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,wDAAoD;AACpD,0DAAsD;AACtD,uDAAmD;AAGtC,QAAA,eAAe,GAAG,iBAAiB,CAAC;AAyB1C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAvBzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,CAAC;QACtB,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,uBAAe;gBACxB,UAAU,EAAE,CAAC,YAA0B,EAAE,EAAE;oBACzC,MAAM,UAAU,GAAG,KAAK,IAAiC,EAAE;wBACzD,MAAM,OAAO,GACX,MAAM,YAAY,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;wBAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;oBACnD,CAAC,CAAC;oBAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAAmB,EAAE;wBACvD,OAAO,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;oBAC3C,CAAC,CAAC;oBAEF,OAAO,IAAI,gCAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAClD,CAAC;gBACD,MAAM,EAAE,CAAC,4BAAY,CAAC;aACvB;SACF;QACD,OAAO,EAAE,CAAC,uBAAe,CAAC;KAC3B,CAAC;GACW,aAAa,CAAG"}
1
+ {"version":3,"file":"keyword.module.js","sourceRoot":"","sources":["../../../src/keyword/keyword.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,wDAAoD;AACpD,0DAAsD;AACtD,uDAAmD;AAGtC,QAAA,eAAe,GAAG,iBAAiB,CAAC;AAwB1C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAtBzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,CAAC;QACtB,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,uBAAe;gBACxB,UAAU,EAAE,CAAC,YAA0B,EAAE,EAAE;oBACzC,MAAM,UAAU,GAAG,KAAK,IAAiC,EAAE;wBACzD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;wBACxE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;oBACnD,CAAC,CAAC;oBAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAAmB,EAAE;wBACvD,OAAO,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;oBAC3C,CAAC,CAAC;oBAEF,OAAO,IAAI,gCAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAClD,CAAC;gBACD,MAAM,EAAE,CAAC,4BAAY,CAAC;aACvB;SACF;QACD,OAAO,EAAE,CAAC,uBAAe,CAAC;KAC3B,CAAC;GACW,aAAa,CAAG"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const keyword_service_1 = require("./keyword.service");
5
+ const mockConfig = {
6
+ modes: {
7
+ PLAN: {
8
+ description: 'Task planning and design phase',
9
+ instructions: 'Design first approach.',
10
+ rules: ['rules/core.md'],
11
+ },
12
+ ACT: {
13
+ description: 'Actual task execution phase',
14
+ instructions: 'Red-Green-Refactor cycle.',
15
+ rules: ['rules/core.md', 'rules/project.md'],
16
+ },
17
+ EVAL: {
18
+ description: 'Result review and assessment phase',
19
+ instructions: 'Code quality review.',
20
+ rules: ['rules/core.md'],
21
+ },
22
+ },
23
+ defaultMode: 'PLAN',
24
+ };
25
+ const mockRulesContent = {
26
+ 'rules/core.md': '# Core Rules\nCore content here.',
27
+ 'rules/project.md': '# Project Rules\nProject content here.',
28
+ };
29
+ (0, vitest_1.describe)('KeywordService', () => {
30
+ let service;
31
+ let mockLoadConfig;
32
+ let mockLoadRule;
33
+ (0, vitest_1.beforeEach)(() => {
34
+ mockLoadConfig = vitest_1.vi.fn().mockResolvedValue(mockConfig);
35
+ mockLoadRule = vitest_1.vi.fn().mockImplementation((path) => {
36
+ const content = mockRulesContent[path];
37
+ if (content)
38
+ return Promise.resolve(content);
39
+ return Promise.reject(new Error(`File not found: ${path}`));
40
+ });
41
+ service = new keyword_service_1.KeywordService(mockLoadConfig, mockLoadRule);
42
+ });
43
+ (0, vitest_1.describe)('parseMode', () => {
44
+ (0, vitest_1.describe)('normal cases - each keyword', () => {
45
+ (0, vitest_1.it)('parses PLAN keyword', async () => {
46
+ const result = await service.parseMode('PLAN design auth feature');
47
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
48
+ (0, vitest_1.expect)(result.originalPrompt).toBe('design auth feature');
49
+ (0, vitest_1.expect)(result.instructions).toBe('Design first approach.');
50
+ (0, vitest_1.expect)(result.rules).toHaveLength(1);
51
+ (0, vitest_1.expect)(result.rules[0].name).toBe('rules/core.md');
52
+ (0, vitest_1.expect)(result.warnings).toBeUndefined();
53
+ });
54
+ (0, vitest_1.it)('parses ACT keyword', async () => {
55
+ const result = await service.parseMode('ACT implement login API');
56
+ (0, vitest_1.expect)(result.mode).toBe('ACT');
57
+ (0, vitest_1.expect)(result.originalPrompt).toBe('implement login API');
58
+ (0, vitest_1.expect)(result.instructions).toBe('Red-Green-Refactor cycle.');
59
+ (0, vitest_1.expect)(result.rules).toHaveLength(2);
60
+ });
61
+ (0, vitest_1.it)('parses EVAL keyword', async () => {
62
+ const result = await service.parseMode('EVAL review security');
63
+ (0, vitest_1.expect)(result.mode).toBe('EVAL');
64
+ (0, vitest_1.expect)(result.originalPrompt).toBe('review security');
65
+ (0, vitest_1.expect)(result.instructions).toBe('Code quality review.');
66
+ });
67
+ });
68
+ (0, vitest_1.describe)('case insensitive - each keyword', () => {
69
+ (0, vitest_1.it)('parses plan (lowercase)', async () => {
70
+ const result = await service.parseMode('plan design feature');
71
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
72
+ (0, vitest_1.expect)(result.originalPrompt).toBe('design feature');
73
+ });
74
+ (0, vitest_1.it)('parses act (lowercase)', async () => {
75
+ const result = await service.parseMode('act implement feature');
76
+ (0, vitest_1.expect)(result.mode).toBe('ACT');
77
+ });
78
+ (0, vitest_1.it)('parses eval (lowercase)', async () => {
79
+ const result = await service.parseMode('eval review code');
80
+ (0, vitest_1.expect)(result.mode).toBe('EVAL');
81
+ });
82
+ (0, vitest_1.it)('parses Plan (capitalized)', async () => {
83
+ const result = await service.parseMode('Plan design feature');
84
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
85
+ });
86
+ (0, vitest_1.it)('parses pLaN (mixed case)', async () => {
87
+ const result = await service.parseMode('pLaN design feature');
88
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
89
+ });
90
+ });
91
+ (0, vitest_1.describe)('default value cases', () => {
92
+ (0, vitest_1.it)('defaults to PLAN with warning when no keyword', async () => {
93
+ const result = await service.parseMode('design auth feature');
94
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
95
+ (0, vitest_1.expect)(result.originalPrompt).toBe('design auth feature');
96
+ (0, vitest_1.expect)(result.warnings).toContain('No keyword found, defaulting to PLAN');
97
+ });
98
+ (0, vitest_1.it)('defaults to PLAN with warning for empty string', async () => {
99
+ const result = await service.parseMode('');
100
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
101
+ (0, vitest_1.expect)(result.originalPrompt).toBe('');
102
+ (0, vitest_1.expect)(result.warnings).toContain('No keyword found, defaulting to PLAN');
103
+ });
104
+ (0, vitest_1.it)('defaults to PLAN with warning for whitespace only', async () => {
105
+ const result = await service.parseMode(' ');
106
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
107
+ (0, vitest_1.expect)(result.originalPrompt).toBe('');
108
+ (0, vitest_1.expect)(result.warnings).toContain('No keyword found, defaulting to PLAN');
109
+ });
110
+ });
111
+ (0, vitest_1.describe)('warning cases', () => {
112
+ (0, vitest_1.it)('uses first keyword with warning for multiple keywords', async () => {
113
+ const result = await service.parseMode('PLAN ACT implement feature');
114
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
115
+ (0, vitest_1.expect)(result.originalPrompt).toBe('ACT implement feature');
116
+ (0, vitest_1.expect)(result.warnings).toContain('Multiple keywords found, using first');
117
+ });
118
+ (0, vitest_1.it)('warns when no content after keyword', async () => {
119
+ const result = await service.parseMode('PLAN');
120
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
121
+ (0, vitest_1.expect)(result.originalPrompt).toBe('');
122
+ (0, vitest_1.expect)(result.warnings).toContain('No prompt content after keyword');
123
+ });
124
+ (0, vitest_1.it)('warns when only whitespace after keyword', async () => {
125
+ const result = await service.parseMode('PLAN ');
126
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
127
+ (0, vitest_1.expect)(result.originalPrompt).toBe('');
128
+ (0, vitest_1.expect)(result.warnings).toContain('No prompt content after keyword');
129
+ });
130
+ });
131
+ (0, vitest_1.describe)('edge cases', () => {
132
+ (0, vitest_1.it)('does not recognize keyword in middle of prompt', async () => {
133
+ const result = await service.parseMode('Please PLAN this feature');
134
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
135
+ (0, vitest_1.expect)(result.originalPrompt).toBe('Please PLAN this feature');
136
+ (0, vitest_1.expect)(result.warnings).toContain('No keyword found, defaulting to PLAN');
137
+ });
138
+ (0, vitest_1.it)('distinguishes from similar words (PLANNING)', async () => {
139
+ const result = await service.parseMode('PLANNING session today');
140
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
141
+ (0, vitest_1.expect)(result.originalPrompt).toBe('PLANNING session today');
142
+ (0, vitest_1.expect)(result.warnings).toContain('No keyword found, defaulting to PLAN');
143
+ });
144
+ (0, vitest_1.it)('distinguishes from similar words (ACTION)', async () => {
145
+ const result = await service.parseMode('ACTION items for today');
146
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
147
+ (0, vitest_1.expect)(result.originalPrompt).toBe('ACTION items for today');
148
+ (0, vitest_1.expect)(result.warnings).toContain('No keyword found, defaulting to PLAN');
149
+ });
150
+ (0, vitest_1.it)('handles special characters in prompt', async () => {
151
+ const result = await service.parseMode('PLAN design @feature #auth!');
152
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
153
+ (0, vitest_1.expect)(result.originalPrompt).toBe('design @feature #auth!');
154
+ });
155
+ (0, vitest_1.it)('handles newlines in prompt', async () => {
156
+ const result = await service.parseMode('PLAN design feature\nwith auth');
157
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
158
+ (0, vitest_1.expect)(result.originalPrompt).toBe('design feature\nwith auth');
159
+ });
160
+ (0, vitest_1.it)('handles tabs in prompt', async () => {
161
+ const result = await service.parseMode('PLAN\tdesign feature');
162
+ (0, vitest_1.expect)(result.mode).toBe('PLAN');
163
+ (0, vitest_1.expect)(result.originalPrompt).toBe('design feature');
164
+ });
165
+ });
166
+ });
167
+ (0, vitest_1.describe)('loadModeConfig', () => {
168
+ (0, vitest_1.it)('loads keyword-modes.json successfully', async () => {
169
+ const config = await service.loadModeConfig();
170
+ (0, vitest_1.expect)(config).toEqual(mockConfig);
171
+ (0, vitest_1.expect)(mockLoadConfig).toHaveBeenCalled();
172
+ });
173
+ (0, vitest_1.it)('uses default config when file not found', async () => {
174
+ mockLoadConfig = vitest_1.vi.fn().mockRejectedValue(new Error('File not found'));
175
+ service = new keyword_service_1.KeywordService(mockLoadConfig, mockLoadRule);
176
+ const config = await service.loadModeConfig();
177
+ (0, vitest_1.expect)(config.defaultMode).toBe('PLAN');
178
+ (0, vitest_1.expect)(config.modes.PLAN).toBeDefined();
179
+ (0, vitest_1.expect)(config.modes.ACT).toBeDefined();
180
+ (0, vitest_1.expect)(config.modes.EVAL).toBeDefined();
181
+ });
182
+ (0, vitest_1.it)('uses default config with warning for invalid JSON', async () => {
183
+ mockLoadConfig = vitest_1.vi.fn().mockRejectedValue(new SyntaxError('Invalid JSON'));
184
+ service = new keyword_service_1.KeywordService(mockLoadConfig, mockLoadRule);
185
+ const config = await service.loadModeConfig();
186
+ (0, vitest_1.expect)(config.defaultMode).toBe('PLAN');
187
+ });
188
+ });
189
+ (0, vitest_1.describe)('getRulesForMode', () => {
190
+ (0, vitest_1.it)('returns PLAN mode rules bundle', async () => {
191
+ const rules = await service.getRulesForMode('PLAN');
192
+ (0, vitest_1.expect)(rules).toHaveLength(1);
193
+ (0, vitest_1.expect)(rules[0].name).toBe('rules/core.md');
194
+ (0, vitest_1.expect)(rules[0].content).toBe('# Core Rules\nCore content here.');
195
+ });
196
+ (0, vitest_1.it)('returns ACT mode rules bundle', async () => {
197
+ const rules = await service.getRulesForMode('ACT');
198
+ (0, vitest_1.expect)(rules).toHaveLength(2);
199
+ (0, vitest_1.expect)(rules[0].name).toBe('rules/core.md');
200
+ (0, vitest_1.expect)(rules[1].name).toBe('rules/project.md');
201
+ });
202
+ (0, vitest_1.it)('returns EVAL mode rules bundle', async () => {
203
+ const rules = await service.getRulesForMode('EVAL');
204
+ (0, vitest_1.expect)(rules).toHaveLength(1);
205
+ (0, vitest_1.expect)(rules[0].name).toBe('rules/core.md');
206
+ });
207
+ (0, vitest_1.it)('skips missing rule file with warning', async () => {
208
+ mockLoadConfig = vitest_1.vi.fn().mockResolvedValue({
209
+ ...mockConfig,
210
+ modes: {
211
+ ...mockConfig.modes,
212
+ PLAN: {
213
+ ...mockConfig.modes.PLAN,
214
+ rules: ['rules/core.md', 'rules/missing.md'],
215
+ },
216
+ },
217
+ });
218
+ service = new keyword_service_1.KeywordService(mockLoadConfig, mockLoadRule);
219
+ const rules = await service.getRulesForMode('PLAN');
220
+ (0, vitest_1.expect)(rules).toHaveLength(1);
221
+ (0, vitest_1.expect)(rules[0].name).toBe('rules/core.md');
222
+ });
223
+ });
224
+ });
225
+ //# sourceMappingURL=keyword.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyword.service.spec.js","sourceRoot":"","sources":["../../../src/keyword/keyword.service.spec.ts"],"names":[],"mappings":"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"}
package/dist/src/main.js CHANGED
File without changes
@@ -12,13 +12,12 @@ const mcp_service_1 = require("./mcp.service");
12
12
  const mcp_controller_1 = require("./mcp.controller");
13
13
  const rules_module_1 = require("../rules/rules.module");
14
14
  const keyword_module_1 = require("../keyword/keyword.module");
15
- const config_module_1 = require("../config/config.module");
16
15
  let McpModule = class McpModule {
17
16
  };
18
17
  exports.McpModule = McpModule;
19
18
  exports.McpModule = McpModule = __decorate([
20
19
  (0, common_1.Module)({
21
- imports: [rules_module_1.RulesModule, keyword_module_1.KeywordModule, config_module_1.CodingBuddyConfigModule],
20
+ imports: [rules_module_1.RulesModule, keyword_module_1.KeywordModule],
22
21
  controllers: [mcp_controller_1.McpController],
23
22
  providers: [mcp_service_1.McpService],
24
23
  exports: [mcp_service_1.McpService],
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../../src/mcp/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+CAA2C;AAC3C,qDAAiD;AACjD,wDAAoD;AACpD,8DAA0D;AAC1D,2DAAkE;AAQ3D,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IANrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,EAAE,8BAAa,EAAE,uCAAuB,CAAC;QAC9D,WAAW,EAAE,CAAC,8BAAa,CAAC;QAC5B,SAAS,EAAE,CAAC,wBAAU,CAAC;QACvB,OAAO,EAAE,CAAC,wBAAU,CAAC;KACtB,CAAC;GACW,SAAS,CAAG"}
1
+ {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../../src/mcp/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+CAA2C;AAC3C,qDAAiD;AACjD,wDAAoD;AACpD,8DAA0D;AAQnD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IANrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,EAAE,8BAAa,CAAC;QACrC,WAAW,EAAE,CAAC,8BAAa,CAAC;QAC5B,SAAS,EAAE,CAAC,wBAAU,CAAC;QACvB,OAAO,EAAE,CAAC,wBAAU,CAAC;KACtB,CAAC;GACW,SAAS,CAAG"}
@@ -2,14 +2,12 @@ import { OnModuleInit } from '@nestjs/common';
2
2
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
3
  import { RulesService } from '../rules/rules.service';
4
4
  import { KeywordService } from '../keyword/keyword.service';
5
- import { ConfigService } from '../config/config.service';
6
5
  export declare class McpService implements OnModuleInit {
7
6
  private rulesService;
8
7
  private keywordService;
9
- private configService;
10
8
  private server;
11
9
  private readonly logger;
12
- constructor(rulesService: RulesService, keywordService: KeywordService, configService: ConfigService);
10
+ constructor(rulesService: RulesService, keywordService: KeywordService);
13
11
  onModuleInit(): void;
14
12
  startStdio(): Promise<void>;
15
13
  getServer(): Server<{
@@ -18,31 +16,24 @@ export declare class McpService implements OnModuleInit {
18
16
  [x: string]: unknown;
19
17
  _meta?: {
20
18
  [x: string]: unknown;
21
- progressToken?: string | number | undefined;
22
- } | undefined;
23
- } | undefined;
19
+ progressToken?: string | number;
20
+ };
21
+ };
24
22
  }, {
25
23
  method: string;
26
24
  params?: {
27
25
  [x: string]: unknown;
28
26
  _meta?: {
29
27
  [x: string]: unknown;
30
- } | undefined;
31
- } | undefined;
28
+ };
29
+ };
32
30
  }, {
33
31
  [x: string]: unknown;
34
32
  _meta?: {
35
33
  [x: string]: unknown;
36
- } | undefined;
34
+ };
37
35
  }>;
38
36
  private registerResources;
39
37
  private registerTools;
40
38
  private registerPrompts;
41
- private handleSearchRules;
42
- private handleGetAgentDetails;
43
- private handleParseMode;
44
- private handleGetProjectConfig;
45
- private jsonResponse;
46
- private errorResponse;
47
- private formatProjectContext;
48
39
  }