Skip to content

Commit c4123e8

Browse files
committed
fix(trae): 安装 skills 到正确目录并自动生成 bootstrap rule
Trae 用户反馈安装后 skills 无法自动激活。根因:skills 被安装到 .trae/rules/ 而非 .trae/skills/,且缺少 alwaysApply 引导规则。 修复: - skills 安装到 .trae/skills/(正确目录) - 自动生成 .trae/rules/superpowers-zh.md(alwaysApply: true) - bootstrap rule 包含所有 skills 的名称和触发条件
1 parent 4a55cbf commit c4123e8

2 files changed

Lines changed: 68 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ AI:在开始实现之前,我需要了解几个关键问题:
6565
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | CLI | `npx superpowers-zh` | `.gemini/skills/` |
6666
| [Codex CLI](https://github.com/openai/codex) | CLI | `npx superpowers-zh` | `.codex/skills/` |
6767
| [Aider](https://aider.chat) | CLI | `npx superpowers-zh` | `.aider/skills/` |
68-
| [Trae](https://trae.ai) | IDE | `npx superpowers-zh` | `.trae/rules/` |
68+
| [Trae](https://trae.ai) | IDE | `npx superpowers-zh` | `.trae/skills/` + `.trae/rules/` |
6969
| [VS Code](https://code.visualstudio.com) (Copilot) | IDE 插件 | `npx superpowers-zh` | `.github/superpowers/` |
7070
| [DeerFlow 2.0](https://github.com/bytedance/deer-flow) | Agent 框架 | `npx superpowers-zh` | `skills/custom/` |
7171
| [OpenCode](https://opencode.ai) | CLI | `npx superpowers-zh` | `.opencode/skills/` |

bin/superpowers-zh.js

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env node
22

3-
import { existsSync, mkdirSync, cpSync, readdirSync, readFileSync } from 'fs';
3+
import { existsSync, mkdirSync, cpSync, readdirSync, readFileSync, writeFileSync } from 'fs';
44
import { resolve, dirname } from 'path';
55
import { fileURLToPath } from 'url';
66

@@ -16,7 +16,7 @@ const TARGETS = [
1616
{ name: 'Codex CLI', dir: '.codex/skills', detect: '.codex' },
1717
{ name: 'Kiro', dir: '.kiro/steering', detect: '.kiro' },
1818
{ name: 'DeerFlow', dir: 'skills/custom', detect: 'deer_flow' },
19-
{ name: 'Trae', dir: '.trae/rules', detect: '.trae' },
19+
{ name: 'Trae', dir: '.trae/skills', detect: '.trae' },
2020
{ name: 'Antigravity', dir: '.antigravity/skills', detect: '.antigravity' },
2121
{ name: 'VS Code', dir: '.github/superpowers', detect: '.github/copilot-instructions.md' },
2222
{ name: 'OpenClaw', dir: 'skills', detect: '.openclaw' },
@@ -32,6 +32,67 @@ function countDirs(dir) {
3232
return readdirSync(dir, { withFileTypes: true }).filter(e => e.isDirectory()).length;
3333
}
3434

35+
function generateTraeBootstrapRule(projectDir) {
36+
const rulesDir = resolve(projectDir, '.trae', 'rules');
37+
mkdirSync(rulesDir, { recursive: true });
38+
39+
// 扫描已安装的 skills,读取 name 和 description
40+
const skillsDir = resolve(projectDir, '.trae', 'skills');
41+
const skillEntries = [];
42+
if (existsSync(skillsDir)) {
43+
for (const entry of readdirSync(skillsDir, { withFileTypes: true })) {
44+
if (!entry.isDirectory()) continue;
45+
const skillFile = resolve(skillsDir, entry.name, 'SKILL.md');
46+
if (!existsSync(skillFile)) continue;
47+
const content = readFileSync(skillFile, 'utf8');
48+
const fmMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
49+
if (!fmMatch) continue;
50+
const nameMatch = fmMatch[1].match(/^name:\s*(.+)$/m);
51+
const descMatch = fmMatch[1].match(/^description:\s*["']?(.+?)["']?\s*$/m);
52+
if (nameMatch) {
53+
skillEntries.push({
54+
name: nameMatch[1].trim(),
55+
desc: descMatch ? descMatch[1].trim() : '',
56+
});
57+
}
58+
}
59+
}
60+
61+
const skillTable = skillEntries.map(s => `| ${s.name} | ${s.desc} |`).join('\n');
62+
63+
const rule = `---
64+
alwaysApply: true
65+
---
66+
67+
# Superpowers-ZH 中文增强版
68+
69+
你已加载 superpowers-zh 技能框架(${skillEntries.length} 个 skills)。
70+
71+
## 核心规则
72+
73+
1. **收到任务时,先检查是否有匹配的 skill** — 哪怕只有 1% 的可能性也要检查
74+
2. **设计先于编码** — 收到功能需求时,先用 brainstorming skill 做需求分析
75+
3. **测试先于实现** — 写代码前先写测试(TDD)
76+
4. **验证先于完成** — 声称完成前必须运行验证命令
77+
78+
## 可用 Skills
79+
80+
Skills 位于 \`.trae/skills/\` 目录,每个 skill 有独立的 \`SKILL.md\` 文件。
81+
82+
| Skill | 触发条件 |
83+
|-------|---------|
84+
${skillTable}
85+
86+
## 如何使用
87+
88+
当任务匹配某个 skill 的触发条件时,读取对应的 \`.trae/skills/<skill-name>/SKILL.md\` 并严格遵循其流程。
89+
`;
90+
91+
const rulePath = resolve(rulesDir, 'superpowers-zh.md');
92+
writeFileSync(rulePath, rule, 'utf8');
93+
console.log(` ✅ Trae: bootstrap rule -> ${rulePath}`);
94+
}
95+
3596
function showHelp() {
3697
console.log(`
3798
superpowers-zh v${PKG.version} — AI 编程超能力中文版
@@ -78,6 +139,10 @@ function install() {
78139
console.log(` ✅ ${target.name}: ${count} 个 skills -> ${dest}`);
79140
installed++;
80141

142+
if (target.name === 'Trae') {
143+
generateTraeBootstrapRule(PROJECT_DIR);
144+
}
145+
81146
if (target.name === 'Claude Code' && existsSync(AGENTS_SRC)) {
82147
const agentsDest = resolve(PROJECT_DIR, '.claude', 'agents');
83148
mkdirSync(agentsDest, { recursive: true });

0 commit comments

Comments
 (0)