devmind 1.0.1 → 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.
Files changed (125) hide show
  1. package/README.md +157 -141
  2. package/dist/cli/handlers.d.ts +2 -0
  3. package/dist/cli/handlers.js +140 -0
  4. package/dist/cli/handlers.js.map +1 -0
  5. package/dist/cli/register-all.d.ts +2 -0
  6. package/dist/cli/register-all.js +11 -0
  7. package/dist/cli/register-all.js.map +1 -0
  8. package/dist/cli/register-analysis.d.ts +2 -0
  9. package/dist/cli/register-analysis.js +137 -0
  10. package/dist/cli/register-analysis.js.map +1 -0
  11. package/dist/cli/register-codebase.d.ts +2 -0
  12. package/dist/cli/register-codebase.js +22 -0
  13. package/dist/cli/register-codebase.js.map +1 -0
  14. package/dist/cli/register-database.d.ts +2 -0
  15. package/dist/cli/register-database.js +44 -0
  16. package/dist/cli/register-database.js.map +1 -0
  17. package/dist/cli/register-memory.d.ts +2 -0
  18. package/dist/cli/register-memory.js +58 -0
  19. package/dist/cli/register-memory.js.map +1 -0
  20. package/dist/cli.js +9 -220
  21. package/dist/cli.js.map +1 -1
  22. package/dist/codebase/index.js +2 -2
  23. package/dist/codebase/index.js.map +1 -1
  24. package/dist/codebase/parsers/typescript.d.ts +1 -0
  25. package/dist/codebase/parsers/typescript.js +3 -0
  26. package/dist/codebase/parsers/typescript.js.map +1 -1
  27. package/dist/codebase/scanners/filesystem.d.ts +1 -0
  28. package/dist/codebase/scanners/filesystem.js +131 -4
  29. package/dist/codebase/scanners/filesystem.js.map +1 -1
  30. package/dist/commands/analyze.d.ts +1 -0
  31. package/dist/commands/analyze.js +166 -24
  32. package/dist/commands/analyze.js.map +1 -1
  33. package/dist/commands/audit-design.d.ts +8 -0
  34. package/dist/commands/audit-design.js +158 -0
  35. package/dist/commands/audit-design.js.map +1 -0
  36. package/dist/commands/audit-report.d.ts +18 -0
  37. package/dist/commands/audit-report.js +30 -0
  38. package/dist/commands/audit-report.js.map +1 -0
  39. package/dist/commands/audit-source.d.ts +21 -0
  40. package/dist/commands/audit-source.js +57 -0
  41. package/dist/commands/audit-source.js.map +1 -0
  42. package/dist/commands/audit.d.ts +8 -0
  43. package/dist/commands/audit.js +266 -0
  44. package/dist/commands/audit.js.map +1 -0
  45. package/dist/commands/autosave.d.ts +19 -0
  46. package/dist/commands/autosave.js +85 -0
  47. package/dist/commands/autosave.js.map +1 -0
  48. package/dist/commands/claude-plugin.d.ts +8 -0
  49. package/dist/commands/claude-plugin.js +123 -0
  50. package/dist/commands/claude-plugin.js.map +1 -0
  51. package/dist/commands/codex-plugin.d.ts +9 -0
  52. package/dist/commands/codex-plugin.js +145 -0
  53. package/dist/commands/codex-plugin.js.map +1 -0
  54. package/dist/commands/context.js +66 -5
  55. package/dist/commands/context.js.map +1 -1
  56. package/dist/commands/design-system.d.ts +8 -0
  57. package/dist/commands/design-system.js +95 -0
  58. package/dist/commands/design-system.js.map +1 -0
  59. package/dist/commands/extract.d.ts +33 -0
  60. package/dist/commands/extract.js +231 -0
  61. package/dist/commands/extract.js.map +1 -0
  62. package/dist/commands/openclaw-plugin.d.ts +8 -0
  63. package/dist/commands/openclaw-plugin.js +103 -0
  64. package/dist/commands/openclaw-plugin.js.map +1 -0
  65. package/dist/commands/retrieve.d.ts +12 -0
  66. package/dist/commands/retrieve.js +230 -0
  67. package/dist/commands/retrieve.js.map +1 -0
  68. package/dist/commands/status.d.ts +8 -0
  69. package/dist/commands/status.js +148 -0
  70. package/dist/commands/status.js.map +1 -0
  71. package/dist/core/cache-json.d.ts +7 -0
  72. package/dist/core/cache-json.js +60 -0
  73. package/dist/core/cache-json.js.map +1 -0
  74. package/dist/core/errors.d.ts +2 -0
  75. package/dist/core/errors.js +49 -1
  76. package/dist/core/errors.js.map +1 -1
  77. package/dist/core/index.d.ts +4 -0
  78. package/dist/core/index.js +4 -0
  79. package/dist/core/index.js.map +1 -1
  80. package/dist/core/learning-parser.d.ts +6 -0
  81. package/dist/core/learning-parser.js +23 -0
  82. package/dist/core/learning-parser.js.map +1 -0
  83. package/dist/core/profile.d.ts +18 -0
  84. package/dist/core/profile.js +37 -0
  85. package/dist/core/profile.js.map +1 -0
  86. package/dist/core/source-file-cache.d.ts +13 -0
  87. package/dist/core/source-file-cache.js +85 -0
  88. package/dist/core/source-file-cache.js.map +1 -0
  89. package/dist/database/cli/register-all.d.ts +2 -0
  90. package/dist/database/cli/register-all.js +9 -0
  91. package/dist/database/cli/register-all.js.map +1 -0
  92. package/dist/database/cli/register-database.d.ts +2 -0
  93. package/dist/database/cli/register-database.js +44 -0
  94. package/dist/database/cli/register-database.js.map +1 -0
  95. package/dist/database/cli/register-interactive.d.ts +2 -0
  96. package/dist/database/cli/register-interactive.js +29 -0
  97. package/dist/database/cli/register-interactive.js.map +1 -0
  98. package/dist/database/cli/register-memory.d.ts +2 -0
  99. package/dist/database/cli/register-memory.js +47 -0
  100. package/dist/database/cli/register-memory.js.map +1 -0
  101. package/dist/database/cli.js +5 -112
  102. package/dist/database/cli.js.map +1 -1
  103. package/dist/database/commands/checkpoint.js +8 -10
  104. package/dist/database/commands/checkpoint.js.map +1 -1
  105. package/dist/database/commands/generate.js +17 -8
  106. package/dist/database/commands/generate.js.map +1 -1
  107. package/dist/database/commands/handoff.js +9 -8
  108. package/dist/database/commands/handoff.js.map +1 -1
  109. package/dist/database/commands/learn.d.ts +4 -0
  110. package/dist/database/commands/learn.js +245 -43
  111. package/dist/database/commands/learn.js.map +1 -1
  112. package/dist/database/commands/memory.js +1 -1
  113. package/dist/database/commands/validate.js +6 -4
  114. package/dist/database/commands/validate.js.map +1 -1
  115. package/dist/database/commands/watch.js +1 -1
  116. package/dist/database/commands/watch.js.map +1 -1
  117. package/dist/database/generators/templates.js +26 -26
  118. package/dist/database/generators/templates.js.map +1 -1
  119. package/dist/database/utils/json-output.d.ts +4 -0
  120. package/dist/database/utils/json-output.js +7 -0
  121. package/dist/database/utils/json-output.js.map +1 -1
  122. package/dist/generators/unified.d.ts +13 -0
  123. package/dist/generators/unified.js +420 -59
  124. package/dist/generators/unified.js.map +1 -1
  125. package/package.json +2 -2
@@ -0,0 +1,231 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs';
3
+ import * as fsPromises from 'fs/promises';
4
+ import { logger, ensureDir, writeFileSafe, readFileSafe, createProfiler, readCacheJson, getSourceFilesWithCache, } from '../core/index.js';
5
+ async function readFilesInBatches(rootPath, relativePaths, batchSize = 48) {
6
+ const results = new Map();
7
+ for (let i = 0; i < relativePaths.length; i += batchSize) {
8
+ const batch = relativePaths.slice(i, i + batchSize);
9
+ const loaded = await Promise.all(batch.map(async (relPath) => {
10
+ try {
11
+ const content = await fsPromises.readFile(path.join(rootPath, relPath), 'utf-8');
12
+ return { relPath, content };
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }));
18
+ for (const item of loaded) {
19
+ if (!item)
20
+ continue;
21
+ results.set(item.relPath, item.content);
22
+ }
23
+ }
24
+ return results;
25
+ }
26
+ function normalizeSentence(input) {
27
+ return input.trim().replace(/\s+/g, ' ').replace(/[.;:,]+$/, '');
28
+ }
29
+ function inferCategory(content) {
30
+ const lc = content.toLowerCase();
31
+ if (lc.includes('index') || lc.includes('query') || lc.includes('sql'))
32
+ return 'database';
33
+ if (lc.includes('cache') || lc.includes('latency') || lc.includes('batch'))
34
+ return 'performance';
35
+ if (lc.includes('auth') || lc.includes('permission') || lc.includes('tenant'))
36
+ return 'security';
37
+ if (lc.includes('module') || lc.includes('service') || lc.includes('layer'))
38
+ return 'architecture';
39
+ return 'codebase';
40
+ }
41
+ function collectFromAnalysisFiles(content) {
42
+ const lines = content.split('\n').map((line) => line.trim());
43
+ const output = [];
44
+ for (const line of lines) {
45
+ if (!line || line.startsWith('#') || line.startsWith('>'))
46
+ continue;
47
+ if (line.startsWith('- [ ]'))
48
+ continue;
49
+ if (!line.startsWith('- '))
50
+ continue;
51
+ const clean = normalizeSentence(line.replace(/^-+\s*/, ''));
52
+ if (clean.length < 20)
53
+ continue;
54
+ output.push({
55
+ category: inferCategory(clean),
56
+ content: clean,
57
+ });
58
+ }
59
+ return output;
60
+ }
61
+ function collectFromSourceComments(content) {
62
+ const output = [];
63
+ const patterns = [
64
+ /(?:TODO|NOTE|IMPORTANT|WARNING)\s*[:\-]\s*(.+)/gi,
65
+ /@decision\s+(.+)/gi,
66
+ /@pattern\s+(.+)/gi,
67
+ ];
68
+ for (const pattern of patterns) {
69
+ const matches = content.matchAll(pattern);
70
+ for (const match of matches) {
71
+ const text = normalizeSentence(match[1] || '');
72
+ if (text.length < 20)
73
+ continue;
74
+ output.push({
75
+ category: inferCategory(text),
76
+ content: text,
77
+ });
78
+ }
79
+ }
80
+ return output;
81
+ }
82
+ function dedupeLearnings(items) {
83
+ const seen = new Set();
84
+ const output = [];
85
+ for (const item of items) {
86
+ const key = item.content.toLowerCase();
87
+ if (seen.has(key))
88
+ continue;
89
+ seen.add(key);
90
+ output.push(item);
91
+ }
92
+ return output;
93
+ }
94
+ async function appendToLearnFile(outputDir, learnings) {
95
+ const learnPath = path.join(outputDir, 'memory', 'LEARN.md');
96
+ await ensureDir(path.dirname(learnPath));
97
+ let existing = '';
98
+ try {
99
+ existing = await readFileSafe(learnPath);
100
+ }
101
+ catch {
102
+ existing =
103
+ '# Project Learnings\n\n> Accumulated technical learnings, architectural decisions, and discovered patterns.\n\n';
104
+ }
105
+ let block = '';
106
+ const timestamp = new Date().toISOString();
107
+ for (const item of learnings) {
108
+ block += `## ${timestamp} - ${item.category}\n\n${item.content}\n\n---\n`;
109
+ }
110
+ await writeFileSafe(learnPath, `${existing}${block}`);
111
+ return learnPath;
112
+ }
113
+ export async function runExtraction(options) {
114
+ const profiler = createProfiler(!!options.profile);
115
+ const outputDir = options.output || '.devmind';
116
+ const rootPath = path.resolve(options.path || '.');
117
+ const candidates = [];
118
+ const analysisDir = path.join(outputDir, 'analysis');
119
+ const analysisFiles = ['CODE_DB_MAPPING.md', 'UNUSED_TABLES.md', 'AUDIT_REPORT.md'];
120
+ for (const file of analysisFiles) {
121
+ const filePath = path.join(analysisDir, file);
122
+ if (!fs.existsSync(filePath))
123
+ continue;
124
+ try {
125
+ const content = await readFileSafe(filePath);
126
+ candidates.push(...collectFromAnalysisFiles(content));
127
+ }
128
+ catch {
129
+ // ignore unreadable files
130
+ }
131
+ }
132
+ const sourceList = await profiler.section('extract.listSources', async () => getSourceFilesWithCache({
133
+ outputDir,
134
+ rootPath,
135
+ includeGlob: '**/*.{ts,tsx,js,jsx,py,go,java,rb,php,rs}',
136
+ ignore: ['node_modules/**', '.git/**', '.devmind/**', 'dist/**', 'build/**'],
137
+ }));
138
+ const sourceFiles = sourceList.files;
139
+ const analyzeCache = await profiler.section('extract.loadAnalyzeCache', async () => {
140
+ const cachePath = path.join(outputDir, 'cache', 'analyze-cache.json');
141
+ const parsed = await readCacheJson(cachePath);
142
+ return parsed?.files || {};
143
+ });
144
+ const sourceContents = new Map();
145
+ const missingFiles = [];
146
+ let cacheReused = 0;
147
+ await profiler.section('extract.reuseCachedSources', async () => {
148
+ for (const relPath of sourceFiles) {
149
+ const cached = analyzeCache[relPath];
150
+ if (cached?.content === undefined) {
151
+ missingFiles.push(relPath);
152
+ continue;
153
+ }
154
+ const fullPath = path.join(rootPath, relPath);
155
+ try {
156
+ const stat = fs.statSync(fullPath);
157
+ if (stat.mtimeMs === cached.mtimeMs && stat.size === cached.size) {
158
+ sourceContents.set(relPath, cached.content);
159
+ cacheReused += 1;
160
+ continue;
161
+ }
162
+ }
163
+ catch {
164
+ // fall through to missing path
165
+ }
166
+ missingFiles.push(relPath);
167
+ }
168
+ });
169
+ const diskSourceContents = await profiler.section('extract.readSources', async () => readFilesInBatches(rootPath, missingFiles));
170
+ for (const [relPath, content] of diskSourceContents.entries()) {
171
+ sourceContents.set(relPath, content);
172
+ }
173
+ for (const content of sourceContents.values()) {
174
+ candidates.push(...collectFromSourceComments(content));
175
+ }
176
+ const extracted = dedupeLearnings(candidates)
177
+ .sort((a, b) => a.category.localeCompare(b.category) || a.content.localeCompare(b.content))
178
+ .slice(0, 25);
179
+ const reportPath = path.join(outputDir, 'analysis', 'EXTRACTED_LEARNINGS.md');
180
+ await ensureDir(path.dirname(reportPath));
181
+ let report = '# Extracted Learnings\n\n';
182
+ report += `Generated: ${new Date().toISOString()}\n\n`;
183
+ if (extracted.length === 0) {
184
+ report += 'No learning candidates were extracted.\n';
185
+ }
186
+ else {
187
+ for (const item of extracted) {
188
+ report += `## ${item.category}\n\n${item.content}\n\n`;
189
+ }
190
+ }
191
+ await writeFileSafe(reportPath, report);
192
+ let learnPath = null;
193
+ if (options.apply && extracted.length > 0) {
194
+ learnPath = await profiler.section('extract.appendLearn', async () => appendToLearnFile(outputDir, extracted));
195
+ }
196
+ const result = {
197
+ extracted: extracted.length,
198
+ report: reportPath,
199
+ applied: !!options.apply,
200
+ learnPath,
201
+ sourceCache: {
202
+ reused: cacheReused,
203
+ diskReads: missingFiles.length,
204
+ },
205
+ sourceListCache: sourceList.cacheHit,
206
+ };
207
+ if (!options.json && !options.silent) {
208
+ logger.info(`Source cache reuse: ${cacheReused}, disk reads: ${missingFiles.length}`);
209
+ }
210
+ const profile = profiler.report();
211
+ return profile ? { ...result, profile } : result;
212
+ }
213
+ export async function extract(options) {
214
+ const result = await runExtraction(options);
215
+ if (options.json) {
216
+ console.log(JSON.stringify(result, null, 2));
217
+ return;
218
+ }
219
+ if (!options.silent) {
220
+ logger.info('Extraction complete.');
221
+ logger.info(`Extracted learnings: ${result.extracted}`);
222
+ logger.info(`Report: ${result.report}`);
223
+ if (result.learnPath) {
224
+ logger.info(`Appended to: ${result.learnPath}`);
225
+ }
226
+ else if (result.extracted > 0) {
227
+ logger.info('Use --apply to append extracted learnings to memory/LEARN.md');
228
+ }
229
+ }
230
+ }
231
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/commands/extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface OpenClawPluginOptions {
2
+ name?: string;
3
+ force?: boolean;
4
+ json?: boolean;
5
+ project?: boolean;
6
+ }
7
+ export declare function openclawPlugin(options: OpenClawPluginOptions): Promise<void>;
8
+ export {};
@@ -0,0 +1,103 @@
1
+ import * as os from 'os';
2
+ import * as path from 'path';
3
+ import * as fs from 'fs/promises';
4
+ import { logger, ensureDir, readFileSafe, writeFileSafe } from '../core/index.js';
5
+ async function fileExists(filePath) {
6
+ try {
7
+ await fs.access(filePath);
8
+ return true;
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ }
14
+ async function resolveSkillSource() {
15
+ const candidates = [
16
+ path.resolve(process.cwd(), 'integrations', 'openclaw', 'SKILL.md'),
17
+ path.resolve(process.cwd(), 'SKILL.md'),
18
+ ];
19
+ for (const candidate of candidates) {
20
+ if (await fileExists(candidate)) {
21
+ return candidate;
22
+ }
23
+ }
24
+ return null;
25
+ }
26
+ function resolveTargets(skillName, includeProject) {
27
+ const homeDir = os.homedir();
28
+ const cwd = process.cwd();
29
+ const userSkillsRoot = path.join(homeDir, '.openclaw', 'skills');
30
+ const targets = [
31
+ {
32
+ kind: 'user',
33
+ skillDir: path.join(userSkillsRoot, skillName),
34
+ skillPath: path.join(userSkillsRoot, skillName, 'SKILL.md'),
35
+ },
36
+ ];
37
+ if (includeProject) {
38
+ const projectRoot = path.join(cwd, '.openclaw', 'skills');
39
+ targets.push({
40
+ kind: 'project',
41
+ skillDir: path.join(projectRoot, skillName),
42
+ skillPath: path.join(projectRoot, skillName, 'SKILL.md'),
43
+ });
44
+ }
45
+ return targets;
46
+ }
47
+ export async function openclawPlugin(options) {
48
+ const skillName = options.name || 'devmind';
49
+ const force = !!options.force;
50
+ const jsonMode = !!options.json;
51
+ const includeProject = !!options.project;
52
+ const skillSource = await resolveSkillSource();
53
+ if (!skillSource) {
54
+ const message = 'No SKILL.md found to install for OpenClaw plugin.';
55
+ if (jsonMode) {
56
+ console.log(JSON.stringify({ success: false, error: message }, null, 2));
57
+ return;
58
+ }
59
+ logger.error(message);
60
+ return;
61
+ }
62
+ const skillContent = await readFileSafe(skillSource);
63
+ const targets = resolveTargets(skillName, includeProject);
64
+ const conflicts = [];
65
+ for (const target of targets) {
66
+ if ((await fileExists(target.skillPath)) && !force) {
67
+ conflicts.push(target.skillPath);
68
+ }
69
+ }
70
+ if (conflicts.length > 0) {
71
+ const message = `OpenClaw skill already exists. Use --force to overwrite. Conflicts: ${conflicts.join(', ')}`;
72
+ if (jsonMode) {
73
+ console.log(JSON.stringify({ success: false, error: message, conflicts }, null, 2));
74
+ return;
75
+ }
76
+ logger.warn(message);
77
+ return;
78
+ }
79
+ for (const target of targets) {
80
+ await ensureDir(target.skillDir);
81
+ await writeFileSafe(target.skillPath, skillContent);
82
+ }
83
+ const installed = targets.map((target) => target.skillPath);
84
+ if (jsonMode) {
85
+ console.log(JSON.stringify({
86
+ success: true,
87
+ skill: skillName,
88
+ source: skillSource,
89
+ installed,
90
+ notes: ['Restart OpenClaw session to pick up installed skills.'],
91
+ }, null, 2));
92
+ return;
93
+ }
94
+ logger.success('OpenClaw skill installed for DevMind.');
95
+ logger.info(` Skill: ${skillName}`);
96
+ logger.info(` Source: ${skillSource}`);
97
+ logger.info(' Installed paths:');
98
+ for (const installedPath of installed) {
99
+ logger.info(` - ${installedPath}`);
100
+ }
101
+ logger.info('Restart OpenClaw session to pick up installed skills.');
102
+ }
103
+ //# sourceMappingURL=openclaw-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-plugin.js","sourceRoot":"","sources":["../../src/commands/openclaw-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ interface RetrieveOptions {
2
+ output?: string;
3
+ query: string;
4
+ type?: string;
5
+ tags?: string;
6
+ limit?: string | number;
7
+ maxWords?: string | number;
8
+ json?: boolean;
9
+ profile?: boolean;
10
+ }
11
+ export declare function retrieve(options: RetrieveOptions): Promise<void>;
12
+ export {};
@@ -0,0 +1,230 @@
1
+ import * as path from 'path';
2
+ import { createHash } from 'crypto';
3
+ import { logger, readFileSafe, createProfiler } from '../core/index.js';
4
+ function isJsonFlagEnabled(options) {
5
+ if (options.json === true)
6
+ return true;
7
+ try {
8
+ return options.opts?.().json === true;
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ }
14
+ function jsonFail(message) {
15
+ console.log(JSON.stringify({
16
+ success: false,
17
+ error: message,
18
+ timestamp: new Date().toISOString(),
19
+ }, null, 2));
20
+ }
21
+ function tokenize(input) {
22
+ return input
23
+ .toLowerCase()
24
+ .replace(/[^a-z0-9_\s-]/g, ' ')
25
+ .split(/\s+/)
26
+ .map((token) => token.trim())
27
+ .filter((token) => token.length >= 2);
28
+ }
29
+ function hashContent(content) {
30
+ return createHash('sha256').update(content, 'utf8').digest('hex').slice(0, 16);
31
+ }
32
+ function metadataScore(section, tokens) {
33
+ const haystack = `${section.id} ${section.title} ${section.type} ${section.tags.join(' ')}`.toLowerCase();
34
+ let score = section.priority === 'high' ? 2 : section.priority === 'medium' ? 1 : 0;
35
+ for (const token of tokens) {
36
+ if (haystack.includes(token))
37
+ score += 3;
38
+ }
39
+ return score;
40
+ }
41
+ function contentScore(content, tokens) {
42
+ const lc = content.toLowerCase();
43
+ let score = 0;
44
+ for (const token of tokens) {
45
+ if (lc.includes(token))
46
+ score += 2;
47
+ }
48
+ return score;
49
+ }
50
+ function parseIndexSections(indexContent) {
51
+ const parsed = JSON.parse(indexContent);
52
+ return parsed.sections || [];
53
+ }
54
+ function sliceByLines(content, startLine, endLine) {
55
+ const lines = content.split('\n');
56
+ return lines.slice(startLine - 1, endLine).join('\n').trim();
57
+ }
58
+ function parseTags(tagsRaw) {
59
+ if (!tagsRaw)
60
+ return [];
61
+ return tagsRaw
62
+ .split(',')
63
+ .map((tag) => tag.trim().toLowerCase())
64
+ .filter(Boolean);
65
+ }
66
+ function clampInt(value, fallback) {
67
+ if (value === undefined)
68
+ return fallback;
69
+ const parsed = Number(value);
70
+ if (!Number.isFinite(parsed))
71
+ return fallback;
72
+ return Math.max(1, Math.floor(parsed));
73
+ }
74
+ export async function retrieve(options) {
75
+ const jsonMode = isJsonFlagEnabled(options);
76
+ const profiler = createProfiler(!!options.profile);
77
+ const outputDir = options.output || '.devmind';
78
+ const query = options.query || '';
79
+ const tokens = tokenize(query);
80
+ const typeFilter = options.type?.toLowerCase();
81
+ const tagFilter = parseTags(options.tags);
82
+ const limit = clampInt(options.limit, 6);
83
+ const maxWords = clampInt(options.maxWords, 1400);
84
+ const indexPath = path.join(outputDir, 'index.json');
85
+ const agentsPath = path.join(outputDir, 'AGENTS.md');
86
+ let indexSections = [];
87
+ let agentsContent = '';
88
+ try {
89
+ indexSections = parseIndexSections(await profiler.section('retrieve.loadIndex', async () => readFileSafe(indexPath)));
90
+ agentsContent = await profiler.section('retrieve.loadAgents', async () => readFileSafe(agentsPath));
91
+ }
92
+ catch (error) {
93
+ const message = `Failed to load retrieval files in ${outputDir}. Run "devmind scan" or "devmind generate --all".`;
94
+ if (jsonMode) {
95
+ jsonFail(message);
96
+ return;
97
+ }
98
+ logger.error(message);
99
+ return;
100
+ }
101
+ if (indexSections.length === 0) {
102
+ const message = 'No section metadata found in index.json. Regenerate context first.';
103
+ if (jsonMode) {
104
+ jsonFail(message);
105
+ return;
106
+ }
107
+ logger.error(message);
108
+ return;
109
+ }
110
+ let filtered = indexSections.filter((section) => {
111
+ if (typeFilter && section.type !== typeFilter)
112
+ return false;
113
+ if (tagFilter.length > 0 && !tagFilter.every((tag) => section.tags.map((t) => t.toLowerCase()).includes(tag))) {
114
+ return false;
115
+ }
116
+ return true;
117
+ });
118
+ if (filtered.length === 0) {
119
+ if (jsonMode) {
120
+ console.log(JSON.stringify({
121
+ success: true,
122
+ query,
123
+ outputDir,
124
+ selected: [],
125
+ message: 'No sections matched the requested filters.',
126
+ timestamp: new Date().toISOString(),
127
+ }, null, 2));
128
+ return;
129
+ }
130
+ logger.warn('No sections matched the requested filters.');
131
+ return;
132
+ }
133
+ // Stage 1: metadata filter + ranking
134
+ filtered = filtered
135
+ .map((section) => ({ section, stage1Score: metadataScore(section, tokens) }))
136
+ .sort((a, b) => b.stage1Score - a.stage1Score ||
137
+ a.section.id.localeCompare(b.section.id) ||
138
+ a.section.startLine - b.section.startLine)
139
+ .slice(0, Math.min(24, filtered.length))
140
+ .map((item) => item.section);
141
+ // Stage 2: content ranking
142
+ const ranked = filtered.map((section) => {
143
+ const content = sliceByLines(agentsContent, section.startLine, section.endLine);
144
+ const hash = hashContent(content);
145
+ if (hash !== section.contentHash) {
146
+ if (!jsonMode) {
147
+ logger.warn(`Section hash mismatch for ${section.id}; consider regenerating context.`);
148
+ }
149
+ }
150
+ const score = metadataScore(section, tokens) * 2 + contentScore(content, tokens);
151
+ return {
152
+ section,
153
+ stage1Score: metadataScore(section, tokens),
154
+ content,
155
+ score,
156
+ };
157
+ });
158
+ ranked.sort((a, b) => b.score - a.score ||
159
+ b.stage1Score - a.stage1Score ||
160
+ a.section.id.localeCompare(b.section.id) ||
161
+ a.section.startLine - b.section.startLine);
162
+ const selected = ranked.slice(0, limit);
163
+ const picked = [];
164
+ let wordBudget = 0;
165
+ for (const item of selected) {
166
+ const words = item.content.split(/\s+/).filter(Boolean).length;
167
+ if (wordBudget + words > maxWords && picked.length > 0)
168
+ continue;
169
+ picked.push(item);
170
+ wordBudget += words;
171
+ }
172
+ if (jsonMode) {
173
+ const profile = profiler.report();
174
+ console.log(JSON.stringify(profile
175
+ ? {
176
+ query,
177
+ outputDir,
178
+ selected: picked.map((item) => ({
179
+ id: item.section.id,
180
+ title: item.section.title,
181
+ type: item.section.type,
182
+ tags: item.section.tags,
183
+ source: item.section.source,
184
+ startLine: item.section.startLine,
185
+ endLine: item.section.endLine,
186
+ score: item.score,
187
+ content: item.content,
188
+ })),
189
+ profile,
190
+ }
191
+ : {
192
+ query,
193
+ outputDir,
194
+ selected: picked.map((item) => ({
195
+ id: item.section.id,
196
+ title: item.section.title,
197
+ type: item.section.type,
198
+ tags: item.section.tags,
199
+ source: item.section.source,
200
+ startLine: item.section.startLine,
201
+ endLine: item.section.endLine,
202
+ score: item.score,
203
+ content: item.content,
204
+ })),
205
+ }, null, 2));
206
+ return;
207
+ }
208
+ let output = '# Retrieved Context\n\n';
209
+ output += `Query: ${query || '(none)'}\n`;
210
+ output += `Selected sections: ${picked.length}\n\n`;
211
+ for (const item of picked) {
212
+ output += `## ${item.section.title}\n\n`;
213
+ output += `- ID: \`${item.section.id}\`\n`;
214
+ output += `- Type: \`${item.section.type}\`\n`;
215
+ output += `- Tags: ${item.section.tags.map((tag) => `\`${tag}\``).join(', ') || '(none)'}\n`;
216
+ output += `- Source: \`${item.section.source}\`\n`;
217
+ output += `- Lines: \`${item.section.startLine}-${item.section.endLine}\`\n\n`;
218
+ output += `${item.content}\n\n`;
219
+ }
220
+ console.log(output.trim());
221
+ const profile = profiler.report();
222
+ if (profile) {
223
+ logger.info('Performance Profile');
224
+ logger.info(`Total: ${profile.totalMs.toFixed(1)}ms`);
225
+ for (const step of profile.steps) {
226
+ logger.info(`- ${step.name}: ${step.ms.toFixed(1)}ms`);
227
+ }
228
+ }
229
+ }
230
+ //# sourceMappingURL=retrieve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieve.js","sourceRoot":"","sources":["../../src/commands/retrieve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface StatusOptions {
2
+ output?: string;
3
+ path?: string;
4
+ json?: boolean;
5
+ profile?: boolean;
6
+ }
7
+ export declare function status(options: StatusOptions): Promise<void>;
8
+ export {};