初始化仓库

This commit is contained in:
2026-06-02 23:14:41 +08:00
commit 0bc3f02670
520 changed files with 191097 additions and 0 deletions
+935
View File
@@ -0,0 +1,935 @@
# 使用指南
cc-connect 完整功能使用指南。
## 目录
- [会话管理](#会话管理)
- [权限模式](#权限模式)
- [API Provider 管理](#api-provider-管理)
- [模型选择](#模型选择)
- [工作目录切换(`/dir`、`/cd`](#工作目录切换dircd)
- [引用查看(`/show`](#引用查看show)
- [飞书配置 CLI](#飞书配置-cli)
- [微信个人号配置 CLI](#微信个人号配置-cli)
- [Claude Code Router 集成](#claude-code-router-集成)
- [语音消息(语音转文字)](#语音消息语音转文字)
- [语音回复(文字转语音)](#语音回复文字转语音)
- [图片与文件回传](#图片与文件回传)
- [定时任务 (Cron)](#定时任务-cron)
- [多机器人中继](#多机器人中继)
- [守护进程模式](#守护进程模式)
- [多工作区模式](#多工作区模式)
- [Web 管理后台(Beta](#web-管理后台beta)
- [Bridge — 外部适配器接入(Beta)](#bridge--外部适配器接入beta)
- [配置参考](#配置参考)
---
## 会话管理
每个用户拥有独立的会话和完整的对话上下文。通过斜杠命令管理:
| 命令 | 说明 |
|------|------|
| `/new [名称]` | 创建新会话 |
| `/list` | 列出当前项目的会话 |
| `/switch <id>` | 切换到指定会话 |
| `/current` | 查看当前会话 |
| `/history [n]` | 查看最近 n 条消息 |
| `/usage` | 查看账号/模型限额使用情况 |
| `/provider [...]` | 管理 API Provider |
| `/model [switch <alias>]` | 列出可用模型或按别名切换 |
| `/dir [路径]` | 查看或切换 Agent 工作目录 |
| `/show <引用>` | 按引用查看文件、目录或代码片段 |
| `/allow <工具名>` | 预授权工具 |
| `/reasoning [等级]` | 查看或切换推理强度(Codex)|
| `/mode [名称]` | 查看或切换权限模式 |
| `/stop` | 停止当前执行 |
| `/help` | 显示可用命令 |
会话中 Agent 请求工具权限时,回复 **允许** / **拒绝** / **允许所有**
也可以为项目开启“空闲后自动切换新会话”:
```toml
[[projects]]
name = "demo"
reset_on_idle_mins = 60
```
开启后,如果用户长时间未发消息,下一条普通消息会自动进入一个新的会话;旧会话仍会保留在 `/list` 中,不会被删除。
### 切换模型时保留历史
`/model` 切换模型时保留当前会话——agent 会在新模型下继续对话(不额外消耗 token)。注意模型切换作用于共享的 agent 实例——如果多个平台使用同一个 project,模型变更会影响所有平台。
---
## 权限模式
所有 Agent 支持运行时切换权限模式,通过 `/mode` 命令。
### Claude Code 模式
| 模式 | 配置值 | 行为 |
|------|--------|------|
| 默认 | `default` | 每次工具调用需确认 |
| 接受编辑 | `acceptEdits` / `edit` | 文件编辑自动通过 |
| 自动模式 | `auto` | 由 Claude 自动判断何时需要确认 |
| 计划模式 | `plan` | 只规划不执行 |
| YOLO | `bypassPermissions` / `yolo` | 全部自动通过 |
### Codex 模式
| 模式 | 配置值 | 行为 |
|------|--------|------|
| 建议 | `suggest` | 仅受信命令自动执行 |
| 自动编辑 | `auto-edit` | 模型自行决定 |
| 全自动 | `full-auto` | 自动通过 + 沙箱保护 |
| YOLO | `yolo` | 跳过所有审批 |
### Cursor Agent 模式
| 模式 | 配置值 | 行为 |
|------|--------|------|
| 默认 | `default` | 工具调用前询问 |
| 强制执行 | `force` / `yolo` | 自动批准所有 |
| 规划模式 | `plan` | 只读分析 |
| 问答模式 | `ask` | 问答风格,只读 |
### Gemini CLI 模式
| 模式 | 配置值 | 行为 |
|------|--------|------|
| 默认 | `default` | 每次需确认 |
| 自动编辑 | `auto_edit` / `edit` | 编辑自动通过 |
| 全自动 | `yolo` | 自动批准所有 |
| 规划模式 | `plan` | 只读规划 |
### Qoder CLI / OpenCode / iFlow CLI
| 模式 | 配置值 | 行为 |
|------|--------|------|
| 默认 | `default` | 标准权限 |
| YOLO | `yolo` | 跳过所有检查 |
### 配置示例
```toml
[projects.agent.options]
mode = "default"
# allowed_tools = ["Read", "Grep", "Glob"]
```
运行时切换:
```
/mode # 查看当前和可用模式
/mode yolo # 切换到 YOLO 模式
/mode default # 切回默认
```
---
## API Provider 管理
运行时切换 API Provider,无需重启。
### 配置 Provider
```toml
[projects.agent.options]
work_dir = "/path/to/project"
provider = "anthropic"
[[projects.agent.providers]]
name = "anthropic"
api_key = "sk-ant-xxx"
[[projects.agent.providers]]
name = "relay"
api_key = "sk-xxx"
base_url = "https://api.relay-service.com"
model = "claude-sonnet-4-20250514"
[[projects.agent.providers.models]]
model = "claude-sonnet-4-20250514"
alias = "sonnet"
[[projects.agent.providers.models]]
model = "claude-opus-4-20250514"
alias = "opus"
[[projects.agent.providers.models]]
model = "claude-haiku-3-5-20241022"
alias = "haiku"
# MiniMax — 兼容 OpenAI 接口,1M 超长上下文
[[projects.agent.providers]]
name = "minimax"
api_key = "your-minimax-api-key"
base_url = "https://api.minimax.io/v1"
model = "MiniMax-M2.7"
# Bedrock、Vertex 等
[[projects.agent.providers]]
name = "bedrock"
env = { CLAUDE_CODE_USE_BEDROCK = "1", AWS_PROFILE = "bedrock" }
```
### CLI 命令
```bash
cc-connect provider add --project my-backend --name relay --api-key sk-xxx --base-url https://api.relay.com
cc-connect provider list --project my-backend
cc-connect provider remove --project my-backend --name relay
cc-connect provider import --project my-backend # 从 cc-switch 导入
```
### 聊天命令
```
/provider 查看当前 Provider
/provider list 列出所有
/provider add <名称> <key> [url] [model]
/provider remove <名称>
/provider switch <名称>
/provider <名称> 切换快捷方式
```
### 环境变量映射
| Agent | api_key → | base_url → |
|-------|-----------|------------|
| Claude Code | `ANTHROPIC_API_KEY` | `ANTHROPIC_BASE_URL` |
| Codex | `OPENAI_API_KEY` | `OPENAI_BASE_URL` |
| Gemini CLI | `GEMINI_API_KEY` | 使用 `env` 字段 |
| OpenCode | `ANTHROPIC_API_KEY` | 使用 `env` 字段 |
| iFlow CLI | `IFLOW_API_KEY` | `IFLOW_BASE_URL` |
---
## 模型选择
通过 `[[providers.models]]` 为每个 Provider 预配置可选模型列表。每个条目包含 `model`(模型标识符)和可选的 `alias`(别名,显示在 `/model` 中)。
### 配置模型
```toml
[[projects.agent.providers]]
name = "openai"
api_key = "sk-xxx"
[[projects.agent.providers.models]]
model = "gpt-5.3-codex"
alias = "codex"
[[projects.agent.providers.models]]
model = "gpt-5.4"
alias = "gpt"
[[projects.agent.providers.models]]
model = "gpt-5.3-codex-spark"
alias = "spark"
```
### 聊天命令
```
/model 列出可用模型(格式:alias - model
/model switch <alias> 按别名切换模型
/model switch <name> 按完整名称切换模型
/model <alias> 兼容旧写法,仍然可用
```
配置了 `models` 时,`/model` 直接显示该列表,不发起 API 请求。未配置时,自动从 Provider API 获取或使用内置备选列表。
---
## 工作目录切换(`/dir`、`/cd`
可直接在聊天中切换 Agent 下一次会话的工作目录。
### 聊天命令
```
/dir 查看当前工作目录和最近历史
/dir <路径> 切换到指定路径(相对或绝对)
/dir <序号> 按历史序号切换目录
/dir - 返回上一个目录
/dir help 查看命令用法
/cd <路径> `/dir <路径>` 的兼容别名
```
### 行为说明
- 目录切换会作用于当前项目的下一次会话。
- 相对路径基于当前 Agent 工作目录解析。
- 目录历史按项目隔离,可通过序号快速切换。
- `/cd` 为兼容保留,建议优先使用 `/dir`
示例:
```text
/dir ../another-repo
/dir 2
/dir -
```
---
## 本地引用展示配置(`[projects.references]`
可选启用对 Agent 输出中的本地文件 / 目录 / 代码位置引用进行标准化与重渲染,提升在 IM 平台中的可读性。
这是一个 **opt-in** 功能:
- 未配置 `[projects.references]` 时,现有行为保持不变
- 只有命中 `normalize_agents``render_platforms` 时,才会启用
### 推荐配置
```toml
[projects.references]
normalize_agents = ["all"]
render_platforms = ["all"]
display_path = "relative"
marker_style = "emoji"
enclosure_style = "code"
```
### 字段说明
- `normalize_agents`
- 控制哪些 Agent 输出参与这套引用处理
- 当前初始支持:`codex``claudecode``all`
- `render_platforms`
- 控制在哪些平台发送前应用展示重写
- 当前初始支持:`feishu``weixin``all`
- `display_path`
- 控制路径主体的显示层级
- 可选值:`absolute``relative``basename``dirname_basename``smart`
- `marker_style`
- 控制前缀标记样式
- 可选值:`none``ascii``emoji`
- `enclosure_style`
- 控制路径主体的包裹样式
- 可选值:`none``bracket``angle``fullwidth``code`
### 支持的引用输入
当前初始支持识别这些常见形式:
- 绝对路径
- 相对路径
- 文件 / 目录引用
- `path:line`
- `path:line:col`
- `path:start-end`
- `path#L42`
- Markdown 本地文件链接
- Claude 风格的反引号绝对路径引用
### 行为说明
- 只处理 Agent 输出:
- thinking
- final response
- stream preview
- progress / card 中的 Agent 文本
- 不处理:
- 系统消息
- `/workspace``/dir``/status` 等命令回复
- raw tool result
- 网页链接会保持原样,不会被本地引用重写逻辑污染
### 推荐默认值说明
当前最推荐的组合是:
- `display_path = "relative"`
- `marker_style = "emoji"`
- `enclosure_style = "code"`
这样通常会得到类似:
- `📄 ui/recovery_contact_form.tsx:11`
- `📁 docs/spec.v1/`
如果不希望使用 emoji,更推荐:
- `display_path = "dirname_basename"`
- `marker_style = "ascii"`
- `enclosure_style = "code"`
---
## 引用查看(`/show`
可直接基于一个文件 / 目录 / 代码位置引用查看内容,而不必手写 `/shell sed ...`
### 聊天命令
```text
/show <路径> 查看文件前 80 行
/show <路径:行号> 查看该行附近上下文
/show <路径:起止行> 查看指定 range
/show <目录路径/> 查看一级目录列表
```
支持的输入形式包括:
- 绝对路径
- 相对路径(相对当前 Agent 工作目录)
- `path:line`
- `path:line:col`
- `path:start-end`
- `path#L42`
- Markdown 本地文件链接,如:
- `[file.ts](/abs/path/file.ts#L42)`
### 行为说明
- 文件,无位置:
- 默认显示文件前 80 行
- `path:line` / `path#L42`
- 默认显示该位置附近上下文
- `path:start-end`
- 默认显示该 range
- 目录:
- 默认显示一级目录内容
说明:
- `/show` 只解析“纯引用文本”,不解析前端展示层包装后的 `📄 ...` / `[FILE] ...` 这类样式
- `/show` 属于本地文件系统查看命令,与 `/shell``/dir` 类似,默认受 `admin_from` 权限控制
- 执行 Shell 命令支持 `!` 快捷前缀:`!ls -la` 等同于 `/shell ls -la``! --timeout 300 npm install` 可指定超时时间
示例:
```text
/show ui/recovery_contact_form.tsx
/show svc/recovery_session_reconciler.go:12
/show svc/recovery_session_reconciler_test.go:8-17
/show docs/spec.v1/
```
---
## 飞书配置 CLI
可以直接通过 CLI 完成飞书/Lark 机器人创建或关联,并自动写回 `config.toml`
```bash
# 推荐:统一入口
cc-connect feishu setup --project my-project
cc-connect feishu setup --project my-project --app cli_xxx:sec_xxx
# 强制模式(一般不需要)
cc-connect feishu new --project my-project
cc-connect feishu bind --project my-project --app cli_xxx:sec_xxx
```
区别说明:
- `setup`:统一入口。没传凭证时等价 `new`,传了 `--app` 时等价 `bind`
- `new`:强制二维码新建,不接受 `--app`
- `bind`:强制关联已有机器人,必须提供凭证。
行为说明(通用):
- `setup` 默认走二维码新建;传入 `--app` 时自动切换到关联已有机器人。
- `--project` 不存在会自动创建。
- 项目存在但没有 `feishu/lark` 平台时会自动补一个平台配置。
- 命令会回填凭证(`app_id` / `app_secret`);扫码新建场景下飞书通常会预配权限和事件订阅。
- 建议在飞书开放平台再核验一次发布状态与可用范围。
- 运行时平台配置还支持可选 `domain` 覆盖 Feishu/Lark API 域名;这不会改变 `setup/new/bind` 的引导地址。
---
## 微信个人号配置 CLI
个人微信走 **ilink 机器人网关**HTTP 长轮询,与 OpenClaw `openclaw-weixin` 同类)。可直接用 CLI 扫码登录或绑定已有 Token,并写回 `config.toml`
**完整图文流程与配置项说明见:[docs/weixin.md](./weixin.md)。**
```bash
# 推荐:终端展示二维码 + URL,微信扫码确认后自动写配置
cc-connect weixin setup --project my-project
# 已有 Bearer Token(例如从 OpenClaw 导出)
cc-connect weixin bind --project my-project --token '<token>'
cc-connect weixin setup --project my-project --token '<token>'
# 强制只走扫码(不接受 --token)
cc-connect weixin new --project my-project
```
区别说明:
- `setup`:未传 `--token` 时走扫码;传了 `--token` 时等同绑定并可选校验。
- `new`:强制扫码。
- `bind`:强制绑定,必须 `--token`
行为说明:
- `--project` 不存在时会自动创建项目;项目里没有 `weixin` 平台时会自动追加一块 `[[projects.platforms]]`
- 扫码成功后会写入 `token`,以及网关返回的 `base_url`(若有)、`ilink_bot_id``account_id` 等。
- 默认 `--set-allow-from-empty=true`:若 `allow_from` 为空,会用扫码用户的 ilink ID 预填,便于收紧权限。
- 绑定时默认调用 `getUpdates` 校验 Token;可用 `--skip-verify` 跳过。
- 首次使用后请在微信里 **先发一条消息**,以便缓存 `context_token`,否则可能无法回复。
常用参数:`--api-url``--cdn-url``--timeout``--qr-image``--route-tag``--bot-type``--debug`(详见 `cc-connect weixin help` 或 [weixin.md](./weixin.md))。
---
## Claude Code Router 集成
[Claude Code Router](https://github.com/musistudio/claude-code-router) 可将请求路由到不同模型提供商。
### 安装配置
1. 安装:`npm install -g @musistudio/claude-code-router`
2. 配置 `~/.claude-code-router/config.json`
```json
{
"APIKEY": "your-secret-key",
"Providers": [
{
"name": "deepseek",
"api_base_url": "https://api.deepseek.com/chat/completions",
"api_key": "sk-xxx",
"models": ["deepseek-chat", "deepseek-reasoner"],
"transformer": { "use": ["deepseek"] }
}
],
"Router": {
"default": "deepseek,deepseek-chat",
"think": "deepseek,deepseek-reasoner"
}
}
```
3. 启动:`ccr start`
4. 配置 cc-connect
```toml
[projects.agent.options]
router_url = "http://127.0.0.1:3456"
router_api_key = "your-secret-key"
```
---
## 语音消息(语音转文字)
发送语音消息,自动转文字。
**支持平台:** 飞书、企业微信、Telegram、LINE、Discord、Slack
**前置条件:** OpenAI/Groq API Key`ffmpeg`
### 配置
```toml
[speech]
enabled = true
provider = "openai" # 或 "groq"
language = "" # "zh"、"en" 或留空自动检测
[speech.openai]
api_key = "sk-xxx"
# [speech.groq]
# api_key = "gsk_xxx"
# model = "whisper-large-v3-turbo"
```
### 安装 ffmpeg
```bash
# Ubuntu/Debian
sudo apt install ffmpeg
# macOS
brew install ffmpeg
```
---
## 语音回复(文字转语音)
将 AI 回复合成语音发送。
**支持平台:** 飞书
### 配置
```toml
[tts]
enabled = true
provider = "qwen" # 或 "openai"
voice = "Cherry"
tts_mode = "voice_only" # "voice_only" | "always"
max_text_len = 0
[tts.qwen]
api_key = "sk-xxx"
```
### TTS 模式
| 模式 | 行为 |
|------|------|
| `voice_only` | 仅当用户发语音时才语音回复 |
| `always` | 始终语音回复 |
切换:`/tts always``/tts voice_only`
---
## 图片与文件回传
当 Agent 在本地生成了图片、PDF、日志包、报表等文件,需要把结果直接发回当前聊天时,可以使用 `cc-connect send` 的附件模式。
**当前支持平台:**
- 飞书
- Telegram
### 什么时候需要先执行 setup
如果当前 Agent 不是“原生 system prompt 注入”类型,升级到包含该功能的版本后,建议先在聊天里执行一次:
```text
/bind setup
```
或者:
```text
/cron setup
```
这两个命令写入的是同一份 cc-connect 指令。执行任意一个即可。这样 Agent 才会知道:
- 普通文本回复直接正常输出
- 生成附件后用 `cc-connect send --image/--file` 回传
如果你以前已经执行过 setup,也建议升级后重新执行一次,以刷新到最新指令。
### 配置开关
如果你想禁用 agent 主动回传附件,可以在 `config.toml` 里加入:
```toml
attachment_send = "off"
```
默认值是 `on`。这个开关与 agent 的 `/mode` 独立,只影响 `cc-connect send --image/--file` 这条图片/文件回传路径。
### CLI 用法
```bash
cc-connect send --image /absolute/path/to/chart.png
cc-connect send --file /absolute/path/to/report.pdf
cc-connect send --file /absolute/path/to/report.pdf --image /absolute/path/to/chart.png
```
说明:
- `--image` 用于图片附件。
- `--file` 用于任意文件附件。
- `--message` 可选,用于先发一段说明文字,再发附件。
- `--image``--file` 都可以重复多次。
- 建议使用绝对路径,避免 Agent 当前工作目录变化导致找不到文件。
- 如果设置了 `attachment_send = "off"`,图片/文件回传会被拒绝,但普通文本回复仍然正常。
### 典型场景
1. Agent 生成了截图或图表,需要直接发给用户。
2. Agent 生成了 PDF、Markdown 导出、日志包或补丁文件,需要作为附件交付。
3. Agent 想告诉用户“结果已生成”,同时附上一个或多个文件。
### 注意事项
- 这个命令是给“附件回传”用的,不要拿它代替普通文本回复。
- 只能发送本机上 Agent 可访问到的文件。
- 必须存在活跃会话;如果当前项目没有活动聊天上下文,命令会失败。
- 平台本身仍可能有文件大小或文件类型限制。
---
## 定时任务 (Cron)
创建自动执行的定时任务。
### 聊天命令
```
/cron 列出所有任务
/cron add <分> <时> <日> <月> <周> <任务描述> 创建任务
/cron del <id> 删除任务
/cron enable <id> 启用
/cron disable <id> 禁用
```
示例:
```
/cron add 0 6 * * * 帮我收集 GitHub trending 并总结
```
### CLI 命令
```bash
cc-connect cron add --cron "0 6 * * *" --prompt "总结 GitHub trending" --desc "每日趋势"
cc-connect cron list
cc-connect cron edit <job-id> <field> <value> # 可改 cron_expr / prompt / enabled / mute / timeout_mins 等
cc-connect cron del <job-id>
```
可选:`--session-mode new-per-run` 每次触发使用新的 agent 会话(默认 `reuse` 与旧行为一致)。`--timeout-mins N` 设置单次调度最长等待分钟数(`0` 表示不限制;省略为 30 分钟)。
### 自然语言(Claude Code
> "每天早上6点帮我总结 GitHub trending"
Claude Code 会自动创建定时任务。对依赖记忆文件的其他 Agent,先执行一次 `/cron setup``/bind setup`,效果相同。
---
## 多机器人中继
跨平台机器人通信,群聊多机器人协作。
### 群聊绑定
```
/bind 查看绑定
/bind claudecode 添加 claudecode 项目
/bind gemini 添加 gemini 项目
/bind -claudecode 移除 claudecode
```
### 机器人间通信
```bash
cc-connect relay send --to gemini "你觉得这个架构怎么样?"
```
---
## 守护进程模式
后台服务运行。
```bash
cc-connect daemon install --config ~/.cc-connect/config.toml
cc-connect daemon start
cc-connect daemon stop
cc-connect daemon restart
cc-connect daemon status
cc-connect daemon logs [-f]
cc-connect daemon uninstall
```
---
## 多工作区模式
一个 bot 服务多个工作区,每个频道一个独立工作目录。
### 配置
```toml
[[projects]]
name = "my-project"
mode = "multi-workspace"
base_dir = "~/workspaces"
[projects.agent]
type = "claudecode"
```
### 命令
```
/workspace 查看当前绑定
/workspace bind <名称> 绑定本地文件夹
/workspace init <git-url> 克隆仓库并绑定
/workspace unbind 解除绑定
/workspace list 列出所有绑定
```
### 工作原理
- 频道名 `#project-a` → 自动绑定 `base_dir/project-a/`
- 每个频道有独立的会话和 Agent 状态
---
## Web 管理后台(Beta
> **状态:Beta。** 此功能自 v1.2.2-beta.5 起可用,UI 和 API 在后续版本中可能调整。
内嵌在二进制中的全功能管理界面,支持项目管理、会话管理、定时任务编辑、全局设置、聊天界面、多语言等。
### 快速启用(聊天命令)
最简单的方式,在聊天中发送:
```
/web setup
```
该命令会自动在 `config.toml` 中启用 **Management API****Bridge**,生成 token,并返回访问地址。首次启用后需要执行 `/restart` 使配置生效。
启用后,打开返回的地址(默认 `http://localhost:9820`),用显示的 token 登录即可。
### 查看状态
```
/web # 或 /web status — 查看 Web 管理后台的地址和启用状态
```
### 手动配置
`config.toml` 中添加:
```toml
[management]
enabled = true
port = 9820 # 管理后台监听端口
token = "your-secret-token" # 登录 token/web setup 会自动生成
cors_origins = ["*"] # 允许的 CORS 来源;留空则不设置 CORS 头
```
然后重启 cc-connect。
### 构建选项
Web 前端资源默认编译进二进制。如果想排除(减小约 1MB):
```bash
make build-noweb
# 或
go build -tags 'no_web' ./cmd/cc-connect
```
使用 `no_web` 构建时,`/web` 命令会提示 Web 管理后台不可用。
### Management API
API 与 Web UI 共用同一端口。基础 URL:`http://<host>:<port>/api/v1`
所有 API 请求需要 `Authorization: Bearer <token>` 请求头。
主要接口:
| 方法 | 路径 | 说明 |
|------|------|------|
| `GET` | `/api/v1/status` | 系统状态(版本、运行时间、已连接平台) |
| `POST` | `/api/v1/restart` | 重启 cc-connect |
| `POST` | `/api/v1/reload` | 重新加载配置 |
| `GET` | `/api/v1/projects` | 项目列表 |
| `GET` | `/api/v1/sessions?project=<name>` | 查询项目的会话列表 |
| `GET` | `/api/v1/cron` | 定时任务列表 |
| `GET` | `/api/v1/settings` | 获取全局设置 |
| `PATCH` | `/api/v1/settings` | 更新全局设置 |
完整 API 参考:[management-api.md](./management-api.md)[中文版](./management-api.zh-CN.md)
---
## Bridge — 外部适配器接入(Beta)
> **状态:Beta。** 此功能自 v1.2.2-beta.5 起可用,协议在后续版本中可能调整。
Bridge 提供 WebSocket + REST 服务,让外部适配器(自定义 UI、机器人、脚本等)可以接入 cc-connect —— 发送消息、接收 Agent 事件、管理会话。
### 通过聊天启用
`/web setup` 命令会同时启用 Bridge 和管理后台,无需额外操作。
### 手动配置
`config.toml` 中添加:
```toml
[bridge]
enabled = true
port = 9810 # Bridge 监听端口(与管理后台分开)
token = "your-bridge-secret" # WebSocket 和 REST 的认证 token
path = "/bridge/ws" # WebSocket 端点路径
cors_origins = ["*"] # 允许的 CORS 来源;留空则不设置 CORS
```
然后重启 cc-connect。
### 认证方式
所有 Bridge 连接需要 token 认证,支持三种方式:
- URL 参数:`?token=<bridge-token>`
- 请求头:`Authorization: Bearer <bridge-token>`
- 请求头:`X-Bridge-Token: <bridge-token>`
### WebSocket 接入
连接地址:
```
ws://<host>:<bridge-port>/bridge/ws?token=<bridge-token>
```
WebSocket 支持双向通信 —— 向 Agent 发送消息,并实时接收 Agent 的文本回复、工具调用、权限请求等事件。
### REST API
与 WebSocket 共用同一端口。
| 方法 | 路径 | 说明 |
|------|------|------|
| `GET` | `/bridge/sessions?session_key=...&project=...` | 查询会话列表 |
| `POST` | `/bridge/sessions` | 创建新会话 |
| `GET` | `/bridge/sessions/{id}?session_key=...&project=...` | 获取会话详情及历史 |
| `DELETE` | `/bridge/sessions/{id}?session_key=...&project=...` | 删除会话 |
| `POST` | `/bridge/sessions/switch` | 切换当前活跃会话 |
完整协议参考:[bridge-protocol.md](./bridge-protocol.md)[中文版](./bridge-protocol.zh-CN.md)
### 端口汇总
| 服务 | 默认端口 | 配置块 |
|------|---------|--------|
| 管理后台(Web UI + API | 9820 | `[management]` |
| BridgeWebSocket + REST | 9810 | `[bridge]` |
---
## 配置参考
完整配置示例见 [config.example.toml](../config.example.toml)。
### 项目结构
```toml
[[projects]]
name = "my-project"
[projects.agent]
type = "claudecode" # 或 codex, cursor, gemini, qoder, opencode, iflow
[projects.agent.options]
work_dir = "/path/to/project"
mode = "default"
provider = "anthropic"
[[projects.platforms]]
type = "feishu" # 或 wps-xiezuo, dingtalk, telegram, slack, discord, wecom, weixin, line, qq, qqbot
[projects.platforms.options]
# 平台特定配置
```