Add archive and delete actions to the agents overview (#44433)

## What changed

- Add `Ctrl+E` to archive the selected task and its child agents, and `Delete` to permanently delete their history. Both actions require confirmation, with Cancel selected by default.
- Expose `agents.archive` and `agents.delete` in keymap configuration and the shortcut picker. Default bindings yield to existing custom bindings and chords.
- Show progress while requests run, keeping rendering responsive and blocking task switching. Refresh overview state afterward and keep the dashboard open when the current task is removed.
- Report failures and preserve the current attachment and draft when a rejected operation leaves the task loaded.

## Testing

Add coverage for confirmation and cancellation, active and background task removal, child-agent attachments, stale refresh invalidation, failure recovery, and draft preservation. Add progress input-isolation tests, shortcut conflict tests, and snapshots for confirmation, errors, progress, and keymap rendering.

GitOrigin-RevId: b327bb8834699d0058f9ffb903ace525ae270500
This commit is contained in:
Eric Traut authored and copyberry committed 2026-09-10 06:06:21 +00:00
1 parent bf5ebd98c5
commit b348fc2667
32 files changed
+1095 -46

No files matched your search

+20
View File
@@ -3993,6 +3993,8 @@
],
"default": {
"agents": {
"archive": null,
"delete": null,
"hide": null,
"new_task": null,
"rename": null,
@@ -4304,6 +4306,22 @@
"additionalProperties": false,
"description": "Shortcuts specific to the shared agents overview.",
"properties": {
"archive": {
"allOf": [
{
"$ref": "#/definitions/KeybindingsSpec"
}
],
"description": "Archive the selected task and its child agents after confirmation."
},
"delete": {
"allOf": [
{
"$ref": "#/definitions/KeybindingsSpec"
}
],
"description": "Permanently delete the selected task and its child agents after confirmation."
},
"hide": {
"allOf": [
{
@@ -4817,6 +4835,8 @@
}
],
"default": {
"archive": null,
"delete": null,
"hide": null,
"new_task": null,
"rename": null,