任务运行时控制与自动降级

August 25, 2026 · View on GitHub

目标

Cindy 允许 Agent 通过统一会话控制面查询和临时调整当前任务或指定任务的模型、来源、 推理强度与 Fast。该能力服务于 Skill 的任务类型路由和故障恢复,不替代用户在界面中保存的 模型偏好。

状态模型

每个任务同时维护四类状态:

  • baseline:用户保存到任务记录的模型、来源、推理强度与 Fast。
  • effective:当前实际生效的运行时组合;Agent 临时切换和自动降级只改这一层。
  • pending:任务忙碌时已接受、等待当前 turn 结束的运行时组合。
  • generation:运行时控制面的单调版本。跨任务修改应先读后写并携带 generation,避免旧请求覆盖新选择。

用户在模型选择器中的完整选择会清除临时运行时组合;用户单独修改推理强度或 Fast 时, 该轴立即成为新基线,同时保留仍在使用的临时模型路由。应用重启后只恢复 baseline。

Agent 控制面

  • get_session_runtimesession_id 可省略;省略时查询当前任务。返回活动状态、baseline、 effective、pending、generation 和自动降级开关。
  • set_session_runtimesession_id 可省略;原子提交来源、模型、推理强度与 Fast 的任意子集。
  • 当前或目标任务忙碌时不修改进行中的 turn,返回 deferred,在下一个 turn 边界生效。
  • 不允许借此切换 Harness;跨 Harness 仍走独立的人机切换流程。
  • Agent 的修改不写回任务 baseline。语义失败是否提高推理强度或换更强模型,由 Agent 或 Skill 明确请求。

自动降级

设置中的“任务模型自动降级”默认关闭。开启后只复用宿主现有的安全自动续跑入口, 即已被白名单识别为连接、超时、过载或容量问题的失败;认证失败、权限拒绝、用户取消、 协议或参数错误不触发。

顺序固定为:

  1. 让 Harness 现有的有限重试先处理瞬时故障。
  2. 切换到同一模型的其他已连接、未停用来源。
  3. 若仍失败,只尝试目录通过 newSessionDefault 为当前 Harness 明确声明的模型。

自动降级不采用“可用列表第一个”之类的隐式兜底,不跨 Harness;每个任务最多换路两次, 记录已访问的 (来源, 模型),禁止 A → B → A 回环。用户修改运行时选择后立即清空本轮降级轨迹。

跨端边界

运行时控制由 Desktop host 独占,MCP、Renderer 与 Device Link 都复用同一原子切换路径。 手机和 SSH 控制端无需新增独立状态机;它们读取任务状态时看到同一 baseline/effective/pending 投影。远程控制的授权边界保持不变。