Skip to content

Commit f46ef3a

Browse files
nficanoclaude
andcommitted
chore: rename PyPI distribution to agentruntimecontrolprotocol
Renames the distribution from `arcp` to `agentruntimecontrolprotocol` and reorganizes dependencies into extras so users can opt into runtime-only deps (`pip install agentruntimecontrolprotocol[runtime]`). Import name stays `arcp` — no code changes required. Extras: `[client]` (alias), `[runtime]` adds aiosqlite + pyjwt[crypto], `[otel]` adds opentelemetry-api, `[jwks]` adds httpx, `[all]` pulls in everything. Default install keeps websockets + click so `import arcp` and the CLI work out of the box. Publish workflow now also creates a GitHub Release with the wheel + sdist attached on every `v*` tag — GitHub Packages has no native Python registry, so Releases is the equivalent surface. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent eefd2e5 commit f46ef3a

4 files changed

Lines changed: 179 additions & 86 deletions

File tree

.github/workflows/publish.yml

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
1-
name: Publish to PyPI
1+
name: Publish
22

33
on:
44
push:
55
tags:
66
- "v*"
77

88
permissions:
9-
id-token: write # Required for OIDC trusted publishing
10-
contents: read
9+
id-token: write # OIDC trusted publishing to PyPI
10+
contents: write # Creating GitHub Releases
1111

1212
jobs:
13-
build-and-publish:
14-
name: Build and publish to PyPI
13+
build:
14+
name: Build sdist + wheel
1515
runs-on: ubuntu-latest
16-
environment:
17-
name: pypi
18-
url: https://pypi.org/p/arcp
19-
2016
steps:
2117
- uses: actions/checkout@v6
2218

@@ -31,5 +27,52 @@ jobs:
3127
- name: Build package
3228
run: hatch build
3329

30+
- name: Upload build artifacts
31+
uses: actions/upload-artifact@v4
32+
with:
33+
name: dist
34+
path: dist/
35+
36+
publish-pypi:
37+
name: Publish to PyPI
38+
needs: build
39+
runs-on: ubuntu-latest
40+
environment:
41+
name: pypi
42+
url: https://pypi.org/p/agentruntimecontrolprotocol
43+
steps:
44+
- name: Download build artifacts
45+
uses: actions/download-artifact@v4
46+
with:
47+
name: dist
48+
path: dist/
49+
3450
- name: Publish to PyPI
3551
uses: pypa/gh-action-pypi-publish@release/v1
52+
53+
publish-github-release:
54+
name: Publish GitHub Release
55+
needs: build
56+
runs-on: ubuntu-latest
57+
steps:
58+
- uses: actions/checkout@v6
59+
60+
- name: Download build artifacts
61+
uses: actions/download-artifact@v4
62+
with:
63+
name: dist
64+
path: dist/
65+
66+
# Attaches the wheel + sdist to a GitHub Release for the pushed
67+
# tag. GitHub Packages has no native Python registry, so this is
68+
# the "GitHub-hosted" distribution surface — users can
69+
# `pip install` directly from the release URL if they need an
70+
# off-PyPI source.
71+
- name: Create GitHub Release
72+
uses: softprops/action-gh-release@v2
73+
with:
74+
files: |
75+
dist/*.whl
76+
dist/*.tar.gz
77+
generate_release_notes: true
78+
fail_on_unmatched_files: true

Makefile

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
.PHONY: diagrams
1+
.PHONY: diagrams build clean publish publish-test
22

33
DIAGRAMS := arch-overview session-lifecycle job-lifecycle capability-negotiation heartbeat-ack result-chunk-progress
44
DIAGRAM_DIR := docs/diagrams
@@ -11,3 +11,15 @@ diagrams:
1111
echo "rendering $$name-dark.svg"; \
1212
dot -Tsvg $(DIAGRAM_DIR)/$$name-dark.dot -o $(DIAGRAM_DIR)/$$name-dark.svg; \
1313
done
14+
15+
clean:
16+
rm -rf dist build *.egg-info
17+
18+
build: clean
19+
uv build
20+
21+
# Publish to PyPI. Reads credentials from ~/.pypirc ([pypi] section) by
22+
# default; override with UV_PUBLISH_TOKEN if you'd rather not touch the
23+
# rc file. Run `make build` first or this target will fail.
24+
publish: build
25+
uv publish

pyproject.toml

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,48 @@
11
[project]
2-
name = "arcp"
2+
name = "agentruntimecontrolprotocol"
33
version = "1.1.0"
44
description = "Reference Python implementation of the Agent Runtime Control Protocol (ARCP) v1.1"
55
readme = "README.md"
66
requires-python = ">=3.11"
77
license = { text = "Apache-2.0" }
88
authors = [{ name = "ARCP Reference" }]
9+
# Core (always installed): everything `import arcp` and the `arcp` CLI
10+
# need out of the box — envelope, messages, transports (stdio,
11+
# in-memory, websocket), and the CLI replay tool. Heavier server-side
12+
# deps live in extras below.
913
dependencies = [
1014
"pydantic>=2.13.4,<3",
11-
"aiosqlite>=0.22.1",
12-
"websockets>=16.0",
1315
"structlog>=25.5.0",
14-
"pyjwt[crypto]>=2.13.0",
15-
"click>=8.4.1",
1616
"python-ulid>=3.1.0",
17-
"opentelemetry-api>=1.42.1,<2",
17+
"websockets>=16.0",
18+
"click>=8.4.1",
1819
]
1920

2021
[project.optional-dependencies]
22+
# `pip install agentruntimecontrolprotocol[client]` — client side.
23+
# Everything you need is already in core; this extra exists for
24+
# symmetry with `[runtime]` and for forward compatibility.
25+
client = []
26+
# `pip install agentruntimecontrolprotocol[runtime]` — required to
27+
# `import arcp.runtime`. Adds JWT bearer verification and sqlite-backed
28+
# event logs.
29+
runtime = [
30+
"aiosqlite>=0.22.1",
31+
"pyjwt[crypto]>=2.13.0",
32+
]
33+
# OpenTelemetry middleware (`arcp.middleware.otel`).
34+
otel = [
35+
"opentelemetry-api>=1.42.1,<2",
36+
]
37+
# JWKS fetching for `JWTVerifier` over HTTPS.
2138
jwks = ["httpx>=0.28.1"]
39+
# Everything — pulls in runtime + otel + jwks.
40+
all = [
41+
"aiosqlite>=0.22.1",
42+
"pyjwt[crypto]>=2.13.0",
43+
"opentelemetry-api>=1.42.1,<2",
44+
"httpx>=0.28.1",
45+
]
2246

2347
[dependency-groups]
2448
dev = [

uv.lock

Lines changed: 84 additions & 70 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)