Self-hosted package registry for Clause-Logic projects. Served from GitHub Pages at https://clause-logic.github.io/registry/.
Currently surfaces:
- PyPI (PEP 503 simple index) at
/pypi/simple/
The actual wheels live in each source repo's GitHub release assets — this repo only generates pointer HTML.
# pyproject.toml
[[tool.uv.index]]
name = "clause-logic"
url = "https://clause-logic.github.io/registry/pypi/simple/"
[tool.uv.sources]
exoclaw-channel-slack = { index = "clause-logic" }A nightly workflow (and a repository_dispatch fired from source-repo releases) runs tools/rebuild.py:
- Reads
manifest.tomlfor the list of source repos. - For each, calls the GitHub API and collects every
.whl/.tar.gzasset across all releases. - Generates a PEP 503 HTML tree pointing at each asset's
browser_download_url. - Deploys the result to GitHub Pages.
To index a new project: add a [[pypi]] entry to manifest.toml.
PyPI new-project creation is rate-limited (20 per user / 40 per IP per hour). When publishing many small packages at once — for example, the per-channel plugins in exoclaw-plugins — this becomes a hard blocker. The registry sidesteps it: wheels are uploaded as GitHub release assets, which has no equivalent limit.
GitHub Packages doesn't offer a PyPI registry (roadmap closed without plans), so this is the cleanest escape hatch.