Release process
Releases are automated by .github/workflows/release-node.yml. They are driven by the
core runtime's release, not cut independently from this repository — this keeps the SDK
and the aasm runtime binaries it ships version-aligned.
What gets published
Each release publishes five npm packages at one version:
@agent-assembly/sdk— the main package.@agent-assembly/runtime-linux-x64,runtime-linux-arm64,runtime-darwin-x64,runtime-darwin-arm64— theos/cpu-constrained packages carrying the platformaasmruntime binary.
Trigger
The workflow runs on either:
repository_dispatch(typeagent-assembly-release-published) — fired by theagent-assemblyrelease pipeline'snotify-downstreamjob once its GitHub Release is published. This is the normal path and avoids racing the upstream release.workflow_dispatch— a manual re-run for an already-published tag (e.g. to recover from a partial publish), taking therelease_taginput.
Both paths resolve a v*.*.* tag and reject anything that is not SemVer.
Steps
- Download the
aasm-<rust-target>.tar.gzassets from the matchingai-agent-assembly/agent-assemblyGitHub Release. - Stage each binary into the corresponding
packages/runtime-*/bin/aasmby Rust target:x86_64-unknown-linux-gnu → runtime-linux-x64,aarch64-unknown-linux-gnu → runtime-linux-arm64,x86_64-apple-darwin → runtime-darwin-x64,aarch64-apple-darwin → runtime-darwin-arm64. - Bump all five
package.jsonfiles (and the@agent-assembly/runtime-*optionalDependenciesranges) to the tag's version. - Build the main SDK (
pnpm build, ESM + CJS). - Publish the four runtime sub-packages first, then the main SDK — so the main
package's
optionalDependenciesalways resolve to versions that already exist on the registry.
dist-tag
The npm dist-tag is derived from the SemVer pre-release identifier:
0.0.1-alpha.3→ published under--tag alpha0.0.1-rc.1→ published under--tag rc0.0.1(no pre-release) → published under the defaultlatesttag
So pre-1.0 alpha builds never displace @latest. Install a specific channel with
pnpm add @agent-assembly/sdk@alpha.
Provenance
Publishing uses npm OIDC Trusted Publishing with id-token: write and
NPM_CONFIG_PROVENANCE=true, so each release carries SLSA build provenance.
Documentation publishing
The documentation site is published separately by .github/workflows/publish-docs.yml on
pushes to master — it is not part of the npm release.
Documentation versioning
The docs site uses Docusaurus versioning to model three release channels on top of the immutable version snapshots:
- latest (master) — the in-progress docs in
docs/(the Docusauruscurrentversion). Always tracksmaster, is never frozen, is served at/next/(not the root, so it never collides with a real cut version), and carries the nativeunreleasedbanner. - stable — the newest snapshot cut from a stable tag (
vX.Y.Z). It islastVersion, served at the site root, and is the default landing page. Its dropdown label isstable (vX.Y.Z)and it shows no banner. - pre-release — the newest snapshot cut from a pre-release tag (
vX.Y.Z-...). Its dropdown label ispre-release (vX.Y.Z-...). When no stable snapshot exists yet, the pre-release is the default landing instead.
Older superseded snapshots keep their bare tag as the label and carry the unmaintained
banner pointing readers at the stable channel.
Channel from tag
The release workflow classifies each tag:
^v\d+\.\d+\.\d+$→ stable^v\d+\.\d+\.\d+-.+→ pre-release
Automated, release-driven cut
Snapshots are cut automatically by the release workflow
(.github/workflows/release-node.yml), not by hand. After the npm publish succeeds — so a
snapshot is only ever cut on a real, finished release — a version-docs job:
- Runs
pnpm docusaurus docs:version <tag>fromwebsite/, freezing today'sdocs/intowebsite/versioned_docs/version-<tag>/and appending<tag>toversions.json. - Regenerates the per-version
labels andbanners and repointslastVersion(newest stable, else newest pre-release) inwebsite/docusaurus.config.ts. - Commits the generated
versioned_docs/,versioned_sidebars/,versions.jsonand the config change, and opens a docs-update PR againstmaster(the repo's normal flow).
The current version always keeps tracking master under the latest (master) label.
Cutting a snapshot manually is not part of the normal flow. If you ever need to recover a missed snapshot, run
pnpm docusaurus docs:version <tag>fromwebsite/and re-run the label/banner/lastVersionregeneration the workflow performs.
No publish-docs.yml change is needed: pnpm build (run by publish-docs.yml) builds
every version present in versions.json automatically.