exoclaw-channel-codemod
The codemod that vendors HKUDS/nanobot channels into exoclaw — used as a build-time and test-time dependency by every exoclaw-channel-{slack,telegram,discord,email,matrix,whatsapp} package.
What it does
Given a HKUDS/nanobot channel source file (vendor/upstream.py) and optional ports (vendor/upstream_test.py) snapshotted at a pinned commit (vendor/SHA), plus optional channel-specific patches (patches/00NN-*.patch), it produces:
exoclaw_channel_<name>/channel.py— the channel module ready to shiptests/test_channel.py— the upstream test suite re-targeted at the local module
Transforms are mechanical (import rewrites, signature tweaks, bus capture, monkeypatch string-target rewrites). Patches are applied after the codemod for channel-specific tweaks that can't be generalized.
Public API
from exoclaw_channel_codemod import regenerate
regenerate(pkg_dir) # one package
Pure-Python and idempotent (only writes when content changed).
Maintainer scripts
sync.sh <name> [--apply]— fetch latest upstream, diff, optionally regeneratescaffold-channel.sh <name>— bootstrap a new channel package by snapshotting upstream
Why this is its own package
- Build isolation: hatchling builds each
exoclaw-channel-*wheel in an isolated env. The hatch hook in those packages declaresexoclaw-channel-codemodas a build dependency so it's importable inside the sandbox. - Audit boundary: the codemod is the trusted transform. Versioning it as a real package makes "what was used to derive this generated file" explicit.
Audit boundary
Vendored channel packages commit only vendor/upstream*.py + vendor/SHA + patches/. The generated channel.py and test_channel.py are gitignored — they're derivatives. Anyone reviewing a channel package can verify "this wheel = upstream@SHA + this codemod version + listed patches" by checking out the source and running the test suite (which materializes the codemod output via conftest.py).
Release files for exoclaw-channel-codemod 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| exoclaw_channel_codemod-0.1.0.tar.gz | 9.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| exoclaw_channel_codemod-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.0 kB
Release files / exoclaw_channel_codemod-0.1.0.tar.gz
| Download URL | exoclaw_channel_codemod-0.1.0.tar.gz |
|---|---|
| Size | 9.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c782347d7fd5a6984bde41e1eb18c3318e4451c1c69408b68c1a1898a15cc3b9
|
|
BLAKE2b-256 checksum How to use checksums |
28f32ea8859eb35a3f3777c6150181f9b239def988efaf5763b1ed68b79e1ca3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / exoclaw_channel_codemod-0.1.0-py3-none-any.whl
| Download URL | exoclaw_channel_codemod-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
74a1796f897677aa8fb720af0d6ef2965f4dec8807526315967ce0dd4309bbde
|
|
BLAKE2b-256 checksum How to use checksums |
6b510e133693d94ea339a528cd8421cb39a672d6fe3cabea3210e3613ea6c20a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|