feat(tasks): unify saved tasks on ssh_tasks services

- Add shared task_runner.run_saved_task helper used by routers/tasks.py and
  widgets/sources.py SshTaskWidgetSource.
- Saved tasks now target ssh_tasks service instances via default_service_id;
  the legacy default_machine_id and saved_task_runs are removed.
- Actions page lists ssh_tasks services for default and run-time selection.
- Update types, API client, hooks, tests, docs, and changelog.

Backend tests: 222 passed. Frontend lint/build/test: clean (71 passed).
This commit is contained in:
Developer
2026-06-23 13:55:13 +00:00
parent d7ad933b2a
commit 50eb76a10d
14 changed files with 371 additions and 410 deletions
+23
View File
@@ -23,3 +23,26 @@ globalThis.ResizeObserver =
// Radix popper also probes `requestAnimationFrame`; jsdom provides it, but some
// primitives defer layout reads through rAF that never flush in jsdom. Keep the
// default rAF; this guard is intentionally minimal.
// Radix Select uses pointer capture APIs that jsdom does not implement.
// Stub them on HTMLElement so opening/closing selects in tests does not throw.
if (typeof window !== "undefined" && window.HTMLElement) {
const proto = window.HTMLElement.prototype;
if (!proto.hasPointerCapture) {
proto.hasPointerCapture = () => false;
}
if (!proto.setPointerCapture) {
proto.setPointerCapture = () => {};
}
if (!proto.releasePointerCapture) {
proto.releasePointerCapture = () => {};
}
}
// Radix Select also calls scrollIntoView on items when opening; jsdom lacks it.
if (typeof window !== "undefined" && window.Element) {
const proto = window.Element.prototype;
if (!proto.scrollIntoView) {
proto.scrollIntoView = () => {};
}
}