cc-agents 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 tju-tomorrow
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,230 @@
1
+ # cc-agents
2
+
3
+ 三面板 TUI,让 engineer、Genius Challenger、judge 三个 AI agent 相互博弈,帮你把问题想清楚。
4
+
5
+ ```
6
+ ┌─────────────────┬─────────────────┬─────────────────┬────────────────────┐
7
+ │ 1 engineer │ 2 Genius │ 3 judge │ ● engineer │
8
+ │ │ Challenger │ │ MiniMax-M3 │
9
+ │ 给出技术方案 │ 质疑 + 巧思 │ 组会导师反问 │ 45k/200k 22% │
10
+ │ 解释理由 │ 提更深方案 │ 适时追问双方 │ ● genius │
11
+ │ │ │ │ claude-opus-4-7 │
12
+ │ │ │ │ 12k/200k 6% │
13
+ │ │ │ │ ● judge │
14
+ │ │ │ │ claude-opus-4-7 │
15
+ │ │ │ │ 8k/200k 4% │
16
+ │ │ │ │ ──────────────────│
17
+ │ │ │ │ Σ 65k │
18
+ │ │ │ │ tokens │
19
+ └─────────────────┴─────────────────┴─────────────────┴────────────────────┘
20
+ → engineer /engineer /genius /judge /summarize /clear · Tab 预填 · 1/2/3 切换栏
21
+ > _
22
+ ```
23
+
24
+ ## 工作流程
25
+
26
+ 1. 输入问题 → **engineer** 调用工具、查阅代码,给出方案
27
+ 2. `/genius 你觉得这个假设合理吗` → **Genius Challenger** 质疑 engineer + 给一个巧思
28
+ 3. `/judge` → **judge**(组会导师)观察双方,适时反问,给出下一步追问
29
+ 4. 按 `Tab` 预填追问,继续下一轮
30
+ 5. `/summarize` → 生成讨论总结写入 `docs/`
31
+
32
+ ## 安装
33
+
34
+ 需要 Node.js ≥ 22.19。
35
+
36
+ ```bash
37
+ git clone <repo>
38
+ cd cc-agents
39
+ npm install
40
+ ```
41
+
42
+ ## 配置
43
+
44
+ 在你的项目根目录(即运行 cc-agents 的目录)创建 `.cc-agents/settings.json`:
45
+
46
+ ```json
47
+ {
48
+ "engineer": {
49
+ "model": "claude-sonnet-4-6",
50
+ "apiKey": "sk-ant-...",
51
+ "themeColor": "#79c0ff"
52
+ },
53
+ "genius": {
54
+ "model": "claude-opus-4-7",
55
+ "apiKey": "sk-ant-..."
56
+ },
57
+ "judge": {
58
+ "model": "claude-opus-4-7",
59
+ "apiKey": "sk-ant-..."
60
+ }
61
+ }
62
+ ```
63
+
64
+ system prompt、temperature 等已内置,settings.json 只需填 `apiKey`、`model`、`themeColor`(可选)。参考完整示例:`.cc-agents/settings.example.json`。
65
+
66
+ ### 兼容其他 API
67
+
68
+ 任何兼容 Anthropic API 格式的服务都可以接入,通过 `baseUrl` 和 `authType` 字段指定:
69
+
70
+ ```json
71
+ {
72
+ "engineer": {
73
+ "baseUrl": "https://api.minimaxi.com/anthropic",
74
+ "authType": "bearer",
75
+ "model": "MiniMax-M3",
76
+ "apiKey": "your-key"
77
+ }
78
+ }
79
+ ```
80
+
81
+ `authType` 默认为 `"api-key"`(使用 `x-api-key` 请求头),设为 `"bearer"` 则使用 `Authorization: Bearer` 请求头。
82
+
83
+ ## 启动
84
+
85
+ ```bash
86
+ # 在你的项目目录下运行
87
+ cd /your/project
88
+ npx --prefix /path/to/cc-agents cc-agents
89
+
90
+ # 或者全局安装后
91
+ npm link # 在 cc-agents 目录执行一次
92
+ cd /your/project
93
+ cc-agents
94
+ ```
95
+
96
+ ## 命令
97
+
98
+ | 命令 | 说明 |
99
+ |------|------|
100
+ | `直接输入` | 发送给当前模式的 agent(engineer 或 genius) |
101
+ | `/engineer [内容]` | 切换到 engineer 模式,可附带消息 |
102
+ | `/genius [内容]` | 切换到 Genius Challenger 模式,可附带消息 |
103
+ | `/judge` | 触发 judge(组会导师)反问当前局势 |
104
+ | `/summarize` | 让 judge 生成总结文档并写入 `docs/` |
105
+ | `/resume` | 恢复上次保存的对话历史(断点续会) |
106
+ | `/copy engineer\|genius\|judge\|all` | 复制面板内容到剪贴板 |
107
+ | `/clear` | 清空所有面板和对话历史(二次确认) |
108
+ | `/hide engineer\|genius\|judge` | 隐藏指定面板,重启后保留 |
109
+ | `/show engineer\|genius\|judge\|all` | 显示指定面板 |
110
+ | `/skills` | 列出 `.cc-agents/skills/` 下所有可用 skill |
111
+ | `/help` | 显示帮助(独立全屏窗口) |
112
+
113
+ ## 键盘快捷键
114
+
115
+ | 按键 | 说明 |
116
+ |------|------|
117
+ | `↑ / ↓` | 滚动当前模式面板(随时可用,无需切焦点) |
118
+ | `Cmd+1 / 2 / 3` | 聚焦指定面板,之后可用 `↑/↓` 滚动 |
119
+ | `Tab`(面板焦点中) | 循环切换面板焦点 |
120
+ | `Tab`(输入框中) | 预填 judge 建议的追问 |
121
+ | `Esc` | 退出面板焦点,回到输入框;取消待确认的 `/clear` |
122
+ | `Alt+1 / 2 / 3` | 切换面板显示/隐藏(持久化) |
123
+ | `Ctrl+C / Ctrl+Q` | 退出 |
124
+
125
+ ## Agent 工具权限
126
+
127
+ 每个 agent 的工具权限不同,engineer 可写文件,genius 只读:
128
+
129
+ | 工具 | engineer | genius | 说明 |
130
+ |------|:--------:|:------:|------|
131
+ | `read_file` | ✓ | ✓ | 读取文件,支持行范围 |
132
+ | `list_dir` | ✓ | ✓ | 列出目录内容 |
133
+ | `grep` | ✓ | ✓ | 正则/字符串搜索 |
134
+ | `find` | ✓ | ✓ | 按名称查找文件 |
135
+ | `write_file` | ✓ | — | 写入/覆盖文件 |
136
+ | `edit_file` | ✓ | — | 替换文件中的字符串 |
137
+ | `bash` | ✓ | — | 执行 shell 命令(删除操作被屏蔽) |
138
+
139
+ genius 只有读权限,确保它聚焦质疑而不是执行修改。
140
+
141
+ ## 长会话管理
142
+
143
+ cc-agents 内置了多层机制保障长会话的稳定性:
144
+
145
+ ### 自动压缩历史
146
+
147
+ 当 engineer 的上下文用量超过 **75%**(即 200k 窗口的 150k)时,会自动将老轮次压缩为 Markdown 摘要,保留最近 2 轮原文。压缩后 engineer 面板会显示提示:
148
+
149
+ ```
150
+ ✓ 已将 N 轮历史压缩为摘要(保留最近 2 轮原文)
151
+ ```
152
+
153
+ 压缩失败时 non-fatal,跳过后继续正常运行。
154
+
155
+ ### 上下文压力预警
156
+
157
+ 侧边栏的 token 使用率按压力等级着色:
158
+
159
+ - 正常(< 70%):暗色
160
+ - **警告(≥ 70%)**:橙色
161
+ - **危险(≥ 90%)**:红色加粗
162
+
163
+ 当 engineer 上下文超过 **50%** 时,judge 面板还会弹出文字提示,建议 `/summarize` 归档。
164
+
165
+ ### 断点续会
166
+
167
+ 每次 engineer/genius 响应后,会话状态自动写入 `.cc-agents/sessions/current.json`。下次启动后用 `/resume` 恢复:
168
+
169
+ ```
170
+ /resume
171
+ ✓ 已恢复会话(含历史压缩摘要)
172
+ 保存时间:2026/6/22 14:30:00
173
+ 历史轮次:8 轮
174
+ 当前模式:engineer
175
+ ```
176
+
177
+ `/clear` 会同步清除保存的会话文件。
178
+
179
+ ## 侧边栏
180
+
181
+ 右侧侧边栏实时显示每个 agent 的状态:
182
+
183
+ - **● / ○**:面板当前是否可见
184
+ - **模型名称**:来自配置的 `model` 字段
185
+ - **上下文压力**:`当前输入 token / 上下文窗口 百分比`(颜色随压力变化)
186
+ - **Σ tokens**:三个 agent 的累计 token 消耗
187
+
188
+ ## Token Tracker(可选)
189
+
190
+ 启用后在本地起一个 Web 服务,实时展示每次 API 调用的 token 用量、耗时、模型分布等指标:
191
+
192
+ ```json
193
+ {
194
+ "tokenTracker": {
195
+ "enabled": true,
196
+ "port": 3131
197
+ }
198
+ }
199
+ ```
200
+
201
+ 启动后 URL 会在侧边栏显示 8 秒,之后可在浏览器访问 `http://localhost:3131`。
202
+
203
+ ## 项目级上下文
204
+
205
+ cc-agents 会自动读取你项目下的以下内容注入 agent 系统提示:
206
+
207
+ - `AGENTS.md` — 项目说明、约定、背景知识
208
+ - `package.json` — 项目名和描述
209
+ - `.cc-agents/skills/` — 自定义技能文件夹
210
+
211
+ 技能文件格式示例(`.cc-agents/skills/my-skill/SKILL.md`):
212
+
213
+ ```markdown
214
+ ---
215
+ name: my-skill
216
+ description: 描述这个技能做什么
217
+ ---
218
+
219
+ 具体指令内容…
220
+ ```
221
+
222
+ 当用户任务与某个 skill 的 description 匹配时,LLM 会自动读取对应 SKILL.md 并按其指令行事。`/skills` 命令可列出当前所有可用 skill。
223
+
224
+ ## 面板持久化
225
+
226
+ `/hide` 和 `Alt+1/2/3` 切换的面板可见性会自动保存到 `.cc-agents/settings.json` 的 `panels` 字段,重启后恢复。
227
+
228
+ ## 图片粘贴(macOS)
229
+
230
+ 在输入框中粘贴剪贴板图片(`Cmd+V`),会生成占位符 `[Image #1]`。发送消息时图片会作为附件一并传给 engineer 或 genius(需模型支持视觉输入)。
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from "node:child_process";
3
+ import { fileURLToPath } from "node:url";
4
+ import { dirname, join } from "node:path";
5
+
6
+ const __dir = dirname(fileURLToPath(import.meta.url));
7
+ const entry = join(__dir, "..", "dist", "index.js");
8
+
9
+ const child = spawn(process.execPath, [entry], {
10
+ stdio: "inherit",
11
+ env: process.env,
12
+ cwd: process.cwd(),
13
+ });
14
+ child.on("exit", (code, signal) => {
15
+ if (signal) process.kill(process.pid, signal);
16
+ else process.exit(code ?? 0);
17
+ });