diff --git a/CHANGELOG.md b/CHANGELOG.md index 114bbdeb65..b58aa349d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ +## v1.20.0 (2026-11-04) + +### Requirements + +- Require `openadapt-flow>=2.6.0,<3.0.0` in the base install and every Flow + extra. `openadapt doctor` and `openadapt deploy` report older Flow releases + as unsupported. This supplies the persistent owed-recheck API used by + ledger listing. + +### Features + +- `openadapt verify ledger list` shows provisional confirmed writes whose + rechecks are still owed, with their due time and actor. Owed rechecks remain + visible after the server restarts and disappear when the recheck completes. + An empty ledger reports that no held writes, open writes or owed rechecks + remain. +- The platform manifest and compatibility report select published component + releases, including Desktop 0.25.1. + ## v1.19.0 (2026-11-02) ### Breaking Changes diff --git a/docs/platform-compatibility-report.md b/docs/platform-compatibility-report.md index 2c1b4199d6..3278ecc665 100644 --- a/docs/platform-compatibility-report.md +++ b/docs/platform-compatibility-report.md @@ -2,7 +2,7 @@ -- Generated: `2026-11-03T00:23:35+00:00` +- Generated: `2026-11-04T22:39:52+00:00` - Selection: `explicit-published` - Compatibility: **dependency-compatible** - Signature: `unsigned (signing infrastructure pending)` @@ -11,22 +11,22 @@ | Role | Package | Version | Release source reference | Published artifacts | |---|---|---:|---|---| -| launcher | `openadapt` | `1.17.0` | [`v1.17.0`](https://github.com/OpenAdaptAI/OpenAdapt/tree/v1.17.0)
commit `e022d97ee8b3c3992f4a4cb6e522f1532fef0834`
tree `2e0efeaa337a26d3425320ffa8f9aa3ac31d3f9c` | `openadapt-1.17.0-py3-none-any.whl` `c33c069c8cd9c270562200339b631fb77423b5b7f24364b5f0a6a0730e5ca8b8`
`openadapt-1.17.0.tar.gz` `03926f94f4d9d37eeb8c6c9cbdc94516d43c0ace971f2282b3310d77d73b6547` | -| flow | `openadapt-flow` | `2.5.0` | [`openadapt-flow-v2.5.0`](https://github.com/OpenAdaptAI/OpenAdapt/tree/openadapt-flow-v2.5.0/packages/flow)
commit `5a3bf49a0bf2d662430386295a1c34036c064d58`
tree `cab536c90e79fcfe887b8876e884ec2ed651f23e` | `openadapt_flow-2.5.0-py3-none-any.whl` `1dbc5d42d103cfa8a452d95805dde60c7d460035ec4d81df5cc642a32f118339`
`openadapt_flow-2.5.0.tar.gz` `54d99e77976ee7d9e6bc171b2ea148497528ead77b226fdf6fd4713b37c689b3` | +| launcher | `openadapt` | `1.19.0` | [`v1.19.0`](https://github.com/OpenAdaptAI/OpenAdapt/tree/v1.19.0)
commit `1a64acd47bf6e60de20b7ac97993bd23122eb697`
tree `4ff3db2dc38334cd3957e66f89c95ea292abd9b8` | `openadapt-1.19.0-py3-none-any.whl` `0a6963404d5b2a83aa83f8701c017838a8d09878128264b729064515b722a8b4`
`openadapt-1.19.0.tar.gz` `fc513011804644133ba8c93d41979cf2136829316839afb870e5092079551887` | +| flow | `openadapt-flow` | `2.6.0` | [`openadapt-flow-v2.6.0`](https://github.com/OpenAdaptAI/OpenAdapt/tree/openadapt-flow-v2.6.0/packages/flow)
commit `1c832365d11e9dbe2a166485b13f7b8effd6d8d0`
tree `954b03e36d350803bec59046ffaf56c02c3d556b` | `openadapt_flow-2.6.0-py3-none-any.whl` `43718301bdb2579b1a78c60dfc025e8d60f2be9a3bc4172894c4194e0600fa9a`
`openadapt_flow-2.6.0.tar.gz` `4f1b2b9e28ec666c0e50ef2593d985ba387efc42bfb9b8f9f24148f6c8085112` | | capture | `openadapt-capture` | `1.2.2` | [`v1.2.2`](https://github.com/OpenAdaptAI/openadapt-capture/tree/v1.2.2)
commit `06ade22948c12dcc6608bd54b5cca5c9c306e77c`
tree `b0a3b5b53f23536e01314f36aa46fd5b2d8baba6` | `openadapt_capture-1.2.2-py3-none-any.whl` `550fffe50990fa8431d332bdd5fe4755976d83baa7ad62553f50ad9e4ddcd1ae`
`openadapt_capture-1.2.2.tar.gz` `6f4298d3daadf9cced8994207e34b3116a79209ef792e98f778a0770e2f3406c` | | privacy | `openadapt-privacy` | `1.1.2` | [`v1.1.2`](https://github.com/OpenAdaptAI/openadapt-privacy/tree/v1.1.2)
commit `9ae96d8ed73ea5b9e445d0604b5db48788936a04`
tree `fe59ca5f04fc99d16424e9228dcd797b05115cb8` | `openadapt_privacy-1.1.2-py3-none-any.whl` `6e542b2fea44bdf8872430687946ec805fef22dc7d228a56a1e65871beebe47a`
`openadapt_privacy-1.1.2.tar.gz` `d90287edaa13470955f15d5f6eeb37b075678aeb55de324f8b8207682009bcc2` | | types | `openadapt-types` | `0.24.0` | [`openadapt-types-v0.24.0`](https://github.com/OpenAdaptAI/OpenAdapt/tree/openadapt-types-v0.24.0/packages/types)
commit `f2f04c5b432d88b262d46103a542b0e2c3dcc8a9`
tree `38ccf341ec74a0dd0facc9f64343c27644a7ca7d` | `openadapt_types-0.24.0-py3-none-any.whl` `8025e8a4dc9235fd81d4b24ae7fa7e544120abdb8d4ee7df160e4f50d9230d75`
`openadapt_types-0.24.0.tar.gz` `16dcd1da1c2c78c08d650a19eb9cc439474f996812a87198b316d51bfac443db` | -| desktop | `openadapt-desktop` | `0.16.0` | [`v0.16.0`](https://github.com/OpenAdaptAI/openadapt-desktop/tree/v0.16.0)
commit `7c59750d37be09a2871cd1bada8cb0bce946d363`
tree `9a1307794df6f2c77ee3dab90973845f3d08ee53` | `openadapt_desktop-0.16.0-py3-none-any.whl` `06e608a934deef56c93ee1ca8de511d6daba08459626e8245bd0db4c391e64e9`
`openadapt_desktop-0.16.0.tar.gz` `15f0c59a4d481328da76f3e5aa6a29ab8cdced8ab183c97346d69b4c14c996ff` | +| desktop | `openadapt-desktop` | `0.25.1` | [`openadapt-desktop-v0.25.1`](https://github.com/OpenAdaptAI/OpenAdapt/tree/openadapt-desktop-v0.25.1/packages/desktop)
commit `b21a86d4a263f2bd8c4e8037e81f09457e998bdb`
tree `77acb2dfaab10e413f0d348ce98fbff9e24da752` | `openadapt_desktop-0.25.1-py3-none-any.whl` `5f55ecffe173d0f7740cbbf011c19b763a495d9e1b37054f4f6ccf16a07a7be2`
`openadapt_desktop-0.25.1.tar.gz` `5a9c22996b76a0efbcfa87d3710d88611ab2feb772de284d7233b9d38b04241b` | | agent | `openadapt-agent` | `2.2.1` | [`openadapt-agent-v2.2.1`](https://github.com/OpenAdaptAI/OpenAdapt/tree/openadapt-agent-v2.2.1/packages/agent)
commit `8d0758b9687744b07355c6512b6a57942bec4bb4`
tree `5300b0849929dd3051c57640ba6fcd74ac483728` | `openadapt_agent-2.2.1-py3-none-any.whl` `847499c4091144cb0c1bb1d2731ef064ae9cd844867c2b603acf573c6e12928a`
`openadapt_agent-2.2.1.tar.gz` `859e6b7d464ab813aba85af7f1f227ac9afcdb60112bc564719a82d3766fb733` | ## Runtime selections | Unit | Version | Selected or locked OpenAdapt packages | |---|---:|---| -| launcher_environment | `1.17.0` | `openadapt==1.17.0`
`openadapt-flow==2.5.0` | -| customer_runner | `2.5.0` | `openadapt-flow==2.5.0`
`openadapt-types==0.24.0` | -| desktop_sidecar | `0.16.0` | `openadapt-capture==1.2.1`
`openadapt-flow==1.34.0`
`openadapt-privacy==1.0.0`
`openadapt-types==0.10.0` | -| agent_bridge | `2.2.1` | `openadapt-agent==2.2.1`
`openadapt-flow==2.5.0` | +| launcher_environment | `1.19.0` | `openadapt==1.19.0`
`openadapt-flow==2.6.0` | +| customer_runner | `2.6.0` | `openadapt-flow==2.6.0`
`openadapt-types==0.24.0` | +| desktop_sidecar | `0.25.1` | `openadapt-capture==1.3.0`
`openadapt-flow==2.4.1`
`openadapt-privacy==1.1.3`
`openadapt-types==0.24.0` | +| agent_bridge | `2.2.1` | `openadapt-agent==2.2.1`
`openadapt-flow==2.6.0` | ## Selected-platform dependency compatibility @@ -34,33 +34,33 @@ These edges show whether each selected integration version satisfies its publish | Scope | Source | Target | Constraint | Selected | Activation | |---|---|---|---|---:|---| -| desktop-sidecar-lock | `openadapt-desktop==0.16.0` | `openadapt-capture` | `>=1.2.1` | `1.2.1` | `always` | -| desktop-sidecar-lock | `openadapt-desktop==0.16.0` | `openadapt-flow` | `==1.34.0` | `1.34.0` | `extra == "build"` | -| desktop-sidecar-lock | `openadapt-desktop==0.16.0` | `openadapt-privacy` | `>=1.0.0` | `1.0.0` | `always` | -| desktop-sidecar-lock | `openadapt-desktop==0.16.0` | `openadapt-types` | `==0.10.0` | `0.10.0` | `always` | -| selected-platform | `openadapt-agent==2.2.1` | `openadapt-flow` | `<3,>=2.2.0` | `2.5.0` | `always`
`extra == "tutorial"` | +| desktop-sidecar-lock | `openadapt-desktop==0.25.1` | `openadapt-capture` | `>=1.3.0` | `1.3.0` | `always` | +| desktop-sidecar-lock | `openadapt-desktop==0.25.1` | `openadapt-flow` | `==2.4.1` | `2.4.1` | `extra == "build"` | +| desktop-sidecar-lock | `openadapt-desktop==0.25.1` | `openadapt-privacy` | `>=1.0.0` | `1.1.3` | `always` | +| desktop-sidecar-lock | `openadapt-desktop==0.25.1` | `openadapt-types` | `<0.25.0,>=0.24.0` | `0.24.0` | `always` | +| selected-platform | `openadapt-agent==2.2.1` | `openadapt-flow` | `<3,>=2.2.0` | `2.6.0` | `always`
`extra == "tutorial"` | | selected-platform | `openadapt-agent==2.2.1` | `openadapt-privacy` | `>=1.1.2` | `1.1.2` | `extra == "repair-screens"` | | selected-platform | `openadapt-capture==1.2.2` | `openadapt-privacy` | `>=0.1.0` | `1.1.2` | `extra == "all"`
`extra == "privacy"` | -| selected-platform | `openadapt-flow==2.5.0` | `openadapt-capture` | `>=1.2.0` | `1.2.2` | `extra == "capture"` | -| selected-platform | `openadapt-flow==2.5.0` | `openadapt-privacy` | `>=1.0.0` | `1.1.2` | `extra == "privacy"` | -| selected-platform | `openadapt-flow==2.5.0` | `openadapt-types` | `<0.25.0,>=0.24.0` | `0.24.0` | `always` | -| selected-platform | `openadapt==1.17.0` | `openadapt-agent` | `<3,>=2.1.0` | `2.2.1` | `python_version < "3.13"`
`python_version < "3.13" and extra == "agent"`
`python_version < "3.13" and extra == "all"` | -| selected-platform | `openadapt==1.17.0` | `openadapt-capture` | `<2.0.0,>=1.2.0` | `1.2.2` | `extra == "all"`
`extra == "capture"`
`extra == "core"` | -| selected-platform | `openadapt==1.17.0` | `openadapt-flow` | `<3.0.0,>=2.0.0` | `2.5.0` | `(sys_platform == "darwin" and python_version < "3.13") and extra == "all"`
`(sys_platform == "darwin" and python_version < "3.13") and extra == "macos"`
`(sys_platform == "linux" and python_version < "3.13") and extra == "all"`
`(sys_platform == "linux" and python_version < "3.13") and extra == "linux"`
`python_version < "3.13"`
`python_version < "3.13" and extra == "all"`
`python_version < "3.13" and extra == "browser"`
`python_version < "3.13" and extra == "capture"`
`python_version < "3.13" and extra == "core"`
`python_version < "3.13" and extra == "flow"`
`python_version < "3.13" and extra == "privacy"`
`python_version < "3.13" and extra == "rdp"`
`python_version < "3.13" and extra == "windows"` | +| selected-platform | `openadapt-flow==2.6.0` | `openadapt-capture` | `>=1.2.0` | `1.2.2` | `extra == "capture"` | +| selected-platform | `openadapt-flow==2.6.0` | `openadapt-privacy` | `>=1.0.0` | `1.1.2` | `extra == "privacy"` | +| selected-platform | `openadapt-flow==2.6.0` | `openadapt-types` | `<0.25.0,>=0.24.0` | `0.24.0` | `always` | +| selected-platform | `openadapt==1.19.0` | `openadapt-agent` | `<3,>=2.1.0` | `2.2.1` | `python_version < "3.13"`
`python_version < "3.13" and extra == "agent"`
`python_version < "3.13" and extra == "all"` | +| selected-platform | `openadapt==1.19.0` | `openadapt-capture` | `<2.0.0,>=1.2.0` | `1.2.2` | `extra == "all"`
`extra == "capture"`
`extra == "core"` | +| selected-platform | `openadapt==1.19.0` | `openadapt-flow` | `<3.0.0,>=2.5.0` | `2.6.0` | `(sys_platform == "darwin" and python_version < "3.13") and extra == "all"`
`(sys_platform == "darwin" and python_version < "3.13") and extra == "macos"`
`(sys_platform == "linux" and python_version < "3.13") and extra == "all"`
`(sys_platform == "linux" and python_version < "3.13") and extra == "linux"`
`python_version < "3.13"`
`python_version < "3.13" and extra == "all"`
`python_version < "3.13" and extra == "browser"`
`python_version < "3.13" and extra == "capture"`
`python_version < "3.13" and extra == "core"`
`python_version < "3.13" and extra == "flow"`
`python_version < "3.13" and extra == "privacy"`
`python_version < "3.13" and extra == "rdp"`
`python_version < "3.13" and extra == "windows"` | ## Cross-component schemas | Contract | Owner | Accepted versions | Exact source | |---|---|---|---| -| `workflow_bundle` | `flow` | `schema_version` [1, 2] | [`packages/flow/openadapt_flow/bundle_validation.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/bundle_validation.py) `63532fb8e49f25a8aba8dccca505362a9293b8db9cbc0f2904dd8f9a6e23fea8`
[`packages/flow/openadapt_flow/ir.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/ir.py) `efb7fdce6fa625f631901389ca767b016f4db3111caa2905321ff3da675e376d` | +| `workflow_bundle` | `flow` | `schema_version` [1, 2] | [`packages/flow/openadapt_flow/bundle_validation.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/bundle_validation.py) `63532fb8e49f25a8aba8dccca505362a9293b8db9cbc0f2904dd8f9a6e23fea8`
[`packages/flow/openadapt_flow/ir.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/ir.py) `509e9ef8666ec65496b4b7afdd0b2bc8af4ba0663e64a4079ce1813950bf028e` | | `capture_structural_observation` | `capture` | `openadapt.capture.structural-observation/v` [1] | [`openadapt_capture/structural.py`](https://github.com/OpenAdaptAI/openadapt-capture/blob/06ade22948c12dcc6608bd54b5cca5c9c306e77c/openadapt_capture/structural.py) `8f8bce37148a3357ace147c46a7c45e6d5501b70622b24b1ac2490f2def304fc` | | `control_overlay_frame` | `types` | `openadapt.control-overlay-frame/v` [1, 2] | [`packages/types/openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/f2f04c5b432d88b262d46103a542b0e2c3dcc8a9/packages/types/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`
[`packages/types/openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/f2f04c5b432d88b262d46103a542b0e2c3dcc8a9/packages/types/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` | | `control_overlay_timeline` | `types` | `openadapt.control-overlay-timeline/v` [1, 2] | [`packages/types/openadapt_types/control_overlay.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/f2f04c5b432d88b262d46103a542b0e2c3dcc8a9/packages/types/openadapt_types/control_overlay.py) `3aa01f89b43e12478c9e2ff1a9e61689397370691d15247ded9dcd5b05242790`
[`packages/types/openadapt_types/control_overlay_tracking.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/f2f04c5b432d88b262d46103a542b0e2c3dcc8a9/packages/types/openadapt_types/control_overlay_tracking.py) `af8d934f0572c5f4e9c63ba720d4a1d0e73c8cdf3f7b87cc4562c01a8a551755` | | `human_decision_task` | `types` | `openadapt.human-decision-task/v` [1, 2] | [`packages/types/openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/f2f04c5b432d88b262d46103a542b0e2c3dcc8a9/packages/types/openadapt_types/human_decision.py) `0bb39a3575f511e10d01d92858b340982adee2f0fc20d2409441dbc0b2c55c4f` | | `human_decision_receipt` | `types` | `openadapt.human-decision-receipt/v` [1] | [`packages/types/openadapt_types/human_decision.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/f2f04c5b432d88b262d46103a542b0e2c3dcc8a9/packages/types/openadapt_types/human_decision.py) `0bb39a3575f511e10d01d92858b340982adee2f0fc20d2409441dbc0b2c55c4f` | -| `human_decision_relay` | `flow` | `openadapt.human-decision-relay/v` [2] | [`packages/flow/openadapt_flow/console/decision_relay.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/console/decision_relay.py) `d5320404d4342dbb52be1f2ead1cdb5cf0e22877feaaa1e47974b301df697292` | -| `remote_decision_projection` | `flow` | `openadapt.remote-decision-projection/v` [1] | [`packages/flow/openadapt_flow/console/human_decisions.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/console/human_decisions.py) `02651ad8888a5c17bfff6fb47165ba861193243dc0f7c951f8b94f544ca19477` | -| `runtime_validation` | `flow` | `openadapt.runtime-validation/v` [1, 2, 3] | [`packages/flow/openadapt_flow/runtime_validation.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/runtime_validation.py) `a5a220f570c5ee5769ac2f21d8d140bb69373d4de2ccc0ebfd08540122883f0e` | +| `human_decision_relay` | `flow` | `openadapt.human-decision-relay/v` [2] | [`packages/flow/openadapt_flow/console/decision_relay.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/console/decision_relay.py) `d5320404d4342dbb52be1f2ead1cdb5cf0e22877feaaa1e47974b301df697292` | +| `remote_decision_projection` | `flow` | `openadapt.remote-decision-projection/v` [1] | [`packages/flow/openadapt_flow/console/human_decisions.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/console/human_decisions.py) `02651ad8888a5c17bfff6fb47165ba861193243dc0f7c951f8b94f544ca19477` | +| `runtime_validation` | `flow` | `openadapt.runtime-validation/v` [1, 2, 3] | [`packages/flow/openadapt_flow/runtime_validation.py`](https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/runtime_validation.py) `a5a220f570c5ee5769ac2f21d8d140bb69373d4de2ccc0ebfd08540122883f0e` | ## Host operating systems @@ -82,5 +82,5 @@ Compatibility and delivery facts do not assign lifecycle state. Use the signed P ## Qualification evidence - [openadapt-public-status](https://openadapt.ai/status.json): Canonical machine-readable release, capability, and substrate qualification status, maintained in openadapt-web (public/status.json). -- [flow-public-demo-evidence-packs](https://github.com/OpenAdaptAI/OpenAdapt/tree/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/public-demo/evidence-packs): Versioned public evidence packs with per-pack manifest files, replay evidence, and fault-case results. -- [flow-effectbench-task-pack](https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/benchmark/effectbench/task_pack/manifest.json): Effect-verification benchmark task pack manifest used by the flow qualification harness. +- [flow-public-demo-evidence-packs](https://github.com/OpenAdaptAI/OpenAdapt/tree/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/public-demo/evidence-packs): Versioned public evidence packs with per-pack manifest files, replay evidence, and fault-case results. +- [flow-effectbench-task-pack](https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/benchmark/effectbench/task_pack/manifest.json): Effect-verification benchmark task pack manifest used by the flow qualification harness. diff --git a/openadapt/cli.py b/openadapt/cli.py index cb1306fc9e..28bb728ebb 100644 --- a/openadapt/cli.py +++ b/openadapt/cli.py @@ -849,9 +849,9 @@ def _warn_about_launcher_conflicts() -> None: _SECRET_REFERENCE = re.compile(r"^(?:env:[A-Z][A-Z0-9_]*|keychain:[^/\s]+/[^/\s]+)$") # Flow 1.33 and 1.34 probe four X11 libraries in the wrong case, so on Linux # they refuse to download Chromium on hosts that have them. 1.35.0 fixed it. -# Launcher 1.19 requires Flow 2.5: `openadapt shadow` forwards to its shadow -# command, and `openadapt verify serve` offers its recheck. -_SUPPORTED_FLOW_RANGE = ">=2.5.0,<3.0.0" +# Launcher 1.20 requires Flow 2.6: ledger listing uses its persistent +# owed-recheck API. +_SUPPORTED_FLOW_RANGE = ">=2.6.0,<3.0.0" _RDP_INSTALL_COMMAND = _pip_install("openadapt[rdp]") _CHROMIUM_SYSTEM_LIBS_COMMAND = ( f"{shlex.quote(sys.executable)} -m playwright install-deps chromium" @@ -861,7 +861,7 @@ def _warn_about_launcher_conflicts() -> None: def _supported_flow_version(value: str) -> bool: """Return whether a stable Flow version is in the launcher's supported range.""" parsed = _release_tuple(value) - return parsed is not None and (2, 5, 0) <= parsed < (3, 0, 0) + return parsed is not None and (2, 6, 0) <= parsed < (3, 0, 0) # The Python modules each native or remote Flow backend imports when its @@ -1350,12 +1350,23 @@ def verify_ledger() -> None: @verify_ledger.command("list") @_LEDGER_OPTION def verify_ledger_list(ledger_dir: Optional[str]) -> None: - """Show held and open writes: key, state, when it began, outcome.""" + """Show held and open writes: key, state, when it began, outcome. + + Also each provisional CONFIRMED whose recheck is still owed, with its due + time, so a recheck isn't lost when the server that holds it restarts. + """ ledger = _write_ledger(ledger_dir) rows = ledger.unresolved() - if not rows: - click.echo("No held or open writes.") + owed = ledger.rechecks_owed() + if not rows and not owed: + click.echo("No held or open writes. No rechecks owed.") return + for key, attempt in owed: + click.echo( + f"{key} recheck-owed began {attempt.begun.get('at')} " + f"due {attempt.recheck_owed} by {attempt.begun.get('actor_kind')}:" + f"{attempt.begun.get('actor_id')}" + ) for key, attempt in rows: outcome = (attempt.resolved or {}).get("outcome", "-") state = "review" if attempt.review else ledger.state(attempt) diff --git a/platform-manifest.json b/platform-manifest.json index a59c049229..751c5b7899 100644 --- a/platform-manifest.json +++ b/platform-manifest.json @@ -1,7 +1,7 @@ { "manifest_kind": "openadapt-platform-release-manifest", "schema_version": "2.0.0", - "generated_at": "2026-11-03T00:23:35+00:00", + "generated_at": "2026-11-04T22:39:52+00:00", "generation": { "files": [ { @@ -19,9 +19,9 @@ "component_versions": { "agent": "2.2.1", "capture": "1.2.2", - "desktop": "0.16.0", - "flow": "2.5.0", - "launcher": "1.17.0", + "desktop": "0.25.1", + "flow": "2.6.0", + "launcher": "1.19.0", "privacy": "1.1.2", "types": "0.24.0" } @@ -29,7 +29,7 @@ "components": { "launcher": { "package": "openadapt", - "version": "1.17.0", + "version": "1.19.0", "source": "pypi", "requires_python": ">=3.10", "requires": { @@ -43,7 +43,7 @@ ">=0.1.0" ], "openadapt-flow": [ - "<3.0.0,>=2.0.0" + "<3.0.0,>=2.5.0" ], "openadapt-grounding": [ ">=0.1.0" @@ -115,109 +115,109 @@ }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": null, "marker": "python_version < \"3.13\" and extra == \"all\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": null, "marker": "python_version < \"3.13\" and extra == \"flow\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "browser", "marker": "python_version < \"3.13\" and extra == \"all\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "browser", "marker": "python_version < \"3.13\" and extra == \"browser\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "browser,hosted", "marker": "python_version < \"3.13\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "capture", "marker": "python_version < \"3.13\" and extra == \"all\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "capture", "marker": "python_version < \"3.13\" and extra == \"capture\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "capture", "marker": "python_version < \"3.13\" and extra == \"core\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "linux", "marker": "(sys_platform == \"linux\" and python_version < \"3.13\") and extra == \"all\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "linux", "marker": "(sys_platform == \"linux\" and python_version < \"3.13\") and extra == \"linux\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "macos", "marker": "(sys_platform == \"darwin\" and python_version < \"3.13\") and extra == \"all\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "macos", "marker": "(sys_platform == \"darwin\" and python_version < \"3.13\") and extra == \"macos\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "privacy", "marker": "python_version < \"3.13\" and extra == \"all\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "privacy", "marker": "python_version < \"3.13\" and extra == \"privacy\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "rdp", "marker": "python_version < \"3.13\" and extra == \"all\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "rdp", "marker": "python_version < \"3.13\" and extra == \"rdp\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "windows", "marker": "python_version < \"3.13\" and extra == \"all\"" }, { "package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", + "requires": "<3.0.0,>=2.5.0", "extras": "windows", "marker": "python_version < \"3.13\" and extra == \"windows\"" }, @@ -284,29 +284,29 @@ ], "provenance": { "repository": "OpenAdaptAI/OpenAdapt", - "release_ref": "v1.17.0", - "commit": "e022d97ee8b3c3992f4a4cb6e522f1532fef0834", - "tree": "2e0efeaa337a26d3425320ffa8f9aa3ac31d3f9c", - "url": "https://github.com/OpenAdaptAI/OpenAdapt/tree/v1.17.0" + "release_ref": "v1.19.0", + "commit": "1a64acd47bf6e60de20b7ac97993bd23122eb697", + "tree": "4ff3db2dc38334cd3957e66f89c95ea292abd9b8", + "url": "https://github.com/OpenAdaptAI/OpenAdapt/tree/v1.19.0" }, "artifacts": [ { "type": "bdist_wheel", - "filename": "openadapt-1.17.0-py3-none-any.whl", - "url": "https://files.pythonhosted.org/packages/55/aa/1184cad0892f2531fe54d24b808a3b76fafc87b77ccd865435ce2387ebef/openadapt-1.17.0-py3-none-any.whl", - "sha256": "c33c069c8cd9c270562200339b631fb77423b5b7f24364b5f0a6a0730e5ca8b8" + "filename": "openadapt-1.19.0-py3-none-any.whl", + "url": "https://files.pythonhosted.org/packages/b4/23/925da0c3b52dde4e0eb26fed95c4c60d7e32bfe6c6678b05e85c9d9eb6ab/openadapt-1.19.0-py3-none-any.whl", + "sha256": "0a6963404d5b2a83aa83f8701c017838a8d09878128264b729064515b722a8b4" }, { "type": "sdist", - "filename": "openadapt-1.17.0.tar.gz", - "url": "https://files.pythonhosted.org/packages/19/8d/23723916889acfa5149e25c6eadf4aef0ca015aac72e0a9bf96a95eb4e57/openadapt-1.17.0.tar.gz", - "sha256": "03926f94f4d9d37eeb8c6c9cbdc94516d43c0ace971f2282b3310d77d73b6547" + "filename": "openadapt-1.19.0.tar.gz", + "url": "https://files.pythonhosted.org/packages/b4/12/e9eedc624f4451f88e423591876b753f3365714510866fb2cdb0382e5788/openadapt-1.19.0.tar.gz", + "sha256": "fc513011804644133ba8c93d41979cf2136829316839afb870e5092079551887" } ] }, "flow": { "package": "openadapt-flow", - "version": "2.5.0", + "version": "2.6.0", "source": "pypi", "requires_python": "<3.13,>=3.10", "requires": { @@ -351,24 +351,24 @@ ], "provenance": { "repository": "OpenAdaptAI/OpenAdapt", - "release_ref": "openadapt-flow-v2.5.0", - "commit": "5a3bf49a0bf2d662430386295a1c34036c064d58", - "tree": "cab536c90e79fcfe887b8876e884ec2ed651f23e", - "url": "https://github.com/OpenAdaptAI/OpenAdapt/tree/openadapt-flow-v2.5.0/packages/flow", + "release_ref": "openadapt-flow-v2.6.0", + "commit": "1c832365d11e9dbe2a166485b13f7b8effd6d8d0", + "tree": "954b03e36d350803bec59046ffaf56c02c3d556b", + "url": "https://github.com/OpenAdaptAI/OpenAdapt/tree/openadapt-flow-v2.6.0/packages/flow", "source_root": "packages/flow" }, "artifacts": [ { "type": "bdist_wheel", - "filename": "openadapt_flow-2.5.0-py3-none-any.whl", - "url": "https://files.pythonhosted.org/packages/7d/7b/76f2027c37fd059c0c1409cd6ca6c995da13fc5891c40b138f9b0cf1362f/openadapt_flow-2.5.0-py3-none-any.whl", - "sha256": "1dbc5d42d103cfa8a452d95805dde60c7d460035ec4d81df5cc642a32f118339" + "filename": "openadapt_flow-2.6.0-py3-none-any.whl", + "url": "https://files.pythonhosted.org/packages/8f/a8/4cdb822b1245b47cbc80a27d30ab285e0239e1bc5d69b2077ce5495dbb93/openadapt_flow-2.6.0-py3-none-any.whl", + "sha256": "43718301bdb2579b1a78c60dfc025e8d60f2be9a3bc4172894c4194e0600fa9a" }, { "type": "sdist", - "filename": "openadapt_flow-2.5.0.tar.gz", - "url": "https://files.pythonhosted.org/packages/b3/9e/c4b87cfdba0b1ae03d57062bad41686cb9b3affd46e901ee1749fcf1e5b8/openadapt_flow-2.5.0.tar.gz", - "sha256": "54d99e77976ee7d9e6bc171b2ea148497528ead77b226fdf6fd4713b37c689b3" + "filename": "openadapt_flow-2.6.0.tar.gz", + "url": "https://files.pythonhosted.org/packages/7c/e6/dbe17ef0adf7c0f66e762eb30d49bdf3cb665fe43b400b6b7e6ae1b3c590/openadapt_flow-2.6.0.tar.gz", + "sha256": "4f1b2b9e28ec666c0e50ef2593d985ba387efc42bfb9b8f9f24148f6c8085112" } ] }, @@ -479,33 +479,33 @@ }, "desktop": { "package": "openadapt-desktop", - "version": "0.16.0", + "version": "0.25.1", "source": "pypi", "requires_python": ">=3.11", "requires": { "openadapt-capture": [ - ">=1.2.1" + ">=1.3.0" ], "openadapt-flow": [ - "==1.34.0" + "==2.4.1" ], "openadapt-privacy": [ ">=1.0.0" ], "openadapt-types": [ - "==0.10.0" + "<0.25.0,>=0.24.0" ] }, "dependency_constraints": [ { "package": "openadapt-capture", - "requires": ">=1.2.1", + "requires": ">=1.3.0", "extras": null, "marker": null }, { "package": "openadapt-flow", - "requires": "==1.34.0", + "requires": "==2.4.1", "extras": "browser,console", "marker": "extra == \"build\"" }, @@ -517,30 +517,31 @@ }, { "package": "openadapt-types", - "requires": "==0.10.0", + "requires": "<0.25.0,>=0.24.0", "extras": null, "marker": null } ], "provenance": { - "repository": "OpenAdaptAI/openadapt-desktop", - "release_ref": "v0.16.0", - "commit": "7c59750d37be09a2871cd1bada8cb0bce946d363", - "tree": "9a1307794df6f2c77ee3dab90973845f3d08ee53", - "url": "https://github.com/OpenAdaptAI/openadapt-desktop/tree/v0.16.0" + "repository": "OpenAdaptAI/OpenAdapt", + "release_ref": "openadapt-desktop-v0.25.1", + "commit": "b21a86d4a263f2bd8c4e8037e81f09457e998bdb", + "tree": "77acb2dfaab10e413f0d348ce98fbff9e24da752", + "url": "https://github.com/OpenAdaptAI/OpenAdapt/tree/openadapt-desktop-v0.25.1/packages/desktop", + "source_root": "packages/desktop" }, "artifacts": [ { "type": "bdist_wheel", - "filename": "openadapt_desktop-0.16.0-py3-none-any.whl", - "url": "https://files.pythonhosted.org/packages/46/15/a08ec0d22de26b8ad7d38a6496ea18eaebb669f3910b7472821d851e209d/openadapt_desktop-0.16.0-py3-none-any.whl", - "sha256": "06e608a934deef56c93ee1ca8de511d6daba08459626e8245bd0db4c391e64e9" + "filename": "openadapt_desktop-0.25.1-py3-none-any.whl", + "url": "https://files.pythonhosted.org/packages/9c/fd/02310af2344b394cbc72901d73607b9816950e2246ce59d09e869bae916e/openadapt_desktop-0.25.1-py3-none-any.whl", + "sha256": "5f55ecffe173d0f7740cbbf011c19b763a495d9e1b37054f4f6ccf16a07a7be2" }, { "type": "sdist", - "filename": "openadapt_desktop-0.16.0.tar.gz", - "url": "https://files.pythonhosted.org/packages/82/6b/cd9bf7928765a71dab9f58b557499e05058c9ecee3ef30fd12963bd95729/openadapt_desktop-0.16.0.tar.gz", - "sha256": "15f0c59a4d481328da76f3e5aa6a29ab8cdced8ab183c97346d69b4c14c996ff" + "filename": "openadapt_desktop-0.25.1.tar.gz", + "url": "https://files.pythonhosted.org/packages/1e/b3/f93c118e93d03ff41f3c4db961cae256d7bbd157542e870d3afb36b8dd0f/openadapt_desktop-0.25.1.tar.gz", + "sha256": "5a9c22996b76a0efbcfa87d3710d88611ab2feb772de284d7233b9d38b04241b" } ] }, @@ -604,51 +605,51 @@ "runtime_units": { "launcher_environment": { "kind": "launcher-environment", - "version": "1.17.0", + "version": "1.19.0", "source_component": "launcher", "entry_point": "openadapt", "requirements": { - "openadapt": "==1.17.0", - "openadapt-flow": "<3.0.0,>=2.0.0" + "openadapt": "==1.19.0", + "openadapt-flow": "<3.0.0,>=2.5.0" }, "selected": { - "openadapt": "1.17.0", - "openadapt-flow": "2.5.0" + "openadapt": "1.19.0", + "openadapt-flow": "2.6.0" } }, "customer_runner": { "kind": "customer-controlled-runner", - "version": "2.5.0", + "version": "2.6.0", "source_component": "flow", "entry_point": "openadapt-flow", "requirements": { - "openadapt-flow": "==2.5.0", + "openadapt-flow": "==2.6.0", "openadapt-types": "<0.25.0,>=0.24.0" }, "selected": { - "openadapt-flow": "2.5.0", + "openadapt-flow": "2.6.0", "openadapt-types": "0.24.0" } }, "desktop_sidecar": { "kind": "frozen-desktop-sidecar", - "version": "0.16.0", + "version": "0.25.1", "source_component": "desktop", - "source_ref": "v0.16.0", - "lock_url": "https://raw.githubusercontent.com/OpenAdaptAI/openadapt-desktop/v0.16.0/uv.lock", - "lock_sha256": "9c2a57f02b96a7b505fba2b1cde0519968bd5744cd790cdb78bf86ce60008079", + "source_ref": "openadapt-desktop-v0.25.1", + "lock_url": "https://raw.githubusercontent.com/OpenAdaptAI/OpenAdapt/openadapt-desktop-v0.25.1/packages/desktop/uv.lock", + "lock_sha256": "7c06835915ca3314cf7f40630c4ac45a7e8329e3565c3dc96bf251fa845903bb", "binary": "openadapt-engine", "requirements": { - "openadapt-flow": "==1.34.0", - "openadapt-capture": ">=1.2.1", + "openadapt-flow": "==2.4.1", + "openadapt-capture": ">=1.3.0", "openadapt-privacy": ">=1.0.0", - "openadapt-types": "==0.10.0" + "openadapt-types": "<0.25.0,>=0.24.0" }, "resolved": { - "openadapt-capture": "1.2.1", - "openadapt-flow": "1.34.0", - "openadapt-privacy": "1.0.0", - "openadapt-types": "0.10.0" + "openadapt-capture": "1.3.0", + "openadapt-flow": "2.4.1", + "openadapt-privacy": "1.1.3", + "openadapt-types": "0.24.0" } }, "agent_bridge": { @@ -662,7 +663,7 @@ }, "selected": { "openadapt-agent": "2.2.1", - "openadapt-flow": "2.5.0" + "openadapt-flow": "2.6.0" } } }, @@ -671,11 +672,11 @@ "scope": "desktop-sidecar-lock", "source_role": "desktop", "source_package": "openadapt-desktop", - "source_version": "0.16.0", + "source_version": "0.25.1", "target_role": "capture", "target_package": "openadapt-capture", - "requires": ">=1.2.1", - "resolved": "1.2.1", + "requires": ">=1.3.0", + "resolved": "1.3.0", "activations": [ { "extras": null, @@ -687,11 +688,11 @@ "scope": "desktop-sidecar-lock", "source_role": "desktop", "source_package": "openadapt-desktop", - "source_version": "0.16.0", + "source_version": "0.25.1", "target_role": "flow", "target_package": "openadapt-flow", - "requires": "==1.34.0", - "resolved": "1.34.0", + "requires": "==2.4.1", + "resolved": "2.4.1", "activations": [ { "extras": "browser,console", @@ -703,11 +704,11 @@ "scope": "desktop-sidecar-lock", "source_role": "desktop", "source_package": "openadapt-desktop", - "source_version": "0.16.0", + "source_version": "0.25.1", "target_role": "privacy", "target_package": "openadapt-privacy", "requires": ">=1.0.0", - "resolved": "1.0.0", + "resolved": "1.1.3", "activations": [ { "extras": null, @@ -719,11 +720,11 @@ "scope": "desktop-sidecar-lock", "source_role": "desktop", "source_package": "openadapt-desktop", - "source_version": "0.16.0", + "source_version": "0.25.1", "target_role": "types", "target_package": "openadapt-types", - "requires": "==0.10.0", - "resolved": "0.10.0", + "requires": "<0.25.0,>=0.24.0", + "resolved": "0.24.0", "activations": [ { "extras": null, @@ -739,7 +740,7 @@ "target_role": "flow", "target_package": "openadapt-flow", "requires": "<3,>=2.2.0", - "resolved": "2.5.0", + "resolved": "2.6.0", "activations": [ { "extras": null, @@ -791,7 +792,7 @@ "scope": "selected-platform", "source_role": "flow", "source_package": "openadapt-flow", - "source_version": "2.5.0", + "source_version": "2.6.0", "target_role": "capture", "target_package": "openadapt-capture", "requires": ">=1.2.0", @@ -807,7 +808,7 @@ "scope": "selected-platform", "source_role": "flow", "source_package": "openadapt-flow", - "source_version": "2.5.0", + "source_version": "2.6.0", "target_role": "privacy", "target_package": "openadapt-privacy", "requires": ">=1.0.0", @@ -823,7 +824,7 @@ "scope": "selected-platform", "source_role": "flow", "source_package": "openadapt-flow", - "source_version": "2.5.0", + "source_version": "2.6.0", "target_role": "types", "target_package": "openadapt-types", "requires": "<0.25.0,>=0.24.0", @@ -839,7 +840,7 @@ "scope": "selected-platform", "source_role": "launcher", "source_package": "openadapt", - "source_version": "1.17.0", + "source_version": "1.19.0", "target_role": "agent", "target_package": "openadapt-agent", "requires": "<3,>=2.1.0", @@ -863,7 +864,7 @@ "scope": "selected-platform", "source_role": "launcher", "source_package": "openadapt", - "source_version": "1.17.0", + "source_version": "1.19.0", "target_role": "capture", "target_package": "openadapt-capture", "requires": "<2.0.0,>=1.2.0", @@ -887,11 +888,11 @@ "scope": "selected-platform", "source_role": "launcher", "source_package": "openadapt", - "source_version": "1.17.0", + "source_version": "1.19.0", "target_role": "flow", "target_package": "openadapt-flow", - "requires": "<3.0.0,>=2.0.0", - "resolved": "2.5.0", + "requires": "<3.0.0,>=2.5.0", + "resolved": "2.6.0", "activations": [ { "extras": null, @@ -979,19 +980,19 @@ ], "minimum": 1, "maximum": 2, - "source_commit": "5a3bf49a0bf2d662430386295a1c34036c064d58", + "source_commit": "1c832365d11e9dbe2a166485b13f7b8effd6d8d0", "source_files": [ { "path": "packages/flow/openadapt_flow/bundle_validation.py", - "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/bundle_validation.py", + "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/bundle_validation.py", "git_blob": "78c30442341699d497d934699154a72fe213791d", "sha256": "63532fb8e49f25a8aba8dccca505362a9293b8db9cbc0f2904dd8f9a6e23fea8" }, { "path": "packages/flow/openadapt_flow/ir.py", - "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/ir.py", - "git_blob": "fd235efbebf639c3f047eb0ca7421115733cfb85", - "sha256": "efb7fdce6fa625f631901389ca767b016f4db3111caa2905321ff3da675e376d" + "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/ir.py", + "git_blob": "494fa4722f0c76705b3e09f982c68938c5358e9d", + "sha256": "509e9ef8666ec65496b4b7afdd0b2bc8af4ba0663e64a4079ce1813950bf028e" } ] }, @@ -1108,11 +1109,11 @@ ], "minimum": 2, "maximum": 2, - "source_commit": "5a3bf49a0bf2d662430386295a1c34036c064d58", + "source_commit": "1c832365d11e9dbe2a166485b13f7b8effd6d8d0", "source_files": [ { "path": "packages/flow/openadapt_flow/console/decision_relay.py", - "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/console/decision_relay.py", + "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/console/decision_relay.py", "git_blob": "297d2f71727f83496221091a4237d704c25665d6", "sha256": "d5320404d4342dbb52be1f2ead1cdb5cf0e22877feaaa1e47974b301df697292" } @@ -1126,11 +1127,11 @@ ], "minimum": 1, "maximum": 1, - "source_commit": "5a3bf49a0bf2d662430386295a1c34036c064d58", + "source_commit": "1c832365d11e9dbe2a166485b13f7b8effd6d8d0", "source_files": [ { "path": "packages/flow/openadapt_flow/console/human_decisions.py", - "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/console/human_decisions.py", + "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/console/human_decisions.py", "git_blob": "caaf87396aca4770eace5eead3fdf6515e31fbfc", "sha256": "02651ad8888a5c17bfff6fb47165ba861193243dc0f7c951f8b94f544ca19477" } @@ -1146,11 +1147,11 @@ ], "minimum": 1, "maximum": 3, - "source_commit": "5a3bf49a0bf2d662430386295a1c34036c064d58", + "source_commit": "1c832365d11e9dbe2a166485b13f7b8effd6d8d0", "source_files": [ { "path": "packages/flow/openadapt_flow/runtime_validation.py", - "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/openadapt_flow/runtime_validation.py", + "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/openadapt_flow/runtime_validation.py", "git_blob": "fd6121209e50abcab41bb8b70f95ff2647d9303f", "sha256": "a5a220f570c5ee5769ac2f21d8d140bb69373d4de2ccc0ebfd08540122883f0e" } @@ -1170,7 +1171,7 @@ ">=0.1.0" ], "openadapt-flow": [ - ">=2.5.0,<3.0.0" + ">=2.6.0,<3.0.0" ], "openadapt-grounding": [ ">=0.1.0" @@ -1236,10 +1237,10 @@ "repository": "OpenAdaptAI/OpenAdapt", "path": "packages/flow/public-demo/evidence-packs", "description": "Versioned public evidence packs with per-pack manifest files, replay evidence, and fault-case results.", - "source_commit": "5a3bf49a0bf2d662430386295a1c34036c064d58", + "source_commit": "1c832365d11e9dbe2a166485b13f7b8effd6d8d0", "source_object_type": "tree", "source_object_sha": "2eac2252f62349e873b461866546dd0295169a19", - "url": "https://github.com/OpenAdaptAI/OpenAdapt/tree/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/public-demo/evidence-packs" + "url": "https://github.com/OpenAdaptAI/OpenAdapt/tree/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/public-demo/evidence-packs" }, { "id": "flow-effectbench-task-pack", @@ -1248,10 +1249,10 @@ "repository": "OpenAdaptAI/OpenAdapt", "path": "packages/flow/benchmark/effectbench/task_pack/manifest.json", "description": "Effect-verification benchmark task pack manifest used by the flow qualification harness.", - "source_commit": "5a3bf49a0bf2d662430386295a1c34036c064d58", + "source_commit": "1c832365d11e9dbe2a166485b13f7b8effd6d8d0", "source_object_type": "blob", "source_object_sha": "1c568d2289342e10e3556c5c46cd08a0e370ac84", - "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/5a3bf49a0bf2d662430386295a1c34036c064d58/packages/flow/benchmark/effectbench/task_pack/manifest.json" + "url": "https://github.com/OpenAdaptAI/OpenAdapt/blob/1c832365d11e9dbe2a166485b13f7b8effd6d8d0/packages/flow/benchmark/effectbench/task_pack/manifest.json" } ], "signature": { diff --git a/pyproject.toml b/pyproject.toml index a59fbe1195..42a50f5d4d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "openadapt" -version = "1.19.0" +version = "1.20.0" description = "Enters approved information into the apps your team already uses, checks that it saved, and stops for a person when something doesn't match." # The package description is README.md with its lifecycle block swapped for a # link to the live record; see hatch_build.py. @@ -59,10 +59,9 @@ dependencies = [ # The quickstart's terminal view (MIT). Pure Python; the engine doesn't # depend on it. Gated like the engine: without it the quickstart can't run. "rich>=13.0.0; python_version < '3.13'", - # Every Flow floor is 2.5.0: `openadapt shadow` forwards to Flow's shadow - # command, and `openadapt verify serve` offers its recheck, which 2.4 and - # earlier lack (tests/test_flow_floor.py). - "openadapt-flow[browser,hosted]>=2.5.0,<3.0.0; python_version < '3.13'", + # Every Flow floor is 2.6.0: ledger listing uses its persistent owed-recheck + # API (tests/test_flow_floor.py). + "openadapt-flow[browser,hosted]>=2.6.0,<3.0.0; python_version < '3.13'", # Day-1 partner kit: `pip install openadapt` must expose the # `openadapt-agent` command without a second package. 2.1.0 adds Seal checks; # `--bundles`; the bundle-free tutorial `serve --allow-run` needs a later @@ -77,7 +76,7 @@ browser = [ # launcher now selects this Flow contract because the bundled quickstart # uses the browser. OpenAdapt requests Chromium on first browser use after # the host dependency check passes. - "openadapt-flow[browser]>=2.5.0,<3.0.0; python_version < '3.13'", + "openadapt-flow[browser]>=2.6.0,<3.0.0; python_version < '3.13'", ] # Local human desktop recording. Flow owns the supported capture adapter # contract; the direct floor prevents an already-installed pre-1.0 Capture @@ -85,22 +84,22 @@ browser = [ # separately provisioned executable, not a Python-package dependency. capture = [ "openadapt-capture>=1.2.0,<2.0.0", - "openadapt-flow[capture]>=2.5.0,<3.0.0; python_version < '3.13'", + "openadapt-flow[capture]>=2.6.0,<3.0.0; python_version < '3.13'", ] # Replay substrate dependencies stay separate from capture: recording observes # the human on the local interactive desktop, while replay may target a WAA # agent, a native app, or a remote framebuffer. windows = [ - "openadapt-flow[windows]>=2.5.0,<3.0.0; python_version < '3.13'", + "openadapt-flow[windows]>=2.6.0,<3.0.0; python_version < '3.13'", ] macos = [ - "openadapt-flow[macos]>=2.5.0,<3.0.0; sys_platform == 'darwin' and python_version < '3.13'", + "openadapt-flow[macos]>=2.6.0,<3.0.0; sys_platform == 'darwin' and python_version < '3.13'", ] linux = [ - "openadapt-flow[linux]>=2.5.0,<3.0.0; sys_platform == 'linux' and python_version < '3.13'", + "openadapt-flow[linux]>=2.6.0,<3.0.0; sys_platform == 'linux' and python_version < '3.13'", ] rdp = [ - "openadapt-flow[rdp]>=2.5.0,<3.0.0; python_version < '3.13'", + "openadapt-flow[rdp]>=2.6.0,<3.0.0; python_version < '3.13'", ] ml = [ "openadapt-ml>=0.2.0", @@ -118,13 +117,13 @@ retrieval = [ "openadapt-retrieval>=0.1.0", ] privacy = [ - "openadapt-flow[privacy]>=2.5.0,<3.0.0; python_version < '3.13'", + "openadapt-flow[privacy]>=2.6.0,<3.0.0; python_version < '3.13'", ] # `flow` now ships in the base install (see `dependencies` above). This # extra is kept for backward compatibility so `pip install openadapt[flow]` # and the `all` bundle still resolve. flow = [ - "openadapt-flow>=2.5.0,<3.0.0; python_version < '3.13'", + "openadapt-flow>=2.6.0,<3.0.0; python_version < '3.13'", ] # `openadapt-agent` also ships in the base install. Keep the extra so # `pip install openadapt[agent]` still resolves. diff --git a/tests/test_cli_shell_hints.py b/tests/test_cli_shell_hints.py index 129718ff3c..4dd431f04e 100644 --- a/tests/test_cli_shell_hints.py +++ b/tests/test_cli_shell_hints.py @@ -95,12 +95,12 @@ def test_deploy_console_hint_is_double_quoted(monkeypatch, supported_python): "importlib.util.find_spec", lambda name, *args: object() if name in present else None, ) - monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.5.1") + monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.6.1") result = CliRunner().invoke(cli_main, ["deploy"]) assert result.exit_code == 0, result.output - assert '"openadapt-flow[console]==2.5.1"' in result.output + assert '"openadapt-flow[console]==2.6.1"' in result.output assert not _UNQUOTED_SPEC.search(result.output), result.output diff --git a/tests/test_cli_smoke.py b/tests/test_cli_smoke.py index 91f17f2afc..0b08f91c71 100644 --- a/tests/test_cli_smoke.py +++ b/tests/test_cli_smoke.py @@ -380,29 +380,29 @@ def test_launcher_flow_and_substrate_extras_metadata(): assert ( metadata["dependencies"].count( - f"openadapt-flow[browser,hosted]>=2.5.0,<3.0.0; {supported}" + f"openadapt-flow[browser,hosted]>=2.6.0,<3.0.0; {supported}" ) == 1 ) assert ( metadata["dependencies"].count(f"openadapt-agent>=2.1.0,<3; {supported}") == 1 ) - assert extras["flow"] == [f"openadapt-flow>=2.5.0,<3.0.0; {supported}"] + assert extras["flow"] == [f"openadapt-flow>=2.6.0,<3.0.0; {supported}"] assert extras["agent"] == [f"openadapt-agent>=2.1.0,<3; {supported}"] - assert extras["browser"] == [f"openadapt-flow[browser]>=2.5.0,<3.0.0; {supported}"] - assert extras["privacy"] == [f"openadapt-flow[privacy]>=2.5.0,<3.0.0; {supported}"] + assert extras["browser"] == [f"openadapt-flow[browser]>=2.6.0,<3.0.0; {supported}"] + assert extras["privacy"] == [f"openadapt-flow[privacy]>=2.6.0,<3.0.0; {supported}"] assert extras["capture"] == [ "openadapt-capture>=1.2.0,<2.0.0", - f"openadapt-flow[capture]>=2.5.0,<3.0.0; {supported}", + f"openadapt-flow[capture]>=2.6.0,<3.0.0; {supported}", ] - assert extras["windows"] == [f"openadapt-flow[windows]>=2.5.0,<3.0.0; {supported}"] + assert extras["windows"] == [f"openadapt-flow[windows]>=2.6.0,<3.0.0; {supported}"] assert extras["macos"] == [ - f"openadapt-flow[macos]>=2.5.0,<3.0.0; sys_platform == 'darwin' and {supported}" + f"openadapt-flow[macos]>=2.6.0,<3.0.0; sys_platform == 'darwin' and {supported}" ] assert extras["linux"] == [ - f"openadapt-flow[linux]>=2.5.0,<3.0.0; sys_platform == 'linux' and {supported}" + f"openadapt-flow[linux]>=2.6.0,<3.0.0; sys_platform == 'linux' and {supported}" ] - assert extras["rdp"] == [f"openadapt-flow[rdp]>=2.5.0,<3.0.0; {supported}"] + assert extras["rdp"] == [f"openadapt-flow[rdp]>=2.6.0,<3.0.0; {supported}"] assert extras["all"] == [ "openadapt[browser,core,grounding,retrieval,privacy,flow,windows,rdp,agent]", "openadapt[macos]; sys_platform == 'darwin'", @@ -433,7 +433,7 @@ def test_released_flow_x11_sonames_are_case_corrected(monkeypatch): ) -@pytest.mark.parametrize("version", ["2.5.0", "2.5.1", "2.99.0"]) +@pytest.mark.parametrize("version", ["2.6.0", "2.6.1", "2.99.0"]) def test_launcher_accepts_flow_versions_in_the_supported_range(version): assert _supported_flow_version(version) @@ -533,7 +533,7 @@ def test_deploy_native_backend_fails_without_its_platform_extra( monkeypatch, backend, host, modules, install ): _host(monkeypatch, host, {"openadapt_flow"}) - monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.5.0") + monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.6.0") result = CliRunner().invoke(cli_main, ["deploy", "--backend", backend]) @@ -550,7 +550,7 @@ def test_deploy_native_backend_passes_with_its_platform_extra( monkeypatch, backend, host, modules, install ): _host(monkeypatch, host, {"openadapt_flow"} | modules) - monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.5.0") + monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.6.0") result = CliRunner().invoke(cli_main, ["deploy", "--backend", backend]) @@ -690,7 +690,7 @@ def test_deploy_preflight_composes_existing_flow_interfaces_without_secrets( else None ), ) - monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.5.0") + monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.6.0") monkeypatch.setenv("BYOC_CONNECTOR_TOKEN", "connector-token-value") result = CliRunner().invoke( cli_main, @@ -715,13 +715,13 @@ def test_deploy_base_hosted_install_gives_conditional_console_setup(monkeypatch) "importlib.util.find_spec", lambda name: object() if name in {"openadapt_flow", "aardwolf"} else None, ) - monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.5.0") + monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.6.0") result = CliRunner().invoke(cli_main, ["deploy", "--backend", "rdp"]) assert result.exit_code == 0, result.output assert "optional local operator console is not installed" in result.output - assert 'python -m pip install "openadapt-flow[console]==2.5.0"' in result.output + assert 'python -m pip install "openadapt-flow[console]==2.6.0"' in result.output assert "openadapt flow console --bundles" not in result.output assert "Re-run this preflight" in result.output @@ -736,13 +736,13 @@ def test_deploy_console_requires_openadapt_types(monkeypatch): else None ), ) - monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.5.0") + monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.6.0") result = CliRunner().invoke(cli_main, ["deploy", "--backend", "rdp"]) assert result.exit_code == 0, result.output assert "optional local operator console is not installed" in result.output - assert 'python -m pip install "openadapt-flow[console]==2.5.0"' in result.output + assert 'python -m pip install "openadapt-flow[console]==2.6.0"' in result.output assert "openadapt flow console --bundles" not in result.output @@ -767,7 +767,7 @@ def test_deploy_preflight_fails_without_web_runtime(monkeypatch): "importlib.util.find_spec", lambda name: object() if name == "openadapt_flow" else None, ) - monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.5.0") + monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.6.0") result = CliRunner().invoke(cli_main, ["deploy", "--backend", "web"]) @@ -785,7 +785,7 @@ def test_deploy_preflight_fails_without_rdp_transport(monkeypatch): "importlib.util.find_spec", lambda name: object() if name == "openadapt_flow" else None, ) - monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.5.0") + monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.6.0") result = CliRunner().invoke(cli_main, ["deploy", "--backend", "rdp"]) @@ -807,7 +807,7 @@ def test_deploy_preflight_fails_for_unsupported_flow(monkeypatch, flow_version): assert result.exit_code != 0 assert "[UNSUPPORTED]" in result.output - assert ">=2.5.0,<3.0.0" in result.output + assert ">=2.6.0,<3.0.0" in result.output assert "Preflight passed" not in result.output diff --git a/tests/test_deploy_preflight_readiness.py b/tests/test_deploy_preflight_readiness.py index d1eef428ad..12ff5ac351 100644 --- a/tests/test_deploy_preflight_readiness.py +++ b/tests/test_deploy_preflight_readiness.py @@ -29,7 +29,7 @@ def _deploy(monkeypatch, args, installed=READY_WEB, host=None): "importlib.util.find_spec", lambda name: object() if name in installed else None, ) - monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.5.0") + monkeypatch.setattr("importlib.metadata.version", lambda _name: "2.6.0") return CliRunner().invoke(cli_main, ["deploy", *args]) diff --git a/tests/test_flow_floor.py b/tests/test_flow_floor.py index 751df09bcb..21c03b77c4 100644 --- a/tests/test_flow_floor.py +++ b/tests/test_flow_floor.py @@ -24,10 +24,10 @@ import tomli as tomllib ROOT = Path(__file__).resolve().parents[1] -# Launcher 1.19 requires Flow 2.5 (`openadapt shadow` and the recheck that -# `openadapt verify serve` offers), so 1.x and 2.0 to 2.4 are below the floor. -BELOW_FLOOR = ["1.29.0", "1.35.1", "2.0.0", "2.2.0", "2.4.1"] -ACCEPTED = "2.5.0" +# Launcher 1.20 requires Flow 2.6's persistent owed-recheck API. +# Keep every earlier rejection case, including the former 2.5 floor. +BELOW_FLOOR = ["1.29.0", "1.35.1", "2.0.0", "2.2.0", "2.4.1", "2.5.0", "2.5.1"] +ACCEPTED = "2.6.0" def _flow_requirements() -> list[Requirement]: diff --git a/tests/test_verify_command.py b/tests/test_verify_command.py index 088b6e00c1..9ce361a041 100644 --- a/tests/test_verify_command.py +++ b/tests/test_verify_command.py @@ -103,3 +103,30 @@ def test_verify_ledger_lists_and_releases_a_held_write(tmp_path) -> None: assert released.exit_code == 0, released.output listed = runner.invoke(main, ["verify", "ledger", "list", "--ledger", str(folder)]) assert "No held or open writes." in listed.output + + +def test_verify_ledger_lists_a_recheck_owed_until_it_runs(tmp_path) -> None: + ledger_mod = pytest.importorskip("openadapt_flow.write_ledger") + folder = tmp_path / "ledger" + ledger = ledger_mod.Ledger(ledger_mod.FileLedger(folder)) + key = "d" * 64 + due = "2026-01-01T00:02:00Z" + ledger.begun(key, "write-2", contract="c" * 64, actor_kind="agent", actor_id="bot") + ledger.resolved( + key, + "write-2", + outcome="CONFIRMED", + retry_safe=False, + delivered=True, + result={"outcome": "CONFIRMED", "provisional": True, "recheck_due_at": due}, + ) + runner = CliRunner() + listed = runner.invoke(main, ["verify", "ledger", "list", "--ledger", str(folder)]) + assert listed.exit_code == 0, listed.output + assert key in listed.output and "recheck-owed" in listed.output + assert f"due {due}" in listed.output + + ledger.rechecked(key, "write-2", outcome="CONFIRMED") + listed = runner.invoke(main, ["verify", "ledger", "list", "--ledger", str(folder)]) + assert "recheck-owed" not in listed.output + assert "No rechecks owed." in listed.output diff --git a/uv.lock b/uv.lock index 9b636a0e1b..48a0fc1748 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", @@ -7,10 +7,10 @@ resolution-markers = [ "python_full_version == '3.13.*' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform != 'win32'", "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform == 'darwin'", - "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform == 'linux'", - "python_full_version < '3.11' and sys_platform == 'linux'", "python_full_version >= '3.11' and python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'linux'", + "python_full_version < '3.11' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'linux'", "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32'", "python_full_version < '3.11' and sys_platform == 'win32'", ] @@ -525,7 +525,7 @@ name = "build" version = "1.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "(python_full_version >= '3.13' and os_name == 'nt' and sys_platform == 'darwin') or (python_full_version >= '3.13' and os_name == 'nt' and sys_platform == 'linux') or (os_name == 'nt' and sys_platform != 'darwin' and sys_platform != 'linux')" }, + { name = "colorama", marker = "(python_full_version >= '3.13' and os_name == 'nt') or (os_name == 'nt' and sys_platform != 'darwin' and sys_platform != 'linux')" }, { name = "importlib-metadata", marker = "python_full_version < '3.10.2'" }, { name = "packaging" }, { name = "pyproject-hooks" }, @@ -3132,6 +3132,7 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version < '3.11' and sys_platform == 'linux'", + "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32'", "python_full_version < '3.11' and sys_platform == 'win32'", ] dependencies = [ @@ -3167,21 +3168,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b6/ca/862b1e7a639460f0ca25fd5b6135fb42cf9deea86d398a92e44dfda2279d/onnxruntime-1.23.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2b9233c4947907fd1818d0e581c049c41ccc39b2856cc942ff6d26317cee145", size = 17394184, upload-time = "2025-10-22T03:47:08.127Z" }, ] -[[package]] -name = "onnxruntime" -version = "1.24.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32'", -] -dependencies = [ - { name = "flatbuffers" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "sympy" }, -] - [[package]] name = "onnxruntime" version = "1.27.0" @@ -3245,7 +3231,7 @@ wheels = [ [[package]] name = "openadapt" -version = "1.19.0" +version = "1.20.0" source = { editable = "." } dependencies = [ { name = "click" }, @@ -3335,15 +3321,15 @@ requires-dist = [ { name = "openadapt-agent", marker = "python_full_version < '3.13' and extra == 'agent'", specifier = ">=2.1.0,<3" }, { name = "openadapt-capture", marker = "extra == 'capture'", specifier = ">=1.2.0,<2.0.0" }, { name = "openadapt-evals", marker = "extra == 'evals'", specifier = ">=0.1.0" }, - { name = "openadapt-flow", marker = "python_full_version < '3.13' and extra == 'flow'", specifier = ">=2.5.0,<3.0.0" }, - { name = "openadapt-flow", extras = ["browser"], marker = "python_full_version < '3.13' and extra == 'browser'", specifier = ">=2.5.0,<3.0.0" }, - { name = "openadapt-flow", extras = ["browser", "hosted"], marker = "python_full_version < '3.13'", specifier = ">=2.5.0,<3.0.0" }, - { name = "openadapt-flow", extras = ["capture"], marker = "python_full_version < '3.13' and extra == 'capture'", specifier = ">=2.5.0,<3.0.0" }, - { name = "openadapt-flow", extras = ["linux"], marker = "python_full_version < '3.13' and sys_platform == 'linux' and extra == 'linux'", specifier = ">=2.5.0,<3.0.0" }, - { name = "openadapt-flow", extras = ["macos"], marker = "python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'macos'", specifier = ">=2.5.0,<3.0.0" }, - { name = "openadapt-flow", extras = ["privacy"], marker = "python_full_version < '3.13' and extra == 'privacy'", specifier = ">=2.5.0,<3.0.0" }, - { name = "openadapt-flow", extras = ["rdp"], marker = "python_full_version < '3.13' and extra == 'rdp'", specifier = ">=2.5.0,<3.0.0" }, - { name = "openadapt-flow", extras = ["windows"], marker = "python_full_version < '3.13' and extra == 'windows'", specifier = ">=2.5.0,<3.0.0" }, + { name = "openadapt-flow", marker = "python_full_version < '3.13' and extra == 'flow'", specifier = ">=2.6.0,<3.0.0" }, + { name = "openadapt-flow", extras = ["browser"], marker = "python_full_version < '3.13' and extra == 'browser'", specifier = ">=2.6.0,<3.0.0" }, + { name = "openadapt-flow", extras = ["browser", "hosted"], marker = "python_full_version < '3.13'", specifier = ">=2.6.0,<3.0.0" }, + { name = "openadapt-flow", extras = ["capture"], marker = "python_full_version < '3.13' and extra == 'capture'", specifier = ">=2.6.0,<3.0.0" }, + { name = "openadapt-flow", extras = ["linux"], marker = "python_full_version < '3.13' and sys_platform == 'linux' and extra == 'linux'", specifier = ">=2.6.0,<3.0.0" }, + { name = "openadapt-flow", extras = ["macos"], marker = "python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'macos'", specifier = ">=2.6.0,<3.0.0" }, + { name = "openadapt-flow", extras = ["privacy"], marker = "python_full_version < '3.13' and extra == 'privacy'", specifier = ">=2.6.0,<3.0.0" }, + { name = "openadapt-flow", extras = ["rdp"], marker = "python_full_version < '3.13' and extra == 'rdp'", specifier = ">=2.6.0,<3.0.0" }, + { name = "openadapt-flow", extras = ["windows"], marker = "python_full_version < '3.13' and extra == 'windows'", specifier = ">=2.6.0,<3.0.0" }, { name = "openadapt-grounding", marker = "extra == 'grounding'", specifier = ">=0.1.0" }, { name = "openadapt-ml", marker = "extra == 'ml'", specifier = ">=0.2.0" }, { name = "openadapt-retrieval", marker = "extra == 'retrieval'", specifier = ">=0.1.0" }, @@ -3437,7 +3423,7 @@ wheels = [ [[package]] name = "openadapt-flow" -version = "2.5.0" +version = "2.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, @@ -3452,9 +3438,9 @@ dependencies = [ { name = "rapidocr-onnxruntime" }, { name = "tomli", marker = "python_full_version < '3.11' or python_full_version >= '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b3/9e/c4b87cfdba0b1ae03d57062bad41686cb9b3affd46e901ee1749fcf1e5b8/openadapt_flow-2.5.0.tar.gz", hash = "sha256:54d99e77976ee7d9e6bc171b2ea148497528ead77b226fdf6fd4713b37c689b3", size = 31358408, upload-time = "2026-11-03T00:16:39.944Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/e6/dbe17ef0adf7c0f66e762eb30d49bdf3cb665fe43b400b6b7e6ae1b3c590/openadapt_flow-2.6.0.tar.gz", hash = "sha256:4f1b2b9e28ec666c0e50ef2593d985ba387efc42bfb9b8f9f24148f6c8085112", size = 33981672, upload-time = "2026-11-04T22:21:34.154Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/7b/76f2027c37fd059c0c1409cd6ca6c995da13fc5891c40b138f9b0cf1362f/openadapt_flow-2.5.0-py3-none-any.whl", hash = "sha256:1dbc5d42d103cfa8a452d95805dde60c7d460035ec4d81df5cc642a32f118339", size = 4335676, upload-time = "2026-11-03T00:16:37.35Z" }, + { url = "https://files.pythonhosted.org/packages/8f/a8/4cdb822b1245b47cbc80a27d30ab285e0239e1bc5d69b2077ce5495dbb93/openadapt_flow-2.6.0-py3-none-any.whl", hash = "sha256:43718301bdb2579b1a78c60dfc025e8d60f2be9a3bc4172894c4194e0600fa9a", size = 4390728, upload-time = "2026-11-04T22:21:30.764Z" }, ] [package.optional-dependencies] @@ -4828,8 +4814,7 @@ version = "1.4.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, - { name = "onnxruntime", version = "1.23.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version >= '3.13' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version >= '3.13' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, - { name = "onnxruntime", version = "1.24.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32') or (python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux' and sys_platform != 'win32')" }, + { name = "onnxruntime", version = "1.23.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or python_full_version >= '3.13'" }, { name = "onnxruntime", version = "1.27.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.13'" }, { name = "opencv-python" }, { name = "pillow" },