任务运行时控制与自动降级
August 25, 2026 · View on GitHub
目标
Cindy 允许 Agent 通过统一会话控制面查询和临时调整当前任务或指定任务的模型、来源、 推理强度与 Fast。该能力服务于 Skill 的任务类型路由和故障恢复,不替代用户在界面中保存的 模型偏好。
状态模型
每个任务同时维护四类状态:
baseline:用户保存到任务记录的模型、来源、推理强度与 Fast。effective:当前实际生效的运行时组合;Agent 临时切换和自动降级只改这一层。pending:任务忙碌时已接受、等待当前 turn 结束的运行时组合。generation:运行时控制面的单调版本。跨任务修改应先读后写并携带 generation,避免旧请求覆盖新选择。
用户在模型选择器中的完整选择会清除临时运行时组合;用户单独修改推理强度或 Fast 时, 该轴立即成为新基线,同时保留仍在使用的临时模型路由。应用重启后只恢复 baseline。
Agent 控制面
get_session_runtime:session_id可省略;省略时查询当前任务。返回活动状态、baseline、 effective、pending、generation 和自动降级开关。set_session_runtime:session_id可省略;原子提交来源、模型、推理强度与 Fast 的任意子集。- 当前或目标任务忙碌时不修改进行中的 turn,返回
deferred,在下一个 turn 边界生效。 - 不允许借此切换 Harness;跨 Harness 仍走独立的人机切换流程。
- Agent 的修改不写回任务 baseline。语义失败是否提高推理强度或换更强模型,由 Agent 或 Skill 明确请求。
自动降级
设置中的“任务模型自动降级”默认关闭。开启后只复用宿主现有的安全自动续跑入口, 即已被白名单识别为连接、超时、过载或容量问题的失败;认证失败、权限拒绝、用户取消、 协议或参数错误不触发。
顺序固定为:
- 让 Harness 现有的有限重试先处理瞬时故障。
- 切换到同一模型的其他已连接、未停用来源。
- 若仍失败,只尝试目录通过
newSessionDefault为当前 Harness 明确声明的模型。
自动降级不采用“可用列表第一个”之类的隐式兜底,不跨 Harness;每个任务最多换路两次,
记录已访问的 (来源, 模型),禁止 A → B → A 回环。用户修改运行时选择后立即清空本轮降级轨迹。
跨端边界
运行时控制由 Desktop host 独占,MCP、Renderer 与 Device Link 都复用同一原子切换路径。 手机和 SSH 控制端无需新增独立状态机;它们读取任务状态时看到同一 baseline/effective/pending 投影。远程控制的授权边界保持不变。