Skip to content
FunCoding

Search

Search docs, Skills and MCP

Daemon 渠道管理

选择工作区 worker、重载凭据并识别部分连接和回滚后的真实状态。

This page has not been translated into English yet. The original Chinese version is shown below.

Daemon 将 Channels 放在独立 worker 进程中,按拥有渠道的注册工作区分组。渠道本身的访问、会话和平台配置见Channels。

启动与运行时选择

qwen serve --channel telegram --channel feishu

显式选择优先,启动前占用渠道服务租约,初始 worker 无法 ready 会让启动失败。--channel all 只选择 primary 的渠道,不能与命名选择混用。

没有显式 channel flag 时,从每个可信注册工作区恢复自己的 serve.channels。运行中新增可信工作区也会异步恢复一次;同次 daemon 运行里移除再添加不会重复,停止渠道后也不会因注册工作区擅自恢复。

runtime PUT/DELETE /workspace/channel 改当前选择,不写 settings 或启动参数;重启回到显式 CLI 或可信工作区的持久配置。每个选中渠道 cwd 必须属于注册工作区。多工作区下,只在 user/system 定义且没有 cwd 的渠道可能归属不明;显式选择拒绝启动,自动恢复记录并跳过。

CLI 与重载

持有同一稳定令牌时,可从客户端设置、查看或停止:

qwen channel set telegram feishu --token "$QWEN_SERVER_TOKEN"
qwen channel status --daemon-url http://127.0.0.1:4170 --token "$QWEN_SERVER_TOKEN"
qwen channel stop --daemon-url http://127.0.0.1:4170 --token "$QWEN_SERVER_TOKEN"

未指定 daemon-url 的既有 start/stop/status 仍是独立服务行为。客户端不能自动发现 open-with-auth 生成的 token,需使用明确共享的令牌。

worker 启动时读取 token、proxy 和 model。修改后可用 qwen channel reload 或 POST /workspace/channel/reload,在不改 committed selection 的情况下重新解析归属和配置。channel_control 表示运行时控制已接入,channel_reload 只在管理器启用时公布。

原子选择与部分成功

替换先预检查配置、信任、归属,再停止需要变化的 worker;有序选择不变的 worker 保留。变化后无法启动时,停止新 worker 并恢复旧选择。若连 SIGKILL 后都不能确认旧 child 退出,保留 PID 租约并拒绝创建重复 worker。

至少一个请求的适配器连接成功,worker 就可能 ready,PUT 返回 partial: true,status 报 channel_worker_partial_connect。不能把 ready 解释成每个平台都在线。

connect 拒绝时 startupFailures 可含渠道名、phase: connect、可选 adapter code 和已脱敏消息;每次 worker 启动最多保留 64 个原因,code 仅用于诊断,不是稳定分类。

动态 set/reload 中全部失败时,返回 502 channel_worker_start_failed,错误原因描述失败尝试,state 描述回滚后的结果。以后 status 不保留这次失败尝试,排查时保存当次响应。

自动恢复失败

启动前的无效字段、校验或租约问题可按选择跳过并记录,不影响其他无关配置;worker 启动后失败,只有确认清理完成才能继续,清理不明则仍启动失败并保留租约。

开机恢复可以跳过不能托管的名称并保留其他;运行中注册工作区时,若列表有不能托管的名称,该工作区整组不恢复。startup 配置只跳过非法名称,不 trim 成另一个名称或重写文件。runtime 命名选择则 trim、去重并保留首次顺序。

后续 ready worker 崩溃不会直接关闭 daemon,会按有界策略重启并报告 channel_worker_exited。持久选择恢复失败可能在 status 及工作区渠道列表显示 channel_restore_failed;其他未托管原因需查看 daemon 日志。