@lich0821/devmind 0.1.0 → 0.2.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/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +69 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +2 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +228 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/templates-commands.d.ts +1 -1
- package/dist/templates-commands.d.ts.map +1 -1
- package/dist/templates-commands.js +21 -8
- package/dist/templates-commands.js.map +1 -1
- package/dist/templates-commands2.d.ts +1 -0
- package/dist/templates-commands2.d.ts.map +1 -1
- package/dist/templates-commands2.js +137 -1
- package/dist/templates-commands2.js.map +1 -1
- package/dist/templates.d.ts +2 -2
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +13 -24
- package/dist/templates.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inject DevMind hooks into ~/.claude/settings.json (user-level).
|
|
3
|
+
* Claude Code reads hooks ONLY from user-level settings, not project-level.
|
|
4
|
+
* Preserves all existing content; only adds hooks if not already registered.
|
|
5
|
+
* Hook commands use absolute paths so they work from any project directory.
|
|
6
|
+
*/
|
|
7
|
+
export declare function injectUserHooks(projectDir: string): {
|
|
8
|
+
status: 'injected' | 'already' | 'error';
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
1
11
|
export declare function runInit(targetDir: string): void;
|
|
2
12
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAsKA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAsDjH;AA8DD,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAiE/C"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, writeFileSync, chmodSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync, readFileSync, chmodSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
3
4
|
import chalk from 'chalk';
|
|
4
5
|
import { PRE_TOOL_USE_SH, POST_TOOL_USE_SH, CLAUDE_MD, SETTINGS_LOCAL_JSON } from '../templates.js';
|
|
5
6
|
import { CMD_EXPLORE, CMD_EDIT, CMD_PLAN, CMD_BUILD } from '../templates-commands.js';
|
|
6
|
-
import { CMD_REMEMBER, CMD_RECALL, CMD_BURY, CMD_AUDIT, CMD_SYNC_MEMORY, CMD_PUBLISH, CMD_RELEASE } from '../templates-commands2.js';
|
|
7
|
+
import { CMD_REMEMBER, CMD_RECALL, CMD_BURY, CMD_AUDIT, CMD_SYNC_MEMORY, CMD_PUBLISH, CMD_RELEASE, CMD_MIGRATE } from '../templates-commands2.js';
|
|
7
8
|
import { CURRENT_MODE_TXT, SESSION_YAML, CONFIG_YAML, FLOW_YAML, CURRENT_PLAN_MD, PROGRESS_MD, MODE_EXPLORE_MD, MODE_EDIT_MD, MODE_PLAN_MD, MODE_BUILD_MD, TMPL_DECISION, TMPL_PATTERN, TMPL_GRAVEYARD, } from '../templates-devmind.js';
|
|
8
9
|
// ─── Rebuild-index script (kept here to avoid another template file) ──────────
|
|
9
10
|
const REBUILD_INDEX_SH = `#!/bin/bash
|
|
@@ -145,6 +146,55 @@ const INDEX_MD = `<!-- 此文件由 .devmind/scripts/rebuild-index.sh 自动生
|
|
|
145
146
|
|
|
146
147
|
使用提示:需要详细内容时,使用 \`/recall <关键词>\` 检索
|
|
147
148
|
`;
|
|
149
|
+
/**
|
|
150
|
+
* Inject DevMind hooks into ~/.claude/settings.json (user-level).
|
|
151
|
+
* Claude Code reads hooks ONLY from user-level settings, not project-level.
|
|
152
|
+
* Preserves all existing content; only adds hooks if not already registered.
|
|
153
|
+
* Hook commands use absolute paths so they work from any project directory.
|
|
154
|
+
*/
|
|
155
|
+
export function injectUserHooks(projectDir) {
|
|
156
|
+
const userSettingsPath = resolve(homedir(), '.claude', 'settings.json');
|
|
157
|
+
const absProjectDir = resolve(projectDir);
|
|
158
|
+
const preHookCommand = `${absProjectDir}/.claude/hooks/pre-tool-use.sh`;
|
|
159
|
+
const postHookCommand = `${absProjectDir}/.claude/hooks/post-tool-use.sh`;
|
|
160
|
+
// Read or initialize user settings
|
|
161
|
+
let settings = {};
|
|
162
|
+
if (existsSync(userSettingsPath)) {
|
|
163
|
+
try {
|
|
164
|
+
settings = JSON.parse(readFileSync(userSettingsPath, 'utf-8'));
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return { status: 'error', message: '~/.claude/settings.json is malformed JSON' };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const hooks = settings.hooks ? { ...settings.hooks } : {};
|
|
171
|
+
// Check if already registered (by command path)
|
|
172
|
+
const preAlready = (hooks['PreToolUse'] ?? []).some(m => m.hooks?.some(h => h.command === preHookCommand));
|
|
173
|
+
const postAlready = (hooks['PostToolUse'] ?? []).some(m => m.hooks?.some(h => h.command === postHookCommand));
|
|
174
|
+
if (preAlready && postAlready) {
|
|
175
|
+
return { status: 'already', message: 'hooks already registered' };
|
|
176
|
+
}
|
|
177
|
+
if (!preAlready) {
|
|
178
|
+
hooks['PreToolUse'] = [
|
|
179
|
+
...(hooks['PreToolUse'] ?? []),
|
|
180
|
+
{ matcher: '', hooks: [{ type: 'command', command: preHookCommand }] },
|
|
181
|
+
];
|
|
182
|
+
}
|
|
183
|
+
if (!postAlready) {
|
|
184
|
+
hooks['PostToolUse'] = [
|
|
185
|
+
...(hooks['PostToolUse'] ?? []),
|
|
186
|
+
{ matcher: '', hooks: [{ type: 'command', command: postHookCommand }] },
|
|
187
|
+
];
|
|
188
|
+
}
|
|
189
|
+
settings.hooks = hooks;
|
|
190
|
+
// Ensure ~/.claude/ dir exists
|
|
191
|
+
const claudeDir = resolve(homedir(), '.claude');
|
|
192
|
+
if (!existsSync(claudeDir)) {
|
|
193
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
194
|
+
}
|
|
195
|
+
writeFileSync(userSettingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
196
|
+
return { status: 'injected', message: userSettingsPath };
|
|
197
|
+
}
|
|
148
198
|
function buildFileMap() {
|
|
149
199
|
return [
|
|
150
200
|
// .devmind/
|
|
@@ -165,6 +215,7 @@ function buildFileMap() {
|
|
|
165
215
|
{ path: '.devmind/memory/decisions/.gitkeep', content: '' },
|
|
166
216
|
{ path: '.devmind/memory/patterns/.gitkeep', content: '' },
|
|
167
217
|
{ path: '.devmind/memory/graveyard/.gitkeep', content: '' },
|
|
218
|
+
{ path: '.devmind/memory/drafts/.gitkeep', content: '' },
|
|
168
219
|
{ path: '.devmind/memory/TEMPLATES/decision-template.md', content: TMPL_DECISION },
|
|
169
220
|
{ path: '.devmind/memory/TEMPLATES/pattern-template.md', content: TMPL_PATTERN },
|
|
170
221
|
{ path: '.devmind/memory/TEMPLATES/graveyard-template.md', content: TMPL_GRAVEYARD },
|
|
@@ -188,6 +239,7 @@ function buildFileMap() {
|
|
|
188
239
|
{ path: '.claude/commands/dm/sync-memory.md', content: CMD_SYNC_MEMORY },
|
|
189
240
|
{ path: '.claude/commands/dm/publish.md', content: CMD_PUBLISH },
|
|
190
241
|
{ path: '.claude/commands/dm/release.md', content: CMD_RELEASE },
|
|
242
|
+
{ path: '.claude/commands/dm/migrate.md', content: CMD_MIGRATE },
|
|
191
243
|
// docs
|
|
192
244
|
{ path: 'docs/designs/draft/.gitkeep', content: '' },
|
|
193
245
|
];
|
|
@@ -215,6 +267,8 @@ export function runInit(targetDir) {
|
|
|
215
267
|
}
|
|
216
268
|
created.push(file.path);
|
|
217
269
|
}
|
|
270
|
+
// Inject hooks into user-level ~/.claude/settings.json
|
|
271
|
+
const hookResult = injectUserHooks(targetDir);
|
|
218
272
|
// Output summary
|
|
219
273
|
console.log('');
|
|
220
274
|
console.log(chalk.green('✓') + ' DevMind initialized successfully!\n');
|
|
@@ -230,6 +284,18 @@ export function runInit(targetDir) {
|
|
|
230
284
|
console.log('');
|
|
231
285
|
console.log(chalk.yellow(`Skipped ${skipped.length} existing files.`));
|
|
232
286
|
}
|
|
287
|
+
// Report hook injection status
|
|
288
|
+
console.log('');
|
|
289
|
+
if (hookResult.status === 'injected') {
|
|
290
|
+
console.log(chalk.green('✓') + ' Hooks registered in ' + chalk.cyan('~/.claude/settings.json'));
|
|
291
|
+
}
|
|
292
|
+
else if (hookResult.status === 'already') {
|
|
293
|
+
console.log(chalk.yellow('~') + ' Hooks already registered in ~/.claude/settings.json');
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
console.log(chalk.red('✗') + ' Hook injection failed: ' + hookResult.message);
|
|
297
|
+
console.log(' Please manually add hooks to ~/.claude/settings.json');
|
|
298
|
+
}
|
|
233
299
|
console.log('');
|
|
234
300
|
console.log(chalk.bold('Next steps:'));
|
|
235
301
|
console.log(' 1. Edit ' + chalk.cyan('.devmind/config.yaml') + ' — set your project name');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAyLA,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAkElD"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { runInit, injectUserHooks } from './init.js';
|
|
6
|
+
function detectTechStack(dir) {
|
|
7
|
+
const stack = [];
|
|
8
|
+
if (existsSync(join(dir, 'package.json'))) {
|
|
9
|
+
try {
|
|
10
|
+
const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8'));
|
|
11
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
12
|
+
if (deps['react'] || deps['react-dom'])
|
|
13
|
+
stack.push('React');
|
|
14
|
+
if (deps['vue'])
|
|
15
|
+
stack.push('Vue');
|
|
16
|
+
if (deps['next'])
|
|
17
|
+
stack.push('Next.js');
|
|
18
|
+
if (deps['express'])
|
|
19
|
+
stack.push('Express');
|
|
20
|
+
if (deps['fastify'])
|
|
21
|
+
stack.push('Fastify');
|
|
22
|
+
if (deps['typescript'] || deps['ts-node'])
|
|
23
|
+
stack.push('TypeScript');
|
|
24
|
+
if (!stack.includes('TypeScript') && existsSync(join(dir, 'tsconfig.json')))
|
|
25
|
+
stack.push('TypeScript');
|
|
26
|
+
if (!stack.length)
|
|
27
|
+
stack.push('Node.js');
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
stack.push('Node.js');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (existsSync(join(dir, 'go.mod')))
|
|
34
|
+
stack.push('Go');
|
|
35
|
+
if (existsSync(join(dir, 'pyproject.toml')) || existsSync(join(dir, 'requirements.txt')))
|
|
36
|
+
stack.push('Python');
|
|
37
|
+
if (existsSync(join(dir, 'Cargo.toml')))
|
|
38
|
+
stack.push('Rust');
|
|
39
|
+
if (existsSync(join(dir, 'pom.xml')) || existsSync(join(dir, 'build.gradle')))
|
|
40
|
+
stack.push('Java');
|
|
41
|
+
return stack.length ? stack : ['(unknown)'];
|
|
42
|
+
}
|
|
43
|
+
function detectOpenSpec(dir) {
|
|
44
|
+
const openspecDir = join(dir, 'openspec');
|
|
45
|
+
if (!existsSync(openspecDir)) {
|
|
46
|
+
return { hasOpenSpec: false, archiveCount: 0, activeChanges: [] };
|
|
47
|
+
}
|
|
48
|
+
const changesDir = join(openspecDir, 'changes');
|
|
49
|
+
const archiveDir = join(changesDir, 'archive');
|
|
50
|
+
let archiveCount = 0;
|
|
51
|
+
if (existsSync(archiveDir)) {
|
|
52
|
+
archiveCount = readdirSync(archiveDir, { withFileTypes: true })
|
|
53
|
+
.filter(d => d.isDirectory()).length;
|
|
54
|
+
}
|
|
55
|
+
const activeChanges = [];
|
|
56
|
+
if (existsSync(changesDir)) {
|
|
57
|
+
readdirSync(changesDir, { withFileTypes: true })
|
|
58
|
+
.filter(d => d.isDirectory() && d.name !== 'archive')
|
|
59
|
+
.forEach(d => activeChanges.push(d.name));
|
|
60
|
+
}
|
|
61
|
+
return { hasOpenSpec: true, archiveCount, activeChanges };
|
|
62
|
+
}
|
|
63
|
+
function getGitLog(dir) {
|
|
64
|
+
try {
|
|
65
|
+
const output = execSync('git log --oneline -20', { cwd: dir, encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
66
|
+
return { lines: output.trim().split('\n').filter(Boolean), isGitRepo: true };
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return { lines: [], isGitRepo: false };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function getProjectName(dir) {
|
|
73
|
+
// Try package.json name
|
|
74
|
+
const pkgPath = join(dir, 'package.json');
|
|
75
|
+
if (existsSync(pkgPath)) {
|
|
76
|
+
try {
|
|
77
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
78
|
+
if (pkg.name)
|
|
79
|
+
return pkg.name;
|
|
80
|
+
}
|
|
81
|
+
catch { /* ignore */ }
|
|
82
|
+
}
|
|
83
|
+
// Fall back to directory name
|
|
84
|
+
return dir.split('/').pop() ?? 'MyProject';
|
|
85
|
+
}
|
|
86
|
+
// ─── Checklist generation ──────────────────────────────────────────────────────
|
|
87
|
+
function buildChecklist(info) {
|
|
88
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
89
|
+
const lines = [];
|
|
90
|
+
lines.push(`# DevMind 迁移清单`);
|
|
91
|
+
lines.push(``);
|
|
92
|
+
lines.push(`> 生成日期:${today}`);
|
|
93
|
+
lines.push(`> 使用方法:在 Claude Code 中输入 \`/dm:migrate\` 开始迁移`);
|
|
94
|
+
lines.push(``);
|
|
95
|
+
lines.push(`## 项目基本信息`);
|
|
96
|
+
lines.push(``);
|
|
97
|
+
lines.push(`- **项目名称**:${info.name}`);
|
|
98
|
+
lines.push(`- **技术栈**:${info.techStack.join(', ')}`);
|
|
99
|
+
lines.push(`- **README**:${info.hasReadme ? '存在' : '未找到'}`);
|
|
100
|
+
lines.push(`- **Git 仓库**:${info.isGitRepo ? '是' : '否'}`);
|
|
101
|
+
lines.push(``);
|
|
102
|
+
if (info.hasOpenSpec) {
|
|
103
|
+
lines.push(`## OpenSpec 检测结果`);
|
|
104
|
+
lines.push(``);
|
|
105
|
+
lines.push(`检测到项目使用 OpenSpec,以下内容将被转换到 DevMind 记忆系统:`);
|
|
106
|
+
lines.push(``);
|
|
107
|
+
lines.push(`| 来源 | 数量 | 目标 |`);
|
|
108
|
+
lines.push(`|------|------|------|`);
|
|
109
|
+
lines.push(`| \`openspec/changes/archive/\` | ${info.openSpecArchiveCount} 个已归档变更 | \`.devmind/memory/decisions/\` |`);
|
|
110
|
+
if (info.openSpecActiveChanges.length > 0) {
|
|
111
|
+
lines.push(`| \`openspec/changes/\`(进行中) | ${info.openSpecActiveChanges.length} 个 | \`.devmind/current-plan.md\` |`);
|
|
112
|
+
}
|
|
113
|
+
lines.push(``);
|
|
114
|
+
if (info.openSpecActiveChanges.length > 0) {
|
|
115
|
+
lines.push(`### 进行中的变更`);
|
|
116
|
+
lines.push(``);
|
|
117
|
+
info.openSpecActiveChanges.forEach(c => lines.push(`- \`${c}\``));
|
|
118
|
+
lines.push(``);
|
|
119
|
+
lines.push(`> /dm:migrate 将把第一个进行中的变更转换为 \`current-plan.md\`,其余的转换为 decisions。`);
|
|
120
|
+
lines.push(``);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (info.isGitRepo && info.gitLogLines.length > 0) {
|
|
124
|
+
lines.push(`## 最近 Git 提交(供 AI 参考)`);
|
|
125
|
+
lines.push(``);
|
|
126
|
+
lines.push(`\`\`\``);
|
|
127
|
+
info.gitLogLines.forEach(l => lines.push(l));
|
|
128
|
+
lines.push(`\`\`\``);
|
|
129
|
+
lines.push(``);
|
|
130
|
+
}
|
|
131
|
+
lines.push(`## 迁移任务清单`);
|
|
132
|
+
lines.push(``);
|
|
133
|
+
lines.push(`/dm:migrate 将自动完成以下步骤:`);
|
|
134
|
+
lines.push(``);
|
|
135
|
+
lines.push(`- [ ] 更新 \`.devmind/config.yaml\` 中的 \`project:\` 字段`);
|
|
136
|
+
if (info.hasReadme) {
|
|
137
|
+
lines.push(`- [ ] 读取 README.md,提炼架构概述`);
|
|
138
|
+
}
|
|
139
|
+
lines.push(`- [ ] 探索代码库结构,识别核心架构决策`);
|
|
140
|
+
lines.push(`- [ ] 识别开发规律,写入 \`memory/patterns/\``);
|
|
141
|
+
if (info.hasOpenSpec) {
|
|
142
|
+
lines.push(`- [ ] 将 OpenSpec archived changes 转换为 \`memory/decisions/\``);
|
|
143
|
+
if (info.openSpecActiveChanges.length > 0) {
|
|
144
|
+
lines.push(`- [ ] 将进行中的 OpenSpec change 转换为 \`current-plan.md\``);
|
|
145
|
+
}
|
|
146
|
+
lines.push(`- [ ] 检查未归档但被放弃的 changes,询问是否写入 \`memory/graveyard/\``);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
lines.push(`- [ ] 检查历史中是否有被否决的技术方案,写入 \`memory/graveyard/\``);
|
|
150
|
+
}
|
|
151
|
+
lines.push(`- [ ] 运行 \`.devmind/scripts/rebuild-index.sh\` 重建索引`);
|
|
152
|
+
lines.push(`- [ ] 输出迁移摘要`);
|
|
153
|
+
lines.push(``);
|
|
154
|
+
lines.push(`## 下一步`);
|
|
155
|
+
lines.push(``);
|
|
156
|
+
lines.push(`打开 Claude Code,在对话框中输入:`);
|
|
157
|
+
lines.push(``);
|
|
158
|
+
lines.push(`\`\`\``);
|
|
159
|
+
lines.push(`/dm:migrate`);
|
|
160
|
+
lines.push(`\`\`\``);
|
|
161
|
+
return lines.join('\n');
|
|
162
|
+
}
|
|
163
|
+
// ─── Main ──────────────────────────────────────────────────────────────────────
|
|
164
|
+
export function runMigrate(targetDir) {
|
|
165
|
+
console.log(chalk.bold('DevMind migrate'));
|
|
166
|
+
console.log('');
|
|
167
|
+
// Step 1: ensure devmind is initialized
|
|
168
|
+
const devmindDir = join(targetDir, '.devmind');
|
|
169
|
+
if (!existsSync(devmindDir)) {
|
|
170
|
+
console.log(chalk.yellow('DevMind not initialized. Running init first...'));
|
|
171
|
+
console.log('');
|
|
172
|
+
runInit(targetDir);
|
|
173
|
+
console.log('');
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
console.log(chalk.green('✓') + ' DevMind already initialized');
|
|
177
|
+
// Still ensure hooks are registered in user-level settings
|
|
178
|
+
const hookResult = injectUserHooks(targetDir);
|
|
179
|
+
if (hookResult.status === 'injected') {
|
|
180
|
+
console.log(chalk.green('✓') + ' Hooks registered in ' + chalk.cyan('~/.claude/settings.json'));
|
|
181
|
+
}
|
|
182
|
+
else if (hookResult.status === 'error') {
|
|
183
|
+
console.log(chalk.red('✗') + ' Hook injection failed: ' + hookResult.message);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Step 2: gather project info
|
|
187
|
+
console.log('Scanning project...');
|
|
188
|
+
const name = getProjectName(targetDir);
|
|
189
|
+
const techStack = detectTechStack(targetDir);
|
|
190
|
+
const { hasOpenSpec, archiveCount, activeChanges } = detectOpenSpec(targetDir);
|
|
191
|
+
const { lines: gitLogLines, isGitRepo } = getGitLog(targetDir);
|
|
192
|
+
const hasReadme = existsSync(join(targetDir, 'README.md')) || existsSync(join(targetDir, 'README.mdx'));
|
|
193
|
+
const info = {
|
|
194
|
+
name,
|
|
195
|
+
techStack,
|
|
196
|
+
hasReadme,
|
|
197
|
+
hasOpenSpec,
|
|
198
|
+
openSpecArchiveCount: archiveCount,
|
|
199
|
+
openSpecActiveChanges: activeChanges,
|
|
200
|
+
gitLogLines,
|
|
201
|
+
isGitRepo,
|
|
202
|
+
};
|
|
203
|
+
// Step 3: report what was detected
|
|
204
|
+
console.log('');
|
|
205
|
+
console.log(chalk.bold('Detected:'));
|
|
206
|
+
console.log(` Project name : ${chalk.cyan(name)}`);
|
|
207
|
+
console.log(` Tech stack : ${chalk.cyan(techStack.join(', '))}`);
|
|
208
|
+
if (hasOpenSpec) {
|
|
209
|
+
console.log(` OpenSpec : ${chalk.green('yes')} (${archiveCount} archived, ${activeChanges.length} active)`);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
console.log(` OpenSpec : ${chalk.gray('not found')}`);
|
|
213
|
+
}
|
|
214
|
+
console.log(` Git repo : ${isGitRepo ? chalk.green('yes') : chalk.gray('no')}`);
|
|
215
|
+
// Step 4: write checklist
|
|
216
|
+
const checklistPath = join(devmindDir, 'migrate-checklist.md');
|
|
217
|
+
const checklist = buildChecklist(info);
|
|
218
|
+
writeFileSync(checklistPath, checklist, 'utf8');
|
|
219
|
+
console.log('');
|
|
220
|
+
console.log(chalk.green('✓') + ' Generated: ' + chalk.cyan('.devmind/migrate-checklist.md'));
|
|
221
|
+
// Step 5: instructions
|
|
222
|
+
console.log('');
|
|
223
|
+
console.log(chalk.bold('Next steps:'));
|
|
224
|
+
console.log(' 1. Open Claude Code in this directory');
|
|
225
|
+
console.log(' 2. Type ' + chalk.cyan('/dm:migrate') + ' to start the migration');
|
|
226
|
+
console.log('');
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { runInit } from './commands/init.js';
|
|
|
5
5
|
import { runStatus } from './commands/status.js';
|
|
6
6
|
import { runRecall } from './commands/recall.js';
|
|
7
7
|
import { runAudit } from './commands/audit.js';
|
|
8
|
+
import { runMigrate } from './commands/migrate.js';
|
|
8
9
|
const require = createRequire(import.meta.url);
|
|
9
10
|
const pkg = require('../package.json');
|
|
10
11
|
const program = new Command();
|
|
@@ -19,6 +20,13 @@ program
|
|
|
19
20
|
const targetDir = resolve(path ?? '.');
|
|
20
21
|
runInit(targetDir);
|
|
21
22
|
});
|
|
23
|
+
program
|
|
24
|
+
.command('migrate [path]')
|
|
25
|
+
.description('Migrate an existing project to DevMind (supports plain projects and OpenSpec)')
|
|
26
|
+
.action((path) => {
|
|
27
|
+
const targetDir = resolve(path ?? '.');
|
|
28
|
+
runMigrate(targetDir);
|
|
29
|
+
});
|
|
22
30
|
program
|
|
23
31
|
.command('status')
|
|
24
32
|
.description('Show current mode, active plan, and session checkpoints')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAA6C,CAAC;AAEnF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;KAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAE1B,OAAO;KACF,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IACvC,OAAO,CAAC,SAAS,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,+EAA+E,CAAC;KAC5F,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IACvC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,GAAG,EAAE;IACT,SAAS,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,CAAC,OAAe,EAAE,EAAE;IACxB,SAAS,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,EAAE,IAAI,CAAC;KAClE,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC;KAClD,MAAM,CAAC,mBAAmB,EAAE,0CAA0C,CAAC;KACvE,MAAM,CAAC,CAAC,IAAqD,EAAE,EAAE;IAC9D,QAAQ,CAAC;QACL,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACrD,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;KAClB,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const CMD_EXPLORE = "---\ndescription: \u8FDB\u5165\u53EA\u8BFB\u5206\u6790\u6A21\u5F0F\uFF0C\u7406\u89E3\u4EE3\u7801\u67B6\u6784\uFF0C\u5B9A\u4F4D\u95EE\u9898\uFF0C\u4E0D\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\n---\n\n\u8FDB\u5165 **EXPLORE \u6A21\u5F0F**\uFF08\u53EA\u8BFB\uFF09\u3002\n\n## \u524D\u7F6E\u64CD\u4F5C\n\n```sh\necho \"explore\" > .devmind/current-mode.txt\n```\n\n## \u884C\u4E3A\u89C4\u5219\n\n- **\u7981\u6B62**\u8C03\u7528 Write / Edit / NotebookEdit \u5DE5\u5177\uFF08Hook \u4F1A\u81EA\u52A8\u62E6\u622A\uFF09\n- \u53EF\u81EA\u7531\u8BFB\u53D6\u4EFB\u4F55\u6587\u4EF6\n- \u52A0\u8F7D `.devmind/memory/index.md`\uFF0C\u4E86\u89E3\u9879\u76EE\u5386\u53F2\u51B3\u7B56\u80CC\u666F\n\n## \u5206\u6790\u8F93\u51FA\u683C\u5F0F\n\n\u5B8C\u6210\u63A2\u7D22\u540E\uFF0C\u8F93\u51FA\uFF1A\n\n1. **\u53D1\u73B0\u6458\u8981**\uFF1A1-3 \u53E5\u8BDD\u63CF\u8FF0\u5173\u952E\u53D1\u73B0\n2. **\u76F8\u5173\u8BB0\u5FC6**\uFF1A\u5217\u51FA index.md \u4E2D\u4E0E\u5F53\u524D\u95EE\u9898\u76F8\u5173\u7684 Decision/Pattern\uFF08\u5982\u6709\uFF09\n3. **\u5EFA\u8BAE\u4E0B\u4E00\u6B65**\uFF1A\u6839\u636E\u53D1\u73B0\u63A8\u8350\u5207\u6362\u5230\u54EA\u4E2A\u6A21\u5F0F\n - \u95EE\u9898\u5DF2\u5B9A\u4F4D\uFF0C\u6539\u52A8\u5C0F \u2192 \u5EFA\u8BAE `/dm:edit`\n - \u9700\u8981\u65B9\u6848\u89C4\u5212 \u2192 \u5EFA\u8BAE `/dm:plan`\n - \u5DF2\u6709\u660E\u786E\u8BA1\u5212 \u2192 \u5EFA\u8BAE `/dm:build`\n\n## \u6CE8\u610F\n\n\u4E0D\u8981\u5728 Explore \u6A21\u5F0F\u4E0B\u7ED9\u51FA\"\u4FEE\u6539\u5EFA\u8BAE\"\u2014\u2014\u63A2\u7D22\u662F\u4E3A\u4E86\u7406\u89E3\uFF0C\u4E0D\u662F\u4E3A\u4E86\u884C\u52A8\u3002\n\u5982\u9700\u4FEE\u6539\uFF0C\u660E\u786E\u5207\u6362\u6A21\u5F0F\u540E\u518D\u64CD\u4F5C\u3002\n";
|
|
2
|
-
export declare const CMD_EDIT = "---\ndescription: \u8FDB\u5165\u5C0F\u8303\u56F4\u7F16\u8F91\u6A21\u5F0F\uFF0C\u76F4\u63A5\u5B9E\u65BD\u660E\u786E\u7684\u4FEE\u6539\uFF0C\u8DE8\u6587\u4EF6\u6539\u52A8\u9700\u786E\u8BA4\n---\n\n\u8FDB\u5165 **EDIT \u6A21\u5F0F**\uFF08\u5C0F\u8303\u56F4\u7F16\u8F91\uFF09\u3002\n\n## \u524D\u7F6E\u64CD\u4F5C\n\n```sh\necho \"edit\" > .devmind/current-mode.txt\n```\n\n## \u884C\u4E3A\u89C4\u5219\n\n- \
|
|
2
|
+
export declare const CMD_EDIT = "---\ndescription: \u8FDB\u5165\u5C0F\u8303\u56F4\u7F16\u8F91\u6A21\u5F0F\uFF0C\u76F4\u63A5\u5B9E\u65BD\u660E\u786E\u7684\u4FEE\u6539\uFF0C\u8DE8\u6587\u4EF6\u6539\u52A8\u9700\u786E\u8BA4\n---\n\n\u8FDB\u5165 **EDIT \u6A21\u5F0F**\uFF08\u5C0F\u8303\u56F4\u7F16\u8F91\uFF09\u3002\n\n## \u524D\u7F6E\u64CD\u4F5C\n\n```sh\necho \"edit\" > .devmind/current-mode.txt\n```\n\n## \u884C\u4E3A\u89C4\u5219\n\n- \u5141\u8BB8\u4FEE\u6539\u6587\u4EF6\uFF0C\u4F46**\u4F18\u5148\u6700\u5C0F\u5316\u6539\u52A8\u8303\u56F4**\n- **\u4FEE\u6539\u8D85\u8FC7 2 \u4E2A\u6587\u4EF6\u524D**\uFF0C\u5FC5\u987B\u5148\u8F93\u51FA\u6E05\u5355\u5E76\u7B49\u5F85\u786E\u8BA4\uFF0C\u672A\u7ECF\u786E\u8BA4\u4E0D\u5F97\u6267\u884C\uFF1A\n\n```\n\u5373\u5C06\u4FEE\u6539\u591A\u4E2A\u6587\u4EF6\uFF1A\n- [\u6587\u4EF61]\uFF1A[\u4FEE\u6539\u539F\u56E0]\n- [\u6587\u4EF62]\uFF1A[\u4FEE\u6539\u539F\u56E0]\n- [\u6587\u4EF63]\uFF1A[\u4FEE\u6539\u539F\u56E0]\n\n\u8D85\u8FC7 2 \u4E2A\u6587\u4EF6\uFF0C\u7EE7\u7EED\uFF1F(y/n)\n```\n\n- \u4E0D\u65B0\u589E npm/pip/go \u4F9D\u8D56\uFF0C\u4E0D\u505A\u67B6\u6784\u7EA7\u4FEE\u6539\n- \u6BCF\u6B21\u4FEE\u6539\u524D\u7B80\u8981\u8BF4\u660E\uFF1A\u6539\u4EC0\u4E48\u3001\u4E3A\u4EC0\u4E48\u3001\u9884\u671F\u6548\u679C\n\n## \u9002\u7528\u573A\u666F\n\n- \u4FEE\u590D\u5DF2\u5B9A\u4F4D\u7684 bug\uFF08\u5148\u7528 `/dm:explore` \u8BCA\u65AD\uFF0C\u518D\u5207\u6B64\u6A21\u5F0F\u4FEE\u590D\uFF09\n- \u5B9E\u65BD\u5C0F\u578B\u529F\u80FD\u6539\u52A8\uFF08\u5DF2\u77E5\u6539\u4EC0\u4E48\u3001\u6539\u54EA\u91CC\uFF09\n- \u5C0F\u8303\u56F4\u5B9E\u9A8C\u6027\u4FEE\u6539\n\n## \u5B8C\u6210\u540E\n\n\u5EFA\u8BAE\u4F7F\u7528 `/dm:remember` \u8BB0\u5F55\u6709\u4EF7\u503C\u7684\u53D1\u73B0\uFF08\u5982\u679C\u53D1\u73B0\u4E86\u91CD\u8981\u89C4\u5F8B\uFF09\u3002\n\u5982\u679C\u6539\u52A8\u65B9\u6848\u590D\u6742\uFF0C\u5EFA\u8BAE\u5148\u5207\u6362\u5230 `/dm:plan` \u5236\u5B9A\u65B9\u6848\u3002\n";
|
|
3
3
|
export declare const CMD_PLAN = "---\ndescription: \u5236\u5B9A\u7ED3\u6784\u5316\u65B9\u6848\uFF0C\u5F3A\u5236\u68C0\u7D22 Graveyard \u9632\u6B62\u91CD\u8E48\u8986\u8F99\uFF0C\u7B49\u5F85\u5F00\u53D1\u8005\u9009\u62E9\u540E\u751F\u6210 Spec\n---\n\n\u8FDB\u5165 **PLAN \u6A21\u5F0F**\uFF08\u65B9\u6848\u89C4\u5212\uFF09\u3002\n\n## \u524D\u7F6E\u64CD\u4F5C\n\n```sh\necho \"plan\" > .devmind/current-mode.txt\n```\n\n## \u6267\u884C\u6B65\u9AA4\n\n### \u6B65\u9AA41\uFF1A\u5F3A\u5236\u68C0\u7D22 Graveyard\n\n\u8BFB\u53D6 `.devmind/memory/graveyard/` \u4E0B\u7684\u6240\u6709\u6587\u4EF6\u3002\n\n\u68C0\u67E5\u5F53\u524D\u63D0\u8BAE\u662F\u5426\u4E0E\u5DF2\u5426\u51B3\u65B9\u6848\u76F8\u4F3C\uFF08\u5173\u952E\u8BCD\u91CD\u53E0\uFF09\u3002\n\n\u5982\u53D1\u73B0\u5339\u914D\uFF0C**\u5FC5\u987B**\u5148\u8F93\u51FA\u8B66\u544A\uFF1A\n\n```\n\u26A0\uFE0F \u53D1\u73B0\u76F8\u4F3C\u7684\u5DF2\u5426\u51B3\u65B9\u6848\uFF1A[\u65B9\u6848\u540D]\n \u5426\u51B3\u539F\u56E0\uFF1A[\u539F\u56E0\u6458\u8981]\n \u5173\u952E\u8BCD\u91CD\u53E0\uFF1A[\u5173\u952E\u8BCD\u5217\u8868]\n\n\u8BF7\u9009\u62E9\uFF1A\n(1) \u67E5\u770B\u5B8C\u6574\u5426\u51B3\u539F\u56E0\u540E\u51B3\u5B9A\u662F\u5426\u7EE7\u7EED\n(2) \u60C5\u51B5\u4E0D\u540C\uFF0C\u5F53\u524D\u65B9\u6848\u4E0E\u6B64\u65E0\u5173\uFF0C\u7EE7\u7EED\u89C4\u5212\n(3) \u786E\u5B9E\u76F8\u4F3C\uFF0C\u76F4\u63A5\u653E\u5F03\u6B64\u65B9\u5411\n```\n\n\u7B49\u5F85\u5F00\u53D1\u8005\u9009\u62E9\u540E\u7EE7\u7EED\u3002\n\n### \u6B65\u9AA42\uFF1A\u8F93\u51FA\u7ED3\u6784\u5316\u65B9\u6848\u5BF9\u6BD4\n\n\u6BCF\u4E2A\u65B9\u6848\u4F7F\u7528\u4EE5\u4E0B\u683C\u5F0F\uFF1A\n\n```markdown\n## \u65B9\u6848 X\uFF1A[\u65B9\u6848\u540D]\n\n### \u786E\u5B9A\u7684\u90E8\u5206\n- [\u6761\u76EE]\n\n### \u4E0D\u786E\u5B9A\u7684\u90E8\u5206\n- \u26A0\uFE0F [\u4E0D\u786E\u5B9A\u70B9]\uFF1A[\u8BF4\u660E]\n\n### \u98CE\u9669\u8BC4\u4F30\n- \u6280\u672F\u98CE\u9669\uFF1A\u4F4E/\u4E2D/\u9AD8\n- \u56DE\u6EDA\u6210\u672C\uFF1A\u4F4E/\u4E2D/\u9AD8\n```\n\n### \u6B65\u9AA43\uFF1A\u7B49\u5F85\u5F00\u53D1\u8005\u9009\u62E9\n\n\u8F93\u51FA\u6240\u6709\u65B9\u6848\u540E\uFF0C\u7B49\u5F85\u5F00\u53D1\u8005\u660E\u786E\u9009\u62E9\uFF0C\u4E0D\u8981\u81EA\u884C\u63A8\u8FDB\u3002\n\n### \u6B65\u9AA44\uFF1A\u751F\u6210 Spec \u5316 current-plan.md\n\n\u5F00\u53D1\u8005\u9009\u5B9A\u65B9\u6848\u540E\uFF0C\u5199\u5165 `.devmind/current-plan.md`\uFF1A\n\n```markdown\n# \u8BA1\u5212\uFF1A[\u4EFB\u52A1\u540D\u79F0]\n\n> \u9009\u5B9A\u65E5\u671F\uFF1AYYYY-MM-DD \u65B9\u6848\uFF1A[\u65B9\u6848\u540D]\n\n## Spec\n\n### \u7EA6\u675F\uFF08\u4E0D\u53EF\u8FDD\u53CD\uFF0C\u8FDD\u53CD\u65F6\u81EA\u52A8\u6682\u505C\uFF09\n- [\u7EA6\u675F\u6761\u76EE]\n\n### \u9884\u671F\u4EA7\u51FA\uFF08\u53EF\u9A8C\u8BC1\uFF09\n- [ ] [\u53EF\u9A8C\u8BC1\u7684\u4EA7\u51FA\u6761\u76EE]\n\n### \u5141\u8BB8\u4FEE\u6539\u7684\u6587\u4EF6\u8303\u56F4\n- [\u6587\u4EF6\u6216\u76EE\u5F55]\n\n### \u660E\u786E\u6392\u9664\uFF08\u4FEE\u6539\u8FD9\u4E9B\u6587\u4EF6\u65F6\u5FC5\u987B\u6682\u505C\u786E\u8BA4\uFF09\n- [\u6587\u4EF6\u6216\u76EE\u5F55]\n\n## \u6267\u884C\u6B65\u9AA4\n\n1. [\u6B65\u9AA4]\n```\n\n## \u6CE8\u610F\n\n- \u4E0D\u4FEE\u6539\u4EFB\u4F55\u4E1A\u52A1\u4EE3\u7801\uFF08Hook \u5F3A\u5236\u6267\u884C\uFF09\n- \u65B9\u6848\u5BF9\u6BD4\u8981\u5BA2\u89C2\uFF0C\u4E0D\u8981\u504F\u5411\u590D\u6742\u65B9\u6848\n";
|
|
4
4
|
export declare const CMD_BUILD = "---\ndescription: \u6309\u786E\u8BA4\u8BA1\u5212\u4E25\u683C\u6267\u884C\uFF0C\u652F\u6301\u65AD\u70B9\u7EED\u4F20\uFF0C\u9047\u8BA1\u5212\u5916\u5206\u53C9\u81EA\u52A8\u6682\u505C\n---\n\n\u8FDB\u5165 **BUILD \u6A21\u5F0F**\uFF08Spec \u6267\u884C\uFF09\u3002\n\n## \u524D\u7F6E\u64CD\u4F5C\n\n```sh\necho \"build\" > .devmind/current-mode.txt\n```\n\n## \u542F\u52A8\u68C0\u67E5\n\n### 1. \u68C0\u67E5\u5386\u53F2\u68C0\u67E5\u70B9\n\n\u8BFB\u53D6 `.devmind/session.yaml`\uFF08\u5982\u679C\u5B58\u5728\uFF09\uFF1A\n\n\u5982\u679C\u6709 `status: paused` \u7684\u68C0\u67E5\u70B9\uFF0C**\u7ACB\u5373\u544A\u77E5**\u5F00\u53D1\u8005\uFF1A\n```\n\u4E0A\u6B21\u4EFB\u52A1\uFF1A[\u8BA1\u5212\u540D]\n\u5DF2\u5B8C\u6210\uFF1A[\u5DF2\u5B8C\u6210\u68C0\u67E5\u70B9\u5217\u8868]\n\u5F85\u7EED\uFF1A[\u6682\u505C\u68C0\u67E5\u70B9] \u2014 \u539F\u56E0\uFF1A[\u6682\u505C\u539F\u56E0]\n\n\u8BF7\u9009\u62E9\uFF1A\n(1) \u4ECE\u65AD\u70B9\u7EE7\u7EED\n(2) \u91CD\u65B0\u5F00\u59CB\uFF08\u6E05\u9664\u5386\u53F2\u68C0\u67E5\u70B9\uFF09\n```\n\n### 2. \u52A0\u8F7D\u6267\u884C\u7EA6\u675F\n\n\u8BFB\u53D6 `.devmind/current-plan.md` \u7684 Spec \u533A\u5757\u3002\n\n\u5982\u679C `current-plan.md` \u4E0D\u5B58\u5728\u6216\u6CA1\u6709 Spec \u533A\u5757\uFF0C\u505C\u6B62\u5E76\u63D0\u793A\uFF1A\n```\n\u7F3A\u5C11\u6267\u884C\u8BA1\u5212\u3002\u8BF7\u5148\u4F7F\u7528 /dm:plan \u5236\u5B9A\u65B9\u6848\u3002\n```\n\n## \u6267\u884C\u89C4\u5219\n\n1. **\u4E25\u683C\u6309\u7167\u6267\u884C\u6B65\u9AA4\u63A8\u8FDB**\uFF0C\u4E0D\u8DF3\u6B65\n2. \u6BCF\u5B8C\u6210\u4E00\u4E2A\u6B65\u9AA4\uFF0C\u5411 `session.yaml` \u8FFD\u52A0\u68C0\u67E5\u70B9\n3. \u9047\u5230\u8BA1\u5212\u5916\u6587\u4EF6\u3001\u4F9D\u8D56\u6216\u7EA6\u675F\u51B2\u7A81\u65F6**\u7ACB\u5373\u6682\u505C**\n\n## \u5B8C\u6210\u540E\n\n\u8F93\u51FA\u6267\u884C\u6458\u8981\uFF0C\u5EFA\u8BAE\u4F7F\u7528 `/dm:remember` \u6C89\u6DC0\u51B3\u7B56\u3002\n";
|
|
5
5
|
//# sourceMappingURL=templates-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-commands.d.ts","sourceRoot":"","sources":["../src/templates-commands.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,sqDAiCvB,CAAC;AAEF,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"templates-commands.d.ts","sourceRoot":"","sources":["../src/templates-commands.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,sqDAiCvB,CAAC;AAEF,eAAO,MAAM,QAAQ,42DAuCpB,CAAC;AAEF,eAAO,MAAM,QAAQ,ouGAyFpB,CAAC;AAEF,eAAO,MAAM,SAAS,g3DA+CrB,CAAC"}
|
|
@@ -47,18 +47,31 @@ echo "edit" > .devmind/current-mode.txt
|
|
|
47
47
|
|
|
48
48
|
## 行为规则
|
|
49
49
|
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
- 修改完成后,简要说明做了什么
|
|
50
|
+
- 允许修改文件,但**优先最小化改动范围**
|
|
51
|
+
- **修改超过 2 个文件前**,必须先输出清单并等待确认,未经确认不得执行:
|
|
53
52
|
|
|
54
|
-
|
|
53
|
+
\`\`\`
|
|
54
|
+
即将修改多个文件:
|
|
55
|
+
- [文件1]:[修改原因]
|
|
56
|
+
- [文件2]:[修改原因]
|
|
57
|
+
- [文件3]:[修改原因]
|
|
58
|
+
|
|
59
|
+
超过 2 个文件,继续?(y/n)
|
|
60
|
+
\`\`\`
|
|
55
61
|
|
|
56
|
-
-
|
|
57
|
-
-
|
|
62
|
+
- 不新增 npm/pip/go 依赖,不做架构级修改
|
|
63
|
+
- 每次修改前简要说明:改什么、为什么、预期效果
|
|
58
64
|
|
|
59
|
-
##
|
|
65
|
+
## 适用场景
|
|
66
|
+
|
|
67
|
+
- 修复已定位的 bug(先用 \`/dm:explore\` 诊断,再切此模式修复)
|
|
68
|
+
- 实施小型功能改动(已知改什么、改哪里)
|
|
69
|
+
- 小范围实验性修改
|
|
70
|
+
|
|
71
|
+
## 完成后
|
|
60
72
|
|
|
61
|
-
|
|
73
|
+
建议使用 \`/dm:remember\` 记录有价值的发现(如果发现了重要规律)。
|
|
74
|
+
如果改动方案复杂,建议先切换到 \`/dm:plan\` 制定方案。
|
|
62
75
|
`;
|
|
63
76
|
export const CMD_PLAN = `---
|
|
64
77
|
description: 制定结构化方案,强制检索 Graveyard 防止重蹈覆辙,等待开发者选择后生成 Spec
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-commands.js","sourceRoot":"","sources":["../src/templates-commands.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiC1B,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG
|
|
1
|
+
{"version":3,"file":"templates-commands.js","sourceRoot":"","sources":["../src/templates-commands.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiC1B,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCvB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFvB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CxB,CAAC"}
|
|
@@ -5,4 +5,5 @@ export declare const CMD_AUDIT = "---\ndescription: \u67E5\u770B\u6587\u4EF6\u4F
|
|
|
5
5
|
export declare const CMD_SYNC_MEMORY = "---\ndescription: \u540C\u6B65\u56E2\u961F\u8BB0\u5FC6\uFF08git pull + \u91CD\u5EFA\u7D22\u5F15 + \u51B2\u7A81\u68C0\u6D4B\uFF09\n---\n\n\u6267\u884C **SYNC-MEMORY**\u2014\u2014\u540C\u6B65\u56E2\u961F\u8BB0\u5FC6\u3002\n\n## \u6267\u884C\u6B65\u9AA4\n\n### \u6B65\u9AA41\uFF1A\u62C9\u53D6\u6700\u65B0\u53D8\u66F4\n\n```sh\ngit pull origin main\n```\n\n\u5982\u679C\u5931\u8D25\uFF08\u51B2\u7A81\u6216\u7F51\u7EDC\u95EE\u9898\uFF09\uFF0C\u505C\u6B62\u5E76\u63D0\u793A\u5F00\u53D1\u8005\u624B\u52A8\u5904\u7406\u3002\n\n### \u6B65\u9AA42\uFF1A\u68C0\u67E5 memory/ \u51B2\u7A81\n\n```sh\ngit status | grep \"memory/\"\n```\n\n\u5982\u679C\u6709\u51B2\u7A81\u6587\u4EF6\uFF0C\u8F93\u51FA\uFF1A\n```\n\u26A0\uFE0F \u53D1\u73B0 memory/ \u76EE\u5F55\u4E0B\u6709\u5408\u5E76\u51B2\u7A81\uFF1A\n- [\u51B2\u7A81\u6587\u4EF6\u5217\u8868]\n\n\u8BF7\u624B\u52A8\u89E3\u51B3\u51B2\u7A81\u540E\uFF0C\u91CD\u65B0\u8FD0\u884C /dm:sync-memory\n```\n\n### \u6B65\u9AA43\uFF1A\u91CD\u5EFA\u7D22\u5F15\n\n```sh\n.devmind/scripts/rebuild-index.sh\n```\n\n### \u6B65\u9AA44\uFF1A\u8F93\u51FA\u540C\u6B65\u6458\u8981\n\n```\n\u540C\u6B65\u5B8C\u6210\uFF1A\n- \u62C9\u53D6\u4E86 N \u4E2A\u65B0\u63D0\u4EA4\n- memory/ \u65B0\u589E/\u4FEE\u6539\u4E86 M \u4E2A\u6587\u4EF6\n- \u7D22\u5F15\u5DF2\u66F4\u65B0\uFF1AX \u6761 Decisions\uFF0CY \u6761 Patterns\uFF0CZ \u6761 Graveyard\n```\n\n## \u6CE8\u610F\n\n\u4E2A\u4EBA\u4F7F\u7528\u65F6\uFF0C\u76F4\u63A5\u8FD0\u884C `.devmind/scripts/rebuild-index.sh` \u5373\u53EF\uFF0C\u65E0\u9700 git pull\u3002\n";
|
|
6
6
|
export declare const CMD_PUBLISH = "---\ndescription: \u5C06\u5F53\u524D\u529F\u80FD\u6574\u7406\u4E3A\u6587\u6863\u5199\u5165 docs/designs/draft/\n---\n\n\u8FDB\u5165 **PUBLISH \u6A21\u5F0F**\uFF08\u751F\u6210\u529F\u80FD\u6587\u6863\uFF09\u3002\n\n## \u6267\u884C\u6B65\u9AA4\n\n### \u6B65\u9AA41\uFF1A\u6536\u96C6\u4FE1\u606F\n\n\u8BFB\u53D6\u4EE5\u4E0B\u5185\u5BB9\uFF1A\n- `.devmind/current-plan.md`\uFF08\u5F53\u524D\u6216\u521A\u5B8C\u6210\u7684\u8BA1\u5212\uFF09\n- `.devmind/memory/decisions/`\uFF08\u672C\u6B21\u4EFB\u52A1\u76F8\u5173\u7684\u51B3\u7B56\uFF0C\u6309\u65E5\u671F\u5224\u65AD\uFF09\n\n### \u6B65\u9AA42\uFF1A\u786E\u5B9A\u6587\u6863 slug\n\n\u6839\u636E\u8BA1\u5212\u6807\u9898\u751F\u6210 slug\uFF08kebab-case\uFF0C\u82F1\u6587\uFF09\uFF0C\u5411\u5F00\u53D1\u8005\u786E\u8BA4\uFF1A\n\n```\n\u5373\u5C06\u751F\u6210\u6587\u6863\uFF1Adocs/designs/draft/<slug>.md\n\u6587\u6863\u6807\u9898\uFF1A[\u6807\u9898]\n\n\u786E\u8BA4\uFF1F(1) \u786E\u8BA4 (2) \u4FEE\u6539 slug\n```\n\n### \u6B65\u9AA43\uFF1A\u751F\u6210\u6587\u6863\n\n\u5199\u5165 `docs/designs/draft/<slug>.md`\uFF0C\u683C\u5F0F\u5982\u4E0B\uFF1A\n\n```markdown\n# <\u529F\u80FD\u6807\u9898>\n\n> \u751F\u6210\u65E5\u671F\uFF1AYYYY-MM-DD\n\n## \u80CC\u666F\n\n<\u4E3A\u4EC0\u4E48\u8981\u505A\u8FD9\u4E2A\u529F\u80FD\uFF0C\u89E3\u51B3\u4EC0\u4E48\u95EE\u9898>\n\n## \u65B9\u6848\u8BBE\u8BA1\n\n<\u5177\u4F53\u5B9E\u73B0\u65B9\u6848\uFF0C\u67B6\u6784\u8BF4\u660E\uFF0C\u5173\u952E\u8BBE\u8BA1\u51B3\u7B56>\n\n## \u529F\u80FD\u8303\u56F4\n\n<\u672C\u6B21\u5B9E\u73B0\u4E86\u4EC0\u4E48\uFF0C\u660E\u786E\u6392\u9664\u4E86\u4EC0\u4E48>\n\n## \u5173\u952E\u51B3\u7B56\n\n<\u5217\u51FA\u672C\u6B21\u6D89\u53CA\u7684\u91CD\u8981\u51B3\u7B56\u53CA\u7406\u7531>\n\n## \u5DF2\u77E5\u9650\u5236 / \u540E\u7EED\u8BA1\u5212\n\n<\u5F53\u524D\u65B9\u6848\u7684\u9650\u5236\uFF0C\u4EE5\u53CA\u8BA1\u5212\u5728\u672A\u6765\u7248\u672C\u4E2D\u6539\u8FDB\u7684\u70B9>\n```\n\n### \u6B65\u9AA44\uFF1A\u63D0\u793A\u52A0\u5165 milestone\uFF08\u53EF\u9009\uFF09\n\n\u8F93\u51FA\uFF1A\n\n```\n\u6587\u6863\u5DF2\u751F\u6210\uFF1Adocs/designs/draft/<slug>.md\n\n\u662F\u5426\u52A0\u5165\u67D0\u4E2A milestone\uFF1F\n(1) \u6682\u4E0D\u5F52\u5165\uFF08\u4FDD\u7559\u5728 draft/\uFF09\n(2) \u8F93\u5165\u7248\u672C\u53F7\uFF08\u5982 v0.1\uFF09\uFF0C\u5728 /dm:release \u65F6\u4F1A\u81EA\u52A8\u6536\u5F55\n```\n\n\u5982\u679C\u7528\u6237\u8F93\u5165\u7248\u672C\u53F7\uFF0C\u5728\u6587\u6863\u5934\u90E8\u8FFD\u52A0 frontmatter\uFF1A\n\n```markdown\n---\nmilestone: vxx\n---\n```\n\n## \u6CE8\u610F\n\n- \u6587\u6863\u9762\u5411\u4EBA\u7C7B\u5F00\u53D1\u8005\uFF0C\u8BED\u8A00\u6E05\u6670\u53EF\u8BFB\uFF0C\u907F\u514D AI \u5143\u6570\u636E\u8BED\u8A00\n- \u4E0D\u4FEE\u6539 `.devmind/memory/` \u4E0B\u7684\u4EFB\u4F55\u6587\u4EF6\uFF08\u90A3\u662F /dm:remember \u7684\u804C\u8D23\uFF09\n- \u5982\u9700\u540C\u65F6\u6C89\u6DC0 AI \u8BB0\u5FC6\uFF0C\u6267\u884C\u5B8C\u540E\u63D0\u793A\u4F7F\u7528 `/dm:remember`\n";
|
|
7
7
|
export declare const CMD_RELEASE = "---\ndescription: \u6C47\u603B docs/designs/draft/ \u751F\u6210\u7248\u672C\u6587\u6863\uFF0C\u5F52\u6863\u529F\u80FD\u6587\u6863\n---\n\n\u8FDB\u5165 **RELEASE \u6A21\u5F0F**\uFF08\u751F\u6210\u7248\u672C\u6587\u6863\uFF09\u3002\n\n## \u6267\u884C\u6B65\u9AA4\n\n### \u6B65\u9AA41\uFF1A\u8BFB\u53D6 draft/ \u5185\u5BB9\n\n\u8BFB\u53D6 `docs/designs/draft/` \u4E0B\u6240\u6709 `.md` \u6587\u4EF6\uFF08\u5FFD\u7565 `.gitkeep`\uFF09\u3002\n\n\u5982\u679C draft/ \u4E3A\u7A7A\uFF0C\u505C\u6B62\u5E76\u63D0\u793A\uFF1A\n\n```\ndocs/designs/draft/ \u76EE\u5F55\u4E3A\u7A7A\uFF0C\u6CA1\u6709\u53EF\u53D1\u5E03\u7684\u529F\u80FD\u6587\u6863\u3002\n\u8BF7\u5148\u4F7F\u7528 /dm:publish \u751F\u6210\u529F\u80FD\u6587\u6863\u3002\n```\n\n### \u6B65\u9AA42\uFF1A\u786E\u8BA4\u7248\u672C\u53F7\n\n\u5411\u5F00\u53D1\u8005\u786E\u8BA4\u7248\u672C\u53F7\uFF1A\n\n```\ndraft/ \u4E0B\u5171\u6709 N \u4E2A\u529F\u80FD\u6587\u6863\uFF1A\n- <slug1>.md \u2014 <\u6807\u9898>\n- <slug2>.md \u2014 <\u6807\u9898>\n...\n\n\u8BF7\u8F93\u5165\u7248\u672C\u53F7\uFF08\u5982 v1.0\u3001v0.2-beta\uFF09\uFF1A\n```\n\n### \u6B65\u9AA43\uFF1A\u751F\u6210\u7248\u672C\u6587\u6863\n\n\u5199\u5165 `docs/releases/<version>.md`\uFF0C\u683C\u5F0F\u5982\u4E0B\uFF1A\n\n```markdown\n# Release <version>\n\n> \u53D1\u5E03\u65E5\u671F\uFF1AYYYY-MM-DD\n\n## \u672C\u7248\u672C\u5305\u542B\n\n<\u9010\u6761\u5217\u51FA\u5404\u529F\u80FD\u7684\u7B80\u8981\u8BF4\u660E\uFF0C\u9644\u94FE\u63A5\u5230\u5BF9\u5E94\u8BBE\u8BA1\u6587\u6863>\n\n- **[\u529F\u80FD\u6807\u9898](../designs/<version>/<slug>.md)**\uFF1A<\u4E00\u53E5\u8BDD\u8BF4\u660E>\n\n## \u67B6\u6784\u53D8\u5316\n\n<\u5982\u6709\u91CD\u5927\u67B6\u6784\u8C03\u6574\uFF0C\u5728\u6B64\u8BF4\u660E\uFF1B\u65E0\u5219\u7701\u7565>\n\n## \u5DF2\u77E5\u95EE\u9898 / \u540E\u7EED\u8BA1\u5212\n\n<\u5F53\u524D\u7248\u672C\u7684\u9650\u5236\uFF0C\u4E0B\u4E00\u7248\u672C\u7684\u65B9\u5411>\n```\n\n### \u6B65\u9AA44\uFF1A\u5F52\u6863 draft/\n\n\u6267\u884C\u4EE5\u4E0B\u64CD\u4F5C\uFF1A\n1. \u5C06 `docs/designs/draft/` \u91CD\u547D\u540D\u4E3A `docs/designs/<version>/`\n2. \u65B0\u5EFA\u7A7A\u7684 `docs/designs/draft/` \u76EE\u5F55\uFF0C\u5199\u5165 `.gitkeep`\n\n\u5411\u5F00\u53D1\u8005\u786E\u8BA4\u540E\u6267\u884C\uFF1A\n\n```\n\u5373\u5C06\u6267\u884C\uFF1A\n docs/designs/draft/ \u2192 docs/designs/<version>/\n \u65B0\u5EFA\u7A7A docs/designs/draft/\n\n\u786E\u8BA4\uFF1F(1) \u786E\u8BA4 (2) \u53D6\u6D88\n```\n\n### \u6B65\u9AA45\uFF1A\u5B8C\u6210\u63D0\u793A\n\n```\n\u2713 \u7248\u672C\u6587\u6863\u5DF2\u751F\u6210\uFF1Adocs/releases/<version>.md\n\u2713 \u529F\u80FD\u6587\u6863\u5DF2\u5F52\u6863\uFF1Adocs/designs/<version>/\n\u2713 draft/ \u5DF2\u91CD\u7F6E\uFF0C\u53EF\u5F00\u59CB\u8BB0\u5F55\u4E0B\u4E00\u7248\u672C\u529F\u80FD\n\n\u5EFA\u8BAE\uFF1A\u4F7F\u7528 /dm:remember \u5C06\u672C\u7248\u672C\u7684\u5173\u952E\u51B3\u7B56\u6C89\u6DC0\u4E3A AI \u8BB0\u5FC6\n```\n\n## \u6CE8\u610F\n\n- \u91CD\u547D\u540D\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\uFF0C\u6267\u884C\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n- \u4E0D\u4FEE\u6539 `.devmind/memory/` \u4E0B\u7684\u4EFB\u4F55\u6587\u4EF6\n- \u7248\u672C\u53F7\u683C\u5F0F\u7531\u7528\u6237\u51B3\u5B9A\uFF0C\u4E0D\u5F3A\u5236\u89C4\u8303\n";
|
|
8
|
+
export declare const CMD_MIGRATE = "---\ndescription: \u7406\u89E3\u5F53\u524D\u9879\u76EE\u5E76\u8FC1\u79FB\u5230 DevMind \u8BB0\u5FC6\u7CFB\u7EDF\uFF08\u652F\u6301\u901A\u7528\u9879\u76EE\u548C OpenSpec \u9879\u76EE\uFF09\n---\n\n\u6267\u884C **MIGRATE**\u2014\u2014\u8BFB\u53D6\u9879\u76EE\u73B0\u72B6\uFF0C\u5C06\u5DF2\u6709\u77E5\u8BC6\u8FC1\u79FB\u5230 DevMind \u8BB0\u5FC6\u7CFB\u7EDF\u3002\n\n## \u524D\u7F6E\u64CD\u4F5C\n\n```sh\necho \"edit\" > .devmind/current-mode.txt\n```\n\n## \u6267\u884C\u6B65\u9AA4\n\n### \u6B65\u9AA41\uFF1A\u8BFB\u53D6\u8FC1\u79FB\u6E05\u5355\n\n\u8BFB\u53D6 `.devmind/migrate-checklist.md`\u3002\n\n\u5982\u679C\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u63D0\u793A\uFF1A\n```\n\u672A\u627E\u5230\u8FC1\u79FB\u6E05\u5355\u3002\u8BF7\u5148\u5728\u7EC8\u7AEF\u8FD0\u884C\uFF1A\n devmind migrate\n```\n\n\u4ECE\u6E05\u5355\u4E2D\u63D0\u53D6\uFF1A\n- \u9879\u76EE\u540D\u79F0\n- \u6280\u672F\u6808\n- \u662F\u5426\u4E3A OpenSpec \u9879\u76EE\n- \u8FDB\u884C\u4E2D / \u5DF2\u5F52\u6863\u7684 OpenSpec changes\uFF08\u5982\u6709\uFF09\n\n### \u6B65\u9AA42\uFF1A\u63A2\u7D22\u9879\u76EE\n\n\u8FDB\u5165\u53EA\u8BFB\u63A2\u7D22\uFF0C**\u4E0D\u4FEE\u6539\u4EFB\u4F55\u4E1A\u52A1\u6587\u4EF6**\u3002\n\n\u6309\u4F18\u5148\u7EA7\u8BFB\u53D6\uFF1A\n1. `README.md`\uFF08\u6216 `README.mdx`\uFF09\n2. \u9879\u76EE\u6839\u76EE\u5F55\u7ED3\u6784\uFF08`ls` \u6216 `tree -L 2`\uFF09\n3. \u4E3B\u8981\u6E90\u7801\u76EE\u5F55\uFF08`src/`\u3001`pkg/`\u3001`lib/` \u7B49\uFF09\u9876\u5C42\u6587\u4EF6\u5217\u8868\n4. \u5982\u679C\u662F OpenSpec \u9879\u76EE\uFF1A\u8BFB\u53D6 `openspec/specs/` \u4E0B\u7684 spec \u6587\u4EF6\n\n**\u76EE\u6807**\uFF1A\u7406\u89E3\u9879\u76EE\u7684\u6838\u5FC3\u67B6\u6784\u548C\u5173\u952E\u8BBE\u8BA1\u51B3\u7B56\uFF0C\u4E0D\u8981\u6DF1\u5165\u6BCF\u4E2A\u5B9E\u73B0\u6587\u4EF6\u3002\n\n### \u6B65\u9AA43\uFF1A\u66F4\u65B0 config.yaml\n\n\u5C06 `.devmind/config.yaml` \u4E2D\u7684 `project: MyProject` \u66FF\u6362\u4E3A\u5B9E\u9645\u9879\u76EE\u540D\u79F0\u3002\n\n### \u6B65\u9AA44\uFF1A\u63D0\u70BC\u5E76\u5199\u5165\u8BB0\u5FC6\n\n#### 4a\uFF1A\u67B6\u6784\u51B3\u7B56 \u2192 memory/decisions/\n\n\u8BC6\u522B 1-5 \u4E2A\u6700\u91CD\u8981\u7684**\u5DF2\u843D\u5730**\u67B6\u6784\u51B3\u7B56\uFF0C\u5199\u5165 `.devmind/memory/decisions/YYYY-MM-DD_[slug].md`\u3002\n\n\u51B3\u7B56\u8BC6\u522B\u6807\u51C6\uFF1A\n- \u6280\u672F\u9009\u578B\uFF08\u4E3A\u4EC0\u4E48\u9009 X \u800C\u4E0D\u662F Y\uFF09\n- \u67B6\u6784\u8FB9\u754C\uFF08\u6A21\u5757\u5982\u4F55\u5212\u5206\uFF09\n- \u6570\u636E\u6A21\u578B\u6838\u5FC3\u7EA6\u5B9A\n- \u91CD\u8981\u7684 trade-off\n\n\u5982\u679C\u662F OpenSpec \u9879\u76EE\uFF0C\u5C06 `openspec/changes/archive/` \u4E2D\u7684\u6BCF\u4E2A\u5F52\u6863\u53D8\u66F4\u8F6C\u6362\u4E3A\u4E00\u6761 decision\uFF1A\n- \u6807\u9898\u6765\u81EA `proposal.md` \u7684 H1\n- \u6458\u8981\u6765\u81EA `proposal.md` \u7684\u80CC\u666F/\u76EE\u7684\n- \u51B3\u7B56\u5185\u5BB9\u6765\u81EA `design.md`\uFF08\u5982\u5B58\u5728\uFF09\n\n#### 4b\uFF1A\u5F00\u53D1\u89C4\u5F8B \u2192 memory/patterns/\n\n\u8BC6\u522B 1-3 \u4E2A\u9879\u76EE\u7279\u6709\u7684**\u5F00\u53D1\u89C4\u5F8B**\uFF0C\u5199\u5165 `.devmind/memory/patterns/[slug].md`\u3002\n\n\u89C4\u5F8B\u8BC6\u522B\u6807\u51C6\uFF1A\n- \u9879\u76EE\u72EC\u7279\u7684\u4EE3\u7801\u7EC4\u7EC7\u65B9\u5F0F\n- \u7279\u5B9A\u7684\u547D\u540D\u6216\u6587\u4EF6\u7ED3\u6784\u7EA6\u5B9A\n- \u5F00\u53D1\u73AF\u5883\u7684\u7279\u6B8A\u8981\u6C42\uFF08\u5982\u6784\u5EFA\u5DE5\u5177\u9650\u5236\uFF09\n\n#### 4c\uFF1A\u8FDB\u884C\u4E2D\u7684\u53D8\u66F4 \u2192 current-plan.md\uFF08\u4EC5 OpenSpec \u9879\u76EE\uFF09\n\n\u5982\u679C\u5B58\u5728\u8FDB\u884C\u4E2D\u7684 OpenSpec change\uFF08`openspec/changes/<name>/`\uFF0C\u975E archive\uFF09\uFF0C\n\u8BFB\u53D6\u5176 `proposal.md` \u548C `tasks.md`\uFF0C\u751F\u6210\u5BF9\u5E94\u7684 `.devmind/current-plan.md`\uFF1A\n\n```markdown\n# \u8BA1\u5212\uFF1A[proposal \u6807\u9898]\n\n> \u8FC1\u79FB\u81EA OpenSpec change: [change-name] \u65E5\u671F\uFF1AYYYY-MM-DD\n\n## Spec\n\n### \u9884\u671F\u4EA7\u51FA\uFF08\u53EF\u9A8C\u8BC1\uFF09\n- [ ] [tasks.md \u4E2D\u6BCF\u4E2A\u672A\u5B8C\u6210\u7684\u4EFB\u52A1]\n\n### \u5141\u8BB8\u4FEE\u6539\u7684\u6587\u4EF6\u8303\u56F4\n- \uFF08\u6839\u636E proposal/design \u63A8\u65AD\uFF09\n\n## \u6267\u884C\u6B65\u9AA4\n\n[\u6839\u636E tasks.md \u8F6C\u6362]\n```\n\n\u5982\u6709\u591A\u4E2A\u8FDB\u884C\u4E2D\u7684 change\uFF0C\u53EA\u8F6C\u6362\u7B2C\u4E00\u4E2A\uFF0C\u5176\u4F59\u4F5C\u4E3A decisions \u8BB0\u5F55\u3002\n\n#### 4d\uFF1A\u88AB\u653E\u5F03\u7684\u65B9\u6848 \u2192 memory/graveyard/\uFF08\u53EF\u9009\uFF09\n\n\u5982\u679C\u5728 git log \u6216\u9879\u76EE\u5386\u53F2\u4E2D\u53D1\u73B0\u660E\u663E\u88AB\u653E\u5F03\u7684\u6280\u672F\u65B9\u6848\uFF0C\u8BE2\u95EE\u5F00\u53D1\u8005\uFF1A\n\n```\n\u53D1\u73B0\u53EF\u80FD\u88AB\u653E\u5F03\u7684\u65B9\u6848\uFF1A[\u65B9\u6848\u63CF\u8FF0]\n\u662F\u5426\u5199\u5165 Graveyard\uFF1F(y/n/skip-all)\n```\n\n### \u6B65\u9AA45\uFF1A\u91CD\u5EFA\u7D22\u5F15\n\n```sh\n.devmind/scripts/rebuild-index.sh\n```\n\n### \u6B65\u9AA46\uFF1A\u8F93\u51FA\u8FC1\u79FB\u6458\u8981\n\n```\n\u8FC1\u79FB\u5B8C\u6210\uFF1A\n\n\u2713 config.yaml \u5DF2\u66F4\u65B0\uFF1Aproject: [\u9879\u76EE\u540D]\n\u2713 \u5199\u5165 N \u6761 Decisions\uFF1A\n - [\u6587\u4EF6\u540D]\uFF1A[\u6458\u8981]\n\u2713 \u5199\u5165 M \u6761 Patterns\uFF1A\n - [\u6587\u4EF6\u540D]\uFF1A[\u6458\u8981]\n[\u2713 current-plan.md \u5DF2\u4ECE OpenSpec change \u8F6C\u6362]\n\u2713 \u7D22\u5F15\u5DF2\u91CD\u5EFA\n\n\u5EFA\u8BAE\u4E0B\u4E00\u6B65\uFF1A\n /dm:explore \u2014 \u5F00\u59CB\u63A2\u7D22\u9879\u76EE\uFF0CDevMind \u5DF2\u52A0\u8F7D\u9879\u76EE\u80CC\u666F\n```\n\n## \u6CE8\u610F\n\n- \u4E0D\u4FEE\u6539\u4EFB\u4F55\u4E1A\u52A1\u4EE3\u7801\uFF08src/\u3001lib/ \u7B49\uFF09\n- \u4E0D\u5220\u9664 OpenSpec \u6587\u4EF6\uFF08\u53EA\u8BFB\u53D6\uFF0C\u4E0D\u8FC1\u79FB\u6389\u539F\u6587\u4EF6\uFF09\n- \u8BB0\u5FC6\u6587\u4EF6\u5B81\u53EF\u5C11\u5199\u3001\u5199\u51C6\uFF0C\u4E0D\u8981\u4E3A\u586B\u5145\u6570\u91CF\u800C\u751F\u6210\u4F4E\u8D28\u91CF\u6761\u76EE\n- \u5B8C\u6210\u540E\u5C06\u6A21\u5F0F\u5207\u56DE explore\uFF1A`echo \"explore\" > .devmind/current-mode.txt`\n";
|
|
8
9
|
//# sourceMappingURL=templates-commands2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-commands2.d.ts","sourceRoot":"","sources":["../src/templates-commands2.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,myEA+CxB,CAAC;AAEF,eAAO,MAAM,UAAU,2iDA0CtB,CAAC;AAEF,eAAO,MAAM,QAAQ,6kEAqDpB,CAAC;AAEF,eAAO,MAAM,SAAS,mqDA4BrB,CAAC;AAEF,eAAO,MAAM,eAAe,u/CAgD3B,CAAC;AAEF,eAAO,MAAM,WAAW,y3FAgFvB,CAAC;AAEF,eAAO,MAAM,WAAW,6pGAuFvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"templates-commands2.d.ts","sourceRoot":"","sources":["../src/templates-commands2.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,myEA+CxB,CAAC;AAEF,eAAO,MAAM,UAAU,2iDA0CtB,CAAC;AAEF,eAAO,MAAM,QAAQ,6kEAqDpB,CAAC;AAEF,eAAO,MAAM,SAAS,mqDA4BrB,CAAC;AAEF,eAAO,MAAM,eAAe,u/CAgD3B,CAAC;AAEF,eAAO,MAAM,WAAW,y3FAgFvB,CAAC;AAEF,eAAO,MAAM,WAAW,6pGAuFvB,CAAC;AAEF,eAAO,MAAM,WAAW,iiMAuIvB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// templates-commands2.ts — Slash command templates (part 2: remember/recall/bury/audit/sync-memory/publish/release)
|
|
1
|
+
// templates-commands2.ts — Slash command templates (part 2: remember/recall/bury/audit/sync-memory/publish/release/migrate)
|
|
2
2
|
export const CMD_REMEMBER = `---
|
|
3
3
|
description: 将本次会话中出现的决策和经验规律沉淀为记忆文件
|
|
4
4
|
---
|
|
@@ -391,4 +391,140 @@ draft/ 下共有 N 个功能文档:
|
|
|
391
391
|
- 不修改 \`.devmind/memory/\` 下的任何文件
|
|
392
392
|
- 版本号格式由用户决定,不强制规范
|
|
393
393
|
`;
|
|
394
|
+
export const CMD_MIGRATE = `---
|
|
395
|
+
description: 理解当前项目并迁移到 DevMind 记忆系统(支持通用项目和 OpenSpec 项目)
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
执行 **MIGRATE**——读取项目现状,将已有知识迁移到 DevMind 记忆系统。
|
|
399
|
+
|
|
400
|
+
## 前置操作
|
|
401
|
+
|
|
402
|
+
\`\`\`sh
|
|
403
|
+
echo "edit" > .devmind/current-mode.txt
|
|
404
|
+
\`\`\`
|
|
405
|
+
|
|
406
|
+
## 执行步骤
|
|
407
|
+
|
|
408
|
+
### 步骤1:读取迁移清单
|
|
409
|
+
|
|
410
|
+
读取 \`.devmind/migrate-checklist.md\`。
|
|
411
|
+
|
|
412
|
+
如果文件不存在,提示:
|
|
413
|
+
\`\`\`
|
|
414
|
+
未找到迁移清单。请先在终端运行:
|
|
415
|
+
devmind migrate
|
|
416
|
+
\`\`\`
|
|
417
|
+
|
|
418
|
+
从清单中提取:
|
|
419
|
+
- 项目名称
|
|
420
|
+
- 技术栈
|
|
421
|
+
- 是否为 OpenSpec 项目
|
|
422
|
+
- 进行中 / 已归档的 OpenSpec changes(如有)
|
|
423
|
+
|
|
424
|
+
### 步骤2:探索项目
|
|
425
|
+
|
|
426
|
+
进入只读探索,**不修改任何业务文件**。
|
|
427
|
+
|
|
428
|
+
按优先级读取:
|
|
429
|
+
1. \`README.md\`(或 \`README.mdx\`)
|
|
430
|
+
2. 项目根目录结构(\`ls\` 或 \`tree -L 2\`)
|
|
431
|
+
3. 主要源码目录(\`src/\`、\`pkg/\`、\`lib/\` 等)顶层文件列表
|
|
432
|
+
4. 如果是 OpenSpec 项目:读取 \`openspec/specs/\` 下的 spec 文件
|
|
433
|
+
|
|
434
|
+
**目标**:理解项目的核心架构和关键设计决策,不要深入每个实现文件。
|
|
435
|
+
|
|
436
|
+
### 步骤3:更新 config.yaml
|
|
437
|
+
|
|
438
|
+
将 \`.devmind/config.yaml\` 中的 \`project: MyProject\` 替换为实际项目名称。
|
|
439
|
+
|
|
440
|
+
### 步骤4:提炼并写入记忆
|
|
441
|
+
|
|
442
|
+
#### 4a:架构决策 → memory/decisions/
|
|
443
|
+
|
|
444
|
+
识别 1-5 个最重要的**已落地**架构决策,写入 \`.devmind/memory/decisions/YYYY-MM-DD_[slug].md\`。
|
|
445
|
+
|
|
446
|
+
决策识别标准:
|
|
447
|
+
- 技术选型(为什么选 X 而不是 Y)
|
|
448
|
+
- 架构边界(模块如何划分)
|
|
449
|
+
- 数据模型核心约定
|
|
450
|
+
- 重要的 trade-off
|
|
451
|
+
|
|
452
|
+
如果是 OpenSpec 项目,将 \`openspec/changes/archive/\` 中的每个归档变更转换为一条 decision:
|
|
453
|
+
- 标题来自 \`proposal.md\` 的 H1
|
|
454
|
+
- 摘要来自 \`proposal.md\` 的背景/目的
|
|
455
|
+
- 决策内容来自 \`design.md\`(如存在)
|
|
456
|
+
|
|
457
|
+
#### 4b:开发规律 → memory/patterns/
|
|
458
|
+
|
|
459
|
+
识别 1-3 个项目特有的**开发规律**,写入 \`.devmind/memory/patterns/[slug].md\`。
|
|
460
|
+
|
|
461
|
+
规律识别标准:
|
|
462
|
+
- 项目独特的代码组织方式
|
|
463
|
+
- 特定的命名或文件结构约定
|
|
464
|
+
- 开发环境的特殊要求(如构建工具限制)
|
|
465
|
+
|
|
466
|
+
#### 4c:进行中的变更 → current-plan.md(仅 OpenSpec 项目)
|
|
467
|
+
|
|
468
|
+
如果存在进行中的 OpenSpec change(\`openspec/changes/<name>/\`,非 archive),
|
|
469
|
+
读取其 \`proposal.md\` 和 \`tasks.md\`,生成对应的 \`.devmind/current-plan.md\`:
|
|
470
|
+
|
|
471
|
+
\`\`\`markdown
|
|
472
|
+
# 计划:[proposal 标题]
|
|
473
|
+
|
|
474
|
+
> 迁移自 OpenSpec change: [change-name] 日期:YYYY-MM-DD
|
|
475
|
+
|
|
476
|
+
## Spec
|
|
477
|
+
|
|
478
|
+
### 预期产出(可验证)
|
|
479
|
+
- [ ] [tasks.md 中每个未完成的任务]
|
|
480
|
+
|
|
481
|
+
### 允许修改的文件范围
|
|
482
|
+
- (根据 proposal/design 推断)
|
|
483
|
+
|
|
484
|
+
## 执行步骤
|
|
485
|
+
|
|
486
|
+
[根据 tasks.md 转换]
|
|
487
|
+
\`\`\`
|
|
488
|
+
|
|
489
|
+
如有多个进行中的 change,只转换第一个,其余作为 decisions 记录。
|
|
490
|
+
|
|
491
|
+
#### 4d:被放弃的方案 → memory/graveyard/(可选)
|
|
492
|
+
|
|
493
|
+
如果在 git log 或项目历史中发现明显被放弃的技术方案,询问开发者:
|
|
494
|
+
|
|
495
|
+
\`\`\`
|
|
496
|
+
发现可能被放弃的方案:[方案描述]
|
|
497
|
+
是否写入 Graveyard?(y/n/skip-all)
|
|
498
|
+
\`\`\`
|
|
499
|
+
|
|
500
|
+
### 步骤5:重建索引
|
|
501
|
+
|
|
502
|
+
\`\`\`sh
|
|
503
|
+
.devmind/scripts/rebuild-index.sh
|
|
504
|
+
\`\`\`
|
|
505
|
+
|
|
506
|
+
### 步骤6:输出迁移摘要
|
|
507
|
+
|
|
508
|
+
\`\`\`
|
|
509
|
+
迁移完成:
|
|
510
|
+
|
|
511
|
+
✓ config.yaml 已更新:project: [项目名]
|
|
512
|
+
✓ 写入 N 条 Decisions:
|
|
513
|
+
- [文件名]:[摘要]
|
|
514
|
+
✓ 写入 M 条 Patterns:
|
|
515
|
+
- [文件名]:[摘要]
|
|
516
|
+
[✓ current-plan.md 已从 OpenSpec change 转换]
|
|
517
|
+
✓ 索引已重建
|
|
518
|
+
|
|
519
|
+
建议下一步:
|
|
520
|
+
/dm:explore — 开始探索项目,DevMind 已加载项目背景
|
|
521
|
+
\`\`\`
|
|
522
|
+
|
|
523
|
+
## 注意
|
|
524
|
+
|
|
525
|
+
- 不修改任何业务代码(src/、lib/ 等)
|
|
526
|
+
- 不删除 OpenSpec 文件(只读取,不迁移掉原文件)
|
|
527
|
+
- 记忆文件宁可少写、写准,不要为填充数量而生成低质量条目
|
|
528
|
+
- 完成后将模式切回 explore:\`echo "explore" > .devmind/current-mode.txt\`
|
|
529
|
+
`;
|
|
394
530
|
//# sourceMappingURL=templates-commands2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-commands2.js","sourceRoot":"","sources":["../src/templates-commands2.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"templates-commands2.js","sourceRoot":"","sources":["../src/templates-commands2.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAE5H,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+C3B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CzB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDvB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BxB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgD9B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF1B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuF1B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuI1B,CAAC"}
|
package/dist/templates.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const PRE_TOOL_USE_SH = "#!/bin/bash\n# .claude/hooks/pre-tool-use.sh\n# PreToolUse Hook: \u6A21\u5F0F\u7EA6\u675F\u62E6\u622A\n# \u5728 Explore / Plan \u6A21\u5F0F\u4E0B\u963B\u6B62\u5199\u64CD\u4F5C\n# Claude Code \u901A\u8FC7 stdin \u4F20\u5165 JSON: {\"tool_name\":\"...\",\"tool_input\":{...}}\n\nset -e\n\nDEVMIND_DIR=\"$(cd \"$(dirname \"$0\")/../..\" && pwd)/.devmind\"\n\n# \u8BFB\u53D6 stdin \u4E2D\u7684 JSON \u6570\u636E\nHOOK_INPUT=$(cat)\n\n# \u4ECE JSON \u4E2D\u63D0\u53D6 tool_name\nTOOL_NAME=$(printf '%s' \"$HOOK_INPUT\" | grep -o '\"tool_name\":\"[^\"]*\"' | cut -d'\"' -f4)\n\n# \u8BFB\u53D6\u5F53\u524D\u6A21\u5F0F\uFF0C\u6587\u4EF6\u4E0D\u5B58\u5728\u5219\u9ED8\u8BA4 explore\uFF08\u6700\u4E25\u683C\uFF09\nCURRENT_MODE=$(cat \"$DEVMIND_DIR/current-mode.txt\" 2>/dev/null || echo \"explore\")\n\n# \u4ECE JSON \u4E2D\u63D0\u53D6 file_path\uFF08\u7EAF bash\uFF0C\u65E0\u5916\u90E8\u4F9D\u8D56\uFF09\nextract_file_path() {\n printf '%s' \"$1\" | grep -o '\"file_path\":\"[^\"]*\"' | head -1 | cut -d'\"' -f4\n}\n\n# \u53EA\u62E6\u622A\u5199\u64CD\u4F5C\u5DE5\u5177\nif echo \"$TOOL_NAME\" | grep -qE '^(Write|Edit|NotebookEdit)$'; then\n\n if [ \"$CURRENT_MODE\" = \"explore\" ]; then\n echo \"BLOCKED: Explore \u6A21\u5F0F\u7981\u6B62\u4FEE\u6539\u6587\u4EF6\" >&2\n echo \"\u63D0\u793A\uFF1A\u4F7F\u7528 /dm:edit \u6216 /dm:build \u8FDB\u5165\u53EF\u5199\u6A21\u5F0F\" >&2\n exit 1\n fi\n\n if [ \"$CURRENT_MODE\" = \"plan\" ]; then\n FILE_ARG=$(extract_file_path \"$HOOK_INPUT\")\n if echo \"$FILE_ARG\" | grep -q \"\\.devmind/\"; then\n exit 0\n fi\n echo \"BLOCKED: Plan \u6A21\u5F0F\u4EC5\u8F93\u51FA\u65B9\u6848\uFF0C\u4E0D\u4FEE\u6539\u4E1A\u52A1\u4EE3\u7801\" >&2\n echo \"\u63D0\u793A\uFF1A\u4F7F\u7528 /dm:build \u6267\u884C\u5DF2\u786E\u8BA4\u7684\u8BA1\u5212\" >&2\n exit 1\n fi\n\n if [ \"$CURRENT_MODE\" = \"build\" ]; then\n PLAN_FILE=\"$DEVMIND_DIR/current-plan.md\"\n FILE_ARG=$(extract_file_path \"$HOOK_INPUT\")\n\n if [ -n \"$FILE_ARG\" ] && [ -f \"$PLAN_FILE\" ]; then\n IN_EXCLUDED=$(awk '/^### \u660E\u786E\u6392\u9664/,/^###/' \"$PLAN_FILE\" | grep -v \"^###\" | grep -v \"^$\" | sed 's/^- //' | while read -r pattern; do\n if echo \"$FILE_ARG\" | grep -q \"$pattern\"; then\n echo \"yes\"\n break\n fi\n done)\n\n if [ \"$IN_EXCLUDED\" = \"yes\" ]; then\n echo \"PAUSED: \u6587\u4EF6 '$FILE_ARG' \u5728\u660E\u786E\u6392\u9664\u5217\u8868\u4E2D\" >&2\n echo \"\u8BF7\u9009\u62E9\uFF1A(1) \u5141\u8BB8\u5E76\u66F4\u65B0\u8BA1\u5212\u8303\u56F4 (2) \u5141\u8BB8\u4E00\u6B21\u6027\u4F8B\u5916 (3) \u8DF3\u8FC7\u6B64\u4FEE\u6539 (4) \u5207\u6362\u5230 Plan \u6A21\u5F0F\" >&2\n exit 1\n fi\n fi\n fi\n\nfi\n\nexit 0\n";
|
|
1
|
+
export declare const PRE_TOOL_USE_SH = "#!/bin/bash\n# .claude/hooks/pre-tool-use.sh\n# PreToolUse Hook: \u6A21\u5F0F\u7EA6\u675F\u62E6\u622A\n# \u5728 Explore / Plan \u6A21\u5F0F\u4E0B\u963B\u6B62\u5199\u64CD\u4F5C\n# Claude Code \u901A\u8FC7 stdin \u4F20\u5165 JSON: {\"tool_name\":\"...\",\"tool_input\":{...}}\n\nset -e\n\nDEVMIND_DIR=\"$(cd \"$(dirname \"$0\")/../..\" && pwd)/.devmind\"\n\n# \u8BFB\u53D6 stdin \u4E2D\u7684 JSON \u6570\u636E\nHOOK_INPUT=$(cat)\n\n# \u4ECE JSON \u4E2D\u63D0\u53D6 tool_name\nTOOL_NAME=$(printf '%s' \"$HOOK_INPUT\" | grep -o '\"tool_name\":\"[^\"]*\"' | cut -d'\"' -f4)\n\n# \u8BFB\u53D6\u5F53\u524D\u6A21\u5F0F\uFF0C\u6587\u4EF6\u4E0D\u5B58\u5728\u5219\u9ED8\u8BA4 explore\uFF08\u6700\u4E25\u683C\uFF09\nCURRENT_MODE=$(cat \"$DEVMIND_DIR/current-mode.txt\" 2>/dev/null || echo \"explore\")\n\n# \u4ECE JSON \u4E2D\u63D0\u53D6 file_path\uFF08\u7EAF bash\uFF0C\u65E0\u5916\u90E8\u4F9D\u8D56\uFF09\nextract_file_path() {\n printf '%s' \"$1\" | grep -o '\"file_path\":\"[^\"]*\"' | head -1 | cut -d'\"' -f4\n}\n\n# \u62E6\u622A Bash \u5DE5\u5177\u4E2D\u7684\u5371\u9669\u547D\u4EE4\uFF08\u6240\u6709\u6A21\u5F0F\u4E0B\u5747\u68C0\u6D4B\uFF09\nif [ \"$TOOL_NAME\" = \"Bash\" ]; then\n COMMAND=$(printf '%s' \"$HOOK_INPUT\" | grep -o '\"command\":\"[^\"]*\"' | head -1 | cut -d'\"' -f4)\n for DANGER in \"rm -rf\" \"DROP TABLE\" \"DELETE FROM\" \"git push --force\" \"git push -f\"; do\n if echo \"$COMMAND\" | grep -qi \"$DANGER\"; then\n echo \"BLOCKED: \u68C0\u6D4B\u5230\u5371\u9669\u547D\u4EE4\uFF1A$DANGER\" >&2\n echo \"\u547D\u4EE4\uFF1A$COMMAND\" >&2\n echo \"\u5982\u9700\u6267\u884C\uFF0C\u8BF7\u5728\u7EC8\u7AEF\u624B\u52A8\u8FD0\u884C\u5E76\u660E\u786E\u786E\u8BA4\u540E\u679C\u3002\" >&2\n exit 1\n fi\n done\nfi\n\n# \u53EA\u62E6\u622A\u5199\u64CD\u4F5C\u5DE5\u5177\nif echo \"$TOOL_NAME\" | grep -qE '^(Write|Edit|NotebookEdit)$'; then\n\n if [ \"$CURRENT_MODE\" = \"explore\" ]; then\n echo \"BLOCKED: Explore \u6A21\u5F0F\u7981\u6B62\u4FEE\u6539\u6587\u4EF6\" >&2\n echo \"\u63D0\u793A\uFF1A\u4F7F\u7528 /dm:edit \u6216 /dm:build \u8FDB\u5165\u53EF\u5199\u6A21\u5F0F\" >&2\n exit 1\n fi\n\n if [ \"$CURRENT_MODE\" = \"plan\" ]; then\n FILE_ARG=$(extract_file_path \"$HOOK_INPUT\")\n if echo \"$FILE_ARG\" | grep -q \"\\.devmind/\"; then\n exit 0\n fi\n echo \"BLOCKED: Plan \u6A21\u5F0F\u4EC5\u8F93\u51FA\u65B9\u6848\uFF0C\u4E0D\u4FEE\u6539\u4E1A\u52A1\u4EE3\u7801\" >&2\n echo \"\u63D0\u793A\uFF1A\u4F7F\u7528 /dm:build \u6267\u884C\u5DF2\u786E\u8BA4\u7684\u8BA1\u5212\" >&2\n exit 1\n fi\n\n if [ \"$CURRENT_MODE\" = \"build\" ]; then\n PLAN_FILE=\"$DEVMIND_DIR/current-plan.md\"\n FILE_ARG=$(extract_file_path \"$HOOK_INPUT\")\n\n if [ -n \"$FILE_ARG\" ] && [ -f \"$PLAN_FILE\" ]; then\n IN_EXCLUDED=$(awk '/^### \u660E\u786E\u6392\u9664/,/^###/' \"$PLAN_FILE\" | grep -v \"^###\" | grep -v \"^$\" | sed 's/^- //' | while read -r pattern; do\n if echo \"$FILE_ARG\" | grep -q \"$pattern\"; then\n echo \"yes\"\n break\n fi\n done)\n\n if [ \"$IN_EXCLUDED\" = \"yes\" ]; then\n echo \"PAUSED: \u6587\u4EF6 '$FILE_ARG' \u5728\u660E\u786E\u6392\u9664\u5217\u8868\u4E2D\" >&2\n echo \"\u8BF7\u9009\u62E9\uFF1A(1) \u5141\u8BB8\u5E76\u66F4\u65B0\u8BA1\u5212\u8303\u56F4 (2) \u5141\u8BB8\u4E00\u6B21\u6027\u4F8B\u5916 (3) \u8DF3\u8FC7\u6B64\u4FEE\u6539 (4) \u5207\u6362\u5230 Plan \u6A21\u5F0F\" >&2\n exit 1\n fi\n fi\n fi\n\nfi\n\nexit 0\n";
|
|
2
2
|
export declare const POST_TOOL_USE_SH = "#!/bin/bash\n# .claude/hooks/post-tool-use.sh\n# PostToolUse Hook: \u5BA1\u8BA1\u65E5\u5FD7\u81EA\u52A8\u6355\u83B7\n# \u6BCF\u6B21\u5199\u64CD\u4F5C\u540E\u81EA\u52A8\u8BB0\u5F55\u5230 audit.log\n# Claude Code \u901A\u8FC7 stdin \u4F20\u5165 JSON: {\"tool_name\":\"...\",\"tool_input\":{...},\"tool_response\":{...}}\n\nDEVMIND_DIR=\"$(cd \"$(dirname \"$0\")/../..\" && pwd)/.devmind\"\n\n# \u8BFB\u53D6 stdin \u4E2D\u7684 JSON \u6570\u636E\nHOOK_INPUT=$(cat)\n\n# \u4ECE JSON \u4E2D\u63D0\u53D6 tool_name\nTOOL_NAME=$(printf '%s' \"$HOOK_INPUT\" | grep -o '\"tool_name\":\"[^\"]*\"' | cut -d'\"' -f4)\n\n# \u4ECE JSON \u4E2D\u63D0\u53D6 file_path\nextract_file_path() {\n printf '%s' \"$1\" | grep -o '\"file_path\":\"[^\"]*\"' | head -1 | cut -d'\"' -f4\n}\n\n# \u53EA\u5904\u7406\u5199\u64CD\u4F5C\u5DE5\u5177\nif echo \"$TOOL_NAME\" | grep -qE '^(Write|Edit|NotebookEdit)$'; then\n\n CURRENT_MODE=$(cat \"$DEVMIND_DIR/current-mode.txt\" 2>/dev/null || echo \"unknown\")\n CURRENT_PLAN=$(head -1 \"$DEVMIND_DIR/current-plan.md\" 2>/dev/null | sed 's/^# //')\n FILE_PATH=$(extract_file_path \"$HOOK_INPUT\")\n FILE_PATH=\"${FILE_PATH:-unknown}\"\n\n echo \"[$(date '+%Y-%m-%d %H:%M:%S')] $CURRENT_MODE ${FILE_PATH} plan:${CURRENT_PLAN:-none}\" \\\n >> \"$DEVMIND_DIR/audit.log\"\nfi\n\nexit 0\n";
|
|
3
3
|
export declare const CLAUDE_MD = "# DevMind \u72B6\u6001\u611F\u77E5\n\n> \u672C\u6BB5\u7531 DevMind \u6846\u67B6\u6CE8\u5165\uFF0C\u9002\u7528\u4E8E\u672C\u9879\u76EE\u6240\u6709 Claude Code \u4F1A\u8BDD\u3002\n\n## \u4F1A\u8BDD\u542F\u52A8\u68C0\u67E5\n\n\u6BCF\u6B21\u4F1A\u8BDD\u5F00\u59CB\u65F6\uFF0C\u6267\u884C\u4EE5\u4E0B\u64CD\u4F5C\uFF1A\n\n1. **\u8BFB\u53D6\u5F53\u524D\u6A21\u5F0F**\uFF1A`cat .devmind/current-mode.txt`\n - `explore`\uFF1A\u53EA\u8BFB\uFF0C\u7981\u6B62\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\n - `edit`\uFF1A\u53EF\u5C0F\u8303\u56F4\u4FEE\u6539\uFF0C\u8DE8\u6587\u4EF6\u6539\u52A8\uFF08\u8D85\u8FC72\u4E2A\u6587\u4EF6\uFF09\u9700\u786E\u8BA4\n - `plan`\uFF1A\u4EC5\u8F93\u51FA\u65B9\u6848\uFF0C\u4E0D\u4FEE\u6539\u4E1A\u52A1\u4EE3\u7801\n - `build`\uFF1A\u6309 `current-plan.md` \u4E2D\u7684 Spec \u6267\u884C\n - \u6587\u4EF6\u4E0D\u5B58\u5728\u65F6\uFF0C\u9ED8\u8BA4\u8FDB\u5165 `explore` \u6A21\u5F0F\n\n2. **\u68C0\u67E5\u4F1A\u8BDD\u72B6\u6001**\uFF1A\u5982\u679C `.devmind/session.yaml` \u5B58\u5728\uFF0C\u8BFB\u53D6\u5E76\u544A\u77E5\u5F00\u53D1\u8005\u4E0A\u6B21\u4EFB\u52A1\u72B6\u6001\uFF0C\u5305\u62EC\uFF1A\n - \u4E0A\u6B21\u6267\u884C\u7684\u8BA1\u5212\n - \u5DF2\u5B8C\u6210\u548C\u5F85\u7EED\u7684\u68C0\u67E5\u70B9\n - \u662F\u5426\u6709\u672A\u89E3\u51B3\u7684\u6682\u505C\u539F\u56E0\n\n3. **\u52A0\u8F7D\u8BB0\u5FC6\u7D22\u5F15**\uFF1A\u8BFB\u53D6 `.devmind/memory/index.md`\uFF08\u8F7B\u91CF\u7EA7\uFF0C\u4EC5\u5305\u542B\u6458\u8981\u548C\u6807\u7B7E\uFF09\n\n## \u6A21\u5F0F\u5207\u6362\u63D0\u793A\n\n\u5F53\u5F00\u53D1\u8005\u8F93\u5165\u7684\u610F\u56FE\u4E0E\u5F53\u524D\u6A21\u5F0F\u4E0D\u7B26\u65F6\uFF0C\u4E3B\u52A8\u63D0\u793A\u53EF\u7528\u7684\u6A21\u5F0F\u547D\u4EE4\uFF1A\n\n```\n\u7528\u6237\uFF1A\"\u5E2E\u6211\u6539\u8FD9\u4E2A bug\"\n\u5F53\u524D\u6A21\u5F0F\uFF1Aexplore\uFF08\u53EA\u8BFB\uFF09\n\u2192 \u63D0\u793A\uFF1A\u68C0\u6D4B\u5230\u4FEE\u6539\u610F\u56FE\uFF0C\u5F53\u524D\u5904\u4E8E explore \u6A21\u5F0F\uFF08\u53EA\u8BFB\uFF09\u3002\n \u5EFA\u8BAE\uFF1A\n - \u5148\u5B9A\u4F4D\u95EE\u9898\uFF1F\u7EE7\u7EED\u4F7F\u7528 /dm:explore\n - \u5DF2\u77E5\u95EE\u9898\u4F4D\u7F6E\uFF1F\u4F7F\u7528 /dm:edit \u8FDB\u5165\u7F16\u8F91\u6A21\u5F0F\n - \u9700\u8981\u5927\u8303\u56F4\u4FEE\u6539\uFF1F\u4F7F\u7528 /dm:plan \u5236\u5B9A\u65B9\u6848\u540E\u518D /dm:build\n```\n\n## \u6A21\u5F0F\u7EA6\u675F\u8BF4\u660E\uFF08Hook \u5F3A\u5236\u6267\u884C\uFF09\n\n- Explore / Plan \u6A21\u5F0F\u4E0B\uFF0CWrite / Edit / NotebookEdit \u5DE5\u5177\u8C03\u7528\u4F1A\u88AB `pre-tool-use.sh` \u62E6\u622A\n- Build \u6A21\u5F0F\u4E0B\uFF0C\u4FEE\u6539\"\u660E\u786E\u6392\u9664\"\u5217\u8868\u4E2D\u7684\u6587\u4EF6\u4F1A\u89E6\u53D1\u6682\u505C\n- \u6240\u6709\u5199\u64CD\u4F5C\u90FD\u7531 `post-tool-use.sh` \u81EA\u52A8\u8BB0\u5F55\u5230 `audit.log`\n\n## \u53EF\u7528\u547D\u4EE4\u901F\u89C8\n\n| \u547D\u4EE4 | \u7528\u9014 |\n|------|------|\n| `/dm:explore` | \u8FDB\u5165\u53EA\u8BFB\u5206\u6790\u6A21\u5F0F |\n| `/dm:edit` | \u8FDB\u5165\u5C0F\u8303\u56F4\u7F16\u8F91\u6A21\u5F0F |\n| `/dm:plan` | \u5236\u5B9A\u7ED3\u6784\u5316\u65B9\u6848\uFF08\u5F3A\u5236\u68C0\u7D22 Graveyard\uFF09 |\n| `/dm:build` | \u6309\u8BA1\u5212\u6267\u884C\uFF08\u652F\u6301\u65AD\u70B9\u7EED\u4F20\uFF09 |\n| `/dm:remember` | \u5C06\u672C\u6B21\u51B3\u7B56\u6C89\u6DC0\u4E3A\u8BB0\u5FC6 |\n| `/dm:recall` | \u68C0\u7D22\u5386\u53F2\u8BB0\u5FC6 |\n| `/dm:bury` | \u8BB0\u5F55\u88AB\u5426\u51B3\u7684\u65B9\u6848\u5230 Graveyard |\n| `/dm:audit` | \u67E5\u770B\u64CD\u4F5C\u5BA1\u8BA1\u65E5\u5FD7 |\n| `/dm:sync-memory` | \u540C\u6B65\u56E2\u961F\u8BB0\u5FC6\uFF08git pull + \u91CD\u5EFA\u7D22\u5F15\uFF09 |\n| `/dm:publish` | \u5C06\u5F53\u524D\u529F\u80FD\u6574\u7406\u4E3A\u6587\u6863\u5199\u5165 `docs/designs/draft/` |\n| `/dm:release` | \u6C47\u603B draft/ \u751F\u6210\u7248\u672C\u6587\u6863\uFF0C\u5F52\u6863\u529F\u80FD\u6587\u6863 |\n";
|
|
4
|
-
export declare const SETTINGS_LOCAL_JSON = "{\n \"permissions\": {\n \"allow\": [\n \"Bash(chmod:*)\",\n \"Bash(tree:*)\",\n \"Bash(python:*)\",\n \"Bash(python3:*)\",\n \"Bash(.devmind/scripts/rebuild-index.sh:*)\",\n \"Bash(bash:*)\"\n ],\n \"deny\": [],\n \"ask\": []\n }
|
|
4
|
+
export declare const SETTINGS_LOCAL_JSON = "{\n \"permissions\": {\n \"allow\": [\n \"Bash(chmod:*)\",\n \"Bash(tree:*)\",\n \"Bash(python:*)\",\n \"Bash(python3:*)\",\n \"Bash(.devmind/scripts/rebuild-index.sh:*)\",\n \"Bash(bash:*)\"\n ],\n \"deny\": [],\n \"ask\": []\n }\n}\n";
|
|
5
5
|
//# sourceMappingURL=templates.d.ts.map
|
package/dist/templates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,ynHA+E3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,kzCAgC5B,CAAC;AAIF,eAAO,MAAM,SAAS,2yHAyDrB,CAAC;AAIF,eAAO,MAAM,mBAAmB,4RAc/B,CAAC"}
|
package/dist/templates.js
CHANGED
|
@@ -25,6 +25,19 @@ extract_file_path() {
|
|
|
25
25
|
printf '%s' "$1" | grep -o '"file_path":"[^"]*"' | head -1 | cut -d'"' -f4
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
# 拦截 Bash 工具中的危险命令(所有模式下均检测)
|
|
29
|
+
if [ "$TOOL_NAME" = "Bash" ]; then
|
|
30
|
+
COMMAND=$(printf '%s' "$HOOK_INPUT" | grep -o '"command":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
31
|
+
for DANGER in "rm -rf" "DROP TABLE" "DELETE FROM" "git push --force" "git push -f"; do
|
|
32
|
+
if echo "$COMMAND" | grep -qi "$DANGER"; then
|
|
33
|
+
echo "BLOCKED: 检测到危险命令:$DANGER" >&2
|
|
34
|
+
echo "命令:$COMMAND" >&2
|
|
35
|
+
echo "如需执行,请在终端手动运行并明确确认后果。" >&2
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
done
|
|
39
|
+
fi
|
|
40
|
+
|
|
28
41
|
# 只拦截写操作工具
|
|
29
42
|
if echo "$TOOL_NAME" | grep -qE '^(Write|Edit|NotebookEdit)$'; then
|
|
30
43
|
|
|
@@ -173,30 +186,6 @@ export const SETTINGS_LOCAL_JSON = `{
|
|
|
173
186
|
],
|
|
174
187
|
"deny": [],
|
|
175
188
|
"ask": []
|
|
176
|
-
},
|
|
177
|
-
"hooks": {
|
|
178
|
-
"PreToolUse": [
|
|
179
|
-
{
|
|
180
|
-
"matcher": ".*",
|
|
181
|
-
"hooks": [
|
|
182
|
-
{
|
|
183
|
-
"type": "command",
|
|
184
|
-
"command": ".claude/hooks/pre-tool-use.sh"
|
|
185
|
-
}
|
|
186
|
-
]
|
|
187
|
-
}
|
|
188
|
-
],
|
|
189
|
-
"PostToolUse": [
|
|
190
|
-
{
|
|
191
|
-
"matcher": ".*",
|
|
192
|
-
"hooks": [
|
|
193
|
-
{
|
|
194
|
-
"type": "command",
|
|
195
|
-
"command": ".claude/hooks/post-tool-use.sh"
|
|
196
|
-
}
|
|
197
|
-
]
|
|
198
|
-
}
|
|
199
|
-
]
|
|
200
189
|
}
|
|
201
190
|
}
|
|
202
191
|
`;
|
package/dist/templates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,yDAAyD;AAEzD,gFAAgF;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,yDAAyD;AAEzD,gFAAgF;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+E9B,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC/B,CAAC;AAEF,iFAAiF;AAEjF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDxB,CAAC;AAEF,iFAAiF;AAEjF,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;CAclC,CAAC"}
|