Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ on:
- "server.json"
- "smithery.yaml"
- "scripts/check_release_artifacts.py"
- "scripts/check_dist.py"
- ".github/workflows/release.yml"

concurrency:
Expand Down Expand Up @@ -52,7 +53,9 @@ jobs:
- name: Build sdist + wheel
run: python -m build
- name: License / package-boundary check on built archives
run: python scripts/check_release_artifacts.py dist
run: |
python scripts/check_release_artifacts.py dist
python scripts/check_dist.py dist/*
- name: twine check
run: twine check dist/*
- name: Validate server.json against the MCP registry schema
Expand Down
16 changes: 7 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,10 @@ as a fabricated success.
## Install

```bash
# v2 is not yet published; install the current source:
pip install git+https://github.com/OpenAdaptAI/openadapt-agent
pip install openadapt-agent
```

Once published, run it without installing — the intended MCP-client entry
point:
Or run it without installing — the intended MCP-client entry point:

```bash
uvx openadapt-agent serve --bundles /path/to/bundles # read-only
Expand Down Expand Up @@ -250,11 +248,11 @@ See [docs/DESIGN.md](docs/DESIGN.md) for the complete contract.

## Package history

The pre-v2 package was a wrapper for model-driven GUI agents. Its
execution responsibilities now live in `openadapt-flow`; the final
legacy release remains available as `openadapt-agent==0.1.0`. The
current package name is retained because this repository bridges both
MCP and Agent Skills; it is not an MCP-only package.
The pre-v2 codebase was a wrapper for model-driven GUI agents. Its
execution responsibilities now live in `openadapt-flow`; its source
history remains in this repository. The current package name is retained
because this repository bridges both MCP and Agent Skills; it is not an
MCP-only package.

## Install as an MCP server (registries)

Expand Down
14 changes: 6 additions & 8 deletions docs/DISTRIBUTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ and [`../smithery.yaml`](../smithery.yaml).
- **Name (reverse-DNS, official registry):** `io.github.OpenAdaptAI/openadapt-agent`
- **Display name:** OpenAdapt Agent (openadapt-flow bridge)
- **PyPI package:** `openadapt-agent`
- **Version:** `2.0.0.dev0` (Beta development release; pick the final release version at publish — see step 3.1)
- **Version:** `2.0.0` (Beta)
- **Description:** Local Beta bridge for governed openadapt-flow workflows and attended actions.
- **Homepage / docs:** https://docs.openadapt.ai
- **Repository:** https://github.com/OpenAdaptAI/openadapt-agent
Expand Down Expand Up @@ -139,14 +139,12 @@ No secret is ever committed; these live only in repo Settings -> Secrets.

### 3.1 Decide the release version

`2.0.0.dev0` is a dev pre-release; `pip install openadapt-agent` will not
select it without `--pre`. For a real launch choose one of:
- `2.0.0rc1` (recommended first public: pre-release, opt-in via `--pre`), or
- `2.0.0` (final; remove development-release caveats only when the evidence supports it).
The first public release is `2.0.0`. Future releases must keep the package,
module, and registry metadata versions synchronized.

Whatever you choose, set it in **three places that a CI test pins
together**: `pyproject.toml` `version`, `src/openadapt_agent/__init__.py`
`__version__`, and both `version` fields in `server.json`. The
Set every future version in **three places that a CI test pins together**:
`pyproject.toml` `version`, `src/openadapt_agent/__init__.py` `__version__`,
and both `version` fields in `server.json`. The
`tests/test_distribution.py` guard fails if they drift.

### 3.2 Publish to PyPI — AUTOMATED (`pypi-publish` job)
Expand Down
2 changes: 1 addition & 1 deletion llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ All mutations require an exact capability digest, a stable idempotency key, acti

## Public capability vs private artifact

- The **package/MCP server is the public OpenAdapt capability**: inspect and, with explicit operator flags, run or attend a compiled workflow under governance. The v2 package is not yet published.
- The **package/MCP server is the public OpenAdapt capability**: inspect and, with explicit operator flags, run or attend a compiled workflow under governance. Install it from PyPI as `openadapt-agent`.
- A user's **compiled workflow bundle is their private artifact**. It is supplied at server start via `--bundles` and is never embedded in the package, the `server.json`, or any registry listing.

## Key documents
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "openadapt-agent"
version = "2.0.0.dev0"
version = "2.0.0"
description = "Local agent bridge for governed OpenAdapt workflows, attended actions, MCP, and Agent Skills"
readme = "README.md"
# openadapt-flow pins <3.13 (rapidocr-onnxruntime); this package inherits it.
Expand Down
4 changes: 2 additions & 2 deletions server.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
"url": "https://github.com/OpenAdaptAI/openadapt-agent",
"source": "github"
},
"version": "2.0.0.dev0",
"version": "2.0.0",
"packages": [
{
"registryType": "pypi",
"registryBaseUrl": "https://pypi.org",
"identifier": "openadapt-agent",
"version": "2.0.0.dev0",
"version": "2.0.0",
"runtimeHint": "uvx",
"transport": {
"type": "stdio"
Expand Down
2 changes: 1 addition & 1 deletion src/openadapt_agent/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@
client in the same data boundary.
"""

__version__ = "2.0.0.dev0"
__version__ = "2.0.0"

__all__ = ["__version__"]
9 changes: 9 additions & 0 deletions tests/test_distribution.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
SMITHERY_YAML = REPO_ROOT / "smithery.yaml"
LLMS_TXT = REPO_ROOT / "llms.txt"
PYPROJECT = REPO_ROOT / "pyproject.toml"
RELEASE_WORKFLOW = REPO_ROOT / ".github" / "workflows" / "release.yml"

REVERSE_DNS_NAME = "io.github.OpenAdaptAI/openadapt-agent"
PYPI_NAME = "openadapt-agent"
Expand Down Expand Up @@ -62,6 +63,14 @@ def test_version_is_consistent_everywhere() -> None:
assert _pyproject_version() == __version__


def test_release_workflow_runs_the_complete_archive_boundary() -> None:
"""The exact artifacts handed to publishers get both release guards."""
workflow = RELEASE_WORKFLOW.read_text(encoding="utf-8")
assert '- "scripts/check_dist.py"' in workflow
assert "python scripts/check_release_artifacts.py dist" in workflow
assert "python scripts/check_dist.py dist/*" in workflow


def test_serve_is_the_subcommand_and_bundles_is_required() -> None:
args = _server_json()["packages"][0]["packageArguments"]
positional = [a for a in args if a["type"] == "positional"]
Expand Down
Loading