Branch: ci/publish-python-sdk
Depends on: current main
Priority: P2 — pip install is impossible today; SDK is source-only.
Prompt:
Neither Python package is installable from PyPI. awp-core-py (the PyO3 bindings) has a wheel workflow that only targets TestPyPI behind a manual trigger; awp-langgraph (the pure-Python wrapper) has no CI at all and declares a dependency on awp-core-py>=0.1 that cannot resolve from PyPI. So pip install awp-langgraph fails, and the quickstart's one-line install is fiction. This task makes both packages publishable with matching versions and adds the CI to build, test, and release them together.
Context
crates/awp-python/pyproject.toml — awp-core-py, maturin backend, abi3-py39, version 0.1.0, module awp._native, python-source = python. Correct native-wheel setup.
python/awp-langgraph/pyproject.toml — awp-langgraph, hatchling, version 0.1.0a1, only-include = ["awp/langgraph"], depends on awp-core-py>=0.1 (pyproject.toml:38). Shares the awp namespace via pkgutil.extend_path in the core's awp/__init__.py:21.
- Version skew across three places: core
0.1.0, langgraph 0.1.0a1, and telemetry.py:48 hardcodes 0.1.0a1 again.
.github/workflows/python-wheels.yml — builds abi3 wheels + sdist for awp-core-py on mac/linux/win; its only publish job (python-wheels.yml:128-149) targets TestPyPI behind workflow_dispatch + a boolean input. No git tags exist. awp-langgraph is absent from all CI (grep awp-langgraph .github → nothing).
python/awp-langgraph/tests/ — a real pytest suite (test_wrapper.py, test_sinks.py, test_telemetry.py) that currently never runs in CI.
Your Task
- Unify the version — pick a single release version (e.g.
0.1.0a1 for a first public alpha) and set it in crates/awp-python/pyproject.toml, python/awp-langgraph/pyproject.toml, and the hardcoded string at python/awp-langgraph/awp/langgraph/telemetry.py:48. Prefer reading the version from package metadata (importlib.metadata.version) in telemetry.py so there is a single source of truth going forward.
- Add langgraph CI — new job in
.github/workflows/python-wheels.yml (or a sibling workflow): install the freshly built awp-core-py wheel, then pip install -e python/awp-langgraph, then run its pytest suite. This closes the gap where langgraph tests never run in CI.
- Make the dependency resolvable — ensure
awp-langgraph's awp-core-py dependency pins the version being released together, and that the publish job releases awp-core-py before (or atomically with) awp-langgraph so resolution works from the index.
- Add a real publish path — extend the workflow with a tag-triggered (
v*) job that publishes both packages to real PyPI using trusted publishing (OIDC) or a PYPI_API_TOKEN secret. Keep the existing TestPyPI job for dry runs.
- Fix the quickstart —
docs/site/docs/quickstart.md: once publishable, the pip install awp-langgraph instruction is valid; until the first tag is pushed, keep the install-from-source note that README.md:14 already carries. (Coordinate with the docs-correction issue.)
Do Not Touch
- The runtime source of either package (
crates/awp-python/src/, python/awp-langgraph/awp/) except the single version string in telemetry.py.
- The abi3/maturin build matrix that already works — extend it, don't rewrite it.
Verification
make check
# → lint and tests pass (includes check-python building both packages)
# Versions are unified:
grep -R "0.1.0a1\|version = " crates/awp-python/pyproject.toml python/awp-langgraph/pyproject.toml
# → both declare the same release version
# langgraph tests run under CI config locally:
make check-python
# → awp-core-py builds, awp-langgraph installs against it, both pytest suites pass
# Dry-run the build artifacts:
cd python/awp-langgraph && python -m build && ls dist/
# → an sdist and wheel are produced with the unified version
Branch:
ci/publish-python-sdkDepends on: current main
Priority: P2 —
pip installis impossible today; SDK is source-only.Prompt:
Neither Python package is installable from PyPI.
awp-core-py(the PyO3 bindings) has a wheel workflow that only targets TestPyPI behind a manual trigger;awp-langgraph(the pure-Python wrapper) has no CI at all and declares a dependency onawp-core-py>=0.1that cannot resolve from PyPI. Sopip install awp-langgraphfails, and the quickstart's one-line install is fiction. This task makes both packages publishable with matching versions and adds the CI to build, test, and release them together.Context
crates/awp-python/pyproject.toml—awp-core-py, maturin backend,abi3-py39, version0.1.0, moduleawp._native,python-source = python. Correct native-wheel setup.python/awp-langgraph/pyproject.toml—awp-langgraph, hatchling, version0.1.0a1,only-include = ["awp/langgraph"], depends onawp-core-py>=0.1(pyproject.toml:38). Shares theawpnamespace viapkgutil.extend_pathin the core'sawp/__init__.py:21.0.1.0, langgraph0.1.0a1, andtelemetry.py:48hardcodes0.1.0a1again..github/workflows/python-wheels.yml— builds abi3 wheels + sdist forawp-core-pyon mac/linux/win; its only publish job (python-wheels.yml:128-149) targets TestPyPI behindworkflow_dispatch+ a boolean input. No git tags exist.awp-langgraphis absent from all CI (grep awp-langgraph .github→ nothing).python/awp-langgraph/tests/— a real pytest suite (test_wrapper.py,test_sinks.py,test_telemetry.py) that currently never runs in CI.Your Task
0.1.0a1for a first public alpha) and set it incrates/awp-python/pyproject.toml,python/awp-langgraph/pyproject.toml, and the hardcoded string atpython/awp-langgraph/awp/langgraph/telemetry.py:48. Prefer reading the version from package metadata (importlib.metadata.version) intelemetry.pyso there is a single source of truth going forward..github/workflows/python-wheels.yml(or a sibling workflow): install the freshly builtawp-core-pywheel, thenpip install -e python/awp-langgraph, then run its pytest suite. This closes the gap where langgraph tests never run in CI.awp-langgraph'sawp-core-pydependency pins the version being released together, and that the publish job releasesawp-core-pybefore (or atomically with)awp-langgraphso resolution works from the index.v*) job that publishes both packages to real PyPI using trusted publishing (OIDC) or aPYPI_API_TOKENsecret. Keep the existing TestPyPI job for dry runs.docs/site/docs/quickstart.md: once publishable, thepip install awp-langgraphinstruction is valid; until the first tag is pushed, keep the install-from-source note thatREADME.md:14already carries. (Coordinate with the docs-correction issue.)Do Not Touch
crates/awp-python/src/,python/awp-langgraph/awp/) except the single version string intelemetry.py.Verification