Commit 5ab16c7
committed
feat(extensions): unified extension store backend (bundle installer + catalog + trust)
Implements Phases A+B of the unified extension store
(docs/plans/2026-06-26-unified-extension-store-design.md): one catalog,
trust model, and install record over the two existing backends
(in-process integration artifacts + containerized service repos).
Phase A — bundle install foundation:
- extension.json schema + validator (packages/core extension-schema.ts),
the bundle primitive: N integrations (sha256-pinned) + N services
(git ref-pinned) as one versioned unit.
- service --ref pinning + managed_by_extension on service_repository;
fixes a latent bug where the strip-.git clone made refreshRepo's
fetch/reset/rev-parse resolve against the monorepo, not the clone —
refresh now re-clones into a tmp dir, validates, then atomically swaps.
- orchestrated atomic installer (extension-installer.ts): register+pin
service repos -> enable -> render -> start; install integration
artifacts -> hot reload; record installed_extension(+components);
best-effort rollback; remove uninstalls exactly what it placed.
Phase B — catalog + trust backend:
- deterministic service security rating from declared capabilities
(security-rating.ts), on top of the existing community sandbox.
- extension-store.ts: multi-source catalog, source-anchored trust tiers
(verified vs community), removed/critical kill-switch, manifest
resolution, folds the legacy integration catalog as degenerate
extensions.
- /admin/extensions routes (catalog/installed/install/update/remove/
sources/refresh) + extension.install/extension.remove jobs.
- installed_extension + installed_extension_component tables;
managed_by_extension on installed_integration.
Migrations 0008 (service repo pinning) + 0009 (installed_extension).1 parent 612f696 commit 5ab16c7
24 files changed
Lines changed: 7111 additions & 87 deletions
File tree
- apps/api/src
- db
- migrations
- meta
- routes
- __tests__
- services
- __tests__
- utils
- packages/core/src
- services
- __tests__
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
14 | 17 | | |
15 | 18 | | |
16 | 19 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
0 commit comments