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.
Files changed (238) hide show
  1. package/README.md +541 -0
  2. package/dist/analytics/index.d.ts +5 -0
  3. package/dist/analytics/index.d.ts.map +1 -0
  4. package/dist/analytics/index.js +5 -0
  5. package/dist/analytics/index.js.map +1 -0
  6. package/dist/analytics/tracker.d.ts +107 -0
  7. package/dist/analytics/tracker.d.ts.map +1 -0
  8. package/dist/analytics/tracker.js +333 -0
  9. package/dist/analytics/tracker.js.map +1 -0
  10. package/dist/auto-improve/eslint-generator.d.ts +36 -0
  11. package/dist/auto-improve/eslint-generator.d.ts.map +1 -0
  12. package/dist/auto-improve/eslint-generator.js +280 -0
  13. package/dist/auto-improve/eslint-generator.js.map +1 -0
  14. package/dist/auto-improve/index.d.ts +6 -0
  15. package/dist/auto-improve/index.d.ts.map +1 -0
  16. package/dist/auto-improve/index.js +6 -0
  17. package/dist/auto-improve/index.js.map +1 -0
  18. package/dist/auto-improve/pattern-detector.d.ts +92 -0
  19. package/dist/auto-improve/pattern-detector.d.ts.map +1 -0
  20. package/dist/auto-improve/pattern-detector.js +231 -0
  21. package/dist/auto-improve/pattern-detector.js.map +1 -0
  22. package/dist/cli/index.d.ts +18 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +769 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/dashboard/index.d.ts +6 -0
  27. package/dist/dashboard/index.d.ts.map +1 -0
  28. package/dist/dashboard/index.js +6 -0
  29. package/dist/dashboard/index.js.map +1 -0
  30. package/dist/dashboard/server.d.ts +15 -0
  31. package/dist/dashboard/server.d.ts.map +1 -0
  32. package/dist/dashboard/server.js +373 -0
  33. package/dist/dashboard/server.js.map +1 -0
  34. package/dist/dashboard/ui.d.ts +9 -0
  35. package/dist/dashboard/ui.d.ts.map +1 -0
  36. package/dist/dashboard/ui.js +530 -0
  37. package/dist/dashboard/ui.js.map +1 -0
  38. package/dist/db/client.d.ts +66 -0
  39. package/dist/db/client.d.ts.map +1 -0
  40. package/dist/db/client.js +159 -0
  41. package/dist/db/client.js.map +1 -0
  42. package/dist/db/drizzle-client.d.ts +302 -0
  43. package/dist/db/drizzle-client.d.ts.map +1 -0
  44. package/dist/db/drizzle-client.js +404 -0
  45. package/dist/db/drizzle-client.js.map +1 -0
  46. package/dist/db/index.d.ts +5 -0
  47. package/dist/db/index.d.ts.map +1 -0
  48. package/dist/db/index.js +5 -0
  49. package/dist/db/index.js.map +1 -0
  50. package/dist/eslint/config-builder.d.ts +45 -0
  51. package/dist/eslint/config-builder.d.ts.map +1 -0
  52. package/dist/eslint/config-builder.js +128 -0
  53. package/dist/eslint/config-builder.js.map +1 -0
  54. package/dist/eslint/index.d.ts +161 -0
  55. package/dist/eslint/index.d.ts.map +1 -0
  56. package/dist/eslint/index.js +106 -0
  57. package/dist/eslint/index.js.map +1 -0
  58. package/dist/eslint/rules/consistent-error-handling.d.ts +9 -0
  59. package/dist/eslint/rules/consistent-error-handling.d.ts.map +1 -0
  60. package/dist/eslint/rules/consistent-error-handling.js +52 -0
  61. package/dist/eslint/rules/consistent-error-handling.js.map +1 -0
  62. package/dist/eslint/rules/finance-ledger-sync.d.ts +12 -0
  63. package/dist/eslint/rules/finance-ledger-sync.d.ts.map +1 -0
  64. package/dist/eslint/rules/finance-ledger-sync.js +72 -0
  65. package/dist/eslint/rules/finance-ledger-sync.js.map +1 -0
  66. package/dist/eslint/rules/no-async-useeffect.d.ts +10 -0
  67. package/dist/eslint/rules/no-async-useeffect.d.ts.map +1 -0
  68. package/dist/eslint/rules/no-async-useeffect.js +49 -0
  69. package/dist/eslint/rules/no-async-useeffect.js.map +1 -0
  70. package/dist/eslint/rules/no-await-in-loop.d.ts +10 -0
  71. package/dist/eslint/rules/no-await-in-loop.d.ts.map +1 -0
  72. package/dist/eslint/rules/no-await-in-loop.js +51 -0
  73. package/dist/eslint/rules/no-await-in-loop.js.map +1 -0
  74. package/dist/eslint/rules/no-inline-functions-in-jsx.d.ts +10 -0
  75. package/dist/eslint/rules/no-inline-functions-in-jsx.d.ts.map +1 -0
  76. package/dist/eslint/rules/no-inline-functions-in-jsx.js +45 -0
  77. package/dist/eslint/rules/no-inline-functions-in-jsx.js.map +1 -0
  78. package/dist/eslint/rules/no-raw-sql.d.ts +19 -0
  79. package/dist/eslint/rules/no-raw-sql.d.ts.map +1 -0
  80. package/dist/eslint/rules/no-raw-sql.js +136 -0
  81. package/dist/eslint/rules/no-raw-sql.js.map +1 -0
  82. package/dist/eslint/rules/no-sequential-api-calls.d.ts +10 -0
  83. package/dist/eslint/rules/no-sequential-api-calls.d.ts.map +1 -0
  84. package/dist/eslint/rules/no-sequential-api-calls.js +72 -0
  85. package/dist/eslint/rules/no-sequential-api-calls.js.map +1 -0
  86. package/dist/eslint/rules/prefer-server-components.d.ts +10 -0
  87. package/dist/eslint/rules/prefer-server-components.d.ts.map +1 -0
  88. package/dist/eslint/rules/prefer-server-components.js +76 -0
  89. package/dist/eslint/rules/prefer-server-components.js.map +1 -0
  90. package/dist/eslint/rules/require-loading-states.d.ts +9 -0
  91. package/dist/eslint/rules/require-loading-states.d.ts.map +1 -0
  92. package/dist/eslint/rules/require-loading-states.js +85 -0
  93. package/dist/eslint/rules/require-loading-states.js.map +1 -0
  94. package/dist/eslint/rules/require-zod-validation.d.ts +10 -0
  95. package/dist/eslint/rules/require-zod-validation.d.ts.map +1 -0
  96. package/dist/eslint/rules/require-zod-validation.js +70 -0
  97. package/dist/eslint/rules/require-zod-validation.js.map +1 -0
  98. package/dist/eslint/rules/semantic-tokens-only.d.ts +10 -0
  99. package/dist/eslint/rules/semantic-tokens-only.d.ts.map +1 -0
  100. package/dist/eslint/rules/semantic-tokens-only.js +62 -0
  101. package/dist/eslint/rules/semantic-tokens-only.js.map +1 -0
  102. package/dist/feedback/collector.d.ts +74 -0
  103. package/dist/feedback/collector.d.ts.map +1 -0
  104. package/dist/feedback/collector.js +231 -0
  105. package/dist/feedback/collector.js.map +1 -0
  106. package/dist/feedback/index.d.ts +5 -0
  107. package/dist/feedback/index.d.ts.map +1 -0
  108. package/dist/feedback/index.js +5 -0
  109. package/dist/feedback/index.js.map +1 -0
  110. package/dist/hooks/index.d.ts +8 -0
  111. package/dist/hooks/index.d.ts.map +1 -0
  112. package/dist/hooks/index.js +8 -0
  113. package/dist/hooks/index.js.map +1 -0
  114. package/dist/hooks/memory-checkpoint.d.ts +43 -0
  115. package/dist/hooks/memory-checkpoint.d.ts.map +1 -0
  116. package/dist/hooks/memory-checkpoint.js +257 -0
  117. package/dist/hooks/memory-checkpoint.js.map +1 -0
  118. package/dist/hooks/post-tool-use.d.ts +61 -0
  119. package/dist/hooks/post-tool-use.d.ts.map +1 -0
  120. package/dist/hooks/post-tool-use.js +262 -0
  121. package/dist/hooks/post-tool-use.js.map +1 -0
  122. package/dist/hooks/pre-tool-use.d.ts +34 -0
  123. package/dist/hooks/pre-tool-use.d.ts.map +1 -0
  124. package/dist/hooks/pre-tool-use.js +358 -0
  125. package/dist/hooks/pre-tool-use.js.map +1 -0
  126. package/dist/hooks/session-start.d.ts +38 -0
  127. package/dist/hooks/session-start.d.ts.map +1 -0
  128. package/dist/hooks/session-start.js +274 -0
  129. package/dist/hooks/session-start.js.map +1 -0
  130. package/dist/index.d.ts +29 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +39 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/mcp/index.d.ts +5 -0
  135. package/dist/mcp/index.d.ts.map +1 -0
  136. package/dist/mcp/index.js +5 -0
  137. package/dist/mcp/index.js.map +1 -0
  138. package/dist/mcp/server.d.ts +42 -0
  139. package/dist/mcp/server.d.ts.map +1 -0
  140. package/dist/mcp/server.js +599 -0
  141. package/dist/mcp/server.js.map +1 -0
  142. package/dist/registry/embeddings.d.ts +38 -0
  143. package/dist/registry/embeddings.d.ts.map +1 -0
  144. package/dist/registry/embeddings.js +110 -0
  145. package/dist/registry/embeddings.js.map +1 -0
  146. package/dist/registry/generator.d.ts +41 -0
  147. package/dist/registry/generator.d.ts.map +1 -0
  148. package/dist/registry/generator.js +323 -0
  149. package/dist/registry/generator.js.map +1 -0
  150. package/dist/registry/index.d.ts +6 -0
  151. package/dist/registry/index.d.ts.map +1 -0
  152. package/dist/registry/index.js +6 -0
  153. package/dist/registry/index.js.map +1 -0
  154. package/dist/services/IdeaCollector.d.ts +103 -0
  155. package/dist/services/IdeaCollector.d.ts.map +1 -0
  156. package/dist/services/IdeaCollector.js +371 -0
  157. package/dist/services/IdeaCollector.js.map +1 -0
  158. package/dist/services/ProjectScaffold.d.ts +76 -0
  159. package/dist/services/ProjectScaffold.d.ts.map +1 -0
  160. package/dist/services/ProjectScaffold.js +479 -0
  161. package/dist/services/ProjectScaffold.js.map +1 -0
  162. package/dist/services/ProjectScanner.d.ts +81 -0
  163. package/dist/services/ProjectScanner.d.ts.map +1 -0
  164. package/dist/services/ProjectScanner.js +349 -0
  165. package/dist/services/ProjectScanner.js.map +1 -0
  166. package/dist/services/TaskTracker.d.ts +89 -0
  167. package/dist/services/TaskTracker.d.ts.map +1 -0
  168. package/dist/services/TaskTracker.js +324 -0
  169. package/dist/services/TaskTracker.js.map +1 -0
  170. package/dist/services/WorkPlanManager.d.ts +107 -0
  171. package/dist/services/WorkPlanManager.d.ts.map +1 -0
  172. package/dist/services/WorkPlanManager.js +440 -0
  173. package/dist/services/WorkPlanManager.js.map +1 -0
  174. package/dist/services/auto-inject.d.ts +77 -0
  175. package/dist/services/auto-inject.d.ts.map +1 -0
  176. package/dist/services/auto-inject.js +289 -0
  177. package/dist/services/auto-inject.js.map +1 -0
  178. package/dist/services/auto-tag.d.ts +61 -0
  179. package/dist/services/auto-tag.d.ts.map +1 -0
  180. package/dist/services/auto-tag.js +203 -0
  181. package/dist/services/auto-tag.js.map +1 -0
  182. package/dist/services/cross-project-sync.d.ts +76 -0
  183. package/dist/services/cross-project-sync.d.ts.map +1 -0
  184. package/dist/services/cross-project-sync.js +235 -0
  185. package/dist/services/cross-project-sync.js.map +1 -0
  186. package/dist/services/index.d.ts +17 -0
  187. package/dist/services/index.d.ts.map +1 -0
  188. package/dist/services/index.js +23 -0
  189. package/dist/services/index.js.map +1 -0
  190. package/dist/services/memory-consolidation.d.ts +77 -0
  191. package/dist/services/memory-consolidation.d.ts.map +1 -0
  192. package/dist/services/memory-consolidation.js +298 -0
  193. package/dist/services/memory-consolidation.js.map +1 -0
  194. package/dist/services/semantic-search.d.ts +93 -0
  195. package/dist/services/semantic-search.d.ts.map +1 -0
  196. package/dist/services/semantic-search.js +278 -0
  197. package/dist/services/semantic-search.js.map +1 -0
  198. package/dist/services/weekly-digest.d.ts +105 -0
  199. package/dist/services/weekly-digest.d.ts.map +1 -0
  200. package/dist/services/weekly-digest.js +292 -0
  201. package/dist/services/weekly-digest.js.map +1 -0
  202. package/dist/types/index.d.ts +274 -0
  203. package/dist/types/index.d.ts.map +1 -0
  204. package/dist/types/index.js +84 -0
  205. package/dist/types/index.js.map +1 -0
  206. package/dist/utils/config.d.ts +21 -0
  207. package/dist/utils/config.d.ts.map +1 -0
  208. package/dist/utils/config.js +89 -0
  209. package/dist/utils/config.js.map +1 -0
  210. package/dist/utils/index.d.ts +6 -0
  211. package/dist/utils/index.d.ts.map +1 -0
  212. package/dist/utils/index.js +6 -0
  213. package/dist/utils/index.js.map +1 -0
  214. package/dist/utils/paths.d.ts +28 -0
  215. package/dist/utils/paths.d.ts.map +1 -0
  216. package/dist/utils/paths.js +80 -0
  217. package/dist/utils/paths.js.map +1 -0
  218. package/package.json +95 -0
  219. package/templates/agents/architecture-expert.md +61 -0
  220. package/templates/agents/database-expert.md +62 -0
  221. package/templates/agents/documentation-expert.md +57 -0
  222. package/templates/agents/memory-expert.md +88 -0
  223. package/templates/agents/performance-expert.md +61 -0
  224. package/templates/agents/security-expert.md +59 -0
  225. package/templates/agents/ux-expert.md +63 -0
  226. package/templates/agents/worker.md +75 -0
  227. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -0
  228. package/templates/commands/experts.md +138 -0
  229. package/templates/hooks/README.md +158 -0
  230. package/templates/hooks/project.config.json.template +77 -0
  231. package/templates/hooks/settings.local.json.template +57 -0
  232. package/templates/memory-config.json +82 -0
  233. package/templates/memory-config.schema.json +212 -0
  234. package/templates/settings.json +58 -0
  235. package/templates/workflows/business-improvement.md +264 -0
  236. package/templates/workflows/expert-review.md +153 -0
  237. package/templates/workflows/internal-app.md +245 -0
  238. 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