diff --git a/docs/dashboard-guide.md b/docs/dashboard-guide.md index 7096e024ef..543c7de316 100644 --- a/docs/dashboard-guide.md +++ b/docs/dashboard-guide.md @@ -728,7 +728,7 @@ Recommended workflow: ordinary chains stay as `Blocks N` so noise stays low, hig ### Logs → Agent Log view -The **Chat** tab sits between Definition and Logs and presents a live, chat-styled transcript of task agent output. Consecutive entries are grouped by role and labeled as Planner, Executor, Reviewer, or Merger; legacy log rows without an agent role use the neutral Agent fallback. The transcript follows new live output when you are already near the bottom, but it preserves your scroll position when you review older messages. For active assigned agent sessions in `in-progress` or `in-review` (reviewing/merging/fixing) tasks, the composer sends guidance to the running agent through the same steering path used by comments; when no active session is available, the composer is disabled with an explanatory hint. +The **Chat** tab sits between Definition and Logs and presents a live, chat-styled transcript of task agent output. Consecutive entries are grouped by role and labeled as Planner, Executor, Reviewer, or Merger; legacy log rows without an agent role use the neutral Agent fallback. The transcript follows new live output when you are already near the bottom, but it preserves your scroll position when you review older messages. For active, assigned, non-paused agent sessions in `in-progress` or `in-review` (reviewing/merging/fixing) tasks, the composer sends guidance to the running agent through the same steering path used by comments; when no active session is available, the composer is disabled with an explanatory hint. The **Logs** tab includes an **Agent Log** subview designed for debugging long-running and tool-heavy sessions: diff --git a/packages/dashboard/app/components/TaskChatTab.tsx b/packages/dashboard/app/components/TaskChatTab.tsx index a603cd3752..0800b9977a 100644 --- a/packages/dashboard/app/components/TaskChatTab.tsx +++ b/packages/dashboard/app/components/TaskChatTab.tsx @@ -28,7 +28,14 @@ interface AgentLogGroup { entries: AgentLogEntry[]; } -const ACTIVE_STATUSES = new Set(["planning", "researching", "executing", "finalizing", "merging", "merging-fix"]); +const STEERING_BLOCKED_STATUSES = new Set([ + "paused", + "awaiting-user-input", + "awaiting-cli-approval", + "awaiting-user-review", + "failed", + "needs-replan", +]); const REVIEW_STEERABLE_STATUSES = new Set(["reviewing", "merging", "merging-fix", "fixing"]); const BOTTOM_FOLLOW_THRESHOLD = 48; @@ -81,7 +88,8 @@ function groupEntriesByAgent(entries: AgentLogEntry[]): AgentLogGroup[] { function isActiveAgentSession(task: Task | TaskDetail): boolean { const hasAssignedAgent = Boolean(task.assignedAgentId || task.checkedOutBy); - const statusAllowsProgressSteering = !task.status || ACTIVE_STATUSES.has(task.status); + const statusBlocksProgressSteering = task.status ? STEERING_BLOCKED_STATUSES.has(task.status) : false; + const statusAllowsProgressSteering = !statusBlocksProgressSteering; const statusAllowsReviewSteering = !task.status || REVIEW_STEERABLE_STATUSES.has(task.status); const columnAllowsSteering = (task.column === "in-progress" && statusAllowsProgressSteering) || (task.column === "in-review" && statusAllowsReviewSteering); @@ -253,7 +261,7 @@ export function TaskChatTab({ task, projectId, active, addToast }: TaskChatTabPr