mirror of
https://github.com/jnMetaCode/superpowers-zh.git
synced 2026-09-02 22:54:06 +08:00
fix(installer): Aider 支持有两个都会导致「装了不生效」的错(#45 同类)
顺着 #45(Hermes 装错目录)和 #119(Qoder 映射表是编的)这条线,系统查了 我们自己那层工具支持。Aider 查出两处,都实测坐实,都是「装完看着成功、 实际不生效」。 ## ① 真实 Aider 项目从来没被自动检测到过 detect 写的是 '.aider',即要求存在一个 `.aider/` 目录 —— 而 **Aider 不创建 这个目录**。它在项目根留下的是 `.aider.` 前缀的产物: .aider.conf.yml / .aider.chat.history.md / .aider.tags.cache.v3/ 实测:造一个含这三样的目录跑 `npx superpowers-zh`,输出「未检测到任何已知 AI 编程工具」。而 docs/README.aider.md 一直写着「会自动检测 .aider.conf.yml 文件」—— 文档描述的是意图,代码做的是另一回事。 改为认这四个标记(保留 '.aider' 兼容)。 ## ② CONVENTIONS.md 不会被 Aider 自动加载 代码注释和文档都写着「Aider 原生支持自动加载此文件」。官方文档 (aider.chat/docs/usage/conventions.html)说的是反的:必须 `aider --read CONVENTIONS.md`,或在 .aider.conf.yml 里写 `read: CONVENTIONS.md`。 最糟的是 docs 的「Skills 未生效」排障第 3 条写着「Aider 会自动读取 CONVENTIONS.md,无需额外配置」—— 用户卡住时来查文档,看到的正好是让他 继续卡住的那句。 改法照搬 #45 的做法:装完打印可直接用的两种激活方式,**不替用户改 .aider.conf.yml**(那是他们的文件)。docs 开头重写,把「还需一步」放最前面, 并注明 v1.7.9 及更早的说法是错的。 ## 测试的盲区 verify-release.sh 的检测测试是 `mkdir .aider` 然后断言认出 Aider —— 拿代码 测代码,真实标记一个都没测。已补三个真实标记;顺带修了 case 分支:.yml 也 要按文件建,用目录冒充文件等于测了个假场景。 verify-release 90 -> 93 pass。 ## 验证 - 只有 .aider.conf.yml 的目录:正确识别为 Aider,并打印激活提示 - 已有自写 CONVENTIONS.md:追加而不覆盖;卸载后逐字节恢复原内容 - 卸载:.aider 下残留 0 项 - audit.sh 166 pass / 0 warn / 0 fail、verify-release.sh 93 pass / 0 fail ## 范围 bin/superpowers-zh.js、docs/README.aider.md、scripts/verify-release.sh 均为 fork 自有(上游没有 installer 与 docs),零上游偏离。
This commit is contained in:
@@ -71,7 +71,14 @@ const TARGETS = [
|
||||
// Gemini 无 global:其全局加载是「扩展目录」~/.gemini/extensions/*/skills/ + gemini-extension.json,
|
||||
// 不是简单复制到 ~/.gemini/skills,通用 --global 覆盖不了。见 docs/README.gemini-cli.md。
|
||||
{ name: 'Gemini CLI', dir: '.gemini/skills', detect: 'GEMINI.md' },
|
||||
{ name: 'Aider', dir: '.aider/skills', detect: '.aider' },
|
||||
// Aider 两点都跟直觉相反,都是实测确认的:
|
||||
// 1) Aider 不创建 `.aider/` 目录,它在项目根留下的是 `.aider.` 前缀的产物
|
||||
// (.aider.conf.yml / .aider.chat.history.md / .aider.tags.cache.v3/)。
|
||||
// 原来 detect 写 '.aider' 永远匹配不上 —— 真实 Aider 项目从来没被自动检测到过。
|
||||
// 2) CONVENTIONS.md **不会**被 Aider 自动加载。官方文档(aider.chat/docs/usage/
|
||||
// conventions.html)明确要 `aider --read CONVENTIONS.md` 或在 .aider.conf.yml
|
||||
// 写 `read: CONVENTIONS.md`。所以装完必须打印激活方式,否则又是「装了不生效」。
|
||||
{ name: 'Aider', dir: '.aider/skills', detect: ['.aider.conf.yml', '.aider.chat.history.md', '.aider.tags.cache.v3', '.aider'] },
|
||||
{ name: 'OpenCode', dir: '.opencode/skills', detect: '.opencode', global: { dir: '.config/opencode/skills', detect: '.config/opencode' } },
|
||||
{ name: 'Qwen Code', dir: '.qwen/skills', detect: '.qwen', global: { dir: '.qwen/skills', detect: '.qwen' } },
|
||||
// Hermes 官方文档:只自动加载 ~/.hermes/skills/("the primary directory and
|
||||
@@ -373,7 +380,8 @@ ${skillList}
|
||||
当任务匹配某个 skill 时,读取对应的 \`.aider/skills/<skill-name>/SKILL.md\` 并严格遵循其流程。
|
||||
`;
|
||||
|
||||
// 写入 CONVENTIONS.md(Aider 原生支持自动加载此文件)
|
||||
// 写入 CONVENTIONS.md。注意:Aider **不会**自动加载这个文件(见 TARGETS 里的
|
||||
// Aider 注释),所以写完必须告诉用户怎么激活,否则装了等于没装。
|
||||
// 如果已有 CONVENTIONS.md,追加而不覆盖
|
||||
const convPath = resolve(projectDir, 'CONVENTIONS.md');
|
||||
if (existsSync(convPath)) {
|
||||
@@ -388,6 +396,18 @@ ${skillList}
|
||||
writeFileSync(convPath, wrapWithSentinel(content), 'utf8');
|
||||
console.log(` ✅ Aider: bootstrap -> ${convPath}`);
|
||||
}
|
||||
|
||||
// 激活提示。不替用户改 .aider.conf.yml —— 那是他们的配置文件。
|
||||
console.log('');
|
||||
console.log(' ⚠️ Aider 不会自动加载 CONVENTIONS.md,还需一步才生效:');
|
||||
console.log('');
|
||||
console.log(' 每次启动时带上:');
|
||||
console.log(' aider --read CONVENTIONS.md');
|
||||
console.log('');
|
||||
console.log(' 或写进 .aider.conf.yml 一劳永逸:');
|
||||
console.log('');
|
||||
console.log(' read: CONVENTIONS.md');
|
||||
console.log('');
|
||||
}
|
||||
|
||||
function generateGeminiBootstrap(baseDir, isGlobal) {
|
||||
|
||||
Reference in New Issue
Block a user