(taskId: string, setAppState: SetAppState)
| 336 | * Kill an agent task. No-op if already killed/completed. |
| 337 | */ |
| 338 | export function killAsyncAgent(taskId: string, setAppState: SetAppState): void { |
| 339 | let killed = false; |
| 340 | updateTaskState<LocalAgentTaskState>(taskId, setAppState, task => { |
| 341 | if (task.status !== 'running') { |
| 342 | return task; |
| 343 | } |
| 344 | killed = true; |
| 345 | task.abortController?.abort(); |
| 346 | task.unregisterCleanup?.(); |
| 347 | return { |
| 348 | ...task, |
| 349 | status: 'killed', |
| 350 | endTime: Date.now(), |
| 351 | evictAfter: task.retain ? undefined : Date.now() + PANEL_GRACE_MS, |
| 352 | abortController: undefined, |
| 353 | unregisterCleanup: undefined, |
| 354 | selectedAgent: undefined, |
| 355 | }; |
| 356 | }); |
| 357 | if (killed) { |
| 358 | void evictTaskOutput(taskId); |
| 359 | } |
| 360 | } |
| 361 | |
| 362 | /** |
| 363 | * Kill all running agent tasks. |
no test coverage detected