( taskId: string, setAppState: (updater: (prev: AppState) => AppState) => void, )
| 114 | * If viewing the dismissed agent, also exits to leader. |
| 115 | */ |
| 116 | export function stopOrDismissAgent( |
| 117 | taskId: string, |
| 118 | setAppState: (updater: (prev: AppState) => AppState) => void, |
| 119 | ): void { |
| 120 | setAppState(prev => { |
| 121 | const task = prev.tasks[taskId] |
| 122 | if (!isLocalAgent(task)) return prev |
| 123 | if (task.status === 'running') { |
| 124 | task.abortController?.abort() |
| 125 | return prev |
| 126 | } |
| 127 | if (task.evictAfter === 0) return prev |
| 128 | const viewingThis = prev.viewingAgentTaskId === taskId |
| 129 | return { |
| 130 | ...prev, |
| 131 | tasks: { |
| 132 | ...prev.tasks, |
| 133 | [taskId]: { ...release(task), evictAfter: 0 }, |
| 134 | }, |
| 135 | ...(viewingThis && { |
| 136 | viewingAgentTaskId: undefined, |
| 137 | viewSelectionMode: 'none', |
| 138 | }), |
| 139 | } |
| 140 | }) |
| 141 | } |
| 142 |
no test coverage detected