devmind 1.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 (141) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +148 -0
  3. package/dist/cli.d.ts +6 -0
  4. package/dist/cli.js +232 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/codebase/generators/architecture.d.ts +4 -0
  7. package/dist/codebase/generators/architecture.js +33 -0
  8. package/dist/codebase/generators/architecture.js.map +1 -0
  9. package/dist/codebase/generators/modules.d.ts +9 -0
  10. package/dist/codebase/generators/modules.js +46 -0
  11. package/dist/codebase/generators/modules.js.map +1 -0
  12. package/dist/codebase/generators/overview.d.ts +5 -0
  13. package/dist/codebase/generators/overview.js +34 -0
  14. package/dist/codebase/generators/overview.js.map +1 -0
  15. package/dist/codebase/generators/skeleton.d.ts +8 -0
  16. package/dist/codebase/generators/skeleton.js +57 -0
  17. package/dist/codebase/generators/skeleton.js.map +1 -0
  18. package/dist/codebase/index.d.ts +24 -0
  19. package/dist/codebase/index.js +50 -0
  20. package/dist/codebase/index.js.map +1 -0
  21. package/dist/codebase/parsers/typescript.d.ts +14 -0
  22. package/dist/codebase/parsers/typescript.js +145 -0
  23. package/dist/codebase/parsers/typescript.js.map +1 -0
  24. package/dist/codebase/scanners/filesystem.d.ts +17 -0
  25. package/dist/codebase/scanners/filesystem.js +152 -0
  26. package/dist/codebase/scanners/filesystem.js.map +1 -0
  27. package/dist/codebase/utils/hashing.d.ts +15 -0
  28. package/dist/codebase/utils/hashing.js +50 -0
  29. package/dist/codebase/utils/hashing.js.map +1 -0
  30. package/dist/codebase/utils/stats.d.ts +12 -0
  31. package/dist/codebase/utils/stats.js +55 -0
  32. package/dist/codebase/utils/stats.js.map +1 -0
  33. package/dist/codebase/utils/tree.d.ts +10 -0
  34. package/dist/codebase/utils/tree.js +22 -0
  35. package/dist/codebase/utils/tree.js.map +1 -0
  36. package/dist/commands/analyze.d.ts +6 -0
  37. package/dist/commands/analyze.js +97 -0
  38. package/dist/commands/analyze.js.map +1 -0
  39. package/dist/commands/context.d.ts +4 -0
  40. package/dist/commands/context.js +54 -0
  41. package/dist/commands/context.js.map +1 -0
  42. package/dist/core/config.d.ts +20 -0
  43. package/dist/core/config.js +40 -0
  44. package/dist/core/config.js.map +1 -0
  45. package/dist/core/errors.d.ts +18 -0
  46. package/dist/core/errors.js +53 -0
  47. package/dist/core/errors.js.map +1 -0
  48. package/dist/core/fileio.d.ts +10 -0
  49. package/dist/core/fileio.js +57 -0
  50. package/dist/core/fileio.js.map +1 -0
  51. package/dist/core/index.d.ts +8 -0
  52. package/dist/core/index.js +9 -0
  53. package/dist/core/index.js.map +1 -0
  54. package/dist/core/logger.d.ts +15 -0
  55. package/dist/core/logger.js +40 -0
  56. package/dist/core/logger.js.map +1 -0
  57. package/dist/core/types.d.ts +106 -0
  58. package/dist/core/types.js +5 -0
  59. package/dist/core/types.js.map +1 -0
  60. package/dist/database/cli.d.ts +7 -0
  61. package/dist/database/cli.js +132 -0
  62. package/dist/database/cli.js.map +1 -0
  63. package/dist/database/commands/checkpoint.d.ts +13 -0
  64. package/dist/database/commands/checkpoint.js +136 -0
  65. package/dist/database/commands/checkpoint.js.map +1 -0
  66. package/dist/database/commands/generate.d.ts +21 -0
  67. package/dist/database/commands/generate.js +269 -0
  68. package/dist/database/commands/generate.js.map +1 -0
  69. package/dist/database/commands/handoff.d.ts +15 -0
  70. package/dist/database/commands/handoff.js +332 -0
  71. package/dist/database/commands/handoff.js.map +1 -0
  72. package/dist/database/commands/history.d.ts +13 -0
  73. package/dist/database/commands/history.js +148 -0
  74. package/dist/database/commands/history.js.map +1 -0
  75. package/dist/database/commands/init.d.ts +10 -0
  76. package/dist/database/commands/init.js +28 -0
  77. package/dist/database/commands/init.js.map +1 -0
  78. package/dist/database/commands/learn.d.ts +12 -0
  79. package/dist/database/commands/learn.js +93 -0
  80. package/dist/database/commands/learn.js.map +1 -0
  81. package/dist/database/commands/memory.d.ts +90 -0
  82. package/dist/database/commands/memory.js +353 -0
  83. package/dist/database/commands/memory.js.map +1 -0
  84. package/dist/database/commands/show.d.ts +9 -0
  85. package/dist/database/commands/show.js +136 -0
  86. package/dist/database/commands/show.js.map +1 -0
  87. package/dist/database/commands/validate.d.ts +9 -0
  88. package/dist/database/commands/validate.js +200 -0
  89. package/dist/database/commands/validate.js.map +1 -0
  90. package/dist/database/commands/watch.d.ts +9 -0
  91. package/dist/database/commands/watch.js +77 -0
  92. package/dist/database/commands/watch.js.map +1 -0
  93. package/dist/database/extractors/drizzle.d.ts +62 -0
  94. package/dist/database/extractors/drizzle.js +251 -0
  95. package/dist/database/extractors/drizzle.js.map +1 -0
  96. package/dist/database/extractors/firebase.d.ts +39 -0
  97. package/dist/database/extractors/firebase.js +192 -0
  98. package/dist/database/extractors/firebase.js.map +1 -0
  99. package/dist/database/extractors/index.d.ts +69 -0
  100. package/dist/database/extractors/index.js +345 -0
  101. package/dist/database/extractors/index.js.map +1 -0
  102. package/dist/database/extractors/mongodb.d.ts +44 -0
  103. package/dist/database/extractors/mongodb.js +198 -0
  104. package/dist/database/extractors/mongodb.js.map +1 -0
  105. package/dist/database/extractors/mysql.d.ts +61 -0
  106. package/dist/database/extractors/mysql.js +173 -0
  107. package/dist/database/extractors/mysql.js.map +1 -0
  108. package/dist/database/extractors/postgres.d.ts +47 -0
  109. package/dist/database/extractors/postgres.js +141 -0
  110. package/dist/database/extractors/postgres.js.map +1 -0
  111. package/dist/database/extractors/prisma.d.ts +71 -0
  112. package/dist/database/extractors/prisma.js +270 -0
  113. package/dist/database/extractors/prisma.js.map +1 -0
  114. package/dist/database/extractors/sqlite.d.ts +50 -0
  115. package/dist/database/extractors/sqlite.js +148 -0
  116. package/dist/database/extractors/sqlite.js.map +1 -0
  117. package/dist/database/generators/learning-generator.d.ts +48 -0
  118. package/dist/database/generators/learning-generator.js +221 -0
  119. package/dist/database/generators/learning-generator.js.map +1 -0
  120. package/dist/database/generators/templates.d.ts +103 -0
  121. package/dist/database/generators/templates.js +1557 -0
  122. package/dist/database/generators/templates.js.map +1 -0
  123. package/dist/database/index.d.ts +15 -0
  124. package/dist/database/index.js +16 -0
  125. package/dist/database/index.js.map +1 -0
  126. package/dist/database/utils/json-output.d.ts +26 -0
  127. package/dist/database/utils/json-output.js +37 -0
  128. package/dist/database/utils/json-output.js.map +1 -0
  129. package/dist/generators/unified.d.ts +1 -0
  130. package/dist/generators/unified.js +173 -0
  131. package/dist/generators/unified.js.map +1 -0
  132. package/dist/index.d.ts +4 -0
  133. package/dist/index.js +5 -0
  134. package/dist/index.js.map +1 -0
  135. package/dist/utils/config-detector.d.ts +1 -0
  136. package/dist/utils/config-detector.js +40 -0
  137. package/dist/utils/config-detector.js.map +1 -0
  138. package/dist/utils/config-loader.d.ts +16 -0
  139. package/dist/utils/config-loader.js +20 -0
  140. package/dist/utils/config-loader.js.map +1 -0
  141. package/package.json +78 -0
@@ -0,0 +1,353 @@
1
+ /**
2
+ * Memory Infrastructure
3
+ * Creates and manages AI memory layer
4
+ */
5
+ import * as path from 'path';
6
+ import { ensureDir, writeFileSafe, readFileSafe } from '../../core/index.js';
7
+ import * as fs from 'fs/promises';
8
+ import { fileURLToPath } from 'url';
9
+ export class MemoryInfrastructure {
10
+ /**
11
+ * Create memory directory structure
12
+ */
13
+ async createMemoryStructure(outputDir) {
14
+ const dirs = [
15
+ path.join(outputDir, 'memory', 'checkpoints'),
16
+ path.join(outputDir, 'memory', 'learnings'),
17
+ path.join(outputDir, 'decisions'),
18
+ path.join(outputDir, 'context'),
19
+ path.join(outputDir, 'state'),
20
+ ];
21
+ for (const dir of dirs) {
22
+ await ensureDir(dir);
23
+ }
24
+ }
25
+ /**
26
+ * Initialize memory files
27
+ */
28
+ async initializeMemoryFiles(outputDir, schema) {
29
+ // Initialize LEARN.md
30
+ const learningsPath = path.join(outputDir, 'memory', 'LEARN.md');
31
+ const learningsContent = this.createInitialLearnings(schema);
32
+ await writeFileSafe(learningsPath, learningsContent);
33
+ // Initialize session-history.md
34
+ const historyPath = path.join(outputDir, 'memory', 'session-history.md');
35
+ const historyContent = this.createInitialHistory();
36
+ await writeFileSafe(historyPath, historyContent);
37
+ // Initialize schema-evolution.md
38
+ const evolutionPath = path.join(outputDir, 'memory', 'schema-evolution.md');
39
+ const evolutionContent = this.createSchemaEvolution(schema);
40
+ await writeFileSafe(evolutionPath, evolutionContent);
41
+ // Initialize codebase-evolution.md
42
+ const codebaseEvolutionPath = path.join(outputDir, 'memory', 'codebase-evolution.md');
43
+ // Initial hash/stats are unknown at pure DB init time, using placeholders
44
+ const codebaseEvolutionContent = this.createCodebaseEvolution('pending', { files: 0, loc: 0 });
45
+ await writeFileSafe(codebaseEvolutionPath, codebaseEvolutionContent);
46
+ // Create initial SESSION_CONTEXT.json
47
+ const contextPath = path.join(outputDir, 'context', 'SESSION_CONTEXT.json');
48
+ const sessionContext = this.createSessionContext(schema);
49
+ await writeFileSafe(contextPath, JSON.stringify(sessionContext, null, 2));
50
+ }
51
+ /**
52
+ * Copy template files to output directory
53
+ */
54
+ async copyTemplateFiles(templatesDir, outputDir) {
55
+ const templateFiles = [
56
+ 'edge-cases.md',
57
+ 'state/CURRENT_STATE.md',
58
+ 'memory/checkpoint-patterns.md',
59
+ ];
60
+ const commandDir = path.dirname(fileURLToPath(import.meta.url));
61
+ const candidateDirs = [
62
+ templatesDir,
63
+ path.resolve(commandDir, '..', 'templates'),
64
+ path.resolve(commandDir, '..', '..', 'database', 'templates'),
65
+ ];
66
+ const fallbacks = this.getTemplateFallbacks();
67
+ for (const file of templateFiles) {
68
+ const destPath = path.join(outputDir, file);
69
+ let copied = false;
70
+ for (const baseDir of candidateDirs) {
71
+ try {
72
+ const srcPath = path.join(baseDir, file);
73
+ const content = await readFileSafe(srcPath);
74
+ await ensureDir(path.dirname(destPath));
75
+ await writeFileSafe(destPath, content);
76
+ copied = true;
77
+ break;
78
+ }
79
+ catch {
80
+ // Try next candidate path
81
+ }
82
+ }
83
+ if (!copied && fallbacks[file]) {
84
+ await ensureDir(path.dirname(destPath));
85
+ await writeFileSafe(destPath, fallbacks[file]);
86
+ }
87
+ }
88
+ }
89
+ getTemplateFallbacks() {
90
+ return {
91
+ 'edge-cases.md': `# Edge Cases
92
+
93
+ This file captures known project edge cases and mitigations.
94
+
95
+ ## Add Cases
96
+
97
+ - Scenario:
98
+ - Impact:
99
+ - Mitigation:
100
+ `,
101
+ 'state/CURRENT_STATE.md': `# Current State
102
+
103
+ Generated by DevMind.
104
+
105
+ - Status: initializing
106
+ - Last Updated: ${new Date().toISOString()}
107
+ - Next Step: run \`devmind generate\` or \`devmind scan\`
108
+ `,
109
+ 'memory/checkpoint-patterns.md': `# Checkpoint Patterns
110
+
111
+ Use checkpoints to preserve progress across sessions.
112
+
113
+ ## Recommended
114
+
115
+ - Save a checkpoint before large refactors.
116
+ - Include a short message describing intent.
117
+ `,
118
+ };
119
+ }
120
+ /**
121
+ * Create initial learnings file
122
+ */
123
+ createInitialLearnings(schema) {
124
+ return `# Project Learnings
125
+
126
+ > Auto-generated on ${new Date().toISOString()}
127
+
128
+ This file accumulates technical learnings, architectural decisions, and discovered patterns.
129
+
130
+ ## Initial Schema Analysis
131
+
132
+ - **Tables:** ${schema.tables.length}
133
+ - **Database Type:** ${schema.databaseType}
134
+ - **Schema Name:** ${schema.schemaName || 'N/A'}
135
+
136
+ ## Codebase Knowledge
137
+
138
+ - **Architecture:** (Pending analysis)
139
+ - **Patterns:** (Pending analysis)
140
+
141
+ ## Patterns
142
+
143
+ See \`BUSINESS_LOGIC.md\` for detected patterns.
144
+
145
+ ## Sessions
146
+
147
+ ### Session 1 - ${new Date().toISOString().split('T')[0]}
148
+ - Initial schema generation
149
+ - Detected business patterns
150
+ - Created memory infrastructure
151
+
152
+ ---
153
+
154
+ *Add new learnings below. Each session should append discoveries, edge cases, and best practices.*
155
+ `;
156
+ }
157
+ /**
158
+ * Create initial session history
159
+ */
160
+ createInitialHistory() {
161
+ return `# Session History
162
+
163
+ > Recent database context sessions
164
+
165
+ ## ${new Date().toISOString().split('T')[0]} - Initial Generation
166
+
167
+ **Status:** Completed
168
+ **Agent:** devmind-db v1.0.3
169
+
170
+ **Actions:**
171
+ - Generated schema context
172
+ - Created memory infrastructure
173
+ - Detected business patterns
174
+
175
+ **Discoveries:**
176
+ - Schema structure analyzed
177
+ - Memory layer initialized
178
+
179
+ ---
180
+
181
+ *New sessions will be appended below*
182
+ `;
183
+ }
184
+ /**
185
+ * Create schema evolution tracking
186
+ */
187
+ createSchemaEvolution(schema) {
188
+ const schemaHash = this.calculateSchemaHash(schema);
189
+ return `# Schema Evolution
190
+
191
+ > Track schema changes over time
192
+
193
+ ## ${new Date().toISOString().split('T')[0]} - Baseline
194
+
195
+ **Schema Hash:** \`${schemaHash}\`
196
+ **Tables:** ${schema.tables.length}
197
+ **Database:** ${schema.databaseType}
198
+
199
+ ### Tables Created
200
+ ${schema.tables.map((t) => `- ${t.name} (${t.columns.length} columns)`).join('\n')}
201
+
202
+ ---
203
+
204
+ *Schema changes will be tracked below*
205
+ `;
206
+ }
207
+ /**
208
+ * Create codebase evolution tracking
209
+ */
210
+ createCodebaseEvolution(hash, stats) {
211
+ return `# Codebase Evolution
212
+
213
+ > Track codebase structure changes over time
214
+
215
+ ## ${new Date().toISOString().split('T')[0]} - Baseline
216
+
217
+ **Codebase Hash:** \`${hash}\`
218
+ **Files:** ${stats?.files || 0}
219
+ **LOC:** ${stats?.loc || 0}
220
+
221
+ ---
222
+
223
+ *Codebase changes will be tracked below*
224
+ `;
225
+ }
226
+ /**
227
+ * Create initial session context
228
+ */
229
+ createSessionContext(schema) {
230
+ return {
231
+ sessionId: `session-${Date.now()}`,
232
+ timestamp: new Date().toISOString(),
233
+ schemaHash: this.calculateSchemaHash(schema),
234
+ schemaVersion: '1.0.0',
235
+ recentChanges: [],
236
+ pendingQueries: [],
237
+ discoveries: [
238
+ `Schema initialized with ${schema.tables.length} tables`,
239
+ 'Memory infrastructure created',
240
+ 'Business patterns detected',
241
+ ],
242
+ };
243
+ }
244
+ /**
245
+ * Calculate schema hash for drift detection
246
+ */
247
+ calculateSchemaHash(schema) {
248
+ const payload = schema.tables
249
+ .map((t) => `${t.name}:${t.columns.map((c) => `${c.name}:${c.type}`).join(',')}`)
250
+ .join('|');
251
+ // Simple hash (replace with crypto.createHash in production)
252
+ let hash = 0;
253
+ for (let i = 0; i < payload.length; i++) {
254
+ const char = payload.charCodeAt(i);
255
+ hash = (hash << 5) - hash + char;
256
+ hash = hash & hash; // Convert to 32bit integer
257
+ }
258
+ return Math.abs(hash).toString(16);
259
+ }
260
+ /**
261
+ * Save checkpoint
262
+ */
263
+ async saveCheckpoint(outputDir, context, message) {
264
+ const filename = `checkpoint-${Date.now()}.json`;
265
+ const filepath = path.join(outputDir, 'memory', 'checkpoints', filename);
266
+ const checkpoint = {
267
+ ...context,
268
+ message,
269
+ savedAt: new Date().toISOString(),
270
+ };
271
+ await writeFileSafe(filepath, JSON.stringify(checkpoint, null, 2));
272
+ return filepath;
273
+ }
274
+ /**
275
+ * Restore latest checkpoint
276
+ */
277
+ async restoreLatestCheckpoint(outputDir) {
278
+ const checkpointsDir = path.join(outputDir, 'memory', 'checkpoints');
279
+ try {
280
+ const files = await fs.readdir(checkpointsDir);
281
+ const checkpointFiles = files
282
+ .filter((f) => f.startsWith('checkpoint-') && f.endsWith('.json'))
283
+ .sort();
284
+ if (checkpointFiles.length === 0) {
285
+ return null;
286
+ }
287
+ const latest = checkpointFiles[checkpointFiles.length - 1];
288
+ const filepath = path.join(checkpointsDir, latest);
289
+ const content = await readFileSafe(filepath);
290
+ return JSON.parse(content);
291
+ }
292
+ catch (error) {
293
+ return null;
294
+ }
295
+ }
296
+ /**
297
+ * Update session context
298
+ */
299
+ async updateSessionContext(outputDir, updates) {
300
+ const contextPath = path.join(outputDir, 'context', 'SESSION_CONTEXT.json');
301
+ try {
302
+ const content = await readFileSafe(contextPath);
303
+ const context = JSON.parse(content);
304
+ const updatedContext = { ...context, ...updates, timestamp: new Date().toISOString() };
305
+ await writeFileSafe(contextPath, JSON.stringify(updatedContext, null, 2));
306
+ }
307
+ catch (error) {
308
+ // Context doesn't exist, create minimal one
309
+ const minimalContext = {
310
+ sessionId: `session-${Date.now()}`,
311
+ timestamp: new Date().toISOString(),
312
+ schemaHash: 'pending', // Placeholder until DB scan
313
+ recentChanges: [],
314
+ pendingQueries: [],
315
+ discoveries: ['Session initialized from codebase scan'],
316
+ ...updates,
317
+ };
318
+ await ensureDir(path.dirname(contextPath));
319
+ await writeFileSafe(contextPath, JSON.stringify(minimalContext, null, 2));
320
+ }
321
+ }
322
+ /**
323
+ * Update codebase evolution
324
+ */
325
+ async updateCodebaseEvolution(outputDir, hash, stats) {
326
+ const evolutionPath = path.join(outputDir, 'memory', 'codebase-evolution.md');
327
+ let content = '';
328
+ try {
329
+ content = await readFileSafe(evolutionPath);
330
+ }
331
+ catch {
332
+ content = this.createCodebaseEvolution(hash, stats);
333
+ await ensureDir(path.dirname(evolutionPath));
334
+ await writeFileSafe(evolutionPath, content);
335
+ return;
336
+ }
337
+ // Check if hash changed
338
+ if (!content.includes(`\`${hash}\``)) {
339
+ const timestamp = new Date().toISOString().split('T')[0];
340
+ const entry = `
341
+ ## ${timestamp} - Scan
342
+
343
+ **Codebase Hash:** \`${hash}\`
344
+ **Files:** ${stats.files}
345
+ **LOC:** ${stats.loc}
346
+
347
+ ---
348
+ `;
349
+ await writeFileSafe(evolutionPath, content + entry);
350
+ }
351
+ }
352
+ }
353
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/database/commands/memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAwBpC,MAAM,OAAO,oBAAoB;IAC/B;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,SAAiB;QAC3C,MAAM,IAAI,GAAG;YACX,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;SAC9B,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,SAAiB,EAAE,MAAyB;QACtE,sBAAsB;QACtB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,aAAa,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAErD,gCAAgC;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,MAAM,aAAa,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAEjD,iCAAiC;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAC5E,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,aAAa,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAErD,mCAAmC;QACnC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QACtF,0EAA0E;QAC1E,MAAM,wBAAwB,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,aAAa,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;QAErE,sCAAsC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,sBAAsB,CAAC,CAAC;QAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,YAAoB,EAAE,SAAiB;QAC7D,MAAM,aAAa,GAAG;YACpB,eAAe;YACf,wBAAwB;YACxB,+BAA+B;SAChC,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG;YACpB,YAAY;YACZ,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC;SAC9D,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE9C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,MAAM,GAAG,KAAK,CAAC;YAEnB,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBACzC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;oBAC5C,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACxC,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBACvC,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM;gBACR,CAAC;gBAAC,MAAM,CAAC;oBACP,0BAA0B;gBAC5B,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxC,MAAM,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,OAAO;YACL,eAAe,EAAE;;;;;;;;;CAStB;YACK,wBAAwB,EAAE;;;;;kBAKd,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;CAEzC;YACK,+BAA+B,EAAE;;;;;;;;CAQtC;SACI,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,MAAyB;QACtD,OAAO;;sBAEW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;;gBAM9B,MAAM,CAAC,MAAM,CAAC,MAAM;uBACb,MAAM,CAAC,YAAY;qBACrB,MAAM,CAAC,UAAU,IAAI,KAAK;;;;;;;;;;;;;kBAa7B,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;;;;;;;CAQvD,CAAC;IACA,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,OAAO;;;;KAIN,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;CAiB1C,CAAC;IACA,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,MAAyB;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAEpD,OAAO;;;;KAIN,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;qBAEtB,UAAU;cACjB,MAAM,CAAC,MAAM,CAAC,MAAM;gBAClB,MAAM,CAAC,YAAY;;;EAGjC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;CAKjF,CAAC;IACA,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,IAAY,EAAE,KAAsC;QAC1E,OAAO;;;;KAIN,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;uBAEpB,IAAI;aACd,KAAK,EAAE,KAAK,IAAI,CAAC;WACnB,KAAK,EAAE,GAAG,IAAI,CAAC;;;;;CAKzB,CAAC;IACA,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAAyB;QACpD,OAAO;YACL,SAAS,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE;YAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAC5C,aAAa,EAAE,OAAO;YACtB,aAAa,EAAE,EAAE;YACjB,cAAc,EAAE,EAAE;YAClB,WAAW,EAAE;gBACX,2BAA2B,MAAM,CAAC,MAAM,CAAC,MAAM,SAAS;gBACxD,+BAA+B;gBAC/B,4BAA4B;aAC7B;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAAyB;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM;aAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;aAChF,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,6DAA6D;QAC7D,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;YACjC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,2BAA2B;QACjD,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,SAAiB,EACjB,OAAuB,EACvB,OAAgB;QAEhB,MAAM,QAAQ,GAAG,cAAc,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;QAEzE,MAAM,UAAU,GAAG;YACjB,GAAG,OAAO;YACV,OAAO;YACP,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAClC,CAAC;QAEF,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAAC,SAAiB;QAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC/C,MAAM,eAAe,GAAG,KAAK;iBAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;iBACjE,IAAI,EAAE,CAAC;YAEV,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YAE7C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CAAC,SAAiB,EAAE,OAAgC;QAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,sBAAsB,CAAC,CAAC;QAC5E,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,OAAO,GAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,cAAc,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACvF,MAAM,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4CAA4C;YAC5C,MAAM,cAAc,GAAmB;gBACrC,SAAS,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE;gBAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,UAAU,EAAE,SAAS,EAAE,4BAA4B;gBACnD,aAAa,EAAE,EAAE;gBACjB,cAAc,EAAE,EAAE;gBAClB,WAAW,EAAE,CAAC,wCAAwC,CAAC;gBACvD,GAAG,OAAO;aACO,CAAC;YAEpB,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YAC3C,MAAM,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAC3B,SAAiB,EACjB,IAAY,EACZ,KAAqC;QAErC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAC9E,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;YAC7C,MAAM,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG;KACf,SAAS;;uBAES,IAAI;aACd,KAAK,CAAC,KAAK;WACb,KAAK,CAAC,GAAG;;;CAGnB,CAAC;YACI,MAAM,aAAa,CAAC,aAAa,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Show Command
3
+ * Show current database schema in a readable format
4
+ */
5
+ interface ShowOptions {
6
+ format?: string;
7
+ }
8
+ export declare function show(options: ShowOptions): Promise<void>;
9
+ export {};
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Show Command
3
+ * Show current database schema in a readable format
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { createExtractor, UnifiedSchemaConverter } from '../extractors/index.js';
8
+ import { logger, readFileSafe, fileExists } from '../../core/index.js';
9
+ export async function show(options) {
10
+ const format = options.format || 'markdown';
11
+ logger.info('Loading database schema...');
12
+ // Try to load from existing .devmind directory first
13
+ let outputDir = '.devmind';
14
+ if (!(await fileExists(path.join(outputDir, 'CLAUDE.md'))) &&
15
+ (await fileExists('.ai/CLAUDE.md'))) {
16
+ outputDir = '.ai';
17
+ }
18
+ const claudeFile = path.join(outputDir, 'CLAUDE.md');
19
+ if (await fileExists(claudeFile)) {
20
+ logger.info(`Found existing context in ${outputDir} directory`);
21
+ const content = await readFileSafe(claudeFile);
22
+ // Extract and display just the schema section
23
+ const schemaMatch = content.match(/## Database Schema([\s\S]*?)(?=\n##|$)/);
24
+ if (schemaMatch) {
25
+ logger.info('## Database Schema');
26
+ console.log(schemaMatch[1].trim());
27
+ }
28
+ else {
29
+ console.log(content);
30
+ }
31
+ return;
32
+ }
33
+ // If no existing context, try to generate from config
34
+ const configPath = path.join(outputDir, 'devmind.config.json');
35
+ const legacyConfigPath = path.join(outputDir, 'cohere-config.json');
36
+ const legacyRootConfigPath = 'cohere-config.json';
37
+ let activeConfigPath = configPath;
38
+ if (await fileExists(legacyConfigPath))
39
+ activeConfigPath = legacyConfigPath;
40
+ else if (await fileExists(legacyRootConfigPath))
41
+ activeConfigPath = legacyRootConfigPath;
42
+ if (!(await fileExists(activeConfigPath))) {
43
+ logger.warn('No schema found.');
44
+ logger.info('Run one of the following:');
45
+ logger.info(' 1. devmind init --url "your-database-url"');
46
+ logger.info(' 2. devmind generate');
47
+ logger.info(' 3. devmind generate --prisma');
48
+ logger.info(' 4. devmind generate --drizzle');
49
+ return;
50
+ }
51
+ // Load config and extract schema
52
+ try {
53
+ const config = JSON.parse(await readFileSafe(activeConfigPath));
54
+ let extractorType = 'postgresql';
55
+ let connectionString = config.databaseUrl || process.env.DATABASE_URL;
56
+ let schemaPath;
57
+ // Auto-detect extractor type
58
+ if (fs.existsSync('prisma/schema.prisma')) {
59
+ extractorType = 'prisma';
60
+ schemaPath = 'prisma/schema.prisma';
61
+ }
62
+ else if (fs.existsSync('src/db/schema.ts')) {
63
+ extractorType = 'drizzle';
64
+ schemaPath = 'src/db/schema.ts';
65
+ }
66
+ else if (connectionString &&
67
+ (connectionString.startsWith('mongodb://') || connectionString.startsWith('mongodb+srv://'))) {
68
+ extractorType = 'mongodb';
69
+ }
70
+ else if (process.env.GOOGLE_APPLICATION_CREDENTIALS) {
71
+ extractorType = 'firebase';
72
+ }
73
+ else if (connectionString) {
74
+ if (connectionString.startsWith('mysql')) {
75
+ extractorType = 'mysql';
76
+ }
77
+ else if (connectionString.includes('.db') || connectionString.includes('.sqlite')) {
78
+ extractorType = 'sqlite';
79
+ }
80
+ }
81
+ if (!connectionString && !schemaPath) {
82
+ logger.warn('No database connection or schema file found.');
83
+ logger.info('Run: devmind generate');
84
+ return;
85
+ }
86
+ const extractor = await createExtractor(extractorType, connectionString || 'dummy', {
87
+ schemaPath,
88
+ });
89
+ try {
90
+ const rawSchema = await extractor.extract();
91
+ const unifiedSchema = UnifiedSchemaConverter.convert(rawSchema);
92
+ logger.info(`Database: ${unifiedSchema.databaseType || 'Unknown'}`);
93
+ logger.info(`Tables: ${unifiedSchema.tables.length}`);
94
+ logger.info('## Tables');
95
+ for (const table of unifiedSchema.tables) {
96
+ logger.info(`### ${table.name}`);
97
+ if (table.description) {
98
+ logger.info(` ${table.description}`);
99
+ }
100
+ logger.info(` Columns: ${table.columns.length}`);
101
+ // Show primary keys
102
+ const pkColumns = table.columns.filter((c) => c.isPrimaryKey);
103
+ if (pkColumns.length > 0) {
104
+ logger.info(` Primary Key: ${pkColumns.map((c) => c.name).join(', ')}`);
105
+ }
106
+ // Show relations
107
+ if (table.relations && table.relations.length > 0) {
108
+ logger.info(` Relations: ${table.relations.length}`);
109
+ }
110
+ logger.info('');
111
+ }
112
+ // Show relationships
113
+ const relationships = unifiedSchema.tables.flatMap((t) => (t.relations || []).map((rel) => ({
114
+ from: rel.fromTable,
115
+ to: rel.toTable,
116
+ cardinality: rel.cardinality,
117
+ })));
118
+ if (relationships.length > 0) {
119
+ logger.info('## Relationships');
120
+ for (const rel of relationships) {
121
+ logger.info(` ${rel.from} [${rel.cardinality}] ${rel.to}`);
122
+ }
123
+ }
124
+ }
125
+ finally {
126
+ if (extractor.close) {
127
+ await extractor.close();
128
+ }
129
+ }
130
+ }
131
+ catch (error) {
132
+ logger.error('Failed to load schema:', error);
133
+ logger.info('Try running: devmind generate');
134
+ }
135
+ }
136
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/database/commands/show.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Validate Command
3
+ * Validates generated context against database
4
+ */
5
+ interface ValidateOptions {
6
+ strict?: boolean;
7
+ }
8
+ export declare function validate(options: ValidateOptions): Promise<void>;
9
+ export {};