devmind 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +138 -162
- package/dist/cli/handlers.d.ts +2 -0
- package/dist/cli/handlers.js +140 -0
- package/dist/cli/handlers.js.map +1 -0
- package/dist/cli/register-all.d.ts +2 -0
- package/dist/cli/register-all.js +11 -0
- package/dist/cli/register-all.js.map +1 -0
- package/dist/cli/register-analysis.d.ts +2 -0
- package/dist/cli/register-analysis.js +137 -0
- package/dist/cli/register-analysis.js.map +1 -0
- package/dist/cli/register-codebase.d.ts +2 -0
- package/dist/cli/register-codebase.js +22 -0
- package/dist/cli/register-codebase.js.map +1 -0
- package/dist/cli/register-database.d.ts +2 -0
- package/dist/cli/register-database.js +48 -0
- package/dist/cli/register-database.js.map +1 -0
- package/dist/cli/register-memory.d.ts +2 -0
- package/dist/cli/register-memory.js +58 -0
- package/dist/cli/register-memory.js.map +1 -0
- package/dist/cli.js +9 -316
- package/dist/cli.js.map +1 -1
- package/dist/codebase/generators/architecture-extractor.d.ts +41 -0
- package/dist/codebase/generators/architecture-extractor.js +388 -0
- package/dist/codebase/generators/architecture-extractor.js.map +1 -0
- package/dist/codebase/generators/architecture.d.ts +2 -4
- package/dist/codebase/generators/architecture.js +123 -30
- package/dist/codebase/generators/architecture.js.map +1 -1
- package/dist/codebase/generators/modules.js +8 -8
- package/dist/codebase/generators/overview.js +24 -24
- package/dist/codebase/index.js +3 -3
- package/dist/codebase/index.js.map +1 -1
- package/dist/codebase/parsers/typescript.d.ts +1 -0
- package/dist/codebase/parsers/typescript.js +12 -0
- package/dist/codebase/parsers/typescript.js.map +1 -1
- package/dist/codebase/scanners/filesystem.d.ts +1 -0
- package/dist/codebase/scanners/filesystem.js +128 -4
- package/dist/codebase/scanners/filesystem.js.map +1 -1
- package/dist/commands/analyze.d.ts +1 -0
- package/dist/commands/analyze.js +172 -24
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/audit-design.d.ts +8 -0
- package/dist/commands/audit-design.js +158 -0
- package/dist/commands/audit-design.js.map +1 -0
- package/dist/commands/audit-report.d.ts +18 -0
- package/dist/commands/audit-report.js +30 -0
- package/dist/commands/audit-report.js.map +1 -0
- package/dist/commands/audit-source.d.ts +21 -0
- package/dist/commands/audit-source.js +59 -0
- package/dist/commands/audit-source.js.map +1 -0
- package/dist/commands/audit.d.ts +1 -0
- package/dist/commands/audit.js +174 -73
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/claude-plugin.d.ts +8 -0
- package/dist/commands/claude-plugin.js +123 -0
- package/dist/commands/claude-plugin.js.map +1 -0
- package/dist/commands/codex-plugin.d.ts +9 -0
- package/dist/commands/codex-plugin.js +145 -0
- package/dist/commands/codex-plugin.js.map +1 -0
- package/dist/commands/context.js +66 -5
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/design-system.d.ts +8 -0
- package/dist/commands/design-system.js +95 -0
- package/dist/commands/design-system.js.map +1 -0
- package/dist/commands/extract.d.ts +13 -0
- package/dist/commands/extract.js +83 -17
- package/dist/commands/extract.js.map +1 -1
- package/dist/commands/openclaw-plugin.d.ts +8 -0
- package/dist/commands/openclaw-plugin.js +103 -0
- package/dist/commands/openclaw-plugin.js.map +1 -0
- package/dist/commands/retrieve.d.ts +12 -0
- package/dist/commands/retrieve.js +234 -0
- package/dist/commands/retrieve.js.map +1 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +54 -18
- package/dist/commands/status.js.map +1 -1
- package/dist/core/cache-json.d.ts +7 -0
- package/dist/core/cache-json.js +60 -0
- package/dist/core/cache-json.js.map +1 -0
- package/dist/core/errors.d.ts +2 -0
- package/dist/core/errors.js +49 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/learning-parser.d.ts +6 -0
- package/dist/core/learning-parser.js +23 -0
- package/dist/core/learning-parser.js.map +1 -0
- package/dist/core/profile.d.ts +18 -0
- package/dist/core/profile.js +37 -0
- package/dist/core/profile.js.map +1 -0
- package/dist/core/source-file-cache.d.ts +13 -0
- package/dist/core/source-file-cache.js +88 -0
- package/dist/core/source-file-cache.js.map +1 -0
- package/dist/database/cli/register-all.d.ts +2 -0
- package/dist/database/cli/register-all.js +9 -0
- package/dist/database/cli/register-all.js.map +1 -0
- package/dist/database/cli/register-database.d.ts +2 -0
- package/dist/database/cli/register-database.js +48 -0
- package/dist/database/cli/register-database.js.map +1 -0
- package/dist/database/cli/register-interactive.d.ts +2 -0
- package/dist/database/cli/register-interactive.js +29 -0
- package/dist/database/cli/register-interactive.js.map +1 -0
- package/dist/database/cli/register-memory.d.ts +2 -0
- package/dist/database/cli/register-memory.js +47 -0
- package/dist/database/cli/register-memory.js.map +1 -0
- package/dist/database/cli.js +5 -112
- package/dist/database/cli.js.map +1 -1
- package/dist/database/commands/checkpoint.js +8 -10
- package/dist/database/commands/checkpoint.js.map +1 -1
- package/dist/database/commands/generate.d.ts +1 -0
- package/dist/database/commands/generate.js +28 -20
- package/dist/database/commands/generate.js.map +1 -1
- package/dist/database/commands/handoff.js +126 -125
- package/dist/database/commands/handoff.js.map +1 -1
- package/dist/database/commands/learn.d.ts +4 -0
- package/dist/database/commands/learn.js +249 -43
- package/dist/database/commands/learn.js.map +1 -1
- package/dist/database/commands/memory.js +114 -114
- package/dist/database/commands/validate.js +6 -4
- package/dist/database/commands/validate.js.map +1 -1
- package/dist/database/commands/watch.js +2 -2
- package/dist/database/commands/watch.js.map +1 -1
- package/dist/database/extractors/mysql.js +45 -45
- package/dist/database/extractors/postgres.js +54 -54
- package/dist/database/extractors/sqlite.js +8 -8
- package/dist/database/generators/templates.js +534 -534
- package/dist/database/generators/templates.js.map +1 -1
- package/dist/database/utils/json-output.d.ts +4 -0
- package/dist/database/utils/json-output.js +7 -0
- package/dist/database/utils/json-output.js.map +1 -1
- package/dist/generators/unified.d.ts +13 -0
- package/dist/generators/unified.js +391 -46
- package/dist/generators/unified.js.map +1 -1
- package/package.json +86 -78
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { withCliErrorHandling } from '../core/index.js';
|
|
2
|
+
import { runScanCommand } from './handlers.js';
|
|
3
|
+
export function registerCodebaseCommands(program) {
|
|
4
|
+
program
|
|
5
|
+
.command('scan')
|
|
6
|
+
.description('Scan codebase and generate context')
|
|
7
|
+
.option('-p, --path <path>', 'Path to scan', '.')
|
|
8
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
9
|
+
.option('--json', 'Output as JSON')
|
|
10
|
+
.option('--profile', 'Print command phase timings')
|
|
11
|
+
.action(withCliErrorHandling('scan', runScanCommand));
|
|
12
|
+
program
|
|
13
|
+
.command('context')
|
|
14
|
+
.description('Get focused context for a specific part of the codebase')
|
|
15
|
+
.option('--focus <path>', 'Path to focus on')
|
|
16
|
+
.option('--query <string>', 'Search query')
|
|
17
|
+
.action(withCliErrorHandling('context', async (options) => {
|
|
18
|
+
const { context } = await import('../commands/context.js');
|
|
19
|
+
await context(options);
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=register-codebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-codebase.js","sourceRoot":"","sources":["../../src/cli/register-codebase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,mBAAmB,EAAE,cAAc,EAAE,GAAG,CAAC;SAChD,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,UAAU,CAAC;SAC5D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC;SAClD,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAExD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;SAC5C,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC;SAC1C,MAAM,CACL,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC3D,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { init, validate, watch, show } from '../database/index.js';
|
|
2
|
+
import { withCliErrorHandling } from '../core/index.js';
|
|
3
|
+
import { runGenerateCommand } from './handlers.js';
|
|
4
|
+
export function registerDatabaseCommands(program) {
|
|
5
|
+
program
|
|
6
|
+
.command('init')
|
|
7
|
+
.description('Initialize DevMind in your project')
|
|
8
|
+
.option('-u, --url <url>', 'Database connection URL')
|
|
9
|
+
.option('-d, --dir <dir>', 'Output directory', '.devmind')
|
|
10
|
+
.action(withCliErrorHandling('init', init));
|
|
11
|
+
program
|
|
12
|
+
.command('generate')
|
|
13
|
+
.description('Generate context from database and/or codebase')
|
|
14
|
+
.option('-u, --url <url>', 'Database connection URL')
|
|
15
|
+
.option('--orm <orm>', 'ORM type (prisma, drizzle)')
|
|
16
|
+
.option('--mysql', 'Use MySQL extractor')
|
|
17
|
+
.option('--sqlite <path>', 'Use SQLite extractor with file path')
|
|
18
|
+
.option('--prisma [path]', 'Use Prisma extractor (optional path)')
|
|
19
|
+
.option('--drizzle [path]', 'Use Drizzle extractor (optional path)')
|
|
20
|
+
.option('--mongodb <url>', 'Use MongoDB extractor with connection URL')
|
|
21
|
+
.option('--firebase-project <id>', 'Use Firebase extractor with project ID')
|
|
22
|
+
.option('--firebase-key <path>', 'Path to Firebase service account JSON key')
|
|
23
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
24
|
+
.option('--format <format>', 'Output format (markdown, json)', 'markdown')
|
|
25
|
+
.option('--json', 'Output as JSON')
|
|
26
|
+
.option('--all', 'Generate all contexts (database and codebase)')
|
|
27
|
+
.option('--code', 'Generate codebase context only')
|
|
28
|
+
.option('--db', 'Generate database context only (default)')
|
|
29
|
+
.option('-p, --path <path>', 'Path to scan (for codebase)', '.')
|
|
30
|
+
.option('--profile', 'Print command phase timings')
|
|
31
|
+
.action(withCliErrorHandling('generate', runGenerateCommand));
|
|
32
|
+
program
|
|
33
|
+
.command('validate')
|
|
34
|
+
.description('Validate generated context against database')
|
|
35
|
+
.option('--strict', 'Fail on any mismatches')
|
|
36
|
+
.action(withCliErrorHandling('validate', validate));
|
|
37
|
+
program
|
|
38
|
+
.command('watch')
|
|
39
|
+
.description('Watch for database schema changes')
|
|
40
|
+
.option('-d, --debounce <ms>', 'Debounce time in ms', '2000')
|
|
41
|
+
.action(withCliErrorHandling('watch', watch));
|
|
42
|
+
program
|
|
43
|
+
.command('show')
|
|
44
|
+
.description('Show current database schema')
|
|
45
|
+
.option('-f, --format <format>', 'Output format', 'markdown')
|
|
46
|
+
.action(withCliErrorHandling('show', show));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=register-database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-database.js","sourceRoot":"","sources":["../../src/cli/register-database.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SACpD,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,CAAC;SACzD,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAE9C,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SACpD,MAAM,CAAC,aAAa,EAAE,4BAA4B,CAAC;SACnD,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC;SACxC,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC;SAChE,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,CAAC;SACjE,MAAM,CAAC,kBAAkB,EAAE,uCAAuC,CAAC;SACnE,MAAM,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;SACtE,MAAM,CAAC,yBAAyB,EAAE,wCAAwC,CAAC;SAC3E,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,CAAC;SAC5E,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,UAAU,CAAC;SAC5D,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,EAAE,UAAU,CAAC;SACzE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,OAAO,EAAE,+CAA+C,CAAC;SAChE,MAAM,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SAClD,MAAM,CAAC,MAAM,EAAE,0CAA0C,CAAC;SAC1D,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,EAAE,GAAG,CAAC;SAC/D,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC;SAClD,MAAM,CAAC,oBAAoB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEhE,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,UAAU,EAAE,wBAAwB,CAAC;SAC5C,MAAM,CAAC,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,CAAC;SAC5D,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAEhD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,uBAAuB,EAAE,eAAe,EAAE,UAAU,CAAC;SAC5D,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { handoff, checkpoint, learn, history } from '../database/index.js';
|
|
2
|
+
import { withCliErrorHandling } from '../core/index.js';
|
|
3
|
+
export function registerMemoryCommands(program) {
|
|
4
|
+
program
|
|
5
|
+
.command('handoff')
|
|
6
|
+
.description('Multi-agent handoff management')
|
|
7
|
+
.option('--record', 'Record current session state')
|
|
8
|
+
.option('--resume <id>', 'Resume from previous session')
|
|
9
|
+
.option('--list', 'List available sessions')
|
|
10
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
11
|
+
.option('--status <status>', 'Session status', 'in_progress')
|
|
12
|
+
.option('--agentId <id>', 'Agent identifier')
|
|
13
|
+
.action(withCliErrorHandling('handoff', handoff));
|
|
14
|
+
program
|
|
15
|
+
.command('checkpoint')
|
|
16
|
+
.description('Save or restore session checkpoint')
|
|
17
|
+
.option('--restore', 'Restore latest checkpoint')
|
|
18
|
+
.option('--list', 'List all checkpoints')
|
|
19
|
+
.option('-m, --message <message>', 'Checkpoint message')
|
|
20
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
21
|
+
.option('--json', 'Output as JSON')
|
|
22
|
+
.action(withCliErrorHandling('checkpoint', checkpoint));
|
|
23
|
+
program
|
|
24
|
+
.command('learn [learning]')
|
|
25
|
+
.description('Add a learning to accumulated knowledge')
|
|
26
|
+
.option('--list', 'List all learnings')
|
|
27
|
+
.option('--category <category>', 'Learning category')
|
|
28
|
+
.option('--top <n>', 'Limit listed learnings (with --list)')
|
|
29
|
+
.option('--contains <text>', 'Filter listed learnings by substring match')
|
|
30
|
+
.option('--since <iso-date>', 'Filter listed learnings since ISO timestamp')
|
|
31
|
+
.option('--compact', 'Use compact JSON items in list mode')
|
|
32
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
33
|
+
.option('--json', 'Output as JSON')
|
|
34
|
+
.action(withCliErrorHandling('learn', async (learning, options) => {
|
|
35
|
+
await learn(learning, options);
|
|
36
|
+
if (!options.list && learning) {
|
|
37
|
+
const { runAutosave } = await import('../commands/autosave.js');
|
|
38
|
+
await runAutosave({
|
|
39
|
+
output: options.output || '.devmind',
|
|
40
|
+
path: '.',
|
|
41
|
+
source: 'learn',
|
|
42
|
+
note: `Added learning (${options.category || 'general'})`,
|
|
43
|
+
silent: true,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
program
|
|
48
|
+
.command('history')
|
|
49
|
+
.description('View session history')
|
|
50
|
+
.option('--sessions', 'Show session history (default)')
|
|
51
|
+
.option('--evolution', 'Show schema evolution')
|
|
52
|
+
.option('--codebase-evolution', 'Show codebase evolution')
|
|
53
|
+
.option('--unified', 'Show unified project timeline')
|
|
54
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
55
|
+
.option('--json', 'Output as JSON')
|
|
56
|
+
.action(withCliErrorHandling('history', history));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=register-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-memory.js","sourceRoot":"","sources":["../../src/cli/register-memory.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -3,326 +3,19 @@
|
|
|
3
3
|
* DevMind CLI
|
|
4
4
|
* Unified tool for database and codebase analysis
|
|
5
5
|
*/
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { dirname, join } from 'path';
|
|
6
8
|
import { Command } from 'commander';
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import { registerAllCommands } from './cli/register-all.js';
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = dirname(__filename);
|
|
13
|
+
const pkg = JSON.parse(fs.readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
12
14
|
const program = new Command();
|
|
13
15
|
program
|
|
14
16
|
.name('devmind')
|
|
15
17
|
.description('Unified developer assistant for database and codebase context')
|
|
16
|
-
.version(
|
|
17
|
-
|
|
18
|
-
program
|
|
19
|
-
.command('init')
|
|
20
|
-
.description('Initialize DevMind in your project')
|
|
21
|
-
.option('-u, --url <url>', 'Database connection URL')
|
|
22
|
-
.option('-d, --dir <dir>', 'Output directory', '.devmind')
|
|
23
|
-
.action(init);
|
|
24
|
-
program
|
|
25
|
-
.command('generate')
|
|
26
|
-
.description('Generate context from database and/or codebase')
|
|
27
|
-
.option('-u, --url <url>', 'Database connection URL')
|
|
28
|
-
.option('--orm <orm>', 'ORM type (prisma, drizzle)')
|
|
29
|
-
.option('--mysql', 'Use MySQL extractor')
|
|
30
|
-
.option('--sqlite <path>', 'Use SQLite extractor with file path')
|
|
31
|
-
.option('--prisma [path]', 'Use Prisma extractor (optional path)')
|
|
32
|
-
.option('--drizzle [path]', 'Use Drizzle extractor (optional path)')
|
|
33
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
34
|
-
.option('--format <format>', 'Output format (markdown, json)', 'markdown')
|
|
35
|
-
.option('--all', 'Generate all contexts (database and codebase)')
|
|
36
|
-
.option('--code', 'Generate codebase context only')
|
|
37
|
-
.option('--db', 'Generate database context only (default)')
|
|
38
|
-
.option('-p, --path <path>', 'Path to scan (for codebase)', '.')
|
|
39
|
-
.action(async (options) => {
|
|
40
|
-
try {
|
|
41
|
-
// Smart Config Loading & Detection
|
|
42
|
-
const { loadConfig } = await import('./utils/config-loader.js');
|
|
43
|
-
const { detectDatabaseConfig } = await import('./utils/config-detector.js');
|
|
44
|
-
let savedConfig = await loadConfig(process.cwd());
|
|
45
|
-
// Merge options: CLI flags > Saved Config > Auto Detection
|
|
46
|
-
const mergedOptions = { ...savedConfig, ...options };
|
|
47
|
-
// Prioritize explicit URL > Env > Saved > Detected
|
|
48
|
-
let connectionString = options.url || process.env.DATABASE_URL || savedConfig.databaseUrl;
|
|
49
|
-
let configModified = false;
|
|
50
|
-
if (!connectionString && (options.db || options.all || (!options.code && !options.db))) {
|
|
51
|
-
const detectedUrl = await detectDatabaseConfig(process.cwd());
|
|
52
|
-
if (detectedUrl) {
|
|
53
|
-
logger.info(`Auto-detected database URL: ${detectedUrl.replace(/:[^:@]*@/, ':****@')}`);
|
|
54
|
-
connectionString = detectedUrl;
|
|
55
|
-
// Save for future runs
|
|
56
|
-
savedConfig = { ...savedConfig, databaseUrl: detectedUrl };
|
|
57
|
-
configModified = true;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// Apply merged connection string
|
|
61
|
-
if (connectionString) {
|
|
62
|
-
mergedOptions.url = connectionString;
|
|
63
|
-
}
|
|
64
|
-
if (configModified) {
|
|
65
|
-
const configPath = path.join(process.cwd(), '.devmind', 'devmind.config.json');
|
|
66
|
-
await ensureDir(path.dirname(configPath));
|
|
67
|
-
await writeJSON(configPath, savedConfig);
|
|
68
|
-
logger.info(`Saved configuration to ${configPath}`);
|
|
69
|
-
}
|
|
70
|
-
const runAll = mergedOptions.all;
|
|
71
|
-
const runCode = mergedOptions.code || runAll;
|
|
72
|
-
const runDb = mergedOptions.db || runAll || (!runCode && !mergedOptions.db);
|
|
73
|
-
if (runDb) {
|
|
74
|
-
logger.info('Starting Database Generation...');
|
|
75
|
-
const dbOutputDir = path.join(mergedOptions.output || '.devmind', 'database');
|
|
76
|
-
await ensureDir(dbOutputDir);
|
|
77
|
-
const dbOptions = { ...mergedOptions, output: dbOutputDir };
|
|
78
|
-
await generateDatabase(dbOptions);
|
|
79
|
-
}
|
|
80
|
-
if (runCode) {
|
|
81
|
-
logger.info('Starting Codebase Generation...');
|
|
82
|
-
const rootPath = path.resolve(mergedOptions.path || '.');
|
|
83
|
-
const outputDir = mergedOptions.output || '.devmind';
|
|
84
|
-
const codebaseOutputDir = path.join(outputDir, 'codebase');
|
|
85
|
-
await ensureDir(codebaseOutputDir);
|
|
86
|
-
const result = await scanCodebase(rootPath, codebaseOutputDir);
|
|
87
|
-
await saveScanResult(result, codebaseOutputDir);
|
|
88
|
-
// Update memory with codebase stats
|
|
89
|
-
try {
|
|
90
|
-
const memory = new MemoryInfrastructure();
|
|
91
|
-
const codebaseHash = calculateCodebaseHash(result.structure);
|
|
92
|
-
const codebaseStats = getCodebaseStats(result.structure);
|
|
93
|
-
await memory.updateSessionContext(outputDir, {
|
|
94
|
-
codebaseHash,
|
|
95
|
-
codebaseStats,
|
|
96
|
-
});
|
|
97
|
-
logger.info('Updated session context with codebase stats');
|
|
98
|
-
await memory.updateCodebaseEvolution(outputDir, codebaseHash, codebaseStats);
|
|
99
|
-
}
|
|
100
|
-
catch (error) {
|
|
101
|
-
logger.warn(`Failed to update session context: ${error.message}`);
|
|
102
|
-
}
|
|
103
|
-
// Generate unified docs
|
|
104
|
-
await generateUnifiedDocs(outputDir);
|
|
105
|
-
logger.success('Codebase context generated!');
|
|
106
|
-
}
|
|
107
|
-
if (runAll) {
|
|
108
|
-
logger.success('Unified Generation Complete!');
|
|
109
|
-
logger.info(`Context available in ${mergedOptions.output || '.devmind'}`);
|
|
110
|
-
logger.info('Session startup context:');
|
|
111
|
-
logger.info(` 1. Read ${(mergedOptions.output || '.devmind') + '/AGENTS.md'}`);
|
|
112
|
-
logger.info(` 2. Read ${(mergedOptions.output || '.devmind') + '/index.json'}`);
|
|
113
|
-
logger.info('Tip: run `devmind status` to verify freshness.');
|
|
114
|
-
}
|
|
115
|
-
const { runAutosave } = await import('./commands/autosave.js');
|
|
116
|
-
await runAutosave({
|
|
117
|
-
output: mergedOptions.output || '.devmind',
|
|
118
|
-
path: mergedOptions.path || '.',
|
|
119
|
-
source: 'generate',
|
|
120
|
-
note: runAll ? 'Completed unified generation' : 'Completed generation',
|
|
121
|
-
silent: true,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
logger.error('Generation failed', error);
|
|
126
|
-
process.exit(1);
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
program
|
|
130
|
-
.command('validate')
|
|
131
|
-
.description('Validate generated context against database')
|
|
132
|
-
.option('--strict', 'Fail on any mismatches')
|
|
133
|
-
.action(validate);
|
|
134
|
-
program
|
|
135
|
-
.command('watch')
|
|
136
|
-
.description('Watch for database schema changes')
|
|
137
|
-
.option('-d, --debounce <ms>', 'Debounce time in ms', '2000')
|
|
138
|
-
.action(watch);
|
|
139
|
-
program
|
|
140
|
-
.command('show')
|
|
141
|
-
.description('Show current database schema')
|
|
142
|
-
.option('-f, --format <format>', 'Output format', 'markdown')
|
|
143
|
-
.action(show);
|
|
144
|
-
// Memory Commands
|
|
145
|
-
program
|
|
146
|
-
.command('handoff')
|
|
147
|
-
.description('Multi-agent handoff management')
|
|
148
|
-
.option('--record', 'Record current session state')
|
|
149
|
-
.option('--resume <id>', 'Resume from previous session')
|
|
150
|
-
.option('--list', 'List available sessions')
|
|
151
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
152
|
-
.option('--status <status>', 'Session status', 'in_progress')
|
|
153
|
-
.option('--agentId <id>', 'Agent identifier')
|
|
154
|
-
.action(handoff);
|
|
155
|
-
program
|
|
156
|
-
.command('checkpoint')
|
|
157
|
-
.description('Save or restore session checkpoint')
|
|
158
|
-
.option('--restore', 'Restore latest checkpoint')
|
|
159
|
-
.option('--list', 'List all checkpoints')
|
|
160
|
-
.option('-m, --message <message>', 'Checkpoint message')
|
|
161
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
162
|
-
.option('--json', 'Output as JSON')
|
|
163
|
-
.action(checkpoint);
|
|
164
|
-
program
|
|
165
|
-
.command('learn [learning]')
|
|
166
|
-
.description('Add a learning to accumulated knowledge')
|
|
167
|
-
.option('--list', 'List all learnings')
|
|
168
|
-
.option('--category <category>', 'Learning category')
|
|
169
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
170
|
-
.option('--json', 'Output as JSON')
|
|
171
|
-
.action(async (learning, options) => {
|
|
172
|
-
await learn(learning, options);
|
|
173
|
-
if (!options.list && learning) {
|
|
174
|
-
const { runAutosave } = await import('./commands/autosave.js');
|
|
175
|
-
await runAutosave({
|
|
176
|
-
output: options.output || '.devmind',
|
|
177
|
-
path: '.',
|
|
178
|
-
source: 'learn',
|
|
179
|
-
note: `Added learning (${options.category || 'general'})`,
|
|
180
|
-
silent: true,
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
program
|
|
185
|
-
.command('history')
|
|
186
|
-
.description('View session history')
|
|
187
|
-
.option('--sessions', 'Show session history (default)')
|
|
188
|
-
.option('--evolution', 'Show schema evolution')
|
|
189
|
-
.option('--codebase-evolution', 'Show codebase evolution')
|
|
190
|
-
.option('--unified', 'Show unified project timeline')
|
|
191
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
192
|
-
.option('--json', 'Output as JSON')
|
|
193
|
-
.action(history);
|
|
194
|
-
// Analysis Commands
|
|
195
|
-
program
|
|
196
|
-
.command('analyze')
|
|
197
|
-
.description('Analyze code-to-database usage')
|
|
198
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
199
|
-
.option('-p, --path <path>', 'Codebase path to scan', '.')
|
|
200
|
-
.action(async (options) => {
|
|
201
|
-
const { analyze } = await import('./commands/analyze.js');
|
|
202
|
-
await analyze(options);
|
|
203
|
-
const { runAutosave } = await import('./commands/autosave.js');
|
|
204
|
-
await runAutosave({
|
|
205
|
-
output: options.output || '.devmind',
|
|
206
|
-
path: options.path || '.',
|
|
207
|
-
source: 'analyze',
|
|
208
|
-
note: 'Completed code-to-database analysis',
|
|
209
|
-
silent: true,
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
program
|
|
213
|
-
.command('status')
|
|
214
|
-
.description('Show context status, freshness, and recommended next command')
|
|
215
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
216
|
-
.option('-p, --path <path>', 'Codebase path', '.')
|
|
217
|
-
.option('--json', 'Output as JSON')
|
|
218
|
-
.action(async (options) => {
|
|
219
|
-
const { status } = await import('./commands/status.js');
|
|
220
|
-
await status(options);
|
|
221
|
-
});
|
|
222
|
-
program
|
|
223
|
-
.command('audit')
|
|
224
|
-
.description('Audit codebase coverage against recorded learnings')
|
|
225
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
226
|
-
.option('-p, --path <path>', 'Codebase path', '.')
|
|
227
|
-
.option('--json', 'Output as JSON')
|
|
228
|
-
.action(async (options) => {
|
|
229
|
-
const { audit } = await import('./commands/audit.js');
|
|
230
|
-
await audit(options);
|
|
231
|
-
const { runAutosave } = await import('./commands/autosave.js');
|
|
232
|
-
await runAutosave({
|
|
233
|
-
output: options.output || '.devmind',
|
|
234
|
-
path: options.path || '.',
|
|
235
|
-
source: 'audit',
|
|
236
|
-
note: 'Completed learning audit',
|
|
237
|
-
silent: true,
|
|
238
|
-
});
|
|
239
|
-
});
|
|
240
|
-
program
|
|
241
|
-
.command('extract')
|
|
242
|
-
.description('Extract learning candidates from code and analysis artifacts')
|
|
243
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
244
|
-
.option('-p, --path <path>', 'Codebase path', '.')
|
|
245
|
-
.option('--apply', 'Append extracted learnings to memory/LEARN.md')
|
|
246
|
-
.option('--json', 'Output as JSON')
|
|
247
|
-
.action(async (options) => {
|
|
248
|
-
const { extract } = await import('./commands/extract.js');
|
|
249
|
-
await extract(options);
|
|
250
|
-
});
|
|
251
|
-
program
|
|
252
|
-
.command('autosave')
|
|
253
|
-
.description('Persist session journal/context and auto-apply extracted learnings')
|
|
254
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
255
|
-
.option('-p, --path <path>', 'Codebase path', '.')
|
|
256
|
-
.option('--source <source>', 'Autosave source label', 'manual')
|
|
257
|
-
.option('--note <note>', 'Autosave note')
|
|
258
|
-
.option('--no-extract', 'Skip extraction/apply step')
|
|
259
|
-
.option('--json', 'Output as JSON')
|
|
260
|
-
.action(async (options) => {
|
|
261
|
-
const { autosave } = await import('./commands/autosave.js');
|
|
262
|
-
await autosave(options);
|
|
263
|
-
});
|
|
264
|
-
// Codebase Commands
|
|
265
|
-
program
|
|
266
|
-
.command('scan')
|
|
267
|
-
.description('Scan codebase and generate context')
|
|
268
|
-
.option('-p, --path <path>', 'Path to scan', '.')
|
|
269
|
-
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
270
|
-
.option('--json', 'Output as JSON')
|
|
271
|
-
.action(async (options) => {
|
|
272
|
-
try {
|
|
273
|
-
const rootPath = path.resolve(options.path || '.');
|
|
274
|
-
const outputDir = options.output || '.devmind';
|
|
275
|
-
logger.info(`Scanning codebase: ${rootPath}`);
|
|
276
|
-
const codebaseOutputDir = path.join(outputDir, 'codebase');
|
|
277
|
-
// Ensure directory is created by saveScanResult but we might need it for scanCodebase if it writes logs?
|
|
278
|
-
// scanCodebase doesn't write files, saveScanResult does.
|
|
279
|
-
await ensureDir(codebaseOutputDir);
|
|
280
|
-
const result = await scanCodebase(rootPath, codebaseOutputDir);
|
|
281
|
-
await saveScanResult(result, codebaseOutputDir);
|
|
282
|
-
// Update memory with codebase stats
|
|
283
|
-
try {
|
|
284
|
-
const memory = new MemoryInfrastructure();
|
|
285
|
-
const codebaseHash = calculateCodebaseHash(result.structure);
|
|
286
|
-
const codebaseStats = getCodebaseStats(result.structure);
|
|
287
|
-
await memory.updateSessionContext(outputDir, {
|
|
288
|
-
codebaseHash,
|
|
289
|
-
codebaseStats,
|
|
290
|
-
});
|
|
291
|
-
logger.info('Updated session context with codebase stats');
|
|
292
|
-
await memory.updateCodebaseEvolution(outputDir, codebaseHash, codebaseStats);
|
|
293
|
-
}
|
|
294
|
-
catch (error) {
|
|
295
|
-
logger.warn(`Failed to update session context: ${error.message}`);
|
|
296
|
-
}
|
|
297
|
-
// Generate unified docs (CLAUDE.md, etc.)
|
|
298
|
-
await generateUnifiedDocs(outputDir);
|
|
299
|
-
logger.success('Scan complete!');
|
|
300
|
-
logger.info('Session startup context:');
|
|
301
|
-
logger.info(` 1. Read ${outputDir}/AGENTS.md`);
|
|
302
|
-
logger.info(` 2. Read ${outputDir}/index.json`);
|
|
303
|
-
logger.info('Tip: run `devmind status` to verify freshness.');
|
|
304
|
-
const { runAutosave } = await import('./commands/autosave.js');
|
|
305
|
-
await runAutosave({
|
|
306
|
-
output: outputDir,
|
|
307
|
-
path: options.path || '.',
|
|
308
|
-
source: 'scan',
|
|
309
|
-
note: 'Completed codebase scan',
|
|
310
|
-
silent: true,
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
catch (error) {
|
|
314
|
-
logger.error('Failed to scan codebase', error);
|
|
315
|
-
process.exit(1);
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
program
|
|
319
|
-
.command('context')
|
|
320
|
-
.description('Get focused context for a specific part of the codebase')
|
|
321
|
-
.option('--focus <path>', 'Path to focus on')
|
|
322
|
-
.option('--query <string>', 'Search query')
|
|
323
|
-
.action(async (options) => {
|
|
324
|
-
const { context } = await import('./commands/context.js');
|
|
325
|
-
await context(options);
|
|
326
|
-
});
|
|
18
|
+
.version(pkg.version);
|
|
19
|
+
registerAllCommands(program);
|
|
327
20
|
program.parse();
|
|
328
21
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAErF,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface RouteSignal {
|
|
2
|
+
method: string;
|
|
3
|
+
path: string;
|
|
4
|
+
file: string;
|
|
5
|
+
line: number;
|
|
6
|
+
source: 'express' | 'next' | 'react-router';
|
|
7
|
+
}
|
|
8
|
+
export interface ApiCallSignal {
|
|
9
|
+
client: string;
|
|
10
|
+
url: string;
|
|
11
|
+
file: string;
|
|
12
|
+
line: number;
|
|
13
|
+
method?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface WebSocketSignal {
|
|
16
|
+
library: 'WebSocket' | 'socket.io' | 'ws';
|
|
17
|
+
file: string;
|
|
18
|
+
line: number;
|
|
19
|
+
detail: string;
|
|
20
|
+
}
|
|
21
|
+
export interface SocketEventSignal {
|
|
22
|
+
action: 'emit' | 'on';
|
|
23
|
+
event: string;
|
|
24
|
+
file: string;
|
|
25
|
+
line: number;
|
|
26
|
+
}
|
|
27
|
+
export interface HookSignal {
|
|
28
|
+
name: string;
|
|
29
|
+
kind: 'react' | 'custom';
|
|
30
|
+
file: string;
|
|
31
|
+
line: number;
|
|
32
|
+
}
|
|
33
|
+
export interface ArchitectureSignals {
|
|
34
|
+
routes: RouteSignal[];
|
|
35
|
+
apiCalls: ApiCallSignal[];
|
|
36
|
+
websockets: WebSocketSignal[];
|
|
37
|
+
socketEvents: SocketEventSignal[];
|
|
38
|
+
hooks: HookSignal[];
|
|
39
|
+
}
|
|
40
|
+
export declare function extractArchitectureSignals(rootPath: string): ArchitectureSignals;
|
|
41
|
+
export declare function renderArchitectureSignalsMarkdown(signals: ArchitectureSignals): string;
|