Official external material provider repository for paper-search-cli.
Material providers implement acquisition and extraction adapters (artifact_resolver, artifact_downloader, extractor, and related kinds). They are installed separately from resource-search-providers, which only publishes search sources for the Zotero plugin.
- Distribute installable material provider packages for
paper-search-cli - Publish a dedicated
registry.jsonwithkind,downloadUrl,sha256, andminCliVersionentries for material-provider discovery - Build release zip archives via CI without committing
dist/orregistry.jsonto git
Default registry URL (after the repository's first release):
https://github.com/X-T-E-R/material-providers/releases/download/material-registry-latest/registry.json
Use with:
paper-search registries add official-material https://github.com/X-T-E-R/material-providers/releases/download/material-registry-latest/registry.json --kind material --apply
paper-search registries refresh official-material
paper-search providers available --json
paper-search providers install unpaywall --from official-material --apply --jsonRegistry refresh validates and snapshots metadata; it does not install provider code. Installation remains an explicit, plan-first CLI operation.
Each provider lives under:
src/providers/packages/<id>/
Every package contains at least:
manifest.json—MaterialProviderManifestcontract (kind,capabilities,permissions, optionalconfigSchema,rateLimit)index.tsorprovider.js— bundled toprovider.jsin release artifacts
- Change provider source under
src/providers/packages/ npm run buildgeneratesdist/<id>/folders,dist/<id>.ziparchives, and rootregistry.jsonnpm run verify:releasechecks types, manifest/registry/archive alignment, deterministic ZIP bytes across time zones, and a retained-old-registry publish simulation- Read-only pull-request CI verifies the same release gate;
mainis the stable publication channel - GitHub Actions publishes the exact
dist/*.zipset plus the correspondingregistry.jsonto the unique immutable tagmaterial-providers-<commit>, then byte-verifies every asset - Only after that immutable release is complete, the workflow replaces
registry.jsonon the mutable discovery tagmaterial-registry-latest; that release remains registry-only
Run npm run release:plan for an offline dry-run summary. It does not contact
GitHub or mutate releases. Registry entries keep the public
id/version/kind/downloadUrl/sha256/minCliVersion shape, and every
downloadUrl points to an immutable archive release.
Build artifacts and registry.json are gitignored; only source and scripts are versioned.
Manual publication runs are restricted to main. The npm package remains
private; providers are distributed as GitHub release assets and are not
published to npm.