feat(registry): add static registry.json catalog generated from app.json#476
Merged
Conversation
Studio's registry/store is moving to consume a single static JSON catalog instead of per-org Postgres rows + the MCP-binding fan-out. This adds the first-party half of that catalog as a committed registry.json built from every MCP's app.json, plus a generator and a CI drift check. - scripts/lib/registry-payload.ts: extract the app.json -> registry item mapping into one shared module (was inline in publish-one.ts), so the committed registry.json stays byte-consistent with what publishing produces. - scripts/publish-one.ts: refactor to use the shared mapping (behavior-identical). - scripts/build-registry-json.ts: build registry.json from all app.json files (public items only, sorted by id, deterministic). Supports --check. - registry.json: the generated catalog (111 public items). - checks.yml: fail CI when registry.json is stale (run bun run build:registry). Consumed by Studio mesh over HTTPS (commit-pinned). The community/official feed stays in the existing Supabase-backed registry server (separate source). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds the first-party
registry.jsoncatalog (committed, generated from every MCP'sapp.json), a generator script, and a CI drift check.This is the cross-repo half of a change in Studio (
decocms/studio): the registry/store is moving from per-org Postgres rows + an MCP-binding fan-out to consuming one static JSON catalog over HTTPS. Studio mesh fetches thisregistry.json(commit-pinned), caches it in-memory, and serves it via a plain REST route.Changes
scripts/lib/registry-payload.ts(new) — extracts theapp.json → registry itemmapping into one shared module. It was previously inline inpublish-one.ts; sharing it guarantees the committedregistry.jsonstays consistent with what publishing produces.scripts/publish-one.ts— refactored to use the shared mapping. Behavior-identical (same payload).scripts/build-registry-json.ts(new) — buildsregistry.jsonfrom allapp.json/deco.jsonfiles. Public (listed) items only, sorted byid, deterministic (no timestamps → no churn). Supports--check.registry.json(new) — the generated catalog (111 public items, ~250 KB)..github/workflows/checks.yml— addsbun run check:registryso CI fails ifregistry.jsonis stale.package.json—build:registry+check:registryscripts.How to maintain
When an
app.jsonchanges, runbun run build:registryand commit the result. CI enforces this. (We can automate the regenerate-and-commit on push tomainin a follow-up if preferred.)Notes / follow-ups
REGISTRY_CATALOG_URLto this file's raw/commit-pinned URL).registry/server — it's a separate, second source merged on the Studio side. This PR only covers the first-party deco catalog.supabase, aBINDING-type app) has no remote URL; it's included as-is (harmless, the consumer tolerates it). We can excludeBINDINGapps from the catalog if desired.🤖 Generated with Claude Code
Summary by cubic
Adds a committed first-party
registry.jsoncatalog generated from each MCP’sapp.json, plus a generator and CI drift check. This lets Studio consume a single static JSON catalog over HTTPS.New Features
scripts/build-registry-json.tsbuildsregistry.jsonfromapp.json/deco.json(public only, sorted byid, deterministic; supports--check).scripts/lib/registry-payload.tsused by both the builder andscripts/publish-one.tsto keep outputs identical.registry.json(111 public items) and CI job in.github/workflows/checks.ymlrunningbun run check:registry.build:registryandcheck:registryscripts inpackage.json.Migration
app.jsonchanges, runbun run build:registryand commit the updatedregistry.json.REGISTRY_CATALOG_URLto this file’s raw, commit-pinned URL).Written for commit d39e5f0. Summary will update on new commits.