User request
Update Console UI so Activity lists (Workloads / Storage / Threads) use server-side sort/filter/pagination and reflect updated authorization + cluster-admin org switching behavior.
Source spec: https://github.com/agynio/architecture/blob/main/changes/2026-04-24-activity-server-side-lists.md
Specification (architecture/product)
From:
changes/2026-04-24-activity-server-side-lists.md
product/console/console.md (Workloads, Storage, Threads, Resource Lists, Real-Time Updates)
Key requirements:
- Replace client-side sorting/filtering/search with server-side list APIs.
- Add filter bars (and search for Storage) per spec.
- Deterministic cursor pagination (UI treats page_token as opaque; changing sort/filter/search resets paging).
- Real-time updates:
- On
workload.updated / volume.updated, if any sort/filter/search is active, refetch the current page from server.
- Auth / org switching:
- Cluster admins can context switch across all orgs via
Organizations.ListOrganizations.
- Non-admin users should use
Organizations.ListMyMemberships.
Work items
1) Update generated clients
- After
agynio/api changes land, update buf.lock / regenerate so console has:
- Runners list envelope fields + name/attachment enrichment fields
- Threads
ListOrganizationThreads
- Identity nickname batch lookup (if console needs it for any view)
2) Workloads Activity tab
- Render the columns per spec (Agent name + link, Runner name + link, Thread ID, Status, Containers, Started, Duration).
- Replace
useListControls client-side search/sort with:
- server-side sort + filter + pagination via
runnersClient.listWorkloads
- Implement the filter bar:
- Agent multi-select (by name)
- Runner multi-select (by name)
- Status multi-select
- Started date range
- Ensure changing sort/filter resets pagination and refetches from the first page.
3) Storage Activity tab
- Replace current client-side search/sort and per-volume attachment queries with server-side list behavior:
- use
runnersClient.listVolumes with filter/sort/page_token
- use
volume_name + attachments[] from the list response
- Implement:
- Search: case-insensitive substring match on volume name
- Filters: Status, Runner, Attached-to kind (agent/mcp/hook/unattached)
- Sortable columns: Name, Size, Status, Created
- Render attachment column as: primary attachment name + “+N more”.
4) Threads Activity tab
- Implement the org threads list view using
threadsClient.listOrganizationThreads:
- columns: ID (truncated), participants (@NickNames), message_count, status, created date
- filters: status, participant, created range
- sorts: created, updated, message_count, status
- cursor pagination
5) Real-time update refetch rules
- Update notifications subscription/invalidation logic so:
- When any sort/filter/search is active on Workloads/Storage,
workload.updated / volume.updated triggers a refetch of the current page (instead of patching local state).
- With default (no active controls), keep existing in-place update behavior if still desired.
6) Cluster-admin org switching
- Update org context selection logic:
- Cluster admins: use
Organizations.ListOrganizations
- Non-admin users: use
Organizations.ListMyMemberships
- Ensure Activity pages (and any other org-scoped pages as needed) respect the selected org context.
Acceptance
- Workloads/Storage/Threads Activity lists are fully server-driven for sort/filter/pagination (client does not sort/filter across pages).
- UI does not display raw agent/runner/volume IDs when a server-provided name exists.
- Real-time update behavior matches the spec.
- Cluster admins can switch across all orgs; non-admins only see their memberships.
User request
Update Console UI so Activity lists (Workloads / Storage / Threads) use server-side sort/filter/pagination and reflect updated authorization + cluster-admin org switching behavior.
Source spec: https://github.com/agynio/architecture/blob/main/changes/2026-04-24-activity-server-side-lists.md
Specification (architecture/product)
From:
changes/2026-04-24-activity-server-side-lists.mdproduct/console/console.md(Workloads, Storage, Threads, Resource Lists, Real-Time Updates)Key requirements:
workload.updated/volume.updated, if any sort/filter/search is active, refetch the current page from server.Organizations.ListOrganizations.Organizations.ListMyMemberships.Work items
1) Update generated clients
agynio/apichanges land, updatebuf.lock/ regenerate so console has:ListOrganizationThreads2) Workloads Activity tab
useListControlsclient-side search/sort with:runnersClient.listWorkloads3) Storage Activity tab
runnersClient.listVolumeswith filter/sort/page_tokenvolume_name+attachments[]from the list response4) Threads Activity tab
threadsClient.listOrganizationThreads:5) Real-time update refetch rules
workload.updated/volume.updatedtriggers a refetch of the current page (instead of patching local state).6) Cluster-admin org switching
Organizations.ListOrganizationsOrganizations.ListMyMembershipsAcceptance