diff --git a/packages/agent/CHANGELOG.md b/packages/agent/CHANGELOG.md new file mode 100644 index 000000000..371dec7e6 --- /dev/null +++ b/packages/agent/CHANGELOG.md @@ -0,0 +1,13 @@ +# CHANGELOG + +Releases up to v2.2.0 are recorded in the [openadapt-agent repository](https://github.com/OpenAdaptAI/openadapt-agent/blob/main/CHANGELOG.md). + +## v2.2.1 (2026-10-18) + +First release from the [OpenAdapt monorepo](https://github.com/OpenAdaptAI/OpenAdapt) (`packages/agent`). The MCP agent server now lives in `openadapt_flow.agent`; this package is a compatibility package over it, so `openadapt-agent` and `import openadapt_agent` keep working. It requires `openadapt-flow>=2.2.0,<3`. + +### Features + +- The server reads the approval mode and can answer a waiting save as a delegated agent ([#1192](https://github.com/OpenAdaptAI/OpenAdapt/pull/1192)). +- After a step is repaired more than once, the server proposes a branch ([#1188](https://github.com/OpenAdaptAI/OpenAdapt/pull/1188)). +- The install docs use user scope and say what happens next ([#1230](https://github.com/OpenAdaptAI/OpenAdapt/pull/1230)). diff --git a/packages/agent/manifest.json b/packages/agent/manifest.json index a9eedce59..f8a363e11 100644 --- a/packages/agent/manifest.json +++ b/packages/agent/manifest.json @@ -2,7 +2,7 @@ "manifest_version": "0.4", "name": "openadapt-agent", "display_name": "OpenAdapt", - "version": "2.2.0", + "version": "2.2.1", "description": "Lets your AI agent enter information in an app with no API and get back whether it saved.", "long_description": "Your agent sends a workflow name, its inputs, and its own request id. OpenAdapt enters the values in the app's own screens on this computer, reads the saved record back, and returns done, needs review, not sure if saved, or did not run. The same request id never writes twice. Workflow files and evidence stay on this computer.", "author": { diff --git a/packages/agent/pyproject.toml b/packages/agent/pyproject.toml index 0ed78f155..a472cdbb2 100644 --- a/packages/agent/pyproject.toml +++ b/packages/agent/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "openadapt-agent" -version = "2.2.0" +version = "2.2.1" description = "Let your AI agent enter information in apps with no API and get back whether it saved (MCP and Agent Skills)" readme = "README.md" # openadapt-flow pins <3.13 (rapidocr-onnxruntime); this package inherits it. @@ -39,7 +39,7 @@ dependencies = [ # 2.0 gates every saving run by default (each_item); the agent reports # that wait as waiting_for_approval (tests/test_approval_flow.py) and # 2.0 ships cloud_seal for Cloud-connected Seals. - "openadapt-flow>=2.1.0,<3", + "openadapt-flow>=2.2.0,<3", # Flow uses cryptography for encrypted bundles and signed runtime evidence. # Keep the published Agent artifact above the PKCS#7 oracle fixed by 50.0.0 # (GHSA-g6cj-pr64-35w5), even when an existing environment already has an @@ -70,7 +70,7 @@ tutorial = [ # query, added in openadapt-flow 1.29.0. Older Flow falls back to the # simulated engine. Flow's macos extra (pyobjc, darwin-only markers) lets # `serve --authoring` without --url pin the frontmost macOS window. - "openadapt-flow[browser,macos]>=2.1.0,<3", + "openadapt-flow[browser,macos]>=2.2.0,<3", ] [project.scripts] diff --git a/packages/agent/server.json b/packages/agent/server.json index ad54436b7..2cebea2bb 100644 --- a/packages/agent/server.json +++ b/packages/agent/server.json @@ -9,13 +9,13 @@ "source": "github", "subfolder": "packages/agent" }, - "version": "2.2.0", + "version": "2.2.1", "packages": [ { "registryType": "pypi", "registryBaseUrl": "https://pypi.org", "identifier": "openadapt-agent", - "version": "2.2.0", + "version": "2.2.1", "runtimeHint": "uvx", "transport": { "type": "stdio" diff --git a/packages/flow/CHANGELOG.md b/packages/flow/CHANGELOG.md index 6b041e768..5b70e680a 100644 --- a/packages/flow/CHANGELOG.md +++ b/packages/flow/CHANGELOG.md @@ -15,6 +15,49 @@ +## v2.2.0 (2026-10-18) + +First release from the [OpenAdapt monorepo](https://github.com/OpenAdaptAI/OpenAdapt) (`packages/flow`). The shared contracts (`openadapt_flow.contracts`) and the MCP agent server (`openadapt_flow.agent`) now ship inside this package; `openadapt-types` and `openadapt-agent` are thin compatibility packages over them. + +### Features + +- `openadapt_flow.jit` wraps a computer-use agent: the first run of a task is recorded and compiled into a Flow program, and later runs replay it with zero model calls. A compiled run stays a draft until a person, a registered admitter key, or a registered agent under a signed policy admits it ([#1207](https://github.com/OpenAdaptAI/OpenAdapt/pull/1207)). A signed policy can set `allow_self_admission` so the recording agent admits its own draft under the same checks; the manifest marks it `self_admitted` ([#1249](https://github.com/OpenAdaptAI/OpenAdapt/pull/1249)). +- Read-back verifiers taught by demonstration, with assurance grades ([#1203](https://github.com/OpenAdaptAI/OpenAdapt/pull/1203)). +- `openadapt-flow verify-run` judges any executor's write from the system of record and emits an RFC-0002 effect receipt; it reads the same `verify.yaml` as qualify and accepts `--remediates` and `--correlation-id` ([#1198](https://github.com/OpenAdaptAI/OpenAdapt/pull/1198)). +- Declarative qualify from `verify.yaml` ([#1186](https://github.com/OpenAdaptAI/OpenAdapt/pull/1186), from [openadapt-flow#532](https://github.com/OpenAdaptAI/openadapt-flow/pull/532)). +- Delegated approvers, read-back field checks, triage, and eligibility ([#1190](https://github.com/OpenAdaptAI/OpenAdapt/pull/1190), from [openadapt-flow#534](https://github.com/OpenAdaptAI/openadapt-flow/pull/534)); approver identity, approver policy, and an approval record in the shared contracts ([#1187](https://github.com/OpenAdaptAI/OpenAdapt/pull/1187)). +- The MCP server reads the approval mode and can answer a waiting save as a delegated agent ([#1192](https://github.com/OpenAdaptAI/OpenAdapt/pull/1192)); it proposes a branch after a step is repaired more than once ([#1188](https://github.com/OpenAdaptAI/OpenAdapt/pull/1188)). +- Native OCR on macOS and Windows, with no OpenCV on that path ([#1194](https://github.com/OpenAdaptAI/OpenAdapt/pull/1194), from [openadapt-flow#531](https://github.com/OpenAdaptAI/openadapt-flow/pull/531)). +- An agent can drive recording on native Windows apps and over RDP and Citrix sessions; remote sessions are screen-only and the agent works from the client window's pixels ([openadapt-flow#527](https://github.com/OpenAdaptAI/openadapt-flow/pull/527)). +- Learn from an agent demonstration, with replay fixes from the learn and zero-DOM benchmarks ([openadapt-flow#525](https://github.com/OpenAdaptAI/openadapt-flow/pull/525)). +- Teach a branch from several calling-agent demonstrations ([openadapt-flow#521](https://github.com/OpenAdaptAI/openadapt-flow/pull/521)). +- Read marked fields from the page structure ([openadapt-flow#522](https://github.com/OpenAdaptAI/openadapt-flow/pull/522)). +- Phone approval of a waiting save through the decision portal, person-signed approver grants, and no self-approval of a run's own saves ([#1234](https://github.com/OpenAdaptAI/OpenAdapt/pull/1234)). +- Countersigned and timestamped Seals, Sigstore TSA by default ([#1210](https://github.com/OpenAdaptAI/OpenAdapt/pull/1210)); offline Seals by default, batched timestamps, and a strict no-outbound mode ([#1216](https://github.com/OpenAdaptAI/OpenAdapt/pull/1216)). +- One check-level scale (0 to 5) maps the verification ranks, Seal levels and read-back labels ([#1250](https://github.com/OpenAdaptAI/OpenAdapt/pull/1250)). +- `record --verify` reads the system of record around a recording and proposes its checks for a person to confirm ([#1233](https://github.com/OpenAdaptAI/OpenAdapt/pull/1233)). +- SMART Backend Services (`private_key_jwt`) tokens for FHIR record checks ([#1235](https://github.com/OpenAdaptAI/OpenAdapt/pull/1235)). +- Qualify on the deployment surface: a workflow qualified with page structure halts on a pixels-only surface such as RDP or Citrix until it is requalified there ([#1231](https://github.com/OpenAdaptAI/OpenAdapt/pull/1231)). +- A complete known-ID list lifts look-alike identity stops on pixel-only screens ([#1223](https://github.com/OpenAdaptAI/OpenAdapt/pull/1223)); a headless FreeRDP transport with a session pool ([#1226](https://github.com/OpenAdaptAI/OpenAdapt/pull/1226)). +- Font and layout drift halts with a named reason ([#1225](https://github.com/OpenAdaptAI/OpenAdapt/pull/1225)); fleet drift patches import as policy-gated repair candidates ([#1211](https://github.com/OpenAdaptAI/OpenAdapt/pull/1211)); an unattended on-prem service with health checks and an egress audit ([#1222](https://github.com/OpenAdaptAI/OpenAdapt/pull/1222), [#1237](https://github.com/OpenAdaptAI/OpenAdapt/pull/1237)). +- A workflow registry and `openadapt-flow pull` ([openadapt-flow#517](https://github.com/OpenAdaptAI/openadapt-flow/pull/517)). +- OpenEMR qualification path: verifier, fault driver, and six cases for the local registration bundle ([openadapt-flow#518](https://github.com/OpenAdaptAI/openadapt-flow/pull/518)). + +### Performance + +- The demo uses the installed browser, one browser process, and an early OpenCV load ([#1189](https://github.com/OpenAdaptAI/OpenAdapt/pull/1189), from [openadapt-flow#528](https://github.com/OpenAdaptAI/openadapt-flow/pull/528)); native OCR starts faster and the OCR prewarm works ([#1199](https://github.com/OpenAdaptAI/OpenAdapt/pull/1199), from [openadapt-flow#535](https://github.com/OpenAdaptAI/openadapt-flow/pull/535)). + +### Fixes + +- A read of the identifier that contradicts the expected record is final; a later re-read can no longer overrule it into verified and act on the wrong record ([#1252](https://github.com/OpenAdaptAI/OpenAdapt/pull/1252), [#1254](https://github.com/OpenAdaptAI/OpenAdapt/pull/1254)). +- Five fail-open gaps closed: a JIT draft can't run without its admission, a planted approver policy is ignored, CLI replay runs the JIT run checks, and two compiler key drops are opt-in ([#1232](https://github.com/OpenAdaptAI/OpenAdapt/pull/1232)). +- The drift oracle never rescues a failed postcondition on an irreversible or effect-bearing step ([#1217](https://github.com/OpenAdaptAI/OpenAdapt/pull/1217)). +- A phone answer reaches a run that stopped waiting ([#1234](https://github.com/OpenAdaptAI/OpenAdapt/pull/1234)); `--help` no longer starts the OCR prewarm, which could abort the process at exit ([#1242](https://github.com/OpenAdaptAI/OpenAdapt/pull/1242)). +- The break-it run is described as a save set to fail ([#1236](https://github.com/OpenAdaptAI/OpenAdapt/pull/1236)); the contract schemas are listed in `public-artifacts.json` ([#1206](https://github.com/OpenAdaptAI/OpenAdapt/pull/1206)). +- CLI help and built-in URLs point at the docs glossary and the monorepo ([#1200](https://github.com/OpenAdaptAI/OpenAdapt/pull/1200)). +- Benchmarks fetch the openIMIS and OpenEMR compose files from upstream at run time ([openadapt-flow#523](https://github.com/OpenAdaptAI/openadapt-flow/pull/523)). +- uv.lock bumps fsspec, urllib3, mako, and oauthlib for open Dependabot alerts ([openadapt-flow#524](https://github.com/OpenAdaptAI/openadapt-flow/pull/524)). + ## v2.1.0 (2026-10-16) ### Features diff --git a/packages/flow/openadapt_flow/__init__.py b/packages/flow/openadapt_flow/__init__.py index 3d6247224..3512b07b2 100644 --- a/packages/flow/openadapt_flow/__init__.py +++ b/packages/flow/openadapt_flow/__init__.py @@ -1,6 +1,6 @@ """openadapt-flow: record, compile, replay deterministically, heal on drift.""" -__version__ = "2.1.0" +__version__ = "2.2.0" from openadapt_flow.ir import ( # noqa: F401 ActionKind, diff --git a/packages/flow/openadapt_flow/agent/__init__.py b/packages/flow/openadapt_flow/agent/__init__.py index 62d55c9fa..51398cdbd 100644 --- a/packages/flow/openadapt_flow/agent/__init__.py +++ b/packages/flow/openadapt_flow/agent/__init__.py @@ -21,6 +21,6 @@ for a trusted client in the same data boundary. """ -__version__ = "2.2.0" +__version__ = "2.2.1" __all__ = ["__version__"] diff --git a/packages/flow/pyproject.toml b/packages/flow/pyproject.toml index 58cc9d83d..e9d77a665 100644 --- a/packages/flow/pyproject.toml +++ b/packages/flow/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "openadapt-flow" -version = "2.1.0" +version = "2.2.0" description = "Compile demonstrated GUI workflows into deterministic local replay with governed repair and refusal" readme = "README.md" license = { text = "MIT" } diff --git a/packages/flow/uv.lock b/packages/flow/uv.lock index 24b2cb0d3..fe2e41fd7 100644 --- a/packages/flow/uv.lock +++ b/packages/flow/uv.lock @@ -1831,7 +1831,7 @@ wheels = [ [[package]] name = "openadapt-flow" -version = "2.1.0" +version = "2.2.0" source = { editable = "." } dependencies = [ { name = "cryptography" }, diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index c09337172..721f2d5ce 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,6 +1,15 @@ # CHANGELOG +## v0.23.0 (2026-10-18) + +First release from the [OpenAdapt monorepo](https://github.com/OpenAdaptAI/OpenAdapt) (`packages/types`). The models now live in `openadapt_flow.contracts`; this package re-exports them, so `import openadapt_types` keeps working. It requires `openadapt-flow>=2.2.0,<3`. + +### Features + +- **approval**: Approver identity, approver policy, and an approval record ([#1187](https://github.com/OpenAdaptAI/OpenAdapt/pull/1187), from [openadapt-types#49](https://github.com/OpenAdaptAI/openadapt-types/pull/49)). + + ## v0.22.0 (2026-10-17) ### Documentation diff --git a/packages/types/pyproject.toml b/packages/types/pyproject.toml index 89ee28efb..1c3b61b8d 100644 --- a/packages/types/pyproject.toml +++ b/packages/types/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "openadapt-types" -version = "0.22.0" +version = "0.23.0" description = "Pydantic models for computer-use agents: screen state (ComputerState, UINode), actions (Action), and results (ActionResult)" readme = "README.md" license = "MIT" @@ -25,11 +25,10 @@ classifiers = [ "Typing :: Typed", ] # Compatibility shim: the contracts live in openadapt-flow as -# openadapt_flow.contracts. The release workflow pins this to the exact -# openadapt-flow version it ships with. Python 3.13+ resolves to 0.21.x, the -# last standalone release. +# openadapt_flow.contracts, first shipped in openadapt-flow 2.2.0, so that is +# the floor. Python 3.13+ resolves to 0.21.x, the last standalone release. dependencies = [ - "openadapt-flow>=2.1.0,<3", + "openadapt-flow>=2.2.0,<3", ] [project.scripts] diff --git a/packages/types/uv.lock b/packages/types/uv.lock index f2b61f3db..7569fe9e5 100644 --- a/packages/types/uv.lock +++ b/packages/types/uv.lock @@ -160,7 +160,7 @@ wheels = [ [[package]] name = "openadapt-types" -version = "0.22.0" +version = "0.23.0" source = { editable = "." } dependencies = [ { name = "pydantic" },