devmind 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -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 +44 -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/index.js +2 -2
- package/dist/codebase/index.js.map +1 -1
- package/dist/codebase/parsers/typescript.d.ts +1 -0
- package/dist/codebase/parsers/typescript.js +3 -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 +131 -4
- package/dist/codebase/scanners/filesystem.js.map +1 -1
- package/dist/commands/analyze.d.ts +1 -0
- package/dist/commands/analyze.js +166 -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 +57 -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 +79 -16
- 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 +230 -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 +85 -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 +44 -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.js +6 -7
- package/dist/database/commands/generate.js.map +1 -1
- package/dist/database/commands/handoff.js +9 -8
- package/dist/database/commands/handoff.js.map +1 -1
- package/dist/database/commands/learn.d.ts +4 -0
- package/dist/database/commands/learn.js +245 -43
- package/dist/database/commands/learn.js.map +1 -1
- package/dist/database/commands/memory.js +1 -1
- package/dist/database/commands/validate.js +6 -4
- package/dist/database/commands/validate.js.map +1 -1
- package/dist/database/commands/watch.js +1 -1
- package/dist/database/commands/watch.js.map +1 -1
- package/dist/database/generators/templates.js +26 -26
- 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 +390 -46
- package/dist/generators/unified.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,193 +1,157 @@
|
|
|
1
|
-
# DevMind
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
devmind init
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Installation
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
npm install -g devmind
|
|
51
|
-
# or
|
|
52
|
-
pnpm add -g devmind
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Usage
|
|
56
|
-
|
|
57
|
-
### ⚡ Zero-Friction Generation
|
|
58
|
-
|
|
59
|
-
DevMind automatically detects your database configuration from `.env`, `prisma/schema.prisma`, `drizzle.config.ts`, or saved config.
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
# Auto-detects DB and generates database context
|
|
63
|
-
devmind generate
|
|
64
|
-
|
|
65
|
-
# Generate full context (database + codebase)
|
|
66
|
-
devmind generate --all
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
If detection fails (or for first run):
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
devmind init --url "postgres://..."
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Context Slicing (Token Efficient)
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
# Get high-level map
|
|
79
|
-
devmind context
|
|
80
|
-
|
|
81
|
-
# Focus on specific module
|
|
82
|
-
devmind context --focus src/database
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### Memory Commands
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
# Save architectural decision
|
|
89
|
-
devmind learn "Services use dependency injection" --category architecture
|
|
90
|
-
|
|
91
|
-
# Save checkpoint
|
|
92
|
-
devmind checkpoint -m "Before refactoring auth"
|
|
93
|
-
|
|
94
|
-
# View history
|
|
95
|
-
devmind history --unified
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Analyze Code-to-Database Usage
|
|
1
|
+
# DevMind
|
|
2
|
+
|
|
3
|
+
> Deterministic context and memory layer for AI coding agents.
|
|
4
|
+
Let Agent remember your design system, general context, and database.
|
|
5
|
+
|
|
6
|
+
## Install
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install -g devmind
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Integrations
|
|
13
|
+
|
|
14
|
+
### OpenClaw
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
devmind openclaw-plugin --force
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Optional:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
devmind openclaw-plugin --project --force
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Default install target:
|
|
27
|
+
|
|
28
|
+
- `~/.openclaw/skills/devmind/SKILL.md`
|
|
29
|
+
|
|
30
|
+
### Claude Code
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
devmind claude-plugin --force
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
This creates:
|
|
37
|
+
|
|
38
|
+
- `.claude-plugin/marketplace.json`
|
|
39
|
+
- `.claude-plugin/skills/devmind/SKILL.md`
|
|
40
|
+
|
|
41
|
+
Then install that local folder in Claude Code using your plugin installer flow.
|
|
42
|
+
|
|
43
|
+
### Codex (CLI + App)
|
|
99
44
|
|
|
100
45
|
```bash
|
|
101
|
-
devmind
|
|
46
|
+
devmind codex-plugin --force
|
|
102
47
|
```
|
|
103
48
|
|
|
104
|
-
|
|
49
|
+
Optional:
|
|
105
50
|
|
|
106
51
|
```bash
|
|
107
|
-
#
|
|
108
|
-
devmind
|
|
52
|
+
# Also install project-local skill
|
|
53
|
+
devmind codex-plugin --project --force
|
|
54
|
+
|
|
55
|
+
# Skip legacy mirror paths
|
|
56
|
+
devmind codex-plugin --no-legacy --force
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Default install targets:
|
|
60
|
+
|
|
61
|
+
- `~/.agents/skills/devmind/SKILL.md`
|
|
62
|
+
- `CODEX_HOME/skills/devmind/SKILL.md`
|
|
63
|
+
- `~/.codex/skills/devmind/SKILL.md`
|
|
109
64
|
|
|
110
|
-
|
|
65
|
+
## Quick Start
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 1) Design system policy first
|
|
69
|
+
devmind design-system --init
|
|
70
|
+
|
|
71
|
+
# 2) Build overall context
|
|
72
|
+
devmind generate --all
|
|
73
|
+
|
|
74
|
+
# 3) Validate freshness/recommendation
|
|
111
75
|
devmind status --json
|
|
112
76
|
```
|
|
113
77
|
|
|
114
|
-
|
|
78
|
+
You are ready when `.devmind/AGENTS.md` and `.devmind/index.json` exist.
|
|
79
|
+
|
|
80
|
+
## Canonical Flow
|
|
81
|
+
|
|
82
|
+
1. Design system
|
|
83
|
+
2. Overall context
|
|
84
|
+
3. Database checks
|
|
85
|
+
|
|
86
|
+
## Quick Command Guide
|
|
87
|
+
|
|
88
|
+
### Context lifecycle
|
|
115
89
|
|
|
116
90
|
```bash
|
|
117
|
-
|
|
118
|
-
devmind
|
|
91
|
+
devmind generate --all
|
|
92
|
+
devmind scan
|
|
93
|
+
devmind status --json
|
|
94
|
+
```
|
|
119
95
|
|
|
120
|
-
|
|
121
|
-
devmind extract
|
|
96
|
+
### Focused context
|
|
122
97
|
|
|
123
|
-
|
|
124
|
-
devmind
|
|
98
|
+
```bash
|
|
99
|
+
devmind context --focus src/features
|
|
100
|
+
devmind context --query runbook
|
|
101
|
+
devmind retrieve -q "auth middleware flow" --type architecture --json
|
|
125
102
|
```
|
|
126
103
|
|
|
127
|
-
###
|
|
104
|
+
### Learning loop
|
|
128
105
|
|
|
129
106
|
```bash
|
|
130
|
-
|
|
107
|
+
devmind audit
|
|
108
|
+
devmind extract
|
|
109
|
+
devmind extract --apply
|
|
131
110
|
devmind autosave --source task-end
|
|
111
|
+
```
|
|
132
112
|
|
|
133
|
-
|
|
134
|
-
|
|
113
|
+
### Database validation
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
devmind analyze
|
|
117
|
+
devmind validate --strict
|
|
135
118
|
```
|
|
136
119
|
|
|
137
|
-
|
|
120
|
+
## Agent-First Runbook
|
|
138
121
|
|
|
139
122
|
```bash
|
|
140
123
|
# 1) Preflight
|
|
141
124
|
devmind status --json
|
|
142
125
|
|
|
143
|
-
# 2) If stale
|
|
144
|
-
# 3) Re-check
|
|
145
|
-
devmind status --json
|
|
126
|
+
# 2) If stale, run recommendedCommand
|
|
146
127
|
|
|
147
|
-
#
|
|
128
|
+
# 3) Execute with focused retrieval
|
|
129
|
+
devmind retrieve -q "<task query>" --json
|
|
130
|
+
|
|
131
|
+
# 4) Persist memory
|
|
148
132
|
devmind autosave --source task-end
|
|
149
133
|
```
|
|
150
|
-
|
|
151
|
-
##
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
DevMind is optimized for OpenClaw agents.
|
|
156
|
-
See [OpenClaw Integration Skill](integrations/openclaw/SKILL.md) for agent instructions.
|
|
157
|
-
|
|
158
|
-
### Cursor / Windsurf / Custom Agents
|
|
159
|
-
|
|
160
|
-
1. Run `devmind generate --all`
|
|
161
|
-
2. Point your AI to `.devmind/AGENTS.md`
|
|
162
|
-
3. See [AI Agent Integration Guide](docs/AI_INTEGRATION.md) for detailed patterns.
|
|
163
|
-
|
|
164
|
-
## Output Structure
|
|
165
|
-
|
|
166
|
-
```
|
|
134
|
+
|
|
135
|
+
## Key Outputs
|
|
136
|
+
|
|
137
|
+
```text
|
|
167
138
|
.devmind/
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
├── devmind-tools.json # Tool definitions for agents
|
|
188
|
-
└── index.json
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
## License
|
|
192
|
-
|
|
193
|
-
Apache 2.0 © Nyan Lin Maung
|
|
139
|
+
+-- AGENTS.md
|
|
140
|
+
+-- index.json
|
|
141
|
+
+-- design-system.json
|
|
142
|
+
+-- devmind-tools.json
|
|
143
|
+
+-- analysis/
|
|
144
|
+
| +-- AUDIT_REPORT.md
|
|
145
|
+
| +-- DESIGN_SYSTEM_AUDIT.md
|
|
146
|
+
| +-- CODE_DB_MAPPING.md
|
|
147
|
+
+-- memory/
|
|
148
|
+
| +-- LEARN.md
|
|
149
|
+
| +-- checkpoints/
|
|
150
|
+
| +-- SESSION_JOURNAL.md
|
|
151
|
+
+-- codebase/
|
|
152
|
+
+-- database/
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## License
|
|
156
|
+
|
|
157
|
+
Apache 2.0 (c) Nyan Lin Maung
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import { logger, ensureDir, writeJSON, createProfiler, failCommand, } from '../core/index.js';
|
|
3
|
+
import { generate as generateDatabase, MemoryInfrastructure } from '../database/index.js';
|
|
4
|
+
import { scanCodebase, saveScanResult, calculateCodebaseHash, getCodebaseStats, } from '../codebase/index.js';
|
|
5
|
+
import { generateUnifiedDocs } from '../generators/unified.js';
|
|
6
|
+
async function updateCodebaseMemory(outputDir, structure, profiler) {
|
|
7
|
+
try {
|
|
8
|
+
const memory = new MemoryInfrastructure();
|
|
9
|
+
const codebaseHash = calculateCodebaseHash(structure);
|
|
10
|
+
const codebaseStats = getCodebaseStats(structure);
|
|
11
|
+
await profiler.section('memory.updateSessionContext', async () => memory.updateSessionContext(outputDir, {
|
|
12
|
+
codebaseHash,
|
|
13
|
+
codebaseStats,
|
|
14
|
+
}));
|
|
15
|
+
logger.info('Updated session context with codebase stats');
|
|
16
|
+
await profiler.section('memory.updateCodebaseEvolution', async () => memory.updateCodebaseEvolution(outputDir, codebaseHash, codebaseStats));
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
logger.warn(`Failed to update session context: ${error.message}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export async function runGenerateCommand(options) {
|
|
23
|
+
try {
|
|
24
|
+
const profiler = createProfiler(!!options.profile);
|
|
25
|
+
const { loadConfig } = await import('../utils/config-loader.js');
|
|
26
|
+
const { detectDatabaseConfig } = await import('../utils/config-detector.js');
|
|
27
|
+
let savedConfig = await profiler.section('config.load', async () => loadConfig(process.cwd()));
|
|
28
|
+
const mergedOptions = { ...savedConfig, ...options };
|
|
29
|
+
let connectionString = options.url || process.env.DATABASE_URL || savedConfig.databaseUrl;
|
|
30
|
+
let configModified = false;
|
|
31
|
+
if (!connectionString &&
|
|
32
|
+
(options.db === true || options.all === true || (!options.code && !options.db))) {
|
|
33
|
+
const detectedUrl = await profiler.section('config.detect', async () => detectDatabaseConfig(process.cwd()));
|
|
34
|
+
if (detectedUrl) {
|
|
35
|
+
logger.info(`Auto-detected database URL: ${detectedUrl.replace(/:[^:@]*@/, ':****@')}`);
|
|
36
|
+
connectionString = detectedUrl;
|
|
37
|
+
savedConfig = { ...savedConfig, databaseUrl: detectedUrl };
|
|
38
|
+
configModified = true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (connectionString) {
|
|
42
|
+
mergedOptions.url = connectionString;
|
|
43
|
+
}
|
|
44
|
+
if (configModified) {
|
|
45
|
+
const configPath = path.join(process.cwd(), '.devmind', 'devmind.config.json');
|
|
46
|
+
await profiler.section('config.persist', async () => {
|
|
47
|
+
await ensureDir(path.dirname(configPath));
|
|
48
|
+
await writeJSON(configPath, savedConfig);
|
|
49
|
+
});
|
|
50
|
+
logger.info(`Saved configuration to ${configPath}`);
|
|
51
|
+
}
|
|
52
|
+
const outputDir = mergedOptions.output || '.devmind';
|
|
53
|
+
const runAll = mergedOptions.all === true;
|
|
54
|
+
const runCode = mergedOptions.code === true || runAll;
|
|
55
|
+
const runDb = mergedOptions.db === true || runAll || (!runCode && mergedOptions.db !== true);
|
|
56
|
+
if (runDb) {
|
|
57
|
+
logger.info('Starting Database Generation...');
|
|
58
|
+
const dbOutputDir = path.join(outputDir, 'database');
|
|
59
|
+
await profiler.section('db.ensureDir', async () => ensureDir(dbOutputDir));
|
|
60
|
+
await profiler.section('db.generate', async () => generateDatabase({ ...mergedOptions, output: dbOutputDir }));
|
|
61
|
+
}
|
|
62
|
+
if (runCode) {
|
|
63
|
+
logger.info('Starting Codebase Generation...');
|
|
64
|
+
const rootPath = path.resolve(mergedOptions.path || '.');
|
|
65
|
+
const codebaseOutputDir = path.join(outputDir, 'codebase');
|
|
66
|
+
await profiler.section('code.ensureDir', async () => ensureDir(codebaseOutputDir));
|
|
67
|
+
const result = await profiler.section('code.scan', async () => scanCodebase(rootPath, codebaseOutputDir));
|
|
68
|
+
await profiler.section('code.save', async () => saveScanResult(result, codebaseOutputDir));
|
|
69
|
+
await updateCodebaseMemory(outputDir, result.structure, profiler);
|
|
70
|
+
await profiler.section('docs.unified', async () => generateUnifiedDocs(outputDir));
|
|
71
|
+
logger.success('Codebase context generated!');
|
|
72
|
+
}
|
|
73
|
+
if (runAll) {
|
|
74
|
+
logger.success('Unified Generation Complete!');
|
|
75
|
+
logger.info(`Context available in ${outputDir}`);
|
|
76
|
+
logger.info('Session startup context:');
|
|
77
|
+
logger.info(` 1. Read ${outputDir}/AGENTS.md`);
|
|
78
|
+
logger.info(` 2. Read ${outputDir}/index.json`);
|
|
79
|
+
logger.info('Tip: run `devmind status` to verify freshness.');
|
|
80
|
+
}
|
|
81
|
+
const { runAutosave } = await import('../commands/autosave.js');
|
|
82
|
+
await profiler.section('autosave.run', async () => runAutosave({
|
|
83
|
+
output: outputDir,
|
|
84
|
+
path: mergedOptions.path || '.',
|
|
85
|
+
source: 'generate',
|
|
86
|
+
note: runAll ? 'Completed unified generation' : 'Completed generation',
|
|
87
|
+
silent: true,
|
|
88
|
+
}));
|
|
89
|
+
const profile = profiler.report();
|
|
90
|
+
if (profile) {
|
|
91
|
+
logger.info('Performance Profile');
|
|
92
|
+
logger.info(`Total: ${profile.totalMs.toFixed(1)}ms`);
|
|
93
|
+
for (const step of profile.steps) {
|
|
94
|
+
logger.info(`- ${step.name}: ${step.ms.toFixed(1)}ms`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
failCommand('Generation failed', error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export async function runScanCommand(options) {
|
|
103
|
+
try {
|
|
104
|
+
const profiler = createProfiler(!!options.profile);
|
|
105
|
+
const rootPath = path.resolve(options.path || '.');
|
|
106
|
+
const outputDir = options.output || '.devmind';
|
|
107
|
+
logger.info(`Scanning codebase: ${rootPath}`);
|
|
108
|
+
const codebaseOutputDir = path.join(outputDir, 'codebase');
|
|
109
|
+
await profiler.section('code.ensureDir', async () => ensureDir(codebaseOutputDir));
|
|
110
|
+
const result = await profiler.section('code.scan', async () => scanCodebase(rootPath, codebaseOutputDir));
|
|
111
|
+
await profiler.section('code.save', async () => saveScanResult(result, codebaseOutputDir));
|
|
112
|
+
await updateCodebaseMemory(outputDir, result.structure, profiler);
|
|
113
|
+
await profiler.section('docs.unified', async () => generateUnifiedDocs(outputDir));
|
|
114
|
+
logger.success('Scan complete!');
|
|
115
|
+
logger.info('Session startup context:');
|
|
116
|
+
logger.info(` 1. Read ${outputDir}/AGENTS.md`);
|
|
117
|
+
logger.info(` 2. Read ${outputDir}/index.json`);
|
|
118
|
+
logger.info('Tip: run `devmind status` to verify freshness.');
|
|
119
|
+
const { runAutosave } = await import('../commands/autosave.js');
|
|
120
|
+
await profiler.section('autosave.run', async () => runAutosave({
|
|
121
|
+
output: outputDir,
|
|
122
|
+
path: options.path || '.',
|
|
123
|
+
source: 'scan',
|
|
124
|
+
note: 'Completed codebase scan',
|
|
125
|
+
silent: true,
|
|
126
|
+
}));
|
|
127
|
+
const profile = profiler.report();
|
|
128
|
+
if (profile) {
|
|
129
|
+
logger.info('Performance Profile');
|
|
130
|
+
logger.info(`Total: ${profile.totalMs.toFixed(1)}ms`);
|
|
131
|
+
for (const step of profile.steps) {
|
|
132
|
+
logger.info(`- ${step.name}: ${step.ms.toFixed(1)}ms`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
failCommand('Failed to scan codebase', error);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/cli/handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { registerDatabaseCommands } from './register-database.js';
|
|
2
|
+
import { registerMemoryCommands } from './register-memory.js';
|
|
3
|
+
import { registerAnalysisCommands } from './register-analysis.js';
|
|
4
|
+
import { registerCodebaseCommands } from './register-codebase.js';
|
|
5
|
+
export function registerAllCommands(program) {
|
|
6
|
+
registerDatabaseCommands(program);
|
|
7
|
+
registerMemoryCommands(program);
|
|
8
|
+
registerAnalysisCommands(program);
|
|
9
|
+
registerCodebaseCommands(program);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=register-all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-all.js","sourceRoot":"","sources":["../../src/cli/register-all.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { withCliErrorHandling } from '../core/index.js';
|
|
2
|
+
export function registerAnalysisCommands(program) {
|
|
3
|
+
program
|
|
4
|
+
.command('analyze')
|
|
5
|
+
.description('Analyze code-to-database usage')
|
|
6
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
7
|
+
.option('-p, --path <path>', 'Codebase path to scan', '.')
|
|
8
|
+
.option('--profile', 'Print command phase timings')
|
|
9
|
+
.action(withCliErrorHandling('analyze', async (options) => {
|
|
10
|
+
const { analyze } = await import('../commands/analyze.js');
|
|
11
|
+
await analyze(options);
|
|
12
|
+
const { runAutosave } = await import('../commands/autosave.js');
|
|
13
|
+
await runAutosave({
|
|
14
|
+
output: options.output || '.devmind',
|
|
15
|
+
path: options.path || '.',
|
|
16
|
+
source: 'analyze',
|
|
17
|
+
note: 'Completed code-to-database analysis',
|
|
18
|
+
silent: true,
|
|
19
|
+
});
|
|
20
|
+
}));
|
|
21
|
+
program
|
|
22
|
+
.command('status')
|
|
23
|
+
.description('Show context status, freshness, and recommended next command')
|
|
24
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
25
|
+
.option('-p, --path <path>', 'Codebase path', '.')
|
|
26
|
+
.option('--json', 'Output as JSON')
|
|
27
|
+
.option('--profile', 'Include timing data')
|
|
28
|
+
.action(withCliErrorHandling('status', async (options) => {
|
|
29
|
+
const { status } = await import('../commands/status.js');
|
|
30
|
+
await status(options);
|
|
31
|
+
}));
|
|
32
|
+
program
|
|
33
|
+
.command('audit')
|
|
34
|
+
.description('Audit codebase coverage against recorded learnings')
|
|
35
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
36
|
+
.option('-p, --path <path>', 'Codebase path', '.')
|
|
37
|
+
.option('--json', 'Output as JSON')
|
|
38
|
+
.option('--profile', 'Include timing data')
|
|
39
|
+
.action(withCliErrorHandling('audit', async (options) => {
|
|
40
|
+
const { audit } = await import('../commands/audit.js');
|
|
41
|
+
await audit(options);
|
|
42
|
+
const { runAutosave } = await import('../commands/autosave.js');
|
|
43
|
+
await runAutosave({
|
|
44
|
+
output: options.output || '.devmind',
|
|
45
|
+
path: options.path || '.',
|
|
46
|
+
source: 'audit',
|
|
47
|
+
note: 'Completed learning audit',
|
|
48
|
+
silent: true,
|
|
49
|
+
});
|
|
50
|
+
}));
|
|
51
|
+
program
|
|
52
|
+
.command('extract')
|
|
53
|
+
.description('Extract learning candidates from code and analysis artifacts')
|
|
54
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
55
|
+
.option('-p, --path <path>', 'Codebase path', '.')
|
|
56
|
+
.option('--apply', 'Append extracted learnings to memory/LEARN.md')
|
|
57
|
+
.option('--json', 'Output as JSON')
|
|
58
|
+
.option('--profile', 'Include timing data')
|
|
59
|
+
.action(withCliErrorHandling('extract', async (options) => {
|
|
60
|
+
const { extract } = await import('../commands/extract.js');
|
|
61
|
+
await extract(options);
|
|
62
|
+
}));
|
|
63
|
+
program
|
|
64
|
+
.command('design-system')
|
|
65
|
+
.description('Manage design system profile for UI alignment checks')
|
|
66
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
67
|
+
.option('--init', 'Create default design system profile')
|
|
68
|
+
.option('--force', 'Overwrite existing profile when used with --init')
|
|
69
|
+
.option('--json', 'Output as JSON')
|
|
70
|
+
.action(withCliErrorHandling('design-system', async (options) => {
|
|
71
|
+
const { designSystem } = await import('../commands/design-system.js');
|
|
72
|
+
await designSystem(options);
|
|
73
|
+
}));
|
|
74
|
+
program
|
|
75
|
+
.command('retrieve')
|
|
76
|
+
.description('Retrieve focused context using index metadata and AGENTS sections')
|
|
77
|
+
.requiredOption('-q, --query <query>', 'Retrieval query')
|
|
78
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
79
|
+
.option('--type <type>', 'Section type filter (architecture, database, codebase, etc.)')
|
|
80
|
+
.option('--tags <tags>', 'Comma-separated tag filter')
|
|
81
|
+
.option('--limit <n>', 'Max sections to return', '6')
|
|
82
|
+
.option('--max-words <n>', 'Approximate max words in output', '1400')
|
|
83
|
+
.option('--json', 'Output as JSON')
|
|
84
|
+
.option('--profile', 'Include timing data')
|
|
85
|
+
.action(withCliErrorHandling('retrieve', async (options) => {
|
|
86
|
+
const { retrieve } = await import('../commands/retrieve.js');
|
|
87
|
+
await retrieve(options);
|
|
88
|
+
}));
|
|
89
|
+
program
|
|
90
|
+
.command('autosave')
|
|
91
|
+
.description('Persist session journal/context and auto-apply extracted learnings')
|
|
92
|
+
.option('-o, --output <dir>', 'Output directory', '.devmind')
|
|
93
|
+
.option('-p, --path <path>', 'Codebase path', '.')
|
|
94
|
+
.option('--source <source>', 'Autosave source label', 'manual')
|
|
95
|
+
.option('--note <note>', 'Autosave note')
|
|
96
|
+
.option('--no-extract', 'Skip extraction/apply step')
|
|
97
|
+
.option('--json', 'Output as JSON')
|
|
98
|
+
.action(withCliErrorHandling('autosave', async (options) => {
|
|
99
|
+
const { autosave } = await import('../commands/autosave.js');
|
|
100
|
+
await autosave(options);
|
|
101
|
+
}));
|
|
102
|
+
program
|
|
103
|
+
.command('claude-plugin')
|
|
104
|
+
.description('Generate a local Claude Code plugin package for DevMind skills')
|
|
105
|
+
.option('-o, --output <dir>', 'Plugin output directory', '.claude-plugin')
|
|
106
|
+
.option('--name <name>', 'Plugin name', 'devmind')
|
|
107
|
+
.option('--force', 'Overwrite existing plugin files')
|
|
108
|
+
.option('--json', 'Output as JSON')
|
|
109
|
+
.action(withCliErrorHandling('claude-plugin', async (options) => {
|
|
110
|
+
const { claudePlugin } = await import('../commands/claude-plugin.js');
|
|
111
|
+
await claudePlugin(options);
|
|
112
|
+
}));
|
|
113
|
+
program
|
|
114
|
+
.command('codex-plugin')
|
|
115
|
+
.description('Install DevMind skill for Codex CLI and Codex app')
|
|
116
|
+
.option('--name <name>', 'Skill directory name', 'devmind')
|
|
117
|
+
.option('--project', 'Also install a project-local skill under ./.agents/skills')
|
|
118
|
+
.option('--no-legacy', 'Skip compatibility mirror into CODEX_HOME/.codex skill paths')
|
|
119
|
+
.option('--force', 'Overwrite existing skill files')
|
|
120
|
+
.option('--json', 'Output as JSON')
|
|
121
|
+
.action(withCliErrorHandling('codex-plugin', async (options) => {
|
|
122
|
+
const { codexPlugin } = await import('../commands/codex-plugin.js');
|
|
123
|
+
await codexPlugin(options);
|
|
124
|
+
}));
|
|
125
|
+
program
|
|
126
|
+
.command('openclaw-plugin')
|
|
127
|
+
.description('Install DevMind skill for OpenClaw')
|
|
128
|
+
.option('--name <name>', 'Skill directory name', 'devmind')
|
|
129
|
+
.option('--project', 'Also install a project-local skill under ./.openclaw/skills')
|
|
130
|
+
.option('--force', 'Overwrite existing skill files')
|
|
131
|
+
.option('--json', 'Output as JSON')
|
|
132
|
+
.action(withCliErrorHandling('openclaw-plugin', async (options) => {
|
|
133
|
+
const { openclawPlugin } = await import('../commands/openclaw-plugin.js');
|
|
134
|
+
await openclawPlugin(options);
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=register-analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-analysis.js","sourceRoot":"","sources":["../../src/cli/register-analysis.ts"],"names":[],"mappings":"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"}
|