跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

Daemon 渠道管理

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

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 日志。