chatccc 0.2.286 → 0.2.288

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 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` 改变。
161
-
162
- 任务卡片可通过“交给主 Agent”启动真实执行:任务会从 Todo 移到 Doing,成功后自动移到 Done,失败、停止或中断则移到搁置并显示具体原因,支持安全重试。同一项目同一时间只运行一个看板任务;每次尝试都有独立的 Run ID、Trace ID、失败类型、耗时和完整执行时间线,可以在任务详情中切换历史尝试或复制记录。
163
-
164
- 运行中的时间线和最后进度会定期持久化;长时间没有进度会在看板中标记为疑似停滞,停止请求超过截止时间会强制收敛到终态。服务异常退出后会保留最后已写入的执行过程并把未完成任务标记为中断;启动时还会自动对账任务终态与卡片列,修复“Agent 已完成但卡片移动失败”等部分成功。损坏的单条运行 JSON 会被隔离为 `.corrupt-*` 文件,不会阻断同项目其他历史记录。
160
+ 打开项目后可以选择 CCC、Claude、Cursor 或 Codex 作为主 Agent。首次设置会创建固定命名为 `主Agent-<目录短名>` 的飞书群和空 Agent Session;后续切换 Agent 或重新关联目录会复用原群,运行中的主 Agent 不允许切换。建群成员取自机器人最近一次收到的飞书私聊;如果尚无私聊记录,网页会提示先给机器人发送任意私聊消息并自动检测。项目群名不会随第一句话或 `/forget` 改变。
165
161
 
166
- 看板数据默认保存在 `~/.chatccc/agent-team/`,其中 `workspaces.json` 保存最近工作目录索引,`boards/` 保存按稳定 ID 分隔的看板 JSON,`main-agent-bindings/` 单独保存本机飞书群与 Session 绑定,`task-runs/` 保存每次任务执行及其诊断时间线。目录移动或重命名后,可从最近目录列表重新关联。数据访问通过仓储接口隔离,后续接入飞书多维表格时可增加双向同步适配器,无需把本机群聊和 Session 状态混入任务同步模型。选择目录、创建群聊和启动 Agent 等操作都由本机 Node 后端执行;当前实现不依赖 Electron。
162
+ 任务卡片可通过“交给主 Agent”启动真实执行:任务会从 Todo 移到 Doing,成功后自动移到 Done,失败、停止或中断则移到搁置并显示具体原因,支持安全重试。同一项目同一时间只运行一个看板任务;每次尝试都有独立的 Run ID、Trace ID、失败类型、耗时和完整执行时间线,可以在任务详情中切换历史尝试或复制记录。
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。
167
167
 
168
168
  #### 从源码运行
169
169
 
@@ -182,15 +182,15 @@ npm run dev
182
182
 
183
183
  1. 打开 [飞书开放平台](https://open.feishu.cn),创建一个**企业自建应用**。
184
184
  2. 在「应用功能」里开启**机器人**能力。
185
- 3. 在「权限管理」里开通**所有权限名称以 `im:` 或 `cardkit:` 开头的权限**。不要只依赖事件页面自动推荐的权限;开通后应分别搜索这两个前缀并逐项确认:
185
+ 3. 在「权限管理」里开通**所有权限名称以 `im:` 或 `cardkit:` 开头的权限**。不要只依赖事件页面自动推荐的权限;开通后应分别搜索这两个前缀并逐项确认:
186
186
 
187
187
  | 前缀 | 用途 |
188
188
  | --- | --- |
189
- | `im:` | 全部开通,用于收发消息、创建和管理群聊、机器人发言等 |
190
- | `cardkit:` | 全部开通,用于卡片展示、流式更新、按钮和交互回调等 |
191
-
192
- > [!IMPORTANT]
193
- > 请额外单独搜索并确认已开通 `im:message.p2p_msg:readonly`(获取用户发给机器人的单聊消息)。这个权限在飞书开发者后台配置时容易遗漏;缺少它可能导致 ChatCCC 无法正常识别或处理私聊消息。
189
+ | `im:` | 全部开通,用于收发消息、创建和管理群聊、机器人发言等 |
190
+ | `cardkit:` | 全部开通,用于卡片展示、流式更新、按钮和交互回调等 |
191
+
192
+ > [!IMPORTANT]
193
+ > 请额外单独搜索并确认已开通 `im:message.p2p_msg:readonly`(获取用户发给机器人的单聊消息)。这个权限在飞书开发者后台配置时容易遗漏;缺少它可能导致 ChatCCC 无法正常识别或处理私聊消息。
194
194
 
195
195
  <p align="center">
196
196
  <img src="images/img_readme_permission.png" alt="飞书应用权限配置" width="280" />
@@ -227,11 +227,13 @@ Claude Code、Cursor 和 Codex 需要对应的本地工具;CCC Agent 内置于
227
227
 
228
228
  #### CCC Agent
229
229
 
230
- CCC Agent 是 ChatCCC 内置的编程 Agent,不需要额外安装 CLI,开箱即用。在首次配置向导或 Web 管理页中启用后,填写 API Key、Base URL 和模型即可使用;它可以设为 `/new` 的默认 Agent,也可以通过 `/new ccc` 显式创建会话。
231
-
232
- DeepCCC 同时提供独立端口的本地 Web UI。ChatCCC 管理页顶部点击 **DeepCCC Web** 会复用或按需启动该服务;只全局安装 `deepccc` 的用户直接运行 `deepccc` 即可启动并打开网页版,终端模式改用 `deepccc-cli`。默认地址为 `http://127.0.0.1:28080/`,端口可通过 `~/.deepccc/config.json` 的 `web.port` 修改。网页版支持多会话并发、持久化历史、会话级 model/effort、API 设置和会话内高风险操作审批。
230
+ CCC Agent 是 ChatCCC 内置的编程 Agent,不需要额外安装 CLI,开箱即用。在首次配置向导或 Web 管理页中启用后,填写 API Key、Base URL 和模型即可使用;它可以设为 `/new` 的默认 Agent,也可以通过 `/new ccc` 显式创建会话。
231
+
232
+ CCC Agent 支持**协作式让位**:任务运行期间你可以继续在群里发消息,ChatCCC 会在 Agent 的每个模型步骤边界把新消息注入当前任务,不打断正在执行的工具步骤、不新开一轮对话。已完成的中间工作会保留,Agent 收到插话后会调整后续方向。运行中的消息进入独立的注入队列(深度 50),与整轮排队(深度 1)分离。
233
233
 
234
- 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。
234
+ DeepCCC 同时提供独立端口的本地 Web UI。ChatCCC 管理页顶部点击 **DeepCCC Web** 会复用或按需启动该服务;只全局安装 `deepccc` 的用户直接运行 `deepccc` 即可启动并打开网页版,终端模式改用 `deepccc-cli`。默认地址为 `http://127.0.0.1:28080/`,端口可通过 `~/.deepccc/config.json` `web.port` 修改。网页版支持多会话并发、持久化历史、会话级 model/effort、API 设置和会话内高风险操作审批。
235
+
236
+ 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。
235
237
 
236
238
  **协议 override:** 也可以在 ChatCCC 的配置(`config.json` 的 `ccc.provider`,或 Web 管理页的「CCC Agent → API 协议」)显式指定 `openai` / `anthropic` 覆盖内核配置;留空(默认)时跟随 `~/.deepccc/config.json` / `DEEPCCC_PROVIDER`。`streaming` 不做 override,始终由 DeepCCC 内核配置控制。
237
239
 
@@ -247,7 +249,7 @@ ChatCCC 会把 `ccc.DEEPSEEK_API_KEY`、`ccc.DEEPSEEK_BASE_URL` 和模型显式
247
249
  | 通义千问 / 智谱 GLM / 豆包 / MiniMax | 各家 `…/v1` 端点 | 国内 OpenAI 兼容服务 |
248
250
  | Ollama / vLLM / LM Studio | `http://localhost:11434/v1` | 本地或自建推理服务 |
249
251
 
250
- 更换服务只需把 `ccc.DEEPSEEK_BASE_URL` 改为对应端点、`ccc.DEEPSEEK_API_KEY` 改为对应 Key、`ccc.model` 改为目标模型名即可。`effort` 留空时不会由 ChatCCC override DeepCCC;若两边都留空,则不发送 `reasoning_effort`。只有确认目标模型支持时才应显式填写,否则服务端可能返回参数错误。余额查询仅对官方 DeepSeek 域名(`api.deepseek.com`)生效,指向其他端点时自动跳过,不影响对话。
252
+ 更换服务只需把 `ccc.DEEPSEEK_BASE_URL` 改为对应端点、`ccc.DEEPSEEK_API_KEY` 改为对应 Key、`ccc.model` 改为目标模型名即可。`effort` 留空时不会由 ChatCCC override DeepCCC;若两边都留空,则不发送 `reasoning_effort`。只有确认目标模型支持时才应显式填写,否则服务端可能返回参数错误。余额查询仅对官方 DeepSeek 域名(`api.deepseek.com`)生效,指向其他端点时自动跳过,不影响对话。
251
253
 
252
254
  `ccc.alternativeModel` 是单个备选模型,只会加入 `/model` 的人工切换列表,不会在请求失败时自动重试或切换,避免重复执行带副作用的工具调用。
253
255
 
@@ -288,6 +290,8 @@ codex --version
288
290
 
289
291
  Codex 的默认模型和推理强度可继续由 `~/.codex/config.toml` 管理,也可以在 `config.json` 中覆盖。
290
292
 
293
+ ChatCCC 通过 Codex 的 **app-server 模式**(一个常驻进程 + WebSocket JSON-RPC)驱动 Codex,而不是一次性 `codex exec` 子进程。因此 Codex 与 CCC Agent 一样支持**协作式让位**:任务运行期间继续发消息,ChatCCC 会在 Codex 的工具步骤边界把消息注入当前 turn(`turn/steer`),不打断正在执行的命令、不丢已完成的工作;`/stop` 通过 `turn/interrupt` 只打断当前 turn,不影响同进程内的其他会话。权限策略与旧 exec 的 `--dangerously-bypass-approvals-and-sandbox` 等价(零审批、完整沙箱权限),`/plan`、`/ask` 退化为只读沙箱。要求 Codex CLI >= 0.60.0(建议保持最新版)。
294
+
291
295
  #### 可选:Chrome CDP
292
296
 
293
297
  常驻 Chrome CDP 开关用于维护本机 Chrome DevTools Protocol 端口;Codex `/usage` 可通过它读取 ChatGPT 订阅到期时间和剩余天数。
@@ -390,9 +394,9 @@ Codex 的默认模型和推理强度可继续由 `~/.codex/config.toml` 管理
390
394
  | `cursor.alternativeModel` / `codex.alternativeModel` / `ccc.alternativeModel` / `dsh.alternativeModel` | 单个备选模型;加入 `/model` 人工切换列表,不会自动故障转移 |
391
395
  | `ccc.DEEPSEEK_API_KEY` / `ccc.DEEPSEEK_BASE_URL` | CCC Agent 的 API Key 和服务地址;**不限于 DeepSeek**——可填任意 OpenAI 兼容端点(OpenAI、Kimi、通义、智谱、Ollama 本地等) |
392
396
  | `ccc.model` | CCC Agent 默认模型 |
393
- | `ccc.subModel` | CCC Agent 子模型(选填):用于内部轻量环节(压缩摘要生成、task 子代理任务);留空跟随主模型 |
394
- | `ccc.effort` | CCC Agent 推理强度 override;留空跟随 DeepCCC 内核配置,内核也留空时使用模型服务端默认值 |
395
- | `ccc.maxOutputTokens` | CCC Agent 主对话最大输出 token override;正整数,`null`/留空时跟随 DeepCCC 内核配置,内核也未配置时使用模型服务端默认值 |
397
+ | `ccc.subModel` | CCC Agent 子模型(选填):用于内部轻量环节(压缩摘要生成、task 子代理任务);留空跟随主模型 |
398
+ | `ccc.effort` | CCC Agent 推理强度 override;留空跟随 DeepCCC 内核配置,内核也留空时使用模型服务端默认值 |
399
+ | `ccc.maxOutputTokens` | CCC Agent 主对话最大输出 token override;正整数,`null`/留空时跟随 DeepCCC 内核配置,内核也未配置时使用模型服务端默认值 |
396
400
  | `ccc.compactionTimeoutMs` | CCC Agent 上下文压缩单轮超时(毫秒),默认 300000(5 分钟);压缩超时会让整轮对话失败,建议保持默认或调大 |
397
401
  | `ccc.contextWindow` | CCC Agent 模型上下文窗口(token),默认 1048576(1M,DeepSeek V4 Pro/Flash 原生规格);压缩阈值自动 = 窗口 × 80%;超过模型/服务端实际上限会被 API 拒绝,可在 Web UI 下拉选择或自定义(单位 k) |
398
402
  | `dsh.apiKey` / `dsh.baseUrl` | DeepSeek Harness 的 API Key 和官方 DeepSeek 服务地址 |
@@ -409,11 +413,11 @@ Codex 的默认模型和推理强度可继续由 `~/.codex/config.toml` 管理
409
413
 
410
414
  **会话停滞保护:** 只有 Agent 明确进入“生成回复中”后,连续 3 分钟没有新增回复字符且尚未报告权威终态,ChatCCC 才判定停滞、结束旧 CLI,并优先补发一次“完成了吗?如果没完成继续”;恢复轮再次发生相同停滞时不再递归续跑。启动、上下文压缩、思考、搜索和工具调用阶段不会触发这项回复停滞计时;DeepCCC 关闭 streaming 时只会在请求完成后一次性返回结果,因此不会启用这项基于流式字符进度的停滞检测。其中 CCC Agent 会单独显示“压缩上下文中”,压缩最多等待 5 分钟,失败时直接报告具体原因且不自动重放。`/new claude` 和 `/new cursor` 等创建会话操作仍有独立的 init 超时,进程资源监控也继续负责识别真正僵死。Codex 只有 `turn.completed` 才算权威终态,阶段性的 `agent_message` 不算;任一 Agent 报告权威终态后若输出流仍超过 10 秒未关闭,ChatCCC 会强制清理该 CLI 并按正常完成收尾,不会重复询问 Agent。
411
415
 
412
- **CCC Agent 代码搜索:** `search_code` 使用项目自带的跨平台 ripgrep,不要求系统另行安装 `rg`。如果当前平台没有可用的 bundled/system ripgrep,会自动降级为内置 Node 搜索,并继续支持常用正则、glob、结果上限、中止和超时控制。
413
-
414
- **项目理解与证据:** CCC 与独立 DeepCCC 共用通用内核。`search_code` 默认按项目范围降噪;明确指定子目录/文件时默认扩大范围,也可使用 `scope: "all"` 搜索 `.venv`、`node_modules`、隐藏和被忽略文件,并非禁止访问依赖。结果显示搜索范围、排除规则、警告与截断情况。`workspace_map` 提供按需的本地文件/词法符号地图;涉及项目实现的对话会获得小预算导航,不把地图重复写进聊天历史。`remember_project_fact` 可保存带原文和文件哈希的项目笔记,源文件改变或删除后不再注入该笔记。缓存位于 `~/.deepccc/workspace-index/`,不修改业务仓库,也不需要新增向量数据库或模型下载。地图和笔记只是查证入口,不能代替阅读当前源码。详见 [DeepCCC 项目理解说明](deepccc-agent/docs/workspace-understanding.md)。
415
-
416
- **长会话上下文:** 压缩摘要按“当前状态 / 仍待处理 / 已取代历史 / 项目事实 / 证据与局限 / 操作记录”重写,最近消息、明确纠正和当前源码优先于旧摘要。单次或单 seed 结果不会在提示中被升级成“彻底证伪”。同一轮多次工具调用时,较早的大结果只在后续模型步骤中缩短(界面与原始日志仍保留既有记录),最近结果优先保留,工具调用与结果配对不会被破坏。自动项目导航还覆盖范式、策略、实验、指标、进度等常见项目问法;明确表示与当前项目无关时不会扫描地图。
416
+ **CCC Agent 代码搜索:** `search_code` 使用项目自带的跨平台 ripgrep,不要求系统另行安装 `rg`。如果当前平台没有可用的 bundled/system ripgrep,会自动降级为内置 Node 搜索,并继续支持常用正则、glob、结果上限、中止和超时控制。
417
+
418
+ **项目理解与证据:** CCC 与独立 DeepCCC 共用通用内核。`search_code` 默认按项目范围降噪;明确指定子目录/文件时默认扩大范围,也可使用 `scope: "all"` 搜索 `.venv`、`node_modules`、隐藏和被忽略文件,并非禁止访问依赖。结果显示搜索范围、排除规则、警告与截断情况。`workspace_map` 提供按需的本地文件/词法符号地图;涉及项目实现的对话会获得小预算导航,不把地图重复写进聊天历史。`remember_project_fact` 可保存带原文和文件哈希的项目笔记,源文件改变或删除后不再注入该笔记。缓存位于 `~/.deepccc/workspace-index/`,不修改业务仓库,也不需要新增向量数据库或模型下载。地图和笔记只是查证入口,不能代替阅读当前源码。详见 [DeepCCC 项目理解说明](deepccc-agent/docs/workspace-understanding.md)。
419
+
420
+ **长会话上下文:** 压缩摘要按“当前状态 / 仍待处理 / 已取代历史 / 项目事实 / 证据与局限 / 操作记录”重写,最近消息、明确纠正和当前源码优先于旧摘要。单次或单 seed 结果不会在提示中被升级成“彻底证伪”。同一轮多次工具调用时,较早的大结果只在后续模型步骤中缩短(界面与原始日志仍保留既有记录),最近结果优先保留,工具调用与结果配对不会被破坏。自动项目导航还覆盖范式、策略、实验、指标、进度等常见项目问法;明确表示与当前项目无关时不会扫描地图。
417
421
 
418
422
  ## 可用指令
419
423
 
@@ -434,32 +438,32 @@ Codex 的默认模型和推理强度可继续由 `~/.codex/config.toml` 管理
434
438
  | `/cd` | 查看或设置后续新建会话的默认工作目录,不改变当前会话;飞书私聊自身始终使用系统用户目录 |
435
439
  | `/sessions` | 查看所有会话状态 |
436
440
  | `/session <数字>` | 将当前群聊切换到 `/sessions` 列表中的指定会话;飞书私聊不支持切换 |
437
- | `/usage` | 查看当前会话对应 Agent 的用量;Codex 显示 5h/7天窗口,主动重置次数查询失败时会明确展示上次成功快照及其查询时间(缓存结果不提供重置按钮);Cursor 显示当前周期用量,CCC Agent 和 DSH 仅在官方 DeepSeek 端点时显示账户余额(其他兼容端点自动跳过) |
441
+ | `/usage` | 查看当前会话对应 Agent 的用量;Codex 显示 5h/7天窗口,主动重置次数查询失败时会明确展示上次成功快照及其查询时间(缓存结果不提供重置按钮);Cursor 显示当前周期用量,CCC Agent 和 DSH 仅在官方 DeepSeek 端点时显示账户余额(其他兼容端点自动跳过) |
438
442
  | `/git <子命令>` | 在当前会话工作目录执行 `git ...` 并回传输出 |
439
443
  | `/abd<内容>` | 去掉 `/abd` 前缀后把内容发给 Agent,并在消息末尾追加第一性原理需求澄清提示 |
440
444
  | `/plan <内容>` | 只读计划模式:仅允许读文件和 stop-stuck-loop 请求,不执行任何写操作 |
441
445
  | `/ask <内容>` | 只读问答模式:与 /plan 相同,仅允许读文件和 stop-stuck-loop 请求 |
442
- | `/restart` | 重启机器人进程 |
443
- | `/restart safe` / `/restartsf` | 停止接受新任务,等待现有会话、缓存消息和依赖安装完成后重启 |
444
- | `/update` | 更新 npm 全局包并重启(仅限 `npm install -g chatccc` 安装的全局进程;同一飞书事件跨重启去重) |
445
- | `/update safe` / `/updatesf` | 停止接受新任务,排空现有工作后更新并重启 |
446
- | `/safestatus` | 查看安全重启/更新的等待状态 |
447
- | `/cancelsf` | 取消尚未开始执行的安全重启/更新预约 |
446
+ | `/restart` | 重启机器人进程 |
447
+ | `/restart safe` / `/restartsf` | 停止接受新任务,等待现有会话、缓存消息和依赖安装完成后重启 |
448
+ | `/update` | 更新 npm 全局包并重启(仅限 `npm install -g chatccc` 安装的全局进程;同一飞书事件跨重启去重) |
449
+ | `/update safe` / `/updatesf` | 停止接受新任务,排空现有工作后更新并重启 |
450
+ | `/safestatus` | 查看安全重启/更新的等待状态 |
451
+ | `/cancelsf` | 取消尚未开始执行的安全重启/更新预约 |
448
452
  | `/deleteg` | 解散当前飞书会话群;Agent 会话记录保留 |
449
453
 
450
- `/update`、`/update safe` 与短别名 `/updatesf` 会把飞书消息或按钮事件 ID 原子写入 `~/.chatccc/state/update-command-guard.json`。同一 ID 跨重启重投时会静默忽略;用户主动发送的新更新指令因事件 ID 不同,仍可执行。该保护不改变普通消息与重启指令的处理方式。
451
-
452
- `/restart safe`(短别名 `/restartsf`)与 `/update safe`(短别名 `/updatesf`)会先建立全局准入门禁:指令到达前已经运行或进入单会话缓存队列的工作会继续完成,之后到达的新普通任务会被提示在维护完成后重发。维护任务持久化到 `~/.chatccc/state/safe-maintenance.json`,进程意外退出后可继续排空;依赖安装、会话收尾、自动恢复和 Agent Teams 执行也计入等待条件。内存缓存随重启自然重建,磁盘会话、看板、图片等持久数据不会被清理。
453
-
454
- ChatCCC 的内部重启和更新使用跨平台父子进程握手:替代进程完成启动预检后通知父进程退出,再等待旧监听端口实际释放并接管 PID;替代进程未就绪或握手超时时,父进程会保留并继续服务。
455
-
456
- Codex 和 Cursor 在 Linux/macOS 下使用独立进程组。停止时先显示“正在停止”,待进程组内后代退出后再显示“已停止”;仅外层 shell 退出不算清理完成。重复停止请求合并处理,清理失败会保留会话进程占用保护并报告“Agent 停止未完成”,后续请求必须先完成清理才能启动新 Agent。Windows 继续使用 `taskkill /T /F`,命令失败或超时不会当作成功。
457
-
458
- 飞书接收长连接启用 15 秒握手超时和 30 秒心跳应答超时;首次启动最多等待 45 秒真实连接确认后才提示就绪。运行期间连接持续异常 90 秒时,会关闭并重新建立接收连接,保留会话、消息去重和正在执行的任务。没有用户消息不会触发重连。连接状态与恢复记录写入运行日志和 `startup-trace.log`(`FEISHU-CONNECTION` / `feishu-connection`)。卡片更新遇到网络失败或序号冲突时不会当成送达成功,错误通知保留文本兜底;TLS 断线会明确显示为网络连接失败,已中断的 Agent 任务不会因此自动重放。
459
-
460
- > **模型切换**:`/model` 查看当前会话 Agent 的可选模型清单,`/model <名称>` 模糊匹配切换,`/model clear` 恢复默认。可选模型来自当前 Agent 的配置:Claude 使用 `claude.model` / `claude.subagentModel`;Cursor、Codex、CCC Agent 和 DSH 使用各自的 `model` / `alternativeModel`。
461
-
462
- Agent 的初始化、输入回显与重连通知不代表任务成功。Cursor、Codex 和 Claude 缺少成功完成事件,或任一 Agent 没有产生有效回复时,会明确提示异常;已生成的部分回复会保留并标为可能不完整。Cursor 重连过程显示在状态区,上游的 `resource_exhausted` / `unavailable` 分别提示请求受限 / 服务暂不可用,不推断为余额耗尽。执行失败不会自动重放整条任务。
454
+ `/update`、`/update safe` 与短别名 `/updatesf` 会把飞书消息或按钮事件 ID 原子写入 `~/.chatccc/state/update-command-guard.json`。同一 ID 跨重启重投时会静默忽略;用户主动发送的新更新指令因事件 ID 不同,仍可执行。该保护不改变普通消息与重启指令的处理方式。
455
+
456
+ `/restart safe`(短别名 `/restartsf`)与 `/update safe`(短别名 `/updatesf`)会先建立全局准入门禁:指令到达前已经运行或进入单会话缓存队列的工作会继续完成,之后到达的新普通任务会被提示在维护完成后重发。维护任务持久化到 `~/.chatccc/state/safe-maintenance.json`,进程意外退出后可继续排空;依赖安装、会话收尾、自动恢复和 Agent Teams 执行也计入等待条件。内存缓存随重启自然重建,磁盘会话、看板、图片等持久数据不会被清理。
457
+
458
+ ChatCCC 的内部重启和更新使用跨平台父子进程握手:替代进程完成启动预检后通知父进程退出,再等待旧监听端口实际释放并接管 PID;替代进程未就绪或握手超时时,父进程会保留并继续服务。
459
+
460
+ Codex 和 Cursor 在 Linux/macOS 下使用独立进程组。停止时先显示“正在停止”,待进程组内后代退出后再显示“已停止”;仅外层 shell 退出不算清理完成。重复停止请求合并处理,清理失败会保留会话进程占用保护并报告“Agent 停止未完成”,后续请求必须先完成清理才能启动新 Agent。Windows 继续使用 `taskkill /T /F`,命令失败或超时不会当作成功。
461
+
462
+ 飞书接收长连接启用 15 秒握手超时和 30 秒心跳应答超时;首次启动最多等待 45 秒真实连接确认后才提示就绪。运行期间连接持续异常 90 秒时,会关闭并重新建立接收连接,保留会话、消息去重和正在执行的任务。没有用户消息不会触发重连。连接状态与恢复记录写入运行日志和 `startup-trace.log`(`FEISHU-CONNECTION` / `feishu-connection`)。卡片更新遇到网络失败或序号冲突时不会当成送达成功,错误通知保留文本兜底;TLS 断线会明确显示为网络连接失败,已中断的 Agent 任务不会因此自动重放。
463
+
464
+ > **模型切换**:`/model` 查看当前会话 Agent 的可选模型清单,`/model <名称>` 模糊匹配切换,`/model clear` 恢复默认。可选模型来自当前 Agent 的配置:Claude 使用 `claude.model` / `claude.subagentModel`;Cursor、Codex、CCC Agent 和 DSH 使用各自的 `model` / `alternativeModel`。
465
+
466
+ Agent 的初始化、输入回显与重连通知不代表任务成功。Cursor、Codex 和 Claude 缺少成功完成事件,或任一 Agent 没有产生有效回复时,会明确提示异常;已生成的部分回复会保留并标为可能不完整。Cursor 重连过程显示在状态区,上游的 `resource_exhausted` / `unavailable` 分别提示请求受限 / 服务暂不可用,不推断为余额耗尽。执行失败不会自动重放整条任务。
463
467
 
464
468
  > **Codex Fast 模式**:Web UI 中的“Fast 模式”设置新 Codex 会话的全局默认值,默认关闭。进入 Codex 会话后,`/fast` 查询当前状态,`/fast on` 和 `/fast off` 只覆盖当前会话并从下一条消息生效。ChatCCC 会显式向 Codex CLI 传入 `service_tier="fast"` 或 `service_tier="default"`,因此关闭时不会继承用户 `config.toml` 中可能开启的 Fast。
465
469
 
@@ -1,75 +1,75 @@
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
- 模型原生流未收到完成事件、返回错误结束原因或达到输出长度限制时,会报告异常并保留已经输出的内容,不将不完整回复判为成功。没有回复且没有工具执行的空结果也会明确报错。用户主动取消仍按中断处理。
12
-
13
- 全局安装:
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
+ 模型原生流未收到完成事件、返回错误结束原因或达到输出长度限制时,会报告异常并保留已经输出的内容,不将不完整回复判为成功。没有回复且没有工具执行的空结果也会明确报错。用户主动取消仍按中断处理。
12
+
13
+ 全局安装:
14
+
15
+ ```bash
16
+ npm install -g deepccc
17
+ ```
18
+
19
+ 配置 `~/.deepccc/config.json` 或 `DEEPCCC_*` 环境变量后,运行:
14
20
 
15
21
  ```bash
16
- npm install -g deepccc
17
- ```
18
-
19
- 配置 `~/.deepccc/config.json` 或 `DEEPCCC_*` 环境变量后,运行:
20
-
21
- ```bash
22
- deepccc
23
- ```
24
-
25
- 浏览器会自动打开 `http://127.0.0.1:28080/`。终端模式使用:
26
-
27
- ```bash
28
- deepccc-cli
29
- ```
30
-
31
- 从源码运行:
22
+ deepccc
23
+ ```
24
+
25
+ 浏览器会自动打开 `http://127.0.0.1:28080/`。终端模式使用:
26
+
27
+ ```bash
28
+ deepccc-cli
29
+ ```
30
+
31
+ 从源码运行:
32
32
 
33
33
  ```bash
34
34
  git clone https://github.com/wzj998/deepccc-agent.git
35
35
  cd deepccc-agent
36
- npm install
37
- npm run build
38
- npm run dev
39
- ```
40
-
41
- ## Web UI 预览
42
-
43
- 以下画面来自 DeepCCC 对本项目真实开发需求的 Agent 调用。截图仅将用户名、组织名、
44
- 内部域名和绝对路径替换为公开示例,任务内容、模型配置、Agent 回复和审批流程均来自
45
- 实际运行结果。
46
-
47
- 多会话可以并行处理不同任务,每个会话分别选择 model、subModel 和 effort。下图来自
48
- `deepccc-agent/` 工作目录中的真实提问“这个项目妙在哪?”:
49
-
50
- ![DeepCCC Web UI 图片附件与真实 Agent 回复](docs/deepccc-web-ui.png)
51
-
52
- 命中需要确认的命令时,审批卡会直接出现在当前会话时间线中,不打断到弹窗:
53
-
54
- ![DeepCCC 会话内操作审批](docs/deepccc-inline-approval.png)
55
-
56
- 单一 API 配置作为新会话默认值,模型与 effort 仍可在每个会话中单独覆盖:
57
-
58
- ![DeepCCC API 与 Web 设置](docs/deepccc-api-settings.png)
59
-
60
- ## 核心能力
61
-
62
- - Web-first:多会话、持久化历史、实时流式过程、停止和恢复
63
- - 工具时间线:ChatCCC 风格 emoji 摘要、参数/结果折叠、省略行展开和状态记忆
64
- - 会话配置:每个会话独立选择 model、subModel 和 effort
65
- - 图片附件:Web 支持选择、粘贴和拖拽 PNG/JPEG/WebP;Agent 可用 `present_file` 回传图片
66
- - 本地工具:代码搜索、文件读写、补丁、命令执行、Git、网页搜索和抓取
67
- - 权限审批:危险命令在会话时间线中暂停,支持拒绝、允许一次、会话允许和永久允许
68
- - 上下文管理:自动压缩、原始流日志和跨会话历史检索
69
- - 长会话校准:当前状态覆盖旧建议,摘要区分历史/事实/推断/局限;轮内工具结果有独立预算,避免多步调查持续膨胀
70
- - 项目约定:自动加载 AGENTS.md、CLAUDE.md、系统提示和目录式 Skills
71
- - 项目理解:可控搜索范围、按需本地项目地图、源文件变化即失效的证据笔记;不针对特定业务仓库,详见 [项目理解与搜索](docs/workspace-understanding.md)
72
- - 自动化:`deepccc-cli --stream-json` 提供稳定 JSONL 事件接口
36
+ npm install
37
+ npm run build
38
+ npm run dev
39
+ ```
40
+
41
+ ## Web UI 预览
42
+
43
+ 以下画面来自 DeepCCC 对本项目真实开发需求的 Agent 调用。截图仅将用户名、组织名、
44
+ 内部域名和绝对路径替换为公开示例,任务内容、模型配置、Agent 回复和审批流程均来自
45
+ 实际运行结果。
46
+
47
+ 多会话可以并行处理不同任务,每个会话分别选择 model、subModel 和 effort。下图来自
48
+ `deepccc-agent/` 工作目录中的真实提问“这个项目妙在哪?”:
49
+
50
+ ![DeepCCC Web UI 图片附件与真实 Agent 回复](docs/deepccc-web-ui.png)
51
+
52
+ 命中需要确认的命令时,审批卡会直接出现在当前会话时间线中,不打断到弹窗:
53
+
54
+ ![DeepCCC 会话内操作审批](docs/deepccc-inline-approval.png)
55
+
56
+ 单一 API 配置作为新会话默认值,模型与 effort 仍可在每个会话中单独覆盖:
57
+
58
+ ![DeepCCC API 与 Web 设置](docs/deepccc-api-settings.png)
59
+
60
+ ## 核心能力
61
+
62
+ - Web-first:多会话、持久化历史、实时流式过程、停止和恢复
63
+ - 工具时间线:ChatCCC 风格 emoji 摘要、参数/结果折叠、省略行展开和状态记忆
64
+ - 会话配置:每个会话独立选择 model、subModel 和 effort
65
+ - 图片附件:Web 支持选择、粘贴和拖拽 PNG/JPEG/WebP;Agent 可用 `present_file` 回传图片
66
+ - 本地工具:代码搜索、文件读写、补丁、命令执行、Git、网页搜索和抓取
67
+ - 权限审批:危险命令在会话时间线中暂停,支持拒绝、允许一次、会话允许和永久允许
68
+ - 上下文管理:自动压缩、原始流日志和跨会话历史检索
69
+ - 长会话校准:当前状态覆盖旧建议,摘要区分历史/事实/推断/局限;轮内工具结果有独立预算,避免多步调查持续膨胀
70
+ - 项目约定:自动加载 AGENTS.md、CLAUDE.md、系统提示和目录式 Skills
71
+ - 项目理解:可控搜索范围、按需本地项目地图、源文件变化即失效的证据笔记;不针对特定业务仓库,详见 [项目理解与搜索](docs/workspace-understanding.md)
72
+ - 自动化:`deepccc-cli --stream-json` 提供稳定 JSONL 事件接口
73
73
 
74
74
  ## 缓存命中率
75
75
 
@@ -86,10 +86,10 @@ deepccc 的本地缓存优化实测命中率 **96.7%**,有效降低重复请
86
86
  ```bash
87
87
  export DEEPCCC_API_KEY="sk-..."
88
88
  export DEEPCCC_BASE_URL="https://api.deepseek.com/v1"
89
- export DEEPCCC_MODEL="deepseek-v4-pro"
90
- export DEEPCCC_EFFORT="high"
91
- export DEEPCCC_MAX_OUTPUT_TOKENS="32768"
92
- export DEEPCCC_STREAMING="true"
89
+ export DEEPCCC_MODEL="deepseek-v4-pro"
90
+ export DEEPCCC_EFFORT="high"
91
+ export DEEPCCC_MAX_OUTPUT_TOKENS="32768"
92
+ export DEEPCCC_STREAMING="true"
93
93
  ```
94
94
 
95
95
  Windows PowerShell:
@@ -98,10 +98,10 @@ Windows PowerShell:
98
98
  $env:DEEPCCC_API_KEY="sk-..."
99
99
  $env:DEEPCCC_PROVIDER="openai"
100
100
  $env:DEEPCCC_BASE_URL="https://api.deepseek.com/v1"
101
- $env:DEEPCCC_MODEL="deepseek-v4-pro"
102
- $env:DEEPCCC_EFFORT="high"
103
- $env:DEEPCCC_MAX_OUTPUT_TOKENS="32768"
104
- $env:DEEPCCC_STREAMING="true"
101
+ $env:DEEPCCC_MODEL="deepseek-v4-pro"
102
+ $env:DEEPCCC_EFFORT="high"
103
+ $env:DEEPCCC_MAX_OUTPUT_TOKENS="32768"
104
+ $env:DEEPCCC_STREAMING="true"
105
105
  ```
106
106
 
107
107
  也兼容这些 DeepSeek 别名:
@@ -119,10 +119,10 @@ $env:DEEPCCC_STREAMING="true"
119
119
  "apiKey": "sk-...",
120
120
  "baseURL": "https://api.deepseek.com/v1",
121
121
  "model": "deepseek-v4-pro",
122
- "subModel": "",
123
- "effort": "",
124
- "maxOutputTokens": null,
125
- "streaming": true,
122
+ "subModel": "",
123
+ "effort": "",
124
+ "maxOutputTokens": null,
125
+ "streaming": true,
126
126
  "contextWindow": 1048576,
127
127
  "git": {
128
128
  "coAuthor": {
@@ -131,39 +131,39 @@ $env:DEEPCCC_STREAMING="true"
131
131
  "email": "20184052+wzj998@users.noreply.github.com"
132
132
  }
133
133
  },
134
- "rawStreamLogs": {
134
+ "rawStreamLogs": {
135
135
  "enabled": true,
136
136
  "maxBytesPerTurn": 1048576,
137
137
  "retentionDays": 7,
138
- "keepCompleted": false
139
- },
140
- "web": {
141
- "port": 28080,
142
- "openOnStart": true
143
- }
144
- }
145
- ```
146
-
147
- ## Web UI
148
-
149
- 全局安装后可以直接启动本地网页版:
150
-
151
- ```bash
152
- deepccc
153
- ```
154
-
155
- 默认只监听 `http://127.0.0.1:28080/`,不会暴露到局域网。可在
156
- `~/.deepccc/config.json` 的 `web.port` 修改端口,`web.openOnStart` 控制启动时是否自动打开浏览器;也可以临时使用 `deepccc --port 28081 --no-open`。默认启动会安全替换经过实例身份验证的旧 DeepCCC Web;传入 `--reuse-existing` 时复用已有实例。`deepccc web` 保留为兼容别名。
157
-
158
- 从源码开发时,`npm run dev` 启动 Web Server 并打开页面(不启用 watch);`npm run dev:cli` 启动终端模式。
159
-
160
- Web UI 支持新建、恢复、重命名和删除多会话,多个会话可以同时运行,即使它们指向同一个工作目录。每个会话可独立选择 model、subModel 和 effort,并持续复用 CLI 已保存的历史。注意:当前版本不自动创建 Git worktree;同目录的多个运行中 Agent 直接修改同一组文件,页面会提示覆盖与冲突风险。
161
-
162
- 模型文本、reasoning 心跳和工具事件通过 SSE 实时更新。每轮消息按真实发生顺序持久化和回放,因此刷新后仍会保持“阶段说明 → 工具调用 → 后续结论”的交错时间线;旧版会话没有顺序数据时,会兼容显示为“工具调用 → 最终回答”。每次工具调用与对应结果合并成一张卡片,折叠态显示 emoji、工具名、状态和关键参数;展开后调用参数默认保留前 8/后 4 行,工具结果保留前 12/后 6 行,省略内容可继续展开。工具卡及省略行的展开状态保存在当前浏览器标签页的 `sessionStorage`,持续生成、切换会话和刷新页面均不会自动收起。消息正文支持标题、表格、列表、引用、链接和代码块等常用 Markdown。
163
-
164
- 图片始终按本地附件处理,不转换为 Provider 原生多模态消息。Web 支持文件选择、剪贴板粘贴和拖拽,每条消息最多 10 张 PNG/JPEG/WebP、单张最大 20 MB;附件复制到 `~/.deepccc/attachments/<session-id>/`,Agent 收到本地绝对路径后使用可用工具自行处理。Agent 可调用 `present_file` 把当前工作目录或会话附件目录中的图片直接展示在会话中;删除会话时对应附件一并清理。
165
-
166
- API 设置采用单一 Provider 配置,支持 OpenAI-compatible 与 Anthropic Messages。完整 API Key 只保存在本机 `~/.deepccc/config.json`,浏览器读取设置时仅返回掩码。危险命令会在会话中暂停并请求“拒绝、允许一次、本会话允许、永久允许”,浏览器断开或审批超时默认拒绝。
138
+ "keepCompleted": false
139
+ },
140
+ "web": {
141
+ "port": 28080,
142
+ "openOnStart": true
143
+ }
144
+ }
145
+ ```
146
+
147
+ ## Web UI
148
+
149
+ 全局安装后可以直接启动本地网页版:
150
+
151
+ ```bash
152
+ deepccc
153
+ ```
154
+
155
+ 默认只监听 `http://127.0.0.1:28080/`,不会暴露到局域网。可在
156
+ `~/.deepccc/config.json` 的 `web.port` 修改端口,`web.openOnStart` 控制启动时是否自动打开浏览器;也可以临时使用 `deepccc --port 28081 --no-open`。默认启动会安全替换经过实例身份验证的旧 DeepCCC Web;传入 `--reuse-existing` 时复用已有实例。`deepccc web` 保留为兼容别名。
157
+
158
+ 从源码开发时,`npm run dev` 启动 Web Server 并打开页面(不启用 watch);`npm run dev:cli` 启动终端模式。
159
+
160
+ Web UI 支持新建、恢复、重命名和删除多会话,多个会话可以同时运行,即使它们指向同一个工作目录。每个会话可独立选择 model、subModel 和 effort,并持续复用 CLI 已保存的历史。注意:当前版本不自动创建 Git worktree;同目录的多个运行中 Agent 直接修改同一组文件,页面会提示覆盖与冲突风险。
161
+
162
+ 模型文本、reasoning 心跳和工具事件通过 SSE 实时更新。每轮消息按真实发生顺序持久化和回放,因此刷新后仍会保持“阶段说明 → 工具调用 → 后续结论”的交错时间线;旧版会话没有顺序数据时,会兼容显示为“工具调用 → 最终回答”。每次工具调用与对应结果合并成一张卡片,折叠态显示 emoji、工具名、状态和关键参数;展开后调用参数默认保留前 8/后 4 行,工具结果保留前 12/后 6 行,省略内容可继续展开。工具卡及省略行的展开状态保存在当前浏览器标签页的 `sessionStorage`,持续生成、切换会话和刷新页面均不会自动收起。消息正文支持标题、表格、列表、引用、链接和代码块等常用 Markdown。
163
+
164
+ 图片始终按本地附件处理,不转换为 Provider 原生多模态消息。Web 支持文件选择、剪贴板粘贴和拖拽,每条消息最多 10 张 PNG/JPEG/WebP、单张最大 20 MB;附件复制到 `~/.deepccc/attachments/<session-id>/`,Agent 收到本地绝对路径后使用可用工具自行处理。Agent 可调用 `present_file` 把当前工作目录或会话附件目录中的图片直接展示在会话中;删除会话时对应附件一并清理。
165
+
166
+ API 设置采用单一 Provider 配置,支持 OpenAI-compatible 与 Anthropic Messages。完整 API Key 只保存在本机 `~/.deepccc/config.json`,浏览器读取设置时仅返回掩码。危险命令会在会话中暂停并请求“拒绝、允许一次、本会话允许、永久允许”,浏览器断开或审批超时默认拒绝。
167
167
 
168
168
  `git.coAuthor.enabled` 默认开启。DeepCCC 通过 `run_command` 创建 Git 提交时会保留用户为
169
169
  主 Author,并追加 `Co-authored-by: DeepCCC <20184052+wzj998@users.noreply.github.com>`。
@@ -174,19 +174,19 @@ API 设置采用单一 Provider 配置,支持 OpenAI-compatible 与 Anthropic
174
174
  `DEEPCCC_PROVIDER` 或命令行 `--provider` 覆盖:
175
175
 
176
176
  - `openai` 使用 OpenAI-compatible Chat Completions 协议,兼容 DeepSeek、OpenAI、LiteLLM、vLLM 等服务。
177
- - `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`;目标服务不支持时应留空。
178
-
179
- `streaming` 控制主对话是否使用流式请求,默认 `true`;也可以通过
180
- `DEEPCCC_STREAMING=true|false` 覆盖。关闭后,终端会在整条模型响应完成后一次性显示结果。
181
-
182
- `maxOutputTokens` 限制主对话单次最大输出 token,默认不配置(`null`/缺失),此时不向
183
- Provider 发送 `max_tokens`,使用模型服务端默认值。可通过 `DEEPCCC_MAX_OUTPUT_TOKENS`
184
- 或命令行 `--max-output-tokens` 覆盖;只接受正整数。该限制会同时覆盖模型思考内容、
185
- 工具参数和最终回答,设置过小可能导致工具调用或长回复被截断。
186
-
187
- `contextWindow` 是模型上下文窗口(token),默认 `1048576`(1M,DeepSeek V4 Pro/Flash
188
- 原生规格);常规上下文压缩阈值自动 = `contextWindow × 0.8`。工具输入与结果另有独立预算:
189
- 默认取 `min(64000, 常规压缩阈值 × 25%)`,超过后会提前压缩,避免长会话积累大量低信号工具输出。
177
+ - `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`;目标服务不支持时应留空。
178
+
179
+ `streaming` 控制主对话是否使用流式请求,默认 `true`;也可以通过
180
+ `DEEPCCC_STREAMING=true|false` 覆盖。关闭后,终端会在整条模型响应完成后一次性显示结果。
181
+
182
+ `maxOutputTokens` 限制主对话单次最大输出 token,默认不配置(`null`/缺失),此时不向
183
+ Provider 发送 `max_tokens`,使用模型服务端默认值。可通过 `DEEPCCC_MAX_OUTPUT_TOKENS`
184
+ 或命令行 `--max-output-tokens` 覆盖;只接受正整数。该限制会同时覆盖模型思考内容、
185
+ 工具参数和最终回答,设置过小可能导致工具调用或长回复被截断。
186
+
187
+ `contextWindow` 是模型上下文窗口(token),默认 `1048576`(1M,DeepSeek V4 Pro/Flash
188
+ 原生规格);常规上下文压缩阈值自动 = `contextWindow × 0.8`。工具输入与结果另有独立预算:
189
+ 默认取 `min(64000, 常规压缩阈值 × 25%)`,超过后会提前压缩,避免长会话积累大量低信号工具输出。
190
190
  可通过 `DEEPCCC_CONTEXT_WINDOW` 环境变量覆盖。⚠️ 超过模型/服务端实际上限时请求会被
191
191
  API 拒绝(context length exceeded),实际窗口以模型与所用服务端为准(如 litellm 的
192
192
  `max_input_tokens`)。
@@ -213,62 +213,62 @@ API 拒绝(context length exceeded),实际窗口以模型与所用服务
213
213
  在当前目录启动一个交互式 Agent:
214
214
 
215
215
  ```bash
216
- deepccc-cli
216
+ deepccc-cli
217
217
  ```
218
218
 
219
219
  指定其他模型或 OpenAI-compatible 接口:
220
220
 
221
221
  ```bash
222
- deepccc-cli --base-url https://api.openai.com/v1 --api-key "$OPENAI_API_KEY" --model gpt-4.1
222
+ deepccc-cli --base-url https://api.openai.com/v1 --api-key "$OPENAI_API_KEY" --model gpt-4.1
223
223
  ```
224
224
 
225
225
  使用 Anthropic Messages 协议(同样支持流式输出):
226
226
 
227
227
  ```bash
228
- deepccc-cli --provider anthropic --base-url https://api.example.com --api-key "$API_KEY" --model claude-sonnet-4-6
228
+ deepccc-cli --provider anthropic --base-url https://api.example.com --api-key "$API_KEY" --model claude-sonnet-4-6
229
229
  ```
230
230
 
231
- 指定工作目录:
231
+ 指定工作目录:
232
232
 
233
233
  ```bash
234
- deepccc-cli --cwd /path/to/project
235
- ```
236
-
237
- 附加一张或多张本地图片(可重复传入 `--image`,仍采用本地附件路径,不发送原生多模态内容):
238
-
239
- ```bash
240
- deepccc-cli --image ./error.png --image ./expected.webp
241
- ```
234
+ deepccc-cli --cwd /path/to/project
235
+ ```
236
+
237
+ 附加一张或多张本地图片(可重复传入 `--image`,仍采用本地附件路径,不发送原生多模态内容):
238
+
239
+ ```bash
240
+ deepccc-cli --image ./error.png --image ./expected.webp
241
+ ```
242
242
 
243
243
  恢复当前工作目录最近一次会话:
244
244
 
245
245
  ```bash
246
- deepccc-cli --resume
246
+ deepccc-cli --resume
247
247
  ```
248
248
 
249
249
  设置工具调用步数上限:
250
250
 
251
251
  ```bash
252
- deepccc-cli --max-steps 20
252
+ deepccc-cli --max-steps 20
253
253
  ```
254
254
 
255
- 默认情况下,`deepccc-cli` 不设置固定步数上限,会让模型自然完成工具循环。
255
+ 默认情况下,`deepccc-cli` 不设置固定步数上限,会让模型自然完成工具循环。
256
256
 
257
257
  设置推理强度(reasoning effort):
258
258
 
259
259
  ```bash
260
- deepccc-cli --effort high
260
+ deepccc-cli --effort high
261
261
  ```
262
262
 
263
- 可选值:`none` / `minimal` / `low` / `medium` / `high` / `xhigh` / `max`(留空则不传 `reasoning_effort` 请求字段)。
264
-
265
- 限制主对话最大输出 token:
266
-
267
- ```bash
268
- deepccc-cli --max-output-tokens 8192
269
- ```
270
-
271
- 不设置时使用 Provider 默认值。
263
+ 可选值:`none` / `minimal` / `low` / `medium` / `high` / `xhigh` / `max`(留空则不传 `reasoning_effort` 请求字段)。
264
+
265
+ 限制主对话最大输出 token:
266
+
267
+ ```bash
268
+ deepccc-cli --max-output-tokens 8192
269
+ ```
270
+
271
+ 不设置时使用 Provider 默认值。
272
272
 
273
273
  ## 权限机制
274
274
 
@@ -320,7 +320,7 @@ deepccc-cli --max-output-tokens 8192
320
320
  `--stream-json` 或程序化调用(无终端可交互)时,高危命令**安全默认拒绝**。需要全自动场景可显式传入:
321
321
 
322
322
  ```bash
323
- deepccc-cli --dangerously-bypass-permissions
323
+ deepccc-cli --dangerously-bypass-permissions
324
324
  ```
325
325
 
326
326
  该参数与 `ChatSession` 的 `permissionMode: "bypass"` 等价,也是 chatccc 集成 deepccc 时使用的模式(对齐 chatccc 调用 Claude Code / Codex 的 bypass 方式)。
@@ -329,12 +329,12 @@ deepccc-cli --dangerously-bypass-permissions
329
329
 
330
330
  交互模式下,每轮回复渲染为固定"过程区块":状态行(压缩上下文中/生成回复中/完成/已停止/异常结束)+ 折叠工具行 + 原地更新正文,不滚屏刷 JSON。活动状态有心跳点号动画;完成/停止/异常后区块定型留在屏幕上。
331
331
 
332
- 持久化上下文达到常规 token 阈值或独立工具预算时,deepccc 会先按预算保留最近消息,再压缩较早内容;工具历史使用标准结构化 tool-call/tool-result 消息重放,不会把内部 `[工具记录]` 文本重复送回模型。若模型仍输出伪工具记录,系统会丢弃并重试一次;重复失败时安全终止,避免把未执行命令当成真实结果。超长历史消息、工具记录和压缩输入会被限长,一次压缩最多等待 5 分钟。
332
+ 持久化上下文达到常规 token 阈值或独立工具预算时,deepccc 会先按预算保留最近消息,再压缩较早内容;工具历史使用标准结构化 tool-call/tool-result 消息重放,不会把内部 `[工具记录]` 文本重复送回模型。若模型仍输出伪工具记录,系统会丢弃并重试一次;重复失败时安全终止,避免把未执行命令当成真实结果。超长历史消息、工具记录和压缩输入会被限长,一次压缩最多等待 5 分钟。
333
333
 
334
334
  如果终端渲染出现异常,可以强制回退为纯文本流式输出:
335
335
 
336
336
  ```bash
337
- deepccc-cli --plain
337
+ deepccc-cli --plain
338
338
  ```
339
339
 
340
340
  ## JSONL 流式输出
@@ -342,13 +342,13 @@ deepccc-cli --plain
342
342
  JSONL 模式适合脚本、服务端集成或其他上层系统调用:
343
343
 
344
344
  ```bash
345
- deepccc-cli --stream-json --prompt "检查这个仓库并总结测试命令"
345
+ deepccc-cli --stream-json --prompt "检查这个仓库并总结测试命令"
346
346
  ```
347
347
 
348
348
  也可以从 stdin 传入提示词:
349
349
 
350
350
  ```bash
351
- echo "运行测试并解释失败原因" | deepccc-cli --stream-json
351
+ echo "运行测试并解释失败原因" | deepccc-cli --stream-json
352
352
  ```
353
353
 
354
354
  输出是逐行 JSON:
@@ -381,6 +381,8 @@ ChatCCC 是一个把 Claude Code / Codex / Cursor / CCC Agent 聚合到飞书/
381
381
 
382
382
  这种方式适合已经在 ChatCCC 里协作的场景:ChatCCC 负责会话入口和消息通道,`deepccc` 负责本地编程 Agent 能力,包括读取项目提示词、运行命令、编辑文件和输出流式结果。
383
383
 
384
+ deepccc 内核支持**协作式让位**:任务运行期间用户继续发消息,ChatCCC 会把消息排入注入队列(深度 50),内核在每个模型步骤边界(`prepareStep`)吸收进当前 turn——不打断正在执行的工具步骤、不新开一轮对话,已完成的中间态持久化保留,收到插话后继续调整方向。`/stop` 打断当前 turn,`/cancel` 清空注入队列。该能力通过 `chat()` 的 `drainInput` 回调对外暴露,运行期新消息以 `input_injected` 事件反馈到调用方;仅流式(`streaming: true`)模式生效,non-streaming 下退化为整轮结束后消费。
385
+
384
386
  deepccc 的内核主战场在 ChatCCC 仓库的 `deepccc-agent/` 子目录;本仓库(deepccc-agent)是发布镜像,由 ChatCCC 仓库的 `sync-deepccc.mjs` 目录级同步(多的删、少的补、不同的改),之后 `npm run build && npm publish` 发布独立 `deepccc` 包。
385
387
 
386
388
  ## 项目提示词自动注入
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepccc",
3
- "version": "0.2.14",
3
+ "version": "0.2.16",
4
4
  "description": "A lightweight coding agent with OpenAI-compatible and Anthropic Messages API support.",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [