| 1 | -- Reasonix registry: published skills/MCP servers, their versions, and the |
| 2 | -- activity/install event log. Apply: |
| 3 | -- wrangler d1 migrations apply reasonix-registry --local (or --remote) |
| 4 | |
| 5 | -- One row per published capability. The registry stores only metadata and a |
| 6 | -- source pointer; it never fetches or executes the content — install happens |
| 7 | -- client-side through the install_source tool (SSRF-guarded, risk-rated). |
| 8 | CREATE TABLE IF NOT EXISTS packages ( |
| 9 | id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 10 | kind TEXT NOT NULL, -- skill | plugin | mcp |
| 11 | scope_handle TEXT NOT NULL, -- publisher handle (namespace) |
| 12 | name TEXT NOT NULL, -- capability slug within the scope |
| 13 | slug TEXT NOT NULL UNIQUE, -- '<handle>/<name>' canonical id |
| 14 | summary TEXT NOT NULL DEFAULT '', -- one-liner (SKILL.md description) |
| 15 | description TEXT NOT NULL DEFAULT '', -- long markdown (README) |
| 16 | source TEXT NOT NULL DEFAULT '', -- what install_source pulls from |
| 17 | install_kind TEXT NOT NULL DEFAULT 'auto', -- auto | skill | plugin | mcp |
| 18 | homepage TEXT NOT NULL DEFAULT '', |
| 19 | repo_url TEXT NOT NULL DEFAULT '', |
| 20 | tags TEXT NOT NULL DEFAULT '', -- comma-separated |
| 21 | latest_version TEXT NOT NULL DEFAULT '', |
| 22 | install_count INTEGER NOT NULL DEFAULT 0, |
| 23 | star_count INTEGER NOT NULL DEFAULT 0, |
| 24 | verified INTEGER NOT NULL DEFAULT 0, -- owner/admin trust badge |
| 25 | status TEXT NOT NULL DEFAULT 'active', -- active | hidden | removed |
| 26 | publisher_id INTEGER NOT NULL, -- accounts user id (owner) |
| 27 | created_at TEXT NOT NULL, |
| 28 | updated_at TEXT NOT NULL |
| 29 | ); |
| 30 | CREATE INDEX IF NOT EXISTS packages_kind ON packages (kind, status); |
| 31 | CREATE INDEX IF NOT EXISTS packages_installs ON packages (install_count DESC); |
| 32 | CREATE INDEX IF NOT EXISTS packages_created ON packages (created_at DESC); |
| 33 | CREATE INDEX IF NOT EXISTS packages_publisher ON packages (publisher_id); |
| 34 | |
| 35 | -- Immutable version history: one row per published version, carrying the source |
| 36 | -- snapshot and content hash so a consumer can audit provenance before install. |
| 37 | CREATE TABLE IF NOT EXISTS package_versions ( |
| 38 | id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 39 | package_id INTEGER NOT NULL, |
| 40 | version TEXT NOT NULL, |
| 41 | source TEXT NOT NULL DEFAULT '', |
| 42 | manifest TEXT NOT NULL DEFAULT '', -- JSON: frontmatter / mcp config snapshot |
| 43 | content_hash TEXT NOT NULL DEFAULT '', -- sha256 of the source |
| 44 | risk_level TEXT NOT NULL DEFAULT '', -- echoed from install_source plan |
| 45 | created_at TEXT NOT NULL, |
| 46 | UNIQUE (package_id, version) |
| 47 | ); |
| 48 | CREATE INDEX IF NOT EXISTS versions_package ON package_versions (package_id, created_at DESC); |
| 49 | |
| 50 | -- Per-user stars, so star_count is a real de-duplicated tally. |
| 51 | CREATE TABLE IF NOT EXISTS stars ( |
| 52 | package_id INTEGER NOT NULL, |
| 53 | user_id INTEGER NOT NULL, |
| 54 | created_at TEXT NOT NULL, |
| 55 | PRIMARY KEY (package_id, user_id) |
| 56 | ); |
| 57 | |
| 58 | -- Activity log: powers the homepage live feed and the 7-day "trending" ranking. |
| 59 | CREATE TABLE IF NOT EXISTS events ( |
| 60 | id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 61 | type TEXT NOT NULL, -- publish | update | install | star |
| 62 | package_id INTEGER, |
| 63 | actor_handle TEXT NOT NULL DEFAULT '', |
| 64 | summary TEXT NOT NULL DEFAULT '', |
| 65 | created_at TEXT NOT NULL |
| 66 | ); |
| 67 | CREATE INDEX IF NOT EXISTS events_created ON events (created_at DESC); |
| 68 | CREATE INDEX IF NOT EXISTS events_trending ON events (type, created_at); |
| 69 |