diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/steering.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/steering.rs index 170a3bd53..566577b58 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/steering.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/steering.rs @@ -894,11 +894,7 @@ pub(crate) fn steer_game_creator_agent_runtime_task_for_profile_at( Some(&format!("steerId={steer_id}")), )?; } - let provider_interrupted = if accepted_via == "goal-edit" { - interrupt_game_creator_agent_runtime_provider_request_at(root, &agent_id, run_id)? - } else { - false - }; + let provider_interrupted = false; ensure_game_creator_agent_runtime_steer_audit( root, &state, diff --git a/docs/project-memory/shared-memory/decision-log.md b/docs/project-memory/shared-memory/decision-log.md index 45e082088..9e1df8c69 100644 --- a/docs/project-memory/shared-memory/decision-log.md +++ b/docs/project-memory/shared-memory/decision-log.md @@ -7013,7 +7013,6 @@ ## 2026-08-10 Supervisor steer 改为 LLM 判定后的条件中断 - 决策:根 Project Supervisor 收到运行中消息后继续原 Run,先由独立 LLM 生成非终态回复并判断 `interruptCurrentProvider`。状态询问、解释和不冲突补充默认不中断;只有明确停止、改向或在途方案会过期时才可请求中断。过程回复持久进入原 conversation,但不得调用终态 `respond_to_user`。 -- 作用域:LLM 条件中断只属于无父级的根 Project Supervisor;普通专业 Agent / 静态委派 Agent 的 `runtime.steer` 继续只做 durable 入队,由运行循环在安全边界丢弃旧回复并重规划;持久 Goal 编辑作为控制面变更继续沿用 V1.13 的立即中断旧 Provider 语义。不得把根 Supervisor 的判定链或 Goal 编辑的强制中断扩散到所有 `runtime.steer` 调用方。 - 时序:steer durable 入队后不先通知 Runner。`false` 或判定失败才调用只唤醒的 `runtime.steer`;`true` 直接调用 `runtime.interrupt_for_steer_decision`。后者必须读取已持久化判定,并只中断 `appliedSteerCursor < steer.sequence` 的旧 Provider;新规划 Provider、工具和外部副作用不可被误杀。 - 失败:判定调用、协议解析或持久化失败时公开回复“继续当前任务”,在下一安全边界应用 steer,绝不退化为默认中断。External Runner 与本地进程内执行保持同一语义。 - 关联:`docs/technical/【技术方案】AI游戏创作Agent Runtime V1.1-2026-07-12.md` V1.53,以及 `docs/project-memory/shared-memory/pitfalls.md` 的“Supervisor steer 不能只有内部排队事件”。 diff --git a/docs/technical/【技术方案】AI游戏创作Agent Runtime V1.1-2026-07-12.md b/docs/technical/【技术方案】AI游戏创作Agent Runtime V1.1-2026-07-12.md index 18497348a..07a0e2467 100644 --- a/docs/technical/【技术方案】AI游戏创作Agent Runtime V1.1-2026-07-12.md +++ b/docs/technical/【技术方案】AI游戏创作Agent Runtime V1.1-2026-07-12.md @@ -1638,8 +1638,6 @@ V1.52 保留 V1.51 一次性 `codex_cli` 和原 HTTP `provider`,新增 `codex_ V1.53 把根 Project Supervisor 的 same-run steer 从“收到消息立即中断”改为“先回复并判断、按需中断”。用户消息仍先进入原 run 的 durable steer ledger 与 conversation;公开确认明确说明正在判断且当前任务继续运行。随后由独立 LLM turn 调用严格 `runtime_steer_decision`,一次返回自然语言 `reply`、`interruptCurrentProvider` 与安全原因。该回复按 steer 身份持久幂等,是制作过程中的非终态对话,不调用 `respond_to_user`,也不关闭 task、Goal、Run 或 finalization。 -- V1.53 的 LLM 条件中断只适用于无父级的根 Project Supervisor。普通专业 Agent / 静态委派 Agent 的 `runtime.steer` 继续只做 durable 入队,由运行循环在安全边界丢弃旧回复并重规划;持久 Goal 编辑作为控制面变更继续沿用 V1.13,在 durable steer 入队后立即中断当前旧 planning/final-reply Provider。不得把根 Supervisor 的判定链或 Goal 编辑的强制中断扩散到所有 `runtime.steer` 调用方。 - - 命令层在 durable 入队后不得先通知或唤醒 External Runner,避免 Runner 抢先消费 steer 后让判定快照漂移。判定为 `false` 或判定失败时,才发送只校验 ledger 并唤醒任务的 `runtime.steer`;该 RPC 必须固定返回 `providerInterrupted=false`。判定为 `true` 时直接发送 `runtime.interrupt_for_steer_decision`,由该 RPC 完成条件中断并唤醒同一 run。本地进程内路径遵循同一顺序。 - 状态询问、解释、鼓励、确认和不冲突补充默认不中断;只有明确停止、改向,或继续当前方案会产生明显过期结果时才允许 `true`。判定使用当前有效 `provider / codex_cli / codex_app_server` 模式;app-server 以独立 synthetic 节点运行,不能等待主节点的 turn gate。 - 条件中断必须先读取已持久化 decision,并只允许中断注册时 `appliedSteerCursor < steer.sequence` 的旧 planning/final-reply Provider。若旧请求已自然结束,或新 Provider 已消费该 steer 后启动,则返回 `providerInterrupted=false`,不得误杀新规划。工具、外部副作用、确认、process session、Git、receipt 和 finalization 始终不强杀,在下一安全边界消费 steer。 diff --git a/docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md b/docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md index b209a6dd9..7f4d5f4bd 100644 --- a/docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md +++ b/docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md @@ -107,7 +107,7 @@ ### 2026-08-10 Supervisor 边做边聊与条件中断 - 根 Project Supervisor 的运行中消息继续进入当前 `taskId / sessionId / runId`,先持久显示“正在判断、当前任务继续”,再由独立 LLM 生成非终态语义回复并给出 `interruptCurrentProvider`。过程回复不能调用终态 `respond_to_user`,不能把制作 Run、Goal 或 task 提前完成。 -- 根 Project Supervisor 的 steer 入队后不得先通知 Runner。判定为无需中断或判定失败时,`runtime.steer` 只校验 durable ledger、唤醒同一 Run 并固定保持 `providerInterrupted=false`;判定为需要改向时,只有 `runtime.interrupt_for_steer_decision` 可以读取持久 decision 后条件中断旧 Provider。已经消费该 steer 的新 Provider、工具和外部动作不得被中断。普通专业 Agent / 静态委派 Agent 的 steer 只做 durable 入队并在安全边界重规划;持久 Goal 编辑属于控制面变更,入队后立即中断当前旧 planning/final-reply Provider。 +- steer 入队后不得先通知 Runner。判定为无需中断或判定失败时,`runtime.steer` 只校验 durable ledger、唤醒同一 Run 并固定保持 `providerInterrupted=false`;判定为需要改向时,只有 `runtime.interrupt_for_steer_decision` 可以读取持久 decision 后条件中断旧 Provider。已经消费该 steer 的新 Provider、工具和外部动作不得被中断。 - 状态询问、解释和不冲突补充默认继续当前 Provider;明确停止、改向或会让在途方案过期时才允许请求中断。判定失败时继续任务,并在下一安全边界消费消息,不得把失败等同于需要中断。 - UI 通过持久 conversation 展示关联回复,刷新后仍可见;返回的 `assistantReply / interruptDecision / decisionReason` 只用于本次命令结果与诊断,不形成第二个会话或第二个 Run。