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,404 @@
1
+ /**
2
+ * Drizzle Database Client
3
+ *
4
+ * Real implementation that connects to DEV_Items table.
5
+ * Works with any MySQL database that has the DEV_Items table.
6
+ */
7
+ import { drizzle } from 'drizzle-orm/mysql2';
8
+ import { createPool } from 'mysql2/promise';
9
+ import { eq, and, desc } from 'drizzle-orm';
10
+ import { mysqlTable, varchar, json, timestamp, index } from 'drizzle-orm/mysql-core';
11
+ import { ulid } from 'ulid';
12
+ // =============================================================================
13
+ // SCHEMA DEFINITION
14
+ // =============================================================================
15
+ /**
16
+ * DEV_Items table schema (mirrors the actual table)
17
+ */
18
+ export const devItems = mysqlTable('DEV_Items', {
19
+ id: varchar('id', { length: 191 }).primaryKey(),
20
+ system: varchar('system', { length: 50 }).notNull(),
21
+ type: varchar('type', { length: 50 }).notNull(),
22
+ status: varchar('status', { length: 50 }),
23
+ priority: varchar('priority', { length: 20 }),
24
+ content: json('content'),
25
+ tags: json('tags'),
26
+ createdAt: timestamp('created_at').defaultNow(),
27
+ updatedAt: timestamp('updated_at').onUpdateNow(),
28
+ }, (table) => ({
29
+ systemIdx: index('system_idx').on(table.system),
30
+ typeIdx: index('type_idx').on(table.type),
31
+ systemTypeIdx: index('system_type_idx').on(table.system, table.type),
32
+ }));
33
+ let pool = null;
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ let db = null;
36
+ /**
37
+ * Get database configuration from environment
38
+ */
39
+ export function getDatabaseConfig() {
40
+ return {
41
+ host: process.env.DATABASE_HOST ?? 'localhost',
42
+ port: parseInt(process.env.DATABASE_PORT ?? '3306', 10),
43
+ user: process.env.DATABASE_USER ?? 'root',
44
+ password: process.env.DATABASE_PASSWORD ?? '',
45
+ database: process.env.DATABASE_NAME ?? 'metanautical',
46
+ };
47
+ }
48
+ /**
49
+ * Initialize database connection
50
+ */
51
+ export async function initDatabase(config) {
52
+ if (db)
53
+ return;
54
+ const dbConfig = config ?? getDatabaseConfig();
55
+ // PlanetScale requires SSL
56
+ const isPlanetScale = dbConfig.host.includes('psdb.cloud') || dbConfig.host.includes('connect.psdb');
57
+ pool = createPool({
58
+ host: dbConfig.host,
59
+ port: dbConfig.port,
60
+ user: dbConfig.user,
61
+ password: dbConfig.password,
62
+ database: dbConfig.database,
63
+ waitForConnections: true,
64
+ connectionLimit: 5,
65
+ queueLimit: 0,
66
+ ssl: isPlanetScale ? { rejectUnauthorized: true } : undefined,
67
+ });
68
+ db = drizzle(pool);
69
+ }
70
+ /**
71
+ * Get database instance
72
+ */
73
+ export function getDatabase() {
74
+ if (!db) {
75
+ throw new Error('Database not initialized. Call initDatabase() first.');
76
+ }
77
+ return db;
78
+ }
79
+ /**
80
+ * Close database connection
81
+ */
82
+ export async function closeDatabase() {
83
+ if (pool) {
84
+ await pool.end();
85
+ pool = null;
86
+ db = null;
87
+ }
88
+ }
89
+ export class DrizzleMemoryClient {
90
+ system;
91
+ initialized = false;
92
+ constructor(config) {
93
+ this.system = config.system;
94
+ if (config.databaseConfig) {
95
+ initDatabase(config.databaseConfig);
96
+ }
97
+ }
98
+ /**
99
+ * Ensure database is initialized
100
+ */
101
+ async ensureInitialized() {
102
+ if (!this.initialized) {
103
+ await initDatabase();
104
+ this.initialized = true;
105
+ }
106
+ return getDatabase();
107
+ }
108
+ // =========================================================================
109
+ // READ OPERATIONS
110
+ // =========================================================================
111
+ /**
112
+ * List items with filters
113
+ */
114
+ async list(options) {
115
+ const db = await this.ensureInitialized();
116
+ const conditions = [eq(devItems.system, this.system)];
117
+ if (options?.type) {
118
+ conditions.push(eq(devItems.type, options.type));
119
+ }
120
+ if (options?.status) {
121
+ conditions.push(eq(devItems.status, options.status));
122
+ }
123
+ let query = db
124
+ .select()
125
+ .from(devItems)
126
+ .where(and(...conditions))
127
+ .orderBy(desc(devItems.createdAt));
128
+ if (options?.limit) {
129
+ query = query.limit(options.limit);
130
+ }
131
+ if (options?.offset) {
132
+ query = query.offset(options.offset);
133
+ }
134
+ const results = await query;
135
+ // Filter by tags if specified (post-query)
136
+ if (options?.tags && options.tags.length > 0) {
137
+ return results.filter(item => {
138
+ const itemTags = (item.tags ?? []);
139
+ return options.tags.some(tag => itemTags.includes(tag));
140
+ });
141
+ }
142
+ return results;
143
+ }
144
+ /**
145
+ * Get single item by ID
146
+ */
147
+ async get(id) {
148
+ const db = await this.ensureInitialized();
149
+ const results = await db
150
+ .select()
151
+ .from(devItems)
152
+ .where(and(eq(devItems.id, id), eq(devItems.system, this.system)))
153
+ .limit(1);
154
+ return results[0] ?? null;
155
+ }
156
+ /**
157
+ * Search items by content
158
+ */
159
+ async search(query, options) {
160
+ const db = await this.ensureInitialized();
161
+ const conditions = [eq(devItems.system, this.system)];
162
+ if (options?.type) {
163
+ conditions.push(eq(devItems.type, options.type));
164
+ }
165
+ // Search in JSON content fields
166
+ const results = await db
167
+ .select()
168
+ .from(devItems)
169
+ .where(and(...conditions))
170
+ .orderBy(desc(devItems.updatedAt))
171
+ .limit(options?.limit ?? 100);
172
+ // Filter by search query (title, body in content)
173
+ const searchLower = query.toLowerCase();
174
+ return results.filter(item => {
175
+ const content = item.content;
176
+ return (content?.title?.toLowerCase().includes(searchLower) ||
177
+ content?.body?.toLowerCase().includes(searchLower));
178
+ });
179
+ }
180
+ // =========================================================================
181
+ // WRITE OPERATIONS
182
+ // =========================================================================
183
+ /**
184
+ * Create new item
185
+ */
186
+ async create(data) {
187
+ const db = await this.ensureInitialized();
188
+ const id = ulid();
189
+ await db.insert(devItems).values({
190
+ id,
191
+ system: this.system,
192
+ type: data.type,
193
+ status: data.status ?? 'active',
194
+ priority: data.priority ?? 'medium',
195
+ content: data.content,
196
+ tags: data.tags ?? [],
197
+ });
198
+ return { id };
199
+ }
200
+ /**
201
+ * Update existing item
202
+ */
203
+ async update(id, data) {
204
+ const db = await this.ensureInitialized();
205
+ const updateData = {};
206
+ if (data.status !== undefined)
207
+ updateData.status = data.status;
208
+ if (data.priority !== undefined)
209
+ updateData.priority = data.priority;
210
+ if (data.content !== undefined)
211
+ updateData.content = data.content;
212
+ if (data.tags !== undefined)
213
+ updateData.tags = data.tags;
214
+ await db
215
+ .update(devItems)
216
+ .set(updateData)
217
+ .where(and(eq(devItems.id, id), eq(devItems.system, this.system)));
218
+ }
219
+ /**
220
+ * Delete item
221
+ */
222
+ async delete(id) {
223
+ const db = await this.ensureInitialized();
224
+ await db
225
+ .delete(devItems)
226
+ .where(and(eq(devItems.id, id), eq(devItems.system, this.system)));
227
+ }
228
+ // =========================================================================
229
+ // MEMORY OPERATIONS
230
+ // =========================================================================
231
+ /**
232
+ * Create memory entry
233
+ */
234
+ async createMemory(content, tags) {
235
+ return this.create({
236
+ type: 'memory',
237
+ status: 'active',
238
+ priority: 'medium',
239
+ content: content,
240
+ tags: [...(tags ?? []), content.source ?? 'system', 'memory'],
241
+ });
242
+ }
243
+ /**
244
+ * Get memories by domain
245
+ */
246
+ async getMemories(domain, limit = 50) {
247
+ const items = await this.list({ type: 'memory', limit });
248
+ if (domain) {
249
+ return items.filter(item => {
250
+ const content = item.content;
251
+ return content?.domain === domain;
252
+ });
253
+ }
254
+ return items;
255
+ }
256
+ /**
257
+ * Get recent memories for session context
258
+ */
259
+ async getRecentMemories(limit = 5) {
260
+ return this.list({
261
+ type: 'memory',
262
+ status: 'active',
263
+ limit,
264
+ });
265
+ }
266
+ // =========================================================================
267
+ // PATTERN OPERATIONS
268
+ // =========================================================================
269
+ /**
270
+ * Create or increment pattern
271
+ */
272
+ async trackPattern(patternId, file, line, code, severity = 'medium') {
273
+ // Check if pattern exists
274
+ const existing = await this.list({
275
+ type: 'pattern',
276
+ tags: [`pattern:${patternId}`],
277
+ limit: 1,
278
+ });
279
+ const now = new Date().toISOString();
280
+ if (existing.length > 0) {
281
+ // Increment existing pattern
282
+ const pattern = existing[0];
283
+ const content = pattern.content;
284
+ const newFiles = [...content.files, { path: file, line, code }];
285
+ const uniqueFiles = newFiles.filter((f, i, arr) => arr.findIndex(x => x.path === f.path && x.line === f.line) === i);
286
+ await this.update(pattern.id, {
287
+ content: {
288
+ ...content,
289
+ occurrences: content.occurrences + 1,
290
+ files: uniqueFiles,
291
+ lastSeen: now,
292
+ },
293
+ });
294
+ return { id: pattern.id, count: content.occurrences + 1 };
295
+ }
296
+ // Create new pattern
297
+ const content = {
298
+ patternId,
299
+ description: `Pattern: ${patternId}`,
300
+ occurrences: 1,
301
+ files: [{ path: file, line, code }],
302
+ severity,
303
+ firstSeen: now,
304
+ lastSeen: now,
305
+ };
306
+ const result = await this.create({
307
+ type: 'pattern',
308
+ status: 'active',
309
+ priority: severity,
310
+ content: content,
311
+ tags: ['pattern', `pattern:${patternId}`],
312
+ });
313
+ return { id: result.id, count: 1 };
314
+ }
315
+ /**
316
+ * Get patterns above threshold
317
+ */
318
+ async getTriggeredPatterns(threshold = 3) {
319
+ const patterns = await this.list({ type: 'pattern' });
320
+ return patterns.filter(item => {
321
+ const content = item.content;
322
+ return content && content.occurrences >= threshold;
323
+ });
324
+ }
325
+ // =========================================================================
326
+ // SESSION OPERATIONS
327
+ // =========================================================================
328
+ /**
329
+ * Start a new session
330
+ */
331
+ async startSession(module, context) {
332
+ const result = await this.create({
333
+ type: 'agent_session',
334
+ status: 'active',
335
+ content: {
336
+ startedAt: new Date().toISOString(),
337
+ module,
338
+ context,
339
+ },
340
+ tags: ['session', module].filter(Boolean),
341
+ });
342
+ return { sessionId: result.id };
343
+ }
344
+ /**
345
+ * End a session
346
+ */
347
+ async endSession(sessionId, summary) {
348
+ const session = await this.get(sessionId);
349
+ if (!session)
350
+ return;
351
+ const content = session.content;
352
+ await this.update(sessionId, {
353
+ status: 'done',
354
+ content: {
355
+ ...content,
356
+ endedAt: new Date().toISOString(),
357
+ summary,
358
+ },
359
+ });
360
+ }
361
+ // =========================================================================
362
+ // ANALYTICS
363
+ // =========================================================================
364
+ /**
365
+ * Get statistics
366
+ */
367
+ async getStats() {
368
+ const [memories, patterns, sessions] = await Promise.all([
369
+ this.list({ type: 'memory' }),
370
+ this.list({ type: 'pattern' }),
371
+ this.list({ type: 'agent_session', limit: 100 }),
372
+ ]);
373
+ const triggeredPatterns = patterns.filter(p => {
374
+ const content = p.content;
375
+ return content && content.occurrences >= 3;
376
+ });
377
+ const recentSessions = sessions.filter(s => {
378
+ const createdAt = s.createdAt;
379
+ if (!createdAt)
380
+ return false;
381
+ const dayAgo = new Date(Date.now() - 24 * 60 * 60 * 1000);
382
+ return new Date(createdAt) > dayAgo;
383
+ });
384
+ return {
385
+ totalMemories: memories.length,
386
+ totalPatterns: patterns.length,
387
+ triggeredPatterns: triggeredPatterns.length,
388
+ recentSessions: recentSessions.length,
389
+ };
390
+ }
391
+ }
392
+ // =============================================================================
393
+ // FACTORY
394
+ // =============================================================================
395
+ /**
396
+ * Create a Drizzle memory client
397
+ */
398
+ export function createDrizzleClient(system, dbConfig) {
399
+ return new DrizzleMemoryClient({
400
+ system,
401
+ databaseConfig: dbConfig,
402
+ });
403
+ }
404
+ //# sourceMappingURL=drizzle-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drizzle-client.js","sourceRoot":"","sources":["../../src/db/drizzle-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Database module exports
3
+ */
4
+ export { createMemoryClient, generateId, createMemoryContent, createPatternContent, type MemoryClient, type MemoryClientConfig, type QueryOptions, type CreateItemData } from './client.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAA"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Database module exports
3
+ */
4
+ export { createMemoryClient, generateId, createMemoryContent, createPatternContent } from './client.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EAKrB,MAAM,aAAa,CAAA"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * ESLint Config Builder
3
+ *
4
+ * Generates ESLint configuration dynamically based on project scan results.
5
+ * Uses ProjectScanner to detect framework, features, and structure.
6
+ */
7
+ import type { ProjectScanResult } from '../services/ProjectScanner.js';
8
+ export interface ESLintConfig {
9
+ plugins: string[];
10
+ extends: string[];
11
+ rules: Record<string, 'off' | 'warn' | 'error' | ['off' | 'warn' | 'error', ...unknown[]]>;
12
+ }
13
+ export interface ConfigOptions {
14
+ /** Override detected framework */
15
+ framework?: 'nextjs' | 'react' | 'node' | 'unknown';
16
+ /** Enable finance rules even if not detected */
17
+ enableFinance?: boolean;
18
+ /** Enable strict mode (all rules as errors) */
19
+ strict?: boolean;
20
+ /** Disable specific rules */
21
+ disableRules?: string[];
22
+ /** Custom rules to add */
23
+ customRules?: Record<string, 'off' | 'warn' | 'error'>;
24
+ }
25
+ /**
26
+ * Build ESLint configuration based on project scan
27
+ */
28
+ export declare function buildConfig(scan: ProjectScanResult, options?: ConfigOptions): ESLintConfig;
29
+ /**
30
+ * Auto-generate config for current project
31
+ */
32
+ export declare function generateConfig(projectPath?: string, options?: ConfigOptions): Promise<ESLintConfig>;
33
+ /**
34
+ * Generate flat config format (ESLint 9+)
35
+ */
36
+ export declare function toFlatConfig(config: ESLintConfig): object;
37
+ /**
38
+ * Generate legacy config format (ESLint 8)
39
+ */
40
+ export declare function toLegacyConfig(config: ESLintConfig): object;
41
+ /**
42
+ * Print config as JSON for CLI
43
+ */
44
+ export declare function printConfig(config: ESLintConfig, format?: 'flat' | 'legacy'): string;
45
+ //# sourceMappingURL=config-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-builder.d.ts","sourceRoot":"","sources":["../../src/eslint/config-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAGtE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;CAC3F;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;IACnD,gDAAgD;IAChD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;CACvD;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,iBAAiB,EACvB,OAAO,GAAE,aAAkB,GAC1B,YAAY,CAoGd;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAIvB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CASzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAM3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,MAAM,GAAG,QAAiB,GAAG,MAAM,CAG5F"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * ESLint Config Builder
3
+ *
4
+ * Generates ESLint configuration dynamically based on project scan results.
5
+ * Uses ProjectScanner to detect framework, features, and structure.
6
+ */
7
+ import { ProjectScanner } from '../services/ProjectScanner.js';
8
+ /**
9
+ * Build ESLint configuration based on project scan
10
+ */
11
+ export function buildConfig(scan, options = {}) {
12
+ const config = {
13
+ plugins: ['cmp'],
14
+ extends: [],
15
+ rules: {},
16
+ };
17
+ const severity = options.strict ? 'error' : 'warn';
18
+ // ============================================================
19
+ // UNIVERSAL RULES (always apply)
20
+ // ============================================================
21
+ // Security - always error
22
+ config.rules['cmp/no-raw-sql'] = 'error';
23
+ // Performance - configurable severity
24
+ config.rules['cmp/no-await-in-loop'] = severity;
25
+ config.rules['cmp/no-sequential-api-calls'] = severity;
26
+ // Error handling - always warn at minimum
27
+ config.rules['cmp/consistent-error-handling'] = severity;
28
+ // ============================================================
29
+ // TYPESCRIPT RULES
30
+ // ============================================================
31
+ if (scan.language.typescript) {
32
+ // Zod validation for TRPC
33
+ if (scan.api.type === 'trpc') {
34
+ config.rules['cmp/require-zod-validation'] = options.strict ? 'error' : 'warn';
35
+ }
36
+ }
37
+ // ============================================================
38
+ // REACT RULES
39
+ // ============================================================
40
+ if (scan.framework.name === 'nextjs' || scan.framework.name === 'react') {
41
+ config.rules['cmp/no-async-useeffect'] = 'error';
42
+ config.rules['cmp/no-inline-functions-in-jsx'] = severity;
43
+ config.rules['cmp/require-loading-states'] = severity;
44
+ }
45
+ // ============================================================
46
+ // NEXT.JS SPECIFIC RULES
47
+ // ============================================================
48
+ const framework = options.framework ?? scan.framework.name;
49
+ if (framework === 'nextjs') {
50
+ // App Router - prefer server components
51
+ if (scan.framework.router === 'app') {
52
+ config.rules['cmp/prefer-server-components'] = severity;
53
+ }
54
+ }
55
+ // ============================================================
56
+ // TAILWIND RULES
57
+ // ============================================================
58
+ if (scan.styling.tailwind || scan.styling.shadcn) {
59
+ config.rules['cmp/semantic-tokens-only'] = severity;
60
+ }
61
+ // ============================================================
62
+ // FINANCE RULES
63
+ // ============================================================
64
+ // Detect if project has finance code
65
+ const hasFinance = options.enableFinance ||
66
+ scan.structure.srcDir &&
67
+ (scan.structure.componentsPath?.includes('finance') ||
68
+ scan.api.path?.includes('finance'));
69
+ if (hasFinance) {
70
+ // CRITICAL: Finance operations must sync with ledger
71
+ config.rules['cmp/finance-ledger-sync'] = 'error';
72
+ }
73
+ // ============================================================
74
+ // APPLY OVERRIDES
75
+ // ============================================================
76
+ // Disable specific rules
77
+ if (options.disableRules) {
78
+ for (const rule of options.disableRules) {
79
+ config.rules[`cmp/${rule}`] = 'off';
80
+ }
81
+ }
82
+ // Add custom rules
83
+ if (options.customRules) {
84
+ for (const [rule, level] of Object.entries(options.customRules)) {
85
+ config.rules[`cmp/${rule}`] = level;
86
+ }
87
+ }
88
+ return config;
89
+ }
90
+ /**
91
+ * Auto-generate config for current project
92
+ */
93
+ export async function generateConfig(projectPath, options = {}) {
94
+ const scanner = new ProjectScanner(projectPath);
95
+ const scan = await scanner.scan();
96
+ return buildConfig(scan, options);
97
+ }
98
+ /**
99
+ * Generate flat config format (ESLint 9+)
100
+ */
101
+ export function toFlatConfig(config) {
102
+ return {
103
+ plugins: {
104
+ cmp: {
105
+ rules: {}, // Will be populated by the actual plugin
106
+ },
107
+ },
108
+ rules: config.rules,
109
+ };
110
+ }
111
+ /**
112
+ * Generate legacy config format (ESLint 8)
113
+ */
114
+ export function toLegacyConfig(config) {
115
+ return {
116
+ plugins: config.plugins,
117
+ extends: config.extends,
118
+ rules: config.rules,
119
+ };
120
+ }
121
+ /**
122
+ * Print config as JSON for CLI
123
+ */
124
+ export function printConfig(config, format = 'flat') {
125
+ const output = format === 'flat' ? toFlatConfig(config) : toLegacyConfig(config);
126
+ return JSON.stringify(output, null, 2);
127
+ }
128
+ //# sourceMappingURL=config-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-builder.js","sourceRoot":"","sources":["../../src/eslint/config-builder.ts"],"names":[],"mappings":"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"}