ccg-ros2-workflow 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -0
- package/bin/cli.js +212 -0
- package/package.json +35 -0
- package/src/codeagent-wrapper.sh +86 -0
- package/src/commands/ccg/analyze.md +152 -0
- package/src/commands/ccg/backend.md +160 -0
- package/src/commands/ccg/clean-branches.md +117 -0
- package/src/commands/ccg/commit.md +122 -0
- package/src/commands/ccg/debug.md +145 -0
- package/src/commands/ccg/enhance.md +36 -0
- package/src/commands/ccg/execute.md +308 -0
- package/src/commands/ccg/feat.md +192 -0
- package/src/commands/ccg/frontend.md +160 -0
- package/src/commands/ccg/init.md +100 -0
- package/src/commands/ccg/optimize.md +159 -0
- package/src/commands/ccg/plan.md +260 -0
- package/src/commands/ccg/review.md +130 -0
- package/src/commands/ccg/rollback.md +116 -0
- package/src/commands/ccg/test.md +174 -0
- package/src/commands/ccg/workflow.md +192 -0
- package/src/commands/ccg/worktree.md +128 -0
- package/src/config.toml +36 -0
- package/src/prompts/claude/analyzer.md +25 -0
- package/src/prompts/claude/architect.md +25 -0
- package/src/prompts/claude/debugger.md +24 -0
- package/src/prompts/claude/optimizer.md +25 -0
- package/src/prompts/claude/reviewer.md +26 -0
- package/src/prompts/claude/tester.md +24 -0
- package/src/prompts/codex/analyzer.md +32 -0
- package/src/prompts/codex/architect.md +32 -0
- package/src/prompts/codex/debugger.md +24 -0
- package/src/prompts/codex/optimizer.md +25 -0
- package/src/prompts/codex/reviewer.md +32 -0
- package/src/prompts/codex/tester.md +24 -0
- package/src/prompts/gemini/analyzer.md +32 -0
- package/src/prompts/gemini/architect.md +32 -0
- package/src/prompts/gemini/debugger.md +24 -0
- package/src/prompts/gemini/frontend.md +25 -0
- package/src/prompts/gemini/optimizer.md +25 -0
- package/src/prompts/gemini/reviewer.md +32 -0
- package/src/prompts/gemini/tester.md +24 -0
package/README.md
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# CCG-ROS2-Workflow
|
|
2
|
+
|
|
3
|
+
ROS2 多模型协作开发工具 - 基于 Claude Code CLI
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- **多模型协作**: Codex (底层控制) + Gemini (上层集成) + Claude (编排)
|
|
8
|
+
- **ROS2 Humble**: 专为物理机器人开发优化
|
|
9
|
+
- **简洁原则**: 信任模型能力,上下文由 MCP 检索
|
|
10
|
+
- **跨平台**: macOS / Ubuntu 支持
|
|
11
|
+
|
|
12
|
+
## 安装
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npx ccg-ros2-workflow
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
或全局安装:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -g ccg-ros2-workflow
|
|
22
|
+
ccg-ros2-workflow
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 前置依赖
|
|
26
|
+
|
|
27
|
+
需要先安装:
|
|
28
|
+
|
|
29
|
+
- [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)
|
|
30
|
+
- [Codex CLI](https://github.com/openai/codex) (可选)
|
|
31
|
+
- [Gemini CLI](https://github.com/google/gemini-cli) (可选)
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Gemini CLI
|
|
35
|
+
npm install -g @google/gemini-cli
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 使用方法
|
|
39
|
+
|
|
40
|
+
在 Claude Code 中:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# 完整工作流
|
|
44
|
+
/ccg:workflow 为移动机器人添加速度限制器
|
|
45
|
+
|
|
46
|
+
# 分析任务
|
|
47
|
+
/ccg:analyze 分析控制器实现
|
|
48
|
+
|
|
49
|
+
# 代码审查
|
|
50
|
+
/ccg:review
|
|
51
|
+
|
|
52
|
+
# 查看所有命令
|
|
53
|
+
/ccg:<Tab>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 命令列表
|
|
57
|
+
|
|
58
|
+
| 命令 | 说明 |
|
|
59
|
+
|------|------|
|
|
60
|
+
| `/ccg:workflow` | 6 阶段完整工作流 |
|
|
61
|
+
| `/ccg:analyze` | 双模型并行分析 |
|
|
62
|
+
| `/ccg:plan` | 多模型协作规划 |
|
|
63
|
+
| `/ccg:execute` | 执行实施 |
|
|
64
|
+
| `/ccg:review` | 双模型代码审查 |
|
|
65
|
+
| `/ccg:debug` | 多模型调试 |
|
|
66
|
+
| `/ccg:optimize` | 性能优化 |
|
|
67
|
+
| `/ccg:test` | 测试生成 |
|
|
68
|
+
| `/ccg:commit` | 智能 Git 提交 |
|
|
69
|
+
|
|
70
|
+
## 架构
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
┌─────────────────────────────────────────┐
|
|
74
|
+
│ Claude (编排) │
|
|
75
|
+
│ 执行代码修改、协调工作流 │
|
|
76
|
+
└─────────────────┬───────────────────────┘
|
|
77
|
+
│
|
|
78
|
+
┌─────────┴─────────┐
|
|
79
|
+
▼ ▼
|
|
80
|
+
┌───────────────┐ ┌───────────────┐
|
|
81
|
+
│ Codex (底层) │ │ Gemini (上层) │
|
|
82
|
+
│ 控制、C++ │ │ 集成、Python │
|
|
83
|
+
│ 硬件、实时 │ │ 配置、诊断 │
|
|
84
|
+
└───────────────┘ └───────────────┘
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 配置
|
|
88
|
+
|
|
89
|
+
安装后配置文件位于:
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
~/.claude/
|
|
93
|
+
├── .ccg/
|
|
94
|
+
│ ├── config.toml # 主配置
|
|
95
|
+
│ └── prompts/ # 提示词
|
|
96
|
+
│ ├── codex/
|
|
97
|
+
│ ├── gemini/
|
|
98
|
+
│ └── claude/
|
|
99
|
+
├── commands/ccg/ # 命令文件
|
|
100
|
+
└── bin/
|
|
101
|
+
└── codeagent-wrapper # 模型调用脚本
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## 语言配置
|
|
105
|
+
|
|
106
|
+
| 场景 | 语言 |
|
|
107
|
+
|------|------|
|
|
108
|
+
| 提示词 | English |
|
|
109
|
+
| 交互 | 中文 |
|
|
110
|
+
| 代码注释 | 中文 |
|
|
111
|
+
|
|
112
|
+
## 卸载
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
npx ccg-ros2-workflow
|
|
116
|
+
# 选择 "卸载工作流"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## License
|
|
120
|
+
|
|
121
|
+
MIT
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const readline = require('readline');
|
|
6
|
+
const { execSync } = require('child_process');
|
|
7
|
+
|
|
8
|
+
const CLAUDE_DIR = path.join(process.env.HOME, '.claude');
|
|
9
|
+
const CCG_DIR = path.join(CLAUDE_DIR, '.ccg');
|
|
10
|
+
const COMMANDS_DIR = path.join(CLAUDE_DIR, 'commands', 'ccg');
|
|
11
|
+
const BIN_DIR = path.join(CLAUDE_DIR, 'bin');
|
|
12
|
+
const SRC_DIR = path.join(__dirname, '..', 'src');
|
|
13
|
+
|
|
14
|
+
const rl = readline.createInterface({
|
|
15
|
+
input: process.stdin,
|
|
16
|
+
output: process.stdout
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
function question(prompt) {
|
|
20
|
+
return new Promise(resolve => rl.question(prompt, resolve));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function copyRecursive(src, dest) {
|
|
24
|
+
if (!fs.existsSync(src)) return;
|
|
25
|
+
|
|
26
|
+
if (fs.statSync(src).isDirectory()) {
|
|
27
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
28
|
+
fs.readdirSync(src).forEach(child => {
|
|
29
|
+
copyRecursive(path.join(src, child), path.join(dest, child));
|
|
30
|
+
});
|
|
31
|
+
} else {
|
|
32
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
33
|
+
fs.copyFileSync(src, dest);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function replaceInFile(filePath, replacements) {
|
|
38
|
+
if (!fs.existsSync(filePath)) return;
|
|
39
|
+
let content = fs.readFileSync(filePath, 'utf8');
|
|
40
|
+
for (const [search, replace] of Object.entries(replacements)) {
|
|
41
|
+
content = content.replace(new RegExp(search, 'g'), replace);
|
|
42
|
+
}
|
|
43
|
+
fs.writeFileSync(filePath, content);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function main() {
|
|
47
|
+
console.log('\n🤖 CCG-ROS2-Workflow 安装程序');
|
|
48
|
+
console.log('================================');
|
|
49
|
+
console.log('ROS2 多模型协作开发工具');
|
|
50
|
+
console.log('Codex (底层) + Gemini (上层) + Claude (编排)\n');
|
|
51
|
+
|
|
52
|
+
// 检查是否已安装
|
|
53
|
+
if (fs.existsSync(path.join(CCG_DIR, 'config.toml'))) {
|
|
54
|
+
const overwrite = await question('⚠️ 检测到已有安装,是否覆盖? (y/N): ');
|
|
55
|
+
if (overwrite.toLowerCase() !== 'y') {
|
|
56
|
+
console.log('取消安装');
|
|
57
|
+
rl.close();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 选择操作
|
|
63
|
+
console.log('\n请选择操作:');
|
|
64
|
+
console.log('1. 安装工作流');
|
|
65
|
+
console.log('2. 配置 API 密钥');
|
|
66
|
+
console.log('3. 卸载工作流');
|
|
67
|
+
console.log('4. 退出');
|
|
68
|
+
|
|
69
|
+
const choice = await question('\n请输入选项 (1-4): ');
|
|
70
|
+
|
|
71
|
+
switch (choice) {
|
|
72
|
+
case '1':
|
|
73
|
+
await install();
|
|
74
|
+
break;
|
|
75
|
+
case '2':
|
|
76
|
+
await configureApiKeys();
|
|
77
|
+
break;
|
|
78
|
+
case '3':
|
|
79
|
+
await uninstall();
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
console.log('退出');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
rl.close();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async function install() {
|
|
89
|
+
console.log('\n📦 开始安装...\n');
|
|
90
|
+
|
|
91
|
+
// 创建目录
|
|
92
|
+
[CCG_DIR, COMMANDS_DIR, BIN_DIR].forEach(dir => {
|
|
93
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// 复制文件
|
|
97
|
+
console.log('复制配置文件...');
|
|
98
|
+
copyRecursive(path.join(SRC_DIR, 'prompts'), path.join(CCG_DIR, 'prompts'));
|
|
99
|
+
|
|
100
|
+
console.log('复制命令文件...');
|
|
101
|
+
copyRecursive(path.join(SRC_DIR, 'commands', 'ccg'), COMMANDS_DIR);
|
|
102
|
+
|
|
103
|
+
console.log('复制配置...');
|
|
104
|
+
fs.copyFileSync(
|
|
105
|
+
path.join(SRC_DIR, 'config.toml'),
|
|
106
|
+
path.join(CCG_DIR, 'config.toml')
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
// 复制 codeagent-wrapper 脚本
|
|
110
|
+
console.log('安装 codeagent-wrapper...');
|
|
111
|
+
const wrapperSrc = path.join(SRC_DIR, 'codeagent-wrapper.sh');
|
|
112
|
+
const wrapperDest = path.join(BIN_DIR, 'codeagent-wrapper');
|
|
113
|
+
fs.copyFileSync(wrapperSrc, wrapperDest);
|
|
114
|
+
fs.chmodSync(wrapperDest, '755');
|
|
115
|
+
|
|
116
|
+
// 替换路径
|
|
117
|
+
const homeDir = process.env.HOME;
|
|
118
|
+
const filesToUpdate = [
|
|
119
|
+
path.join(CCG_DIR, 'config.toml'),
|
|
120
|
+
...fs.readdirSync(COMMANDS_DIR)
|
|
121
|
+
.filter(f => f.endsWith('.md'))
|
|
122
|
+
.map(f => path.join(COMMANDS_DIR, f))
|
|
123
|
+
];
|
|
124
|
+
|
|
125
|
+
filesToUpdate.forEach(file => {
|
|
126
|
+
replaceInFile(file, {
|
|
127
|
+
'/Users/super': homeDir,
|
|
128
|
+
'\\$HOME': homeDir
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
console.log('\n✅ 安装完成!\n');
|
|
133
|
+
|
|
134
|
+
// 询问是否配置 API
|
|
135
|
+
const configApi = await question('是否现在配置 API 密钥? (Y/n): ');
|
|
136
|
+
if (configApi.toLowerCase() !== 'n') {
|
|
137
|
+
await configureApiKeys();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
console.log('\n📖 使用方法:');
|
|
141
|
+
console.log(' 在 Claude Code 中使用 /ccg:workflow <任务描述>');
|
|
142
|
+
console.log(' 查看所有命令:/ccg:<Tab>');
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async function configureApiKeys() {
|
|
146
|
+
console.log('\n🔑 配置 API 密钥\n');
|
|
147
|
+
|
|
148
|
+
const geminiKey = await question('Gemini API Key (留空跳过): ');
|
|
149
|
+
const geminiBaseUrl = await question('Gemini Base URL (默认 https://api.ikuncode.cc): ');
|
|
150
|
+
const codexKey = await question('Codex API Key (留空跳过): ');
|
|
151
|
+
|
|
152
|
+
// 检测 shell 配置文件
|
|
153
|
+
const shellRc = fs.existsSync(path.join(process.env.HOME, '.zshrc'))
|
|
154
|
+
? '.zshrc'
|
|
155
|
+
: '.bashrc';
|
|
156
|
+
const rcPath = path.join(process.env.HOME, shellRc);
|
|
157
|
+
|
|
158
|
+
let rcContent = fs.existsSync(rcPath) ? fs.readFileSync(rcPath, 'utf8') : '';
|
|
159
|
+
|
|
160
|
+
// 添加环境变量
|
|
161
|
+
const envVars = [];
|
|
162
|
+
if (geminiKey) {
|
|
163
|
+
envVars.push(`export GEMINI_API_KEY="${geminiKey}"`);
|
|
164
|
+
envVars.push(`export GOOGLE_GEMINI_BASE_URL="${geminiBaseUrl || 'https://api.ikuncode.cc'}"`);
|
|
165
|
+
envVars.push('export GEMINI_MODEL="gemini-3-pro-preview"');
|
|
166
|
+
}
|
|
167
|
+
if (codexKey) {
|
|
168
|
+
envVars.push(`export CODEX_API_KEY="${codexKey}"`);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (envVars.length > 0) {
|
|
172
|
+
const marker = '# CCG-ROS2-Workflow';
|
|
173
|
+
if (!rcContent.includes(marker)) {
|
|
174
|
+
rcContent += `\n${marker}\n${envVars.join('\n')}\n`;
|
|
175
|
+
fs.writeFileSync(rcPath, rcContent);
|
|
176
|
+
console.log(`\n✅ 已添加到 ~/${shellRc}`);
|
|
177
|
+
console.log(` 请运行: source ~/${shellRc}`);
|
|
178
|
+
} else {
|
|
179
|
+
console.log(`\n⚠️ ~/${shellRc} 中已存在配置,请手动更新`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async function uninstall() {
|
|
185
|
+
console.log('\n🗑️ 卸载工作流...\n');
|
|
186
|
+
|
|
187
|
+
const confirm = await question('确定要卸载吗?这将删除所有配置文件 (y/N): ');
|
|
188
|
+
if (confirm.toLowerCase() !== 'y') {
|
|
189
|
+
console.log('取消卸载');
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// 删除目录
|
|
194
|
+
[CCG_DIR, COMMANDS_DIR].forEach(dir => {
|
|
195
|
+
if (fs.existsSync(dir)) {
|
|
196
|
+
fs.rmSync(dir, { recursive: true });
|
|
197
|
+
console.log(`已删除: ${dir}`);
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
// 删除 codeagent-wrapper
|
|
202
|
+
const wrapperPath = path.join(BIN_DIR, 'codeagent-wrapper');
|
|
203
|
+
if (fs.existsSync(wrapperPath)) {
|
|
204
|
+
fs.unlinkSync(wrapperPath);
|
|
205
|
+
console.log(`已删除: ${wrapperPath}`);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
console.log('\n✅ 卸载完成');
|
|
209
|
+
console.log('注意: 环境变量需要手动从 ~/.zshrc 或 ~/.bashrc 中删除');
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
main().catch(console.error);
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ccg-ros2-workflow",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "ROS2 Multi-model Collaborative Development Workflow - Codex (Low-level) + Gemini (High-level) + Claude (Orchestration)",
|
|
5
|
+
"main": "bin/cli.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"ccg-ros2-workflow": "bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "echo \"No tests yet\""
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"ros2",
|
|
14
|
+
"humble",
|
|
15
|
+
"claude-code",
|
|
16
|
+
"codex",
|
|
17
|
+
"gemini",
|
|
18
|
+
"multi-model",
|
|
19
|
+
"robotics",
|
|
20
|
+
"workflow"
|
|
21
|
+
],
|
|
22
|
+
"author": "super",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/你的用户名/ccg-ros2-workflow.git"
|
|
27
|
+
},
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=16.0.0"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"bin/",
|
|
33
|
+
"src/"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# codeagent-wrapper - 跨平台多模型调用脚本
|
|
3
|
+
# 用于 CCG-ROS2-Workflow
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
BACKEND=""
|
|
8
|
+
LITE=""
|
|
9
|
+
RESUME_ID=""
|
|
10
|
+
WORKDIR="$(pwd)"
|
|
11
|
+
LOG_DIR="/tmp/ccg-wrapper"
|
|
12
|
+
|
|
13
|
+
# 解析参数
|
|
14
|
+
while [[ $# -gt 0 ]]; do
|
|
15
|
+
case $1 in
|
|
16
|
+
--lite)
|
|
17
|
+
LITE="true"
|
|
18
|
+
shift
|
|
19
|
+
;;
|
|
20
|
+
--backend)
|
|
21
|
+
BACKEND="$2"
|
|
22
|
+
shift 2
|
|
23
|
+
;;
|
|
24
|
+
resume)
|
|
25
|
+
RESUME_ID="$2"
|
|
26
|
+
shift 2
|
|
27
|
+
;;
|
|
28
|
+
-)
|
|
29
|
+
WORKDIR="$2"
|
|
30
|
+
shift 2
|
|
31
|
+
;;
|
|
32
|
+
*)
|
|
33
|
+
shift
|
|
34
|
+
;;
|
|
35
|
+
esac
|
|
36
|
+
done
|
|
37
|
+
|
|
38
|
+
# 创建日志目录
|
|
39
|
+
mkdir -p "$LOG_DIR"
|
|
40
|
+
LOG_FILE="$LOG_DIR/wrapper-$$.log"
|
|
41
|
+
|
|
42
|
+
# 读取 stdin
|
|
43
|
+
PROMPT=$(cat)
|
|
44
|
+
|
|
45
|
+
# 记录日志
|
|
46
|
+
echo "[$(date)] Backend: $BACKEND, Resume: $RESUME_ID, Workdir: $WORKDIR" >> "$LOG_FILE"
|
|
47
|
+
|
|
48
|
+
# 切换工作目录
|
|
49
|
+
cd "$WORKDIR" 2>/dev/null || cd "$HOME"
|
|
50
|
+
|
|
51
|
+
# 生成 SESSION_ID
|
|
52
|
+
SESSION_ID="${RESUME_ID:-$(uuidgen 2>/dev/null || cat /proc/sys/kernel/random/uuid 2>/dev/null || echo "sess-$$-$(date +%s)")}"
|
|
53
|
+
|
|
54
|
+
# 调用对应的后端
|
|
55
|
+
case "$BACKEND" in
|
|
56
|
+
codex)
|
|
57
|
+
# Codex CLI 调用
|
|
58
|
+
if command -v codex &> /dev/null; then
|
|
59
|
+
echo "$PROMPT" | codex -a auto -q 2>> "$LOG_FILE"
|
|
60
|
+
else
|
|
61
|
+
echo "[ERROR] codex CLI 未安装" >&2
|
|
62
|
+
echo "请安装: npm install -g @openai/codex-cli" >&2
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
;;
|
|
66
|
+
gemini)
|
|
67
|
+
# Gemini CLI 调用
|
|
68
|
+
if command -v gemini &> /dev/null; then
|
|
69
|
+
echo "$PROMPT" | gemini -p - 2>> "$LOG_FILE"
|
|
70
|
+
else
|
|
71
|
+
echo "[ERROR] gemini CLI 未安装" >&2
|
|
72
|
+
echo "请安装: npm install -g @google/gemini-cli" >&2
|
|
73
|
+
exit 1
|
|
74
|
+
fi
|
|
75
|
+
;;
|
|
76
|
+
*)
|
|
77
|
+
echo "[ERROR] 未知的后端: $BACKEND" >&2
|
|
78
|
+
echo "支持的后端: codex, gemini" >&2
|
|
79
|
+
exit 1
|
|
80
|
+
;;
|
|
81
|
+
esac
|
|
82
|
+
|
|
83
|
+
# 输出 SESSION_ID
|
|
84
|
+
echo ""
|
|
85
|
+
echo "---"
|
|
86
|
+
echo "SESSION_ID: $SESSION_ID"
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: '多模型技术分析(并行执行):Codex 后端视角 + Gemini 前端视角,交叉验证后综合见解'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Analyze - 多模型技术分析
|
|
6
|
+
|
|
7
|
+
使用双模型并行分析,交叉验证得出综合技术见解。**仅分析,不修改代码。**
|
|
8
|
+
|
|
9
|
+
## 使用方法
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
/analyze <分析问题或任务>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 你的角色
|
|
16
|
+
|
|
17
|
+
你是**分析协调者**,编排多模型分析流程:
|
|
18
|
+
- **ace-tool** – 代码上下文检索
|
|
19
|
+
- **Codex** – 后端/系统视角(**后端权威**)
|
|
20
|
+
- **Gemini** – 前端/用户视角(**前端权威**)
|
|
21
|
+
- **Claude (自己)** – 综合见解
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 多模型调用规范
|
|
26
|
+
|
|
27
|
+
**调用语法**(并行用 `run_in_background: true`):
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
Bash({
|
|
31
|
+
command: "/Users/super/.claude/bin/codeagent-wrapper --lite --backend <codex|gemini> - \"$PWD\" <<'EOF'
|
|
32
|
+
ROLE_FILE: <角色提示词路径>
|
|
33
|
+
<TASK>
|
|
34
|
+
需求:<增强后的需求(如未增强则用 $ARGUMENTS)>
|
|
35
|
+
上下文:<前序阶段检索到的代码上下文>
|
|
36
|
+
</TASK>
|
|
37
|
+
OUTPUT: 期望输出格式
|
|
38
|
+
EOF",
|
|
39
|
+
run_in_background: true,
|
|
40
|
+
timeout: 3600000,
|
|
41
|
+
description: "简短描述"
|
|
42
|
+
})
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**角色提示词**:
|
|
46
|
+
|
|
47
|
+
| 模型 | 提示词 |
|
|
48
|
+
|------|--------|
|
|
49
|
+
| Codex | `/Users/super/.claude/.ccg/prompts/codex/analyzer.md` |
|
|
50
|
+
| Gemini | `/Users/super/.claude/.ccg/prompts/gemini/analyzer.md` |
|
|
51
|
+
|
|
52
|
+
**并行调用**:使用 `run_in_background: true` 启动,用 `TaskOutput` 等待结果。**必须等所有模型返回后才能进入下一阶段**。
|
|
53
|
+
|
|
54
|
+
**等待后台任务**(使用最大超时 600000ms = 10 分钟):
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**重要**:
|
|
61
|
+
- 必须指定 `timeout: 600000`,否则默认只有 30 秒会导致提前超时。
|
|
62
|
+
如果 10 分钟后仍未完成,继续用 `TaskOutput` 轮询,**绝对不要 Kill 进程**。
|
|
63
|
+
- 若因等待时间过长跳过了等待 TaskOutput 结果,则**必须调用 `AskUserQuestion` 工具询问用户选择继续等待还是 Kill Task。禁止直接 Kill Task。**
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 执行工作流
|
|
68
|
+
|
|
69
|
+
**分析任务**:$ARGUMENTS
|
|
70
|
+
|
|
71
|
+
### 🔍 阶段 0:Prompt 增强(可选)
|
|
72
|
+
|
|
73
|
+
`[模式:准备]` - 如 ace-tool MCP 可用,调用 `mcp__ace-tool__enhance_prompt`,**用增强结果替代原始 $ARGUMENTS,后续调用 Codex/Gemini 时传入增强后的需求**
|
|
74
|
+
|
|
75
|
+
### 🔍 阶段 1:上下文检索
|
|
76
|
+
|
|
77
|
+
`[模式:研究]`
|
|
78
|
+
|
|
79
|
+
1. 调用 `mcp__ace-tool__search_context` 检索相关代码
|
|
80
|
+
2. 识别分析范围和关键组件
|
|
81
|
+
3. 列出已知约束和假设
|
|
82
|
+
|
|
83
|
+
### 💡 阶段 2:并行分析
|
|
84
|
+
|
|
85
|
+
`[模式:分析]`
|
|
86
|
+
|
|
87
|
+
**⚠️ 必须发起两个并行 Bash 调用**(参照上方调用规范):
|
|
88
|
+
|
|
89
|
+
1. **Codex 后端分析**:`Bash({ command: "...--backend codex...", run_in_background: true })`
|
|
90
|
+
- ROLE_FILE: `/Users/super/.claude/.ccg/prompts/codex/analyzer.md`
|
|
91
|
+
- OUTPUT:技术可行性、架构影响、性能考量
|
|
92
|
+
|
|
93
|
+
2. **Gemini 前端分析**:`Bash({ command: "...--backend gemini...", run_in_background: true })`
|
|
94
|
+
- ROLE_FILE: `/Users/super/.claude/.ccg/prompts/gemini/analyzer.md`
|
|
95
|
+
- OUTPUT:UI/UX 影响、用户体验、视觉设计考量
|
|
96
|
+
|
|
97
|
+
用 `TaskOutput` 等待两个模型的完整结果。**必须等所有模型返回后才能进入下一阶段**。
|
|
98
|
+
|
|
99
|
+
**务必遵循上方 `多模型调用规范` 的 `重要` 指示**
|
|
100
|
+
|
|
101
|
+
### 🔀 阶段 3:交叉验证
|
|
102
|
+
|
|
103
|
+
`[模式:验证]`
|
|
104
|
+
|
|
105
|
+
1. 对比双方分析结果
|
|
106
|
+
2. 识别:
|
|
107
|
+
- **一致观点**(强信号)
|
|
108
|
+
- **分歧点**(需权衡)
|
|
109
|
+
- **互补见解**(各自领域洞察)
|
|
110
|
+
3. 按信任规则权衡:后端以 Codex 为准,前端以 Gemini 为准
|
|
111
|
+
|
|
112
|
+
### 📊 阶段 4:综合输出
|
|
113
|
+
|
|
114
|
+
`[模式:总结]`
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
## 🔬 技术分析:<主题>
|
|
118
|
+
|
|
119
|
+
### 一致观点(强信号)
|
|
120
|
+
1. <双方都认同的点>
|
|
121
|
+
|
|
122
|
+
### 分歧点(需权衡)
|
|
123
|
+
| 议题 | Codex 观点 | Gemini 观点 | 建议 |
|
|
124
|
+
|------|------------|-------------|------|
|
|
125
|
+
|
|
126
|
+
### 核心结论
|
|
127
|
+
<1-2 句话总结>
|
|
128
|
+
|
|
129
|
+
### 推荐方案
|
|
130
|
+
**首选**:<方案>
|
|
131
|
+
- 理由 / 风险 / 缓解措施
|
|
132
|
+
|
|
133
|
+
### 后续行动
|
|
134
|
+
1. [ ] <具体步骤>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 适用场景
|
|
140
|
+
|
|
141
|
+
| 场景 | 示例 |
|
|
142
|
+
|------|------|
|
|
143
|
+
| 技术选型 | "比较 Redux vs Zustand" |
|
|
144
|
+
| 架构评估 | "评估微服务拆分方案" |
|
|
145
|
+
| 性能分析 | "分析 API 响应慢的原因" |
|
|
146
|
+
| 安全审计 | "评估认证模块安全性" |
|
|
147
|
+
|
|
148
|
+
## 关键规则
|
|
149
|
+
|
|
150
|
+
1. **仅分析不修改** – 本命令不执行任何代码变更
|
|
151
|
+
2. **信任规则** – 后端以 Codex 为准,前端以 Gemini 为准
|
|
152
|
+
3. 外部模型对文件系统**零写入权限**
|