Files
librefang-registry/scripts
Evan Hu ff6f3f2b25 ci: build registry-index.json in-repo for dashboard real-time updates
Pair with the existing plugins-index.json path (which feeds the
daemon's signed install lane). registry-index.json mirrors the
dict-shaped payload the registry-worker's cron currently builds via
40+ GitHub Contents API calls — but built locally from the checked-out
tree by scripts/build-registry-index.mjs, so the worker only fetches
ONE file per category type (2 total: plugins + registry) on refresh.

Workflow now picks up content changes across all 8 category dirs
(was: plugins/ only) so dashboard updates land within seconds of a
push instead of waiting for the 02:00 UTC cron tick.

The dashboard's /api/registry endpoint reads kv_store('registry_data');
the worker's forced-refresh now writes that key with these bytes and
purges the Cache-API entry, so the next dashboard hit sees fresh
data instead of the 1h-cached previous payload.

Generated counts on first build: 11p 17h 32a 60s 44c 57pr 22w 33mcp.
2026-05-05 00:43:30 +09:00
..

Scripts

Utility scripts for maintaining the LibreFang registry.

validate.py

Validates all TOML content files across the registry.

python scripts/validate.py

What It Checks

Per content type:

  • Providers -- required fields, valid tiers, non-negative costs, no duplicate model IDs
  • Agents -- required fields (name, description, module), name matches directory
  • Hands -- required fields (id, name, description), valid category, [agent] section, id matches directory
  • Integrations -- required fields (id, name), [transport] section, id matches filename
  • Skills -- [skill] section with name, [runtime] with valid type
  • Plugins -- name matches directory, [hooks] section, hook files exist

Cross-type checks:

  • Routing alias collisions between agents and hands (reported as warnings)
  • Cross-file duplicate model IDs within the same provider

Requirements

  • Python 3.11+ (uses tomllib)
  • Or Python 3.8+ with pip install tomli

Exit Codes

  • 0 -- all checks passed
  • 1 -- one or more validation errors