chatccc 0.2.272 → 0.2.277
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 +24 -22
- package/config.sample.json +4 -4
- package/deepccc-agent/README.md +147 -79
- package/deepccc-agent/package.json +68 -65
- package/dist/deepccc-agent/src/attachments.js +192 -0
- package/dist/deepccc-agent/src/cli.js +54 -13
- package/dist/deepccc-agent/src/config.js +49 -4
- package/dist/deepccc-agent/src/context.js +292 -16
- package/dist/deepccc-agent/src/file-tools.js +33 -0
- package/dist/deepccc-agent/src/index.js +48 -16
- package/dist/deepccc-agent/src/tool-protocol.js +14 -3
- package/dist/deepccc-agent/src/web-entry.js +72 -0
- package/dist/deepccc-agent/src/web-page.js +414 -0
- package/dist/deepccc-agent/src/web-runtime.js +331 -0
- package/dist/deepccc-agent/src/web-server.js +476 -0
- package/dist/deepccc-agent/src/web-session-store.js +162 -0
- package/dist/deepccc-agent/src/web-tool-presentation.js +123 -0
- package/dist/src/adapters/ccc-adapter.js +1 -0
- package/dist/src/agent-capability-grants.js +26 -0
- package/dist/src/agent-delegate-task.js +5 -2
- package/dist/src/agent-file-rpc.js +6 -1
- package/dist/src/agent-image-rpc.js +6 -1
- package/dist/src/agent-team/web/agent-team-page.js +250 -250
- package/dist/src/cards.js +7 -4
- package/dist/src/im-skills.js +9 -2
- package/dist/src/orchestrator.js +117 -29
- package/dist/src/session-name.js +15 -0
- package/dist/src/session.js +43 -7
- package/dist/src/web-ui.js +68 -51
- package/im-skills/feishu-skill/receive-send-file.md +3 -2
- package/im-skills/feishu-skill/receive-send-image.md +3 -2
- package/im-skills/feishu-skill/send-file.mjs +6 -5
- package/im-skills/feishu-skill/send-image.mjs +6 -5
- package/im-skills/feishu-skill/skill.md +4 -2
- package/package.json +76 -76
package/README.md
CHANGED
|
@@ -155,15 +155,15 @@ chatccc
|
|
|
155
155
|
|
|
156
156
|
#### 本地任务看板(Agent Team)
|
|
157
157
|
|
|
158
|
-
Agent Team 提供本地任务看板和项目主 Agent 入口。每个规范化后的本机目录对应一个独立项目和看板,固定包含“头脑风暴、Todo、Doing、Done、搁置”五列,支持新增、单击卡片编辑、拖动排序和删除任务。页面会自动保存,不需要手动提交。当前按路径识别项目,不检查 Git 仓库或 worktree 关系,任意子目录都可以作为独立项目。
|
|
158
|
+
Agent Team 提供本地任务看板和项目主 Agent 入口。每个规范化后的本机目录对应一个独立项目和看板,固定包含“头脑风暴、Todo、Doing、Done、搁置”五列,支持新增、单击卡片编辑、拖动排序和删除任务。页面会自动保存,不需要手动提交。当前按路径识别项目,不检查 Git 仓库或 worktree 关系,任意子目录都可以作为独立项目。
|
|
159
159
|
|
|
160
|
-
打开项目后可以选择 CCC、Claude、Cursor 或 Codex 作为主 Agent。首次设置会创建固定命名为 `主Agent-<目录短名>` 的飞书群和空 Agent Session;后续切换 Agent 或重新关联目录会复用原群,运行中的主 Agent 不允许切换。建群成员取自机器人最近一次收到的飞书私聊;如果尚无私聊记录,网页会提示先给机器人发送任意私聊消息并自动检测。项目群名不会随第一句话或 `/forget` 改变。
|
|
160
|
+
打开项目后可以选择 CCC、Claude、Cursor 或 Codex 作为主 Agent。首次设置会创建固定命名为 `主Agent-<目录短名>` 的飞书群和空 Agent Session;后续切换 Agent 或重新关联目录会复用原群,运行中的主 Agent 不允许切换。建群成员取自机器人最近一次收到的飞书私聊;如果尚无私聊记录,网页会提示先给机器人发送任意私聊消息并自动检测。项目群名不会随第一句话或 `/forget` 改变。
|
|
161
|
+
|
|
162
|
+
任务卡片可通过“交给主 Agent”启动真实执行:任务会从 Todo 移到 Doing,成功后自动移到 Done,失败、停止或中断则移到搁置并显示具体原因,支持安全重试。同一项目同一时间只运行一个看板任务;每次尝试都有独立的 Run ID、Trace ID、失败类型、耗时和完整执行时间线,可以在任务详情中切换历史尝试或复制记录。
|
|
163
|
+
|
|
164
|
+
运行中的时间线和最后进度会定期持久化;长时间没有进度会在看板中标记为疑似停滞,停止请求超过截止时间会强制收敛到终态。服务异常退出后会保留最后已写入的执行过程并把未完成任务标记为中断;启动时还会自动对账任务终态与卡片列,修复“Agent 已完成但卡片移动失败”等部分成功。损坏的单条运行 JSON 会被隔离为 `.corrupt-*` 文件,不会阻断同项目其他历史记录。
|
|
161
165
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
运行中的时间线和最后进度会定期持久化;长时间没有进度会在看板中标记为疑似停滞,停止请求超过截止时间会强制收敛到终态。服务异常退出后会保留最后已写入的执行过程并把未完成任务标记为中断;启动时还会自动对账任务终态与卡片列,修复“Agent 已完成但卡片移动失败”等部分成功。损坏的单条运行 JSON 会被隔离为 `.corrupt-*` 文件,不会阻断同项目其他历史记录。
|
|
165
|
-
|
|
166
|
-
看板数据默认保存在 `~/.chatccc/agent-team/`,其中 `workspaces.json` 保存最近工作目录索引,`boards/` 保存按稳定 ID 分隔的看板 JSON,`main-agent-bindings/` 单独保存本机飞书群与 Session 绑定,`task-runs/` 保存每次任务执行及其诊断时间线。目录移动或重命名后,可从最近目录列表重新关联。数据访问通过仓储接口隔离,后续接入飞书多维表格时可增加双向同步适配器,无需把本机群聊和 Session 状态混入任务同步模型。选择目录、创建群聊和启动 Agent 等操作都由本机 Node 后端执行;当前实现不依赖 Electron。
|
|
166
|
+
看板数据默认保存在 `~/.chatccc/agent-team/`,其中 `workspaces.json` 保存最近工作目录索引,`boards/` 保存按稳定 ID 分隔的看板 JSON,`main-agent-bindings/` 单独保存本机飞书群与 Session 绑定,`task-runs/` 保存每次任务执行及其诊断时间线。目录移动或重命名后,可从最近目录列表重新关联。数据访问通过仓储接口隔离,后续接入飞书多维表格时可增加双向同步适配器,无需把本机群聊和 Session 状态混入任务同步模型。选择目录、创建群聊和启动 Agent 等操作都由本机 Node 后端执行;当前实现不依赖 Electron。
|
|
167
167
|
|
|
168
168
|
#### 从源码运行
|
|
169
169
|
|
|
@@ -224,9 +224,11 @@ Claude Code、Cursor 和 Codex 需要对应的本地工具;CCC Agent 内置于
|
|
|
224
224
|
|
|
225
225
|
#### CCC Agent
|
|
226
226
|
|
|
227
|
-
CCC Agent 是 ChatCCC 内置的编程 Agent,不需要额外安装 CLI,开箱即用。在首次配置向导或 Web 管理页中启用后,填写 API Key、Base URL 和模型即可使用;它可以设为 `/new` 的默认 Agent,也可以通过 `/new ccc` 显式创建会话。
|
|
227
|
+
CCC Agent 是 ChatCCC 内置的编程 Agent,不需要额外安装 CLI,开箱即用。在首次配置向导或 Web 管理页中启用后,填写 API Key、Base URL 和模型即可使用;它可以设为 `/new` 的默认 Agent,也可以通过 `/new ccc` 显式创建会话。
|
|
228
|
+
|
|
229
|
+
DeepCCC 同时提供独立端口的本地 Web UI。ChatCCC 管理页顶部点击 **DeepCCC Web** 会复用或按需启动该服务;只全局安装 `deepccc` 的用户直接运行 `deepccc` 即可启动并打开网页版,终端模式改用 `deepccc-cli`。默认地址为 `http://127.0.0.1:28080/`,端口可通过 `~/.deepccc/config.json` 的 `web.port` 修改。网页版支持多会话并发、持久化历史、会话级 model/effort、API 设置和会话内高风险操作审批。
|
|
228
230
|
|
|
229
|
-
ChatCCC 会把 `ccc.DEEPSEEK_API_KEY`、`ccc.DEEPSEEK_BASE_URL` 和模型显式传给内置 Agent;API Key 为空时 CCC Agent 会自动保持禁用。`ccc.effort` 与 `ccc.maxOutputTokens` 是可选 override:非空时覆盖 DeepCCC,留空时跟随 `~/.deepccc/config.json` / `DEEPCCC_*` 环境变量,DeepCCC 也未配置时使用模型服务端默认值。DeepCCC 的传输层选项 `provider`(默认 `openai`)和 `streaming`(默认 `true`)同样可通过内核配置,无需额外安装独立 CLI。
|
|
231
|
+
ChatCCC 会把 `ccc.DEEPSEEK_API_KEY`、`ccc.DEEPSEEK_BASE_URL` 和模型显式传给内置 Agent;API Key 为空时 CCC Agent 会自动保持禁用。`ccc.effort` 与 `ccc.maxOutputTokens` 是可选 override:非空时覆盖 DeepCCC,留空时跟随 `~/.deepccc/config.json` / `DEEPCCC_*` 环境变量,DeepCCC 也未配置时使用模型服务端默认值。DeepCCC 的传输层选项 `provider`(默认 `openai`)和 `streaming`(默认 `true`)同样可通过内核配置,无需额外安装独立 CLI。
|
|
230
232
|
|
|
231
233
|
**协议 override:** 也可以在 ChatCCC 的配置(`config.json` 的 `ccc.provider`,或 Web 管理页的「CCC Agent → API 协议」)显式指定 `openai` / `anthropic` 覆盖内核配置;留空(默认)时跟随 `~/.deepccc/config.json` / `DEEPCCC_PROVIDER`。`streaming` 不做 override,始终由 DeepCCC 内核配置控制。
|
|
232
234
|
|
|
@@ -242,7 +244,7 @@ ChatCCC 会把 `ccc.DEEPSEEK_API_KEY`、`ccc.DEEPSEEK_BASE_URL` 和模型显式
|
|
|
242
244
|
| 通义千问 / 智谱 GLM / 豆包 / MiniMax | 各家 `…/v1` 端点 | 国内 OpenAI 兼容服务 |
|
|
243
245
|
| Ollama / vLLM / LM Studio | `http://localhost:11434/v1` | 本地或自建推理服务 |
|
|
244
246
|
|
|
245
|
-
更换服务只需把 `ccc.DEEPSEEK_BASE_URL` 改为对应端点、`ccc.DEEPSEEK_API_KEY` 改为对应 Key、`ccc.model` 改为目标模型名即可。`effort` 留空时不会由 ChatCCC override DeepCCC;若两边都留空,则不发送 `reasoning_effort`。只有确认目标模型支持时才应显式填写,否则服务端可能返回参数错误。余额查询仅对官方 DeepSeek 域名(`api.deepseek.com`)生效,指向其他端点时自动跳过,不影响对话。
|
|
247
|
+
更换服务只需把 `ccc.DEEPSEEK_BASE_URL` 改为对应端点、`ccc.DEEPSEEK_API_KEY` 改为对应 Key、`ccc.model` 改为目标模型名即可。`effort` 留空时不会由 ChatCCC override DeepCCC;若两边都留空,则不发送 `reasoning_effort`。只有确认目标模型支持时才应显式填写,否则服务端可能返回参数错误。余额查询仅对官方 DeepSeek 域名(`api.deepseek.com`)生效,指向其他端点时自动跳过,不影响对话。
|
|
246
248
|
|
|
247
249
|
`ccc.alternativeModel` 是单个备选模型,只会加入 `/model` 的人工切换列表,不会在请求失败时自动重试或切换,避免重复执行带副作用的工具调用。
|
|
248
250
|
|
|
@@ -385,9 +387,9 @@ Codex 的默认模型和推理强度可继续由 `~/.codex/config.toml` 管理
|
|
|
385
387
|
| `cursor.alternativeModel` / `codex.alternativeModel` / `ccc.alternativeModel` / `dsh.alternativeModel` | 单个备选模型;加入 `/model` 人工切换列表,不会自动故障转移 |
|
|
386
388
|
| `ccc.DEEPSEEK_API_KEY` / `ccc.DEEPSEEK_BASE_URL` | CCC Agent 的 API Key 和服务地址;**不限于 DeepSeek**——可填任意 OpenAI 兼容端点(OpenAI、Kimi、通义、智谱、Ollama 本地等) |
|
|
387
389
|
| `ccc.model` | CCC Agent 默认模型 |
|
|
388
|
-
| `ccc.subModel` | CCC Agent 子模型(选填):用于内部轻量环节(压缩摘要生成、task 子代理任务);留空跟随主模型 |
|
|
389
|
-
| `ccc.effort` | CCC Agent 推理强度 override;留空跟随 DeepCCC 内核配置,内核也留空时使用模型服务端默认值 |
|
|
390
|
-
| `ccc.maxOutputTokens` | CCC Agent 主对话最大输出 token override;正整数,`null`/留空时跟随 DeepCCC 内核配置,内核也未配置时使用模型服务端默认值 |
|
|
390
|
+
| `ccc.subModel` | CCC Agent 子模型(选填):用于内部轻量环节(压缩摘要生成、task 子代理任务);留空跟随主模型 |
|
|
391
|
+
| `ccc.effort` | CCC Agent 推理强度 override;留空跟随 DeepCCC 内核配置,内核也留空时使用模型服务端默认值 |
|
|
392
|
+
| `ccc.maxOutputTokens` | CCC Agent 主对话最大输出 token override;正整数,`null`/留空时跟随 DeepCCC 内核配置,内核也未配置时使用模型服务端默认值 |
|
|
391
393
|
| `ccc.compactionTimeoutMs` | CCC Agent 上下文压缩单轮超时(毫秒),默认 300000(5 分钟);压缩超时会让整轮对话失败,建议保持默认或调大 |
|
|
392
394
|
| `ccc.contextWindow` | CCC Agent 模型上下文窗口(token),默认 1048576(1M,DeepSeek V4 Pro/Flash 原生规格);压缩阈值自动 = 窗口 × 80%;超过模型/服务端实际上限会被 API 拒绝,可在 Web UI 下拉选择或自定义(单位 k) |
|
|
393
395
|
| `dsh.apiKey` / `dsh.baseUrl` | DeepSeek Harness 的 API Key 和官方 DeepSeek 服务地址 |
|
|
@@ -430,17 +432,17 @@ Codex 的默认模型和推理强度可继续由 `~/.codex/config.toml` 管理
|
|
|
430
432
|
| `/abd<内容>` | 去掉 `/abd` 前缀后把内容发给 Agent,并在消息末尾追加第一性原理需求澄清提示 |
|
|
431
433
|
| `/plan <内容>` | 只读计划模式:仅允许读文件和 stop-stuck-loop 请求,不执行任何写操作 |
|
|
432
434
|
| `/ask <内容>` | 只读问答模式:与 /plan 相同,仅允许读文件和 stop-stuck-loop 请求 |
|
|
433
|
-
| `/restart` | 重启机器人进程 |
|
|
434
|
-
| `/restart safe` | 停止接受新任务,等待现有会话、缓存消息和依赖安装完成后重启 |
|
|
435
|
-
| `/update` | 更新 npm 全局包并重启(仅限 `npm install -g chatccc` 安装的全局进程;同一飞书事件跨重启去重) |
|
|
436
|
-
| `/update safe` | 停止接受新任务,排空现有工作后更新并重启 |
|
|
437
|
-
| `/safestatus` | 查看安全重启/更新的等待状态 |
|
|
438
|
-
| `/cancelsf` | 取消尚未开始执行的安全重启/更新预约 |
|
|
435
|
+
| `/restart` | 重启机器人进程 |
|
|
436
|
+
| `/restart safe` / `/restartsf` | 停止接受新任务,等待现有会话、缓存消息和依赖安装完成后重启 |
|
|
437
|
+
| `/update` | 更新 npm 全局包并重启(仅限 `npm install -g chatccc` 安装的全局进程;同一飞书事件跨重启去重) |
|
|
438
|
+
| `/update safe` / `/updatesf` | 停止接受新任务,排空现有工作后更新并重启 |
|
|
439
|
+
| `/safestatus` | 查看安全重启/更新的等待状态 |
|
|
440
|
+
| `/cancelsf` | 取消尚未开始执行的安全重启/更新预约 |
|
|
439
441
|
| `/deleteg` | 解散当前飞书会话群;Agent 会话记录保留 |
|
|
440
442
|
|
|
441
|
-
`/update`
|
|
442
|
-
|
|
443
|
-
`/restart safe
|
|
443
|
+
`/update`、`/update safe` 与短别名 `/updatesf` 会把飞书消息或按钮事件 ID 原子写入 `~/.chatccc/state/update-command-guard.json`。同一 ID 跨重启重投时会静默忽略;用户主动发送的新更新指令因事件 ID 不同,仍可执行。该保护不改变普通消息与重启指令的处理方式。
|
|
444
|
+
|
|
445
|
+
`/restart safe`(短别名 `/restartsf`)与 `/update safe`(短别名 `/updatesf`)会先建立全局准入门禁:指令到达前已经运行或进入单会话缓存队列的工作会继续完成,之后到达的新普通任务会被提示在维护完成后重发。维护任务持久化到 `~/.chatccc/state/safe-maintenance.json`,进程意外退出后可继续排空;依赖安装、会话收尾、自动恢复和 Agent Teams 执行也计入等待条件。内存缓存随重启自然重建,磁盘会话、看板、图片等持久数据不会被清理。
|
|
444
446
|
|
|
445
447
|
> **模型切换**:`/model` 查看当前会话 Agent 的可选模型清单,`/model <名称>` 模糊匹配切换,`/model clear` 恢复默认。可选模型来自当前 Agent 的配置:Claude 使用 `claude.model` / `claude.subagentModel`;Cursor、Codex、CCC Agent 和 DSH 使用各自的 `model` / `alternativeModel`。
|
|
446
448
|
|
package/config.sample.json
CHANGED
|
@@ -57,10 +57,10 @@
|
|
|
57
57
|
"DEEPSEEK_BASE_URL": "https://api.deepseek.com/v1",
|
|
58
58
|
"model": "deepseek-v4-pro",
|
|
59
59
|
"subModel": "",
|
|
60
|
-
"alternativeModel": "",
|
|
61
|
-
"effort": "",
|
|
62
|
-
"maxOutputTokens": null,
|
|
63
|
-
"provider": "",
|
|
60
|
+
"alternativeModel": "",
|
|
61
|
+
"effort": "",
|
|
62
|
+
"maxOutputTokens": null,
|
|
63
|
+
"provider": "",
|
|
64
64
|
"gitCoAuthor": null,
|
|
65
65
|
"compactionTimeoutMs": 300000,
|
|
66
66
|
"contextWindow": 1048576
|
package/deepccc-agent/README.md
CHANGED
|
@@ -1,35 +1,71 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
npm 包名规划为 `deepccc`。如果 npm 包已经发布,可以直接全局安装:
|
|
1
|
+
# DeepCCC
|
|
2
|
+
|
|
3
|
+
DeepCCC 是一个本地优先的开源 Coding Agent,同时提供浏览器多会话界面、终端 CLI 和适合自动化集成的 JSONL 流。它针对 DeepSeek 做了缓存和上下文优化,也支持任意 OpenAI-compatible 服务以及 Anthropic Messages 协议。
|
|
4
|
+
|
|
5
|
+
- 项目主页:https://github.com/wzj998/deepccc-agent
|
|
6
|
+
- npm 包:https://www.npmjs.com/package/deepccc
|
|
7
|
+
- 运行要求:Node.js >= 20,以及一个兼容模型服务的 API Key
|
|
8
|
+
|
|
9
|
+
## 安装与快速开始
|
|
10
|
+
|
|
11
|
+
全局安装:
|
|
14
12
|
|
|
15
13
|
```bash
|
|
16
|
-
npm install -g deepccc
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
npm install -g deepccc
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
配置 `~/.deepccc/config.json` 或 `DEEPCCC_*` 环境变量后,运行:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
deepccc
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
浏览器会自动打开 `http://127.0.0.1:28080/`。终端模式使用:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
deepccc-cli
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
从源码运行:
|
|
20
30
|
|
|
21
31
|
```bash
|
|
22
32
|
git clone https://github.com/wzj998/deepccc-agent.git
|
|
23
33
|
cd deepccc-agent
|
|
24
|
-
npm install
|
|
25
|
-
npm run build
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
npm install
|
|
35
|
+
npm run build
|
|
36
|
+
npm run dev
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Web UI 预览
|
|
40
|
+
|
|
41
|
+
以下画面来自 DeepCCC 对本项目真实开发需求的 Agent 调用。截图仅将用户名、组织名、
|
|
42
|
+
内部域名和绝对路径替换为公开示例,任务内容、模型配置、Agent 回复和审批流程均来自
|
|
43
|
+
实际运行结果。
|
|
44
|
+
|
|
45
|
+
多会话可以并行处理不同任务,每个会话分别选择 model、subModel 和 effort。下图来自
|
|
46
|
+
`deepccc-agent/` 工作目录中的真实提问“这个项目妙在哪?”:
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
50
|
+
命中需要确认的命令时,审批卡会直接出现在当前会话时间线中,不打断到弹窗:
|
|
51
|
+
|
|
52
|
+

|
|
53
|
+
|
|
54
|
+
单一 API 配置作为新会话默认值,模型与 effort 仍可在每个会话中单独覆盖:
|
|
55
|
+
|
|
56
|
+

|
|
57
|
+
|
|
58
|
+
## 核心能力
|
|
59
|
+
|
|
60
|
+
- Web-first:多会话、持久化历史、实时流式过程、停止和恢复
|
|
61
|
+
- 工具时间线:ChatCCC 风格 emoji 摘要、参数/结果折叠、省略行展开和状态记忆
|
|
62
|
+
- 会话配置:每个会话独立选择 model、subModel 和 effort
|
|
63
|
+
- 图片附件:Web 支持选择、粘贴和拖拽 PNG/JPEG/WebP;Agent 可用 `present_file` 回传图片
|
|
64
|
+
- 本地工具:代码搜索、文件读写、补丁、命令执行、Git、网页搜索和抓取
|
|
65
|
+
- 权限审批:危险命令在会话时间线中暂停,支持拒绝、允许一次、会话允许和永久允许
|
|
66
|
+
- 上下文管理:自动压缩、原始流日志和跨会话历史检索
|
|
67
|
+
- 项目约定:自动加载 AGENTS.md、CLAUDE.md、系统提示和目录式 Skills
|
|
68
|
+
- 自动化:`deepccc-cli --stream-json` 提供稳定 JSONL 事件接口
|
|
33
69
|
|
|
34
70
|
## 缓存命中率
|
|
35
71
|
|
|
@@ -46,10 +82,10 @@ deepccc 的本地缓存优化实测命中率 **96.7%**,有效降低重复请
|
|
|
46
82
|
```bash
|
|
47
83
|
export DEEPCCC_API_KEY="sk-..."
|
|
48
84
|
export DEEPCCC_BASE_URL="https://api.deepseek.com/v1"
|
|
49
|
-
export DEEPCCC_MODEL="deepseek-v4-pro"
|
|
50
|
-
export DEEPCCC_EFFORT="high"
|
|
51
|
-
export DEEPCCC_MAX_OUTPUT_TOKENS="32768"
|
|
52
|
-
export DEEPCCC_STREAMING="true"
|
|
85
|
+
export DEEPCCC_MODEL="deepseek-v4-pro"
|
|
86
|
+
export DEEPCCC_EFFORT="high"
|
|
87
|
+
export DEEPCCC_MAX_OUTPUT_TOKENS="32768"
|
|
88
|
+
export DEEPCCC_STREAMING="true"
|
|
53
89
|
```
|
|
54
90
|
|
|
55
91
|
Windows PowerShell:
|
|
@@ -58,10 +94,10 @@ Windows PowerShell:
|
|
|
58
94
|
$env:DEEPCCC_API_KEY="sk-..."
|
|
59
95
|
$env:DEEPCCC_PROVIDER="openai"
|
|
60
96
|
$env:DEEPCCC_BASE_URL="https://api.deepseek.com/v1"
|
|
61
|
-
$env:DEEPCCC_MODEL="deepseek-v4-pro"
|
|
62
|
-
$env:DEEPCCC_EFFORT="high"
|
|
63
|
-
$env:DEEPCCC_MAX_OUTPUT_TOKENS="32768"
|
|
64
|
-
$env:DEEPCCC_STREAMING="true"
|
|
97
|
+
$env:DEEPCCC_MODEL="deepseek-v4-pro"
|
|
98
|
+
$env:DEEPCCC_EFFORT="high"
|
|
99
|
+
$env:DEEPCCC_MAX_OUTPUT_TOKENS="32768"
|
|
100
|
+
$env:DEEPCCC_STREAMING="true"
|
|
65
101
|
```
|
|
66
102
|
|
|
67
103
|
也兼容这些 DeepSeek 别名:
|
|
@@ -79,10 +115,10 @@ $env:DEEPCCC_STREAMING="true"
|
|
|
79
115
|
"apiKey": "sk-...",
|
|
80
116
|
"baseURL": "https://api.deepseek.com/v1",
|
|
81
117
|
"model": "deepseek-v4-pro",
|
|
82
|
-
"subModel": "",
|
|
83
|
-
"effort": "",
|
|
84
|
-
"maxOutputTokens": null,
|
|
85
|
-
"streaming": true,
|
|
118
|
+
"subModel": "",
|
|
119
|
+
"effort": "",
|
|
120
|
+
"maxOutputTokens": null,
|
|
121
|
+
"streaming": true,
|
|
86
122
|
"contextWindow": 1048576,
|
|
87
123
|
"git": {
|
|
88
124
|
"coAuthor": {
|
|
@@ -91,14 +127,39 @@ $env:DEEPCCC_STREAMING="true"
|
|
|
91
127
|
"email": "20184052+wzj998@users.noreply.github.com"
|
|
92
128
|
}
|
|
93
129
|
},
|
|
94
|
-
"rawStreamLogs": {
|
|
130
|
+
"rawStreamLogs": {
|
|
95
131
|
"enabled": true,
|
|
96
132
|
"maxBytesPerTurn": 1048576,
|
|
97
133
|
"retentionDays": 7,
|
|
98
|
-
"keepCompleted": false
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
134
|
+
"keepCompleted": false
|
|
135
|
+
},
|
|
136
|
+
"web": {
|
|
137
|
+
"port": 28080,
|
|
138
|
+
"openOnStart": true
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Web UI
|
|
144
|
+
|
|
145
|
+
全局安装后可以直接启动本地网页版:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
deepccc
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
默认只监听 `http://127.0.0.1:28080/`,不会暴露到局域网。可在
|
|
152
|
+
`~/.deepccc/config.json` 的 `web.port` 修改端口,`web.openOnStart` 控制启动时是否自动打开浏览器;也可以临时使用 `deepccc --port 28081 --no-open`。默认启动会安全替换经过实例身份验证的旧 DeepCCC Web;传入 `--reuse-existing` 时复用已有实例。`deepccc web` 保留为兼容别名。
|
|
153
|
+
|
|
154
|
+
从源码开发时,`npm run dev` 启动 Web Server 并打开页面(不启用 watch);`npm run dev:cli` 启动终端模式。
|
|
155
|
+
|
|
156
|
+
Web UI 支持新建、恢复、重命名和删除多会话,多个会话可以同时运行,即使它们指向同一个工作目录。每个会话可独立选择 model、subModel 和 effort,并持续复用 CLI 已保存的历史。注意:当前版本不自动创建 Git worktree;同目录的多个运行中 Agent 直接修改同一组文件,页面会提示覆盖与冲突风险。
|
|
157
|
+
|
|
158
|
+
模型文本、reasoning 心跳和工具事件通过 SSE 实时更新。每轮消息按真实发生顺序持久化和回放,因此刷新后仍会保持“阶段说明 → 工具调用 → 后续结论”的交错时间线;旧版会话没有顺序数据时,会兼容显示为“工具调用 → 最终回答”。每次工具调用与对应结果合并成一张卡片,折叠态显示 emoji、工具名、状态和关键参数;展开后调用参数默认保留前 8/后 4 行,工具结果保留前 12/后 6 行,省略内容可继续展开。工具卡及省略行的展开状态保存在当前浏览器标签页的 `sessionStorage`,持续生成、切换会话和刷新页面均不会自动收起。消息正文支持标题、表格、列表、引用、链接和代码块等常用 Markdown。
|
|
159
|
+
|
|
160
|
+
图片始终按本地附件处理,不转换为 Provider 原生多模态消息。Web 支持文件选择、剪贴板粘贴和拖拽,每条消息最多 10 张 PNG/JPEG/WebP、单张最大 20 MB;附件复制到 `~/.deepccc/attachments/<session-id>/`,Agent 收到本地绝对路径后使用可用工具自行处理。Agent 可调用 `present_file` 把当前工作目录或会话附件目录中的图片直接展示在会话中;删除会话时对应附件一并清理。
|
|
161
|
+
|
|
162
|
+
API 设置采用单一 Provider 配置,支持 OpenAI-compatible 与 Anthropic Messages。完整 API Key 只保存在本机 `~/.deepccc/config.json`,浏览器读取设置时仅返回掩码。危险命令会在会话中暂停并请求“拒绝、允许一次、本会话允许、永久允许”,浏览器断开或审批超时默认拒绝。
|
|
102
163
|
|
|
103
164
|
`git.coAuthor.enabled` 默认开启。DeepCCC 通过 `run_command` 创建 Git 提交时会保留用户为
|
|
104
165
|
主 Author,并追加 `Co-authored-by: DeepCCC <20184052+wzj998@users.noreply.github.com>`。
|
|
@@ -109,18 +170,19 @@ $env:DEEPCCC_STREAMING="true"
|
|
|
109
170
|
`DEEPCCC_PROVIDER` 或命令行 `--provider` 覆盖:
|
|
110
171
|
|
|
111
172
|
- `openai` 使用 OpenAI-compatible Chat Completions 协议,兼容 DeepSeek、OpenAI、LiteLLM、vLLM 等服务。
|
|
112
|
-
- `anthropic` 使用 Anthropic Messages 协议。配置中的 `baseURL` **完全按填写值使用,不自动补 `/v1`**,请填写到完整版本化地址,例如 DeepSeek 官方 Anthropic 端点为 `https://api.deepseek.com/anthropic/v1`(官方 Anthropic SDK 使用的 `https://api.deepseek.com/anthropic` 基址会拼接为 `.../anthropic/v1/messages`)。`effort` 在 OpenAI-compatible 模式映射为 `reasoning_effort`,在 Anthropic 模式映射为 `output_config.effort`;目标服务不支持时应留空。
|
|
113
|
-
|
|
114
|
-
`streaming` 控制主对话是否使用流式请求,默认 `true`;也可以通过
|
|
115
|
-
`DEEPCCC_STREAMING=true|false` 覆盖。关闭后,终端会在整条模型响应完成后一次性显示结果。
|
|
116
|
-
|
|
117
|
-
`maxOutputTokens` 限制主对话单次最大输出 token,默认不配置(`null`/缺失),此时不向
|
|
118
|
-
Provider 发送 `max_tokens`,使用模型服务端默认值。可通过 `DEEPCCC_MAX_OUTPUT_TOKENS`
|
|
119
|
-
或命令行 `--max-output-tokens` 覆盖;只接受正整数。该限制会同时覆盖模型思考内容、
|
|
120
|
-
工具参数和最终回答,设置过小可能导致工具调用或长回复被截断。
|
|
121
|
-
|
|
122
|
-
`contextWindow` 是模型上下文窗口(token),默认 `1048576`(1M,DeepSeek V4 Pro/Flash
|
|
123
|
-
|
|
173
|
+
- `anthropic` 使用 Anthropic Messages 协议。配置中的 `baseURL` **完全按填写值使用,不自动补 `/v1`**,请填写到完整版本化地址,例如 DeepSeek 官方 Anthropic 端点为 `https://api.deepseek.com/anthropic/v1`(官方 Anthropic SDK 使用的 `https://api.deepseek.com/anthropic` 基址会拼接为 `.../anthropic/v1/messages`)。`effort` 在 OpenAI-compatible 模式映射为 `reasoning_effort`,在 Anthropic 模式映射为 `output_config.effort`;目标服务不支持时应留空。
|
|
174
|
+
|
|
175
|
+
`streaming` 控制主对话是否使用流式请求,默认 `true`;也可以通过
|
|
176
|
+
`DEEPCCC_STREAMING=true|false` 覆盖。关闭后,终端会在整条模型响应完成后一次性显示结果。
|
|
177
|
+
|
|
178
|
+
`maxOutputTokens` 限制主对话单次最大输出 token,默认不配置(`null`/缺失),此时不向
|
|
179
|
+
Provider 发送 `max_tokens`,使用模型服务端默认值。可通过 `DEEPCCC_MAX_OUTPUT_TOKENS`
|
|
180
|
+
或命令行 `--max-output-tokens` 覆盖;只接受正整数。该限制会同时覆盖模型思考内容、
|
|
181
|
+
工具参数和最终回答,设置过小可能导致工具调用或长回复被截断。
|
|
182
|
+
|
|
183
|
+
`contextWindow` 是模型上下文窗口(token),默认 `1048576`(1M,DeepSeek V4 Pro/Flash
|
|
184
|
+
原生规格);常规上下文压缩阈值自动 = `contextWindow × 0.8`。工具输入与结果另有独立预算:
|
|
185
|
+
默认取 `min(64000, 常规压缩阈值 × 25%)`,超过后会提前压缩,避免长会话积累大量低信号工具输出。
|
|
124
186
|
可通过 `DEEPCCC_CONTEXT_WINDOW` 环境变量覆盖。⚠️ 超过模型/服务端实际上限时请求会被
|
|
125
187
|
API 拒绝(context length exceeded),实际窗口以模型与所用服务端为准(如 litellm 的
|
|
126
188
|
`max_input_tokens`)。
|
|
@@ -147,56 +209,62 @@ API 拒绝(context length exceeded),实际窗口以模型与所用服务
|
|
|
147
209
|
在当前目录启动一个交互式 Agent:
|
|
148
210
|
|
|
149
211
|
```bash
|
|
150
|
-
deepccc
|
|
212
|
+
deepccc-cli
|
|
151
213
|
```
|
|
152
214
|
|
|
153
215
|
指定其他模型或 OpenAI-compatible 接口:
|
|
154
216
|
|
|
155
217
|
```bash
|
|
156
|
-
deepccc --base-url https://api.openai.com/v1 --api-key "$OPENAI_API_KEY" --model gpt-4.1
|
|
218
|
+
deepccc-cli --base-url https://api.openai.com/v1 --api-key "$OPENAI_API_KEY" --model gpt-4.1
|
|
157
219
|
```
|
|
158
220
|
|
|
159
221
|
使用 Anthropic Messages 协议(同样支持流式输出):
|
|
160
222
|
|
|
161
223
|
```bash
|
|
162
|
-
deepccc --provider anthropic --base-url https://api.example.com --api-key "$API_KEY" --model claude-sonnet-4-6
|
|
224
|
+
deepccc-cli --provider anthropic --base-url https://api.example.com --api-key "$API_KEY" --model claude-sonnet-4-6
|
|
163
225
|
```
|
|
164
226
|
|
|
165
|
-
指定工作目录:
|
|
227
|
+
指定工作目录:
|
|
166
228
|
|
|
167
229
|
```bash
|
|
168
|
-
deepccc --cwd /path/to/project
|
|
169
|
-
```
|
|
230
|
+
deepccc-cli --cwd /path/to/project
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
附加一张或多张本地图片(可重复传入 `--image`,仍采用本地附件路径,不发送原生多模态内容):
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
deepccc-cli --image ./error.png --image ./expected.webp
|
|
237
|
+
```
|
|
170
238
|
|
|
171
239
|
恢复当前工作目录最近一次会话:
|
|
172
240
|
|
|
173
241
|
```bash
|
|
174
|
-
deepccc --resume
|
|
242
|
+
deepccc-cli --resume
|
|
175
243
|
```
|
|
176
244
|
|
|
177
245
|
设置工具调用步数上限:
|
|
178
246
|
|
|
179
247
|
```bash
|
|
180
|
-
deepccc --max-steps 20
|
|
248
|
+
deepccc-cli --max-steps 20
|
|
181
249
|
```
|
|
182
250
|
|
|
183
|
-
默认情况下,`deepccc` 不设置固定步数上限,会让模型自然完成工具循环。
|
|
251
|
+
默认情况下,`deepccc-cli` 不设置固定步数上限,会让模型自然完成工具循环。
|
|
184
252
|
|
|
185
253
|
设置推理强度(reasoning effort):
|
|
186
254
|
|
|
187
255
|
```bash
|
|
188
|
-
deepccc --effort high
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
可选值:`none` / `minimal` / `low` / `medium` / `high` / `xhigh` / `max`(留空则不传 `reasoning_effort` 请求字段)。
|
|
192
|
-
|
|
193
|
-
限制主对话最大输出 token:
|
|
194
|
-
|
|
195
|
-
```bash
|
|
196
|
-
deepccc --max-output-tokens 8192
|
|
256
|
+
deepccc-cli --effort high
|
|
197
257
|
```
|
|
198
258
|
|
|
199
|
-
|
|
259
|
+
可选值:`none` / `minimal` / `low` / `medium` / `high` / `xhigh` / `max`(留空则不传 `reasoning_effort` 请求字段)。
|
|
260
|
+
|
|
261
|
+
限制主对话最大输出 token:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
deepccc-cli --max-output-tokens 8192
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
不设置时使用 Provider 默认值。
|
|
200
268
|
|
|
201
269
|
## 权限机制
|
|
202
270
|
|
|
@@ -248,7 +316,7 @@ deepccc --max-output-tokens 8192
|
|
|
248
316
|
`--stream-json` 或程序化调用(无终端可交互)时,高危命令**安全默认拒绝**。需要全自动场景可显式传入:
|
|
249
317
|
|
|
250
318
|
```bash
|
|
251
|
-
deepccc --dangerously-bypass-permissions
|
|
319
|
+
deepccc-cli --dangerously-bypass-permissions
|
|
252
320
|
```
|
|
253
321
|
|
|
254
322
|
该参数与 `ChatSession` 的 `permissionMode: "bypass"` 等价,也是 chatccc 集成 deepccc 时使用的模式(对齐 chatccc 调用 Claude Code / Codex 的 bypass 方式)。
|
|
@@ -257,12 +325,12 @@ deepccc --dangerously-bypass-permissions
|
|
|
257
325
|
|
|
258
326
|
交互模式下,每轮回复渲染为固定"过程区块":状态行(压缩上下文中/生成回复中/完成/已停止/异常结束)+ 折叠工具行 + 原地更新正文,不滚屏刷 JSON。活动状态有心跳点号动画;完成/停止/异常后区块定型留在屏幕上。
|
|
259
327
|
|
|
260
|
-
|
|
328
|
+
持久化上下文达到常规 token 阈值或独立工具预算时,deepccc 会先按预算保留最近消息,再压缩较早内容;工具历史使用标准结构化 tool-call/tool-result 消息重放,不会把内部 `[工具记录]` 文本重复送回模型。若模型仍输出伪工具记录,系统会丢弃并重试一次;重复失败时安全终止,避免把未执行命令当成真实结果。超长历史消息、工具记录和压缩输入会被限长,一次压缩最多等待 5 分钟。
|
|
261
329
|
|
|
262
330
|
如果终端渲染出现异常,可以强制回退为纯文本流式输出:
|
|
263
331
|
|
|
264
332
|
```bash
|
|
265
|
-
deepccc --plain
|
|
333
|
+
deepccc-cli --plain
|
|
266
334
|
```
|
|
267
335
|
|
|
268
336
|
## JSONL 流式输出
|
|
@@ -270,13 +338,13 @@ deepccc --plain
|
|
|
270
338
|
JSONL 模式适合脚本、服务端集成或其他上层系统调用:
|
|
271
339
|
|
|
272
340
|
```bash
|
|
273
|
-
deepccc --stream-json --prompt "检查这个仓库并总结测试命令"
|
|
341
|
+
deepccc-cli --stream-json --prompt "检查这个仓库并总结测试命令"
|
|
274
342
|
```
|
|
275
343
|
|
|
276
344
|
也可以从 stdin 传入提示词:
|
|
277
345
|
|
|
278
346
|
```bash
|
|
279
|
-
echo "运行测试并解释失败原因" | deepccc --stream-json
|
|
347
|
+
echo "运行测试并解释失败原因" | deepccc-cli --stream-json
|
|
280
348
|
```
|
|
281
349
|
|
|
282
350
|
输出是逐行 JSON:
|
|
@@ -1,65 +1,68 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "deepccc",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "A lightweight coding agent with OpenAI-compatible and Anthropic Messages API support.",
|
|
5
|
-
"license": "Apache-2.0",
|
|
6
|
-
"keywords": [
|
|
7
|
-
"agent",
|
|
8
|
-
"deepseek",
|
|
9
|
-
"coding-agent",
|
|
10
|
-
"openai-compatible",
|
|
11
|
-
"anthropic",
|
|
12
|
-
"cli"
|
|
13
|
-
],
|
|
14
|
-
"repository": {
|
|
15
|
-
"type": "git",
|
|
16
|
-
"url": "git+https://github.com/wzj998/deepccc-agent.git"
|
|
17
|
-
},
|
|
18
|
-
"bugs": {
|
|
19
|
-
"url": "https://github.com/wzj998/deepccc-agent/issues"
|
|
20
|
-
},
|
|
21
|
-
"homepage": "https://github.com/wzj998/deepccc-agent#readme",
|
|
22
|
-
"type": "module",
|
|
23
|
-
"main": "./dist/index.js",
|
|
24
|
-
"types": "./dist/index.d.ts",
|
|
25
|
-
"exports": {
|
|
26
|
-
".": {
|
|
27
|
-
"types": "./dist/index.d.ts",
|
|
28
|
-
"import": "./dist/index.js"
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
"bin": {
|
|
32
|
-
"deepccc": "bin/deepccc.mjs"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"ai": "^
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"
|
|
64
|
-
}
|
|
65
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "deepccc",
|
|
3
|
+
"version": "0.2.11",
|
|
4
|
+
"description": "A lightweight coding agent with OpenAI-compatible and Anthropic Messages API support.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"agent",
|
|
8
|
+
"deepseek",
|
|
9
|
+
"coding-agent",
|
|
10
|
+
"openai-compatible",
|
|
11
|
+
"anthropic",
|
|
12
|
+
"cli"
|
|
13
|
+
],
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/wzj998/deepccc-agent.git"
|
|
17
|
+
},
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/wzj998/deepccc-agent/issues"
|
|
20
|
+
},
|
|
21
|
+
"homepage": "https://github.com/wzj998/deepccc-agent#readme",
|
|
22
|
+
"type": "module",
|
|
23
|
+
"main": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"import": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"bin": {
|
|
32
|
+
"deepccc": "bin/deepccc.mjs",
|
|
33
|
+
"deepccc-cli": "bin/deepccc-cli.mjs"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist/",
|
|
37
|
+
"bin/",
|
|
38
|
+
"docs/",
|
|
39
|
+
"os-prompts/",
|
|
40
|
+
"package.json",
|
|
41
|
+
"README.md",
|
|
42
|
+
"LICENSE"
|
|
43
|
+
],
|
|
44
|
+
"scripts": {
|
|
45
|
+
"dev": "tsx src/web-entry.ts",
|
|
46
|
+
"dev:cli": "tsx src/cli.ts",
|
|
47
|
+
"build": "node node_modules/typescript/bin/tsc -p tsconfig.build.json",
|
|
48
|
+
"prepack": "node node_modules/typescript/bin/tsc -p tsconfig.build.json",
|
|
49
|
+
"test": "vitest run",
|
|
50
|
+
"test:watch": "vitest",
|
|
51
|
+
"typecheck": "node node_modules/typescript/bin/tsc --noEmit"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@ai-sdk/anthropic": "^3.0.105",
|
|
55
|
+
"@ai-sdk/openai-compatible": "^2.0.47",
|
|
56
|
+
"@vscode/ripgrep": "^1.18.0",
|
|
57
|
+
"ai": "^6.0.184"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/node": "^20.0.0",
|
|
61
|
+
"tsx": "^4.0.0",
|
|
62
|
+
"typescript": "^5.0.0",
|
|
63
|
+
"vitest": "^3.2.4"
|
|
64
|
+
},
|
|
65
|
+
"engines": {
|
|
66
|
+
"node": ">=20"
|
|
67
|
+
}
|
|
68
|
+
}
|