cmp-standards 2.7.0 → 2.8.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 (162) hide show
  1. package/README.md +633 -633
  2. package/dist/cache/EmbeddingCache.d.ts +110 -0
  3. package/dist/cache/EmbeddingCache.d.ts.map +1 -0
  4. package/dist/cache/EmbeddingCache.js +239 -0
  5. package/dist/cache/EmbeddingCache.js.map +1 -0
  6. package/dist/cache/index.d.ts +6 -0
  7. package/dist/cache/index.d.ts.map +1 -0
  8. package/dist/cache/index.js +6 -0
  9. package/dist/cache/index.js.map +1 -0
  10. package/dist/cli/index.js +0 -0
  11. package/dist/db/cloud.d.ts +1 -0
  12. package/dist/db/cloud.d.ts.map +1 -1
  13. package/dist/db/drizzle-client.d.ts +10 -1
  14. package/dist/db/drizzle-client.d.ts.map +1 -1
  15. package/dist/db/drizzle-client.js +57 -3
  16. package/dist/db/drizzle-client.js.map +1 -1
  17. package/dist/db/errors.d.ts +13 -1
  18. package/dist/db/errors.d.ts.map +1 -1
  19. package/dist/db/errors.js +49 -5
  20. package/dist/db/errors.js.map +1 -1
  21. package/dist/db/migrations.d.ts +42 -0
  22. package/dist/db/migrations.d.ts.map +1 -0
  23. package/dist/db/migrations.js +173 -0
  24. package/dist/db/migrations.js.map +1 -0
  25. package/dist/db/turso-client.d.ts +15 -3
  26. package/dist/db/turso-client.d.ts.map +1 -1
  27. package/dist/db/turso-client.js +50 -39
  28. package/dist/db/turso-client.js.map +1 -1
  29. package/dist/eslint/rules/no-async-useeffect.js +6 -6
  30. package/dist/events/EventBus.d.ts +97 -0
  31. package/dist/events/EventBus.d.ts.map +1 -0
  32. package/dist/events/EventBus.js +256 -0
  33. package/dist/events/EventBus.js.map +1 -0
  34. package/dist/events/index.d.ts +7 -0
  35. package/dist/events/index.d.ts.map +1 -0
  36. package/dist/events/index.js +9 -0
  37. package/dist/events/index.js.map +1 -0
  38. package/dist/events/types.d.ts +989 -0
  39. package/dist/events/types.d.ts.map +1 -0
  40. package/dist/events/types.js +136 -0
  41. package/dist/events/types.js.map +1 -0
  42. package/dist/experts/ConsensusEngine.d.ts +57 -0
  43. package/dist/experts/ConsensusEngine.d.ts.map +1 -0
  44. package/dist/experts/ConsensusEngine.js +146 -0
  45. package/dist/experts/ConsensusEngine.js.map +1 -0
  46. package/dist/experts/ExpertPanelService.d.ts +84 -0
  47. package/dist/experts/ExpertPanelService.d.ts.map +1 -0
  48. package/dist/experts/ExpertPanelService.js +204 -0
  49. package/dist/experts/ExpertPanelService.js.map +1 -0
  50. package/dist/experts/ExpertRouter.d.ts +68 -0
  51. package/dist/experts/ExpertRouter.d.ts.map +1 -0
  52. package/dist/experts/ExpertRouter.js +374 -0
  53. package/dist/experts/ExpertRouter.js.map +1 -0
  54. package/dist/experts/VoteCollector.d.ts +58 -0
  55. package/dist/experts/VoteCollector.d.ts.map +1 -0
  56. package/dist/experts/VoteCollector.js +146 -0
  57. package/dist/experts/VoteCollector.js.map +1 -0
  58. package/dist/experts/index.d.ts +9 -0
  59. package/dist/experts/index.d.ts.map +1 -0
  60. package/dist/experts/index.js +13 -0
  61. package/dist/experts/index.js.map +1 -0
  62. package/dist/hooks/cloud-pre-tool-use.js +20 -20
  63. package/dist/hooks/expert-review.d.ts +74 -0
  64. package/dist/hooks/expert-review.d.ts.map +1 -0
  65. package/dist/hooks/expert-review.js +220 -0
  66. package/dist/hooks/expert-review.js.map +1 -0
  67. package/dist/hooks/index.d.ts +1 -0
  68. package/dist/hooks/index.d.ts.map +1 -1
  69. package/dist/hooks/index.js +2 -0
  70. package/dist/hooks/index.js.map +1 -1
  71. package/dist/index.d.ts +13 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +22 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/interfaces/index.d.ts +450 -0
  76. package/dist/interfaces/index.d.ts.map +1 -0
  77. package/dist/interfaces/index.js +50 -0
  78. package/dist/interfaces/index.js.map +1 -0
  79. package/dist/mcp/schemas.d.ts +278 -0
  80. package/dist/mcp/schemas.d.ts.map +1 -0
  81. package/dist/mcp/schemas.js +166 -0
  82. package/dist/mcp/schemas.js.map +1 -0
  83. package/dist/mcp/server.d.ts.map +1 -1
  84. package/dist/mcp/server.js +14 -3
  85. package/dist/mcp/server.js.map +1 -1
  86. package/dist/patterns/feedback-loop.d.ts +264 -0
  87. package/dist/patterns/feedback-loop.d.ts.map +1 -0
  88. package/dist/patterns/feedback-loop.js +329 -0
  89. package/dist/patterns/feedback-loop.js.map +1 -0
  90. package/dist/patterns/index.d.ts +9 -0
  91. package/dist/patterns/index.d.ts.map +1 -0
  92. package/dist/patterns/index.js +9 -0
  93. package/dist/patterns/index.js.map +1 -0
  94. package/dist/patterns/lifecycle.d.ts +88 -0
  95. package/dist/patterns/lifecycle.d.ts.map +1 -0
  96. package/dist/patterns/lifecycle.js +284 -0
  97. package/dist/patterns/lifecycle.js.map +1 -0
  98. package/dist/patterns/registry.d.ts +142 -0
  99. package/dist/patterns/registry.d.ts.map +1 -0
  100. package/dist/patterns/registry.js +442 -0
  101. package/dist/patterns/registry.js.map +1 -0
  102. package/dist/performance/Debouncer.d.ts +91 -0
  103. package/dist/performance/Debouncer.d.ts.map +1 -0
  104. package/dist/performance/Debouncer.js +198 -0
  105. package/dist/performance/Debouncer.js.map +1 -0
  106. package/dist/performance/MemoryDecay.d.ts +82 -0
  107. package/dist/performance/MemoryDecay.d.ts.map +1 -0
  108. package/dist/performance/MemoryDecay.js +153 -0
  109. package/dist/performance/MemoryDecay.js.map +1 -0
  110. package/dist/performance/index.d.ts +7 -0
  111. package/dist/performance/index.d.ts.map +1 -0
  112. package/dist/performance/index.js +9 -0
  113. package/dist/performance/index.js.map +1 -0
  114. package/dist/schema/expert-types.d.ts +395 -0
  115. package/dist/schema/expert-types.d.ts.map +1 -0
  116. package/dist/schema/expert-types.js +250 -0
  117. package/dist/schema/expert-types.js.map +1 -0
  118. package/dist/services/ContextGenerator.js +7 -7
  119. package/dist/services/PlanManager.d.ts +1 -1
  120. package/dist/services/PlanManager.d.ts.map +1 -1
  121. package/dist/services/PlanManager.js +26 -6
  122. package/dist/services/PlanManager.js.map +1 -1
  123. package/dist/services/ProjectScaffold.js +76 -76
  124. package/dist/services/memory-router.js +35 -35
  125. package/dist/services/pattern-tracker.js +90 -90
  126. package/dist/services/semantic-search.js +2 -2
  127. package/package.json +105 -104
  128. package/standards/README.md +50 -50
  129. package/standards/experts/expert-routing.md +215 -215
  130. package/standards/general/code-quality.md +86 -86
  131. package/standards/general/memory-usage.md +205 -205
  132. package/standards/general/sync-workflow.md +235 -235
  133. package/standards/general/workflow.md +82 -82
  134. package/standards/hooks/mandatory-tracking.md +446 -446
  135. package/standards/infrastructure/cloud-database.md +287 -287
  136. package/standards/mcp/server-design.md +243 -243
  137. package/standards/mcp/tool-patterns.md +354 -354
  138. package/standards/skills/skill-structure.md +286 -286
  139. package/standards/skills/workflow-design.md +323 -323
  140. package/standards/tools/tool-design.md +297 -297
  141. package/templates/agents/architecture-expert.md +61 -61
  142. package/templates/agents/database-expert.md +62 -62
  143. package/templates/agents/documentation-expert.md +57 -57
  144. package/templates/agents/memory-expert.md +88 -88
  145. package/templates/agents/performance-expert.md +61 -61
  146. package/templates/agents/security-expert.md +59 -59
  147. package/templates/agents/ux-expert.md +63 -63
  148. package/templates/agents/worker.md +75 -75
  149. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
  150. package/templates/claude-settings.json +72 -72
  151. package/templates/commands/experts.md +138 -138
  152. package/templates/hooks/README.md +158 -158
  153. package/templates/hooks/project.config.json.template +77 -77
  154. package/templates/hooks/settings.local.json.template +57 -57
  155. package/templates/memory-config.json +56 -56
  156. package/templates/memory-config.schema.json +212 -212
  157. package/templates/settings.json +58 -58
  158. package/templates/skills/continue.md +205 -205
  159. package/templates/workflows/business-improvement.md +264 -264
  160. package/templates/workflows/expert-review.md +153 -153
  161. package/templates/workflows/internal-app.md +245 -245
  162. package/templates/workflows/sync-docs.md +187 -187
@@ -1,243 +1,243 @@
1
- # Diseño de Servidores MCP
2
-
3
- ## Estructura Básica
4
-
5
- Un servidor MCP expone **herramientas** (tools) y **recursos** (resources) a Claude Code.
6
-
7
- ```
8
- mcp-server/
9
- ├── src/
10
- │ ├── index.ts # Entry point
11
- │ ├── server.ts # MCP server setup
12
- │ ├── tools/ # Tool definitions
13
- │ │ ├── index.ts
14
- │ │ └── [tool-name].ts
15
- │ ├── resources/ # Resource handlers
16
- │ │ └── index.ts
17
- │ └── utils/ # Shared utilities
18
- ├── package.json
19
- └── README.md
20
- ```
21
-
22
- ## Configuración del Server
23
-
24
- ```typescript
25
- import { Server } from '@modelcontextprotocol/sdk/server/index.js'
26
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
27
-
28
- const server = new Server(
29
- {
30
- name: 'my-mcp-server',
31
- version: '1.0.0',
32
- },
33
- {
34
- capabilities: {
35
- tools: {},
36
- resources: {},
37
- },
38
- }
39
- )
40
-
41
- // Registrar handlers
42
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
43
- tools: [/* tool definitions */]
44
- }))
45
-
46
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
47
- // Handle tool calls
48
- })
49
-
50
- // Conectar
51
- const transport = new StdioServerTransport()
52
- await server.connect(transport)
53
- ```
54
-
55
- ## Definición de Tools
56
-
57
- ### Estructura de una Tool
58
-
59
- ```typescript
60
- {
61
- name: 'tool_name', // snake_case
62
- description: 'Qué hace', // Conciso, <100 chars
63
- inputSchema: {
64
- type: 'object',
65
- properties: {
66
- param1: {
67
- type: 'string',
68
- description: 'Para qué sirve'
69
- }
70
- },
71
- required: ['param1']
72
- }
73
- }
74
- ```
75
-
76
- ### Nombres de Tools
77
-
78
- - **snake_case**: `memory_search`, `task_create`
79
- - **Prefijo del dominio**: `memory_*`, `pattern_*`, `task_*`
80
- - **Verbos claros**: `create`, `get`, `list`, `update`, `delete`, `search`
81
-
82
- ```typescript
83
- // BIEN
84
- 'memory_search'
85
- 'memory_write'
86
- 'task_start'
87
- 'pattern_detect'
88
-
89
- // MAL
90
- 'searchMemory' // No camelCase
91
- 'mem_srch' // No abreviaciones
92
- 'doSearch' // Verbo genérico
93
- ```
94
-
95
- ### Respuestas de Tools
96
-
97
- ```typescript
98
- // Éxito
99
- return {
100
- content: [
101
- {
102
- type: 'text',
103
- text: JSON.stringify(result, null, 2)
104
- }
105
- ]
106
- }
107
-
108
- // Error
109
- return {
110
- content: [
111
- {
112
- type: 'text',
113
- text: `Error: ${error.message}`
114
- }
115
- ],
116
- isError: true
117
- }
118
- ```
119
-
120
- ## Manejo de Errores
121
-
122
- ```typescript
123
- async function handleToolCall(name: string, args: unknown) {
124
- try {
125
- // Validar input
126
- const validated = schema.parse(args)
127
-
128
- // Ejecutar operación
129
- const result = await executeOperation(validated)
130
-
131
- return { content: [{ type: 'text', text: JSON.stringify(result) }] }
132
-
133
- } catch (error) {
134
- if (error instanceof ZodError) {
135
- return {
136
- content: [{ type: 'text', text: `Invalid input: ${error.message}` }],
137
- isError: true
138
- }
139
- }
140
-
141
- // Log para debugging, respuesta limpia para Claude
142
- console.error('Tool error:', error)
143
- return {
144
- content: [{ type: 'text', text: `Operation failed: ${error.message}` }],
145
- isError: true
146
- }
147
- }
148
- }
149
- ```
150
-
151
- ## Resources
152
-
153
- Los resources son datos que Claude puede leer (contexto estático).
154
-
155
- ```typescript
156
- server.setRequestHandler(ListResourcesRequestSchema, async () => ({
157
- resources: [
158
- {
159
- uri: 'memory://recent',
160
- name: 'Recent Memories',
161
- description: 'Last 10 memories created',
162
- mimeType: 'application/json'
163
- }
164
- ]
165
- }))
166
-
167
- server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
168
- const { uri } = request.params
169
-
170
- if (uri === 'memory://recent') {
171
- const memories = await getRecentMemories()
172
- return {
173
- contents: [{
174
- uri,
175
- mimeType: 'application/json',
176
- text: JSON.stringify(memories)
177
- }]
178
- }
179
- }
180
- })
181
- ```
182
-
183
- ## Testing
184
-
185
- ```typescript
186
- import { describe, it, expect } from 'vitest'
187
-
188
- describe('MCP Server', () => {
189
- it('should list tools', async () => {
190
- const result = await server.handleRequest({
191
- method: 'tools/list'
192
- })
193
- expect(result.tools).toContainEqual(
194
- expect.objectContaining({ name: 'memory_search' })
195
- )
196
- })
197
-
198
- it('should handle tool call', async () => {
199
- const result = await server.handleRequest({
200
- method: 'tools/call',
201
- params: {
202
- name: 'memory_search',
203
- arguments: { query: 'test' }
204
- }
205
- })
206
- expect(result.isError).toBeFalsy()
207
- })
208
- })
209
- ```
210
-
211
- ## Configuración en Claude Code
212
-
213
- ```json
214
- // .claude/mcp.json
215
- {
216
- "mcpServers": {
217
- "my-server": {
218
- "command": "node",
219
- "args": ["path/to/server/dist/index.js"],
220
- "env": {
221
- "DATABASE_URL": "..."
222
- }
223
- }
224
- }
225
- }
226
- ```
227
-
228
- ## Best Practices
229
-
230
- 1. **Tools atómicas** - Una tool hace una cosa bien
231
- 2. **Descripciones claras** - Claude decide basándose en la descripción
232
- 3. **Validación con Zod** - Siempre validar input
233
- 4. **Respuestas estructuradas** - JSON cuando hay datos complejos
234
- 5. **Errores informativos** - Ayudar a Claude a entender qué falló
235
- 6. **Logs en stderr** - No contaminar stdout (usado por MCP)
236
-
237
- ```typescript
238
- // Usar stderr para logs
239
- console.error('[DEBUG] Processing request...')
240
-
241
- // stdout está reservado para MCP protocol
242
- // NO usar console.log para debugging
243
- ```
1
+ # Diseño de Servidores MCP
2
+
3
+ ## Estructura Básica
4
+
5
+ Un servidor MCP expone **herramientas** (tools) y **recursos** (resources) a Claude Code.
6
+
7
+ ```
8
+ mcp-server/
9
+ ├── src/
10
+ │ ├── index.ts # Entry point
11
+ │ ├── server.ts # MCP server setup
12
+ │ ├── tools/ # Tool definitions
13
+ │ │ ├── index.ts
14
+ │ │ └── [tool-name].ts
15
+ │ ├── resources/ # Resource handlers
16
+ │ │ └── index.ts
17
+ │ └── utils/ # Shared utilities
18
+ ├── package.json
19
+ └── README.md
20
+ ```
21
+
22
+ ## Configuración del Server
23
+
24
+ ```typescript
25
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js'
26
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
27
+
28
+ const server = new Server(
29
+ {
30
+ name: 'my-mcp-server',
31
+ version: '1.0.0',
32
+ },
33
+ {
34
+ capabilities: {
35
+ tools: {},
36
+ resources: {},
37
+ },
38
+ }
39
+ )
40
+
41
+ // Registrar handlers
42
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
43
+ tools: [/* tool definitions */]
44
+ }))
45
+
46
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
47
+ // Handle tool calls
48
+ })
49
+
50
+ // Conectar
51
+ const transport = new StdioServerTransport()
52
+ await server.connect(transport)
53
+ ```
54
+
55
+ ## Definición de Tools
56
+
57
+ ### Estructura de una Tool
58
+
59
+ ```typescript
60
+ {
61
+ name: 'tool_name', // snake_case
62
+ description: 'Qué hace', // Conciso, <100 chars
63
+ inputSchema: {
64
+ type: 'object',
65
+ properties: {
66
+ param1: {
67
+ type: 'string',
68
+ description: 'Para qué sirve'
69
+ }
70
+ },
71
+ required: ['param1']
72
+ }
73
+ }
74
+ ```
75
+
76
+ ### Nombres de Tools
77
+
78
+ - **snake_case**: `memory_search`, `task_create`
79
+ - **Prefijo del dominio**: `memory_*`, `pattern_*`, `task_*`
80
+ - **Verbos claros**: `create`, `get`, `list`, `update`, `delete`, `search`
81
+
82
+ ```typescript
83
+ // BIEN
84
+ 'memory_search'
85
+ 'memory_write'
86
+ 'task_start'
87
+ 'pattern_detect'
88
+
89
+ // MAL
90
+ 'searchMemory' // No camelCase
91
+ 'mem_srch' // No abreviaciones
92
+ 'doSearch' // Verbo genérico
93
+ ```
94
+
95
+ ### Respuestas de Tools
96
+
97
+ ```typescript
98
+ // Éxito
99
+ return {
100
+ content: [
101
+ {
102
+ type: 'text',
103
+ text: JSON.stringify(result, null, 2)
104
+ }
105
+ ]
106
+ }
107
+
108
+ // Error
109
+ return {
110
+ content: [
111
+ {
112
+ type: 'text',
113
+ text: `Error: ${error.message}`
114
+ }
115
+ ],
116
+ isError: true
117
+ }
118
+ ```
119
+
120
+ ## Manejo de Errores
121
+
122
+ ```typescript
123
+ async function handleToolCall(name: string, args: unknown) {
124
+ try {
125
+ // Validar input
126
+ const validated = schema.parse(args)
127
+
128
+ // Ejecutar operación
129
+ const result = await executeOperation(validated)
130
+
131
+ return { content: [{ type: 'text', text: JSON.stringify(result) }] }
132
+
133
+ } catch (error) {
134
+ if (error instanceof ZodError) {
135
+ return {
136
+ content: [{ type: 'text', text: `Invalid input: ${error.message}` }],
137
+ isError: true
138
+ }
139
+ }
140
+
141
+ // Log para debugging, respuesta limpia para Claude
142
+ console.error('Tool error:', error)
143
+ return {
144
+ content: [{ type: 'text', text: `Operation failed: ${error.message}` }],
145
+ isError: true
146
+ }
147
+ }
148
+ }
149
+ ```
150
+
151
+ ## Resources
152
+
153
+ Los resources son datos que Claude puede leer (contexto estático).
154
+
155
+ ```typescript
156
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({
157
+ resources: [
158
+ {
159
+ uri: 'memory://recent',
160
+ name: 'Recent Memories',
161
+ description: 'Last 10 memories created',
162
+ mimeType: 'application/json'
163
+ }
164
+ ]
165
+ }))
166
+
167
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
168
+ const { uri } = request.params
169
+
170
+ if (uri === 'memory://recent') {
171
+ const memories = await getRecentMemories()
172
+ return {
173
+ contents: [{
174
+ uri,
175
+ mimeType: 'application/json',
176
+ text: JSON.stringify(memories)
177
+ }]
178
+ }
179
+ }
180
+ })
181
+ ```
182
+
183
+ ## Testing
184
+
185
+ ```typescript
186
+ import { describe, it, expect } from 'vitest'
187
+
188
+ describe('MCP Server', () => {
189
+ it('should list tools', async () => {
190
+ const result = await server.handleRequest({
191
+ method: 'tools/list'
192
+ })
193
+ expect(result.tools).toContainEqual(
194
+ expect.objectContaining({ name: 'memory_search' })
195
+ )
196
+ })
197
+
198
+ it('should handle tool call', async () => {
199
+ const result = await server.handleRequest({
200
+ method: 'tools/call',
201
+ params: {
202
+ name: 'memory_search',
203
+ arguments: { query: 'test' }
204
+ }
205
+ })
206
+ expect(result.isError).toBeFalsy()
207
+ })
208
+ })
209
+ ```
210
+
211
+ ## Configuración en Claude Code
212
+
213
+ ```json
214
+ // .claude/mcp.json
215
+ {
216
+ "mcpServers": {
217
+ "my-server": {
218
+ "command": "node",
219
+ "args": ["path/to/server/dist/index.js"],
220
+ "env": {
221
+ "DATABASE_URL": "..."
222
+ }
223
+ }
224
+ }
225
+ }
226
+ ```
227
+
228
+ ## Best Practices
229
+
230
+ 1. **Tools atómicas** - Una tool hace una cosa bien
231
+ 2. **Descripciones claras** - Claude decide basándose en la descripción
232
+ 3. **Validación con Zod** - Siempre validar input
233
+ 4. **Respuestas estructuradas** - JSON cuando hay datos complejos
234
+ 5. **Errores informativos** - Ayudar a Claude a entender qué falló
235
+ 6. **Logs en stderr** - No contaminar stdout (usado por MCP)
236
+
237
+ ```typescript
238
+ // Usar stderr para logs
239
+ console.error('[DEBUG] Processing request...')
240
+
241
+ // stdout está reservado para MCP protocol
242
+ // NO usar console.log para debugging
243
+ ```