Observed since 20 Oct, 23:00 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
One-shot multi-registry release publisher for OSS packages (Python port of @p-vbordei/agent-publish)
Idiomatic Python port of
@p-vbordei/agent-publish(npm v0.1.2). One-shot multi-registry release publisher for OSS packages. Reads a strictpublish.yaml, runs prechecks (clean tree, tag exists, version match), invokesnpm publishandgh release create, and emits a canonical (RFC 8785 JCS) JSON release manifest.
load_publish_config(path) — strict YAML schema for publish.yamlprecheck(cwd, version, *, from_tag=None) — clean tree, tag exists, version matchbuild_manifest(...) + canonical_manifest_bytes(...) — JCS-canonical release manifestnpm_publish(...) / github_release(...) — registry adaptersagent-publish manifest | publish [--dry-run] [--from-tag vX.Y.Z]SpawnFn callable injection — tests stub npm / gh without real networkpip install agent-publish
(Python 3.10+.)
# In a tagged repo with package.json + CHANGELOG.md + publish.yaml:
agent-publish manifest # preview the JSON release manifest
agent-publish publish --dry-run # full flow, no network writes
agent-publish publish # real: npm + GH release + manifest
The runnable version is examples/quickstart.py. It
builds a manifest in memory, stubs npm via SpawnFn so nothing hits the
network, and prints the canonical JCS bytes:
$ python examples/quickstart.py
{"registries":[{"name":"npm","package":"agent-id","provenance":true,"sha256":"sha512-Ki1ScEwgQ8K0bV2W9k7CWnHFq2x8K3T8sZ3X7K0Ld5g=","url":"https://www.npmjs.com/package/agent-id/v/0.1.0","version":"0.1.0"}],"repo":"p-vbordei/agent-id","schema":"agent-publish/release-manifest/v1","tagged_at":"2025-01-01T00:00:00.000Z","version":"0.1.0"}
Keys are RFC 8785-sorted, no whitespace — byte-identical to the TS and Rust ports on the same input.
| Repo | Language | Status |
|---|---|---|
agent-publish | TypeScript / Bun (reference) | @p-vbordei/agent-publish v0.1.2 |
agent-publish-py | Python (this repo) | v0.1.0 |
agent-publish-rs | Rust | v0.1.0 |
All three pass the same C1–C5 conformance clauses on the same fixtures.
uv sync --extra dev
uv run pytest -v
publish --dry-run performs zero network writes (verified via stubbed SpawnFn).schema, version, repo, tagged_at, registries[]).publish.yaml rejects unknown keys, missing required fields, and invalid types.Plus S1–S5 security checks (token leakage, command injection, .npmrc permissions, env scrubbing, dirty-tree guard) embedded in tests/security/.
See docs/architecture.md for the module map, dependency choices, and the SpawnFn injection pattern.
git clone https://github.com/p-vbordei/agent-publish-py
cd agent-publish-py
uv sync --extra dev
uv run pytest
uv run python examples/quickstart.py
See CONTRIBUTING.md and CHANGELOG.md.
Apache-2.0 — see LICENSE.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.0 | 20 May 2026 | 4 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 23:00 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:f110c6f667ef851f0c608d3d5bd0dbdafc3b288573cbf9f96ff73977b3c4889a