
Juan DenisandClaude Opus 4.8
cdcfba5980
feat(extensions): Phase 3 — platform primitives (models, jobs, sockets, perms)
Backend:
- Plugin data models (manifest `models` → ext_<slug>_ tables; upgrade hook;
purge on uninstall) via extension_lifecycle.py
- Declarative jobs/schedules wired into the Jobs SDK; pause on disable,
resume on enable, removed on uninstall
- Socket.IO extension point (plugins_sdk.sockets → status-guarded /ext/<slug>)
- Permission capability gate (plugins_sdk.permissions.require_permission)
- Version compat gates enforced at every install source + panel_version() SDK;
app/utils/version.py
- Keep-data vs purge on uninstall (lifecycle.uninstall(plugin, purge=))
- Plugin-asset serving route (delivery foundation, ADR 0001); manifest-spec
documents all new fields
Frontend:
- Generic PluginSlot; mounted dashboard.top / service.detail.tab /
domain.drawer.panel
- Uninstall keep/purge dialog; permission consent list + config_schema preview
on the extension detail modal
Docs: ADR 0001 (frontend delivery), ADR 0002 (sandboxing note), EXTENSIONS.md
updates; scripts/new-extension.mjs scaffolder (#40).
Tests: test_extension_platform.py (11). Full backend suite: 1197 passed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 22:11:09 -04:00
..
2026-06-16 01:09:50 -04:00
2026-06-12 18:35:35 -04:00
2026-06-12 17:31:26 -04:00
2026-05-31 14:46:47 -04:00
2026-05-31 16:08:13 -04:00
2026-06-12 17:33:29 -04:00
2026-06-01 02:39:05 -04:00
2026-06-23 18:23:47 -04:00
2026-07-01 20:49:41 -04:00
2026-06-24 14:46:14 -04:00
2026-06-22 16:24:53 -04:00
2026-05-03 15:57:02 -04:00
2026-06-19 13:22:43 -04:00
2026-06-24 14:19:32 -04:00
2026-06-24 14:27:08 -04:00
2026-06-24 14:20:43 -04:00
2026-06-22 19:53:23 -04:00
2026-06-24 14:16:45 -04:00
2026-06-23 18:49:04 -04:00
2026-06-22 20:39:12 -04:00
2026-06-23 23:19:41 -04:00
2026-06-24 14:24:13 -04:00
2026-06-23 21:15:16 -04:00
2026-05-05 14:03:31 -04:00
2026-07-01 20:49:41 -04:00
2026-06-19 10:13:50 -04:00
2026-06-19 09:54:40 -04:00
2026-06-23 18:23:47 -04:00
2026-06-15 00:01:41 -04:00
2026-06-19 03:12:07 -04:00
2026-06-24 14:52:04 -04:00
2026-06-22 16:24:53 -04:00
2026-06-22 16:34:17 -04:00
2026-06-22 16:12:31 -04:00
2026-06-22 16:12:31 -04:00
2026-06-30 23:31:57 -04:00
2026-06-22 16:24:53 -04:00
2026-06-23 00:34:55 -04:00
2026-06-22 16:40:35 -04:00
2026-06-24 01:43:29 -04:00
2026-06-19 01:34:02 -04:00
2026-06-23 21:33:53 -04:00
2026-06-24 14:32:41 -04:00
2026-06-24 14:36:08 -04:00
2026-06-23 20:04:04 -04:00
2026-07-01 21:34:54 -04:00
2026-07-01 22:11:09 -04:00
2026-06-23 17:48:59 -04:00
2026-06-23 21:15:16 -04:00
2026-06-19 10:08:58 -04:00
2026-06-19 09:37:30 -04:00
2026-06-23 20:57:40 -04:00
2026-06-21 22:01:38 -04:00
2026-07-01 20:49:41 -04:00
2026-07-01 21:34:54 -04:00
2026-06-15 23:20:00 -04:00
2026-06-21 19:57:02 -04:00
2026-06-24 14:58:55 -04:00
2026-06-12 18:35:43 -04:00
2026-05-31 16:08:32 -04:00
2026-07-01 21:13:04 -04:00
2026-06-23 19:33:44 -04:00
2026-06-23 19:33:44 -04:00
2026-06-15 19:55:57 -04:00
2026-06-23 19:33:44 -04:00
2026-06-20 22:25:06 -04:00
2026-06-20 22:38:38 -04:00
2026-07-01 21:41:50 -04:00
2026-05-03 07:07:57 -04:00
2026-06-05 23:08:44 -04:00
2026-06-21 01:54:51 -04:00
2026-06-19 16:52:40 -04:00
2026-06-23 20:04:04 -04:00
2026-04-29 00:11:46 -04:00
2026-06-25 01:06:44 -04:00
2026-05-05 14:03:31 -04:00
2026-06-23 17:31:28 -04:00
2026-06-24 14:06:05 -04:00
2026-06-23 20:04:04 -04:00
2026-07-01 00:31:22 -04:00
2026-06-15 00:01:51 -04:00
2026-06-15 00:52:30 -04:00
2026-06-30 23:48:28 -04:00
2026-06-24 14:40:08 -04:00
2026-06-22 01:45:15 -04:00
2026-06-23 18:49:04 -04:00
2026-06-23 18:23:47 -04:00
2026-06-15 23:28:12 -04:00
2026-06-15 23:20:00 -04:00
2026-06-15 00:19:16 -04:00
2026-02-10 16:03:19 -05:00
2026-03-04 02:54:14 -05:00
2026-06-19 14:02:24 -04:00
2026-06-15 21:00:57 -04:00
2026-06-15 21:59:59 -04:00
2026-06-15 22:06:58 -04:00
2026-06-15 21:43:12 -04:00
2026-06-24 14:09:35 -04:00
2026-07-01 01:08:42 -04:00
2026-06-01 03:04:03 -04:00