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.
- package/README.md +633 -633
- package/dist/cache/EmbeddingCache.d.ts +110 -0
- package/dist/cache/EmbeddingCache.d.ts.map +1 -0
- package/dist/cache/EmbeddingCache.js +239 -0
- package/dist/cache/EmbeddingCache.js.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +6 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cli/index.js +0 -0
- package/dist/db/cloud.d.ts +1 -0
- package/dist/db/cloud.d.ts.map +1 -1
- package/dist/db/drizzle-client.d.ts +10 -1
- package/dist/db/drizzle-client.d.ts.map +1 -1
- package/dist/db/drizzle-client.js +57 -3
- package/dist/db/drizzle-client.js.map +1 -1
- package/dist/db/errors.d.ts +13 -1
- package/dist/db/errors.d.ts.map +1 -1
- package/dist/db/errors.js +49 -5
- package/dist/db/errors.js.map +1 -1
- package/dist/db/migrations.d.ts +42 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +173 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/turso-client.d.ts +15 -3
- package/dist/db/turso-client.d.ts.map +1 -1
- package/dist/db/turso-client.js +50 -39
- package/dist/db/turso-client.js.map +1 -1
- package/dist/eslint/rules/no-async-useeffect.js +6 -6
- package/dist/events/EventBus.d.ts +97 -0
- package/dist/events/EventBus.d.ts.map +1 -0
- package/dist/events/EventBus.js +256 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/events/index.d.ts +7 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +9 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +989 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +136 -0
- package/dist/events/types.js.map +1 -0
- package/dist/experts/ConsensusEngine.d.ts +57 -0
- package/dist/experts/ConsensusEngine.d.ts.map +1 -0
- package/dist/experts/ConsensusEngine.js +146 -0
- package/dist/experts/ConsensusEngine.js.map +1 -0
- package/dist/experts/ExpertPanelService.d.ts +84 -0
- package/dist/experts/ExpertPanelService.d.ts.map +1 -0
- package/dist/experts/ExpertPanelService.js +204 -0
- package/dist/experts/ExpertPanelService.js.map +1 -0
- package/dist/experts/ExpertRouter.d.ts +68 -0
- package/dist/experts/ExpertRouter.d.ts.map +1 -0
- package/dist/experts/ExpertRouter.js +374 -0
- package/dist/experts/ExpertRouter.js.map +1 -0
- package/dist/experts/VoteCollector.d.ts +58 -0
- package/dist/experts/VoteCollector.d.ts.map +1 -0
- package/dist/experts/VoteCollector.js +146 -0
- package/dist/experts/VoteCollector.js.map +1 -0
- package/dist/experts/index.d.ts +9 -0
- package/dist/experts/index.d.ts.map +1 -0
- package/dist/experts/index.js +13 -0
- package/dist/experts/index.js.map +1 -0
- package/dist/hooks/cloud-pre-tool-use.js +20 -20
- package/dist/hooks/expert-review.d.ts +74 -0
- package/dist/hooks/expert-review.d.ts.map +1 -0
- package/dist/hooks/expert-review.js +220 -0
- package/dist/hooks/expert-review.js.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/index.d.ts +450 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +50 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/mcp/schemas.d.ts +278 -0
- package/dist/mcp/schemas.d.ts.map +1 -0
- package/dist/mcp/schemas.js +166 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +14 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/patterns/feedback-loop.d.ts +264 -0
- package/dist/patterns/feedback-loop.d.ts.map +1 -0
- package/dist/patterns/feedback-loop.js +329 -0
- package/dist/patterns/feedback-loop.js.map +1 -0
- package/dist/patterns/index.d.ts +9 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +9 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/lifecycle.d.ts +88 -0
- package/dist/patterns/lifecycle.d.ts.map +1 -0
- package/dist/patterns/lifecycle.js +284 -0
- package/dist/patterns/lifecycle.js.map +1 -0
- package/dist/patterns/registry.d.ts +142 -0
- package/dist/patterns/registry.d.ts.map +1 -0
- package/dist/patterns/registry.js +442 -0
- package/dist/patterns/registry.js.map +1 -0
- package/dist/performance/Debouncer.d.ts +91 -0
- package/dist/performance/Debouncer.d.ts.map +1 -0
- package/dist/performance/Debouncer.js +198 -0
- package/dist/performance/Debouncer.js.map +1 -0
- package/dist/performance/MemoryDecay.d.ts +82 -0
- package/dist/performance/MemoryDecay.d.ts.map +1 -0
- package/dist/performance/MemoryDecay.js +153 -0
- package/dist/performance/MemoryDecay.js.map +1 -0
- package/dist/performance/index.d.ts +7 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +9 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/schema/expert-types.d.ts +395 -0
- package/dist/schema/expert-types.d.ts.map +1 -0
- package/dist/schema/expert-types.js +250 -0
- package/dist/schema/expert-types.js.map +1 -0
- package/dist/services/ContextGenerator.js +7 -7
- package/dist/services/PlanManager.d.ts +1 -1
- package/dist/services/PlanManager.d.ts.map +1 -1
- package/dist/services/PlanManager.js +26 -6
- package/dist/services/PlanManager.js.map +1 -1
- package/dist/services/ProjectScaffold.js +76 -76
- package/dist/services/memory-router.js +35 -35
- package/dist/services/pattern-tracker.js +90 -90
- package/dist/services/semantic-search.js +2 -2
- package/package.json +105 -104
- package/standards/README.md +50 -50
- package/standards/experts/expert-routing.md +215 -215
- package/standards/general/code-quality.md +86 -86
- package/standards/general/memory-usage.md +205 -205
- package/standards/general/sync-workflow.md +235 -235
- package/standards/general/workflow.md +82 -82
- package/standards/hooks/mandatory-tracking.md +446 -446
- package/standards/infrastructure/cloud-database.md +287 -287
- package/standards/mcp/server-design.md +243 -243
- package/standards/mcp/tool-patterns.md +354 -354
- package/standards/skills/skill-structure.md +286 -286
- package/standards/skills/workflow-design.md +323 -323
- package/standards/tools/tool-design.md +297 -297
- package/templates/agents/architecture-expert.md +61 -61
- package/templates/agents/database-expert.md +62 -62
- package/templates/agents/documentation-expert.md +57 -57
- package/templates/agents/memory-expert.md +88 -88
- package/templates/agents/performance-expert.md +61 -61
- package/templates/agents/security-expert.md +59 -59
- package/templates/agents/ux-expert.md +63 -63
- package/templates/agents/worker.md +75 -75
- package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
- package/templates/claude-settings.json +72 -72
- package/templates/commands/experts.md +138 -138
- package/templates/hooks/README.md +158 -158
- package/templates/hooks/project.config.json.template +77 -77
- package/templates/hooks/settings.local.json.template +57 -57
- package/templates/memory-config.json +56 -56
- package/templates/memory-config.schema.json +212 -212
- package/templates/settings.json +58 -58
- package/templates/skills/continue.md +205 -205
- package/templates/workflows/business-improvement.md +264 -264
- package/templates/workflows/expert-review.md +153 -153
- package/templates/workflows/internal-app.md +245 -245
- package/templates/workflows/sync-docs.md +187 -187
|
@@ -113,8 +113,8 @@ class PatternTrackerService {
|
|
|
113
113
|
try {
|
|
114
114
|
const db = turso.getClient();
|
|
115
115
|
const result = await db.execute({
|
|
116
|
-
sql: `SELECT id, content FROM items
|
|
117
|
-
WHERE system = ? AND type = 'pattern'
|
|
116
|
+
sql: `SELECT id, content FROM items
|
|
117
|
+
WHERE system = ? AND type = 'pattern'
|
|
118
118
|
AND status = 'active'`,
|
|
119
119
|
args: [system]
|
|
120
120
|
});
|
|
@@ -150,7 +150,7 @@ class PatternTrackerService {
|
|
|
150
150
|
// Update status to 'triggered'
|
|
151
151
|
const db = turso.getClient();
|
|
152
152
|
await db.execute({
|
|
153
|
-
sql: `UPDATE items SET status = 'triggered', updated_at = datetime('now')
|
|
153
|
+
sql: `UPDATE items SET status = 'triggered', updated_at = datetime('now')
|
|
154
154
|
WHERE id = ?`,
|
|
155
155
|
args: [pattern.id]
|
|
156
156
|
});
|
|
@@ -205,28 +205,28 @@ class PatternTrackerService {
|
|
|
205
205
|
*/
|
|
206
206
|
eslintRuleToCode(rule) {
|
|
207
207
|
const ruleBody = this.generateRuleBody(rule.name);
|
|
208
|
-
return `/**
|
|
209
|
-
* @file ${rule.name}
|
|
210
|
-
* @description ${rule.description}
|
|
211
|
-
* Auto-generated by cmp-standards pattern detection
|
|
212
|
-
* @version 1.0.0
|
|
213
|
-
*/
|
|
214
|
-
|
|
215
|
-
module.exports = {
|
|
216
|
-
meta: {
|
|
217
|
-
type: '${rule.meta.type}',
|
|
218
|
-
docs: {
|
|
219
|
-
description: '${rule.description}',
|
|
220
|
-
category: 'Best Practices',
|
|
221
|
-
recommended: true
|
|
222
|
-
},
|
|
223
|
-
schema: [],
|
|
224
|
-
messages: ${JSON.stringify(rule.meta.messages, null, 2)}
|
|
225
|
-
},
|
|
226
|
-
create(context) {
|
|
227
|
-
${ruleBody}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
208
|
+
return `/**
|
|
209
|
+
* @file ${rule.name}
|
|
210
|
+
* @description ${rule.description}
|
|
211
|
+
* Auto-generated by cmp-standards pattern detection
|
|
212
|
+
* @version 1.0.0
|
|
213
|
+
*/
|
|
214
|
+
|
|
215
|
+
module.exports = {
|
|
216
|
+
meta: {
|
|
217
|
+
type: '${rule.meta.type}',
|
|
218
|
+
docs: {
|
|
219
|
+
description: '${rule.description}',
|
|
220
|
+
category: 'Best Practices',
|
|
221
|
+
recommended: true
|
|
222
|
+
},
|
|
223
|
+
schema: [],
|
|
224
|
+
messages: ${JSON.stringify(rule.meta.messages, null, 2)}
|
|
225
|
+
},
|
|
226
|
+
create(context) {
|
|
227
|
+
${ruleBody}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
230
|
`;
|
|
231
231
|
}
|
|
232
232
|
/**
|
|
@@ -236,77 +236,77 @@ ${ruleBody}
|
|
|
236
236
|
// Pattern-specific implementations using AST visitors
|
|
237
237
|
switch (ruleName) {
|
|
238
238
|
case 'charter/no-any-type':
|
|
239
|
-
return ` return {
|
|
240
|
-
TSAnyKeyword(node) {
|
|
241
|
-
context.report({ node, messageId: 'violation' });
|
|
242
|
-
}
|
|
239
|
+
return ` return {
|
|
240
|
+
TSAnyKeyword(node) {
|
|
241
|
+
context.report({ node, messageId: 'violation' });
|
|
242
|
+
}
|
|
243
243
|
};`;
|
|
244
244
|
case 'charter/no-eslint-disable':
|
|
245
|
-
return ` const sourceCode = context.getSourceCode();
|
|
246
|
-
return {
|
|
247
|
-
Program() {
|
|
248
|
-
const comments = sourceCode.getAllComments();
|
|
249
|
-
for (const comment of comments) {
|
|
250
|
-
if (comment.value.includes('eslint-disable')) {
|
|
251
|
-
context.report({ loc: comment.loc, messageId: 'violation' });
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
245
|
+
return ` const sourceCode = context.getSourceCode();
|
|
246
|
+
return {
|
|
247
|
+
Program() {
|
|
248
|
+
const comments = sourceCode.getAllComments();
|
|
249
|
+
for (const comment of comments) {
|
|
250
|
+
if (comment.value.includes('eslint-disable')) {
|
|
251
|
+
context.report({ loc: comment.loc, messageId: 'violation' });
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
255
|
};`;
|
|
256
256
|
case 'charter/no-async-useeffect':
|
|
257
|
-
return ` return {
|
|
258
|
-
CallExpression(node) {
|
|
259
|
-
if (
|
|
260
|
-
node.callee.type === 'Identifier' &&
|
|
261
|
-
node.callee.name === 'useEffect' &&
|
|
262
|
-
node.arguments[0] &&
|
|
263
|
-
node.arguments[0].async
|
|
264
|
-
) {
|
|
265
|
-
context.report({ node, messageId: 'violation' });
|
|
266
|
-
}
|
|
267
|
-
}
|
|
257
|
+
return ` return {
|
|
258
|
+
CallExpression(node) {
|
|
259
|
+
if (
|
|
260
|
+
node.callee.type === 'Identifier' &&
|
|
261
|
+
node.callee.name === 'useEffect' &&
|
|
262
|
+
node.arguments[0] &&
|
|
263
|
+
node.arguments[0].async
|
|
264
|
+
) {
|
|
265
|
+
context.report({ node, messageId: 'violation' });
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
268
|
};`;
|
|
269
269
|
case 'charter/no-raw-sql':
|
|
270
|
-
return ` return {
|
|
271
|
-
CallExpression(node) {
|
|
272
|
-
if (
|
|
273
|
-
node.callee.type === 'MemberExpression' &&
|
|
274
|
-
node.callee.property.name === 'execute' &&
|
|
275
|
-
node.arguments[0]?.type === 'TemplateLiteral'
|
|
276
|
-
) {
|
|
277
|
-
context.report({ node, messageId: 'violation' });
|
|
278
|
-
}
|
|
279
|
-
}
|
|
270
|
+
return ` return {
|
|
271
|
+
CallExpression(node) {
|
|
272
|
+
if (
|
|
273
|
+
node.callee.type === 'MemberExpression' &&
|
|
274
|
+
node.callee.property.name === 'execute' &&
|
|
275
|
+
node.arguments[0]?.type === 'TemplateLiteral'
|
|
276
|
+
) {
|
|
277
|
+
context.report({ node, messageId: 'violation' });
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
280
|
};`;
|
|
281
281
|
case 'charter/finance-ledger-sync':
|
|
282
|
-
return ` let hasFinanceInsert = false;
|
|
283
|
-
let hasLedgerCall = false;
|
|
284
|
-
return {
|
|
285
|
-
CallExpression(node) {
|
|
286
|
-
const callee = node.callee;
|
|
287
|
-
if (callee.property?.name === 'insert') hasFinanceInsert = true;
|
|
288
|
-
if (callee.object?.name === 'LedgerService') hasLedgerCall = true;
|
|
289
|
-
},
|
|
290
|
-
'Program:exit'(node) {
|
|
291
|
-
if (hasFinanceInsert && !hasLedgerCall) {
|
|
292
|
-
context.report({ node, messageId: 'violation' });
|
|
293
|
-
}
|
|
294
|
-
}
|
|
282
|
+
return ` let hasFinanceInsert = false;
|
|
283
|
+
let hasLedgerCall = false;
|
|
284
|
+
return {
|
|
285
|
+
CallExpression(node) {
|
|
286
|
+
const callee = node.callee;
|
|
287
|
+
if (callee.property?.name === 'insert') hasFinanceInsert = true;
|
|
288
|
+
if (callee.object?.name === 'LedgerService') hasLedgerCall = true;
|
|
289
|
+
},
|
|
290
|
+
'Program:exit'(node) {
|
|
291
|
+
if (hasFinanceInsert && !hasLedgerCall) {
|
|
292
|
+
context.report({ node, messageId: 'violation' });
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
295
|
};`;
|
|
296
296
|
case 'charter/use-semantic-tokens':
|
|
297
|
-
return ` return {
|
|
298
|
-
Literal(node) {
|
|
299
|
-
if (typeof node.value === 'string' && /#[0-9a-fA-F]{3,8}/.test(node.value)) {
|
|
300
|
-
context.report({ node, messageId: 'violation' });
|
|
301
|
-
}
|
|
302
|
-
}
|
|
297
|
+
return ` return {
|
|
298
|
+
Literal(node) {
|
|
299
|
+
if (typeof node.value === 'string' && /#[0-9a-fA-F]{3,8}/.test(node.value)) {
|
|
300
|
+
context.report({ node, messageId: 'violation' });
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
303
|
};`;
|
|
304
304
|
default:
|
|
305
|
-
return ` // Auto-generated rule - implement based on pattern
|
|
306
|
-
return {
|
|
307
|
-
Program(node) {
|
|
308
|
-
// Pattern detection logic here
|
|
309
|
-
}
|
|
305
|
+
return ` // Auto-generated rule - implement based on pattern
|
|
306
|
+
return {
|
|
307
|
+
Program(node) {
|
|
308
|
+
// Pattern detection logic here
|
|
309
|
+
}
|
|
310
310
|
};`;
|
|
311
311
|
}
|
|
312
312
|
}
|
|
@@ -371,9 +371,9 @@ ${ruleBody}
|
|
|
371
371
|
try {
|
|
372
372
|
const db = turso.getClient();
|
|
373
373
|
const result = await db.execute({
|
|
374
|
-
sql: `SELECT id, content FROM items
|
|
375
|
-
WHERE system = ? AND type = 'pattern'
|
|
376
|
-
AND json_extract(content, '$.patternId') = ?
|
|
374
|
+
sql: `SELECT id, content FROM items
|
|
375
|
+
WHERE system = ? AND type = 'pattern'
|
|
376
|
+
AND json_extract(content, '$.patternId') = ?
|
|
377
377
|
LIMIT 1`,
|
|
378
378
|
args: [system, patternId]
|
|
379
379
|
});
|
|
@@ -393,7 +393,7 @@ ${ruleBody}
|
|
|
393
393
|
const db = turso.getClient();
|
|
394
394
|
const now = new Date().toISOString();
|
|
395
395
|
await db.execute({
|
|
396
|
-
sql: `INSERT INTO items (id, system, type, status, content, created_at, updated_at)
|
|
396
|
+
sql: `INSERT INTO items (id, system, type, status, content, created_at, updated_at)
|
|
397
397
|
VALUES (?, ?, 'pattern', 'active', ?, ?, ?)`,
|
|
398
398
|
args: [pattern.id, system, JSON.stringify(pattern), now, now]
|
|
399
399
|
});
|
|
@@ -401,7 +401,7 @@ ${ruleBody}
|
|
|
401
401
|
async savePattern(pattern, _system) {
|
|
402
402
|
const db = turso.getClient();
|
|
403
403
|
await db.execute({
|
|
404
|
-
sql: `UPDATE items SET content = ?, updated_at = datetime('now')
|
|
404
|
+
sql: `UPDATE items SET content = ?, updated_at = datetime('now')
|
|
405
405
|
WHERE id = ?`,
|
|
406
406
|
args: [JSON.stringify(pattern), pattern.id]
|
|
407
407
|
});
|
|
@@ -411,7 +411,7 @@ ${ruleBody}
|
|
|
411
411
|
const id = `ai_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
412
412
|
const now = new Date().toISOString();
|
|
413
413
|
await db.execute({
|
|
414
|
-
sql: `INSERT INTO items (id, system, type, status, content, created_at, updated_at)
|
|
414
|
+
sql: `INSERT INTO items (id, system, type, status, content, created_at, updated_at)
|
|
415
415
|
VALUES (?, ?, 'auto_improvement', 'pending', ?, ?, ?)`,
|
|
416
416
|
args: [id, system, JSON.stringify(improvement), now, now]
|
|
417
417
|
});
|
|
@@ -94,7 +94,7 @@ export class SemanticSearchService {
|
|
|
94
94
|
* Create memory with embedding and sync to Vector DB
|
|
95
95
|
*/
|
|
96
96
|
async createMemoryWithEmbedding(title, body, options) {
|
|
97
|
-
const text = `${title}
|
|
97
|
+
const text = `${title}
|
|
98
98
|
${body}`;
|
|
99
99
|
let embedding;
|
|
100
100
|
let embeddingModel;
|
|
@@ -153,7 +153,7 @@ ${body}`;
|
|
|
153
153
|
const content = memory.content;
|
|
154
154
|
if (!content)
|
|
155
155
|
return [];
|
|
156
|
-
const text = `${content.title}
|
|
156
|
+
const text = `${content.title}
|
|
157
157
|
${content.body}`;
|
|
158
158
|
return this.search(text, { limit: limit + 1 }).then((results) => results.filter((r) => r.item.id !== memoryId).slice(0, limit));
|
|
159
159
|
}
|
package/package.json
CHANGED
|
@@ -1,104 +1,105 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "cmp-standards",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "Collective Memory Protocol - Persistent memory, cross-project learning, and multi-agent collaboration",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"bin": {
|
|
9
|
-
"cmp-standards": "dist/cli/index.js"
|
|
10
|
-
},
|
|
11
|
-
"scripts": {
|
|
12
|
-
"build": "tsc",
|
|
13
|
-
"dev": "tsc --watch",
|
|
14
|
-
"test": "vitest",
|
|
15
|
-
"lint": "eslint src/**/*.ts",
|
|
16
|
-
"prepublishOnly": "npm run build"
|
|
17
|
-
},
|
|
18
|
-
"keywords": [
|
|
19
|
-
"claude",
|
|
20
|
-
"ai",
|
|
21
|
-
"memory",
|
|
22
|
-
"workflow",
|
|
23
|
-
"hooks",
|
|
24
|
-
"task-tracking"
|
|
25
|
-
],
|
|
26
|
-
"author": "Carlos Martin Pavon",
|
|
27
|
-
"license": "MIT",
|
|
28
|
-
"repository": {
|
|
29
|
-
"type": "git",
|
|
30
|
-
"url": "git+https://github.com/carlosmartinpavon/carlosmartinpavon.git",
|
|
31
|
-
"directory": "packages/cmp-standards"
|
|
32
|
-
},
|
|
33
|
-
"homepage": "https://github.com/carlosmartinpavon/carlosmartinpavon/tree/main/packages/cmp-standards",
|
|
34
|
-
"bugs": {
|
|
35
|
-
"url": "https://github.com/carlosmartinpavon/carlosmartinpavon/issues"
|
|
36
|
-
},
|
|
37
|
-
"publishConfig": {
|
|
38
|
-
"access": "public"
|
|
39
|
-
},
|
|
40
|
-
"engines": {
|
|
41
|
-
"node": ">=18.0.0"
|
|
42
|
-
},
|
|
43
|
-
"dependencies": {
|
|
44
|
-
"@libsql/client": "^0.14.0",
|
|
45
|
-
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
46
|
-
"@upstash/redis": "^1.34.0",
|
|
47
|
-
"@upstash/vector": "^1.1.0",
|
|
48
|
-
"chalk": "^5.3.0",
|
|
49
|
-
"commander": "^12.0.0",
|
|
50
|
-
"cors": "^2.8.5",
|
|
51
|
-
"dotenv": "^17.2.3",
|
|
52
|
-
"drizzle-orm": ">=0.30.0",
|
|
53
|
-
"express": "^4.18.2",
|
|
54
|
-
"glob": "^10.3.10",
|
|
55
|
-
"gray-matter": "^4.0.3",
|
|
56
|
-
"mysql2": ">=3.0.0",
|
|
57
|
-
"open": "^10.0.0",
|
|
58
|
-
"simple-git": "^3.30.0",
|
|
59
|
-
"ulid": "^2.3.0",
|
|
60
|
-
"zod": "^3.23.0"
|
|
61
|
-
},
|
|
62
|
-
"optionalDependencies": {
|
|
63
|
-
"better-sqlite3": "^
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"@types/
|
|
72
|
-
"@types/
|
|
73
|
-
"@types/
|
|
74
|
-
"@types/
|
|
75
|
-
"@
|
|
76
|
-
"@typescript-eslint/
|
|
77
|
-
"eslint": "^
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
"
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
"
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
"
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "cmp-standards",
|
|
3
|
+
"version": "2.8.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Collective Memory Protocol - Persistent memory, cross-project learning, and multi-agent collaboration",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"cmp-standards": "dist/cli/index.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"test": "vitest",
|
|
15
|
+
"lint": "eslint src/**/*.ts",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"claude",
|
|
20
|
+
"ai",
|
|
21
|
+
"memory",
|
|
22
|
+
"workflow",
|
|
23
|
+
"hooks",
|
|
24
|
+
"task-tracking"
|
|
25
|
+
],
|
|
26
|
+
"author": "Carlos Martin Pavon",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "git+https://github.com/carlosmartinpavon/carlosmartinpavon.git",
|
|
31
|
+
"directory": "packages/cmp-standards"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/carlosmartinpavon/carlosmartinpavon/tree/main/packages/cmp-standards",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/carlosmartinpavon/carlosmartinpavon/issues"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=18.0.0"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@libsql/client": "^0.14.0",
|
|
45
|
+
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
46
|
+
"@upstash/redis": "^1.34.0",
|
|
47
|
+
"@upstash/vector": "^1.1.0",
|
|
48
|
+
"chalk": "^5.3.0",
|
|
49
|
+
"commander": "^12.0.0",
|
|
50
|
+
"cors": "^2.8.5",
|
|
51
|
+
"dotenv": "^17.2.3",
|
|
52
|
+
"drizzle-orm": ">=0.30.0",
|
|
53
|
+
"express": "^4.18.2",
|
|
54
|
+
"glob": "^10.3.10",
|
|
55
|
+
"gray-matter": "^4.0.3",
|
|
56
|
+
"mysql2": ">=3.0.0",
|
|
57
|
+
"open": "^10.0.0",
|
|
58
|
+
"simple-git": "^3.30.0",
|
|
59
|
+
"ulid": "^2.3.0",
|
|
60
|
+
"zod": "^3.23.0"
|
|
61
|
+
},
|
|
62
|
+
"optionalDependencies": {
|
|
63
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
64
|
+
"better-sqlite3": "^11.0.0"
|
|
65
|
+
},
|
|
66
|
+
"peerDependencies": {
|
|
67
|
+
"drizzle-orm": ">=0.30.0",
|
|
68
|
+
"mysql2": ">=3.0.0"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@types/better-sqlite3": "^7.6.0",
|
|
72
|
+
"@types/cors": "^2.8.17",
|
|
73
|
+
"@types/eslint": "^8.56.0",
|
|
74
|
+
"@types/express": "^4.17.21",
|
|
75
|
+
"@types/node": "^20.11.0",
|
|
76
|
+
"@typescript-eslint/eslint-plugin": "^6.19.0",
|
|
77
|
+
"@typescript-eslint/parser": "^6.19.0",
|
|
78
|
+
"eslint": "^8.56.0",
|
|
79
|
+
"typescript": "^5.3.3",
|
|
80
|
+
"vitest": "^1.2.0"
|
|
81
|
+
},
|
|
82
|
+
"files": [
|
|
83
|
+
"dist",
|
|
84
|
+
"templates",
|
|
85
|
+
"standards",
|
|
86
|
+
"README.md"
|
|
87
|
+
],
|
|
88
|
+
"exports": {
|
|
89
|
+
".": {
|
|
90
|
+
"import": "./dist/index.js",
|
|
91
|
+
"types": "./dist/index.d.ts"
|
|
92
|
+
},
|
|
93
|
+
"./hooks": {
|
|
94
|
+
"import": "./dist/hooks/index.js",
|
|
95
|
+
"types": "./dist/hooks/index.d.ts"
|
|
96
|
+
},
|
|
97
|
+
"./cli": {
|
|
98
|
+
"import": "./dist/cli/index.js"
|
|
99
|
+
},
|
|
100
|
+
"./eslint": {
|
|
101
|
+
"import": "./dist/eslint/index.js",
|
|
102
|
+
"types": "./dist/eslint/index.d.ts"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
package/standards/README.md
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
# CMP Standards
|
|
2
|
-
|
|
3
|
-
Estándares globales para proyectos con Claude Code. Estos estándares son **adaptados inteligentemente** por la IA a cada proyecto local.
|
|
4
|
-
|
|
5
|
-
## Estructura
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
standards/
|
|
9
|
-
├── general/ # Cómo trabajar en general
|
|
10
|
-
│ ├── workflow.md # Flujo de trabajo con Claude
|
|
11
|
-
│ ├── code-quality.md # Estándares de código
|
|
12
|
-
│ ├── memory-usage.md # Uso del sistema de memoria
|
|
13
|
-
│ └── sync-workflow.md # Cómo funciona el sync inteligente
|
|
14
|
-
│
|
|
15
|
-
├── mcp/ # Model Context Protocol
|
|
16
|
-
│ ├── server-design.md
|
|
17
|
-
│ └── tool-patterns.md
|
|
18
|
-
│
|
|
19
|
-
├── tools/ # Diseño de herramientas
|
|
20
|
-
│ └── tool-design.md
|
|
21
|
-
│
|
|
22
|
-
├── skills/ # Sistema de skills
|
|
23
|
-
│ ├── skill-structure.md
|
|
24
|
-
│ └── workflow-design.md
|
|
25
|
-
│
|
|
26
|
-
├── experts/ # Sistema de expertos
|
|
27
|
-
│ └── expert-routing.md
|
|
28
|
-
│
|
|
29
|
-
├── hooks/ # Hooks obligatorios
|
|
30
|
-
│ └── mandatory-tracking.md # Sistema de tracking continuo
|
|
31
|
-
│
|
|
32
|
-
└── infrastructure/ # Infraestructura cloud
|
|
33
|
-
└── cloud-database.md # Turso + Upstash (gratis)
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Cómo funciona el Sync
|
|
37
|
-
|
|
38
|
-
1. **AI lee** estos estándares globales
|
|
39
|
-
2. **AI analiza** el proyecto local (estructura, tech stack, CLAUDE.md existente)
|
|
40
|
-
3. **AI adapta** los estándares al contexto local
|
|
41
|
-
4. **AI actualiza** el CLAUDE.md local con lo relevante
|
|
42
|
-
|
|
43
|
-
## Uso
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
# El sync se invoca como skill
|
|
47
|
-
/sync
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
La IA ejecuta el sync de forma inteligente, no es un script.
|
|
1
|
+
# CMP Standards
|
|
2
|
+
|
|
3
|
+
Estándares globales para proyectos con Claude Code. Estos estándares son **adaptados inteligentemente** por la IA a cada proyecto local.
|
|
4
|
+
|
|
5
|
+
## Estructura
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
standards/
|
|
9
|
+
├── general/ # Cómo trabajar en general
|
|
10
|
+
│ ├── workflow.md # Flujo de trabajo con Claude
|
|
11
|
+
│ ├── code-quality.md # Estándares de código
|
|
12
|
+
│ ├── memory-usage.md # Uso del sistema de memoria
|
|
13
|
+
│ └── sync-workflow.md # Cómo funciona el sync inteligente
|
|
14
|
+
│
|
|
15
|
+
├── mcp/ # Model Context Protocol
|
|
16
|
+
│ ├── server-design.md
|
|
17
|
+
│ └── tool-patterns.md
|
|
18
|
+
│
|
|
19
|
+
├── tools/ # Diseño de herramientas
|
|
20
|
+
│ └── tool-design.md
|
|
21
|
+
│
|
|
22
|
+
├── skills/ # Sistema de skills
|
|
23
|
+
│ ├── skill-structure.md
|
|
24
|
+
│ └── workflow-design.md
|
|
25
|
+
│
|
|
26
|
+
├── experts/ # Sistema de expertos
|
|
27
|
+
│ └── expert-routing.md
|
|
28
|
+
│
|
|
29
|
+
├── hooks/ # Hooks obligatorios
|
|
30
|
+
│ └── mandatory-tracking.md # Sistema de tracking continuo
|
|
31
|
+
│
|
|
32
|
+
└── infrastructure/ # Infraestructura cloud
|
|
33
|
+
└── cloud-database.md # Turso + Upstash (gratis)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Cómo funciona el Sync
|
|
37
|
+
|
|
38
|
+
1. **AI lee** estos estándares globales
|
|
39
|
+
2. **AI analiza** el proyecto local (estructura, tech stack, CLAUDE.md existente)
|
|
40
|
+
3. **AI adapta** los estándares al contexto local
|
|
41
|
+
4. **AI actualiza** el CLAUDE.md local con lo relevante
|
|
42
|
+
|
|
43
|
+
## Uso
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# El sync se invoca como skill
|
|
47
|
+
/sync
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
La IA ejecuta el sync de forma inteligente, no es un script.
|