cmp-standards 2.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.
- package/README.md +541 -0
- package/dist/analytics/index.d.ts +5 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +5 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/tracker.d.ts +107 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +333 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/auto-improve/eslint-generator.d.ts +36 -0
- package/dist/auto-improve/eslint-generator.d.ts.map +1 -0
- package/dist/auto-improve/eslint-generator.js +280 -0
- package/dist/auto-improve/eslint-generator.js.map +1 -0
- package/dist/auto-improve/index.d.ts +6 -0
- package/dist/auto-improve/index.d.ts.map +1 -0
- package/dist/auto-improve/index.js +6 -0
- package/dist/auto-improve/index.js.map +1 -0
- package/dist/auto-improve/pattern-detector.d.ts +92 -0
- package/dist/auto-improve/pattern-detector.d.ts.map +1 -0
- package/dist/auto-improve/pattern-detector.js +231 -0
- package/dist/auto-improve/pattern-detector.js.map +1 -0
- package/dist/cli/index.d.ts +18 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +769 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/dashboard/index.d.ts +6 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +6 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/server.d.ts +15 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +373 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/ui.d.ts +9 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +530 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/db/client.d.ts +66 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +159 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/drizzle-client.d.ts +302 -0
- package/dist/db/drizzle-client.d.ts.map +1 -0
- package/dist/db/drizzle-client.js +404 -0
- package/dist/db/drizzle-client.js.map +1 -0
- package/dist/db/index.d.ts +5 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/eslint/config-builder.d.ts +45 -0
- package/dist/eslint/config-builder.d.ts.map +1 -0
- package/dist/eslint/config-builder.js +128 -0
- package/dist/eslint/config-builder.js.map +1 -0
- package/dist/eslint/index.d.ts +161 -0
- package/dist/eslint/index.d.ts.map +1 -0
- package/dist/eslint/index.js +106 -0
- package/dist/eslint/index.js.map +1 -0
- package/dist/eslint/rules/consistent-error-handling.d.ts +9 -0
- package/dist/eslint/rules/consistent-error-handling.d.ts.map +1 -0
- package/dist/eslint/rules/consistent-error-handling.js +52 -0
- package/dist/eslint/rules/consistent-error-handling.js.map +1 -0
- package/dist/eslint/rules/finance-ledger-sync.d.ts +12 -0
- package/dist/eslint/rules/finance-ledger-sync.d.ts.map +1 -0
- package/dist/eslint/rules/finance-ledger-sync.js +72 -0
- package/dist/eslint/rules/finance-ledger-sync.js.map +1 -0
- package/dist/eslint/rules/no-async-useeffect.d.ts +10 -0
- package/dist/eslint/rules/no-async-useeffect.d.ts.map +1 -0
- package/dist/eslint/rules/no-async-useeffect.js +49 -0
- package/dist/eslint/rules/no-async-useeffect.js.map +1 -0
- package/dist/eslint/rules/no-await-in-loop.d.ts +10 -0
- package/dist/eslint/rules/no-await-in-loop.d.ts.map +1 -0
- package/dist/eslint/rules/no-await-in-loop.js +51 -0
- package/dist/eslint/rules/no-await-in-loop.js.map +1 -0
- package/dist/eslint/rules/no-inline-functions-in-jsx.d.ts +10 -0
- package/dist/eslint/rules/no-inline-functions-in-jsx.d.ts.map +1 -0
- package/dist/eslint/rules/no-inline-functions-in-jsx.js +45 -0
- package/dist/eslint/rules/no-inline-functions-in-jsx.js.map +1 -0
- package/dist/eslint/rules/no-raw-sql.d.ts +19 -0
- package/dist/eslint/rules/no-raw-sql.d.ts.map +1 -0
- package/dist/eslint/rules/no-raw-sql.js +136 -0
- package/dist/eslint/rules/no-raw-sql.js.map +1 -0
- package/dist/eslint/rules/no-sequential-api-calls.d.ts +10 -0
- package/dist/eslint/rules/no-sequential-api-calls.d.ts.map +1 -0
- package/dist/eslint/rules/no-sequential-api-calls.js +72 -0
- package/dist/eslint/rules/no-sequential-api-calls.js.map +1 -0
- package/dist/eslint/rules/prefer-server-components.d.ts +10 -0
- package/dist/eslint/rules/prefer-server-components.d.ts.map +1 -0
- package/dist/eslint/rules/prefer-server-components.js +76 -0
- package/dist/eslint/rules/prefer-server-components.js.map +1 -0
- package/dist/eslint/rules/require-loading-states.d.ts +9 -0
- package/dist/eslint/rules/require-loading-states.d.ts.map +1 -0
- package/dist/eslint/rules/require-loading-states.js +85 -0
- package/dist/eslint/rules/require-loading-states.js.map +1 -0
- package/dist/eslint/rules/require-zod-validation.d.ts +10 -0
- package/dist/eslint/rules/require-zod-validation.d.ts.map +1 -0
- package/dist/eslint/rules/require-zod-validation.js +70 -0
- package/dist/eslint/rules/require-zod-validation.js.map +1 -0
- package/dist/eslint/rules/semantic-tokens-only.d.ts +10 -0
- package/dist/eslint/rules/semantic-tokens-only.d.ts.map +1 -0
- package/dist/eslint/rules/semantic-tokens-only.js +62 -0
- package/dist/eslint/rules/semantic-tokens-only.js.map +1 -0
- package/dist/feedback/collector.d.ts +74 -0
- package/dist/feedback/collector.d.ts.map +1 -0
- package/dist/feedback/collector.js +231 -0
- package/dist/feedback/collector.js.map +1 -0
- package/dist/feedback/index.d.ts +5 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +5 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/memory-checkpoint.d.ts +43 -0
- package/dist/hooks/memory-checkpoint.d.ts.map +1 -0
- package/dist/hooks/memory-checkpoint.js +257 -0
- package/dist/hooks/memory-checkpoint.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts +61 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -0
- package/dist/hooks/post-tool-use.js +262 -0
- package/dist/hooks/post-tool-use.js.map +1 -0
- package/dist/hooks/pre-tool-use.d.ts +34 -0
- package/dist/hooks/pre-tool-use.d.ts.map +1 -0
- package/dist/hooks/pre-tool-use.js +358 -0
- package/dist/hooks/pre-tool-use.js.map +1 -0
- package/dist/hooks/session-start.d.ts +38 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +274 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +42 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +599 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/registry/embeddings.d.ts +38 -0
- package/dist/registry/embeddings.d.ts.map +1 -0
- package/dist/registry/embeddings.js +110 -0
- package/dist/registry/embeddings.js.map +1 -0
- package/dist/registry/generator.d.ts +41 -0
- package/dist/registry/generator.d.ts.map +1 -0
- package/dist/registry/generator.js +323 -0
- package/dist/registry/generator.js.map +1 -0
- package/dist/registry/index.d.ts +6 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +6 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/services/IdeaCollector.d.ts +103 -0
- package/dist/services/IdeaCollector.d.ts.map +1 -0
- package/dist/services/IdeaCollector.js +371 -0
- package/dist/services/IdeaCollector.js.map +1 -0
- package/dist/services/ProjectScaffold.d.ts +76 -0
- package/dist/services/ProjectScaffold.d.ts.map +1 -0
- package/dist/services/ProjectScaffold.js +479 -0
- package/dist/services/ProjectScaffold.js.map +1 -0
- package/dist/services/ProjectScanner.d.ts +81 -0
- package/dist/services/ProjectScanner.d.ts.map +1 -0
- package/dist/services/ProjectScanner.js +349 -0
- package/dist/services/ProjectScanner.js.map +1 -0
- package/dist/services/TaskTracker.d.ts +89 -0
- package/dist/services/TaskTracker.d.ts.map +1 -0
- package/dist/services/TaskTracker.js +324 -0
- package/dist/services/TaskTracker.js.map +1 -0
- package/dist/services/WorkPlanManager.d.ts +107 -0
- package/dist/services/WorkPlanManager.d.ts.map +1 -0
- package/dist/services/WorkPlanManager.js +440 -0
- package/dist/services/WorkPlanManager.js.map +1 -0
- package/dist/services/auto-inject.d.ts +77 -0
- package/dist/services/auto-inject.d.ts.map +1 -0
- package/dist/services/auto-inject.js +289 -0
- package/dist/services/auto-inject.js.map +1 -0
- package/dist/services/auto-tag.d.ts +61 -0
- package/dist/services/auto-tag.d.ts.map +1 -0
- package/dist/services/auto-tag.js +203 -0
- package/dist/services/auto-tag.js.map +1 -0
- package/dist/services/cross-project-sync.d.ts +76 -0
- package/dist/services/cross-project-sync.d.ts.map +1 -0
- package/dist/services/cross-project-sync.js +235 -0
- package/dist/services/cross-project-sync.js.map +1 -0
- package/dist/services/index.d.ts +17 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +23 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/memory-consolidation.d.ts +77 -0
- package/dist/services/memory-consolidation.d.ts.map +1 -0
- package/dist/services/memory-consolidation.js +298 -0
- package/dist/services/memory-consolidation.js.map +1 -0
- package/dist/services/semantic-search.d.ts +93 -0
- package/dist/services/semantic-search.d.ts.map +1 -0
- package/dist/services/semantic-search.js +278 -0
- package/dist/services/semantic-search.js.map +1 -0
- package/dist/services/weekly-digest.d.ts +105 -0
- package/dist/services/weekly-digest.d.ts.map +1 -0
- package/dist/services/weekly-digest.js +292 -0
- package/dist/services/weekly-digest.js.map +1 -0
- package/dist/types/index.d.ts +274 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +84 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +21 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +89 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/paths.d.ts +28 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +80 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +95 -0
- package/templates/agents/architecture-expert.md +61 -0
- package/templates/agents/database-expert.md +62 -0
- package/templates/agents/documentation-expert.md +57 -0
- package/templates/agents/memory-expert.md +88 -0
- package/templates/agents/performance-expert.md +61 -0
- package/templates/agents/security-expert.md +59 -0
- package/templates/agents/ux-expert.md +63 -0
- package/templates/agents/worker.md +75 -0
- package/templates/ai-skills/SKILL_TEMPLATE.md +55 -0
- package/templates/commands/experts.md +138 -0
- package/templates/hooks/README.md +158 -0
- package/templates/hooks/project.config.json.template +77 -0
- package/templates/hooks/settings.local.json.template +57 -0
- package/templates/memory-config.json +82 -0
- package/templates/memory-config.schema.json +212 -0
- package/templates/settings.json +58 -0
- package/templates/workflows/business-improvement.md +264 -0
- package/templates/workflows/expert-review.md +153 -0
- package/templates/workflows/internal-app.md +245 -0
- package/templates/workflows/sync-docs.md +187 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE,YAAY;IACxB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,eAAe;CACtB,CAAA;AAIV,gFAAgF;AAChF,aAAa;AACb,gFAAgF;AAEhF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,kBAAkB;CAC5B,CAAA;AAIV,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;CACd,CAAA;AAIV,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;CACF,CAAA;AAiRV,gFAAgF;AAChF,eAAe;AACf,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAuC;IACrE,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,OAAO,OAAmC,CAAA;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuC;IACtE,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,OAAO,OAAoC,CAAA;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAa;IAEb,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAC9B,OAAO,IAAI,CAAC,OAAuC,CAAA;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAC9B,OAAO,IAAI,CAAC,OAAoC,CAAA;AAClD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration utilities
|
|
3
|
+
*/
|
|
4
|
+
import type { MemoryConfig, DevSystem } from '../types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Default configuration
|
|
7
|
+
*/
|
|
8
|
+
export declare function getDefaultConfig(system: DevSystem): MemoryConfig;
|
|
9
|
+
/**
|
|
10
|
+
* Load configuration from project
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadConfig(projectRoot: string): Promise<MemoryConfig>;
|
|
13
|
+
/**
|
|
14
|
+
* Save configuration to project
|
|
15
|
+
*/
|
|
16
|
+
export declare function saveConfig(projectRoot: string, config: MemoryConfig): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Validate configuration
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateConfig(config: unknown): config is MemoryConfig;
|
|
21
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAA;AAI5E;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,CAsChE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAe3E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,YAAY,CAWtE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration utilities
|
|
3
|
+
*/
|
|
4
|
+
import fs from 'fs/promises';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
const CONFIG_FILE = '.claude/memory-config.json';
|
|
7
|
+
/**
|
|
8
|
+
* Default configuration
|
|
9
|
+
*/
|
|
10
|
+
export function getDefaultConfig(system) {
|
|
11
|
+
return {
|
|
12
|
+
system,
|
|
13
|
+
projectName: 'Unknown Project',
|
|
14
|
+
domains: [],
|
|
15
|
+
guards: {
|
|
16
|
+
enabled: true,
|
|
17
|
+
rules: []
|
|
18
|
+
},
|
|
19
|
+
embedding: {
|
|
20
|
+
enabled: true,
|
|
21
|
+
threshold: 0.60,
|
|
22
|
+
maxSections: 3,
|
|
23
|
+
prioritizeCritical: true,
|
|
24
|
+
providers: ['openai', 'gemini']
|
|
25
|
+
},
|
|
26
|
+
checkpoint: {
|
|
27
|
+
enabled: true,
|
|
28
|
+
minLinesChanged: 20,
|
|
29
|
+
criticalPaths: ['src/server/schema/**', 'src/server/api/**'],
|
|
30
|
+
excludePaths: ['**/*.test.ts', '**/*.d.ts'],
|
|
31
|
+
autoTagging: true,
|
|
32
|
+
patternDetection: true
|
|
33
|
+
},
|
|
34
|
+
autoImprovement: {
|
|
35
|
+
enabled: true,
|
|
36
|
+
violationThreshold: 3,
|
|
37
|
+
generateEslintRules: true,
|
|
38
|
+
createMemoryEntries: true,
|
|
39
|
+
updateClaudeMd: false
|
|
40
|
+
},
|
|
41
|
+
sessionContext: {
|
|
42
|
+
loadMemoriesOnStart: true,
|
|
43
|
+
maxMemoriesLoaded: 5,
|
|
44
|
+
cacheTimeout: 3600,
|
|
45
|
+
showAvailableCommands: true
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load configuration from project
|
|
51
|
+
*/
|
|
52
|
+
export async function loadConfig(projectRoot) {
|
|
53
|
+
const configPath = path.join(projectRoot, CONFIG_FILE);
|
|
54
|
+
try {
|
|
55
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
56
|
+
const parsed = JSON.parse(content);
|
|
57
|
+
return parsed;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (error.code === 'ENOENT') {
|
|
61
|
+
// Return default config if not found
|
|
62
|
+
console.warn(`Config not found at ${configPath}, using defaults`);
|
|
63
|
+
return getDefaultConfig('SWARMSCALE');
|
|
64
|
+
}
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Save configuration to project
|
|
70
|
+
*/
|
|
71
|
+
export async function saveConfig(projectRoot, config) {
|
|
72
|
+
const configPath = path.join(projectRoot, CONFIG_FILE);
|
|
73
|
+
// Ensure directory exists
|
|
74
|
+
await fs.mkdir(path.dirname(configPath), { recursive: true });
|
|
75
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Validate configuration
|
|
79
|
+
*/
|
|
80
|
+
export function validateConfig(config) {
|
|
81
|
+
if (!config || typeof config !== 'object')
|
|
82
|
+
return false;
|
|
83
|
+
const c = config;
|
|
84
|
+
return (typeof c.system === 'string' &&
|
|
85
|
+
Array.isArray(c.domains) &&
|
|
86
|
+
typeof c.guards === 'object' &&
|
|
87
|
+
typeof c.embedding === 'object');
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utils module exports
|
|
3
|
+
*/
|
|
4
|
+
export { loadConfig, saveConfig, validateConfig, getDefaultConfig } from './config.js';
|
|
5
|
+
export { getProjectRoot, resolveProjectPath, getClaudeDir, getHooksDir, getKnowledgeDir, matchesPattern } from './paths.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EACjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACf,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utils module exports
|
|
3
|
+
*/
|
|
4
|
+
export { loadConfig, saveConfig, validateConfig, getDefaultConfig } from './config.js';
|
|
5
|
+
export { getProjectRoot, resolveProjectPath, getClaudeDir, getHooksDir, getKnowledgeDir, matchesPattern } from './paths.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EACjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,cAAc,EACf,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Find project root by looking for package.json or .git
|
|
6
|
+
*/
|
|
7
|
+
export declare function getProjectRoot(startDir?: string): Promise<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Resolve a path relative to project root
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveProjectPath(projectRoot: string, relativePath: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Get .claude directory path
|
|
14
|
+
*/
|
|
15
|
+
export declare function getClaudeDir(projectRoot: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Get hooks directory path
|
|
18
|
+
*/
|
|
19
|
+
export declare function getHooksDir(projectRoot: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Get knowledge directory path
|
|
22
|
+
*/
|
|
23
|
+
export declare function getKnowledgeDir(projectRoot: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Check if path matches any glob pattern
|
|
26
|
+
*/
|
|
27
|
+
export declare function matchesPattern(filePath: string, patterns: string[]): boolean;
|
|
28
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAS5E"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path utilities
|
|
3
|
+
*/
|
|
4
|
+
import fs from 'fs/promises';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
/**
|
|
7
|
+
* Find project root by looking for package.json or .git
|
|
8
|
+
*/
|
|
9
|
+
export async function getProjectRoot(startDir) {
|
|
10
|
+
let currentDir = startDir || process.cwd();
|
|
11
|
+
while (currentDir !== path.parse(currentDir).root) {
|
|
12
|
+
// Check for package.json
|
|
13
|
+
try {
|
|
14
|
+
await fs.access(path.join(currentDir, 'package.json'));
|
|
15
|
+
return currentDir;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Check for .git
|
|
19
|
+
try {
|
|
20
|
+
await fs.access(path.join(currentDir, '.git'));
|
|
21
|
+
return currentDir;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Continue searching
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
currentDir = path.dirname(currentDir);
|
|
28
|
+
}
|
|
29
|
+
// Fallback to current directory
|
|
30
|
+
return process.cwd();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolve a path relative to project root
|
|
34
|
+
*/
|
|
35
|
+
export function resolveProjectPath(projectRoot, relativePath) {
|
|
36
|
+
return path.resolve(projectRoot, relativePath);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get .claude directory path
|
|
40
|
+
*/
|
|
41
|
+
export function getClaudeDir(projectRoot) {
|
|
42
|
+
return path.join(projectRoot, '.claude');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get hooks directory path
|
|
46
|
+
*/
|
|
47
|
+
export function getHooksDir(projectRoot) {
|
|
48
|
+
return path.join(projectRoot, '.claude', 'hooks');
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get knowledge directory path
|
|
52
|
+
*/
|
|
53
|
+
export function getKnowledgeDir(projectRoot) {
|
|
54
|
+
return path.join(projectRoot, '.claude', 'knowledge');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if path matches any glob pattern
|
|
58
|
+
*/
|
|
59
|
+
export function matchesPattern(filePath, patterns) {
|
|
60
|
+
// Simple glob matching (supports ** and *)
|
|
61
|
+
for (const pattern of patterns) {
|
|
62
|
+
const regex = globToRegex(pattern);
|
|
63
|
+
if (regex.test(filePath)) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Convert glob pattern to regex
|
|
71
|
+
*/
|
|
72
|
+
function globToRegex(glob) {
|
|
73
|
+
const escaped = glob
|
|
74
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
75
|
+
.replace(/\*\*/g, '{{GLOBSTAR}}')
|
|
76
|
+
.replace(/\*/g, '[^/]*')
|
|
77
|
+
.replace(/{{GLOBSTAR}}/g, '.*');
|
|
78
|
+
return new RegExp(`^${escaped}$`);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAiB;IACpD,IAAI,UAAU,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAE1C,OAAO,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,yBAAyB;QACzB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAA;YACtD,OAAO,UAAU,CAAA;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;YACjB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;gBAC9C,OAAO,UAAU,CAAA;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;QAED,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;IAED,gCAAgC;IAChC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAA;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,YAAoB;IAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,QAAkB;IACjE,2CAA2C;IAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,OAAO,GAAG,IAAI;SACjB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACpC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC;SAChC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;IAEjC,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAA;AACnC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cmp-standards",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Unified standards, memory, ESLint rules & workflow system for Claude Code projects",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"cmp-standards": "dist/cli/index.js",
|
|
10
|
+
"cmp-memory": "dist/cli/index.js"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"dev": "tsc --watch",
|
|
15
|
+
"test": "vitest",
|
|
16
|
+
"lint": "eslint src/**/*.ts",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"claude",
|
|
21
|
+
"ai",
|
|
22
|
+
"memory",
|
|
23
|
+
"workflow",
|
|
24
|
+
"hooks",
|
|
25
|
+
"task-tracking"
|
|
26
|
+
],
|
|
27
|
+
"author": "Carlos Martin Pavon",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/carlosmartinpavon/carlosmartinpavon.git",
|
|
32
|
+
"directory": "packages/cmp-standards"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://github.com/carlosmartinpavon/carlosmartinpavon/tree/main/packages/cmp-standards",
|
|
35
|
+
"bugs": {
|
|
36
|
+
"url": "https://github.com/carlosmartinpavon/carlosmartinpavon/issues"
|
|
37
|
+
},
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=18.0.0"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
46
|
+
"chalk": "^5.3.0",
|
|
47
|
+
"commander": "^12.0.0",
|
|
48
|
+
"cors": "^2.8.5",
|
|
49
|
+
"dotenv": "^17.2.3",
|
|
50
|
+
"drizzle-orm": ">=0.30.0",
|
|
51
|
+
"express": "^4.18.2",
|
|
52
|
+
"glob": "^10.3.10",
|
|
53
|
+
"gray-matter": "^4.0.3",
|
|
54
|
+
"mysql2": ">=3.0.0",
|
|
55
|
+
"open": "^10.0.0",
|
|
56
|
+
"ulid": "^2.3.0"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"drizzle-orm": ">=0.30.0",
|
|
60
|
+
"mysql2": ">=3.0.0"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/cors": "^2.8.17",
|
|
64
|
+
"@types/eslint": "^8.56.0",
|
|
65
|
+
"@types/express": "^4.17.21",
|
|
66
|
+
"@types/node": "^20.11.0",
|
|
67
|
+
"@typescript-eslint/eslint-plugin": "^6.19.0",
|
|
68
|
+
"@typescript-eslint/parser": "^6.19.0",
|
|
69
|
+
"eslint": "^8.56.0",
|
|
70
|
+
"typescript": "^5.3.3",
|
|
71
|
+
"vitest": "^1.2.0"
|
|
72
|
+
},
|
|
73
|
+
"files": [
|
|
74
|
+
"dist",
|
|
75
|
+
"templates",
|
|
76
|
+
"README.md"
|
|
77
|
+
],
|
|
78
|
+
"exports": {
|
|
79
|
+
".": {
|
|
80
|
+
"import": "./dist/index.js",
|
|
81
|
+
"types": "./dist/index.d.ts"
|
|
82
|
+
},
|
|
83
|
+
"./hooks": {
|
|
84
|
+
"import": "./dist/hooks/index.js",
|
|
85
|
+
"types": "./dist/hooks/index.d.ts"
|
|
86
|
+
},
|
|
87
|
+
"./cli": {
|
|
88
|
+
"import": "./dist/cli/index.js"
|
|
89
|
+
},
|
|
90
|
+
"./eslint": {
|
|
91
|
+
"import": "./dist/eslint/index.js",
|
|
92
|
+
"types": "./dist/eslint/index.d.ts"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture-expert
|
|
3
|
+
description: Software architecture specialist. Validates SOLID principles, type inference chain, module structure, and coding standards.
|
|
4
|
+
tools: Read, Grep, Glob
|
|
5
|
+
model: sonnet
|
|
6
|
+
permissionMode: default
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Architecture Expert
|
|
10
|
+
|
|
11
|
+
You are the **Architecture Expert** for code review. Your role is to ensure code follows architectural best practices.
|
|
12
|
+
|
|
13
|
+
## Checklist
|
|
14
|
+
|
|
15
|
+
### 1. Type Safety
|
|
16
|
+
- [ ] Type inference chain intact (DB → API → UI)
|
|
17
|
+
- [ ] No manual type duplication
|
|
18
|
+
- [ ] Proper use of generics
|
|
19
|
+
- [ ] No `any` or `unknown` types
|
|
20
|
+
|
|
21
|
+
### 2. Module Structure
|
|
22
|
+
- [ ] Code in correct domain module
|
|
23
|
+
- [ ] No circular dependencies
|
|
24
|
+
- [ ] Proper separation of concerns
|
|
25
|
+
- [ ] Barrel exports used correctly
|
|
26
|
+
|
|
27
|
+
### 3. SOLID Principles
|
|
28
|
+
- [ ] Single Responsibility
|
|
29
|
+
- [ ] Open/Closed
|
|
30
|
+
- [ ] Dependency Inversion (inject dependencies)
|
|
31
|
+
|
|
32
|
+
### 4. Code Organization
|
|
33
|
+
- [ ] Consistent file naming
|
|
34
|
+
- [ ] Logical folder structure
|
|
35
|
+
- [ ] Related code grouped together
|
|
36
|
+
|
|
37
|
+
## Output Format
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"vote": "APPROVE" | "REJECT" | "ABSTAIN",
|
|
42
|
+
"severity": "critical" | "high" | "medium" | "low" | "none",
|
|
43
|
+
"issues": [
|
|
44
|
+
{
|
|
45
|
+
"type": "architecture",
|
|
46
|
+
"severity": "medium",
|
|
47
|
+
"file": "path/to/file.ts",
|
|
48
|
+
"line": 42,
|
|
49
|
+
"message": "Type manually duplicated instead of inferred",
|
|
50
|
+
"fix": "Use ReturnType<typeof query> pattern"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"summary": "Brief summary of findings"
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Voting Rules
|
|
58
|
+
|
|
59
|
+
- **REJECT**: Circular deps, type safety violations, wrong module placement
|
|
60
|
+
- **APPROVE**: Follows patterns and standards
|
|
61
|
+
- **ABSTAIN**: No architecture-relevant changes
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: database-expert
|
|
3
|
+
description: Database schema validation, type synchronization, migration safety, and query optimization.
|
|
4
|
+
tools: Read, Grep
|
|
5
|
+
model: sonnet
|
|
6
|
+
permissionMode: default
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Database Expert
|
|
10
|
+
|
|
11
|
+
You are the **Database Expert** for code review. Your role is to ensure database operations are safe and efficient.
|
|
12
|
+
|
|
13
|
+
## Checklist
|
|
14
|
+
|
|
15
|
+
### 1. Schema Validation
|
|
16
|
+
- [ ] Proper constraints (NOT NULL, UNIQUE, FK)
|
|
17
|
+
- [ ] Appropriate column types
|
|
18
|
+
- [ ] Indexes on frequently queried columns
|
|
19
|
+
- [ ] Referential integrity maintained
|
|
20
|
+
|
|
21
|
+
### 2. Type Synchronization
|
|
22
|
+
- [ ] DB types match ORM types
|
|
23
|
+
- [ ] API types inferred from DB
|
|
24
|
+
- [ ] No manual type duplication
|
|
25
|
+
|
|
26
|
+
### 3. Migration Safety
|
|
27
|
+
- [ ] Rollback plan exists
|
|
28
|
+
- [ ] No data loss risk
|
|
29
|
+
- [ ] Backward compatible changes
|
|
30
|
+
- [ ] Large table migrations handled
|
|
31
|
+
|
|
32
|
+
### 4. Query Optimization
|
|
33
|
+
- [ ] No N+1 queries
|
|
34
|
+
- [ ] Proper eager/lazy loading
|
|
35
|
+
- [ ] Transactions used correctly
|
|
36
|
+
- [ ] Connection pooling configured
|
|
37
|
+
|
|
38
|
+
## Output Format
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"vote": "APPROVE" | "REJECT" | "ABSTAIN",
|
|
43
|
+
"severity": "critical" | "high" | "medium" | "low" | "none",
|
|
44
|
+
"issues": [
|
|
45
|
+
{
|
|
46
|
+
"type": "database",
|
|
47
|
+
"severity": "high",
|
|
48
|
+
"file": "path/to/schema.ts",
|
|
49
|
+
"line": 42,
|
|
50
|
+
"message": "Missing foreign key constraint",
|
|
51
|
+
"fix": "Add references() to column definition"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"summary": "Brief summary of findings"
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Voting Rules
|
|
59
|
+
|
|
60
|
+
- **REJECT**: Data loss risk, missing constraints on critical data, N+1 queries
|
|
61
|
+
- **APPROVE**: Safe schema changes, proper query patterns
|
|
62
|
+
- **ABSTAIN**: No database code to review
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: documentation-expert
|
|
3
|
+
description: Documentation health specialist. Validates doc accuracy, identifies stale docs, ensures proper context.
|
|
4
|
+
tools: Read, Grep
|
|
5
|
+
model: sonnet
|
|
6
|
+
permissionMode: default
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Documentation Expert
|
|
10
|
+
|
|
11
|
+
You are the **Documentation Expert**. Your role is to ensure documentation stays accurate and useful.
|
|
12
|
+
|
|
13
|
+
## Responsibilities
|
|
14
|
+
|
|
15
|
+
### 1. Doc Accuracy
|
|
16
|
+
- [ ] Code matches documentation
|
|
17
|
+
- [ ] Examples are runnable
|
|
18
|
+
- [ ] API docs match implementation
|
|
19
|
+
- [ ] No outdated information
|
|
20
|
+
|
|
21
|
+
### 2. Doc Coverage
|
|
22
|
+
- [ ] Public APIs documented
|
|
23
|
+
- [ ] Complex logic explained
|
|
24
|
+
- [ ] Setup instructions complete
|
|
25
|
+
- [ ] Troubleshooting guides present
|
|
26
|
+
|
|
27
|
+
### 3. Context Optimization
|
|
28
|
+
- [ ] CLAUDE.md is current
|
|
29
|
+
- [ ] README reflects current state
|
|
30
|
+
- [ ] Important decisions documented (ADRs)
|
|
31
|
+
|
|
32
|
+
## Output Format
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"vote": "ABSTAIN",
|
|
37
|
+
"doc_health": {
|
|
38
|
+
"stale_docs": ["path/to/outdated.md"],
|
|
39
|
+
"missing_docs": ["feature X needs documentation"],
|
|
40
|
+
"outdated_examples": []
|
|
41
|
+
},
|
|
42
|
+
"recommendations": [
|
|
43
|
+
{
|
|
44
|
+
"type": "update",
|
|
45
|
+
"file": "README.md",
|
|
46
|
+
"reason": "Installation instructions outdated"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"summary": "Documentation health summary"
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Voting Rules
|
|
54
|
+
|
|
55
|
+
**Always vote ABSTAIN** - documentation quality doesn't block code changes.
|
|
56
|
+
|
|
57
|
+
Your role is advisory - flag issues but don't block merges for documentation problems.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory-expert
|
|
3
|
+
description: Pattern detection and auto-improvement specialist. Detects repeated patterns, generates ESLint rules, creates memory entries. Always votes ABSTAIN.
|
|
4
|
+
tools: Read, Grep, Write
|
|
5
|
+
model: sonnet
|
|
6
|
+
permissionMode: default
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Memory Expert
|
|
10
|
+
|
|
11
|
+
You are the **Memory Expert** for the cmp-memory-system. Your role is to detect patterns and trigger auto-improvements.
|
|
12
|
+
|
|
13
|
+
## Prime Directive
|
|
14
|
+
|
|
15
|
+
**ALWAYS vote ABSTAIN** - your role is learning, not judging code quality.
|
|
16
|
+
|
|
17
|
+
## Responsibilities
|
|
18
|
+
|
|
19
|
+
### 1. Pattern Detection
|
|
20
|
+
- Track repeated violations across reviews
|
|
21
|
+
- When pattern detected 3+ times → trigger auto-improvement
|
|
22
|
+
- Log patterns for future prevention
|
|
23
|
+
|
|
24
|
+
### 2. Auto-Improvement Triggers
|
|
25
|
+
When threshold met:
|
|
26
|
+
- Generate ESLint rule proposal
|
|
27
|
+
- Create memory entry documenting the gotcha
|
|
28
|
+
- Propose addition to CLAUDE.md
|
|
29
|
+
|
|
30
|
+
### 3. Regression Detection
|
|
31
|
+
- Check if current issue was fixed before
|
|
32
|
+
- Alert if pattern is recurring
|
|
33
|
+
- Suggest strengthening prevention
|
|
34
|
+
|
|
35
|
+
## Detection Patterns
|
|
36
|
+
|
|
37
|
+
### Common Patterns to Track:
|
|
38
|
+
- Missing input validation
|
|
39
|
+
- Hardcoded values that should be config
|
|
40
|
+
- Repeated type casting
|
|
41
|
+
- Similar code across files (DRY violations)
|
|
42
|
+
- Missing error handling patterns
|
|
43
|
+
|
|
44
|
+
## Output Format
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"vote": "ABSTAIN",
|
|
49
|
+
"patterns_detected": [
|
|
50
|
+
{
|
|
51
|
+
"id": "missing-zod-validation",
|
|
52
|
+
"occurrences": 3,
|
|
53
|
+
"threshold_met": true,
|
|
54
|
+
"action": "Generate ESLint rule"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"auto_improvements": [
|
|
58
|
+
{
|
|
59
|
+
"type": "eslint-rule",
|
|
60
|
+
"name": "require-input-validation",
|
|
61
|
+
"status": "proposed"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"regressions": [],
|
|
65
|
+
"summary": "Detected 1 pattern ready for auto-improvement"
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Auto-Improvement Flow
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Detection (3+ occurrences)
|
|
73
|
+
↓
|
|
74
|
+
Propose ESLint Rule
|
|
75
|
+
↓
|
|
76
|
+
Create Memory Entry
|
|
77
|
+
↓
|
|
78
|
+
Update CLAUDE.md
|
|
79
|
+
↓
|
|
80
|
+
Pattern PREVENTED system-wide ✓
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## What You Track
|
|
84
|
+
|
|
85
|
+
1. **Gotchas**: Things that catch developers repeatedly
|
|
86
|
+
2. **Decisions**: Architectural choices made
|
|
87
|
+
3. **Standards**: Coding patterns to enforce
|
|
88
|
+
4. **Exceptions**: Valid deviations from rules
|