# @chatcode/cco-tui 中文文档

规范地址：https://npmcn.com/package/%40chatcode/cco-tui/

版本：0\.10\.0-rc\.28
npm 元数据更新时间：2026-11-02T05:21:23.741Z
中文译文更新时间：2026-11-09T13:08:00.238Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40chatcode/cco-tui
原文对照：https://npmcn.com/package/%40chatcode/cco-tui/?lang=original
项目主页：https://github.com/ccch1mneyyy/dsh-TUI#readme
源码仓库：https://github.com/ccch1mneyyy/dsh-TUI

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：7.5 MB，1466 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：^22\.19 \|\| \>=24
- 运行依赖：32 个
- peer 依赖：@deepseek-ai/cordis ^4\.0\.1，@deepseek-ai/dsh-llm ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-agent ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-skill ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-persona ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-session ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-storage ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/schemastery ^3\.18\.1，@deepseek-ai/dsh-commands ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-settings ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-terminal ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-llm-pi-ai ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-workspace ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-invariants ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-tool-cordis ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-atomic-write ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-storage-json ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-session-stats ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-system-prompt ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-terminal-bash ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-tool-ask-user ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-tool-subagent ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-user-approval ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-storage-domain ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-user-questions ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-agent-instructions ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-cordis-host-runner ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-session-projection ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2，@deepseek-ai/dsh-tool-bash-persistent ^0\.1\.0-rc\.6 \|\| ^0\.1\.1-rc\.1 \|\| 0\.1\.2-alpha\.3 \|\| 0\.1\.2-alpha\.4 \|\| 0\.1\.2-alpha\.5 \|\| 0\.1\.2-rc\.1 \|\| 0\.1\.6-alpha\.2 \|\| 0\.1\.7-rc\.2
- 首次发布：2026-09-22T05:08:43.908Z
- 最新版本发布：2026-11-02T05:21:23.566Z
- 近 30 天下载量：2649（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：31（近 12 个月 31 个）

## 中文简介

ChatCode CLI的交互式终端前端,由端口的"墨子"核心所建.

## 安装

```sh
npm install @chatcode/cco-tui
```

也可以使用：`pnpm add @chatcode/cco-tui`、`yarn add @chatcode/cco-tui`、`bun add @chatcode/cco-tui`

## README

![ChatCode CLI terminal interface](https://npmcn.com/package/%40chatcode/cco-tui/docs/assets/logo.svg)

**简体中文** | [English](https://npmcn.com/package/%40chatcode/cco-tui/README_EN.md)

[![npm](https://img.shields.io/npm/v/@chatcode/cco-tui?style=flat-square&color=4b6fff)](https://www.npmjs.com/package/@chatcode/cco-tui) [![CI](https://github.com/ccch1mneyyy/dsh-TUI/actions/workflows/ci.yml/badge.svg)](https://github.com/ccch1mneyyy/dsh-TUI/actions/workflows/ci.yml) [![MIT License](https://img.shields.io/badge/license-MIT-263146?style=flat-square)](https://npmcn.com/package/%40chatcode/cco-tui/LICENSE) ![Public beta](https://img.shields.io/badge/status-public%20beta-7da1de?style=flat-square) ![官方收录](https://img.shields.io/badge/DeepSeek%20Harness%20%E5%AE%98%E6%96%B9%E5%85%AC%E4%BC%97%E5%8F%B7-%E6%94%B6%E5%BD%95-brightgreen)

# ChatCode CLI TUI

> 一个美观且实用的 Claude Code 风格 TUI 插件：ChatCode CLI 风格首屏、深灰终端界面、实时工作状态行、思考流式展开、双击 Esc 时间回溯、上下文进度条 + TPS 仪表。 零核心改动，纯插件挂载。安装插件即可启用，卸载后不会留下核心补丁。 献给钟爱tui的各位极客们~
> 
> A beautiful, practical Claude Code-style TUI plugin: a ChatCode CLI-style startup screen, charcoal terminal surfaces, a real-time status line, streaming thought expansion, double-Esc time rewind, context progress bar, and TPS gauge. Zero core changes, pure plugin mounting. Install to enable; uninstall leaves no core patches. For all TUI-loving geeks~

## 🎉 官方收录

本插件被 **DeepSeek Harness 官方公众号** 推文收录，也被 [dshfind](https://dshfind.com/ccch1mneyyy/dsh-TUI) 插件目录与 [GitHub Trending](https://trendshift.io/repositories/146168) 收录，同时登上了Github Treding日榜第七

<table><tbody><tr><td align="center"><img src="https://npmcn.com/package/%40chatcode/cco-tui/screenshots/wechat-official.png" alt="DeepSeek Harness 官方公众号推文收录 dsh-TUI" width="480" loading="lazy" decoding="async" referrerpolicy="no-referrer"><br><strong>DeepSeek Harness 官方公众号推文收录</strong></td><td align="center"><a href="https://dshfind.com/ccch1mneyyy/dsh-TUI" rel="nofollow noopener noreferrer"><img src="https://dshfind.com/api/card/ccch1mneyyy/dsh-TUI?lang=zh" alt="dsh-TUI on dshfind" width="420" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a><br><strong>dshfind 插件目录收录</strong><br><br><a href="https://trendshift.io/repositories/146168" title="GitHub Trending 日榜 #7 · TypeScript 口径" rel="nofollow noopener noreferrer"><img alt="Trendshift" src="https://trendshift.io/api/badge/trendshift/repositories/146168/daily?language=TypeScript" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a><br><strong>dshfind Github Treding榜第七</strong></td></tr></tbody></table>

## 核心能力

-   **版本更新日志**：升级后首次启动展示后台配置的当前版本 Markdown 内容；即使跳过多个版本，也只展示当前版本的一条日志，关闭后同版本不再提示。
    
-   **终端交互**：低资源占用，长会话稳定可靠；多种主题切换，样式美观，输入框下方默认显示 ChatCode 平台账号全端今日总 Token 消耗（与 chatcode-cli 同源同逻辑，完整标签为「今日总Token消耗 ${token}」）与当前上下文占用，`/tokens` 的当前上下文百分比与该看板同源，并实时显示工作状态、TPS、缓存命中率等 推理等级、输入/输出 token 与 Git/会话信息；终端卡多行命令可经 `/settings` 折叠为首行 + 计数提示（Ctrl+O 或点击卡片展开）；全屏模式下悬停在截断的工具卡标题或会话标题上约 600ms，浮层显示完整内容。
    
-   **上下文检查**：`/context` 在独立只读页面中按系统提示词、工作区指令、运行时上下文、技能和工具分组展示；`←/→` 切换分组，方向键或翻页键滚动，`Esc`/`q` 返回会话，不向聊天记录追加报告行。
    
-   **底栏设置**：`/settings` 中的底栏选项即时生效，极简模式也遵循勾选状态；“显示模型”展示当前模型名称。底栏和设置面板不提供花费估算。
    
-   **模型配置**：`/model` 打开后直接平铺全部可用模型，主行显示真实模型名称，供应商作为次级信息；产品目录不展示原生 `deepseek-official` 模型。模型切换沿用当前会话 ID 和完整历史，不创建同名副本；CLI 与 Web 共用 `~/.chatcode-cli/model.json`，任一端保存后由另一端在重启时读取。`/model-config` 与 Web 原生模型页共用 `<CHATCODE_CLI_HOME>/cordis.patch.yml` 中的 `llm-pi-ai.providers` 配置，可新增、编辑、真实测试和删除自定义模型；密钥通过凭据服务保存到同目录的 `.credentials.yaml`，配置只保存 `apiKeyEnv` 引用，不再读取 `settings.json.customModels`，同时显示 CodingPlan 内置模型和只读元景模型；仅在配置服务支持切换时显示“元景”开关，新版目录型服务直接展示已启用模型。保存后本端立即生效，另一端在文件监听稳定后更新；重新打开模型列表可查看变化，无需重启。当前项行尾标记 `[当前]`。同供应商下的模型共用协议、地址和密钥；删除模型保留可能被其他配置引用的凭据。旧 JSON 配置不自动迁移，请通过模型配置界面重新录入。
    
-   **本地开发启动**：在本仓库中执行 `pnpm cco` 会回落到 PATH 中的全局 `cco`，不会加载当前 worktree。使用 `pnpm dev:copy-config` 复制 `settings.json` / `settings.yaml` / 凭据到隔离的开发目录，再执行 `pnpm dev` 构建、安装并启动当前 worktree。
    
-   **功能全面**：`/resume` 按工作目录分类浏览、搜索与预览历史会话（左键恢复、右键弹出操作菜单；可固定常用会话——「已固定」分组置顶显示，行内 ★ 或 `Ctrl+P` 切换，持久化到 `~/.chatcode-cli/tui`；也可搜索 `/tag` 写入的本地标签），另有 `/agentview` 会话总览（CC 同款 agent view：空输入 `←` 一键后台化，后台会话派发/预览/回复/停止一站式管理）、`/clear`（新会话）、`/clean`（清视图）、`/compact`、`/export`、`/btw`，以及 `/copy [N]`（复制最近回复或代码块）、`/diff`（查看暂存/未暂存/未跟踪改动）、`/memory`（编辑 Harness 发现的用户级与工作区 `AGENTS.md`；macOS 未配置编辑器时使用系统 `nano`）、`/files`（列出真正加载进模型上下文的指令文件）、`/version`（查看当前运行版本）、`/statusline`（直达底栏设置）、`/code-ratio`（本月本地 Git 作者 churn 占比，不推断 AI 采纳率）、`/tasks`/`/bashes`（复用 `/jobs`）、`/branch [名称]`（复用并增强 `/fork`）、`/keybindings`（直达快捷键设置）、`/sandbox`（复用 DSH `/permission` 与 sandbox preset）、`/hub`（兼容 `/home`、`/workbench`），以及 `/stats session`（读取官方全日志统计投影）、`/tag <名称>`（会话标签）、`/preset manage|create|edit|plugins|delete`（通过官方 Agent Presets 名册管理用户预设），以及 `/inspect`、`/repair`、`/ship`、`/review`、`/security-review`、`/pr-comments` 六个由当前 Harness agent 执行的受约束工作流（兼容 `/map`、`/fixit`、`/handoff`）；模型热切换，原生subagent，会话fork，自动更新，输入框 `/vim` vim 编辑模式、鼠标选区编辑（拖选高亮、Shift+click 扩展、双击选词、Ctrl+C 复制选区）与全屏草稿编辑（`Ctrl+Shift+E` 或输入行 `⛶` 按钮：行号 + 当前行高亮、Enter 换行、Ctrl+Enter 发送、滚轮滚动、点击/拖选，长草稿独占整屏；`/settings` 可关）；可在vs code中[以vscode插件形式启动](https://npmcn.com/package/%40chatcode/cco-tui/docs/vscode.md)，已上架 VS Code Marketplace。
    
-   **扩展丰富**：原生浏览器交互、Computer Use 等扩展。Computer Use 默认关闭，在 `/settings` → **电脑操作** 中确认开启；Enter 允许并开启，Esc 取消。它与 Web 共用 `~/.chatcode-cli/cordis.patch.yml`（可用 `CHATCODE_CLI_HOME` 自定义），选择持续保留，关闭后移除操作工具。
    
-   **技能由宿主管理**：`/skills` 展示当前 Profile、用户与项目发现的技能；ChatCode CLI TUI 不预装通用技能。
    

当前模型与模型配置分别同步：进程启动时读取一次 `model.json` 并生成本端缓存，之后新建或恢复会话都采用该缓存；另一端改变选择后必须重启进程，刷新 Web 页面不会采用新选择。切换模型等待跨进程写锁与原子保存完成才确认成功，失败保留原模型；重选当前模型仍保存。成功显示绿色“已切换至「模型名称」”，开始界面同步更新名称，但不清屏或滚到顶部。

任务清单随每次成功的进度更新逐项打勾，并标记当前进行中的步骤；完成后保留清单和完成数，下一轮任务开始时清空旧清单。导入记录缺少清单专用事件时，也会从已确认成功的 `todo_write` 记录恢复进度。

macOS 下使用 `sudo` / `su` 导致终端标识缺失时，TUI 跳过可能漏出 `p` 的终端状态探测；已识别的兼容终端保留自动恢复能力。

## 界面预览

<table><tbody><tr><td align="center"><img src="https://npmcn.com/package/%40chatcode/cco-tui/screenshots/splash.png" alt="首屏：ChatCode CLI 风格信息面板" width="480" loading="lazy" decoding="async" referrerpolicy="no-referrer"><br><strong>首屏：ChatCode CLI 风格信息面板</strong></td><td align="center"><img src="https://npmcn.com/package/%40chatcode/cco-tui/screenshots/working-line.png" alt="工作状态行 + 上下文进度条" width="480" loading="lazy" decoding="async" referrerpolicy="no-referrer"><br><strong>工作状态行 + 上下文进度条</strong></td></tr></tbody></table>

## 快速开始

Host 的标准错误流（stderr）重定向到文件或管道时会保留日志输出；只有 stderr 仍连接终端时，渲染器才拦截写入以保护界面。inline 与全屏模式均遵循此规则。

回合失败会显示 HTTP 状态和服务端返回的具体原因，并自动换行；错误中的 API key、认证令牌和接口 URL 会在展示前脱敏。

前置条件：安装 [Node.js](https://nodejs.org/zh-cn)。ChatCode CLI TUI 使用 ChatCode 提供的模型；DeepSeek 模型和 Provider 标识按原协议保留。

安装命令：

```sh
npm install -g @chatcode/chatcode-cli
```

单独更新 TUI 时，使用 `@chatcode/cco-tui@0.10.0-rc.24` 或更新版本。该版本修正了会话投影和统计的 peer 范围，允许与 `0.1.2-rc.1` 宿主依赖共同安装；无需使用 `--force` 或 `--legacy-peer-deps` 绕过这项冲突。主 CLI 固定引用 TUI 版本，需随 CLI 发版更新引用才能自动带入此修复。

启动命令：

```bash
# 默认启动 TUI
chatcode-cli
# 简写；cco 不带参数只启动 TUI
cco
# 在 TUI 内输入 /web，或从终端直接启动 Web
cco web
```

TUI 首页会持续显示 Web 启动提示。`/web` 等同于 `/web on`：首次启动 Web，服务就绪后打开带认证 token 的链接；已有同一用户目录下的 Web 实例时，验证实例并获取它当前有效的链接，复用原进程打开浏览器。每次执行都会在 CLI 中保留用法和完整访问 URL。`/web off` 关闭该 Web 服务并等待端口释放，CLI 保持运行；命令补全提供 `on|off` 中文说明。链接包含访问权限，请勿分享。此功能需要主启动器 `3.0.4-rc.2` 或更高版本。

首次由当前 TUI 启动的 Web 仍由它管理，退出 TUI 时一并停止。复用在另一个终端通过 `cco web` 启动的独立实例不会改变其归属，退出 TUI 不会停止它；显式 `/web off` 会关闭同一用户目录登记的实例。`cco web` / `pnpm cco web` 使用相同的复用机制，终端也支持 `cco web on|off`。现有英文界面可继续通过 `/lang en` 使用，中文界面的全部内置命令描述已补齐。

天梯功能默认关闭。宿主挂载天梯插件后，输入 `/tianti`（别名 `/tt`）会自动列出 `on`（打开）和 `off`（关闭），并标出当前状态；运行 `/tianti on` 后即可使用查询、交付及模型工具，`/tianti off` 关闭这些能力。开关会保留到下次启动。

首页“版本”与 `/version` 的 ChatCode CLI 行读取主启动器包版本，与 `cco --version` 和 Web 构建版本保持一致；`/version` 另行显示 TUI 插件版本，供插件更新与诊断使用。

设置页、启动及错误提示统一显示 `chatcode-cli`；内部 `dsh-tui` 插件 ID、设置 namespace 与旧数据兼容保持不变。首页“AI代码生成占比”显示平台当月统计：加载时显示“加载中”，无提交数据时显示“暂无数据”，查询失败显示“暂不可用”并每 30 秒重试，成功后每 10 分钟刷新；不会把失败或无数据伪装成 `0%`。

新会话默认使用执行 `cco` 时的当前目录，不会自动提升到父级 Git 仓库根目录；首页、会话上下文和 `@` 文件补全使用同一个目录。显式 `workspace`/`cwd` 配置仍可指定其他目录；恢复旧会话会沿用该会话记录的目录。详见[工作目录配置](https://npmcn.com/package/%40chatcode/cco-tui/docs/configuration.md#tui-%E9%85%8D%E7%BD%AE)。

`@` 先展示当前目录第一层的文件和子目录，不递归展开。输入文字仅在当前层按名称进行不区分大小写的连续子串匹配；选中目录后按 Tab、Enter 或点击可进入下一层，选中文件则完成引用。也可直接输入 `@src/`、`@../`、`@~/` 等路径切换目录。每次新建提及刷新目录列表，同一提及中编辑名称复用当前层缓存；加载完成后才能选择。带空格的目录会自动加引号，并继续补全其子项。

提交 `@文件` 时优先匹配完整文件名；未加引号且完整名称不存在时，可识别紧接文件名的标点或扩展名后的中文说明，例如 `@需求.xlsx，帮我总结`、`@需求.xlsx这个文件帮我总结`，不会把说明文字当成缺失的文件。含标点的真实文件名仍优先匹配，双引号中的路径严格按原文查找；`~/` 路径在补全与提交时均按用户主目录展开。

`@` 引用的 Excel、PDF 等非文本文件若已存在，会将解析后的路径交给模型，由相应工具读取；宿主支持字节范围读取时，只读取一个字节检查访问权限，不再整文件读取或尝试 UTF-8 解码，也不依赖文本解码错误的具体错误码。真正缺失或无权限读取的文件仍提示失败。子代理详情页的 `X` 会请求中断当前任务并显示结果，等待期间仍可切页或按 Esc 返回；一次性本地子代理与可继续运行的子代理分别使用宿主对应的取消接口，最终状态以宿主事件为准。归档列表中点击会话或按 Enter 均执行取消归档，不会尝试直接恢复仍处于归档状态的会话。

全屏草稿编辑器同样支持 `@` 文件补全：方向键选择，Tab 或 Enter 接受，Esc 先关闭候选列表、再收起编辑器；Ctrl+Enter 可在扫描期间直接发送。长草稿与窄窗口会为候选列表预留高度，保持输入位置和中文输入法光标可见。从行内模式展开时临时进入全屏，收起后恢复原来的终端内容。

把一张本地 PNG、JPEG、WebP 或 GIF 图片从文件管理器拖到普通输入框或草稿编辑器，输入框会插入该图片的 `@` 引用，提交时作为图片附件发给模型；路径含空格时自动加引号，支持终端转义的括号等字符，在已有文字后插入时自动分隔。此功能依赖终端提供本地文件路径；网页图片 URL 不会自动下载，非图片文件或普通文字保持原样。

Ctrl+A 子代理面板、详情和对话中的子代理卡片优先显示模型目录中的名称；目录缺失、名称为空或查询失败时回退到模型 ID。

`cco -r` 或 `chatcode-cli -r` 直接继续当前工作目录最近使用的对话；`--resume`、`-c` 和 `--continue` 支持相同行为。空会话、子代理运行及其他目录的会话不会被选中；当前目录没有历史对话时会提示。使用 `cco -r <会话ID>` 或 `--resume=<会话ID>` 可指定恢复目标。兼容启动器 `dsh-tui`/`dst` 也支持这些参数。

`/resume` 与 Web 共用会话目录，支持尚未迁移的旧版历史日志。升级后会自动重建历史列表缓存并保留本地分支备注；无法完整读取的会话不会被判为空会话或加入空会话清理。列表默认按当前工作目录筛选，可切换目录查看其他项目的历史。Web 创建并登记的工作区目录会单独显示，含空目录；即使位于当前目录之下，也不会并入当前工作区。共享工作区服务可用时，会话归属、固定及归档状态与 Web 共用；未归属会话单列，归档项默认不显示。`/resume` 的移除操作会归档并保留日志；按 Ctrl+E（macOS 为 Cmd+E）切换已归档列表，可恢复或永久删除。永久删除显示会话及所属子代理的总记录数，默认取消；普通分叉、工作区文件与 Git 数据保留。两端调用相同的宿主操作，运行中的会话或被其他进程持有的写锁会阻止删除。共享服务不可用时不提供本地文件删除回退。

`/export`（或 `/export jsonl`）把当前会话的完整事件日志写入工作目录下的 `chatcode-cli-export-<时间>-<随机标识>.jsonl`，保留消息、思考内容、工具调用与结果。安装会话导入插件后，用 `/import cco <导出文件的绝对路径>` 导入，再通过 `/resume` 选择导入会话继续。`/export markdown`（别名 `/export md`）保留可读 Markdown 导出；旧的 `.md` 文件不能作为原始日志导入。JSONL 导出只包含当前会话日志，附件保留引用，不打包附件文件或子会话。

如果你想手动安装，可以使用仓库根目录的 `install.sh`：

```sh
sh install.sh
# 插件维护场景：
chatcode-cli plugin --profile dsh-tui add @chatcode/cco-tui
```

> **新用户提示**：若 `chatcode-cli plugin` 安装时报 `ERR_PNPM_IGNORED_BUILDS`（pnpm ≥11 默认阻止带安装脚本的依赖，如 `@google/genai`、`protobufjs`——这些脚本运行时不需要，忽略即可），在 profile 的 `pnpm-workspace.yaml` 里加入：
> 
> ```yaml
> allowBuilds:
>   '@google/genai': false
>   protobufjs: false
> ```
> 
> TUI 内 `/update` 与兼容启动器的 `dsh-tui update` 会自动写入这份配置，无需手工处理。

更面向零基础的安装流程、profile 叠加机制、源码构建与常见问题见[安装与快速开始](https://npmcn.com/package/%40chatcode/cco-tui/docs/getting-started.md)。

## 插件扩展与开发指南

想为 ChatCode CLI TUI 做插件/扩展？欢迎加入生态！

-   **接口与兼容性协定 / 插件开发指南**：[终端交互生态插件准入与开发指南](https://github.com/T-Auto/dsh-ecosystem-spec/blob/main/docs/plugin-admission-and-development.md)（准入规范、接缝、契约、验证清单）
-   **生态组织**：[dsh-tui-ecosystem](https://github.com/dsh-tui-ecosystem)（社区插件与模板的家）
-   **模板仓库**：[plugin-template](https://github.com/dsh-tui-ecosystem/plugin-template)（从模板起步，5 分钟出一个插件）
-   **参考实现**：`dsh-working-activity`（实时工作状态行：TUI 槽位 + `activity/status` 会话事件双出口）

### 接缝稳定性参考

按当前实现成熟度给出的**非正式**分级，帮助插件作者评估投入；正式状态与兼容性协定以 [准入与开发指南](https://github.com/T-Auto/dsh-ecosystem-spec/blob/main/docs/plugin-admission-and-development.md)为准：

| 分级 | 接缝 |
| :-: | :-: |
| 稳定候选（形态冻结；如有破坏性变更，先在次版本弃用告警再移除） | 六 设置区块 · 八 全屏场景 · 十 托管对话框 · 十一 状态行 · 十二 键盘快捷键 · 十三 条目渲染器 |
| 实验性（仍可能随 dsh-std / 准入规范演进调整） | 九 决策事件 · toast 通知（`ctx.tuiToast`，新增） |
| 跟随上游（稳定性由 cordis / dsh 官方机制决定） | 一 会话事件 · 二 官方 prompt 槽位 · 三 技能打包 · 四 主题 · 五 system prompt 段 · 七 profile 组合 |

另：`@chatcode/cco-tui/test-utils`（headless 准入/挂载测试助手）与 `@chatcode/cco-tui/api`（纯类型入口）为实验性公开面。

## 文档索引

| 主题 | 内容 |
| :-: | :-: |
| [安装与快速开始](https://npmcn.com/package/%40chatcode/cco-tui/docs/getting-started.md) | 前置条件、安装、启动、profile 生命周期、源码开发 |
| [配置参考](https://npmcn.com/package/%40chatcode/cco-tui/docs/configuration.md) | Cordis 覆盖、配置字段、Agent preset、MCP、环境变量 |
| [主题系统](https://npmcn.com/package/%40chatcode/cco-tui/docs/themes.md) | 内置主题、自动检测、静态 JSON 与 npm 插件主题、校验规则 |
| [交互与命令](https://npmcn.com/package/%40chatcode/cco-tui/docs/interaction.md) | 快捷键、鼠标、问卷、slash command 与会话工作流 |
| [架构与限制](https://npmcn.com/package/%40chatcode/cco-tui/docs/architecture.md) | 运行链路、渲染与持久化设计、安全边界、已知限制 |
| [VS Code 使用指南](https://npmcn.com/package/%40chatcode/cco-tui/docs/vscode.md) | 在 VS Code 集成终端运行 dsh-tui；companion 扩展 `dsh-tui-vscode` 提供与 Claude Code 官方扩展几乎一致的体验（已上架 Marketplace） |
| [贡献与开发约定](https://npmcn.com/package/%40chatcode/cco-tui/docs/contributing.md) | 贡献流程、仓库地图、构建产物、验证矩阵与修改规则 |
| [插件准入与开发指南](https://github.com/T-Auto/dsh-ecosystem-spec/blob/main/docs/plugin-admission-and-development.md) | 接口与兼容性协定 / 插件准入规范 / 插件接缝 / 契约 / 验证清单（已并入 dsh-ecosystem-spec） |

完整的中英文索引见 [`docs/README.md`](https://npmcn.com/package/%40chatcode/cco-tui/docs/README.md)。

## 社区

-   **生态组织**：[dsh-tui-ecosystem](https://github.com/dsh-tui-ecosystem) —— 社区插件、模板与收录列表的家。欢迎来发插件、提创意、互相取暖 🐋
-   **社区交流群**：使用问题、插件创意、功能许愿，都欢迎进来聊。
-   **行为准则**：参与前请读一遍[贡献者行为准则](https://npmcn.com/package/%40chatcode/cco-tui/CODE_OF_CONDUCT.md)。

| 微信群 | QQ 群（群号 572549239） | 微信四群 |
| :-: | :-: | :-: |
| ![dsh-TUI 社区交流群微信群二维码](https://npmcn.com/package/%40chatcode/cco-tui/screenshots/wechat-group.jpg) | ![dsh-TUI 社区交流群 QQ 群二维码](https://npmcn.com/package/%40chatcode/cco-tui/screenshots/qq-group.png) | ![dsh-TUI 社区交流四群微信群二维码](https://npmcn.com/package/%40chatcode/cco-tui/screenshots/wechat-group4.jpg) |

> 微信群二维码约 7 天过期一次，如遇失效请走 QQ 群（572549239），或开个 issue 提醒我们更新。

## 权限与安全边界

CLI 和 Web 使用相同的工作区账本。会话必须登记在该工作区的 `sessionIds` 中，且会话头部目录与工作区规范路径一致；缺少登记、主动移出工作区或工作区登记被删除时显示“未分组”，不再显示“未记录目录”或“未归属会话”。打开 `/resume` 会刷新账本，选择器打开期间也接收另一进程的工作区变化；共享 JSON 后端在后台每 1.5 秒检查一次。TUI 配置的自定义模型在 Web 模型页可编辑，在模型选择器统一归类为“自定义模型”；provider ID 保持不变。

自定义模型字段统一为：`models[].id` 是模型 ID，`models[].name` 是模型显示名称，提供商的 `displayName` 是提供商名称。“自定义”只作为分类标签。在 `/model-config` 的添加表单中先选择“模型提供商”：选择 Web 或 TUI 已配置的提供商可追加模型；选择“新增提供商”可从目录选择 `deepseek` 等 ID，或填写稳定的自定义 ID，不再生成随机提供商 ID。已有提供商 ID 不允许重复创建，同一提供商内的模型 ID 不允许重复添加；应编辑已有配置。追加模型保留提供商的地址、协议、密钥和其他模型。目录提供商未配置模型列表或列表为空时显示继承的模型；删除最后一个模型会移除该提供商配置，但保留凭据，避免重新继承默认模型。Web 单模型卡片显示模型名称或 ID，多模型卡片显示提供商名称及旗下模型名称。旧随机路由继续可用，不自动迁移或合并；显示名称变化不改变 provider ID 或凭据引用。

模型配置中的 Esc 逐级返回：“新增提供商”返回“模型提供商”选择页，“模型提供商”选择页返回添加模型表单，表单返回模型配置列表；仅在模型配置列表按 Esc 才退出到聊天界面。返回时保留表单内容，不保存未完成的配置。

新增提供商时，目录选择和手动输入使用相同的 ID 校验（忽略输入前后空格，统一为小写）。若 ID 已存在，当前页显示“已有提供商使用了这个 ID”，不会返回模型表单或写入配置；可重新选择/填写其他 ID，或按 Esc 返回选择已有提供商。

重复提供商 ID、重复模型 ID、字段格式错误、保存失败和连接测试失败均在当前页以主题错误色（红色）加粗显示，普通说明不会变色。模型 ID 输入后立即检查同一提供商的已配置及继承模型，重复时停留在字段页；先填模型后选提供商，也会立即检查。编辑现有模型保留其自身 ID、不同提供商使用相同模型 ID 均允许；保存时再复核以防并发新增。测试成功使用绿色反馈，操作提示使用警告色。

选择目录提供商后，API 协议、Base URL、API Key 等字段仍可编辑；协议与地址从运行宿主安装的目录自动填入，已有配置优先。目录没有统一默认值时保持原生继承，不猜测协议。仅追加模型不会覆盖已有提供商连接配置；显式修改连接字段会影响该提供商的其他模型。连接测试结果保留在当前表单或模型操作页，并记录到本地聊天区。已保存且连接字段未修改的目录模型走宿主真实路由测试；未保存的地址、协议或密钥修改使用草稿测试，不会自动保存。无法直接测试的原生协议需先保存，再从模型列表测试，页面会明确提示。

> **Windows 安全警告：** Windows profile 默认使用 `danger-full-access`，且 approval 默认是 `never`。这会授予工具不受限制的访问权限；在敏感凭证或不可信仓库环境中启动前，务必先检查并收紧 profile 配置。

ChatCode CLI TUI 不实现独立沙箱，而是使用当前 Profile 的文件、Shell、sandbox 与 approval 策略。`/sandbox` 是本地兼容入口，裸命令复用权限预设选择器，`/sandbox status` 复用策略说明，其余参数原样转发给 `/permission`；没有可执行契约的旧式 exclusion 语法不会被伪造。权限预设来自受保护的 DSH `permissionPresets` registry ABI：服务缺失时使用 legacy 三项兼容名册；服务已挂载但为空、损坏或不一致时标记为 unavailable，TUI fail closed，不伪造名册。在包含敏感凭证或不可信仓库的环境中启动前，请先检查 Profile 配置。

详见[权限边界与已知限制](https://npmcn.com/package/%40chatcode/cco-tui/docs/architecture.md#%E6%9D%83%E9%99%90%E4%B8%8E%E5%AE%89%E5%85%A8%E8%BE%B9%E7%95%8C)。

### 友情链接

朋友们开发的[社区、相关项目与周边工具](https://npmcn.com/package/%40chatcode/cco-tui/docs/links.md)

## Stars

[![Star History](https://raw.githubusercontent.com/ccch1mneyyy/dsh-TUI/bot-star-history/assets/star-history/star-history.png)](https://star-history.com/#ccch1mneyyy/dsh-TUI&Date)

## License

[MIT](https://npmcn.com/package/%40chatcode/cco-tui/LICENSE)

## ChatCode 统一登录

未登录时，每次启动都会发起新的登录请求、重新打开默认浏览器并打印登录链接；上次遗留的 `pending` 不会让启动只停留在等待状态。不小心关掉登录网页后，重新执行 `cco` 即可恢复，无需删除凭据文件；已有账号验证通过时仍直接进入 CLI。

`/plugins` 打开两级插件市场，Enter 选择插件后分别安装到项目级或用户级，已安装的范围可以卸载；Tab 切换已安装列表，Esc 返回，r 刷新。切换市场及刷新目录时隐藏原列表并阻止选择，成功后显示对应市场的插件；失败可按 r 重试。通过 config 插件与 Web 共用本机安装记录。两个安装范围中的插件命令都直接使用原名（例如 `/code-review`），不加插件或哈希前缀；同名时项目级优先，卸载后恢复用户级命令。契约诊断使用 `/plugins diagnostics` 或 `/plugins check <清单路径>`。配置、官方市场目录和加载能力见 [插件市场说明](https://npmcn.com/package/%40chatcode/cco-llm-chatcode-config/docs/plugin-market.zh.md)。

登录验证通过后，即使模型目录为空也能进入 CLI、查看 `/resume` 历史和修改设置；状态显示“未配置模型”。发送消息前需用 `/model` 选择模型或通过 `/provider` 配置提供方，选好后无需重启；不会自动使用旧的 DeepSeek 默认模型。

当前项目从主库执行 `pnpm cco` 启动 TUI；可在 TUI 输入 `/web`，或执行 `pnpm cco web` 启动 Web。主库源码包装器会自动叠加 `cco-llm-chatcode-config`，无需向 `cli` Profile 重复安装。启动时先使用 Host 内置的 `CVP_CHATCODE_API_TOKEN` 检查 ChatCode 全局启用状态，`CHATCODE_CVP_CONFIG_TOKEN` 可覆盖默认凭证；失败时可选择“重新检测”或“退出”，通过后才验证共享账号并创建 Agent/Session。`/login` 校验共享账号；`/logout` 清除本机共享凭据并退出当前 TUI 进程，下一次启动会重新进入登录流程。Web 和 TUI 使用同一 `CHATCODE_CLI_HOME` 与凭据存储；旧 `DSH_HOME` 仅作为兼容输入。账号登录不会替换各模型的 API key，也不注销其他提供方。详见相邻配置插件仓库的 [使用手册](https://npmcn.com/package/%40chatcode/cco-llm-chatcode-config/docs/chatcode-login.zh.md)。

今日 Token 与 AI 代码占比统计也通过宿主 `chatcodeAuth` 服务鉴权，使用 `cco-llm-chatcode-config` 管理的 `$CHATCODE_CLI_HOME/.credentials.yaml`，不再读取旧 `.credentials.json`。进程级 OAuth token 由同一服务统一处理；未登录或查询失败且尚无成功结果时，今日 Token 显示占位符。

`/settings`、`/statusline` 和 `/keybindings` 兼容新旧 Harness 设置服务；显示偏好实时生效并由宿主持久化，不重建当前会话。全屏模式仍在重启后生效。

快捷键设置会显示冲突的组合和占用它的动作；例如 `Ctrl+T` 默认用于轨迹场景，待办折叠默认使用 `Ctrl+Q`。打开文本字段、或未修改内容就按 Enter，不会触发校验或写入。按 `Esc` 会取消当前字段的未保存编辑，不影响同组其他有效草稿；重置下拉选项会清除用户覆盖并恢复宿主默认值。

全屏模式按变化行重绘，清除系统终端及 JetBrains 内置终端中的流式输出残影，保持未变化的输入框稳定，并保留兼容终端的硬件滚动优化；状态图标输出后校正光标列，兼容旧终端的字符宽度表。

终端查询回复与协议片段不会写入输入框。CMD 的 Windows 合成记录与 VS Code 等终端的 VT 序列均支持跨读取、跨短超时重组；未知协议会被消费，未完成的协议在有界等待后丢弃，真实按键和粘贴内容保持原样。查询尚未结束时，孤立的 Esc 最多等待一秒，以区分真实按键和回复的首字节。

### 用户与项目配置

`/hooks` 同时检查用户目录的 `settings.json` 与当前会话项目的 `.chatcode-cli/settings.json`、`settings.local.json`，按文件列出来源；显示配置不代表插件已执行。`/mcp` 合并用户与当前项目的 MCP 配置、插件声明和已注册工具，显示来源及可观察到的连接状态。随 CLI 安装的 `cco-chat-import` 在启动时加载这些配置；修改后重启。commands、skills、agents 也同时支持用户和项目目录。

Hooks 也支持用户或项目 `.chatcode-cli/hooks/settings.json`（仍使用顶层 `hooks` 字段），与已有 settings 中的 hooks 一起加载。源码开发时需启用本地插件来源；`pnpm cco` 在 registry 模式下仍使用已发布的插件。

发布前的 `prepack` 会从源码重新构建，并实际打包、解压后验证用户与项目 hooks/MCP 的识别。源码测试通过不能替代这项产物验证。可单独运行 `npm run verify:packed-assets` 检查当前构建；发布给用户前，先发布包含这些修改的插件新版本，再更新 CLI 的正式包与别名版本并重新打包。

## 常见问题

### @chatcode/cco-tui 是什么？

ChatCode CLI的交互式终端前端,由端口的"墨子"核心所建\.

### 如何安装 @chatcode/cco-tui？

在项目目录运行 npm install @chatcode/cco-tui，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 dst、cco-tui、dsh-tui，可以用 npx dst 直接运行。

### @chatcode/cco-tui 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @chatcode/cco-tui 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @chatcode/cco-tui 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js ^22\.19 \|\| \>=24。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @chatcode/cco-tui 可以商用吗？

@chatcode/cco-tui 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @chatcode/cco-tui 的下载量有多少？

根据 npm 官方下载统计，@chatcode/cco-tui 在 2026/10/10 – 2026/11/08 这 30 天内被下载 2,649 次，日均约 88 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @chatcode/cco-tui 还在维护吗？

最新版本 0\.10\.0-rc\.28 发布于 2026/11/02（7 天前）；至今共发布 31 个版本，其中过去 12 个月发布了 31 个；首次发布于 2026/09/22。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

