@corbat-tech/coding-standards-mcp 1.0.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 (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +371 -0
  3. package/assets/demo.gif +0 -0
  4. package/dist/agent.d.ts +53 -0
  5. package/dist/agent.d.ts.map +1 -0
  6. package/dist/agent.js +629 -0
  7. package/dist/agent.js.map +1 -0
  8. package/dist/cli/init.d.ts +3 -0
  9. package/dist/cli/init.d.ts.map +1 -0
  10. package/dist/cli/init.js +651 -0
  11. package/dist/cli/init.js.map +1 -0
  12. package/dist/config.d.ts +73 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +105 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/index.d.ts +3 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +73 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/profiles.d.ts +39 -0
  21. package/dist/profiles.d.ts.map +1 -0
  22. package/dist/profiles.js +526 -0
  23. package/dist/profiles.js.map +1 -0
  24. package/dist/prompts-legacy.d.ts +25 -0
  25. package/dist/prompts-legacy.d.ts.map +1 -0
  26. package/dist/prompts-legacy.js +600 -0
  27. package/dist/prompts-legacy.js.map +1 -0
  28. package/dist/prompts-v2.d.ts +30 -0
  29. package/dist/prompts-v2.d.ts.map +1 -0
  30. package/dist/prompts-v2.js +310 -0
  31. package/dist/prompts-v2.js.map +1 -0
  32. package/dist/prompts.d.ts +30 -0
  33. package/dist/prompts.d.ts.map +1 -0
  34. package/dist/prompts.js +310 -0
  35. package/dist/prompts.js.map +1 -0
  36. package/dist/resources.d.ts +18 -0
  37. package/dist/resources.d.ts.map +1 -0
  38. package/dist/resources.js +95 -0
  39. package/dist/resources.js.map +1 -0
  40. package/dist/tools-legacy.d.ts +196 -0
  41. package/dist/tools-legacy.d.ts.map +1 -0
  42. package/dist/tools-legacy.js +1230 -0
  43. package/dist/tools-legacy.js.map +1 -0
  44. package/dist/tools-v2.d.ts +92 -0
  45. package/dist/tools-v2.d.ts.map +1 -0
  46. package/dist/tools-v2.js +410 -0
  47. package/dist/tools-v2.js.map +1 -0
  48. package/dist/tools.d.ts +92 -0
  49. package/dist/tools.d.ts.map +1 -0
  50. package/dist/tools.js +410 -0
  51. package/dist/tools.js.map +1 -0
  52. package/dist/types.d.ts +3054 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +515 -0
  55. package/dist/types.js.map +1 -0
  56. package/dist/utils/index.d.ts +6 -0
  57. package/dist/utils/index.d.ts.map +1 -0
  58. package/dist/utils/index.js +5 -0
  59. package/dist/utils/index.js.map +1 -0
  60. package/dist/utils/retry.d.ts +44 -0
  61. package/dist/utils/retry.d.ts.map +1 -0
  62. package/dist/utils/retry.js +74 -0
  63. package/dist/utils/retry.js.map +1 -0
  64. package/package.json +79 -0
  65. package/profiles/README.md +199 -0
  66. package/profiles/custom/.gitkeep +2 -0
  67. package/profiles/templates/_template.yaml +159 -0
  68. package/profiles/templates/angular.yaml +494 -0
  69. package/profiles/templates/java-spring-backend.yaml +512 -0
  70. package/profiles/templates/minimal.yaml +102 -0
  71. package/profiles/templates/nodejs.yaml +338 -0
  72. package/profiles/templates/python.yaml +340 -0
  73. package/profiles/templates/react.yaml +331 -0
  74. package/profiles/templates/vue.yaml +598 -0
  75. package/standards/architecture/ddd.md +173 -0
  76. package/standards/architecture/hexagonal.md +97 -0
  77. package/standards/cicd/github-actions.md +567 -0
  78. package/standards/clean-code/naming.md +175 -0
  79. package/standards/clean-code/principles.md +179 -0
  80. package/standards/containerization/dockerfile.md +419 -0
  81. package/standards/database/selection-guide.md +443 -0
  82. package/standards/documentation/guidelines.md +189 -0
  83. package/standards/event-driven/domain-events.md +527 -0
  84. package/standards/kubernetes/deployment.md +518 -0
  85. package/standards/observability/guidelines.md +665 -0
  86. package/standards/project-setup/initialization-checklist.md +650 -0
  87. package/standards/spring-boot/best-practices.md +598 -0
  88. package/standards/testing/guidelines.md +559 -0
  89. package/standards/workflow/llm-development-workflow.md +542 -0
@@ -0,0 +1,92 @@
1
+ /**
2
+ * SIMPLIFIED TOOL DEFINITIONS (5 tools instead of 13)
3
+ *
4
+ * Design principles:
5
+ * - One primary tool (get_context) that does everything
6
+ * - Supporting tools for specific use cases
7
+ * - Names are short and intuitive
8
+ */
9
+ export declare const tools: ({
10
+ name: string;
11
+ description: string;
12
+ inputSchema: {
13
+ type: "object";
14
+ properties: {
15
+ task: {
16
+ type: string;
17
+ description: string;
18
+ };
19
+ project_dir: {
20
+ type: string;
21
+ description: string;
22
+ };
23
+ code?: undefined;
24
+ task_type?: undefined;
25
+ query?: undefined;
26
+ };
27
+ required: string[];
28
+ };
29
+ } | {
30
+ name: string;
31
+ description: string;
32
+ inputSchema: {
33
+ type: "object";
34
+ properties: {
35
+ code: {
36
+ type: string;
37
+ description: string;
38
+ };
39
+ task_type: {
40
+ type: string;
41
+ enum: string[];
42
+ description: string;
43
+ };
44
+ task?: undefined;
45
+ project_dir?: undefined;
46
+ query?: undefined;
47
+ };
48
+ required: string[];
49
+ };
50
+ } | {
51
+ name: string;
52
+ description: string;
53
+ inputSchema: {
54
+ type: "object";
55
+ properties: {
56
+ query: {
57
+ type: string;
58
+ description: string;
59
+ };
60
+ task?: undefined;
61
+ project_dir?: undefined;
62
+ code?: undefined;
63
+ task_type?: undefined;
64
+ };
65
+ required: string[];
66
+ };
67
+ } | {
68
+ name: string;
69
+ description: string;
70
+ inputSchema: {
71
+ type: "object";
72
+ properties: {
73
+ task?: undefined;
74
+ project_dir?: undefined;
75
+ code?: undefined;
76
+ task_type?: undefined;
77
+ query?: undefined;
78
+ };
79
+ required?: undefined;
80
+ };
81
+ })[];
82
+ /**
83
+ * Handle tool calls.
84
+ */
85
+ export declare function handleToolCall(name: string, args: Record<string, unknown>): Promise<{
86
+ content: Array<{
87
+ type: 'text';
88
+ text: string;
89
+ }>;
90
+ isError?: boolean;
91
+ }>;
92
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8EjB,CAAC;AAmBF;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAoBhF"}
package/dist/tools.js ADDED
@@ -0,0 +1,410 @@
1
+ import { z } from 'zod';
2
+ import { classifyTaskType, detectProjectStack, getGuardrails, getProjectRules, loadProjectConfig } from './agent.js';
3
+ import { config } from './config.js';
4
+ import { getProfile, listProfiles, loadStandards } from './profiles.js';
5
+ /**
6
+ * SIMPLIFIED TOOL DEFINITIONS (5 tools instead of 13)
7
+ *
8
+ * Design principles:
9
+ * - One primary tool (get_context) that does everything
10
+ * - Supporting tools for specific use cases
11
+ * - Names are short and intuitive
12
+ */
13
+ export const tools = [
14
+ // PRIMARY TOOL - Everything in one call
15
+ {
16
+ name: 'get_context',
17
+ description: 'Get COMPLETE coding standards context for a task. Returns everything needed: detected stack, guardrails, architecture, naming, and workflow. This is the PRIMARY tool - use it BEFORE any implementation.',
18
+ inputSchema: {
19
+ type: 'object',
20
+ properties: {
21
+ task: {
22
+ type: 'string',
23
+ description: 'What you\'re implementing (e.g., "Create payment service", "Fix login bug")',
24
+ },
25
+ project_dir: {
26
+ type: 'string',
27
+ description: 'Project directory for auto-detection (optional)',
28
+ },
29
+ },
30
+ required: ['task'],
31
+ },
32
+ },
33
+ // VALIDATE - Check code against standards
34
+ {
35
+ name: 'validate',
36
+ description: 'Validate code against coding standards. Returns issues, suggestions, and compliance score.',
37
+ inputSchema: {
38
+ type: 'object',
39
+ properties: {
40
+ code: {
41
+ type: 'string',
42
+ description: 'The code to validate',
43
+ },
44
+ task_type: {
45
+ type: 'string',
46
+ enum: ['feature', 'bugfix', 'refactor', 'test'],
47
+ description: 'Type of task for context-aware validation (optional)',
48
+ },
49
+ },
50
+ required: ['code'],
51
+ },
52
+ },
53
+ // SEARCH - Find specific topics in documentation
54
+ {
55
+ name: 'search',
56
+ description: 'Search standards documentation for specific topics (e.g., "kafka", "testing", "docker").',
57
+ inputSchema: {
58
+ type: 'object',
59
+ properties: {
60
+ query: {
61
+ type: 'string',
62
+ description: 'Search query',
63
+ },
64
+ },
65
+ required: ['query'],
66
+ },
67
+ },
68
+ // PROFILES - List available profiles
69
+ {
70
+ name: 'profiles',
71
+ description: 'List all available coding standards profiles.',
72
+ inputSchema: {
73
+ type: 'object',
74
+ properties: {},
75
+ },
76
+ },
77
+ // HEALTH - Server status
78
+ {
79
+ name: 'health',
80
+ description: 'Check server status and loaded configuration.',
81
+ inputSchema: {
82
+ type: 'object',
83
+ properties: {},
84
+ },
85
+ },
86
+ ];
87
+ /**
88
+ * Input schemas for validation.
89
+ */
90
+ const GetContextSchema = z.object({
91
+ task: z.string(),
92
+ project_dir: z.string().optional(),
93
+ });
94
+ const ValidateSchema = z.object({
95
+ code: z.string(),
96
+ task_type: z.enum(['feature', 'bugfix', 'refactor', 'test']).optional(),
97
+ });
98
+ const SearchSchema = z.object({
99
+ query: z.string(),
100
+ });
101
+ /**
102
+ * Handle tool calls.
103
+ */
104
+ export async function handleToolCall(name, args) {
105
+ switch (name) {
106
+ case 'get_context':
107
+ return handleGetContext(args);
108
+ case 'validate':
109
+ return handleValidate(args);
110
+ case 'search':
111
+ return handleSearch(args);
112
+ case 'profiles':
113
+ return handleProfiles();
114
+ case 'health':
115
+ return handleHealth();
116
+ default:
117
+ return {
118
+ content: [
119
+ { type: 'text', text: `Unknown tool: ${name}. Available: get_context, validate, search, profiles, health` },
120
+ ],
121
+ isError: true,
122
+ };
123
+ }
124
+ }
125
+ /**
126
+ * PRIMARY TOOL: Get complete context for a task.
127
+ */
128
+ async function handleGetContext(args) {
129
+ const { task, project_dir } = GetContextSchema.parse(args);
130
+ // Classify task type
131
+ const taskType = classifyTaskType(task);
132
+ // Auto-detect project stack if directory provided
133
+ let detectedStack = null;
134
+ let projectConfig = null;
135
+ if (project_dir) {
136
+ detectedStack = await detectProjectStack(project_dir);
137
+ projectConfig = await loadProjectConfig(project_dir);
138
+ }
139
+ // Determine profile (priority: project config > detected > default)
140
+ const profileId = projectConfig?.profile || detectedStack?.suggestedProfile || config.defaultProfile;
141
+ const profile = await getProfile(profileId);
142
+ if (!profile) {
143
+ return {
144
+ content: [
145
+ {
146
+ type: 'text',
147
+ text: `Profile "${profileId}" not found.\n\nAvailable profiles:\n${(await listProfiles()).map((p) => `- ${p.id}`).join('\n')}\n\nRun \`corbat-init\` in your project to create a custom profile.`,
148
+ },
149
+ ],
150
+ isError: true,
151
+ };
152
+ }
153
+ // Get guardrails and rules
154
+ const guardrails = getGuardrails(taskType, projectConfig);
155
+ const projectRules = getProjectRules(taskType, projectConfig);
156
+ // Build concise, scannable output
157
+ const lines = [`# Context for: ${task}`, '', '---', ''];
158
+ // Stack Detection (concise)
159
+ if (detectedStack) {
160
+ const stackParts = [detectedStack.language];
161
+ if (detectedStack.framework)
162
+ stackParts.push(detectedStack.framework);
163
+ if (detectedStack.buildTool)
164
+ stackParts.push(detectedStack.buildTool);
165
+ lines.push(`**Stack:** ${stackParts.join(' · ')}`);
166
+ }
167
+ lines.push(`**Task type:** ${taskType.toUpperCase()}`);
168
+ lines.push(`**Profile:** ${profileId}`);
169
+ lines.push('');
170
+ // Guardrails (essential, concise)
171
+ lines.push('---', '', '## Guardrails', '');
172
+ lines.push('**MUST:**');
173
+ for (const rule of guardrails.mandatory.slice(0, 5)) {
174
+ lines.push(`- ${rule}`);
175
+ }
176
+ lines.push('');
177
+ lines.push('**AVOID:**');
178
+ for (const rule of guardrails.avoid.slice(0, 4)) {
179
+ lines.push(`- ${rule}`);
180
+ }
181
+ lines.push('');
182
+ // Project-specific rules (if any)
183
+ if (projectRules.length > 0) {
184
+ lines.push('**PROJECT RULES:**');
185
+ for (const rule of projectRules) {
186
+ lines.push(`- ${rule}`);
187
+ }
188
+ lines.push('');
189
+ }
190
+ // Quick Reference (most important settings)
191
+ lines.push('---', '', '## Quick Reference', '');
192
+ if (profile.codeQuality) {
193
+ lines.push(`- Max method lines: ${profile.codeQuality.maxMethodLines}`);
194
+ lines.push(`- Max class lines: ${profile.codeQuality.maxClassLines}`);
195
+ lines.push(`- Min test coverage: ${profile.codeQuality.minimumTestCoverage}%`);
196
+ }
197
+ if (profile.architecture) {
198
+ lines.push(`- Architecture: ${profile.architecture.type}`);
199
+ }
200
+ if (profile.ddd?.enabled) {
201
+ lines.push('- DDD: Enabled');
202
+ }
203
+ if (profile.testing) {
204
+ lines.push(`- Testing: ${profile.testing.framework || 'standard'}`);
205
+ }
206
+ lines.push('');
207
+ // Naming conventions (concise)
208
+ if (profile.naming) {
209
+ lines.push('---', '', '## Naming', '');
210
+ const naming = profile.naming;
211
+ if (naming.general && typeof naming.general === 'object') {
212
+ for (const [key, value] of Object.entries(naming.general)) {
213
+ lines.push(`- **${key}:** ${value}`);
214
+ }
215
+ }
216
+ if (naming.suffixes && typeof naming.suffixes === 'object') {
217
+ lines.push('');
218
+ lines.push('**Suffixes:**');
219
+ for (const [key, value] of Object.entries(naming.suffixes)) {
220
+ lines.push(`- ${key}: \`${value}\``);
221
+ }
222
+ }
223
+ lines.push('');
224
+ }
225
+ // Workflow reminder (brief)
226
+ lines.push('---', '', '## Workflow', '');
227
+ lines.push('```');
228
+ lines.push('1. CLARIFY → Ask if unclear');
229
+ lines.push('2. PLAN → Task checklist');
230
+ lines.push('3. BUILD → TDD: Test → Code → Refactor');
231
+ lines.push('4. VERIFY → Tests pass, linter clean');
232
+ lines.push('5. REVIEW → Self-check as expert');
233
+ lines.push('```');
234
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
235
+ }
236
+ /**
237
+ * Validate code against standards.
238
+ */
239
+ async function handleValidate(args) {
240
+ const { code, task_type } = ValidateSchema.parse(args);
241
+ const profileId = config.defaultProfile;
242
+ const profile = await getProfile(profileId);
243
+ if (!profile) {
244
+ return {
245
+ content: [{ type: 'text', text: `Profile not found: ${profileId}` }],
246
+ isError: true,
247
+ };
248
+ }
249
+ const guardrails = task_type ? getGuardrails(task_type, null) : null;
250
+ const lines = [
251
+ '# Code Validation',
252
+ '',
253
+ '## Code',
254
+ '```',
255
+ code.slice(0, 2000) + (code.length > 2000 ? '\n...(truncated)' : ''),
256
+ '```',
257
+ '',
258
+ '---',
259
+ '',
260
+ '## Validation Criteria',
261
+ '',
262
+ ];
263
+ // Code quality thresholds
264
+ if (profile.codeQuality) {
265
+ lines.push('**Thresholds:**');
266
+ lines.push(`- Max method lines: ${profile.codeQuality.maxMethodLines}`);
267
+ lines.push(`- Max class lines: ${profile.codeQuality.maxClassLines}`);
268
+ lines.push(`- Max parameters: ${profile.codeQuality.maxMethodParameters}`);
269
+ lines.push(`- Min coverage: ${profile.codeQuality.minimumTestCoverage}%`);
270
+ lines.push('');
271
+ }
272
+ // Guardrails if task type specified
273
+ if (guardrails) {
274
+ lines.push(`**${task_type?.toUpperCase()} Guardrails:**`);
275
+ lines.push('');
276
+ lines.push('Must:');
277
+ for (const rule of guardrails.mandatory.slice(0, 4)) {
278
+ lines.push(`- ${rule}`);
279
+ }
280
+ lines.push('');
281
+ lines.push('Avoid:');
282
+ for (const rule of guardrails.avoid.slice(0, 3)) {
283
+ lines.push(`- ${rule}`);
284
+ }
285
+ lines.push('');
286
+ }
287
+ // Naming conventions
288
+ if (profile.naming) {
289
+ lines.push('**Naming:**');
290
+ const naming = profile.naming;
291
+ if (naming.general && typeof naming.general === 'object') {
292
+ for (const [key, value] of Object.entries(naming.general)) {
293
+ lines.push(`- ${key}: ${value}`);
294
+ }
295
+ }
296
+ lines.push('');
297
+ }
298
+ lines.push('---', '');
299
+ lines.push('## Review Checklist', '');
300
+ lines.push('Analyze the code and report:', '');
301
+ lines.push('1. **CRITICAL** - Must fix (bugs, security, violations)');
302
+ lines.push('2. **WARNINGS** - Should fix (style, best practices)');
303
+ lines.push('3. **Score** - Compliance 0-100 with justification');
304
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
305
+ }
306
+ /**
307
+ * Search standards documentation.
308
+ */
309
+ async function handleSearch(args) {
310
+ const { query } = SearchSchema.parse(args);
311
+ if (!query.trim()) {
312
+ return {
313
+ content: [{ type: 'text', text: 'Please provide a search query.' }],
314
+ isError: true,
315
+ };
316
+ }
317
+ const standards = await loadStandards();
318
+ const queryLower = query.toLowerCase();
319
+ const results = [];
320
+ for (const standard of standards) {
321
+ const contentLower = standard.content.toLowerCase();
322
+ if (contentLower.includes(queryLower)) {
323
+ // Find the relevant section
324
+ const lines = standard.content.split('\n');
325
+ let excerpt = '';
326
+ for (let i = 0; i < lines.length; i++) {
327
+ if (lines[i].toLowerCase().includes(queryLower)) {
328
+ // Get context around match
329
+ const start = Math.max(0, i - 2);
330
+ const end = Math.min(lines.length, i + 5);
331
+ excerpt = lines.slice(start, end).join('\n');
332
+ break;
333
+ }
334
+ }
335
+ results.push({
336
+ name: standard.name,
337
+ category: standard.category,
338
+ excerpt: excerpt.slice(0, 500),
339
+ });
340
+ }
341
+ }
342
+ if (results.length === 0) {
343
+ return {
344
+ content: [
345
+ {
346
+ type: 'text',
347
+ text: `No results for "${query}".\n\nTry: testing, kafka, docker, kubernetes, logging, metrics, archunit, flyway`,
348
+ },
349
+ ],
350
+ };
351
+ }
352
+ const output = [`# Results for "${query}"`, ''];
353
+ for (const result of results.slice(0, 5)) {
354
+ output.push(`## ${result.name}`, '');
355
+ output.push(result.excerpt, '');
356
+ output.push('---', '');
357
+ }
358
+ return { content: [{ type: 'text', text: output.join('\n') }] };
359
+ }
360
+ /**
361
+ * List available profiles.
362
+ */
363
+ async function handleProfiles() {
364
+ const profiles = await listProfiles();
365
+ if (profiles.length === 0) {
366
+ return {
367
+ content: [{ type: 'text', text: 'No profiles found. Run `corbat-init` to create one.' }],
368
+ };
369
+ }
370
+ const lines = ['# Available Profiles', ''];
371
+ for (const { id, profile } of profiles) {
372
+ const isDefault = id === config.defaultProfile ? ' (default)' : '';
373
+ lines.push(`**${id}**${isDefault}`);
374
+ lines.push(`${profile.description || 'No description'}`);
375
+ lines.push('');
376
+ }
377
+ lines.push('---', '');
378
+ lines.push('Use with: `get_context` tool or specify profile in `.corbat.json`');
379
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
380
+ }
381
+ /**
382
+ * Health check.
383
+ */
384
+ async function handleHealth() {
385
+ const startTime = Date.now();
386
+ try {
387
+ const profiles = await listProfiles();
388
+ const standards = await loadStandards();
389
+ const loadTimeMs = Date.now() - startTime;
390
+ const lines = [
391
+ '# Corbat Health',
392
+ '',
393
+ '**Status:** OK',
394
+ `**Version:** ${config.serverVersion}`,
395
+ `**Load time:** ${loadTimeMs}ms`,
396
+ '',
397
+ `**Profiles:** ${profiles.length} (${profiles.map((p) => p.id).join(', ')})`,
398
+ `**Standards:** ${standards.length} documents`,
399
+ `**Default profile:** ${config.defaultProfile}`,
400
+ ];
401
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
402
+ }
403
+ catch (error) {
404
+ const errorMessage = error instanceof Error ? error.message : String(error);
405
+ return {
406
+ content: [{ type: 'text', text: `# Corbat Health\n\n**Status:** ERROR\n**Error:** ${errorMessage}` }],
407
+ };
408
+ }
409
+ }
410
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}